diff --git a/.circleci/config.yml b/.circleci/config.yml index a4e3e5944b..c2de637bcf 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -61,7 +61,7 @@ run_save_node_bin: &run_save_node_bin build_machine_environment: &build_machine_environment # Specify that we want an actual machine (ala Circle 1.0), not a Docker image. docker: - - image: meteor/circleci + - image: meteor/circleci:android-28-node-12 environment: # This multiplier scales the waitSecs for selftests. TIMEOUT_SCALE_FACTOR: 8 @@ -93,8 +93,8 @@ build_machine_environment: &build_machine_environment SELF_TEST_TOOL_NODE_FLAGS: " " # Variables for load-balancing - NUM_GROUPS: 11 - RUNNING_AVG_LENGTH: 5 + NUM_GROUPS: 12 + RUNNING_AVG_LENGTH: 6 jobs: Get Ready: @@ -128,8 +128,9 @@ jobs: - package-npm-deps-cache-group2-v3- - restore_cache: keys: - - v2-other-deps-cache-{{ .Branch }}-{{ .Revision }} - - v2-other-deps-cache-{{ .Branch }}- + - v5-other-deps-cache-{{ .Branch }}-{{ checksum "meteor" }}-{{ .Revision }} + - v5-other-deps-cache-{{ .Branch }}-{{ checksum "meteor" }}- + - v5-other-deps-cache-{{ .Branch }}- - restore_cache: keys: - v1-test-groups-{{ .Branch }} @@ -147,6 +148,10 @@ jobs: name: Get Ready command: | eval $PRE_TEST_COMMANDS; + pushd tools + # Ensure that meteor/tools has no TypeScript errors. + ../meteor npx tsc --noEmit + popd ./meteor --get-ready # shouldn't take longer than 20 minutes no_output_timeout: 20m @@ -180,7 +185,6 @@ jobs: 'add debugOnly and prodOnly packages' \ --retries ${METEOR_SELF_TEST_RETRIES} \ --headless \ - --phantom no_output_timeout: 20m - run: name: "Running self-test (Custom Warehouse Tests)" @@ -190,7 +194,6 @@ jobs: --retries ${METEOR_SELF_TEST_RETRIES} \ --exclude "${SELF_TEST_EXCLUDE}" \ --headless \ - --phantom \ --with-tag "custom-warehouse" no_output_timeout: 20m - run: @@ -227,7 +230,6 @@ jobs: --retries ${METEOR_SELF_TEST_RETRIES} \ --exclude "${SELF_TEST_EXCLUDE}" \ --headless \ - --phantom \ --junit ./tmp/results/junit/0.xml \ --without-tag "custom-warehouse" no_output_timeout: 20m @@ -268,7 +270,6 @@ jobs: --retries ${METEOR_SELF_TEST_RETRIES} \ --exclude "${SELF_TEST_EXCLUDE}" \ --headless \ - --phantom \ --junit ./tmp/results/junit/1.xml \ --without-tag "custom-warehouse" no_output_timeout: 20m @@ -309,7 +310,6 @@ jobs: --retries ${METEOR_SELF_TEST_RETRIES} \ --exclude "${SELF_TEST_EXCLUDE}" \ --headless \ - --phantom \ --junit ./tmp/results/junit/2.xml \ --without-tag "custom-warehouse" no_output_timeout: 20m @@ -350,7 +350,6 @@ jobs: --retries ${METEOR_SELF_TEST_RETRIES} \ --exclude "${SELF_TEST_EXCLUDE}" \ --headless \ - --phantom \ --junit ./tmp/results/junit/3.xml \ --without-tag "custom-warehouse" no_output_timeout: 20m @@ -391,7 +390,6 @@ jobs: --retries ${METEOR_SELF_TEST_RETRIES} \ --exclude "${SELF_TEST_EXCLUDE}" \ --headless \ - --phantom \ --junit ./tmp/results/junit/4.xml \ --without-tag "custom-warehouse" no_output_timeout: 20m @@ -432,7 +430,6 @@ jobs: --retries ${METEOR_SELF_TEST_RETRIES} \ --exclude "${SELF_TEST_EXCLUDE}" \ --headless \ - --phantom \ --junit ./tmp/results/junit/5.xml \ --without-tag "custom-warehouse" no_output_timeout: 20m @@ -473,7 +470,6 @@ jobs: --retries ${METEOR_SELF_TEST_RETRIES} \ --exclude "${SELF_TEST_EXCLUDE}" \ --headless \ - --phantom \ --junit ./tmp/results/junit/6.xml \ --without-tag "custom-warehouse" no_output_timeout: 20m @@ -514,7 +510,6 @@ jobs: --retries ${METEOR_SELF_TEST_RETRIES} \ --exclude "${SELF_TEST_EXCLUDE}" \ --headless \ - --phantom \ --junit ./tmp/results/junit/7.xml \ --without-tag "custom-warehouse" no_output_timeout: 20m @@ -555,7 +550,6 @@ jobs: --retries ${METEOR_SELF_TEST_RETRIES} \ --exclude "${SELF_TEST_EXCLUDE}" \ --headless \ - --phantom \ --junit ./tmp/results/junit/8.xml \ --without-tag "custom-warehouse" no_output_timeout: 20m @@ -596,7 +590,6 @@ jobs: --retries ${METEOR_SELF_TEST_RETRIES} \ --exclude "${SELF_TEST_EXCLUDE}" \ --headless \ - --phantom \ --junit ./tmp/results/junit/9.xml \ --without-tag "custom-warehouse" no_output_timeout: 20m @@ -637,7 +630,6 @@ jobs: --retries ${METEOR_SELF_TEST_RETRIES} \ --exclude "${SELF_TEST_EXCLUDE}" \ --headless \ - --phantom \ --junit ./tmp/results/junit/10.xml \ --without-tag "custom-warehouse" no_output_timeout: 20m @@ -655,6 +647,47 @@ jobs: - store_artifacts: path: /tmp/memuse.txt + Test Group 11: + <<: *build_machine_environment + steps: + - run: + <<: *run_log_mem_use + - run: + <<: *run_env_change + - attach_workspace: + at: . + - run: + name: "Print environment" + command: printenv + - run: + name: "Running self-test (Browserstack Test)" + command: | + TEST_GROUP='css hot code push|custom minifier - devel vs prod|versioning hot code push|javascript hot code push|add packages client archs'; + echo $TEST_GROUP; + eval $PRE_TEST_COMMANDS; + ./meteor self-test \ + "$TEST_GROUP" \ + --browserstack \ + --retries ${METEOR_SELF_TEST_RETRIES} \ + --exclude "${SELF_TEST_EXCLUDE}" \ + --headless \ + --junit ./tmp/results/junit/11.xml \ + --without-tag "custom-warehouse" + no_output_timeout: 40m + - run: + <<: *run_save_node_bin + - store_test_results: + path: ./tmp/results + - persist_to_workspace: + root: . + paths: ./tmp/results/junit + - store_artifacts: + path: ./tmp/results + - store_artifacts: + path: /tmp/core_dumps + - store_artifacts: + path: /tmp/memuse.txt + # Test the JSDoc declarations which live within this codebase against the # Meteor Docs (https://github.com/meteor/docs) repository, where they'll # eventually be consumed. This test aims to provide an early warning of @@ -664,14 +697,14 @@ jobs: Docs: docker: # This Node version should match that in the meteor/docs CircleCI config. - - image: circleci/node:8 + - image: meteor/circleci:android-28-node-12 environment: CHECKOUT_METEOR_DOCS: /home/circleci/test_docs steps: - run: - name: Cloning "meteor/docs" Repository's "master" branch + name: Cloning "meteor/docs" Repository's "update-to-meteor-1.9" branch command: | - git clone https://github.com/meteor/docs.git ${CHECKOUT_METEOR_DOCS} + git clone --branch update-to-meteor-1.9 https://github.com/meteor/docs.git ${CHECKOUT_METEOR_DOCS} # The "docs" repository normally brings in the Meteor code as a Git # submodule checked out into the "code" directory. As the goal of this # test is to run it against the _current_ repository's code, we'll move @@ -764,7 +797,7 @@ jobs: - packages/fetch/.npm/package/node_modules - packages/non-core/mongo-decimal/.npm/package/node_modules - save_cache: - key: v2-other-deps-cache-{{ .Branch }}-{{ .Revision }} + key: v5-other-deps-cache-{{ .Branch }}-{{ checksum "meteor" }}-{{ .Revision }} paths: - ".babel-cache" - ".meteor" @@ -811,6 +844,9 @@ workflows: - Test Group 10: requires: - Get Ready + - Test Group 11: + requires: + - Get Ready - Clean Up: requires: - Isolated Tests @@ -825,3 +861,4 @@ workflows: - Test Group 8 - Test Group 9 - Test Group 10 + - Test Group 11 diff --git a/.eslintignore b/.eslintignore index 42f463beff..50cced0770 100644 --- a/.eslintignore +++ b/.eslintignore @@ -27,19 +27,18 @@ tools/deploy.js tools/fiber-helpers.js tools/fs/files.js tools/fs/mini-files.js -tools/func-utils.js tools/http-helpers.js tools/inspector.js tools/index.js -tools/mongo-exit-codes.js -tools/processes.js -tools/progress.js +tools/mongo-exit-codes.ts +tools/processes.ts +tools/progress.ts tools/project-context.js tools/runners/run-log.js tools/fs/safe-pathwatcher.js tools/selftest.js tools/service-connection.js -tools/shell-client.js +tools/shell-client.ts tools/stats.js tools/test-utils.js tools/upgraders.js diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 758bfb59fe..4cf028179a 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,7 +1,6 @@ diff --git a/.mailmap b/.mailmap index 636b51410b..afea9abd97 100644 --- a/.mailmap +++ b/.mailmap @@ -13,7 +13,7 @@ # A command-line way to get the GitHub username for an author: # scripts/admin/find-author-github.sh 'User Name ' # (Note that this script always outputs GITHUB so you should manually -# check to see if they are an MDG employee!) +# check to see if they are an Meteor Software employee!) GITHUB: 0a- GITHUB: adnissen diff --git a/.travis.yml b/.travis.yml index 0cf166baac..0a82a67559 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,14 @@ language: node_js node_js: - - "8.11.1" + - "12.16.1" cache: directories: - ".meteor" - ".babel-cache" -script: TEST_PACKAGES_EXCLUDE="less" phantom=false ./packages/test-in-console/run.sh +script: + - export TEST_PACKAGES_EXCLUDE="less" + - export phantom=false + - travis_retry ./packages/test-in-console/run.sh sudo: false env: - CXX=g++-4.8 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 37c9d5b073..6e282adac1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,75 +17,65 @@ There are many ways to contribute to the Meteor Project. Here’s a list of tech - [Reviewing pull requests](CONTRIBUTING.md#reviewer) - [Maintaining a community package](CONTRIBUTING.md#community-package-maintainer) -There are also several ways to contribute to the Meteor Project outside of GitHub, like organizing or speaking at [Meetups](https://www.meetup.com/topics/meteor/) and events and helping to moderate our [forums](https://forums.meteor.com/). +There are also several ways to contribute to the Meteor Project outside of GitHub, like organizing or speaking at [Meetups](https://forums.meteor.com/c/meetups) and events and helping to moderate our [forums](https://forums.meteor.com/). If you can think of any changes to the project, [documentation](https://github.com/meteor/docs), or [guide](https://github.com/meteor/guide) that would improve the contributor experience, let us know by opening an issue in the correct repository! ### Finding work -We curate specific issues that would make great pull requests for community contributors by applying the `pull-requests-encouraged` label ([bugs](https://github.com/meteor/meteor/issues?q=is%3Aopen+is%3Aissue+label%3Apull-requests-encouraged) / [feature requests](https://github.com/meteor/meteor-feature-requests/issues?q=is%3Aopen+is%3Aissue+label%3Apull-requests-encouraged)). +Are you new here? Please check our issues `good-first-issue`: [core](https://github.com/meteor/meteor/labels/good%20first%20issue), [docs](https://github.com/meteor/docs/labels/good%20first%20issue), [guide](https://github.com/meteor/guide/labels/good%20first%20issue). -Issues which *also* have the `confirmed` label ([bugs](https://github.com/meteor/meteor/issues?q=is%3Aissue%20is%3Aopen%20label%3Apull-requests-encouraged%20label%3Aconfirmed) / [feature requests](https://github.com/meteor/meteor-feature-requests/issues?q=is%3Aissue%20is%3Aopen%20label%3Apull-requests-encouraged%20label%3Aconfirmed)) are considered to have their details clear enough to begin working on. +We curate specific issues that would make great pull requests for community contributors by applying the `ready` label. -Any issue which does not have the `confirmed` label still requires discussion on implementation details but input and positive commentary is welcome! Any pull request opened on an issue which is not `confirmed` is still welcome, however the pull-request is more likely to be sent back for reworking than a `confirmed` issue. If in doubt about the best way to implement something, please create additional conversation on the issue. +Any issue which does not have the `ready` label still requires discussion on implementation details but input and positive commentary is welcome! Any pull request opened on an issue which is not `confirmed` is still welcome, however the pull-request is more likely to be sent back for reworking than a `ready` issue. -Please note that `pull-requests-encouraged` issues with low activity will often be closed without being implemented. These issues are tagged with an additional [`not-implemented`](https://github.com/meteor/meteor/issues?utf8=✓&q=label%3Apull-requests-encouraged+label%3Anot-implemented) label, and can still be considered good candidates to work on. If you're interested in working on a closed and `not-implemented` issue, please let us know by posting on that issue. +If in doubt about the best way to implement something, please create additional conversation on the issue. You can also reach one of the [core committers](https://github.com/meteor/meteor/blob/devel/CONTRIBUTING.md#core-committer) and they will help you to find something interesting to work on. ### Project roles -We’ve just begun to create more defined project roles for Meteor. Here are descriptions of the existing project roles, along with the current contributors taking on those roles today. +Here are descriptions of the existing project roles, along with the current contributors taking on those roles today. #### Issue Triager -Issue Triagers are members of the community that meet with us weekly to help triage Meteor’s open issues and bug reports. Once you’ve begun triaging issues regularly on your own, we will invite you to join our dedicated Slack channel to participate in these regular coordination sessions. +Issue Triagers are members of the community that help every week with Meteor’s open issues and bug reports. Current Issue Triagers: -- [@hwillson](https://github.com/hwillson) -- [@laosb](https://github.com/laosb) -- [@abernix](https://github.com/abernix) -- [@lorensr](https://github.com/lorensr) +- [meteor](https://github.com/meteor/meteor) + - [@klaussner](https://github.com/klaussner) + +- [docs](https://github.com/meteor/docs) / [guide](https://github.com/meteor/guide) + - [@lorensr](https://github.com/lorensr) #### Reviewer -Our most regular and experienced Issue Triagers sometimes move on to doing code reviews for pull requests, and have input into which pull requests should be merged. +Reviwers are members of the community that help with Pull Requests reviews. Current Reviewers: -- [@hwillson](https://github.com/hwillson) -- [@lorensr](https://github.com/lorensr) -- [@abernix](https://github.com/abernix) +- [meteor](https://github.com/meteor/meteor) + - [@klaussner](https://github.com/klaussner) + - [@zodern](https://github.com/zodern) + - [@StorytellerCZ](https://github.com/StorytellerCZ) + - [@sebakerckhof](https://github.com/sebakerckhof) + - [@filipenevola](https://github.com/filipenevola) + - [@renanccastro](https://github.com/renanccastro) + +- [docs](https://github.com/meteor/docs) / [guide](https://github.com/meteor/guide) + - [@lorensr](https://github.com/lorensr) + - [@filipenevola](https://github.com/filipenevola) + - [@renanccastro](https://github.com/renanccastro) #### Core Committer -For now, the only contributors with commit access to meteor/meteor are employees of Meteor Development Group, the company that sponsors the Meteor project. We're actively exploring adding non-MDG core committers who have distinguished themselves in other contribution areas. - -Project Lead: [@benjamn](https://github.com/benjamn) +The contributors with commit access to meteor/meteor are employees of Meteor Software Ltd or community members who have distinguished themselves in other contribution areas. If you want to become a core committer please start writing PRs. Current Core Committers: -- [@abernix](https://github.com/abernix) -- [@glasser](https://github.com/glasser) -- [@stubailo](https://github.com/stubailo) +- [@filipenevola](https://github.com/filipenevola) +- [@renanccastro](https://github.com/renanccastro) +- [@denihs](https://github.com/denihs) -#### Documentation Maintainer +#### Developer Evangelist -Documentation Maintainers are regular documentation contributors that have been given the ability to merge docs changes on [meteor/docs](https://github.com/meteor/docs). - -Current Documentation Maintainers: -- [@abernix](https://github.com/abernix) -- [@lorensr](https://github.com/lorensr) - -#### Community Package Maintainer: - -Community package maintainers are community members who maintain packages outside of Meteor core. This requires code to be extracted from meteor/meteor, and entails a high level of responsibility. For this reason, community maintainers generally (and currently) must first become an advanced contributor to Meteor core and have 4-5 non-trivial pull requests merged that went through the proper contribution work-flow. At that point, core contributors may make the case for breaking out a particular core package, and assist in the technical process around doing so. - -Current Community Package Maintainers: -- [@mitar](https://github.com/mitar) for [Blaze](https://github.com/meteor/blaze) - -#### Community Manager - -The community manager helps to coordinate resources, documentation, events, and other supportive work needed to ensure the health of the Meteor project. - -Current Community Manager: -- [@theadactyl](https://github.com/theadactyl) +- [@filipenevola](https://github.com/filipenevola) (Feel free to reach him out on [Twitter](https://twitter.com/FilipeNevola)) ### Tracking project work @@ -104,14 +94,16 @@ isn't a security risk, please file a report in > will page the security team. A Meteor app has many moving parts, and it's often difficult to -reproduce a bug based on just a few lines of code. So your report -should include a reproduction recipe. By making it as easy as possible +reproduce a bug based on just a few lines of code. So your report +should include a link to a repository with a reproduction. By making it as easy as possible for others to reproduce your bug, you make it easier for your bug to be -fixed. **It's likely that without a reproduction, contributors won't look into fixing your issue and it will end up being closed.** +fixed. -**A single code snippet is _not_ a reproduction recipe and neither is an entire application.** +**It's likely that without a reproduction, contributors won't look into fixing your issue and it will end up being closed.** -A reproduction recipe works like this: +**A single code snippet is _not_ a reproduction and neither is an entire application.** + +A reproduction works like this: * Create a new Meteor app that displays the bug with as little code as possible. Try to delete any code that is unrelated to the precise bug @@ -137,6 +129,8 @@ A reproduction recipe works like this: * Mention what operating system you're using and what browser (if any). +If you can't provide a reproduction make this very clear in the issue and explain why that is the case. + If you want to submit a pull request that fixes your bug, that's even better. We love getting bugfix pull requests. Just make sure they're written with the [correct style](DEVELOPMENT.md#code-style) and *come with tests*. Read further down @@ -147,9 +141,7 @@ for more details on proposing changes to core code. Feature requests are tracked in the [meteor/meteor-feature-requests](https://github.com/meteor/meteor-feature-requests) repository, and include a label that corresponds to the Meteor subproject that they are a part of. Meteor is a big project with [many sub-projects](https://github.com/meteor/meteor/tree/devel/packages). -There aren't as many [core developers (we're hiring!)](https://www.meteor.io/jobs/) -as there are sub-projects, so we're not able to work on every single sub-project every -month. We use our [roadmap](Roadmap.md) to communicate the high-level features we're currently prioritizing. +Community is welcome to help in all the sub-projects. We use our [roadmap](Roadmap.md) to communicate the high-level features we're currently prioritizing. Every additional feature adds a maintenance cost in addition to its value. This cost starts with the work of writing the feature or reviewing a community pull @@ -168,9 +160,11 @@ Finally, you can show your support for (or against!) features by using [GitHub r A great way to contribute to Meteor is by helping keep the issues in the repository clean and well organized. This process is called 'issue triage' and the steps are described [here](ISSUE_TRIAGE.md). +Learn how we use GitHub labels [here](LABELS.md) + ## Documentation -If you'd like to contribute to Meteor's documentation, head over to https://github.com/meteor/docs and create issues or pull requests there. +If you'd like to contribute to Meteor's documentation, head over to https://github.com/meteor/docs or https://github.com/meteor/guide and create issues or pull requests there. ## Blaze @@ -181,7 +175,7 @@ Blaze lives in its [own repository](https://github.com/meteor/blaze/) with its o Eventually you may want to change something in a core Meteor package, or in the `meteor` command line tool. These changes have the highest standards for API design, for the names of symbols, for documentation, -and for the code itself. Be prepared for a lot of work! +and for the code itself. It may take some study to get comfortable with Meteor's core architecture. Each core package is designed to stand separately. At the same time, all the parts of core fit together to make the @@ -220,22 +214,22 @@ For more information about how to work with Meteor core, take a look at the [Dev ### Proposing your change -You'll have the best chance of getting a change into core if you can build consensus in the community for it. Start by creating a well specified feature request as a Github issue, in the [meteor/meteor-feature-requests](https://github.com/meteor/meteor-feature-requests) repository. +You'll have the best chance of getting a change into core if you can build consensus in the community for it or if it is listed in the [roadmap](https://github.com/meteor/meteor/blob/devel/Roadmap.md). Start by creating a well specified feature request as a Github issue, in the [meteor/meteor-feature-requests](https://github.com/meteor/meteor-feature-requests) repository. -Help drive discussion and advocate for your feature on the Github ticket (and perhaps the forums). The higher the demand for the feature and the greater the clarity of it's specification will determine the likelihood of a core contributor prioritizing your feature by flagging it with the `pull-requests-encouraged` label. +Help drive discussion and advocate for your feature on the Github ticket (and perhaps the forums). The higher the demand for the feature and the greater the clarity of it's specification will determine the likelihood of a core contributor prioritizing your feature by flagging it with the `ready` label. Split features up into smaller, logically separate chunks. It is unlikely that large and complicated PRs will be merged. -Once your feature has been labelled with `pull-requests-encouraged`, leave a comment letting people know you're working on it and you can begin work on the code. +Once your feature has been labelled with `ready`, leave a comment letting people know you're working on it and you can begin work on the code. We have the label `in-development` to track the items in progress. ### Submitting pull requests -Once you've come up with a good design, go ahead and submit a pull request (PR). If your PR isn't against a bug with the `confirmed` label or a feature request with the `pull-requests-encouraged` label, don't expect your PR to be merged unless it's a trivial and obvious fix (e.g. documentation). When submitting a PR, please follow these guidelines: +Once you've come up with a good design, go ahead and submit a pull request (PR). When submitting a PR, please follow these guidelines: - * Sign the [contributor's agreement](http://contribute.meteor.com/). + * Sign the CLA (the bot will ask you do to this in the PR). * Base all your work off of the **devel** branch. The **devel** branch - is where active development happens. **We do not merge pull requests + is where active development happens. **We do not merge pull requests directly into master.** * Name your branch to match the feature/bug fix that you are @@ -249,12 +243,14 @@ Once you've come up with a good design, go ahead and submit a pull request (PR). [code contributions](DEVELOPMENT.md#code-style) and [commit messages](DEVELOPMENT.md#commit-messages) + + * Bump the version of the changed package accordingly + * If your changes are ok to be released without a whole new Meteor version bump just the patch, for example, 2.4.5 will become 2.4.6. + * If your changes need a new Meteor version because they are affecting many parts or they depend on changes in the meteor-tool bump the minor, for example, 2.4.5 will become 2.5.0. + * If your change is a major rewrite then bump the major, for example, 2.4.5 will become 3.0.0. + * If you bump anything that is not the patch you will need to wait a new Meteor version to have your changes available. This is how Meteor core packages work. * Be sure your author field in git is properly filled out with your full name and email address so we can credit you. -### Need help with your pull request? - -If you need help with a pull request, you should start by asking questions in the issue which it pertains to. If you feel that your pull request is almost ready or needs feedback which can only be demonstrated with code, go ahead and open a pull-request with as much progress as possible. By including a "[Work in Progress]" note in the subject, project contributors will know you need help! - -Submitting a pull request is no guarantee it will be accepted, but contributors will do their best to help move your pull request toward release. + * You can submit PRs that are not ready yet, submit them as Draft on GitHub and explain what is left and also if you need help. diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index e3b602b607..7a888d74df 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -65,6 +65,7 @@ When `meteor` is run from a checkout, a `dev_bundle` is automatically downloaded * Node.js version * npm version * MongoDB version +* TypeScript version * Packages [used by `meteor-tool`](scripts/dev-bundle-tool-package.js) * Packages [used by the server bundle](scripts/dev-bundle-server-package.js) @@ -94,15 +95,15 @@ This will generate a new tarball (`dev_bundle___.tar.gz ### Submitting "Dev Bundle" Pull Requests -It's important to note that while `dev_bundle` pull requests are accepted/reviewed, a new `dev_bundle` can only be published to MDG's Meteor infrastructure by an MDG staff member. This means that the build tool and package tests of submitted `dev_bundle` pull requests will always initially fail (since the new `dev_bundle` hasn't yet been built/published by MDG, which means it can't be downloaded by Meteor's continuous integration environment). +It's important to note that while `dev_bundle` pull requests are accepted/reviewed, a new `dev_bundle` can only be published to Meteor Software's Meteor infrastructure by an Meteor Software staff member. This means that the build tool and package tests of submitted `dev_bundle` pull requests will always initially fail (since the new `dev_bundle` hasn't yet been built/published by Meteor Software, which means it can't be downloaded by Meteor's continuous integration environment). -Pull requests that contain `dev_bundle` changes will be noted by repo collaborators, and a request to have a new `dev_bundle` built/published will be forwarded to MDG. +Pull requests that contain `dev_bundle` changes will be noted by repo collaborators, and a request to have a new `dev_bundle` built/published will be forwarded to Meteor Software. ## Additional documentation The Meteor core is best documented within the code itself, however, many components also have a `README.md` in their respective directories. -Some compartmentalized portions of Meteor are broken into packages ([see a list of packages](packages/)) and they almost all have a `README.md` within their directory. For example, [`ddp`](packages/ddp/README.md), [`ecmascript`](packages/ecmascript/README.md) and [`tinytest`](packages/tinytest/README.md). +Some compartmentalized portions of Meteor are broken into packages ([see a list of packages](packages/)) and almost all of them have a `README.md` within their directory. For example, [`ddp`](packages/ddp/README.md), [`ecmascript`](packages/ecmascript/README.md) and [`tinytest`](packages/tinytest/README.md). For the rest, try looking nearby for a `README.md`. For example, [`isobuild`](tools/isobuild/README.md) or [`cordova`](tools/cordova/README.md). @@ -110,10 +111,10 @@ For the rest, try looking nearby for a `README.md`. For example, [`isobuild`](t ### Test against the local meteor copy -When running any of tests, be sure run them against the checked-out copy of Meteor instead of +When running any tests, be sure to run them against the checked-out copy of Meteor instead of the globally-installed version. This means ensuring that the command is `path-to-meteor-checkout/meteor` and not just `meteor`. -This is important so that tests are run against the version in development and not the stable (installed) Meteor release. +This is important so that tests are run against your local development version and not the stable (installed) Meteor release. ### Running tests on Meteor core @@ -142,7 +143,7 @@ While TinyTest and the `test-packages` command can be used to test internal Mete #### Listing available tests -To see a list of the tests which are included in the self-test system, list them with the `--list` option: +To see a list of tests included in the self-test system, use the `--list` option: ./meteor self-test --list @@ -162,6 +163,13 @@ In a similar way to the method of specifying which tests TO run, there is a way Simply remove the `--list` flag to actually run the matching tests. +#### Avoiding retries + +On CI we want to retry the tests to avoid false failures but in development can take some time if you retry every time a test is failing. So to avoid retries use: + + ./meteor self-test --retries 0 + + #### More reading For even more details on how to run Meteor Tool "self tests", please refer to the [Testing section of the Meteor Tool README](https://github.com/meteor/meteor/blob/master/tools/README.md#testing). @@ -182,7 +190,7 @@ Since Meteor is a free, open-source project, you can run tests in the context of To enable CircleCI for your development: -1. Make sure you have an account with [CircleCI](https://circleci.com) +0. Make sure you have an account with [CircleCI](https://circleci.com) 0. Make sure you have [forked](https://help.github.com/articles/fork-a-repo/) [Meteor](https://github.com/meteor/meteor) into your own GitHub account. 0. Go to the [Add Projects](https://circleci.com/add-projects) page on CircleCI. 0. On the left, click on your GitHub username. @@ -201,7 +209,7 @@ To enable CircleCI for your development: ## Commit messages -Good commit messages are very important and you should make sure to explain what is changing and why. The commit message should include: +Good commit messages are very important and you should make sure to explain what is changing and why. The commit message should include: * A short and helpful commit title (maximum 80 characters). * A commit description which clearly explains the change if it's not super-obvious by the title. Some description always helps! diff --git a/History.md b/History.md index 53e80785fc..c1b430d547 100644 --- a/History.md +++ b/History.md @@ -1,4 +1,744 @@ -## v.NEXT +## vNEXT, unreleased + +### Breaking changes + +N/A + +### Migration steps + +N/A + +### Changes + +## v1.12, 2020-04-12 + +### Breaking changes + +- When importing types, you might need to use the "type" qualifier, like so: +```js +import { Point } from 'react-easy-crop/types'; +``` +to +```ts +import type { Point } from 'react-easy-crop/types'; +``` +Because now emitDecoratorsMetadata is enabled. + +- Refer to typescript breaking changes before migrating your existing project, from 3.7.6 to 4.1.2: https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes + +### Migration steps + +N/A + +### Changes + +#### Highlights +- TypeScript update from 3.7.6 to 4.1.2. + - enables decorators and metadata reflection. Important: these are stage 2 features so be aware that breaking changes could be introduced before they reach stage 3. + +#### Meteor Version Release +* `meteor-tool@1.12` + - updates TypeScript to 4.1.2. [#11225](https://github.com/meteor/meteor/pull/11225) and [#11255](https://github.com/meteor/meteor/pull/11255) + - adds new options for `meteor list` command (TODO pending link to updated doc). [#11165](https://github.com/meteor/meteor/pull/11165) + - supports Cordova add plugin command working again with plugin id or plugin name in the git URL as it was before Meteor 1.11. [#11202](https://github.com/meteor/meteor/pull/11202) + - avoids MiTM by downloading through https. [#11188](https://github.com/meteor/meteor/pull/11188) + +* `meteor-babel@7.10.7` + - updates TypeScript to 4.1.2 and enables decorators and metadata reflection. [#11225](https://github.com/meteor/meteor/pull/11225) and [#11255](https://github.com/meteor/meteor/pull/11255) + +* `minimongo@1.6.1` + - fixes a null reference exception, if an array contains null values while compiling a fields projection. [#10499](https://github.com/meteor/meteor/pull/10499). + +* `accounts-password@1.6.3` + - adds a new function `createUserVerifyingEmail` (TODO pending link to updated doc). [#11080](https://github.com/meteor/meteor/pull/11080) + - fixes a typo. [#11182](https://github.com/meteor/meteor/pull/11182) + +* `browser-content-policy@1.1.1` + - adds support to nonce + ```js + BrowserPolicy.content.allowScriptOrigin(`nonce-${nonce}`); + ``` + +* `accounts-ui@1.3.2` + - follow accounts-ui-unstyled release + +* `accounts-ui-unstyled@1.4.3` + - fixes the login form would send the server two login requests + - fixes the "forgot password" form would not only send the email but also refresh the page + +* `dynamic-import@0.5.4` + - fixes prefetching errors. [#11209](https://github.com/meteor/meteor/pull/11209) + - adds the option for dynamic-imports to fetch from the current origin instead of the absolute URL. [#11105](https://github.com/meteor/meteor/pull/11105) + +* `mongo-decimal@0.1.2` + - updates npm dependency `decimal.js` to v10.2.1 + +* `accounts-base@1.7.1` + - adds the ability to define default user fields published on login. [#11118](https://github.com/meteor/meteor/pull/11118) + +* `standard-minifier-css@1.7.0` + - modernize and update dependencies. [#11196](https://github.com/meteor/meteor/pull/11196) + + +#### Independent Releases +* `facebook-oauth@1.7.3` + - is now using Facebook GraphAPI v8. [#11160](https://github.com/meteor/meteor/pull/11160) + +## v1.11.1, 2020-09-16 + +### Breaking changes + +N/A + +### Migration steps + +N/A + +### Changes + +* `--apollo` skeleton was missing client cache setup [more](https://github.com/meteor/meteor/pull/11146) + +* `--vue` skeleton was updated to use proper folder structure [more](https://github.com/meteor/meteor/pull/11174) + +* All skeletons got their `npm` dependencies updated. [more](https://github.com/meteor/meteor/pull/11172) + +* Node.js has been updated to version [12.18.4](https://nodejs.org/en/blog/release/v12.18.4/), this is a [security release](https://nodejs.org/en/blog/vulnerability/september-2020-security-releases/) + +* Updated npm to version 6.14.8 [more](https://blog.npmjs.org/post/626732790304686080/release-6148) + +* `npm-mongo` version 3.8.1 was published, updating `mongodb` to [3.6.2](https://github.com/mongodb/node-mongodb-native/releases/tag/v3.6.2) [more](https://github.com/advisories/GHSA-pp7h-53gx-mx7r) + +* Updated PostCSS from 7.0.31 to 7.0.32 [more](https://github.com/meteor/meteor/issues/10682) + +* Allow android-webview-video-poster [more](https://github.com/meteor/meteor/pull/11159) + +## v1.11, 2020-08-18 + +### Breaking changes + +* `email` package dependencies have been update and package version has been bumped to 2.0.0 + There is a potential breaking change as the underlying package started to use `dns.resolve()` + instead of `dns.lookup()` which might be breaking on some environments. + See [nodemailer changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md) for more information. + +* (Added later) Cordova add plugin is not working with plugin name in the git URL when the plugin id was different than the name in the config.xml. Fixed on [#11202](https://github.com/meteor/meteor/pull/11202) + +### Migration steps + +N/A + +### Changes + +* `meteor create --apollo` is now available thanks to [@StorytellerCZ](https://github.com/StorytellerCZ). PR [#11119](https://github.com/meteor/meteor/pull/11119) + +* `meteor create --vue` is now available thanks to [@chris-visser](https://github.com/chris-visser). PR [#11086](https://github.com/meteor/meteor/pull/11086) + +* `--cache-build` option is now available on `meteor deploy` command and you can use it safely all the time if you are using a Git repository to run your deploy. This is helpful if your upload is failing then you can retry just the upload and also if you deploy the same bundle to multiple environments. [Read more](https://galaxy-guide.meteor.com/deploy-guide.html#cache-build). + +* Multiple optimizations in build performance, many of them for Windows thanks to [@zodern](https://github.com/zodern). PRs [#10838](https://github.com/meteor/meteor/pull/10838), [#11114](https://github.com/meteor/meteor/pull/11114), [#11115](https://github.com/meteor/meteor/pull/11115), [#11102](https://github.com/meteor/meteor/pull/11102), [#10839](https://github.com/meteor/meteor/pull/10839) + +* Fixes error when removing cordova plugin that depends on cli variables. PR [#10976](https://github.com/meteor/meteor/pull/11052) + +* `email` package now exposes `hookSend` that runs before emails are send. + +* Node.js has been updated to version + [12.18.3](https://nodejs.org/en/blog/release/v12.18.3/) + +* Updated npm to version 6.14.5 + +* `mongodb` driver npm dependency has been updated to 3.6.0 + +* The version of MongoDB used by Meteor in development has been updated + from 4.2.5 to 4.2.8 + +## v1.10.2, 2020-04-21 + +### Breaking changes + +* The `babel-compiler` package, used by both `ecmascript` and + `typescript`, no longer supports stripping [Flow](https://flow.org/) + type annotations by default, which may be a breaking change if your + application (or Meteor package) relied on Flow syntax. + +### Migration steps + +* If you still need Babel's Flow plugins, you can install them with npm + and then enable them with a custom `.babelrc` file in your application's + (or package's) root directory: + ```json + { + "plugins": [ + "@babel/plugin-syntax-flow", + "@babel/plugin-transform-flow-strip-types" + ] + } + ``` + +### Changes + +* Adds support to override MongoDB options via Meteor settings. Code PR +[#10976](https://github.com/meteor/meteor/pull/10976), Docs PR +[#662](https://github.com/meteor/docs/pull/662) + +* The `meteor-babel` npm package has been updated to version 7.9.0. + +* The `typescript` npm package has been updated to version 3.8.3. + +* To pass Node command line flags to the server node instance, + now it is recommended to use `SERVER_NODE_OPTIONS` instead of `NODE_OPTIONS`. + Since Meteor 0.5.3, Meteor allowed to pass node command line flags via the `NODE_OPTIONS` + environment variable. + However, since Node version 8 / Meteor 1.6 this has become a default node + envar with the same behavior. The side effect is that this now also affects + Meteor tool. The command line parameters could already be set separately + via the `TOOL_NODE_FLAGS` envar. This is now also possible (again) for the server. + +* The version of MongoDB used by Meteor in development has been updated from + 4.2.1 to 4.2.5. + [PR #11020](https://github.com/meteor/meteor/pull/11020) + +* The `url` package now provides an isomorphic implentation of the [WHATWG `url()` + API](https://url.spec.whatwg.org/). + While remaining backwards compatible, you can now also import `URL` and `URLSearchParams` from `meteor/url`. + These will work for both modern and legacy browsers as well as node. + + +## v1.10.1, 2020-03-12 + +### Breaking changes + +* Cordova has been updated from version 7 to 9. We recommend that you test + your features that are taking advantage of Cordova plugins to be sure + they are still working as expected. + + * WKWebViewOnly is set by default now as true so if you are relying on + UIWebView or plugins that are using UIWebView APIs you probably want to + set it as false, you can do this by calling + `App.setPreference('WKWebViewOnly', false);` in your mobile-config.js. But we + don't recommend turning this into false because + [Apple have said](https://developer.apple.com/news/?id=12232019b) they are + going to reject apps using UIWebView. + +* Because MongoDB since 3.4 no longer supports 32-bit Windows, Meteor 1.10 has + also dropped support for 32-bit Windows. In other words, Meteor 1.10 supports + 64-bit Mac, Windows 64-bit, and Linux 64-bit. + +### Migration Steps +* If you get `Unexpected mongo exit code 62. Restarting.` when starting your local + MongoDB, you can either reset your project (`meteor reset`) + (if you don't care about your local data) + or you will need to update the feature compatibility version of your local MongoDB: + + 1. Downgrade your app to earlier version of Meteor `meteor update --release 1.9.2` + 2. Start your application + 3. While your application is running open a new terminal window, navigate to the + app directory and open `mongo` shell: `meteor mongo` + 4. Use: `db.adminCommand({ getParameter: 1, featureCompatibilityVersion: 1 })` to + check the current feature compatibility. + 5. If the returned version is less than 4.0 update like this: + `db.adminCommand({ setFeatureCompatibilityVersion: "4.2" })` + 6. You can now stop your app and update to Meteor 1.10. + + For more information about this, check out [MongoDB documentation](https://docs.mongodb.com/manual/release-notes/4.2-upgrade-standalone/). + +### Changes + +* The version of MongoDB used by Meteor in development has been updated + from 4.0.6 to 4.2.1, and the `mongodb` driver package has been updated + from 3.2.7 to 3.5.4, thanks to [@klaussner](https://github.com/klaussner). + [Feature #361](https://github.com/meteor/meteor-feature-requests/issues/361) + [PR #10723](https://github.com/meteor/meteor/pull/10723) + +* The `npm` command-line tool used by the `meteor npm` command (and by + Meteor internally) has been updated to version 6.14.0, and our + [fork](https://github.com/meteor/pacote/tree/v9.5.12-meteor) of its + `pacote` dependency has been updated to version 9.5.12. + +* Cordova was updated from version 7 to 9 + * cordova-lib from 7.1.0 to 9.0.1 [release notes](https://github.com/apache/cordova-lib/blob/master/RELEASENOTES.md) + * cordova-common from 2.1.1 to 3.2.1 [release notes](https://github.com/apache/cordova-common/blob/master/RELEASENOTES.md) + * cordova-android from 7.1.4 to 8.1.0 [release notes](https://github.com/apache/cordova-android/blob/master/RELEASENOTES.md) + * cordova-ios from 4.5.5 to 5.1.1 [release notes](https://github.com/apache/cordova-ios/blob/master/RELEASENOTES.md) + * cordova-plugin-wkwebview-engine from 1.1.4 to 1.2.1 [release notes](https://github.com/apache/cordova-plugin-wkwebview-engine/blob/master/RELEASENOTES.md#121-jul-20-2019) + * cordova-plugin-whitelist from 1.3.3 to 1.3.4 [release notes](https://github.com/apache/cordova-plugin-whitelist/blob/master/RELEASENOTES.md#134-jun-19-2019) + * cordova-plugin-splashscreen (included by mobile-experience > launch-screen) + from 4.1.0 to 5.0.3 [release notes](https://github.com/apache/cordova-plugin-splashscreen/blob/master/RELEASENOTES.md#503-may-09-2019) + * cordova-plugin-statusbar (included by mobile-experience > mobile-status-bar) + from 2.3.0 to 2.4.3 [release notes](https://github.com/apache/cordova-plugin-statusbar/blob/master/RELEASENOTES.md#243-jun-19-2019) + * On iOS WKWebViewOnly is set by default now as true. + * On iOS the Swift version is now set by default to `5` this change can make + your app to produce some warnings if your plugins are using old Swift code. + You can override the Swift version using + `App.setPreference('SwiftVersion', 4.2);` but we don't recommend that. + +* New command to ensure that Cordova dependencies are installed. Usage: + `meteor ensure-cordova-dependencies`. Meteor handles this automatically but in + some cases, like running in a CI, is useful to install them in advance. + +* You can now pass an `--exclude-archs` option to the `meteor run` and + `meteor test` commands to temporarily disable building certain web + architectures. For example, `meteor run --exclude-archs web.browser.legacy`. + Multiple architectures should be separated by commas. This option can be + used to improve (re)build times if you're not actively testing the + excluded architectures during development. + [Feature #333](https://github.com/meteor/meteor-feature-requests/issues/333), + [PR #10824](https://github.com/meteor/meteor/pull/10824) + +* `meteor create --react app` and `--typescript` now use `useTracker` hook instead of + `withTracker` HOC, it also uses `function` components instead of `classes`. + +## v1.9.3, 2020-03-09 + +### Breaking changes +* The MongoDB `retryWrites` option now defaults to `true` (it previously defaulted to false). Users of database services that don't support retryWrites will experience a fatal error due to this. + +### Migration Steps +* If you get the error `MongoError: This MongoDB deployment does not support retryable writes. Please add retryWrites=false to your connection string.`, append `retryWrites=false` to your MongoDB connection string. + +### Changes +* `mongodb` driver package has been updated + from 3.2.7 to 3.5.4 [#10961](https://github.com/meteor/meteor/pull/10961) + +## v1.9.2, 2020-02-20 + +### Breaking changes +N/A + +### Migration Steps +N/A + +### Changes + +* Node.js has been updated to version + [12.16.1](https://nodejs.org/en/blog/release/v12.16.1/), fixing several unintended + [regressions](https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V12.md#12.16.1) + introduced in 12.16.0. + +* The `meteor-babel` npm package has been updated to version 7.8.2. + +* The `typescript` npm package has been updated to version 3.7.5. + +## v1.9.1, 2020-02-18 + +### Breaking changes + +N/A + +### Migration Steps +N/A + +### Changes + +* Node.js has been updated to version + 12.16.0 from 12.14.0, which includes + security updates and small changes: + * [12.16.0](https://nodejs.org/en/blog/release/v12.16.0/) + * Updated V8 to [release v7.8](https://v8.dev/blog/v8-release-78) which includes improvements in performance, for example, object destructuring now is as fast as the equivalent variable assignment. + * [12.15.0](https://nodejs.org/en/blog/release/v12.15.0/) + +* `cursor.observeChanges` now accepts a second options argument. + If your observer functions do not mutate the passed arguments, you can specify + `{ nonMutatingCallbacks: true }`, which improves performance by reducing + the amount of data copies. + +## v1.9, 2020-01-09 + +### Breaking changes + +* Because Node.js 12 no longer supports 32-bit Linux, Meteor 1.9 has also + dropped support for 32-bit Linux. In other words, Meteor 1.9 supports + 64-bit Mac, Windows, and Linux, as well as 32-bit Windows. + +### Migration Steps +N/A + +### Changes + +* Node.js has been updated to version + [12.14.0](https://nodejs.org/en/blog/release/v12.14.0/), which includes + several major Node.js versions since 8.17.0 (used by Meteor 1.8.3): + * [12.0.0](https://nodejs.org/en/blog/release/v12.0.0/) + * [11.0.0](https://nodejs.org/en/blog/release/v10.0.0/) + * [10.0.0](https://nodejs.org/en/blog/release/v10.0.0/) + * [9.0.0](https://nodejs.org/en/blog/release/v9.0.0/) + +* The `fibers` npm package has been updated to version 4.0.3, which + includes [changes](https://github.com/laverdet/node-fibers/pull/429) + that may drastically reduce garbage collection pressure resulting from + heavy `Fiber` usage. + +* The `pathwatcher` npm package has been updated to use a fork of version + 8.0.2, with [PR #128](https://github.com/atom/node-pathwatcher/pull/128) + applied. + +* The `sqlite3` npm package has been updated to version 4.1.0. + +* The `node-gyp` npm package has been updated to version 6.0.1, and + `node-pre-gyp` has been updated to version 0.14.0. + +* The feature that restarts the application up to two times if it crashes + on startup has been removed. + [Feature #335](https://github.com/meteor/meteor-feature-requests/issues/335) + [PR #10345](https://github.com/meteor/meteor/pull/10345) + +* Facebook OAuth has been updated to call v5 API endpoints. [PR #10738](https://github.com/meteor/meteor/pull/10738) + +### Changes + +* `Meteor.user()`, `Meteor.findUserByEmail()` and `Meteor.findUserByUserName()` can take a new + `options` parameter which can be used to limit the returned fields. Useful for minimizing + DB bandwidth on the server and avoiding unnecessary reactive UI updates on the client. + [Issue #10469](https://github.com/meteor/meteor/issues/10469) + +* `Accounts.config()` has a new option `defaultFieldSelector` which will apply to all + `Meteor.user()` and `Meteor.findUserBy...()` functions without explicit field selectors, and + also to all `onLogin`, `onLogout` and `onLoginFailure` callbacks. This is useful if you store + large data on the user document (e.g. a growing list of transactions) which do no need to be + retrieved from the DB whenever you or a package author call `Meteor.user()` without limiting the + fields. [Issue #10469](https://github.com/meteor/meteor/issues/10469) + +* Lots of internal calls to `Meteor.user()` without field specifiers in `accounts-base` and + `accounts-password` packages have been optimized with explicit field selectors to only + the fields needed by the functions they are in. + [Issue #10469](https://github.com/meteor/meteor/issues/10469) + +## v1.8.3, 2019-12-19 + +### Migration Steps + +* If your application uses `blaze-html-templates`, the Meteor `jquery` + package will be automatically installed in your `.meteor/packages` file + when you update to Meteor 1.8.3. However, this new version of the Meteor + `jquery` package no longer bundles its own copy of the `jquery` npm + implementation, so you may need to install `jquery` from npm by running + ```sh + meteor npm i jquery + ``` + in your application directory. Symptoms of not installing jquery include + a blank browser window, with helpful error messages in the console. + +### Changes + +* Node has been updated to version + [8.17.0](https://nodejs.org/en/blog/release/v8.17.0/). + +* The `npm` npm package has been updated to version 6.13.4, and our + [fork](https://github.com/meteor/pacote/tree/v9.5.11-meteor) of its + `pacote` dependency has been updated to version 9.5.11, an important + [security release](https://nodejs.org/en/blog/vulnerability/december-2019-security-releases/). + +* Prior to Meteor 1.8.3, installing the `jquery` package from npm along + with the Meteor `jquery` package could result in bundling jQuery twice. + Thanks to [PR #10498](https://github.com/meteor/meteor/pull/10498), the + Meteor `jquery` package will no longer provide its own copy of jQuery, + but will simply display a warning in the console if the `jquery` npm + package cannot be found in your `node_modules` directory. If you are + using `blaze` in your application, updating to Meteor 1.8.3 will + automatically add this new version of the Meteor `jquery` package to + your application if you were not already using it (thanks to + [PR #10801](https://github.com/meteor/meteor/pull/10801)), but you might + need to run `meteor npm i jquery` manually, so that `blaze` can import + `jquery` from your `node_modules` directory. + +* The `meteor-babel` npm package has been updated to version 7.7.5. + +* The `typescript` npm package has been updated to version 3.7.3. + +## v1.8.2, 2019-11-14 + +### Breaking changes + +* Module-level variable declarations named `require` or `exports` are no + longer automatically renamed, so they may collide with module function + parameters of the same name, leading to errors like + `Uncaught SyntaxError: Identifier 'exports' has already been declared`. + See [this comment](https://github.com/meteor/meteor/pull/10522#issuecomment-535535056) + by [@SimonSimCity](https://github.com/SimonSimCity). + +* `Plugin.fs` methods are now always sync and no longer accept a callback. + +### Migration Steps + +* Be sure to update the `@babel/runtime` npm package to its latest version + (currently 7.7.2): + ```sh + meteor npm install @babel/runtime@latest + ``` + +* New Meteor applications now depend on `meteor-node-stubs@1.0.0`, so it + may be a good idea to update to the same major version: + ```sh + meteor npm install meteor-node-stubs@next + ``` + +* If you are the author of any Meteor packages, and you encounter errors + when using those packages in a Meteor 1.8.2 application (for example, + `module.watch` being undefined), we recommend that you bump the minor + version of your package and republish it using Meteor 1.8.2, so + Meteor 1.8.2 applications will automatically use the new version of the + package, as compiled by Meteor 1.8.2: + ```sh + cd path/to/your/package + # Add api.versionsFrom("1.8.2") to Package.onUse in package.js... + meteor --release 1.8.2 publish + ``` + This may not be necessary for all packages, especially those that have + been recently republished using Meteor 1.8.1, or local packages in the + `packages/` directory (which are always recompiled from source). + However, republishing packages is a general solution to a wide variety + of package versioning and compilation problems, and package authors can + make their users' lives easier by handling these issues proactively. + +### Changes + +* Node has been updated to version + [8.16.2](https://nodejs.org/en/blog/release/v8.16.2/). + +* The `npm` npm package has been updated to version 6.13.0, and our + [fork](https://github.com/meteor/pacote/tree/v9.5.9-meteor) of its + `pacote` dependency has been updated to version 9.5.9. + +* New Meteor applications now include an official `typescript` package, + supporting TypeScript compilation of `.ts` and `.tsx` modules, which can + be added to existing apps by running `meteor add typescript`. + +* New TypeScript-based Meteor applications can be created by running + ```sh + meteor create --typescript new-typescript-app + ``` + This app skeleton contains a recommended tsconfig.json file, and should + serve as a reference for how to make TypeScript and Meteor work together + (to the best of our current knowledge). + [PR #10695](https://github.com/meteor/meteor/pull/10695) + +* When bundling modern client code, the Meteor module system now prefers + the `"module"` field in `package.json` (if defined) over the `"main"` + field, which should unlock various `import`/`export`-based optimizations + such as tree shaking in future versions of Meteor. As before, server + code uses only the `"main"` field, like Node.js, and legacy client code + prefers `"browser"`, `"main"`, and then `"module"`. + [PR #10541](https://github.com/meteor/meteor/pull/10541), + [PR #10765](https://github.com/meteor/meteor/pull/10765). + +* ECMAScript module syntax (`import`, `export`, and dynamic `import()`) is + now supported by default everywhere, including in modules imported from + `node_modules`, thanks to the [Reify](https://github.com/benjamn/reify) + compiler. + +* If you need to import code from `node_modules` that uses modern syntax + beyond module syntax, it is now possible to enable recompilation for + specific npm packages using the `meteor.nodeModules.recompile` option in + your application's `package.json` file. + See [PR #10603](https://github.com/meteor/meteor/pull/10603) for further + explanation. + +* The Meteor build process is now able to detect whether files changed in + development were actually used by the server bundle, so that a full + server restart can be avoided when no files used by the server bundle + have changed. Client-only refreshes are typically much faster than + server restarts. Run `meteor add autoupdate` to enable client refreshes, + if you are not already using the `autoupdate` package. + [Issue #10449](https://github.com/meteor/meteor/issues/10449) + [PR #10686](https://github.com/meteor/meteor/pull/10686) + +* The `mongodb` npm package used by the `npm-mongo` Meteor package has + been updated to version 3.2.7. + +* The `meteor-babel` npm package has been updated to version 7.7.0, + enabling compilation of the `meteor/tools` codebase with TypeScript + (specifically, version 3.7.2 of the `typescript` npm package). + +* The `reify` npm package has been updated to version 0.20.12. + +* The `core-js` npm package used by `ecmascript-runtime-client` and + `ecmascript-runtime-server` has been updated to version 3.2.1. + +* The `terser` npm package used by `minifier-js` (and indirectly by + `standard-minifier-js`) has been updated to version 4.3.1. + +* The `node-gyp` npm package has been updated to version 5.0.1, and + `node-pre-gyp` has been updated to 0.13.0. + +* The `optimism` npm package has been updated to version 0.11.3, which + enables caching of thrown exceptions as well as ordinary results, in + addition to performance improvements. + +* The `pathwatcher` npm package has been updated to version 8.1.0. + +* The `underscore` npm package installed in the Meteor dev bundle (for use + by the `meteor/tools` codebase) has been updated from version 1.5.2 to + version 1.9.1, and `@types/underscore` has been installed for better + TypeScript support. + +* In addition to the `.js` and `.jsx` file extensions, the `ecmascript` + compiler plugin now automatically handles JavaScript modules with the + `.mjs` file extension. + +* Add `--cordova-server-port` option to override local port where Cordova will + serve static resources, which is useful when multiple Cordova apps are built + from the same application source code, since by default the port is generated + using the ID from the application's `.meteor/.id` file. + +* The `--test-app-path ` option for `meteor test-packages` and + `meteor test` now accepts relative paths as well as absolute paths. + +## v1.8.1, 2019-04-03 + +### Breaking changes + +* Although we are not aware of any specific backwards incompatibilities, + the major upgrade of `cordova-android` from 6.4.0 to 7.1.4 likely + deserves extra attention, if you use Cordova to build Android apps. + +### Migration Steps +N/A + +### Changes + +* Node has been updated from version 8.11.4 to version + [8.15.1](https://nodejs.org/en/blog/release/v8.15.1/), an important + [security release](https://nodejs.org/en/blog/vulnerability/february-2019-security-releases/), + which includes the changes from four other minor releases: + * [8.15.0](https://nodejs.org/en/blog/release/v8.15.0/) + * [8.14.0](https://nodejs.org/en/blog/release/v8.14.0/), an important + [security release](https://nodejs.org/en/blog/vulnerability/november-2018-security-releases/) + * [8.12.0](https://nodejs.org/en/blog/release/v8.12.0/) + * [8.13.0](https://nodejs.org/en/blog/release/v8.13.0/) + + > Note: While Node 8.12.0 included changes that may improve the + performance of Meteor apps, there have been reports of CPU usage spikes + in production due to excessive garbage collection, so this version of + Meteor should be considered experimental until those problems have been + fixed. [Issue #10216](https://github.com/meteor/meteor/issues/10216) + +* The `npm` tool has been upgraded to version + [6.9.0](https://github.com/npm/cli/releases/tag/v6.9.0), and our + [fork](https://github.com/meteor/pacote/tree/v9.5.0-meteor) of its + `pacote` dependency has been updated to version 9.5.0. + +* Mongo has been upgraded to version 4.0.6 for 64-bit systems (was 4.0.2), + and 3.2.22 for 32-bit systems (was 3.2.19). The `mongodb` npm package + used by `npm-mongo` has been updated to version 3.1.13 (was 3.1.6). + +* The `fibers` npm package has been updated to version 3.1.1, a major + update from version 2.0.0. Building this version of `fibers` requires a + C++11 compiler, unlike previous versions. If you deploy your Meteor app + manually (without using Galaxy), you may need to update the version of + `g++` used when running `npm install` in the `bundle/programs/server` + directory. + +* The `meteor-babel` npm package has been updated to version 7.3.4. + +* Cordova Hot Code Push mechanism is now switching versions explicitly with + call to `WebAppLocalServer.switchToPendingVersion` instead of trying to + switch every time a browser reload is detected. If you use any third + party package or have your own HCP routines implemented be sure to call + it before forcing a browser reload. If you use the automatic reload from + the `Reload` meteor package you do not need to do anything. + [cordova-plugin-meteor-webapp PR #62](https://github.com/meteor/cordova-plugin-meteor-webapp/pull/62) + +* Multiple Cordova-related bugs have been fixed, including Xcode 10 build + incompatibilities and hot code push errors due to duplicated + images/assets. [PR #10339](https://github.com/meteor/meteor/pull/10339) + +* The `cordova-android` and `cordova-ios` npm dependencies have been + updated to 7.1.4 (from 6.4.0) and 4.5.5 (from 4.5.4), respectively. + +* Build performance has improved (especially on Windows) thanks to + additional caching implemented by [@zodern](https://github.com/zodern) + in PRs [#10399](https://github.com/meteor/meteor/pull/10399), + [#10452](https://github.com/meteor/meteor/pull/10452), + [#10453](https://github.com/meteor/meteor/pull/10453), and + [#10454](https://github.com/meteor/meteor/pull/10454). + +* The `meteor mongo` command no longer uses the `--quiet` option, so the + normal startup text will be displayed, albeit without the banner about + Mongo's free monitoring service. See this + [MongoDB Jira issue](https://jira.mongodb.org/browse/SERVER-38862) + for more details. + +* In Meteor packages, `client/` and `server/` directories no longer have + any special meaning. In application code, `client/` directories are + ignored during the server build, and `server/` directories are ignored + during the client build, as before. This special behavior previously + applied to packages as well, but has now been removed. + [Issue #10393](https://github.com/meteor/meteor/issues/10393) + [PR #10414](https://github.com/meteor/meteor/pull/10414) + +* If your application is using Git for version control, the current Git + commit hash will now be exposed via the `Meteor.gitCommitHash` property + while the app is running (in both server and client code), and also via + the `"gitCommitHash"` property in the `star.json` file located in the + root directory of builds produced by `meteor build`, for consumption by + deployment tools. If you are not using Git, neither property will be + defined. [PR #10442](https://github.com/meteor/meteor/pull/10442) + +* The Meteor Tool now uses a more reliable method (the MongoDB + [`isMaster` command](https://docs.mongodb.com/manual/reference/command/isMaster/)) + to detect when the local development database has started and is ready to + accept read and write operations. + [PR #10500](https://github.com/meteor/meteor/pull/10500) + +* Setting the `x-no-compression` request header will prevent the `webapp` + package from compressing responses with `gzip`, which may be useful if + your Meteor app is behind a proxy that compresses resources with another + compression algorithm, such as [brotli](https://github.com/google/brotli). + [PR #10378](https://github.com/meteor/meteor/pull/10378) + +## v1.8.0.2, 2019-01-07 + +### Breaking changes +N/A + +### Migration steps +N/A + +### Changes + +* The [React tutorial](https://www.meteor.com/tutorials/react/creating-an-app) + has been updated to address a number of inaccuracies due to changes in + recent Meteor releases that were not fully incorporated back into the + tutorial. As a reminder, Meteor now supports a `meteor create --react` + command that can be used to create a new React-based app quickly. + +* Fixed a bug where modules named with `*.app-tests.js` (or `*.tests.js`) + file extensions sometimes could not be imported by the + `meteor.testModule` entry point when running the `meteor test` command + (or `meteor test --full-app`). + [PR #10402](https://github.com/meteor/meteor/pull/10402) + +* The `meteor-promise` package has been updated to version 0.8.7, which + includes a [commit](https://github.com/meteor/promise/commit/bbe4f0d20b70417950381aea112993c4cc8c1168) + that should prevent memory leaks when excess fibers are discarded from + the `Fiber` pool. + +* The `meteor-babel` npm package has been updated to version 7.2.0, + improving source maps for applications with custom `.babelrc` files. + +## v1.8.0.1, 2018-11-23 + +### Breaking changes +N/A + +### Migration steps +N/A + +### Changes + +* The `useragent` npm package used by `webapp` and (indirectly) by the + `modern-browsers` package has been updated from 2.2.1 to 2.3.0. The + `chromium` browser name has been aliased to use the same minimum modern + version as `chrome`, and browser names are now processed + case-insensitively by the `modern-browsers` package. + [PR #10334](https://github.com/meteor/meteor/pull/10334) + +* Fixed a module caching bug that allowed `findImportedModuleIdentifiers` + to return the same identifiers for the modern and legacy versions of a + given module, even if the set of imported modules is different (for + example, because Babel injects fewer `@babel/runtime/...` imports into + modern code). Now the caching is always based on the SHA-1 hash of the + _generated_ code, rather than trusting the hash provided by compiler + plugins. [PR #10330](https://github.com/meteor/meteor/pull/10330) ## v1.8, 2018-10-08 @@ -8,7 +748,6 @@ N/A ### Migration Steps * Update the `@babel/runtime` npm package to version 7.0.0 or later: - ```sh meteor npm install @babel/runtime@latest ``` @@ -21,9 +760,13 @@ N/A planning a quick follow-up Meteor 1.8.1 release, which can be obtained by running the command ```bash - meteor update --release 1.8.1 + meteor update --release 1.8.1-beta.n ``` + where `-beta.n` is the latest beta release according to the + [releases](https://github.com/meteor/meteor/releases) page (currently + `-beta.6`). [Issue #10216](https://github.com/meteor/meteor/issues/10216) + [PR #10248](https://github.com/meteor/meteor/pull/10248) * Meteor 1.7 introduced a new client bundle called `web.browser.legacy` in addition to the `web.browser` (modern) and `web.cordova` bundles. @@ -383,7 +1126,7 @@ N/A ### Migration Steps -* Update `@babel/runtime` (as well as other Babel-related packages) and +* Update `@babel/runtime` (as well as other Babel-related packages) and `meteor-node-stubs` to their latest versions: ```sh meteor npm install @babel/runtime@latest meteor-node-stubs@latest @@ -731,6 +1474,20 @@ N/A [Feature #24](https://github.com/meteor/meteor-feature-requests/issues/24) [PR #9657](https://github.com/meteor/meteor/pull/9657) +## v1.6.1.4, 2018-08-16 + +### Breaking changes +N/A + +### Migration Steps +N/A + +### Changes + +* Node has been updated to version + [8.11.4](https://nodejs.org/en/blog/release/v8.11.4/), an important + [security release](https://nodejs.org/en/blog/vulnerability/august-2018-security-releases/). + ## v1.6.1.3, 2018-06-16 ### Breaking changes @@ -768,7 +1525,7 @@ N/A N/A ### Migration Steps -* Update `@babel/runtime` npm package and any custom Babel plugin enabled in +* Update `@babel/runtime` npm package and any custom Babel plugin enabled in `.babelrc` ```sh meteor npm install @babel/runtime@latest @@ -803,7 +1560,7 @@ N/A values are not first converted to `null`, when inserted/updated. `undefined` values are now removed from all Mongo queries and insert/update documents. - This is a potentially breaking change if you are upgrading an existing app + This is a potentially breaking change if you are upgrading an existing app from an earlier version of Meteor. For example: @@ -813,11 +1570,11 @@ N/A userId: currentUser._id // undefined }); ``` - Assuming there are no documents in the `privateUserData` collection with - `userId: null`, in Meteor versions prior to 1.6.1 this query will return - zero documents. From Meteor 1.6.1 onwards, this query will now return - _every_ document in the collection. It is highly recommend you review all - your existing queries to ensure that any potential usage of `undefined` in + Assuming there are no documents in the `privateUserData` collection with + `userId: null`, in Meteor versions prior to 1.6.1 this query will return + zero documents. From Meteor 1.6.1 onwards, this query will now return + _every_ document in the collection. It is highly recommend you review all + your existing queries to ensure that any potential usage of `undefined` in query objects won't lead to problems. ### Migration Steps diff --git a/ISSUE_TRIAGE.md b/ISSUE_TRIAGE.md index 8cc0507a1d..665bfef76b 100644 --- a/ISSUE_TRIAGE.md +++ b/ISSUE_TRIAGE.md @@ -13,7 +13,7 @@ We would love to have more contributors who are willing to help out with triagin - [Impact](#impact) - [Issues ready to claim](#issues-ready-to-claim) -## Issue lifecycle +## Lifecycle All issues follow the flow outlined below. Your job as an issue maintainer is to work with the requester and others within the community towards the goal of having an issue either become 'claimable' or closed. Read on for more details on the process. @@ -24,73 +24,34 @@ The first step is in determining whether the issue is a bug, help question or fe ### Bugs 1. Duplicates should be closed and marked as such. -2. Add the `bug` label and `Project:*` labels that apply (a best guess on the `Project:` is fine; sometimes it's hard to tell exactly which project the issue falls under). +2. Add the `Type:Bug` label and `Project:*` labels that apply (a best guess on the `Project:` is fine; sometimes it's hard to tell exactly which project the issue falls under). 3. Bugs should have a high-quality reproduction as described [here](CONTRIBUTING.md#reporting-bug). You may need to help the reporter reduce their bug to a minimal reproduction. Leave the issue open. -4. A reproduction should be confirmed by at least one person other than the original reporter. Run the reproduction and validate that the bug exists; then make a note of your findings on the issue. If a reproduction is supplied but doesn't work, add the `can't-reproduce` label and make a comment describing what happened. -5. Finally, once you've confirmed the reproduction add the `confirmed` label and [classify](#classification) the issue (removing the `can't-reproduce` label if it exists). - -#### Bug issue lifespan - -To help keep issues in this repository under control, and make sure the most important problems are visible to maintainers, unresolved issues (lacking recent activity) should be closed after a certain amount of time has elapsed. - -##### Issues labelled with `pull-requests-encouraged` - -- Open `pull-requests-encouraged` issues should be closed after one month of inactivity, unless someone has clearly identified that they are interested in working on the issue. -- When closing, the `not-implemented` label should be added. -- A message similar to the following should be included: - -> While we think resolving this issue would be a great addition to the Meteor project, we're going to close it for now due to inactivity. If anyone comes across this issue in the future, and is interested in working on resolving it, please let us know by posting here and we'll consider re-opening this issue. Thanks! - -##### Issues labelled with `bug` and `confirmed` - -- Open `bug` + `confirmed` issues should be closed after two months of inactivity, unless someone has clearly identified that they are interested in working on the issue. -- Triagers should do everything possible to help get `bug` + `confirmed` issues to `pull-requests-encouraged`. This means helping clearly identify where the problem is, pointing towards parts of the codebase that someone might want to look into, documenting what a potential solution looks like, etc. - -##### All other issues - -- All open issues that can’t be labelled as `bug` + `confirmed` and/or `pull-requests-encouraged`, should be closed after one month of inactivity. -- Triagers should do everything possible to help get `bug` + `confirmed` issues to `pull-requests-encouraged`. +4. A reproduction should be confirmed by at least one person other than the original reporter. Run the reproduction and validate that the bug exists; then make a note of your findings on the issue. If a reproduction is supplied but doesn't work, make a comment describing what happened. +5. Finally, add a status label and also classification, read more about labels [here](./LABELS.md). ### Help questions -[Stack Overflow](http://stackoverflow.com/questions/tagged/meteor) and our [forums](https://forums.meteor.com/c/help) are the place to ask for help on using the framework. Close issues that are help requests and politely refer the author to the above locations. +Our [forums](https://forums.meteor.com/c/help) or Community Slack are the place to ask for help on using the framework. Close issues that are help requests and politely refer the author to the above locations. ### Feature requests 1. For reasons described [here](CONTRIBUTING.md#feature-requests), we would prefer features to be built as separate packages. If the feature can clearly be built as a package, explain this to the requester and close the issue. > - If the feature could be built as a package and serves a particular need, encourage the user to contribute it themselves. ->- If the underlying issue could be better solved by existing technology, encourage them to seek help in the [forums](https://forums.meteor.com/c/help) or on [Stack Overflow](http://stackoverflow.com/questions/tagged/meteor). +>- If the underlying issue could be better solved by existing technology, encourage them to seek help in the [forums](https://forums.meteor.com/c/help). 2. If you haven't closed the issue, add `Project:*` labels that apply (a best guess on the `Project:` is fine, sometimes it's hard to tell exactly which project the issue falls under). 3. If it's not possible to build the feature as a package (as you identified in step 1), explore whether creating hooks in core would make it possible to do so. If it would, redefine the issue as a request to create those hooks. 4. Work with the requester and others in the community to build a clear specification for the feature and update the issue description accordingly. -5. Finally, add the `confirmed` label and [classify](#classification) the issue. +5. Finally, add a status label and also classification, read more about labels [here](./LABELS.md). -Core contributors may add the `pull-requests-encouraged` label to feature requests. This indicates the feature is aligned with the project roadmap and a high-quality pull request will almost certainly be merged. +### Is it ready? -

Classification

- -Assign a classification (via GH labels) that enables the community to determine how to prioritize which issues to work on. The classification is based on *Severity x Impact* . - -### Severity -_[Severity:has-workaround, Severity:production, Severity:blocks-development]_ - -- If there is a workaround, apply the `Severity:has-workaround` label. -- If the issue affects production apps, apply the `Severity:production` label. -- If the issue blocks development (e.g `meteor run` is broken), apply the `Severity:blocks-development` label. - -### Impact -_[Impact:few, Impact:some, Impact:most]_ - -This is a somewhat subjective label and is interpreted in conjunction with Github's upvotes. As a general guideline: - -- `Impact:few` issues would go unnoticed by almost all users, apart from those using a very niche feature, or a feature in an unusual way. -- `Impact:some` issues would impact users using a feature that is commonly but not universally used. -- `Impact:most` issues would impact more or less every user of the framework. +- If the desired fixed or solution is already clear add the label `ready`. +- If discussions are still necessary add the label `in-discussion` and start the discussion. ## Issues ready to claim This state indicates that bugs/feature requests have reached the level of quality -required for a contributor to begin writing code against (you can easily filter for [bugs](https://github.com/meteor/meteor/labels/confirmed) or [feature requests](https://github.com/meteor/meteor-feature-requests/labels/confirmed) that are ready to claim, by using the `confirmed` label). +required for a contributor to begin writing code against (you can easily filter for [Ready](https://github.com/meteor/meteor/labels/ready)) Although this should have already been done by this stage, ensure the issue is correctly labeled and the title/description have been updated to reflect an diff --git a/LABELS.md b/LABELS.md new file mode 100644 index 0000000000..df62bcbc69 --- /dev/null +++ b/LABELS.md @@ -0,0 +1,63 @@ +## Labels + +Labels are used to organize our issues and PRs. + +We should change the labels of issues and PRs when its status changes. + +### Status Labels +Labels to indicate the status of a specific issue or PR. These are the most important labels as they tell us in which stage a specific item is at the moment at a glance. + +#### Stage 0 +- `triage`: Waiting triage + - New items receive this label [automatically](https://probot.github.io/apps/triage-new-issues/) + +#### Stage 1 +- `confirmed`: We want to fix or implement it +- `not-ready`: Something is missing, we are not able to work on this issue yet +- `in-discussion`: We are still discussing how to solve or implement it +- `needs-reproduction`: We can't reproduce so it's blocked + +#### Stage 2 +- `ready`: We've decided how to solve or implement it +- `in-development`: We are already working on it + +#### Stage 3 +- `pending-tests`: Tests are not passing, stuck or we need new tests +- `waiting-feedback`: It's implemented but we need feedback that it is working as expected + +### Classification Labels + +Assign a classification (via GH labels) that enables the community to determine how to prioritize which issues to work on. The classification is based on *Severity x Impact* . + +#### Severity +_[Severity:has-workaround, Severity:production, Severity:blocks-development]_ + +- If there is a workaround, apply the `Severity:has-workaround` label. +- If the issue affects production apps, apply the `Severity:production` label. +- If the issue blocks development (e.g `meteor run` is broken), apply the `Severity:blocks-development` label. + +#### Impact +_[Impact:few, Impact:some, Impact:most]_ + +This is a somewhat subjective label and is interpreted in conjunction with Github's upvotes. As a general guideline: + +- `Impact:few` issues would go unnoticed by almost all users, apart from those using a very niche feature, or a feature in an unusual way. +- `Impact:some` issues would impact users using a feature that is commonly but not universally used. +- `Impact:most` issues would impact more or less every user of the framework. + +#### Type +_[Type:Bug, Type:Feature]_ + +As a general guideline: + +- `Type:Bug` a problem is happening because of an issue in Meteor code. +- `Type:Feature` a new behavior or functionality is desired. + +## Project Labels + +They start with `Project:` and they are used to inform the parts of Meteor that are involved in this item. + +## Special Labels + +- `good-first-issue`: Used to indicate items friendly to beginners in Meteor +- `hacktoberfest-accepted`: Used to indicate items accepted for [Hacktoberfest](https://hacktoberfest.digitalocean.com/hacktoberfest-update) diff --git a/LICENSE b/LICENSE index 10a91f042c..33a9060768 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2011 - 2018 Meteor Development Group, Inc. +Copyright (c) 2011 - present Meteor Software Ltd. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/LICENSES/MIT.txt b/LICENSES/MIT.txt index 85487756fe..cb76f8f928 100644 --- a/LICENSES/MIT.txt +++ b/LICENSES/MIT.txt @@ -841,6 +841,13 @@ xmlbuilder: http://github.com/oozcitak/xmlbuilder-js Copyright (c) 2013 Ozgur Ozcitak +---------- +xmlbuilder2: http://github.com/oozcitak/xmlbuilder2 +---------- + +Copyright (c) 2013 Ozgur Ozcitak + + ---------- xmldom: https://github.com/jindw/xmldom ---------- diff --git a/README.md b/README.md index 41c0e884eb..1a88564078 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ [![TravisCI Status](https://travis-ci.org/meteor/meteor.svg?branch=devel)](https://travis-ci.org/meteor/meteor) [![CircleCI Status](https://circleci.com/gh/meteor/meteor/tree/devel.svg?style=shield&circle-token=c2d3c041506bd493ef3795ffa4448684cfce97b8)](https://circleci.com/gh/meteor/meteor/tree/devel) -[![BrowserStack Status](https://www.browserstack.com/automate/badge.svg?badge_key=S2FjOVpYTlk1eHVxdkdrR24ra0JXaXBDaVA3WjJGejdkbThaWGRnWVJvWT0tLTlQMEdYM2NJbDJOYUd3RTc3RVVGQ2c9PQ==--9e2143718a0c216274cdacef7cd5a3d12950bcb8)](https://www.browserstack.com/automate/public-build/S2FjOVpYTlk1eHVxdkdrR24ra0JXaXBDaVA3WjJGejdkbThaWGRnWVJvWT0tLTlQMEdYM2NJbDJOYUd3RTc3RVVGQ2c9PQ==--9e2143718a0c216274cdacef7cd5a3d12950bcb8) Meteor is an ultra-simple environment for building modern web applications. @@ -14,9 +13,11 @@ With Meteor you write apps: * using your choice of popular open-source libraries Try a getting started tutorial: - * [React](https://www.meteor.com/tutorials/react/creating-an-app) + * [React](https://react-tutorial.meteor.com) - new * [Blaze](https://www.meteor.com/tutorials/blaze/creating-an-app) * [Angular](https://www.meteor.com/tutorials/angular/creating-an-app) + * [Vue](https://www.meteor.com/tutorials/vue/creating-an-app) + * [Svelte](https://www.meteor.com/tutorials/svelte/creating-an-app) Next, read the [guide](https://guide.meteor.com) and the [documentation](https://docs.meteor.com/). @@ -47,9 +48,11 @@ meteor Building an application with Meteor? -* Announcement list: sign up at http://www.meteor.com/ -* Having problems? Ask for help at: http://stackoverflow.com/questions/tagged/meteor +* Deploy on Galaxy hosting: https://www.meteor.com/hosting +* Announcement list: sign up at https://www.meteor.com/ * Discussion forums: https://forums.meteor.com/ +* Join the Meteor community Slack by clicking this [invite link](https://join.slack.com/t/meteor-community/shared_invite/enQtODA0NTU2Nzk5MTA3LWY5NGMxMWRjZDgzYWMyMTEyYTQ3MTcwZmU2YjM5MTY3MjJkZjQ0NWRjOGZlYmIxZjFlYTA5Mjg4OTk3ODRiOTc). + Interested in helping or contributing to Meteor? These resources will help: @@ -58,9 +61,6 @@ Interested in helping or contributing to Meteor? These resources will help: * [Feature requests](https://github.com/meteor/meteor-feature-requests/) * [Issue tracker](https://github.com/meteor/meteor/issues) -We are hiring! Visit [meteor.io/jobs](https://www.meteor.io/jobs/) to -learn more about working full-time on the Meteor project. - ## Uninstalling Meteor Aside from a short launcher shell script, Meteor installs itself inside your diff --git a/Roadmap.md b/Roadmap.md index 09dd9b01dd..b71a61cce4 100644 --- a/Roadmap.md +++ b/Roadmap.md @@ -1,188 +1,250 @@ - - # Meteor Roadmap -**Up to date as of October 9, 2018** +**Up to date as of Aug 21, 2020** -This document describes the high level features the Meteor project maintainers have decided to prioritize in the near- to medium-term future. A large fraction of the maintainers’ time will be dedicated to working on the features described here. As with any roadmap, this is a living document that will evolve as priorities and dependencies shift; we aim to update the roadmap with any changes or status updates on a monthly basis. +This document describes the high-level features and actions for the Meteor project in the near- to medium-term future. This roadmap was built based on community feedback and to improve areas where Meteor is already strong. The description of many items include sentences and ideas from Meteor community members. -Contributors are encouraged to focus their efforts on work that aligns with the roadmap as maintainers will prioritize their time spent reviewing PRs and issues around these contributions. This however does not mean that PRs against other features and bugs will automatically be rejected. +As with any roadmap, this is a living document that will evolve as priorities and dependencies shift; we aim to update the roadmap with any changes or status updates every quarter. -Items can be added to this roadmap by first getting design approval for a solution to an open issue, as outlined by our [contributing guidelines](https://github.com/meteor/meteor/blob/devel/CONTRIBUTING.md). Then, when a contributor has committed to solving the issue in the short to medium term, they can submit a PR to add that work to the roadmap. All other PRs to the roadmap will be rejected. +Contributors are encouraged to focus their efforts on work that aligns with the roadmap then we can work together in these areas. -## Out of the box support for advanced React features +PRs to the roadmap are welcome. If you are willing to contribute please open a PR explaining your ideas and what you would be able to do yourself. -React is the most popular way to build UIs in JavaScript today, and a great companion to the rest of the features provided by Meteor. Meteor's zero-configuration environment provides a great opportunity to make features React apps depend on work out of the box. This includes features like: +Ideally, every item in this roadmap should have at least two leaders, leaders are people that are interested in the item and would like to help. If you are interested please open a PR including yourself and describing how do you want to help. -1. Automatic selection of development vs. production build of React (completed) -2. Abstraction for isomorphic server-side rendering ([ongoing](https://github.com/meteor/meteor/blob/devel/packages/server-render/README.md)) -3. Integration of [dynamic imports](https://blog.meteor.com/dynamic-imports-in-meteor-1-5-c6130419c3cd) with React SSR -4. Full support for optimized CSS-in-JS features of libraries like [styled-components](https://www.styled-components.com/) +## Core -We think Meteor has a clear set of benefits when compared to other popular React frameworks like Create React App and Next.js. +### Tree Shaking +- Leaders: [Renan Castro](https://github.com/renanccastro) / [Filipe Névola](https://github.com/filipenevola) +- Status: In Progress +- PRs: [#11107](https://github.com/meteor/meteor/pull/11107) -## Remove blockers to Meteor adoption +Implement tree shaking / dead code elimination, which involves pruning the dependency tree while scanning imports in the `ImportScanner`. We believe it should be possible to treat values like `Meteor.isProduction` and `Meteor.isServer` as constants during this process, and eliminate those branches if their conditions are false (as in https://github.com/meteor/meteor/pull/10056). -### Make the `meteor` command-line tool installable from npm +### Service worker build target +- Leaders: +- Status: - +- PRs: - -Installing `meteor` from npm would enable developers to use it as build tool for npm-based projects, and would simplify the Meteor release process by getting rid of the "dev bundle" (essentially the npm dependencies of the command-line tool). +A proper service worker build target. Regular Web Workers can be built from a function.toString() but service-workers require an actual server route. -The biggest blockers to this project are +### Ultra-thin Meteor +- Leaders: [Ruither Borba](https://github.com/delki8) / [Christian Klaussner](https://github.com/klaussner) +- Status: In Progress +- PRs: https://github.com/meteor/meteor/pull/11034 https://github.com/meteor/meteor/pull/11106 -1. deciding whether/how to preserve Meteor release versions, and -2. changing the API of the package server so that you don't have to download the entire package database locally. +### Page load performance improvements +- Leaders: [Seba Kerckhof](https://github.com/sebakerckhof) +- Status: - +- PRs: - -## Page load performance improvements +Make sure we are not delivering any dependency that is not used ([Issue #10701](https://github.com/meteor/meteor/issues/10701), [Issue #10702](https://github.com/meteor/meteor/issues/10702), [Issue #10704](https://github.com/meteor/meteor/issues/10704), [PR #10792](https://github.com/meteor/meteor/pull/10792)) -*Ongoing* +### Improve Rebuild performance +- Leaders: [zodern](https://github.com/zodern) / [Marcelo T Prado](https://github.com/MarceloPrado) +- Status: - +- PRs: - -Speeding up page load times will require a combination of new tools for asynchronous JavaScript delivery (code splitting), dead code elimination, deferred evaluation of JavaScript modules, and performance profiling (so that developers can identify expensive packages). - -### Making large dependencies optional - -Making it possible to remove (or dynamically load) large dependencies like `jquery`, `underscore`, and `minimongo` will have a significant impact on bundle sizes. - -### More aggressive client caching - -Using `Cache-Control: immutable` to cache the initial JavaScript bundle will reduce the amortized cost of downloading the initial JavaScript bundle in newer browsers. - -Dynamic `import(...)` benefits dramatically from storing previously-received module versions in [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API), though it may be possible to use IndexedDB in a faster way. - -### Better dead code elimination - -Although Meteor minifies JavaScript in production, and modules that are never imported are not included in the client bundle, Meteor could do a better job of removing code within modules that will never be used, according to static analysis. The static syntax of ECMAScript 2015 `import` and `export` declarations should make this analysis easier. +Explore ideas to improve rebuild time such as split main client bundle into several bundles, split the server bundle into several bundles, store less file content in memory, option to disabling the legacy build (at least in dev mode), etc -## Full transition to npm +### Hot Module Replacement +- Leaders: [zodern](https://github.com/zodern) +- Status: In Progress +- PRs: https://github.com/meteor/meteor/pull/11117 -*Status: We encourage publishing Meteor-related packages to npm where possible. We are investigating ways to make it possible to move some parts of Meteor core onto npm without making the installation process more complex.* +HMR in Meteor, we already have a work in progress here, you can provide feedback already, check the PR. -The community has rallied around npm as the de-facto standard package manager for JavaScript. We believe committing fully to npm will strengthen the entire JavaScript ecosystem by removing fragmentation, will benefit existing Meteor developers by making it seamless to use any JavaScript package and increase Meteor adoption by aligning it with JavaScript best practices. +### Transition as much as possible to NPM +- Leaders: +- Status: - +- PRs: + - PoC using base64 package as example [#10996](https://github.com/meteor/meteor/pull/10996) -1.3 introduced `npm install` support along with ES2015 modules. In the future, we would like to transition the Meteor package ecosystem over entirely from Atmosphere to npm. We are still in the early conceptual design phase and expect to update the roadmap once we have a design in place that will underpin further development. +Migrate packages that do not depend on Meteor exclusive features to NPM and we also continue to encourage new packages to be published as NPM packages when possible. +## Cordova +### Cordova documentation +- Leaders: [Filipe Névola](https://github.com/filipenevola) +- Status: In Progress +- PRs: https://github.com/meteor/meteor/pull/11072 -## GraphQL Data: SQL, REST, performance +Provide an example with mobile native configurations already in place such as `mobile-config.js`, sample assets, Fastlane scripts, etc. Also improve docs and guide ([Forums post](https://forums.meteor.com/t/lets-create-the-ultimate-cordova-hot-code-push-faq-doc/50500)). -*Status: In progress at [http://dev.apollodata.com/](http://dev.apollodata.com/)* +## DB +### Minimongo secondary index support +- Leaders: [Brian Mulhall](https://github.com/BrianMulhall) +- Status: - +- PRs: - -We're building a next generation GraphQL-focused data stack for modern applications called Apollo. We believe that this spiritual successor to the data part of the Meteor stack is impactful enough to deserve it's own fully fledged project that is compatible with other languages and frameworks. Apollo is born from the Meteor project and works perfectly with Meteor today. +Improve index support for Minimongo to enable better performance in the client for databases with thousands of documents. ([Issue #10703](https://github.com/meteor/meteor/issues/10703)) -Apollo is our approach to giving Meteor developers SQL and other database support, the ability to choose between realtime and static data, and improved performance analysis. We are working on providing better tools and documentation for Meteor developers to integrate Apollo into their apps, and welcome contributions in this area. The next priority for Apollo and Meteor is enabling Meteor developers to choose to replace MongoDB entirely with GraphQL on top of other storage engines. +## Documentation +### Step-by-step guide +- Leaders: +- Status: - +- PRs: - -Even though Apollo could eventually be a complete replacement for Meteor’s included Mongo/DDP data stack, you should feel good about Meteor’s existing data system. We are currently open to ideas around performance and stability improvements. +Provide a nice and friendly introduction for people that are learning Meteor. -# **Recently completed** +### Update Angular Tutorial +- Leaders: [Brian Mulhall](https://github.com/BrianMulhall) +- Status: - +- PRs: - -## Different JS bundles for modern versus legacy browsers +Angular tutorial should reflect latest best practices for using Meteor and Angular together. -*Pull request: https://github.com/meteor/meteor/pull/9439* +React tutorial should reflect latest best practices for using Meteor and React together. -Despite amazing progress in the latest versions of popular web browsers to support the vast majority of the ECMAScript specification, most web applications are still forced to compile their JavaScript for the oldest browsers they want to support, which means native support for the latest features is usually off-limits. +### PWA documentation +- Leaders: [Filipe Névola](https://github.com/filipenevola) +- Status: In Progress +- PRs: - -Starting in Meteor 1.6.2, Meteor will build two different client JS bundles, one for modern browsers (`web.browser`) and another for legacy browsers (`web.browser.legacy` and `web.cordova`), in addition to the server bundle which targets Node 8. Package authors can use these architectures to include files only in legacy browsers, or only in modern browsers, while also setting minimum browser versions for the native features they require. As of this writing, modern browsers are loosely defined as any browsers with native support for `async` functions and `await` expressions, which represents [more than 80% of web usage today](https://caniuse.com/#feat=async-functions). +Provide an example with PWA configurations already in place such as `manifest`, service worker, Open Graph meta tags, etc. Also improve docs and guide. -While it was tempting to compile even more bundles for different categories of browser support, the reality of the web today is that most users have access to self-updating "evergreen" browsers, with nearly complete ECMAScript support, and the market share of evergreen browsers is only going to increase with time. For everyone else, Meteor will automatically provide the same level of compilation provided to everyone by Meteor 1.6.1 and before. It's also a lot easier to test two different bundles in representative browsers than it is to test a whole matrix of possibilities. +### SSR documentation +- Leaders: [Kevin Newman](https://github.com/CaptainN) / [Eric Burel](https://github.com/eric-burel) +- Status: - +- PRs: - -As a result of these changes, a typical new Meteor app will have a modern client JS bundle that is one quarter to one third the size of the legacy JS bundle. A new app created with `meteor create --release 1.6.2-beta.12 --minimal new-app` will have a modern JS bundle just 15KB in size (minified + gzip), for example. +Provide a skeleton with SSR configurations already in place. + +Relevant issues: +- https://github.com/meteor/meteor-feature-requests/issues/174 + +### Tests documentation +- Leaders: [Simon Schick](https://github.com/SimonSimCity) / [Florian Bienefelt](https://github.com/Floriferous) +- Status: - +- PRs: - + +Provide samples on how to run tests in Meteor these samples should include unit tests and also cypress tests. + +### Svelte +- Leaders: [Brian Mulhall](https://github.com/BrianMulhall) +- Status: In Progress +- PRs: https://github.com/meteor/simple-todos-svelte + +Tutorial is ready. We want a create command (--svelte) yet and more docs. + +### Third-party tools with their own build steps + +- Leaders: +- Status: - +- PRs: - + +Remove limitations that prevent using third-party tools with their own build steps, such as Storybook or Jest. + +Relevant discussions: +- https://github.com/meteor/meteor/pull/10811#issuecomment-564726713 +- https://github.com/storybookjs/storybook/issues/5975 + +## Recently completed +### Vue.js +- Leaders: [Brian Mulhall](https://github.com/BrianMulhall) +- Status: shipped in August 2020 +- PRs: https://github.com/meteor/simple-todos-vue + +Tutorial is ready and create command meteor create --vue + +### Apollo +- Leaders: [Jan Dvorak](https://github.com/StorytellerCZ) +- Status: shipped in August 2020 +- PRs: https://github.com/meteor/meteor/pull/11119 + +Apollo skeleton, meteor create --apollo + +### Performance improvements on Windows +- Leaders: [zodern](https://github.com/zodern) +- Status: shipped in August 2020 +- PRs: https://github.com/meteor/meteor/pull/10838 https://github.com/meteor/meteor/pull/11114 https://github.com/meteor/meteor/pull/11115 https://github.com/meteor/meteor/pull/11102 + +Explore ideas to improve performance on Windows such as build in place. + +### Update React Tutorial +- Leaders: [Leonardo Venturini](https://github.com/leonardoventurini) / [Brian Mulhall](https://github.com/BrianMulhall) +- Status: shipped in July 2020 +- PRs: https://github.com/meteor/simple-todos-react + +### React Native +- Leaders: [Nathaniel Dsouza](https://github.com/TheRealNate) +- Status: shipped in June 2020 +- PRs: https://github.com/meteor/guide/pull/1041 https://github.com/meteor/guide/pull/1039 https://github.com/meteor/guide/pull/1035 + +Guide is ready ([check here](https://guide.meteor.com/react-native.html)). + +### Update Blaze Tutorial +- Leaders: [Jan Küster](https://github.com/jankapunkt), [Harry Adel](https://github.com/harryadelb), [Brian Mulhall](https://github.com/BrianMulhall) +- Status: shipped in April 2020 +- PRs: https://github.com/meteor/tutorials/pull/200 https://github.com/meteor/tutorials/pull/199 + +Blaze tutorial should reflect latest best practices. + +### Update MongoDB driver +- Leaders: [Christian Klaussner](https://github.com/klaussner) +- Status: shipped in Meteor 1.10.1 +- PRs: https://github.com/meteor/meteor/pull/10861 / https://github.com/meteor/meteor/pull/10723 + +Update to Mongodb driver from 3.2.7 to 3.5.4, this version is compatible with MongoDB 4.2. + +### Update Cordova to 9 +- Leaders: [Filipe Névola](https://github.com/filipenevola) / [Renan Castro](https://github.com/renanccastro) +- Status: shipped in Meteor 1.10.1 +- PRs: https://github.com/meteor/meteor/pull/10861 / https://github.com/meteor/meteor/pull/10810 / https://github.com/meteor/meteor/pull/10861 + +Update Cordoba lib and its dependencies to latest (version 9) + +### Update to Node.js 12 +- Leaders: [Ben Newman](https://github.com/benjamn) +- Status: shipped in Meteor 1.9. +- PRs: https://github.com/meteor/meteor/pull/10527 + +Since Node.js 12 is scheduled to become the LTS version on October 1st, 2019, Meteor 1.9 will update the Node.js version used by Meteor from 8.16.1 (in Meteor 1.8.2) to 12.10.0 (the most recent current version). + +### Different JS bundles for modern versus legacy browsers + +- Status: shipped in Meteor 1.6.2. +- PRs: https://github.com/meteor/meteor/pull/9439 ### Eliminate the need for an `imports` directory -*Status: possible using `meteor.mainModule` in `package.json` in `1.6.2-beta.12`.* -*Pull requests: https://github.com/meteor/meteor/pull/9690, https://github.com/meteor/meteor/pull/9714, https://github.com/meteor/meteor/pull/9715* +- Status: shipped in Meteor 1.6.2. +- PRs: https://github.com/meteor/meteor/pull/9690, https://github.com/meteor/meteor/pull/9714, https://github.com/meteor/meteor/pull/9715 -When Meteor 1.3 first introduced a module system based on [CommonJS](http://wiki.commonjs.org/wiki/Modules/1.1) and [ECMAScript module syntax](2ality.com/2014/09/es6-modules-final.html), we had to provide a way for developers to migrate their apps from the old ways of loading code, whereby all files were evaluated eagerly during application startup. +### Make Mongo more optional -The best solution at the time was to introduce a special `imports` directory to contain modules that should be loaded lazily (rather than eagerly), when first imported. +- Status: shipped in Meteor 1.6.2. +- PRs: https://github.com/meteor/meteor/pull/8999 -Most other Node applications work this way by default: every module is lazy, and therefore must be imported by another module, and evaluation starts with one "entry point" module (typically specified by the `"main"` field in `package.json`). +### Upgrade to Node 8 -It should be possible for Meteor apps to opt into this behavior, and optionally get rid of their special `imports` directories. The mechanism for opting in will very likely involve putting something in your `package.json` file that specifies entry point modules for both client and server. +- Status: shipped in Meteor 1.6. +- PRs: https://github.com/meteor/meteor/pull/8728 -## Make Mongo more optional +### Upgrade to npm 5 -*Pull request: https://github.com/meteor/meteor/pull/8999* +- Status: shipped in Meteor 1.6 -Meteor has depended on Mongo for as long as the Meteor project has existed. However, we care deeply about supporting other data storage systems (especially via [GraphQL](https://www.apollodata.com/)), and would like to make it possible to avoid using Mongo altogether. +### Dynamic `import(...)` -Since Meteor 1.6.2-beta.9, `meteor create --minimal minimal-app` will create an app with very few packages, without any dependency on Mongo. +- Status: shipped in Meteor 1.5 -### Support the latest stable version of Node +### Rebuild performance improvements -*Tracking pull request: https://github.com/meteor/meteor/pull/8728* +- Status: shipped in Meteor 1.4.2 -See [above](https://github.com/meteor/meteor/blob/devel/Roadmap.md#upgrade-to-node-8). Developers deserve to use the latest underlying technologies, and Meteor is uniquely able to smooth over any rough edges in early/experimental versions of technologies like Node. A number of developers are already using beta versions of Meteor 1.6 to deploy their apps, because the benefits outweigh the risks for them. Just as Meteor 1.5 climbed to more than 50% usage in less than two months, we expect Meteor 1.6 to become the most widely used version of Meteor soon after its release. +### MongoDB updates -## Upgrade to Node 8 +- Status: shipped in Meteor 1.4 -*Status: shipped in Meteor 1.6.* -*Pull request: https://github.com/meteor/meteor/pull/8728* +### Support for Node 4 and beyond -Upgrading Node will allow Meteor to take better advantage of native support for new ECMAScript features on the server, which should speed up build performance and also improve runtime performance, thanks to performance improvements in Node itself. +- Status: shipped in Meteor 1.4 -Perhaps even more importantly, newer versions of Node support a vastly improved debugging experience. Not only can you use native Chrome DevTools and many other debugging clients (WebStorm, VS Code, etc.) to debug your app (no more [`node-inspector`](https://www.npmjs.com/package/node-inspector)), but also the Node process runs at full speed while debugging, so you don't have to wait as long for problems to manifest themselves. +### View Layer -## Upgrade to npm 5 +- Status: Blaze split into new repository and can be published independently as of 1.4.2 -*Status: implemented since `1.6-beta.4`.* - -It’s been an interesting year for npm clients. Once unrivaled as the tool of choice for installing npm packages, the `npm` command-line tool faced some serious competition starting last September from an innovative tool called `yarn`, which promised fast, reproducible installs based on `yarn.lock` files. - -The popularity of `yarn` led Meteor to support `meteor yarn` in addition to `meteor npm` (though you had to `meteor npm install --global yarn` first, so `npm` still had an advantage). Our own Galaxy Server and Optics apps, which are built with Meteor, switched over to `yarn` soon after its release. The appeal was undeniable. - -This competition was a good thing for JavaScript developers, first because yarn solved some long-standing problems with `npm`, and later because `npm@5` responded by shipping its own implementation of some similar features, with `package-lock.json` files and automatic addition of npm install-ed packages to `package.json`. - -These improvements to `npm` will benefit all Meteor developers, even those who keep using `yarn`, because package dependencies specified with `Npm.depends` are automatically installed using `npm`, and `npm@5` performs those installations much faster and more reliably. - -Meteor is careful to remain agnostic about how you choose to populate your `node_modules` directories, so we fully expect that `meteor npm` and `meteor yarn` will remain equally good alternatives for that purpose. - -## Dynamic `import(...)` - -*Status: Shipped in 1.5* - -The banner feature of this effort will be first-class support for [dynamic `import(...)`](https://github.com/tc39/proposal-dynamic-import), which enables asynchronous module fetching. - -Read the recent [blog post](https://blog.meteor.com/meteor-1-5-react-loadable-f029a320e59c) for an overview of how this system will work in Meteor 1.5. - -Remaining work can be found [here](https://github.com/meteor/meteor/blob/release-1.5/packages/dynamic-import/TODO.md), though not all of those ideas will necessarily block the initial 1.5 release. - - -## Rebuild performance improvements - -*Status: Shipped in 1.4.2* - -Rebuild performance refers to the length of time between changing a file in development and being able to reload your app in a browser. After extensive profiling to identify performance hot-spots, and with careful caching of previously completed work, Meteor 1.4.2 takes substantially less time to rebuild most apps, especially larger apps. - - -## MongoDB updates - -*Status: Shipped in 1.4* - -The mongo driver that currently ships with Meteor is old and doesn’t reliably work with connecting to MongoDB 3.2 databases (e.g [#6258](https://github.com/meteor/meteor/issues/6258)). We want to update to the latest driver [#5763](https://github.com/meteor/meteor/issues/5763). -In addition, we'd like to update the dev bundle to ship with the latest stable version of MongoDB (3.2) [#5809](https://github.com/meteor/meteor/issues/5809) as MongoDB 2.6 will be officially sunsetted at the end of October, 2016. - - -## Support for Node 4 and beyond - -*Status: Shipped in 1.4* - -We want to be able to update the version of Node that ships with Meteor to 4 and eventually 6 [#5124](https://github.com/meteor/meteor/issues/5124). [#6537](https://github.com/meteor/meteor/issues/6537) lays the groundwork to overcome the main blocker for updating to Node 4, that is, needing to rebuild all existing Meteor packages that contain binary dependencies. - - -## View Layer - -*Status: Blaze split into new repository and can be published independently as of 1.4.2* - -Our plans around the view layer are to maintain strong integrations (along with guidance) with React, Angular and Blaze. We'll make essential fixes to Blaze but most likely won't be adding new features ourselves. We encourage you to help build the features you need at the [meteor/blaze](https://github.com/meteor/blaze) repository. - - -## Project Governance/Community Contribution - -*Status: Since this topic was added to the roadmap, we have introduced [completely new contribution guidelines](https://github.com/meteor/meteor/blob/devel/CONTRIBUTING.md) that outline exactly how to contribute to Meteor in several ways, including triaging issues, improving documentation, submitting designs for new features, and submitting PRs for bug fixes and improvements. We encourage proposals about how to make the process better via new GitHub issues.* - -Currently, it’s difficult for external developers to make meaningful contributions to Meteor as there is no clear guidance on what to work on, how best to do that work and signals around what will/won’t get merged. We plan on fixing this by creating tight documentation around how the project is developed (e.g the [Swift contribution guidelines](https://swift.org/contributing/)) and giving contributors a path towards earning increased privileges that culminate in full commit access. We’re also aiming to move more sub-projects into their own repositories that can be released on their own release schedule and more easily maintained by the community. - - -## Other +### Other For more completed items, refer to the project history here: https://github.com/meteor/meteor/blob/devel/History.md diff --git a/appveyor.yml b/appveyor.yml index 28290ec4c6..7c1ca47fdd 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -43,5 +43,5 @@ on_failure: cache: - dev_bundle -> meteor - - .babel-cache + - .babel-cache -> meteor - .meteor diff --git a/examples/.gitignore b/examples/.gitignore deleted file mode 100644 index 045adfab29..0000000000 --- a/examples/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -# Each individual example should include 'local' in foo/.meteor/.gitignore. -# However, we also include this top-level .gitignore so that the following -# situation: -# $ git checkout some-branch-with-a-new-example -# $ (cd examples/unfinished/new-example; meteor) -# $ git checkout devel -# doesn't leave you with tons of files in -# examples/unfinished/new-example/.meteor/local showing up in your 'git status'. - -*/.meteor/local -*/*/.meteor/local - -# We don't want to check example project id files into the main meteor -# repo... but we do want users who create apps from the examples to check -# *their* project id files into their repos, so we put this ignore line -# here rather than in the examples/FOO/.meteor/.gitignore. -*/.meteor/.id diff --git a/examples/other/benchmark/.meteor/release b/examples/other/benchmark/.meteor/release deleted file mode 100644 index a918a2aa18..0000000000 --- a/examples/other/benchmark/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -0.6.0 diff --git a/examples/other/client-info/.meteor/packages b/examples/other/client-info/.meteor/packages deleted file mode 100644 index 211fb469eb..0000000000 --- a/examples/other/client-info/.meteor/packages +++ /dev/null @@ -1,8 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -standard-app-packages -insecure -preserve-inputs diff --git a/examples/other/client-info/.meteor/release b/examples/other/client-info/.meteor/release deleted file mode 100644 index b6e63167d2..0000000000 --- a/examples/other/client-info/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -0.7.0.1 diff --git a/examples/other/client-info/client-info.html b/examples/other/client-info/client-info.html deleted file mode 100644 index a69641848d..0000000000 --- a/examples/other/client-info/client-info.html +++ /dev/null @@ -1,15 +0,0 @@ - - Client Info - - - - {{> info}} - - - diff --git a/examples/other/client-info/client-info.js b/examples/other/client-info/client-info.js deleted file mode 100644 index 506b5588af..0000000000 --- a/examples/other/client-info/client-info.js +++ /dev/null @@ -1,19 +0,0 @@ -if (Meteor.isServer) { - Meteor.publish("clientInfo", function () { - var self = this; - self.added("clientInfo", "info", { - clientAddress: self.connection.clientAddress, - httpHeaders: self.connection.httpHeaders - }); - self.ready(); - }); -} - -if (Meteor.isClient) { - Meteor.subscribe("clientInfo"); - var ClientInfo = new Mongo.Collection("clientInfo"); - - Template.info.info = function () { - return EJSON.stringify(ClientInfo.findOne("info"), {indent: true}); - }; -} diff --git a/examples/other/controllers-demo/.meteor/release b/examples/other/controllers-demo/.meteor/release deleted file mode 100644 index a918a2aa18..0000000000 --- a/examples/other/controllers-demo/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -0.6.0 diff --git a/examples/other/defer-in-inactive-tab/.meteor/packages b/examples/other/defer-in-inactive-tab/.meteor/packages deleted file mode 100644 index 5d992a7f9a..0000000000 --- a/examples/other/defer-in-inactive-tab/.meteor/packages +++ /dev/null @@ -1,6 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -standard-app-packages diff --git a/examples/other/defer-in-inactive-tab/README.md b/examples/other/defer-in-inactive-tab/README.md deleted file mode 100644 index b039b0778b..0000000000 --- a/examples/other/defer-in-inactive-tab/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Defer in Inactive Tab - -Tests that `Meteor.defer` works in an inactive tab in iOS Safari. - -(`setTimeout` and `setInterval` events aren't delivered to inactive -tabs in iOS Safari until they become active again). - -Sadly we have to run the test manually because scripts aren't allowed -to open windows themselves except in response to user events. - -This test will not run on Chrome for iOS because the storage event is -not implemented in that browser. Also doesn't attempt to run on -versions of IE that don't support `window.addEventListener`. diff --git a/examples/other/defer-in-inactive-tab/test.html b/examples/other/defer-in-inactive-tab/test.html deleted file mode 100644 index ac8815279e..0000000000 --- a/examples/other/defer-in-inactive-tab/test.html +++ /dev/null @@ -1,52 +0,0 @@ - - defer in inactive tab - - - - - {{> route}} - - - - - - - diff --git a/examples/other/defer-in-inactive-tab/test.js b/examples/other/defer-in-inactive-tab/test.js deleted file mode 100644 index 33844c2933..0000000000 --- a/examples/other/defer-in-inactive-tab/test.js +++ /dev/null @@ -1,57 +0,0 @@ -if (Meteor.isClient) { - - var isParent = (window.location.pathname === '/'); - var isChild = ! isParent; - - Template.route.isParent = function () { - return isParent; - }; - - Template.parent.testStatus = function () { - return Session.get('testStatus'); - }; - - Template.parent.events({ - 'click #openTab': function () { - window.open('/child'); - }, - - 'click #runTest': function () { - if (localStorage.getItem('ping') === '!' || - localStorage.getItem('pong') === '!') { - Session.set('testStatus', 'Test already run. Close the second tab (if open), refresh this page, and run again.'); - } - else { - localStorage.setItem('ping', '!'); - } - } - }); - - if (isParent) { - Session.set('testStatus', ''); - - Meteor.startup(function () { - localStorage.setItem('ping', null); - localStorage.setItem('pong', null); - }); - window.addEventListener('storage', function (event) { - if (event.key === 'pong' && event.newValue === '!') { - Session.set('testStatus', 'test successful'); - } - }); - } - - if (isChild) { - window.addEventListener('storage', function (event) { - if (event.key === 'ping' && event.newValue === '!') { - // If we used setTimeout here in iOS Safari it wouldn't - // work (unless we switched tabs) because setTimeout and - // setInterval events don't fire in inactive tabs. - Meteor.defer(function () { - localStorage.setItem('pong', '!'); - }); - } - }); - } - -} diff --git a/examples/other/domrange-grid/.meteor/packages b/examples/other/domrange-grid/.meteor/packages deleted file mode 100644 index f2b45cff30..0000000000 --- a/examples/other/domrange-grid/.meteor/packages +++ /dev/null @@ -1,10 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -standard-app-packages -autopublish -insecure -preserve-inputs -ui diff --git a/examples/other/domrange-grid/domrange-grid.css b/examples/other/domrange-grid/domrange-grid.css deleted file mode 100644 index 0cbc882454..0000000000 --- a/examples/other/domrange-grid/domrange-grid.css +++ /dev/null @@ -1,18 +0,0 @@ -/* CSS declarations go here */ - - -* { margin: 0; padding: 0 } - -#grid td { - width: 20px; - height: 20px; - vertical-align: middle; - text-align: center; -} - -.color0 { background: #eee; } -.color1 { background: #d8f; } -.color2 { background: #8c3; } -.color3 { background: #39d; } -.color4 { background: #d96; } -.color5 { background: #a95; } diff --git a/examples/other/domrange-grid/domrange-grid.html b/examples/other/domrange-grid/domrange-grid.html deleted file mode 100644 index cf3a65f0b2..0000000000 --- a/examples/other/domrange-grid/domrange-grid.html +++ /dev/null @@ -1,7 +0,0 @@ - - domrange-grid - - - - - diff --git a/examples/other/domrange-grid/domrange-grid.js b/examples/other/domrange-grid/domrange-grid.js deleted file mode 100644 index 6956fb0b5f..0000000000 --- a/examples/other/domrange-grid/domrange-grid.js +++ /dev/null @@ -1,105 +0,0 @@ -if (Meteor.isClient) { - Meteor.startup(function () { - var N = 10; - var numColors = 6; - var colors = []; - for(var z = 0; z < numColors; z++) - colors[z] = z; - - var guid = 1; - - var table = $('
'); - $(table).appendTo("body"); - var rows = []; - var tableContent = new UI.DomRange; - var makeCell = function (row) { - var cells = row.cells; - var tr = row.dom.elements()[0]; - var cell = {color: Random.choice(colors), - guid: String(guid++)}; - cell.dom = new UI.DomRange(cell); - cells.push(cell); - cell.dom.add(cell.guid, $('' + - cell.color + '')); - row.content.add(cell.guid, cell); - }; - var makeRow = function () { - var row = {cells: [], guid: String(guid++), - content: new UI.DomRange}; - row.dom = new UI.DomRange(row); - rows.push(row); - tableContent.add(row.guid, row); - var tr = $("")[0]; - row.dom.add(tr); - UI.DomRange.insert(row.content, tr); - var cells = row.cells; - for(var c = 0; c < N; c++) - makeCell(row); - }; - for (var r = 0; r < N; r++) - makeRow(); - - UI.DomRange.insert(tableContent, table[0]); - - $(document).on('keydown', function (evt) { - var deltaN = 0; - var deltaC = 0; - if (evt.which === 38) { - deltaN = 1; // up - } else if (evt.which === 40) { - deltaN = -1; // down - } else if (evt.which === 37) { - deltaC = -1; // left - } else if (evt.which === 39) { - deltaC = 1; // right - } else if (evt.which === 32) { - // spacebar - var row0 = rows.shift(); - rows.push(row0); - tableContent.moveBefore(row0.guid, null); - for (var i = 0; i < rows.length; i++) { - var row = rows[i]; - var cell0 = row.cells.shift(); - row.cells.push(cell0); - row.content.moveBefore(cell0.guid, null); - } - } - - if (deltaN === 1) { - N += 1; - for (var i = 0; i < N - 1; i++) - // lengthen old rows - makeCell(rows[i]); - makeRow(); - } else if (deltaN === -1) { - if (N === 0) - return; - N -= 1; - tableContent.remove(rows[N].guid); - rows.length = N; - for (var i = 0; i < N; i++) { - var row = rows[i]; - row.content.remove(row.cells[N].guid); - rows[i].cells.length = N; - } - } - - if (deltaC) { - for (var r = 0; r < N; r++) { - var row = rows[r]; - for (var c = 0; c < N; c++) { - var cell = row.cells[c]; - var td = cell.dom.elements()[0]; - var color = - (cell.color = - (cell.color + deltaC + numColors) - % numColors); - td.innerHTML = color; - td.className = 'color' + color; - } - } - } - }); - }); -} diff --git a/examples/other/login-demo/.meteor/packages b/examples/other/login-demo/.meteor/packages deleted file mode 100644 index b03b9ed442..0000000000 --- a/examples/other/login-demo/.meteor/packages +++ /dev/null @@ -1,8 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -preserve-inputs -accounts-google -standard-app-packages diff --git a/examples/other/login-demo/login-demo.css b/examples/other/login-demo/login-demo.css deleted file mode 100644 index 7fa09d5eee..0000000000 --- a/examples/other/login-demo/login-demo.css +++ /dev/null @@ -1,32 +0,0 @@ - -* { padding: 0; margin: 0; } - -#main { - margin: 50px; - text-align: center; - font-size: 24px; -} - -.msgDiv { - margin: 30px; -} - -a { - padding: 5px; - background: #ddd; -} - -#readme { - margin: 20px; - border: 1px solid #ccc; - width: 500px; -} - -p { - margin: 16px; -} - -ul { - margin: 16px; - padding-left: 30px; -} diff --git a/examples/other/login-demo/login-demo.html b/examples/other/login-demo/login-demo.html deleted file mode 100644 index c888074559..0000000000 --- a/examples/other/login-demo/login-demo.html +++ /dev/null @@ -1,38 +0,0 @@ - - login-demo - - - -
- {{> main}} -
-
-

This is a minimal app where you need to log in to see the database. There's also a loading screen while logging in and until the initial data is loaded.

-

There are three top-level screens corresponding to the three possible states of the app:

-
    -
  • Logging in / Loading — when {{loggingIn}} is true
  • -
  • Logged in — when there is a {{currentUser}}
  • -
  • Logged out — otherwise
  • -
-

If you reload the page while logged in, you'll start in the "logging in" state and see the "Loading..." message until the data loads. Because logging in doesn't complete until all subscriptions have been rerun and finished loading, and the app only serves data when you're logged in, the "logging in" state encompasses loading the initial data for all subscriptions and is the only loading screen we need.

-

To configure this app for Google auth, the easiest way is to add the accounts-ui package, add {{> loginButtons}} to the end of the body, and use the configuration wizard.

-
- - - diff --git a/examples/other/login-demo/login-demo.js b/examples/other/login-demo/login-demo.js deleted file mode 100644 index 8a1e21e30e..0000000000 --- a/examples/other/login-demo/login-demo.js +++ /dev/null @@ -1,57 +0,0 @@ -Gizmos = new Mongo.Collection("gizmos"); - -if (Meteor.isClient) { - - var allGizmos = Meteor.subscribe("allGizmos"); - - Template.main.numGizmos = function () { - return Gizmos.find().count(); - }; - - Template.main.events({ - 'click #login': function (evt) { - Meteor.loginWithGoogle(function (err) { - if (err) - Meteor._debug(err); - }); - evt.preventDefault(); - }, - 'click #logout': function (evt) { - Meteor.logout(function (err) { - if (err) - Meteor._debug(err); - }); - evt.preventDefault(); - } - }); -} - -if (Meteor.isServer) { - - Meteor.startup(function () { - // populate the Gizmos collection if it's empty on startup - if (Gizmos.find().count() === 0) { - for (var i = 0; i < 1000; i++) - Gizmos.insert({ name: "Gizmo " + i }); - } - }); - - Meteor.publish("allGizmos", function () { - // Only publish the Gizmos if user is logged in. - var user = this.userId && Meteor.users.findOne(this.userId); - if (user) { - // potentially put other conditions on user here... - return Gizmos.find({}); - } - return []; - }); - - Meteor.publish(null, function () { - // If logged in, autopublish the current user's Google email - // to the client (which isn't published by default). - return this.userId && - Meteor.users.find(this.userId, - {fields: {'services.google.email': 1}}); - }); - -} diff --git a/examples/other/parties/.meteor/.finished-upgraders b/examples/other/parties/.meteor/.finished-upgraders deleted file mode 100644 index 68df3d8d0d..0000000000 --- a/examples/other/parties/.meteor/.finished-upgraders +++ /dev/null @@ -1,7 +0,0 @@ -# This file contains information which helps Meteor properly upgrade your -# app when you run 'meteor update'. You should check it into version control -# with your project. - -notices-for-0.9.0 -notices-for-0.9.1 -0.9.4-platform-file diff --git a/examples/other/parties/.meteor/packages b/examples/other/parties/.meteor/packages deleted file mode 100644 index 91e110ecf0..0000000000 --- a/examples/other/parties/.meteor/packages +++ /dev/null @@ -1,14 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -standard-app-packages -accounts-ui -accounts-password -d3 -bootstrap -email -accounts-facebook -accounts-twitter -audit-argument-checks diff --git a/examples/other/parties/.meteor/release b/examples/other/parties/.meteor/release deleted file mode 100644 index 7057f80807..0000000000 --- a/examples/other/parties/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -METEOR@0.9.4 diff --git a/examples/other/parties/.meteor/versions b/examples/other/parties/.meteor/versions deleted file mode 100644 index a9ab23068b..0000000000 --- a/examples/other/parties/.meteor/versions +++ /dev/null @@ -1,72 +0,0 @@ -accounts-base@1.1.2 -accounts-facebook@1.0.2 -accounts-oauth@1.1.2 -accounts-password@1.0.3 -accounts-twitter@1.0.2 -accounts-ui-unstyled@1.1.3 -accounts-ui@1.1.2 -application-configuration@1.0.3 -audit-argument-checks@1.0.1 -autoupdate@1.1.2 -base64@1.0.1 -binary-heap@1.0.1 -blaze-tools@1.0.1 -blaze@2.0.2 -boilerplate-generator@1.0.1 -bootstrap@1.0.1 -callback-hook@1.0.1 -check@1.0.2 -ctl-helper@1.0.4 -ctl@1.0.2 -d3@1.0.0 -ddp@1.0.10 -deps@1.0.5 -ejson@1.0.4 -email@1.0.4 -facebook@1.1.1 -fastclick@1.0.1 -follower-livedata@1.0.2 -geojson-utils@1.0.1 -html-tools@1.0.2 -htmljs@1.0.2 -http@1.0.7 -id-map@1.0.1 -jquery@1.0.1 -json@1.0.1 -less@1.0.10 -livedata@1.0.11 -localstorage@1.0.1 -logging@1.0.4 -meteor-platform@1.1.2 -meteor@1.1.2 -minifiers@1.1.1 -minimongo@1.0.4 -mobile-status-bar@1.0.1 -mongo@1.0.7 -npm-bcrypt@0.7.7 -oauth1@1.1.1 -oauth2@1.1.1 -oauth@1.1.1 -observe-sequence@1.0.3 -ordered-dict@1.0.1 -random@1.0.1 -reactive-dict@1.0.4 -reactive-var@1.0.3 -reload@1.1.1 -retry@1.0.1 -routepolicy@1.0.2 -service-configuration@1.0.2 -session@1.0.3 -sha@1.0.1 -spacebars-compiler@1.0.3 -spacebars@1.0.3 -srp@1.0.1 -standard-app-packages@1.0.3 -templating@1.0.8 -tracker@1.0.3 -twitter@1.1.1 -ui@1.0.4 -underscore@1.0.1 -url@1.0.1 -webapp-hashing@1.0.1 -webapp@1.1.3 diff --git a/examples/other/parties/client/client.js b/examples/other/parties/client/client.js deleted file mode 100644 index f233e71d0f..0000000000 --- a/examples/other/parties/client/client.js +++ /dev/null @@ -1,285 +0,0 @@ -// All Tomorrow's Parties -- client - -Meteor.subscribe("directory"); -Meteor.subscribe("parties"); - -// If no party selected, or if the selected party was deleted, select one. -Meteor.startup(function () { - Tracker.autorun(function () { - var selected = Session.get("selected"); - if (! selected || ! Parties.findOne(selected)) { - var party = Parties.findOne(); - if (party) - Session.set("selected", party._id); - else - Session.set("selected", null); - } - }); -}); - -/////////////////////////////////////////////////////////////////////////////// -// Party details sidebar - -Template.details.helpers({ - party: function () { - return Parties.findOne(Session.get("selected")); - }, - anyParties: function () { - return Parties.find().count() > 0; - }, - creatorName: function () { - var owner = Meteor.users.findOne(this.owner); - if (owner._id === Meteor.userId()) - return "me"; - return displayName(owner); - }, - canRemove: function () { - return this.owner === Meteor.userId() && attending(this) === 0; - }, - maybeChosen: function (what) { - var myRsvp = _.find(this.rsvps, function (r) { - return r.user === Meteor.userId(); - }) || {}; - - return what == myRsvp.rsvp ? "chosen btn-inverse" : ""; - } -}); - -Template.details.events({ - 'click .rsvp_yes': function () { - Meteor.call("rsvp", Session.get("selected"), "yes"); - return false; - }, - 'click .rsvp_maybe': function () { - Meteor.call("rsvp", Session.get("selected"), "maybe"); - return false; - }, - 'click .rsvp_no': function () { - Meteor.call("rsvp", Session.get("selected"), "no"); - return false; - }, - 'click .invite': function () { - openInviteDialog(); - return false; - }, - 'click .remove': function () { - Parties.remove(this._id); - return false; - } -}); - -/////////////////////////////////////////////////////////////////////////////// -// Party attendance widget - -Template.attendance.helpers({ - rsvpName: function () { - var user = Meteor.users.findOne(this.user); - return displayName(user); - }, - - outstandingInvitations: function () { - var party = Parties.findOne(this._id); - return Meteor.users.find({$and: [ - {_id: {$in: party.invited}}, // they're invited - {_id: {$nin: _.pluck(party.rsvps, 'user')}} // but haven't RSVP'd - ]}); - }, - - invitationName: function () { - return displayName(this); - }, - - rsvpIs: function (what) { - return this.rsvp === what; - }, - - nobody: function () { - return ! this.public && (this.rsvps.length + this.invited.length === 0); - }, - - canInvite: function () { - return ! this.public && this.owner === Meteor.userId(); - } -}); - -/////////////////////////////////////////////////////////////////////////////// -// Map display - -// Use jquery to get the position clicked relative to the map element. -var coordsRelativeToElement = function (element, event) { - var offset = $(element).offset(); - var x = event.pageX - offset.left; - var y = event.pageY - offset.top; - return { x: x, y: y }; -}; - -Template.map.events({ - 'mousedown circle, mousedown text': function (event, template) { - Session.set("selected", event.currentTarget.id); - }, - 'dblclick .map': function (event, template) { - if (! Meteor.userId()) // must be logged in to create events - return; - var coords = coordsRelativeToElement(event.currentTarget, event); - openCreateDialog(coords.x / 500, coords.y / 500); - } -}); - -Template.map.onRendered(function () { - var self = this; - self.node = self.find("svg"); - - if (! self.handle) { - self.handle = Tracker.autorun(function () { - var selected = Session.get('selected'); - var selectedParty = selected && Parties.findOne(selected); - var radius = function (party) { - return 10 + Math.sqrt(attending(party)) * 10; - }; - - // Draw a circle for each party - var updateCircles = function (group) { - group.attr("id", function (party) { return party._id; }) - .attr("cx", function (party) { return party.x * 500; }) - .attr("cy", function (party) { return party.y * 500; }) - .attr("r", radius) - .attr("class", function (party) { - return party.public ? "public" : "private"; - }) - .style('opacity', function (party) { - return selected === party._id ? 1 : 0.6; - }); - }; - - var circles = d3.select(self.node).select(".circles").selectAll("circle") - .data(Parties.find().fetch(), function (party) { return party._id; }); - - updateCircles(circles.enter().append("circle")); - updateCircles(circles.transition().duration(250).ease("cubic-out")); - circles.exit().transition().duration(250).attr("r", 0).remove(); - - // Label each with the current attendance count - var updateLabels = function (group) { - group.attr("id", function (party) { return party._id; }) - .text(function (party) {return attending(party) || '';}) - .attr("x", function (party) { return party.x * 500; }) - .attr("y", function (party) { return party.y * 500 + radius(party)/2 }) - .style('font-size', function (party) { - return radius(party) * 1.25 + "px"; - }); - }; - - var labels = d3.select(self.node).select(".labels").selectAll("text") - .data(Parties.find().fetch(), function (party) { return party._id; }); - - updateLabels(labels.enter().append("text")); - updateLabels(labels.transition().duration(250).ease("cubic-out")); - labels.exit().remove(); - - // Draw a dashed circle around the currently selected party, if any - var callout = d3.select(self.node).select("circle.callout") - .transition().duration(250).ease("cubic-out"); - if (selectedParty) - callout.attr("cx", selectedParty.x * 500) - .attr("cy", selectedParty.y * 500) - .attr("r", radius(selectedParty) + 10) - .attr("class", "callout") - .attr("display", ''); - else - callout.attr("display", 'none'); - }); - } -}); - -Template.map.onDestroyed = function () { - this.handle && this.handle.stop(); -}; - -/////////////////////////////////////////////////////////////////////////////// -// Create Party dialog - -var openCreateDialog = function (x, y) { - Session.set("createCoords", {x: x, y: y}); - Session.set("createError", null); - Session.set("showCreateDialog", true); -}; - -Template.page.helpers({ - showCreateDialog: function () { - return Session.get("showCreateDialog"); - } -}); - -Template.createDialog.events({ - 'click .save': function (event, template) { - var title = template.find(".title").value; - var description = template.find(".description").value; - var public = ! template.find(".private").checked; - var coords = Session.get("createCoords"); - - if (title.length && description.length) { - var id = createParty({ - title: title, - description: description, - x: coords.x, - y: coords.y, - public: public - }); - - Session.set("selected", id); - if (! public && Meteor.users.find().count() > 1) - openInviteDialog(); - Session.set("showCreateDialog", false); - } else { - Session.set("createError", - "It needs a title and a description, or why bother?"); - } - }, - - 'click .cancel': function () { - Session.set("showCreateDialog", false); - } -}); - -Template.createDialog.helpers({ - error: function () { - return Session.get("createError"); - } -}); - -/////////////////////////////////////////////////////////////////////////////// -// Invite dialog - -var openInviteDialog = function () { - Session.set("showInviteDialog", true); -}; - -Template.page.helpers({ - showInviteDialog: function () { - return Session.get("showInviteDialog"); - } -}); - -Template.inviteDialog.events({ - 'click .invite': function (event, template) { - Meteor.call('invite', Session.get("selected"), this._id); - }, - 'click .done': function (event, template) { - Session.set("showInviteDialog", false); - return false; - } -}); - -Template.inviteDialog.helpers({ - uninvited: function () { - var party = Parties.findOne(Session.get("selected")); - if (! party) - return []; // party hasn't loaded yet - return Meteor.users.find({$nor: [{_id: {$in: party.invited}}, - {_id: party.owner}]}); - }, - - displayName: function () { - return displayName(this); - } -}); diff --git a/examples/other/parties/client/parties.css b/examples/other/parties/client/parties.css deleted file mode 100644 index e51bfc6fb5..0000000000 --- a/examples/other/parties/client/parties.css +++ /dev/null @@ -1,81 +0,0 @@ -.header { - padding: 20px 0; -} - -.details { - margin-top: -18px; -} - -.mask { - position: absolute; - width: 100%; - height: 100%; - top: 0px; - left: 0px; - background-color: #000000; - opacity: .4; - z-index: 1; -} - -.invite-row .invite { - margin: 10px 10px 10px 0; -} - -.rsvp-buttons { - text-align: center; - margin: 40px 0 40px 0; -} - -.description { - margin: 20px 0 20px 0; -} - -.attendance .who { - margin-bottom: 5px; -} - -.attendance .invite { - text-align: center; -} - -input.chosen { - font-weight: bold; -} - -.map { - position: relative; - background-image: url('/soma.png'); - background-position: -20px -20px; - width: 500px; - height: 500px; -} - -.map circle.public { - fill: #49AFCD; -} - -.map circle.private { - fill: #DA4F49; -} - -.map text { - text-anchor: middle; - fill: white; - font-weight: bold; -} - -.map circle.callout { - stroke-width: 5px; - stroke-dasharray: 9, 5; - stroke-opacity: .8; - fill: none; - stroke: red; -} - -.attribution { - position: absolute; - bottom: 0; - background-color: white; - padding: 3px; - padding-bottom: 0; -} diff --git a/examples/other/parties/client/parties.html b/examples/other/parties/client/parties.html deleted file mode 100644 index aa95f9bdae..0000000000 --- a/examples/other/parties/client/parties.html +++ /dev/null @@ -1,216 +0,0 @@ - - All Tomorrow's Parties - - - - - {{> page}} - - - - - - - - - - - - - - diff --git a/examples/other/parties/model.js b/examples/other/parties/model.js deleted file mode 100644 index e17b81c971..0000000000 --- a/examples/other/parties/model.js +++ /dev/null @@ -1,183 +0,0 @@ -// All Tomorrow's Parties -- data model -// Loaded on both the client and the server - -/////////////////////////////////////////////////////////////////////////////// -// Parties - -/* - Each party is represented by a document in the Parties collection: - owner: user id - x, y: Number (screen coordinates in the interval [0, 1]) - title, description: String - public: Boolean - invited: Array of user id's that are invited (only if !public) - rsvps: Array of objects like {user: userId, rsvp: "yes"} (or "no"/"maybe") -*/ -Parties = new Mongo.Collection("parties"); - -Parties.allow({ - insert: function (userId, party) { - return false; // no cowboy inserts -- use createParty method - }, - update: function (userId, party, fields, modifier) { - if (userId !== party.owner) - return false; // not the owner - - var allowed = ["title", "description", "x", "y"]; - if (_.difference(fields, allowed).length) - return false; // tried to write to forbidden field - - // A good improvement would be to validate the type of the new - // value of the field (and if a string, the length.) In the - // future Meteor will have a schema system to makes that easier. - return true; - }, - remove: function (userId, party) { - // You can only remove parties that you created and nobody is going to. - return party.owner === userId && attending(party) === 0; - } -}); - -attending = function (party) { - return (_.groupBy(party.rsvps, 'rsvp').yes || []).length; -}; - -var NonEmptyString = Match.Where(function (x) { - check(x, String); - return x.length !== 0; -}); - -var Coordinate = Match.Where(function (x) { - check(x, Number); - return x >= 0 && x <= 1; -}); - -createParty = function (options) { - var id = Random.id(); - Meteor.call('createParty', _.extend({ _id: id }, options)); - return id; -}; - -Meteor.methods({ - // options should include: title, description, x, y, public - createParty: function (options) { - check(options, { - title: NonEmptyString, - description: NonEmptyString, - x: Coordinate, - y: Coordinate, - public: Match.Optional(Boolean), - _id: Match.Optional(NonEmptyString) - }); - - if (options.title.length > 100) - throw new Meteor.Error(413, "Title too long"); - if (options.description.length > 1000) - throw new Meteor.Error(413, "Description too long"); - if (! this.userId) - throw new Meteor.Error(403, "You must be logged in"); - - var id = options._id || Random.id(); - Parties.insert({ - _id: id, - owner: this.userId, - x: options.x, - y: options.y, - title: options.title, - description: options.description, - public: !! options.public, - invited: [], - rsvps: [] - }); - return id; - }, - - invite: function (partyId, userId) { - check(partyId, String); - check(userId, String); - var party = Parties.findOne(partyId); - if (! party || party.owner !== this.userId) - throw new Meteor.Error(404, "No such party"); - if (party.public) - throw new Meteor.Error(400, - "That party is public. No need to invite people."); - if (userId !== party.owner && ! _.contains(party.invited, userId)) { - Parties.update(partyId, { $addToSet: { invited: userId } }); - - var from = contactEmail(Meteor.users.findOne(this.userId)); - var to = contactEmail(Meteor.users.findOne(userId)); - if (Meteor.isServer && to) { - // This code only runs on the server. If you didn't want clients - // to be able to see it, you could move it to a separate file. - Email.send({ - from: "noreply@example.com", - to: to, - replyTo: from || undefined, - subject: "PARTY: " + party.title, - text: -"Hey, I just invited you to '" + party.title + "' on All Tomorrow's Parties." + -"\n\nCome check it out: " + Meteor.absoluteUrl() + "\n" - }); - } - } - }, - - rsvp: function (partyId, rsvp) { - check(partyId, String); - check(rsvp, String); - if (! this.userId) - throw new Meteor.Error(403, "You must be logged in to RSVP"); - if (! _.contains(['yes', 'no', 'maybe'], rsvp)) - throw new Meteor.Error(400, "Invalid RSVP"); - var party = Parties.findOne(partyId); - if (! party) - throw new Meteor.Error(404, "No such party"); - if (! party.public && party.owner !== this.userId && - !_.contains(party.invited, this.userId)) - // private, but let's not tell this to the user - throw new Meteor.Error(403, "No such party"); - - var rsvpIndex = _.indexOf(_.pluck(party.rsvps, 'user'), this.userId); - if (rsvpIndex !== -1) { - // update existing rsvp entry - - if (Meteor.isServer) { - // update the appropriate rsvp entry with $ - Parties.update( - {_id: partyId, "rsvps.user": this.userId}, - {$set: {"rsvps.$.rsvp": rsvp}}); - } else { - // minimongo doesn't yet support $ in modifier. as a temporary - // workaround, make a modifier that uses an index. this is - // safe on the client since there's only one thread. - var modifier = {$set: {}}; - modifier.$set["rsvps." + rsvpIndex + ".rsvp"] = rsvp; - Parties.update(partyId, modifier); - } - - // Possible improvement: send email to the other people that are - // coming to the party. - } else { - // add new rsvp entry - Parties.update(partyId, - {$push: {rsvps: {user: this.userId, rsvp: rsvp}}}); - } - } -}); - -/////////////////////////////////////////////////////////////////////////////// -// Users - -displayName = function (user) { - if (user.profile && user.profile.name) - return user.profile.name; - return user.emails[0].address; -}; - -var contactEmail = function (user) { - if (user.emails && user.emails.length) - return user.emails[0].address; - if (user.services && user.services.facebook && user.services.facebook.email) - return user.services.facebook.email; - return null; -}; diff --git a/examples/other/parties/public/soma.png b/examples/other/parties/public/soma.png deleted file mode 100644 index 11fea3f92b..0000000000 Binary files a/examples/other/parties/public/soma.png and /dev/null differ diff --git a/examples/other/parties/server/server.js b/examples/other/parties/server/server.js deleted file mode 100644 index 46ac47b686..0000000000 --- a/examples/other/parties/server/server.js +++ /dev/null @@ -1,10 +0,0 @@ -// All Tomorrow's Parties -- server - -Meteor.publish("directory", function () { - return Meteor.users.find({}, {fields: {emails: 1, profile: 1}}); -}); - -Meteor.publish("parties", function () { - return Parties.find( - {$or: [{"public": true}, {invited: this.userId}, {owner: this.userId}]}); -}); diff --git a/examples/other/quiescence/.meteor/packages b/examples/other/quiescence/.meteor/packages deleted file mode 100644 index e50106e265..0000000000 --- a/examples/other/quiescence/.meteor/packages +++ /dev/null @@ -1,9 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -insecure -preserve-inputs -random -standard-app-packages diff --git a/examples/other/quiescence/.meteor/release b/examples/other/quiescence/.meteor/release deleted file mode 100644 index a918a2aa18..0000000000 --- a/examples/other/quiescence/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -0.6.0 diff --git a/examples/other/quiescence/quiescence.html b/examples/other/quiescence/quiescence.html deleted file mode 100644 index f2cc4fa86d..0000000000 --- a/examples/other/quiescence/quiescence.html +++ /dev/null @@ -1,35 +0,0 @@ - - quiescence - - - - {{> clock}} - {{> updated}} - {{> stream}} - - - - - - - diff --git a/examples/other/quiescence/quiescence.js b/examples/other/quiescence/quiescence.js deleted file mode 100644 index c150291028..0000000000 --- a/examples/other/quiescence/quiescence.js +++ /dev/null @@ -1,96 +0,0 @@ -Time = new Mongo.Collection("time"); -Results = new Mongo.Collection("results"); -Magic = new Mongo.Collection("magic"); - -if (Meteor.isServer) { - Meteor.publish("time", function () { - var self = this; - var publishTime = function () { - var when = + new Date; - self.changed("time", "now", {timestamp: when}); - }; - self.added("time", "now", {}); - publishTime(); - self.ready(); - var interval = Meteor.setInterval(publishTime, 1000); - self.onStop(function () { - Meteor.clearInterval(interval); - }); - }); - Meteor.publish("results", function () { - return Results.find(); - }); - Meteor.publish("magic", function () { - return Magic.find(); - }); - - Meteor.startup(function () { - if (Magic.find().count() === 0) { - Magic.insert({number: 42}); - } - }); - - var Fiber = Npm.require('fibers'); - - var sleep = function (ms) { - var fiber = Fiber.current; - setTimeout(function() { - fiber.run(); - }, ms); - Fiber.yield(); - }; - - Meteor.methods({ - getResults: function () { - this.unblock(); - Results.remove({}); - for (var i = 0; i < 5; ++i) { - sleep(1000); - Results.insert({i: i, text: 'result ' + i}); - } - }}); -} else { - Meteor.subscribe("time"); - Meteor.subscribe("results"); - Meteor.subscribe("magic"); - - Template.clock.time = function () { - var now = Time.findOne('now'); - if (!now) - return "(loading)"; - return new Date(now.timestamp).toTimeString(); - }; - - Template.updated.magic = function () { - var singleton = Magic.findOne(); - if (!singleton) - return "(loading)"; - return singleton.number; - }; - Template.updated.events({ - 'click #update-button': function () { - var num = Math.round(Random.fraction()*100); - Meteor.call('setMagic', num); - } - }); - - Template.stream.events({ - 'click #stream-button': function () { - Meteor.call('getResults'); - } - }); - - Template.stream.results = function () { - return Results.find({}, {sort: ['i']}); - }; -} - -Meteor.methods({ - setMagic: function (num) { - if (this.isSimulation) { - Magic.update({}, {$set: {number: num}}); - } else { - Magic.update({}, {$set: {number: num + 0.5}}); - } - } -}); diff --git a/examples/other/template-demo/.meteor/.gitignore b/examples/other/template-demo/.meteor/.gitignore deleted file mode 100644 index 4083037423..0000000000 --- a/examples/other/template-demo/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/examples/other/template-demo/.meteor/packages b/examples/other/template-demo/.meteor/packages deleted file mode 100644 index 0aed446952..0000000000 --- a/examples/other/template-demo/.meteor/packages +++ /dev/null @@ -1,7 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -autopublish -standard-app-packages diff --git a/examples/other/template-demo/.meteor/release b/examples/other/template-demo/.meteor/release deleted file mode 100644 index a918a2aa18..0000000000 --- a/examples/other/template-demo/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -0.6.0 diff --git a/examples/other/template-demo/client/d3.v2.js b/examples/other/template-demo/client/d3.v2.js deleted file mode 100644 index 651da6bd99..0000000000 --- a/examples/other/template-demo/client/d3.v2.js +++ /dev/null @@ -1,7034 +0,0 @@ -(function() { - if (!Date.now) Date.now = function() { - return +(new Date); - }; - try { - document.createElement("div").style.setProperty("opacity", 0, ""); - } catch (error) { - var d3_style_prototype = CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty; - d3_style_prototype.setProperty = function(name, value, priority) { - d3_style_setProperty.call(this, name, value + "", priority); - }; - } - d3 = { - version: "2.10.0" - }; - function d3_class(ctor, properties) { - try { - for (var key in properties) { - Object.defineProperty(ctor.prototype, key, { - value: properties[key], - enumerable: false - }); - } - } catch (e) { - ctor.prototype = properties; - } - } - var d3_array = d3_arraySlice; - function d3_arrayCopy(pseudoarray) { - var i = -1, n = pseudoarray.length, array = []; - while (++i < n) array.push(pseudoarray[i]); - return array; - } - function d3_arraySlice(pseudoarray) { - return Array.prototype.slice.call(pseudoarray); - } - try { - d3_array(document.documentElement.childNodes)[0].nodeType; - } catch (e) { - d3_array = d3_arrayCopy; - } - var d3_arraySubclass = [].__proto__ ? function(array, prototype) { - array.__proto__ = prototype; - } : function(array, prototype) { - for (var property in prototype) array[property] = prototype[property]; - }; - d3.map = function(object) { - var map = new d3_Map; - for (var key in object) map.set(key, object[key]); - return map; - }; - function d3_Map() {} - d3_class(d3_Map, { - has: function(key) { - return d3_map_prefix + key in this; - }, - get: function(key) { - return this[d3_map_prefix + key]; - }, - set: function(key, value) { - return this[d3_map_prefix + key] = value; - }, - remove: function(key) { - key = d3_map_prefix + key; - return key in this && delete this[key]; - }, - keys: function() { - var keys = []; - this.forEach(function(key) { - keys.push(key); - }); - return keys; - }, - values: function() { - var values = []; - this.forEach(function(key, value) { - values.push(value); - }); - return values; - }, - entries: function() { - var entries = []; - this.forEach(function(key, value) { - entries.push({ - key: key, - value: value - }); - }); - return entries; - }, - forEach: function(f) { - for (var key in this) { - if (key.charCodeAt(0) === d3_map_prefixCode) { - f.call(this, key.substring(1), this[key]); - } - } - } - }); - var d3_map_prefix = "\0", d3_map_prefixCode = d3_map_prefix.charCodeAt(0); - function d3_identity(d) { - return d; - } - function d3_this() { - return this; - } - function d3_true() { - return true; - } - function d3_functor(v) { - return typeof v === "function" ? v : function() { - return v; - }; - } - d3.functor = d3_functor; - d3.rebind = function(target, source) { - var i = 1, n = arguments.length, method; - while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]); - return target; - }; - function d3_rebind(target, source, method) { - return function() { - var value = method.apply(source, arguments); - return arguments.length ? target : value; - }; - } - d3.ascending = function(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; - }; - d3.descending = function(a, b) { - return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; - }; - d3.mean = function(array, f) { - var n = array.length, a, m = 0, i = -1, j = 0; - if (arguments.length === 1) { - while (++i < n) if (d3_number(a = array[i])) m += (a - m) / ++j; - } else { - while (++i < n) if (d3_number(a = f.call(array, array[i], i))) m += (a - m) / ++j; - } - return j ? m : undefined; - }; - d3.median = function(array, f) { - if (arguments.length > 1) array = array.map(f); - array = array.filter(d3_number); - return array.length ? d3.quantile(array.sort(d3.ascending), .5) : undefined; - }; - d3.min = function(array, f) { - var i = -1, n = array.length, a, b; - if (arguments.length === 1) { - while (++i < n && ((a = array[i]) == null || a != a)) a = undefined; - while (++i < n) if ((b = array[i]) != null && a > b) a = b; - } else { - while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined; - while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b; - } - return a; - }; - d3.max = function(array, f) { - var i = -1, n = array.length, a, b; - if (arguments.length === 1) { - while (++i < n && ((a = array[i]) == null || a != a)) a = undefined; - while (++i < n) if ((b = array[i]) != null && b > a) a = b; - } else { - while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined; - while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b; - } - return a; - }; - d3.extent = function(array, f) { - var i = -1, n = array.length, a, b, c; - if (arguments.length === 1) { - while (++i < n && ((a = c = array[i]) == null || a != a)) a = c = undefined; - while (++i < n) if ((b = array[i]) != null) { - if (a > b) a = b; - if (c < b) c = b; - } - } else { - while (++i < n && ((a = c = f.call(array, array[i], i)) == null || a != a)) a = undefined; - while (++i < n) if ((b = f.call(array, array[i], i)) != null) { - if (a > b) a = b; - if (c < b) c = b; - } - } - return [ a, c ]; - }; - d3.random = { - normal: function(µ, σ) { - var n = arguments.length; - if (n < 2) σ = 1; - if (n < 1) µ = 0; - return function() { - var x, y, r; - do { - x = Math.random() * 2 - 1; - y = Math.random() * 2 - 1; - r = x * x + y * y; - } while (!r || r > 1); - return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r); - }; - }, - logNormal: function(µ, σ) { - var n = arguments.length; - if (n < 2) σ = 1; - if (n < 1) µ = 0; - var random = d3.random.normal(); - return function() { - return Math.exp(µ + σ * random()); - }; - }, - irwinHall: function(m) { - return function() { - for (var s = 0, j = 0; j < m; j++) s += Math.random(); - return s / m; - }; - } - }; - function d3_number(x) { - return x != null && !isNaN(x); - } - d3.sum = function(array, f) { - var s = 0, n = array.length, a, i = -1; - if (arguments.length === 1) { - while (++i < n) if (!isNaN(a = +array[i])) s += a; - } else { - while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a; - } - return s; - }; - d3.quantile = function(values, p) { - var H = (values.length - 1) * p + 1, h = Math.floor(H), v = values[h - 1], e = H - h; - return e ? v + e * (values[h] - v) : v; - }; - d3.transpose = function(matrix) { - return d3.zip.apply(d3, matrix); - }; - d3.zip = function() { - if (!(n = arguments.length)) return []; - for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) { - for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) { - zip[j] = arguments[j][i]; - } - } - return zips; - }; - function d3_zipLength(d) { - return d.length; - } - d3.bisector = function(f) { - return { - left: function(a, x, lo, hi) { - if (arguments.length < 3) lo = 0; - if (arguments.length < 4) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (f.call(a, a[mid], mid) < x) lo = mid + 1; else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (arguments.length < 3) lo = 0; - if (arguments.length < 4) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (x < f.call(a, a[mid], mid)) hi = mid; else lo = mid + 1; - } - return lo; - } - }; - }; - var d3_bisector = d3.bisector(function(d) { - return d; - }); - d3.bisectLeft = d3_bisector.left; - d3.bisect = d3.bisectRight = d3_bisector.right; - d3.first = function(array, f) { - var i = 0, n = array.length, a = array[0], b; - if (arguments.length === 1) f = d3.ascending; - while (++i < n) { - if (f.call(array, a, b = array[i]) > 0) { - a = b; - } - } - return a; - }; - d3.last = function(array, f) { - var i = 0, n = array.length, a = array[0], b; - if (arguments.length === 1) f = d3.ascending; - while (++i < n) { - if (f.call(array, a, b = array[i]) <= 0) { - a = b; - } - } - return a; - }; - d3.nest = function() { - var nest = {}, keys = [], sortKeys = [], sortValues, rollup; - function map(array, depth) { - if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array; - var i = -1, n = array.length, key = keys[depth++], keyValue, object, valuesByKey = new d3_Map, values, o = {}; - while (++i < n) { - if (values = valuesByKey.get(keyValue = key(object = array[i]))) { - values.push(object); - } else { - valuesByKey.set(keyValue, [ object ]); - } - } - valuesByKey.forEach(function(keyValue) { - o[keyValue] = map(valuesByKey.get(keyValue), depth); - }); - return o; - } - function entries(map, depth) { - if (depth >= keys.length) return map; - var a = [], sortKey = sortKeys[depth++], key; - for (key in map) { - a.push({ - key: key, - values: entries(map[key], depth) - }); - } - if (sortKey) a.sort(function(a, b) { - return sortKey(a.key, b.key); - }); - return a; - } - nest.map = function(array) { - return map(array, 0); - }; - nest.entries = function(array) { - return entries(map(array, 0), 0); - }; - nest.key = function(d) { - keys.push(d); - return nest; - }; - nest.sortKeys = function(order) { - sortKeys[keys.length - 1] = order; - return nest; - }; - nest.sortValues = function(order) { - sortValues = order; - return nest; - }; - nest.rollup = function(f) { - rollup = f; - return nest; - }; - return nest; - }; - d3.keys = function(map) { - var keys = []; - for (var key in map) keys.push(key); - return keys; - }; - d3.values = function(map) { - var values = []; - for (var key in map) values.push(map[key]); - return values; - }; - d3.entries = function(map) { - var entries = []; - for (var key in map) entries.push({ - key: key, - value: map[key] - }); - return entries; - }; - d3.permute = function(array, indexes) { - var permutes = [], i = -1, n = indexes.length; - while (++i < n) permutes[i] = array[indexes[i]]; - return permutes; - }; - d3.merge = function(arrays) { - return Array.prototype.concat.apply([], arrays); - }; - d3.split = function(array, f) { - var arrays = [], values = [], value, i = -1, n = array.length; - if (arguments.length < 2) f = d3_splitter; - while (++i < n) { - if (f.call(values, value = array[i], i)) { - values = []; - } else { - if (!values.length) arrays.push(values); - values.push(value); - } - } - return arrays; - }; - function d3_splitter(d) { - return d == null; - } - function d3_collapse(s) { - return s.trim().replace(/\s+/g, " "); - } - d3.range = function(start, stop, step) { - if (arguments.length < 3) { - step = 1; - if (arguments.length < 2) { - stop = start; - start = 0; - } - } - if ((stop - start) / step === Infinity) throw new Error("infinite range"); - var range = [], k = d3_range_integerScale(Math.abs(step)), i = -1, j; - start *= k, stop *= k, step *= k; - if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k); - return range; - }; - function d3_range_integerScale(x) { - var k = 1; - while (x * k % 1) k *= 10; - return k; - } - d3.requote = function(s) { - return s.replace(d3_requote_re, "\\$&"); - }; - var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; - d3.round = function(x, n) { - return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x); - }; - d3.xhr = function(url, mime, callback) { - var req = new XMLHttpRequest; - if (arguments.length < 3) callback = mime, mime = null; else if (mime && req.overrideMimeType) req.overrideMimeType(mime); - req.open("GET", url, true); - if (mime) req.setRequestHeader("Accept", mime); - req.onreadystatechange = function() { - if (req.readyState === 4) { - var s = req.status; - callback(!s && req.response || s >= 200 && s < 300 || s === 304 ? req : null); - } - }; - req.send(null); - }; - d3.text = function(url, mime, callback) { - function ready(req) { - callback(req && req.responseText); - } - if (arguments.length < 3) { - callback = mime; - mime = null; - } - d3.xhr(url, mime, ready); - }; - d3.json = function(url, callback) { - d3.text(url, "application/json", function(text) { - callback(text ? JSON.parse(text) : null); - }); - }; - d3.html = function(url, callback) { - d3.text(url, "text/html", function(text) { - if (text != null) { - var range = document.createRange(); - range.selectNode(document.body); - text = range.createContextualFragment(text); - } - callback(text); - }); - }; - d3.xml = function(url, mime, callback) { - function ready(req) { - callback(req && req.responseXML); - } - if (arguments.length < 3) { - callback = mime; - mime = null; - } - d3.xhr(url, mime, ready); - }; - var d3_nsPrefix = { - svg: "http://www.w3.org/2000/svg", - xhtml: "http://www.w3.org/1999/xhtml", - xlink: "http://www.w3.org/1999/xlink", - xml: "http://www.w3.org/XML/1998/namespace", - xmlns: "http://www.w3.org/2000/xmlns/" - }; - d3.ns = { - prefix: d3_nsPrefix, - qualify: function(name) { - var i = name.indexOf(":"), prefix = name; - if (i >= 0) { - prefix = name.substring(0, i); - name = name.substring(i + 1); - } - return d3_nsPrefix.hasOwnProperty(prefix) ? { - space: d3_nsPrefix[prefix], - local: name - } : name; - } - }; - d3.dispatch = function() { - var dispatch = new d3_dispatch, i = -1, n = arguments.length; - while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); - return dispatch; - }; - function d3_dispatch() {} - d3_dispatch.prototype.on = function(type, listener) { - var i = type.indexOf("."), name = ""; - if (i > 0) { - name = type.substring(i + 1); - type = type.substring(0, i); - } - return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener); - }; - function d3_dispatch_event(dispatch) { - var listeners = [], listenerByName = new d3_Map; - function event() { - var z = listeners, i = -1, n = z.length, l; - while (++i < n) if (l = z[i].on) l.apply(this, arguments); - return dispatch; - } - event.on = function(name, listener) { - var l = listenerByName.get(name), i; - if (arguments.length < 2) return l && l.on; - if (l) { - l.on = null; - listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1)); - listenerByName.remove(name); - } - if (listener) listeners.push(listenerByName.set(name, { - on: listener - })); - return dispatch; - }; - return event; - } - d3.format = function(specifier) { - var match = d3_format_re.exec(specifier), fill = match[1] || " ", sign = match[3] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, suffix = "", integer = false; - if (precision) precision = +precision.substring(1); - if (zfill) { - fill = "0"; - if (comma) width -= Math.floor((width - 1) / 4); - } - switch (type) { - case "n": - comma = true; - type = "g"; - break; - case "%": - scale = 100; - suffix = "%"; - type = "f"; - break; - case "p": - scale = 100; - suffix = "%"; - type = "r"; - break; - case "d": - integer = true; - precision = 0; - break; - case "s": - scale = -1; - type = "r"; - break; - } - if (type == "r" && !precision) type = "g"; - type = d3_format_types.get(type) || d3_format_typeDefault; - return function(value) { - if (integer && value % 1) return ""; - var negative = value < 0 && (value = -value) ? "-" : sign; - if (scale < 0) { - var prefix = d3.formatPrefix(value, precision); - value = prefix.scale(value); - suffix = prefix.symbol; - } else { - value *= scale; - } - value = type(value, precision); - if (zfill) { - var length = value.length + negative.length; - if (length < width) value = (new Array(width - length + 1)).join(fill) + value; - if (comma) value = d3_format_group(value); - value = negative + value; - } else { - if (comma) value = d3_format_group(value); - value = negative + value; - var length = value.length; - if (length < width) value = (new Array(width - length + 1)).join(fill) + value; - } - return value + suffix; - }; - }; - var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/; - var d3_format_types = d3.map({ - g: function(x, p) { - return x.toPrecision(p); - }, - e: function(x, p) { - return x.toExponential(p); - }, - f: function(x, p) { - return x.toFixed(p); - }, - r: function(x, p) { - return d3.round(x, p = d3_format_precision(x, p)).toFixed(Math.max(0, Math.min(20, p))); - } - }); - function d3_format_precision(x, p) { - return p - (x ? 1 + Math.floor(Math.log(x + Math.pow(10, 1 + Math.floor(Math.log(x) / Math.LN10) - p)) / Math.LN10) : 1); - } - function d3_format_typeDefault(x) { - return x + ""; - } - function d3_format_group(value) { - var i = value.lastIndexOf("."), f = i >= 0 ? value.substring(i) : (i = value.length, ""), t = []; - while (i > 0) t.push(value.substring(i -= 3, i + 3)); - return t.reverse().join(",") + f; - } - var d3_formatPrefixes = [ "y", "z", "a", "f", "p", "n", "μ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y" ].map(d3_formatPrefix); - d3.formatPrefix = function(value, precision) { - var i = 0; - if (value) { - if (value < 0) value *= -1; - if (precision) value = d3.round(value, d3_format_precision(value, precision)); - i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10); - i = Math.max(-24, Math.min(24, Math.floor((i <= 0 ? i + 1 : i - 1) / 3) * 3)); - } - return d3_formatPrefixes[8 + i / 3]; - }; - function d3_formatPrefix(d, i) { - var k = Math.pow(10, Math.abs(8 - i) * 3); - return { - scale: i > 8 ? function(d) { - return d / k; - } : function(d) { - return d * k; - }, - symbol: d - }; - } - var d3_ease_quad = d3_ease_poly(2), d3_ease_cubic = d3_ease_poly(3), d3_ease_default = function() { - return d3_ease_identity; - }; - var d3_ease = d3.map({ - linear: d3_ease_default, - poly: d3_ease_poly, - quad: function() { - return d3_ease_quad; - }, - cubic: function() { - return d3_ease_cubic; - }, - sin: function() { - return d3_ease_sin; - }, - exp: function() { - return d3_ease_exp; - }, - circle: function() { - return d3_ease_circle; - }, - elastic: d3_ease_elastic, - back: d3_ease_back, - bounce: function() { - return d3_ease_bounce; - } - }); - var d3_ease_mode = d3.map({ - "in": d3_ease_identity, - out: d3_ease_reverse, - "in-out": d3_ease_reflect, - "out-in": function(f) { - return d3_ease_reflect(d3_ease_reverse(f)); - } - }); - d3.ease = function(name) { - var i = name.indexOf("-"), t = i >= 0 ? name.substring(0, i) : name, m = i >= 0 ? name.substring(i + 1) : "in"; - t = d3_ease.get(t) || d3_ease_default; - m = d3_ease_mode.get(m) || d3_ease_identity; - return d3_ease_clamp(m(t.apply(null, Array.prototype.slice.call(arguments, 1)))); - }; - function d3_ease_clamp(f) { - return function(t) { - return t <= 0 ? 0 : t >= 1 ? 1 : f(t); - }; - } - function d3_ease_reverse(f) { - return function(t) { - return 1 - f(1 - t); - }; - } - function d3_ease_reflect(f) { - return function(t) { - return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t)); - }; - } - function d3_ease_identity(t) { - return t; - } - function d3_ease_poly(e) { - return function(t) { - return Math.pow(t, e); - }; - } - function d3_ease_sin(t) { - return 1 - Math.cos(t * Math.PI / 2); - } - function d3_ease_exp(t) { - return Math.pow(2, 10 * (t - 1)); - } - function d3_ease_circle(t) { - return 1 - Math.sqrt(1 - t * t); - } - function d3_ease_elastic(a, p) { - var s; - if (arguments.length < 2) p = .45; - if (arguments.length < 1) { - a = 1; - s = p / 4; - } else s = p / (2 * Math.PI) * Math.asin(1 / a); - return function(t) { - return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * Math.PI / p); - }; - } - function d3_ease_back(s) { - if (!s) s = 1.70158; - return function(t) { - return t * t * ((s + 1) * t - s); - }; - } - function d3_ease_bounce(t) { - return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375; - } - d3.event = null; - function d3_eventCancel() { - d3.event.stopPropagation(); - d3.event.preventDefault(); - } - function d3_eventSource() { - var e = d3.event, s; - while (s = e.sourceEvent) e = s; - return e; - } - function d3_eventDispatch(target) { - var dispatch = new d3_dispatch, i = 0, n = arguments.length; - while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); - dispatch.of = function(thiz, argumentz) { - return function(e1) { - try { - var e0 = e1.sourceEvent = d3.event; - e1.target = target; - d3.event = e1; - dispatch[e1.type].apply(thiz, argumentz); - } finally { - d3.event = e0; - } - }; - }; - return dispatch; - } - d3.transform = function(string) { - var g = document.createElementNS(d3.ns.prefix.svg, "g"); - return (d3.transform = function(string) { - g.setAttribute("transform", string); - var t = g.transform.baseVal.consolidate(); - return new d3_transform(t ? t.matrix : d3_transformIdentity); - })(string); - }; - function d3_transform(m) { - var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0; - if (r0[0] * r1[1] < r1[0] * r0[1]) { - r0[0] *= -1; - r0[1] *= -1; - kx *= -1; - kz *= -1; - } - this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_transformDegrees; - this.translate = [ m.e, m.f ]; - this.scale = [ kx, ky ]; - this.skew = ky ? Math.atan2(kz, ky) * d3_transformDegrees : 0; - } - d3_transform.prototype.toString = function() { - return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")"; - }; - function d3_transformDot(a, b) { - return a[0] * b[0] + a[1] * b[1]; - } - function d3_transformNormalize(a) { - var k = Math.sqrt(d3_transformDot(a, a)); - if (k) { - a[0] /= k; - a[1] /= k; - } - return k; - } - function d3_transformCombine(a, b, k) { - a[0] += k * b[0]; - a[1] += k * b[1]; - return a; - } - var d3_transformDegrees = 180 / Math.PI, d3_transformIdentity = { - a: 1, - b: 0, - c: 0, - d: 1, - e: 0, - f: 0 - }; - d3.interpolate = function(a, b) { - var i = d3.interpolators.length, f; - while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ; - return f; - }; - d3.interpolateNumber = function(a, b) { - b -= a; - return function(t) { - return a + b * t; - }; - }; - d3.interpolateRound = function(a, b) { - b -= a; - return function(t) { - return Math.round(a + b * t); - }; - }; - d3.interpolateString = function(a, b) { - var m, i, j, s0 = 0, s1 = 0, s = [], q = [], n, o; - d3_interpolate_number.lastIndex = 0; - for (i = 0; m = d3_interpolate_number.exec(b); ++i) { - if (m.index) s.push(b.substring(s0, s1 = m.index)); - q.push({ - i: s.length, - x: m[0] - }); - s.push(null); - s0 = d3_interpolate_number.lastIndex; - } - if (s0 < b.length) s.push(b.substring(s0)); - for (i = 0, n = q.length; (m = d3_interpolate_number.exec(a)) && i < n; ++i) { - o = q[i]; - if (o.x == m[0]) { - if (o.i) { - if (s[o.i + 1] == null) { - s[o.i - 1] += o.x; - s.splice(o.i, 1); - for (j = i + 1; j < n; ++j) q[j].i--; - } else { - s[o.i - 1] += o.x + s[o.i + 1]; - s.splice(o.i, 2); - for (j = i + 1; j < n; ++j) q[j].i -= 2; - } - } else { - if (s[o.i + 1] == null) { - s[o.i] = o.x; - } else { - s[o.i] = o.x + s[o.i + 1]; - s.splice(o.i + 1, 1); - for (j = i + 1; j < n; ++j) q[j].i--; - } - } - q.splice(i, 1); - n--; - i--; - } else { - o.x = d3.interpolateNumber(parseFloat(m[0]), parseFloat(o.x)); - } - } - while (i < n) { - o = q.pop(); - if (s[o.i + 1] == null) { - s[o.i] = o.x; - } else { - s[o.i] = o.x + s[o.i + 1]; - s.splice(o.i + 1, 1); - } - n--; - } - if (s.length === 1) { - return s[0] == null ? q[0].x : function() { - return b; - }; - } - return function(t) { - for (i = 0; i < n; ++i) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }; - }; - d3.interpolateTransform = function(a, b) { - var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale; - if (ta[0] != tb[0] || ta[1] != tb[1]) { - s.push("translate(", null, ",", null, ")"); - q.push({ - i: 1, - x: d3.interpolateNumber(ta[0], tb[0]) - }, { - i: 3, - x: d3.interpolateNumber(ta[1], tb[1]) - }); - } else if (tb[0] || tb[1]) { - s.push("translate(" + tb + ")"); - } else { - s.push(""); - } - if (ra != rb) { - if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360; - q.push({ - i: s.push(s.pop() + "rotate(", null, ")") - 2, - x: d3.interpolateNumber(ra, rb) - }); - } else if (rb) { - s.push(s.pop() + "rotate(" + rb + ")"); - } - if (wa != wb) { - q.push({ - i: s.push(s.pop() + "skewX(", null, ")") - 2, - x: d3.interpolateNumber(wa, wb) - }); - } else if (wb) { - s.push(s.pop() + "skewX(" + wb + ")"); - } - if (ka[0] != kb[0] || ka[1] != kb[1]) { - n = s.push(s.pop() + "scale(", null, ",", null, ")"); - q.push({ - i: n - 4, - x: d3.interpolateNumber(ka[0], kb[0]) - }, { - i: n - 2, - x: d3.interpolateNumber(ka[1], kb[1]) - }); - } else if (kb[0] != 1 || kb[1] != 1) { - s.push(s.pop() + "scale(" + kb + ")"); - } - n = q.length; - return function(t) { - var i = -1, o; - while (++i < n) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }; - }; - d3.interpolateRgb = function(a, b) { - a = d3.rgb(a); - b = d3.rgb(b); - var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab; - return function(t) { - return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t)); - }; - }; - d3.interpolateHsl = function(a, b) { - a = d3.hsl(a); - b = d3.hsl(b); - var h0 = a.h, s0 = a.s, l0 = a.l, h1 = b.h - h0, s1 = b.s - s0, l1 = b.l - l0; - if (h1 > 180) h1 -= 360; else if (h1 < -180) h1 += 360; - return function(t) { - return d3_hsl_rgb(h0 + h1 * t, s0 + s1 * t, l0 + l1 * t) + ""; - }; - }; - d3.interpolateLab = function(a, b) { - a = d3.lab(a); - b = d3.lab(b); - var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab; - return function(t) { - return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + ""; - }; - }; - d3.interpolateHcl = function(a, b) { - a = d3.hcl(a); - b = d3.hcl(b); - var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al; - if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; - return function(t) { - return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + ""; - }; - }; - d3.interpolateArray = function(a, b) { - var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i; - for (i = 0; i < n0; ++i) x.push(d3.interpolate(a[i], b[i])); - for (; i < na; ++i) c[i] = a[i]; - for (; i < nb; ++i) c[i] = b[i]; - return function(t) { - for (i = 0; i < n0; ++i) c[i] = x[i](t); - return c; - }; - }; - d3.interpolateObject = function(a, b) { - var i = {}, c = {}, k; - for (k in a) { - if (k in b) { - i[k] = d3_interpolateByName(k)(a[k], b[k]); - } else { - c[k] = a[k]; - } - } - for (k in b) { - if (!(k in a)) { - c[k] = b[k]; - } - } - return function(t) { - for (k in i) c[k] = i[k](t); - return c; - }; - }; - var d3_interpolate_number = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g; - function d3_interpolateByName(name) { - return name == "transform" ? d3.interpolateTransform : d3.interpolate; - } - d3.interpolators = [ d3.interpolateObject, function(a, b) { - return b instanceof Array && d3.interpolateArray(a, b); - }, function(a, b) { - return (typeof a === "string" || typeof b === "string") && d3.interpolateString(a + "", b + ""); - }, function(a, b) { - return (typeof b === "string" ? d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) : b instanceof d3_Rgb || b instanceof d3_Hsl) && d3.interpolateRgb(a, b); - }, function(a, b) { - return !isNaN(a = +a) && !isNaN(b = +b) && d3.interpolateNumber(a, b); - } ]; - function d3_uninterpolateNumber(a, b) { - b = b - (a = +a) ? 1 / (b - a) : 0; - return function(x) { - return (x - a) * b; - }; - } - function d3_uninterpolateClamp(a, b) { - b = b - (a = +a) ? 1 / (b - a) : 0; - return function(x) { - return Math.max(0, Math.min(1, (x - a) * b)); - }; - } - d3.rgb = function(r, g, b) { - return arguments.length === 1 ? r instanceof d3_Rgb ? d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb) : d3_rgb(~~r, ~~g, ~~b); - }; - function d3_rgb(r, g, b) { - return new d3_Rgb(r, g, b); - } - function d3_Rgb(r, g, b) { - this.r = r; - this.g = g; - this.b = b; - } - d3_Rgb.prototype.brighter = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - var r = this.r, g = this.g, b = this.b, i = 30; - if (!r && !g && !b) return d3_rgb(i, i, i); - if (r && r < i) r = i; - if (g && g < i) g = i; - if (b && b < i) b = i; - return d3_rgb(Math.min(255, Math.floor(r / k)), Math.min(255, Math.floor(g / k)), Math.min(255, Math.floor(b / k))); - }; - d3_Rgb.prototype.darker = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return d3_rgb(Math.floor(k * this.r), Math.floor(k * this.g), Math.floor(k * this.b)); - }; - d3_Rgb.prototype.hsl = function() { - return d3_rgb_hsl(this.r, this.g, this.b); - }; - d3_Rgb.prototype.toString = function() { - return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b); - }; - function d3_rgb_hex(v) { - return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16); - } - function d3_rgb_parse(format, rgb, hsl) { - var r = 0, g = 0, b = 0, m1, m2, name; - m1 = /([a-z]+)\((.*)\)/i.exec(format); - if (m1) { - m2 = m1[2].split(","); - switch (m1[1]) { - case "hsl": - { - return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100); - } - case "rgb": - { - return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2])); - } - } - } - if (name = d3_rgb_names.get(format)) return rgb(name.r, name.g, name.b); - if (format != null && format.charAt(0) === "#") { - if (format.length === 4) { - r = format.charAt(1); - r += r; - g = format.charAt(2); - g += g; - b = format.charAt(3); - b += b; - } else if (format.length === 7) { - r = format.substring(1, 3); - g = format.substring(3, 5); - b = format.substring(5, 7); - } - r = parseInt(r, 16); - g = parseInt(g, 16); - b = parseInt(b, 16); - } - return rgb(r, g, b); - } - function d3_rgb_hsl(r, g, b) { - var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2; - if (d) { - s = l < .5 ? d / (max + min) : d / (2 - max - min); - if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4; - h *= 60; - } else { - s = h = 0; - } - return d3_hsl(h, s, l); - } - function d3_rgb_lab(r, g, b) { - r = d3_rgb_xyz(r); - g = d3_rgb_xyz(g); - b = d3_rgb_xyz(b); - var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z); - return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z)); - } - function d3_rgb_xyz(r) { - return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4); - } - function d3_rgb_parseNumber(c) { - var f = parseFloat(c); - return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f; - } - var d3_rgb_names = d3.map({ - aliceblue: "#f0f8ff", - antiquewhite: "#faebd7", - aqua: "#00ffff", - aquamarine: "#7fffd4", - azure: "#f0ffff", - beige: "#f5f5dc", - bisque: "#ffe4c4", - black: "#000000", - blanchedalmond: "#ffebcd", - blue: "#0000ff", - blueviolet: "#8a2be2", - brown: "#a52a2a", - burlywood: "#deb887", - cadetblue: "#5f9ea0", - chartreuse: "#7fff00", - chocolate: "#d2691e", - coral: "#ff7f50", - cornflowerblue: "#6495ed", - cornsilk: "#fff8dc", - crimson: "#dc143c", - cyan: "#00ffff", - darkblue: "#00008b", - darkcyan: "#008b8b", - darkgoldenrod: "#b8860b", - darkgray: "#a9a9a9", - darkgreen: "#006400", - darkgrey: "#a9a9a9", - darkkhaki: "#bdb76b", - darkmagenta: "#8b008b", - darkolivegreen: "#556b2f", - darkorange: "#ff8c00", - darkorchid: "#9932cc", - darkred: "#8b0000", - darksalmon: "#e9967a", - darkseagreen: "#8fbc8f", - darkslateblue: "#483d8b", - darkslategray: "#2f4f4f", - darkslategrey: "#2f4f4f", - darkturquoise: "#00ced1", - darkviolet: "#9400d3", - deeppink: "#ff1493", - deepskyblue: "#00bfff", - dimgray: "#696969", - dimgrey: "#696969", - dodgerblue: "#1e90ff", - firebrick: "#b22222", - floralwhite: "#fffaf0", - forestgreen: "#228b22", - fuchsia: "#ff00ff", - gainsboro: "#dcdcdc", - ghostwhite: "#f8f8ff", - gold: "#ffd700", - goldenrod: "#daa520", - gray: "#808080", - green: "#008000", - greenyellow: "#adff2f", - grey: "#808080", - honeydew: "#f0fff0", - hotpink: "#ff69b4", - indianred: "#cd5c5c", - indigo: "#4b0082", - ivory: "#fffff0", - khaki: "#f0e68c", - lavender: "#e6e6fa", - lavenderblush: "#fff0f5", - lawngreen: "#7cfc00", - lemonchiffon: "#fffacd", - lightblue: "#add8e6", - lightcoral: "#f08080", - lightcyan: "#e0ffff", - lightgoldenrodyellow: "#fafad2", - lightgray: "#d3d3d3", - lightgreen: "#90ee90", - lightgrey: "#d3d3d3", - lightpink: "#ffb6c1", - lightsalmon: "#ffa07a", - lightseagreen: "#20b2aa", - lightskyblue: "#87cefa", - lightslategray: "#778899", - lightslategrey: "#778899", - lightsteelblue: "#b0c4de", - lightyellow: "#ffffe0", - lime: "#00ff00", - limegreen: "#32cd32", - linen: "#faf0e6", - magenta: "#ff00ff", - maroon: "#800000", - mediumaquamarine: "#66cdaa", - mediumblue: "#0000cd", - mediumorchid: "#ba55d3", - mediumpurple: "#9370db", - mediumseagreen: "#3cb371", - mediumslateblue: "#7b68ee", - mediumspringgreen: "#00fa9a", - mediumturquoise: "#48d1cc", - mediumvioletred: "#c71585", - midnightblue: "#191970", - mintcream: "#f5fffa", - mistyrose: "#ffe4e1", - moccasin: "#ffe4b5", - navajowhite: "#ffdead", - navy: "#000080", - oldlace: "#fdf5e6", - olive: "#808000", - olivedrab: "#6b8e23", - orange: "#ffa500", - orangered: "#ff4500", - orchid: "#da70d6", - palegoldenrod: "#eee8aa", - palegreen: "#98fb98", - paleturquoise: "#afeeee", - palevioletred: "#db7093", - papayawhip: "#ffefd5", - peachpuff: "#ffdab9", - peru: "#cd853f", - pink: "#ffc0cb", - plum: "#dda0dd", - powderblue: "#b0e0e6", - purple: "#800080", - red: "#ff0000", - rosybrown: "#bc8f8f", - royalblue: "#4169e1", - saddlebrown: "#8b4513", - salmon: "#fa8072", - sandybrown: "#f4a460", - seagreen: "#2e8b57", - seashell: "#fff5ee", - sienna: "#a0522d", - silver: "#c0c0c0", - skyblue: "#87ceeb", - slateblue: "#6a5acd", - slategray: "#708090", - slategrey: "#708090", - snow: "#fffafa", - springgreen: "#00ff7f", - steelblue: "#4682b4", - tan: "#d2b48c", - teal: "#008080", - thistle: "#d8bfd8", - tomato: "#ff6347", - turquoise: "#40e0d0", - violet: "#ee82ee", - wheat: "#f5deb3", - white: "#ffffff", - whitesmoke: "#f5f5f5", - yellow: "#ffff00", - yellowgreen: "#9acd32" - }); - d3_rgb_names.forEach(function(key, value) { - d3_rgb_names.set(key, d3_rgb_parse(value, d3_rgb, d3_hsl_rgb)); - }); - d3.hsl = function(h, s, l) { - return arguments.length === 1 ? h instanceof d3_Hsl ? d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : d3_hsl(+h, +s, +l); - }; - function d3_hsl(h, s, l) { - return new d3_Hsl(h, s, l); - } - function d3_Hsl(h, s, l) { - this.h = h; - this.s = s; - this.l = l; - } - d3_Hsl.prototype.brighter = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return d3_hsl(this.h, this.s, this.l / k); - }; - d3_Hsl.prototype.darker = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return d3_hsl(this.h, this.s, k * this.l); - }; - d3_Hsl.prototype.rgb = function() { - return d3_hsl_rgb(this.h, this.s, this.l); - }; - d3_Hsl.prototype.toString = function() { - return this.rgb().toString(); - }; - function d3_hsl_rgb(h, s, l) { - var m1, m2; - h = h % 360; - if (h < 0) h += 360; - s = s < 0 ? 0 : s > 1 ? 1 : s; - l = l < 0 ? 0 : l > 1 ? 1 : l; - m2 = l <= .5 ? l * (1 + s) : l + s - l * s; - m1 = 2 * l - m2; - function v(h) { - if (h > 360) h -= 360; else if (h < 0) h += 360; - if (h < 60) return m1 + (m2 - m1) * h / 60; - if (h < 180) return m2; - if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60; - return m1; - } - function vv(h) { - return Math.round(v(h) * 255); - } - return d3_rgb(vv(h + 120), vv(h), vv(h - 120)); - } - d3.hcl = function(h, c, l) { - return arguments.length === 1 ? h instanceof d3_Hcl ? d3_hcl(h.h, h.c, h.l) : h instanceof d3_Lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : d3_hcl(+h, +c, +l); - }; - function d3_hcl(h, c, l) { - return new d3_Hcl(h, c, l); - } - function d3_Hcl(h, c, l) { - this.h = h; - this.c = c; - this.l = l; - } - d3_Hcl.prototype.brighter = function(k) { - return d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1))); - }; - d3_Hcl.prototype.darker = function(k) { - return d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1))); - }; - d3_Hcl.prototype.rgb = function() { - return d3_hcl_lab(this.h, this.c, this.l).rgb(); - }; - d3_Hcl.prototype.toString = function() { - return this.rgb() + ""; - }; - function d3_hcl_lab(h, c, l) { - return d3_lab(l, Math.cos(h *= Math.PI / 180) * c, Math.sin(h) * c); - } - d3.lab = function(l, a, b) { - return arguments.length === 1 ? l instanceof d3_Lab ? d3_lab(l.l, l.a, l.b) : l instanceof d3_Hcl ? d3_hcl_lab(l.l, l.c, l.h) : d3_rgb_lab((l = d3.rgb(l)).r, l.g, l.b) : d3_lab(+l, +a, +b); - }; - function d3_lab(l, a, b) { - return new d3_Lab(l, a, b); - } - function d3_Lab(l, a, b) { - this.l = l; - this.a = a; - this.b = b; - } - var d3_lab_K = 18; - var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883; - d3_Lab.prototype.brighter = function(k) { - return d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); - }; - d3_Lab.prototype.darker = function(k) { - return d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); - }; - d3_Lab.prototype.rgb = function() { - return d3_lab_rgb(this.l, this.a, this.b); - }; - d3_Lab.prototype.toString = function() { - return this.rgb() + ""; - }; - function d3_lab_rgb(l, a, b) { - var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200; - x = d3_lab_xyz(x) * d3_lab_X; - y = d3_lab_xyz(y) * d3_lab_Y; - z = d3_lab_xyz(z) * d3_lab_Z; - return d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z)); - } - function d3_lab_hcl(l, a, b) { - return d3_hcl(Math.atan2(b, a) / Math.PI * 180, Math.sqrt(a * a + b * b), l); - } - function d3_lab_xyz(x) { - return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037; - } - function d3_xyz_lab(x) { - return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29; - } - function d3_xyz_rgb(r) { - return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055)); - } - function d3_selection(groups) { - d3_arraySubclass(groups, d3_selectionPrototype); - return groups; - } - var d3_select = function(s, n) { - return n.querySelector(s); - }, d3_selectAll = function(s, n) { - return n.querySelectorAll(s); - }, d3_selectRoot = document.documentElement, d3_selectMatcher = d3_selectRoot.matchesSelector || d3_selectRoot.webkitMatchesSelector || d3_selectRoot.mozMatchesSelector || d3_selectRoot.msMatchesSelector || d3_selectRoot.oMatchesSelector, d3_selectMatches = function(n, s) { - return d3_selectMatcher.call(n, s); - }; - if (typeof Sizzle === "function") { - d3_select = function(s, n) { - return Sizzle(s, n)[0] || null; - }; - d3_selectAll = function(s, n) { - return Sizzle.uniqueSort(Sizzle(s, n)); - }; - d3_selectMatches = Sizzle.matchesSelector; - } - var d3_selectionPrototype = []; - d3.selection = function() { - return d3_selectionRoot; - }; - d3.selection.prototype = d3_selectionPrototype; - d3_selectionPrototype.select = function(selector) { - var subgroups = [], subgroup, subnode, group, node; - if (typeof selector !== "function") selector = d3_selection_selector(selector); - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - subgroup.parentNode = (group = this[j]).parentNode; - for (var i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroup.push(subnode = selector.call(node, node.__data__, i)); - if (subnode && "__data__" in node) subnode.__data__ = node.__data__; - } else { - subgroup.push(null); - } - } - } - return d3_selection(subgroups); - }; - function d3_selection_selector(selector) { - return function() { - return d3_select(selector, this); - }; - } - d3_selectionPrototype.selectAll = function(selector) { - var subgroups = [], subgroup, node; - if (typeof selector !== "function") selector = d3_selection_selectorAll(selector); - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i))); - subgroup.parentNode = node; - } - } - } - return d3_selection(subgroups); - }; - function d3_selection_selectorAll(selector) { - return function() { - return d3_selectAll(selector, this); - }; - } - d3_selectionPrototype.attr = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") { - var node = this.node(); - name = d3.ns.qualify(name); - return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name); - } - for (value in name) this.each(d3_selection_attr(value, name[value])); - return this; - } - return this.each(d3_selection_attr(name, value)); - }; - function d3_selection_attr(name, value) { - name = d3.ns.qualify(name); - function attrNull() { - this.removeAttribute(name); - } - function attrNullNS() { - this.removeAttributeNS(name.space, name.local); - } - function attrConstant() { - this.setAttribute(name, value); - } - function attrConstantNS() { - this.setAttributeNS(name.space, name.local, value); - } - function attrFunction() { - var x = value.apply(this, arguments); - if (x == null) this.removeAttribute(name); else this.setAttribute(name, x); - } - function attrFunctionNS() { - var x = value.apply(this, arguments); - if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x); - } - return value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant; - } - d3_selectionPrototype.classed = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") { - var node = this.node(), n = (name = name.trim().split(/^|\s+/g)).length, i = -1; - if (value = node.classList) { - while (++i < n) if (!value.contains(name[i])) return false; - } else { - value = node.className; - if (value.baseVal != null) value = value.baseVal; - while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false; - } - return true; - } - for (value in name) this.each(d3_selection_classed(value, name[value])); - return this; - } - return this.each(d3_selection_classed(name, value)); - }; - function d3_selection_classedRe(name) { - return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g"); - } - function d3_selection_classed(name, value) { - name = name.trim().split(/\s+/).map(d3_selection_classedName); - var n = name.length; - function classedConstant() { - var i = -1; - while (++i < n) name[i](this, value); - } - function classedFunction() { - var i = -1, x = value.apply(this, arguments); - while (++i < n) name[i](this, x); - } - return typeof value === "function" ? classedFunction : classedConstant; - } - function d3_selection_classedName(name) { - var re = d3_selection_classedRe(name); - return function(node, value) { - if (c = node.classList) return value ? c.add(name) : c.remove(name); - var c = node.className, cb = c.baseVal != null, cv = cb ? c.baseVal : c; - if (value) { - re.lastIndex = 0; - if (!re.test(cv)) { - cv = d3_collapse(cv + " " + name); - if (cb) c.baseVal = cv; else node.className = cv; - } - } else if (cv) { - cv = d3_collapse(cv.replace(re, " ")); - if (cb) c.baseVal = cv; else node.className = cv; - } - }; - } - d3_selectionPrototype.style = function(name, value, priority) { - var n = arguments.length; - if (n < 3) { - if (typeof name !== "string") { - if (n < 2) value = ""; - for (priority in name) this.each(d3_selection_style(priority, name[priority], value)); - return this; - } - if (n < 2) return window.getComputedStyle(this.node(), null).getPropertyValue(name); - priority = ""; - } - return this.each(d3_selection_style(name, value, priority)); - }; - function d3_selection_style(name, value, priority) { - function styleNull() { - this.style.removeProperty(name); - } - function styleConstant() { - this.style.setProperty(name, value, priority); - } - function styleFunction() { - var x = value.apply(this, arguments); - if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority); - } - return value == null ? styleNull : typeof value === "function" ? styleFunction : styleConstant; - } - d3_selectionPrototype.property = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") return this.node()[name]; - for (value in name) this.each(d3_selection_property(value, name[value])); - return this; - } - return this.each(d3_selection_property(name, value)); - }; - function d3_selection_property(name, value) { - function propertyNull() { - delete this[name]; - } - function propertyConstant() { - this[name] = value; - } - function propertyFunction() { - var x = value.apply(this, arguments); - if (x == null) delete this[name]; else this[name] = x; - } - return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant; - } - d3_selectionPrototype.text = function(value) { - return arguments.length < 1 ? this.node().textContent : this.each(typeof value === "function" ? function() { - var v = value.apply(this, arguments); - this.textContent = v == null ? "" : v; - } : value == null ? function() { - this.textContent = ""; - } : function() { - this.textContent = value; - }); - }; - d3_selectionPrototype.html = function(value) { - return arguments.length < 1 ? this.node().innerHTML : this.each(typeof value === "function" ? function() { - var v = value.apply(this, arguments); - this.innerHTML = v == null ? "" : v; - } : value == null ? function() { - this.innerHTML = ""; - } : function() { - this.innerHTML = value; - }); - }; - d3_selectionPrototype.append = function(name) { - name = d3.ns.qualify(name); - function append() { - return this.appendChild(document.createElementNS(this.namespaceURI, name)); - } - function appendNS() { - return this.appendChild(document.createElementNS(name.space, name.local)); - } - return this.select(name.local ? appendNS : append); - }; - d3_selectionPrototype.insert = function(name, before) { - name = d3.ns.qualify(name); - function insert() { - return this.insertBefore(document.createElementNS(this.namespaceURI, name), d3_select(before, this)); - } - function insertNS() { - return this.insertBefore(document.createElementNS(name.space, name.local), d3_select(before, this)); - } - return this.select(name.local ? insertNS : insert); - }; - d3_selectionPrototype.remove = function() { - return this.each(function() { - var parent = this.parentNode; - if (parent) parent.removeChild(this); - }); - }; - d3_selectionPrototype.data = function(value, key) { - var i = -1, n = this.length, group, node; - if (!arguments.length) { - value = new Array(n = (group = this[0]).length); - while (++i < n) { - if (node = group[i]) { - value[i] = node.__data__; - } - } - return value; - } - function bind(group, groupData) { - var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), n1 = Math.max(n, m), updateNodes = [], enterNodes = [], exitNodes = [], node, nodeData; - if (key) { - var nodeByKeyValue = new d3_Map, keyValues = [], keyValue, j = groupData.length; - for (i = -1; ++i < n; ) { - keyValue = key.call(node = group[i], node.__data__, i); - if (nodeByKeyValue.has(keyValue)) { - exitNodes[j++] = node; - } else { - nodeByKeyValue.set(keyValue, node); - } - keyValues.push(keyValue); - } - for (i = -1; ++i < m; ) { - keyValue = key.call(groupData, nodeData = groupData[i], i); - if (nodeByKeyValue.has(keyValue)) { - updateNodes[i] = node = nodeByKeyValue.get(keyValue); - node.__data__ = nodeData; - enterNodes[i] = exitNodes[i] = null; - } else { - enterNodes[i] = d3_selection_dataNode(nodeData); - updateNodes[i] = exitNodes[i] = null; - } - nodeByKeyValue.remove(keyValue); - } - for (i = -1; ++i < n; ) { - if (nodeByKeyValue.has(keyValues[i])) { - exitNodes[i] = group[i]; - } - } - } else { - for (i = -1; ++i < n0; ) { - node = group[i]; - nodeData = groupData[i]; - if (node) { - node.__data__ = nodeData; - updateNodes[i] = node; - enterNodes[i] = exitNodes[i] = null; - } else { - enterNodes[i] = d3_selection_dataNode(nodeData); - updateNodes[i] = exitNodes[i] = null; - } - } - for (; i < m; ++i) { - enterNodes[i] = d3_selection_dataNode(groupData[i]); - updateNodes[i] = exitNodes[i] = null; - } - for (; i < n1; ++i) { - exitNodes[i] = group[i]; - enterNodes[i] = updateNodes[i] = null; - } - } - enterNodes.update = updateNodes; - enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode; - enter.push(enterNodes); - update.push(updateNodes); - exit.push(exitNodes); - } - var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]); - if (typeof value === "function") { - while (++i < n) { - bind(group = this[i], value.call(group, group.parentNode.__data__, i)); - } - } else { - while (++i < n) { - bind(group = this[i], value); - } - } - update.enter = function() { - return enter; - }; - update.exit = function() { - return exit; - }; - return update; - }; - function d3_selection_dataNode(data) { - return { - __data__: data - }; - } - d3_selectionPrototype.datum = d3_selectionPrototype.map = function(value) { - return arguments.length < 1 ? this.property("__data__") : this.property("__data__", value); - }; - d3_selectionPrototype.filter = function(filter) { - var subgroups = [], subgroup, group, node; - if (typeof filter !== "function") filter = d3_selection_filter(filter); - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - subgroup.parentNode = (group = this[j]).parentNode; - for (var i = 0, n = group.length; i < n; i++) { - if ((node = group[i]) && filter.call(node, node.__data__, i)) { - subgroup.push(node); - } - } - } - return d3_selection(subgroups); - }; - function d3_selection_filter(selector) { - return function() { - return d3_selectMatches(this, selector); - }; - } - d3_selectionPrototype.order = function() { - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) { - if (node = group[i]) { - if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); - next = node; - } - } - } - return this; - }; - d3_selectionPrototype.sort = function(comparator) { - comparator = d3_selection_sortComparator.apply(this, arguments); - for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator); - return this.order(); - }; - function d3_selection_sortComparator(comparator) { - if (!arguments.length) comparator = d3.ascending; - return function(a, b) { - return comparator(a && a.__data__, b && b.__data__); - }; - } - d3_selectionPrototype.on = function(type, listener, capture) { - var n = arguments.length; - if (n < 3) { - if (typeof type !== "string") { - if (n < 2) listener = false; - for (capture in type) this.each(d3_selection_on(capture, type[capture], listener)); - return this; - } - if (n < 2) return (n = this.node()["__on" + type]) && n._; - capture = false; - } - return this.each(d3_selection_on(type, listener, capture)); - }; - function d3_selection_on(type, listener, capture) { - var name = "__on" + type, i = type.indexOf("."); - if (i > 0) type = type.substring(0, i); - function onRemove() { - var wrapper = this[name]; - if (wrapper) { - this.removeEventListener(type, wrapper, wrapper.$); - delete this[name]; - } - } - function onAdd() { - var node = this, args = arguments; - onRemove.call(this); - this.addEventListener(type, this[name] = wrapper, wrapper.$ = capture); - wrapper._ = listener; - function wrapper(e) { - var o = d3.event; - d3.event = e; - args[0] = node.__data__; - try { - listener.apply(node, args); - } finally { - d3.event = o; - } - } - } - return listener ? onAdd : onRemove; - } - d3_selectionPrototype.each = function(callback) { - return d3_selection_each(this, function(node, i, j) { - callback.call(node, node.__data__, i, j); - }); - }; - function d3_selection_each(groups, callback) { - for (var j = 0, m = groups.length; j < m; j++) { - for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) { - if (node = group[i]) callback(node, i, j); - } - } - return groups; - } - d3_selectionPrototype.call = function(callback) { - callback.apply(this, (arguments[0] = this, arguments)); - return this; - }; - d3_selectionPrototype.empty = function() { - return !this.node(); - }; - d3_selectionPrototype.node = function(callback) { - for (var j = 0, m = this.length; j < m; j++) { - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - var node = group[i]; - if (node) return node; - } - } - return null; - }; - d3_selectionPrototype.transition = function() { - var subgroups = [], subgroup, node; - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - subgroup.push((node = group[i]) ? { - node: node, - delay: d3_transitionDelay, - duration: d3_transitionDuration - } : null); - } - } - return d3_transition(subgroups, d3_transitionId || ++d3_transitionNextId, Date.now()); - }; - var d3_selectionRoot = d3_selection([ [ document ] ]); - d3_selectionRoot[0].parentNode = d3_selectRoot; - d3.select = function(selector) { - return typeof selector === "string" ? d3_selectionRoot.select(selector) : d3_selection([ [ selector ] ]); - }; - d3.selectAll = function(selector) { - return typeof selector === "string" ? d3_selectionRoot.selectAll(selector) : d3_selection([ d3_array(selector) ]); - }; - function d3_selection_enter(selection) { - d3_arraySubclass(selection, d3_selection_enterPrototype); - return selection; - } - var d3_selection_enterPrototype = []; - d3.selection.enter = d3_selection_enter; - d3.selection.enter.prototype = d3_selection_enterPrototype; - d3_selection_enterPrototype.append = d3_selectionPrototype.append; - d3_selection_enterPrototype.insert = d3_selectionPrototype.insert; - d3_selection_enterPrototype.empty = d3_selectionPrototype.empty; - d3_selection_enterPrototype.node = d3_selectionPrototype.node; - d3_selection_enterPrototype.select = function(selector) { - var subgroups = [], subgroup, subnode, upgroup, group, node; - for (var j = -1, m = this.length; ++j < m; ) { - upgroup = (group = this[j]).update; - subgroups.push(subgroup = []); - subgroup.parentNode = group.parentNode; - for (var i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i)); - subnode.__data__ = node.__data__; - } else { - subgroup.push(null); - } - } - } - return d3_selection(subgroups); - }; - function d3_transition(groups, id, time) { - d3_arraySubclass(groups, d3_transitionPrototype); - var tweens = new d3_Map, event = d3.dispatch("start", "end"), ease = d3_transitionEase; - groups.id = id; - groups.time = time; - groups.tween = function(name, tween) { - if (arguments.length < 2) return tweens.get(name); - if (tween == null) tweens.remove(name); else tweens.set(name, tween); - return groups; - }; - groups.ease = function(value) { - if (!arguments.length) return ease; - ease = typeof value === "function" ? value : d3.ease.apply(d3, arguments); - return groups; - }; - groups.each = function(type, listener) { - if (arguments.length < 2) return d3_transition_each.call(groups, type); - event.on(type, listener); - return groups; - }; - d3.timer(function(elapsed) { - return d3_selection_each(groups, function(node, i, j) { - var tweened = [], delay = node.delay, duration = node.duration, lock = (node = node.node).__transition__ || (node.__transition__ = { - active: 0, - count: 0 - }), d = node.__data__; - ++lock.count; - delay <= elapsed ? start(elapsed) : d3.timer(start, delay, time); - function start(elapsed) { - if (lock.active > id) return stop(); - lock.active = id; - tweens.forEach(function(key, value) { - if (value = value.call(node, d, i)) { - tweened.push(value); - } - }); - event.start.call(node, d, i); - if (!tick(elapsed)) d3.timer(tick, 0, time); - return 1; - } - function tick(elapsed) { - if (lock.active !== id) return stop(); - var t = (elapsed - delay) / duration, e = ease(t), n = tweened.length; - while (n > 0) { - tweened[--n].call(node, e); - } - if (t >= 1) { - stop(); - d3_transitionId = id; - event.end.call(node, d, i); - d3_transitionId = 0; - return 1; - } - } - function stop() { - if (!--lock.count) delete node.__transition__; - return 1; - } - }); - }, 0, time); - return groups; - } - var d3_transitionPrototype = [], d3_transitionNextId = 0, d3_transitionId = 0, d3_transitionDefaultDelay = 0, d3_transitionDefaultDuration = 250, d3_transitionDefaultEase = d3.ease("cubic-in-out"), d3_transitionDelay = d3_transitionDefaultDelay, d3_transitionDuration = d3_transitionDefaultDuration, d3_transitionEase = d3_transitionDefaultEase; - d3_transitionPrototype.call = d3_selectionPrototype.call; - d3.transition = function(selection) { - return arguments.length ? d3_transitionId ? selection.transition() : selection : d3_selectionRoot.transition(); - }; - d3.transition.prototype = d3_transitionPrototype; - d3_transitionPrototype.select = function(selector) { - var subgroups = [], subgroup, subnode, node; - if (typeof selector !== "function") selector = d3_selection_selector(selector); - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if ((node = group[i]) && (subnode = selector.call(node.node, node.node.__data__, i))) { - if ("__data__" in node.node) subnode.__data__ = node.node.__data__; - subgroup.push({ - node: subnode, - delay: node.delay, - duration: node.duration - }); - } else { - subgroup.push(null); - } - } - } - return d3_transition(subgroups, this.id, this.time).ease(this.ease()); - }; - d3_transitionPrototype.selectAll = function(selector) { - var subgroups = [], subgroup, subnodes, node; - if (typeof selector !== "function") selector = d3_selection_selectorAll(selector); - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subnodes = selector.call(node.node, node.node.__data__, i); - subgroups.push(subgroup = []); - for (var k = -1, o = subnodes.length; ++k < o; ) { - subgroup.push({ - node: subnodes[k], - delay: node.delay, - duration: node.duration - }); - } - } - } - } - return d3_transition(subgroups, this.id, this.time).ease(this.ease()); - }; - d3_transitionPrototype.filter = function(filter) { - var subgroups = [], subgroup, group, node; - if (typeof filter !== "function") filter = d3_selection_filter(filter); - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - if ((node = group[i]) && filter.call(node.node, node.node.__data__, i)) { - subgroup.push(node); - } - } - } - return d3_transition(subgroups, this.id, this.time).ease(this.ease()); - }; - d3_transitionPrototype.attr = function(name, value) { - if (arguments.length < 2) { - for (value in name) this.attrTween(value, d3_tweenByName(name[value], value)); - return this; - } - return this.attrTween(name, d3_tweenByName(value, name)); - }; - d3_transitionPrototype.attrTween = function(nameNS, tween) { - var name = d3.ns.qualify(nameNS); - function attrTween(d, i) { - var f = tween.call(this, d, i, this.getAttribute(name)); - return f === d3_tweenRemove ? (this.removeAttribute(name), null) : f && function(t) { - this.setAttribute(name, f(t)); - }; - } - function attrTweenNS(d, i) { - var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local)); - return f === d3_tweenRemove ? (this.removeAttributeNS(name.space, name.local), null) : f && function(t) { - this.setAttributeNS(name.space, name.local, f(t)); - }; - } - return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween); - }; - d3_transitionPrototype.style = function(name, value, priority) { - var n = arguments.length; - if (n < 3) { - if (typeof name !== "string") { - if (n < 2) value = ""; - for (priority in name) this.styleTween(priority, d3_tweenByName(name[priority], priority), value); - return this; - } - priority = ""; - } - return this.styleTween(name, d3_tweenByName(value, name), priority); - }; - d3_transitionPrototype.styleTween = function(name, tween, priority) { - if (arguments.length < 3) priority = ""; - return this.tween("style." + name, function(d, i) { - var f = tween.call(this, d, i, window.getComputedStyle(this, null).getPropertyValue(name)); - return f === d3_tweenRemove ? (this.style.removeProperty(name), null) : f && function(t) { - this.style.setProperty(name, f(t), priority); - }; - }); - }; - d3_transitionPrototype.text = function(value) { - return this.tween("text", function(d, i) { - this.textContent = typeof value === "function" ? value.call(this, d, i) : value; - }); - }; - d3_transitionPrototype.remove = function() { - return this.each("end.transition", function() { - var p; - if (!this.__transition__ && (p = this.parentNode)) p.removeChild(this); - }); - }; - d3_transitionPrototype.delay = function(value) { - return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { - node.delay = value.call(node = node.node, node.__data__, i, j) | 0; - } : (value = value | 0, function(node) { - node.delay = value; - })); - }; - d3_transitionPrototype.duration = function(value) { - return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { - node.duration = Math.max(1, value.call(node = node.node, node.__data__, i, j) | 0); - } : (value = Math.max(1, value | 0), function(node) { - node.duration = value; - })); - }; - function d3_transition_each(callback) { - var id = d3_transitionId, ease = d3_transitionEase, delay = d3_transitionDelay, duration = d3_transitionDuration; - d3_transitionId = this.id; - d3_transitionEase = this.ease(); - d3_selection_each(this, function(node, i, j) { - d3_transitionDelay = node.delay; - d3_transitionDuration = node.duration; - callback.call(node = node.node, node.__data__, i, j); - }); - d3_transitionId = id; - d3_transitionEase = ease; - d3_transitionDelay = delay; - d3_transitionDuration = duration; - return this; - } - d3_transitionPrototype.transition = function() { - return this.select(d3_this); - }; - d3.tween = function(b, interpolate) { - function tweenFunction(d, i, a) { - var v = b.call(this, d, i); - return v == null ? a != "" && d3_tweenRemove : a != v && interpolate(a, v); - } - function tweenString(d, i, a) { - return a != b && interpolate(a, b); - } - return typeof b === "function" ? tweenFunction : b == null ? d3_tweenNull : (b += "", tweenString); - }; - var d3_tweenRemove = {}; - function d3_tweenNull(d, i, a) { - return a != "" && d3_tweenRemove; - } - function d3_tweenByName(b, name) { - return d3.tween(b, d3_interpolateByName(name)); - } - var d3_timer_queue = null, d3_timer_interval, d3_timer_timeout; - d3.timer = function(callback, delay, then) { - var found = false, t0, t1 = d3_timer_queue; - if (arguments.length < 3) { - if (arguments.length < 2) delay = 0; else if (!isFinite(delay)) return; - then = Date.now(); - } - while (t1) { - if (t1.callback === callback) { - t1.then = then; - t1.delay = delay; - found = true; - break; - } - t0 = t1; - t1 = t1.next; - } - if (!found) d3_timer_queue = { - callback: callback, - then: then, - delay: delay, - next: d3_timer_queue - }; - if (!d3_timer_interval) { - d3_timer_timeout = clearTimeout(d3_timer_timeout); - d3_timer_interval = 1; - d3_timer_frame(d3_timer_step); - } - }; - function d3_timer_step() { - var elapsed, now = Date.now(), t1 = d3_timer_queue; - while (t1) { - elapsed = now - t1.then; - if (elapsed >= t1.delay) t1.flush = t1.callback(elapsed); - t1 = t1.next; - } - var delay = d3_timer_flush() - now; - if (delay > 24) { - if (isFinite(delay)) { - clearTimeout(d3_timer_timeout); - d3_timer_timeout = setTimeout(d3_timer_step, delay); - } - d3_timer_interval = 0; - } else { - d3_timer_interval = 1; - d3_timer_frame(d3_timer_step); - } - } - d3.timer.flush = function() { - var elapsed, now = Date.now(), t1 = d3_timer_queue; - while (t1) { - elapsed = now - t1.then; - if (!t1.delay) t1.flush = t1.callback(elapsed); - t1 = t1.next; - } - d3_timer_flush(); - }; - function d3_timer_flush() { - var t0 = null, t1 = d3_timer_queue, then = Infinity; - while (t1) { - if (t1.flush) { - t1 = t0 ? t0.next = t1.next : d3_timer_queue = t1.next; - } else { - then = Math.min(then, t1.then + t1.delay); - t1 = (t0 = t1).next; - } - } - return then; - } - var d3_timer_frame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(callback) { - setTimeout(callback, 17); - }; - d3.mouse = function(container) { - return d3_mousePoint(container, d3_eventSource()); - }; - var d3_mouse_bug44083 = /WebKit/.test(navigator.userAgent) ? -1 : 0; - function d3_mousePoint(container, e) { - var svg = container.ownerSVGElement || container; - if (svg.createSVGPoint) { - var point = svg.createSVGPoint(); - if (d3_mouse_bug44083 < 0 && (window.scrollX || window.scrollY)) { - svg = d3.select(document.body).append("svg").style("position", "absolute").style("top", 0).style("left", 0); - var ctm = svg[0][0].getScreenCTM(); - d3_mouse_bug44083 = !(ctm.f || ctm.e); - svg.remove(); - } - if (d3_mouse_bug44083) { - point.x = e.pageX; - point.y = e.pageY; - } else { - point.x = e.clientX; - point.y = e.clientY; - } - point = point.matrixTransform(container.getScreenCTM().inverse()); - return [ point.x, point.y ]; - } - var rect = container.getBoundingClientRect(); - return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ]; - } - d3.touches = function(container, touches) { - if (arguments.length < 2) touches = d3_eventSource().touches; - return touches ? d3_array(touches).map(function(touch) { - var point = d3_mousePoint(container, touch); - point.identifier = touch.identifier; - return point; - }) : []; - }; - function d3_noop() {} - d3.scale = {}; - function d3_scaleExtent(domain) { - var start = domain[0], stop = domain[domain.length - 1]; - return start < stop ? [ start, stop ] : [ stop, start ]; - } - function d3_scaleRange(scale) { - return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range()); - } - function d3_scale_nice(domain, nice) { - var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx; - if (x1 < x0) { - dx = i0, i0 = i1, i1 = dx; - dx = x0, x0 = x1, x1 = dx; - } - if (nice = nice(x1 - x0)) { - domain[i0] = nice.floor(x0); - domain[i1] = nice.ceil(x1); - } - return domain; - } - function d3_scale_niceDefault() { - return Math; - } - d3.scale.linear = function() { - return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3.interpolate, false); - }; - function d3_scale_linear(domain, range, interpolate, clamp) { - var output, input; - function rescale() { - var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber; - output = linear(domain, range, uninterpolate, interpolate); - input = linear(range, domain, uninterpolate, d3.interpolate); - return scale; - } - function scale(x) { - return output(x); - } - scale.invert = function(y) { - return input(y); - }; - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = x.map(Number); - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.rangeRound = function(x) { - return scale.range(x).interpolate(d3.interpolateRound); - }; - scale.clamp = function(x) { - if (!arguments.length) return clamp; - clamp = x; - return rescale(); - }; - scale.interpolate = function(x) { - if (!arguments.length) return interpolate; - interpolate = x; - return rescale(); - }; - scale.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - scale.tickFormat = function(m) { - return d3_scale_linearTickFormat(domain, m); - }; - scale.nice = function() { - d3_scale_nice(domain, d3_scale_linearNice); - return rescale(); - }; - scale.copy = function() { - return d3_scale_linear(domain, range, interpolate, clamp); - }; - return rescale(); - } - function d3_scale_linearRebind(scale, linear) { - return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp"); - } - function d3_scale_linearNice(dx) { - dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1); - return dx && { - floor: function(x) { - return Math.floor(x / dx) * dx; - }, - ceil: function(x) { - return Math.ceil(x / dx) * dx; - } - }; - } - function d3_scale_linearTickRange(domain, m) { - var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step; - if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2; - extent[0] = Math.ceil(extent[0] / step) * step; - extent[1] = Math.floor(extent[1] / step) * step + step * .5; - extent[2] = step; - return extent; - } - function d3_scale_linearTicks(domain, m) { - return d3.range.apply(d3, d3_scale_linearTickRange(domain, m)); - } - function d3_scale_linearTickFormat(domain, m) { - return d3.format(",." + Math.max(0, -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01)) + "f"); - } - function d3_scale_bilinear(domain, range, uninterpolate, interpolate) { - var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]); - return function(x) { - return i(u(x)); - }; - } - function d3_scale_polylinear(domain, range, uninterpolate, interpolate) { - var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1; - if (domain[k] < domain[0]) { - domain = domain.slice().reverse(); - range = range.slice().reverse(); - } - while (++j <= k) { - u.push(uninterpolate(domain[j - 1], domain[j])); - i.push(interpolate(range[j - 1], range[j])); - } - return function(x) { - var j = d3.bisect(domain, x, 1, k) - 1; - return i[j](u[j](x)); - }; - } - d3.scale.log = function() { - return d3_scale_log(d3.scale.linear(), d3_scale_logp); - }; - function d3_scale_log(linear, log) { - var pow = log.pow; - function scale(x) { - return linear(log(x)); - } - scale.invert = function(x) { - return pow(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return linear.domain().map(pow); - log = x[0] < 0 ? d3_scale_logn : d3_scale_logp; - pow = log.pow; - linear.domain(x.map(log)); - return scale; - }; - scale.nice = function() { - linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault)); - return scale; - }; - scale.ticks = function() { - var extent = d3_scaleExtent(linear.domain()), ticks = []; - if (extent.every(isFinite)) { - var i = Math.floor(extent[0]), j = Math.ceil(extent[1]), u = pow(extent[0]), v = pow(extent[1]); - if (log === d3_scale_logn) { - ticks.push(pow(i)); - for (; i++ < j; ) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k); - } else { - for (; i < j; i++) for (var k = 1; k < 10; k++) ticks.push(pow(i) * k); - ticks.push(pow(i)); - } - for (i = 0; ticks[i] < u; i++) {} - for (j = ticks.length; ticks[j - 1] > v; j--) {} - ticks = ticks.slice(i, j); - } - return ticks; - }; - scale.tickFormat = function(n, format) { - if (arguments.length < 2) format = d3_scale_logFormat; - if (arguments.length < 1) return format; - var k = Math.max(.1, n / scale.ticks().length), f = log === d3_scale_logn ? (e = -1e-12, Math.floor) : (e = 1e-12, Math.ceil), e; - return function(d) { - return d / pow(f(log(d) + e)) <= k ? format(d) : ""; - }; - }; - scale.copy = function() { - return d3_scale_log(linear.copy(), log); - }; - return d3_scale_linearRebind(scale, linear); - } - var d3_scale_logFormat = d3.format(".0e"); - function d3_scale_logp(x) { - return Math.log(x < 0 ? 0 : x) / Math.LN10; - } - function d3_scale_logn(x) { - return -Math.log(x > 0 ? 0 : -x) / Math.LN10; - } - d3_scale_logp.pow = function(x) { - return Math.pow(10, x); - }; - d3_scale_logn.pow = function(x) { - return -Math.pow(10, -x); - }; - d3.scale.pow = function() { - return d3_scale_pow(d3.scale.linear(), 1); - }; - function d3_scale_pow(linear, exponent) { - var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent); - function scale(x) { - return linear(powp(x)); - } - scale.invert = function(x) { - return powb(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return linear.domain().map(powb); - linear.domain(x.map(powp)); - return scale; - }; - scale.ticks = function(m) { - return d3_scale_linearTicks(scale.domain(), m); - }; - scale.tickFormat = function(m) { - return d3_scale_linearTickFormat(scale.domain(), m); - }; - scale.nice = function() { - return scale.domain(d3_scale_nice(scale.domain(), d3_scale_linearNice)); - }; - scale.exponent = function(x) { - if (!arguments.length) return exponent; - var domain = scale.domain(); - powp = d3_scale_powPow(exponent = x); - powb = d3_scale_powPow(1 / exponent); - return scale.domain(domain); - }; - scale.copy = function() { - return d3_scale_pow(linear.copy(), exponent); - }; - return d3_scale_linearRebind(scale, linear); - } - function d3_scale_powPow(e) { - return function(x) { - return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e); - }; - } - d3.scale.sqrt = function() { - return d3.scale.pow().exponent(.5); - }; - d3.scale.ordinal = function() { - return d3_scale_ordinal([], { - t: "range", - a: [ [] ] - }); - }; - function d3_scale_ordinal(domain, ranger) { - var index, range, rangeBand; - function scale(x) { - return range[((index.get(x) || index.set(x, domain.push(x))) - 1) % range.length]; - } - function steps(start, step) { - return d3.range(domain.length).map(function(i) { - return start + step * i; - }); - } - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = []; - index = new d3_Map; - var i = -1, n = x.length, xi; - while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi)); - return scale[ranger.t].apply(scale, ranger.a); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - rangeBand = 0; - ranger = { - t: "range", - a: arguments - }; - return scale; - }; - scale.rangePoints = function(x, padding) { - if (arguments.length < 2) padding = 0; - var start = x[0], stop = x[1], step = (stop - start) / (domain.length - 1 + padding); - range = steps(domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, step); - rangeBand = 0; - ranger = { - t: "rangePoints", - a: arguments - }; - return scale; - }; - scale.rangeBands = function(x, padding, outerPadding) { - if (arguments.length < 2) padding = 0; - if (arguments.length < 3) outerPadding = padding; - var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding); - range = steps(start + step * outerPadding, step); - if (reverse) range.reverse(); - rangeBand = step * (1 - padding); - ranger = { - t: "rangeBands", - a: arguments - }; - return scale; - }; - scale.rangeRoundBands = function(x, padding, outerPadding) { - if (arguments.length < 2) padding = 0; - if (arguments.length < 3) outerPadding = padding; - var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)), error = stop - start - (domain.length - padding) * step; - range = steps(start + Math.round(error / 2), step); - if (reverse) range.reverse(); - rangeBand = Math.round(step * (1 - padding)); - ranger = { - t: "rangeRoundBands", - a: arguments - }; - return scale; - }; - scale.rangeBand = function() { - return rangeBand; - }; - scale.rangeExtent = function() { - return d3_scaleExtent(ranger.a[0]); - }; - scale.copy = function() { - return d3_scale_ordinal(domain, ranger); - }; - return scale.domain(domain); - } - d3.scale.category10 = function() { - return d3.scale.ordinal().range(d3_category10); - }; - d3.scale.category20 = function() { - return d3.scale.ordinal().range(d3_category20); - }; - d3.scale.category20b = function() { - return d3.scale.ordinal().range(d3_category20b); - }; - d3.scale.category20c = function() { - return d3.scale.ordinal().range(d3_category20c); - }; - var d3_category10 = [ "#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf" ]; - var d3_category20 = [ "#1f77b4", "#aec7e8", "#ff7f0e", "#ffbb78", "#2ca02c", "#98df8a", "#d62728", "#ff9896", "#9467bd", "#c5b0d5", "#8c564b", "#c49c94", "#e377c2", "#f7b6d2", "#7f7f7f", "#c7c7c7", "#bcbd22", "#dbdb8d", "#17becf", "#9edae5" ]; - var d3_category20b = [ "#393b79", "#5254a3", "#6b6ecf", "#9c9ede", "#637939", "#8ca252", "#b5cf6b", "#cedb9c", "#8c6d31", "#bd9e39", "#e7ba52", "#e7cb94", "#843c39", "#ad494a", "#d6616b", "#e7969c", "#7b4173", "#a55194", "#ce6dbd", "#de9ed6" ]; - var d3_category20c = [ "#3182bd", "#6baed6", "#9ecae1", "#c6dbef", "#e6550d", "#fd8d3c", "#fdae6b", "#fdd0a2", "#31a354", "#74c476", "#a1d99b", "#c7e9c0", "#756bb1", "#9e9ac8", "#bcbddc", "#dadaeb", "#636363", "#969696", "#bdbdbd", "#d9d9d9" ]; - d3.scale.quantile = function() { - return d3_scale_quantile([], []); - }; - function d3_scale_quantile(domain, range) { - var thresholds; - function rescale() { - var k = 0, n = domain.length, q = range.length; - thresholds = []; - while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q); - return scale; - } - function scale(x) { - if (isNaN(x = +x)) return NaN; - return range[d3.bisect(thresholds, x)]; - } - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = x.filter(function(d) { - return !isNaN(d); - }).sort(d3.ascending); - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.quantiles = function() { - return thresholds; - }; - scale.copy = function() { - return d3_scale_quantile(domain, range); - }; - return rescale(); - } - d3.scale.quantize = function() { - return d3_scale_quantize(0, 1, [ 0, 1 ]); - }; - function d3_scale_quantize(x0, x1, range) { - var kx, i; - function scale(x) { - return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))]; - } - function rescale() { - kx = range.length / (x1 - x0); - i = range.length - 1; - return scale; - } - scale.domain = function(x) { - if (!arguments.length) return [ x0, x1 ]; - x0 = +x[0]; - x1 = +x[x.length - 1]; - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.copy = function() { - return d3_scale_quantize(x0, x1, range); - }; - return rescale(); - } - d3.scale.threshold = function() { - return d3_scale_threshold([ .5 ], [ 0, 1 ]); - }; - function d3_scale_threshold(domain, range) { - function scale(x) { - return range[d3.bisect(domain, x)]; - } - scale.domain = function(_) { - if (!arguments.length) return domain; - domain = _; - return scale; - }; - scale.range = function(_) { - if (!arguments.length) return range; - range = _; - return scale; - }; - scale.copy = function() { - return d3_scale_threshold(domain, range); - }; - return scale; - } - d3.scale.identity = function() { - return d3_scale_identity([ 0, 1 ]); - }; - function d3_scale_identity(domain) { - function identity(x) { - return +x; - } - identity.invert = identity; - identity.domain = identity.range = function(x) { - if (!arguments.length) return domain; - domain = x.map(identity); - return identity; - }; - identity.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - identity.tickFormat = function(m) { - return d3_scale_linearTickFormat(domain, m); - }; - identity.copy = function() { - return d3_scale_identity(domain); - }; - return identity; - } - d3.svg = {}; - d3.svg.arc = function() { - var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle; - function arc() { - var r0 = innerRadius.apply(this, arguments), r1 = outerRadius.apply(this, arguments), a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset, a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset, da = (a1 < a0 && (da = a0, a0 = a1, a1 = da), a1 - a0), df = da < Math.PI ? "0" : "1", c0 = Math.cos(a0), s0 = Math.sin(a0), c1 = Math.cos(a1), s1 = Math.sin(a1); - return da >= d3_svg_arcMax ? r0 ? "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "M0," + r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + -r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + r0 + "Z" : "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "Z" : r0 ? "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L" + r0 * c1 + "," + r0 * s1 + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0 + "Z" : "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L0,0" + "Z"; - } - arc.innerRadius = function(v) { - if (!arguments.length) return innerRadius; - innerRadius = d3_functor(v); - return arc; - }; - arc.outerRadius = function(v) { - if (!arguments.length) return outerRadius; - outerRadius = d3_functor(v); - return arc; - }; - arc.startAngle = function(v) { - if (!arguments.length) return startAngle; - startAngle = d3_functor(v); - return arc; - }; - arc.endAngle = function(v) { - if (!arguments.length) return endAngle; - endAngle = d3_functor(v); - return arc; - }; - arc.centroid = function() { - var r = (innerRadius.apply(this, arguments) + outerRadius.apply(this, arguments)) / 2, a = (startAngle.apply(this, arguments) + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset; - return [ Math.cos(a) * r, Math.sin(a) * r ]; - }; - return arc; - }; - var d3_svg_arcOffset = -Math.PI / 2, d3_svg_arcMax = 2 * Math.PI - 1e-6; - function d3_svg_arcInnerRadius(d) { - return d.innerRadius; - } - function d3_svg_arcOuterRadius(d) { - return d.outerRadius; - } - function d3_svg_arcStartAngle(d) { - return d.startAngle; - } - function d3_svg_arcEndAngle(d) { - return d.endAngle; - } - function d3_svg_line(projection) { - var x = d3_svg_lineX, y = d3_svg_lineY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7; - function line(data) { - var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y); - function segment() { - segments.push("M", interpolate(projection(points), tension)); - } - while (++i < n) { - if (defined.call(this, d = data[i], i)) { - points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]); - } else if (points.length) { - segment(); - points = []; - } - } - if (points.length) segment(); - return segments.length ? segments.join("") : null; - } - line.x = function(_) { - if (!arguments.length) return x; - x = _; - return line; - }; - line.y = function(_) { - if (!arguments.length) return y; - y = _; - return line; - }; - line.defined = function(_) { - if (!arguments.length) return defined; - defined = _; - return line; - }; - line.interpolate = function(_) { - if (!arguments.length) return interpolateKey; - if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; - return line; - }; - line.tension = function(_) { - if (!arguments.length) return tension; - tension = _; - return line; - }; - return line; - } - d3.svg.line = function() { - return d3_svg_line(d3_identity); - }; - function d3_svg_lineX(d) { - return d[0]; - } - function d3_svg_lineY(d) { - return d[1]; - } - var d3_svg_lineInterpolators = d3.map({ - linear: d3_svg_lineLinear, - "linear-closed": d3_svg_lineLinearClosed, - "step-before": d3_svg_lineStepBefore, - "step-after": d3_svg_lineStepAfter, - basis: d3_svg_lineBasis, - "basis-open": d3_svg_lineBasisOpen, - "basis-closed": d3_svg_lineBasisClosed, - bundle: d3_svg_lineBundle, - cardinal: d3_svg_lineCardinal, - "cardinal-open": d3_svg_lineCardinalOpen, - "cardinal-closed": d3_svg_lineCardinalClosed, - monotone: d3_svg_lineMonotone - }); - d3_svg_lineInterpolators.forEach(function(key, value) { - value.key = key; - value.closed = /-closed$/.test(key); - }); - function d3_svg_lineLinear(points) { - return points.join("L"); - } - function d3_svg_lineLinearClosed(points) { - return d3_svg_lineLinear(points) + "Z"; - } - function d3_svg_lineStepBefore(points) { - var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; - while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]); - return path.join(""); - } - function d3_svg_lineStepAfter(points) { - var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; - while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]); - return path.join(""); - } - function d3_svg_lineCardinalOpen(points, tension) { - return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1), d3_svg_lineCardinalTangents(points, tension)); - } - function d3_svg_lineCardinalClosed(points, tension) { - return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension)); - } - function d3_svg_lineCardinal(points, tension, closed) { - return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension)); - } - function d3_svg_lineHermite(points, tangents) { - if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) { - return d3_svg_lineLinear(points); - } - var quad = points.length != tangents.length, path = "", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1; - if (quad) { - path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + "," + p[0] + "," + p[1]; - p0 = points[1]; - pi = 2; - } - if (tangents.length > 1) { - t = tangents[1]; - p = points[pi]; - pi++; - path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; - for (var i = 2; i < tangents.length; i++, pi++) { - p = points[pi]; - t = tangents[i]; - path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; - } - } - if (quad) { - var lp = points[pi]; - path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + "," + lp[0] + "," + lp[1]; - } - return path; - } - function d3_svg_lineCardinalTangents(points, tension) { - var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length; - while (++i < n) { - p0 = p1; - p1 = p2; - p2 = points[i]; - tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]); - } - return tangents; - } - function d3_svg_lineBasis(points) { - if (points.length < 3) return d3_svg_lineLinear(points); - var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, ",", y0 ]; - d3_svg_lineBasisBezier(path, px, py); - while (++i < n) { - pi = points[i]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - i = -1; - while (++i < 2) { - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - return path.join(""); - } - function d3_svg_lineBasisOpen(points) { - if (points.length < 4) return d3_svg_lineLinear(points); - var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ]; - while (++i < 3) { - pi = points[i]; - px.push(pi[0]); - py.push(pi[1]); - } - path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)); - --i; - while (++i < n) { - pi = points[i]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - return path.join(""); - } - function d3_svg_lineBasisClosed(points) { - var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = []; - while (++i < 4) { - pi = points[i % n]; - px.push(pi[0]); - py.push(pi[1]); - } - path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ]; - --i; - while (++i < m) { - pi = points[i % n]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - return path.join(""); - } - function d3_svg_lineBundle(points, tension) { - var n = points.length - 1; - if (n) { - var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t; - while (++i <= n) { - p = points[i]; - t = i / n; - p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx); - p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy); - } - } - return d3_svg_lineBasis(points); - } - function d3_svg_lineDot4(a, b) { - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; - } - var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ]; - function d3_svg_lineBasisBezier(path, x, y) { - path.push("C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y)); - } - function d3_svg_lineSlope(p0, p1) { - return (p1[1] - p0[1]) / (p1[0] - p0[0]); - } - function d3_svg_lineFiniteDifferences(points) { - var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1); - while (++i < j) { - m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2; - } - m[i] = d; - return m; - } - function d3_svg_lineMonotoneTangents(points) { - var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1; - while (++i < j) { - d = d3_svg_lineSlope(points[i], points[i + 1]); - if (Math.abs(d) < 1e-6) { - m[i] = m[i + 1] = 0; - } else { - a = m[i] / d; - b = m[i + 1] / d; - s = a * a + b * b; - if (s > 9) { - s = d * 3 / Math.sqrt(s); - m[i] = s * a; - m[i + 1] = s * b; - } - } - } - i = -1; - while (++i <= j) { - s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i])); - tangents.push([ s || 0, m[i] * s || 0 ]); - } - return tangents; - } - function d3_svg_lineMonotone(points) { - return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points)); - } - d3.svg.line.radial = function() { - var line = d3_svg_line(d3_svg_lineRadial); - line.radius = line.x, delete line.x; - line.angle = line.y, delete line.y; - return line; - }; - function d3_svg_lineRadial(points) { - var point, i = -1, n = points.length, r, a; - while (++i < n) { - point = points[i]; - r = point[0]; - a = point[1] + d3_svg_arcOffset; - point[0] = r * Math.cos(a); - point[1] = r * Math.sin(a); - } - return points; - } - function d3_svg_area(projection) { - var x0 = d3_svg_lineX, x1 = d3_svg_lineX, y0 = 0, y1 = d3_svg_lineY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = "L", tension = .7; - function area(data) { - var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() { - return x; - } : d3_functor(x1), fy1 = y0 === y1 ? function() { - return y; - } : d3_functor(y1), x, y; - function segment() { - segments.push("M", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), "Z"); - } - while (++i < n) { - if (defined.call(this, d = data[i], i)) { - points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]); - points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]); - } else if (points0.length) { - segment(); - points0 = []; - points1 = []; - } - } - if (points0.length) segment(); - return segments.length ? segments.join("") : null; - } - area.x = function(_) { - if (!arguments.length) return x1; - x0 = x1 = _; - return area; - }; - area.x0 = function(_) { - if (!arguments.length) return x0; - x0 = _; - return area; - }; - area.x1 = function(_) { - if (!arguments.length) return x1; - x1 = _; - return area; - }; - area.y = function(_) { - if (!arguments.length) return y1; - y0 = y1 = _; - return area; - }; - area.y0 = function(_) { - if (!arguments.length) return y0; - y0 = _; - return area; - }; - area.y1 = function(_) { - if (!arguments.length) return y1; - y1 = _; - return area; - }; - area.defined = function(_) { - if (!arguments.length) return defined; - defined = _; - return area; - }; - area.interpolate = function(_) { - if (!arguments.length) return interpolateKey; - if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; - interpolateReverse = interpolate.reverse || interpolate; - L = interpolate.closed ? "M" : "L"; - return area; - }; - area.tension = function(_) { - if (!arguments.length) return tension; - tension = _; - return area; - }; - return area; - } - d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter; - d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore; - d3.svg.area = function() { - return d3_svg_area(d3_identity); - }; - d3.svg.area.radial = function() { - var area = d3_svg_area(d3_svg_lineRadial); - area.radius = area.x, delete area.x; - area.innerRadius = area.x0, delete area.x0; - area.outerRadius = area.x1, delete area.x1; - area.angle = area.y, delete area.y; - area.startAngle = area.y0, delete area.y0; - area.endAngle = area.y1, delete area.y1; - return area; - }; - d3.svg.chord = function() { - var source = d3_svg_chordSource, target = d3_svg_chordTarget, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle; - function chord(d, i) { - var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i); - return "M" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z"; - } - function subgroup(self, f, d, i) { - var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset, a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset; - return { - r: r, - a0: a0, - a1: a1, - p0: [ r * Math.cos(a0), r * Math.sin(a0) ], - p1: [ r * Math.cos(a1), r * Math.sin(a1) ] - }; - } - function equals(a, b) { - return a.a0 == b.a0 && a.a1 == b.a1; - } - function arc(r, p, a) { - return "A" + r + "," + r + " 0 " + +(a > Math.PI) + ",1 " + p; - } - function curve(r0, p0, r1, p1) { - return "Q 0,0 " + p1; - } - chord.radius = function(v) { - if (!arguments.length) return radius; - radius = d3_functor(v); - return chord; - }; - chord.source = function(v) { - if (!arguments.length) return source; - source = d3_functor(v); - return chord; - }; - chord.target = function(v) { - if (!arguments.length) return target; - target = d3_functor(v); - return chord; - }; - chord.startAngle = function(v) { - if (!arguments.length) return startAngle; - startAngle = d3_functor(v); - return chord; - }; - chord.endAngle = function(v) { - if (!arguments.length) return endAngle; - endAngle = d3_functor(v); - return chord; - }; - return chord; - }; - function d3_svg_chordSource(d) { - return d.source; - } - function d3_svg_chordTarget(d) { - return d.target; - } - function d3_svg_chordRadius(d) { - return d.radius; - } - function d3_svg_chordStartAngle(d) { - return d.startAngle; - } - function d3_svg_chordEndAngle(d) { - return d.endAngle; - } - d3.svg.diagonal = function() { - var source = d3_svg_chordSource, target = d3_svg_chordTarget, projection = d3_svg_diagonalProjection; - function diagonal(d, i) { - var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, { - x: p0.x, - y: m - }, { - x: p3.x, - y: m - }, p3 ]; - p = p.map(projection); - return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3]; - } - diagonal.source = function(x) { - if (!arguments.length) return source; - source = d3_functor(x); - return diagonal; - }; - diagonal.target = function(x) { - if (!arguments.length) return target; - target = d3_functor(x); - return diagonal; - }; - diagonal.projection = function(x) { - if (!arguments.length) return projection; - projection = x; - return diagonal; - }; - return diagonal; - }; - function d3_svg_diagonalProjection(d) { - return [ d.x, d.y ]; - } - d3.svg.diagonal.radial = function() { - var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection; - diagonal.projection = function(x) { - return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection; - }; - return diagonal; - }; - function d3_svg_diagonalRadialProjection(projection) { - return function() { - var d = projection.apply(this, arguments), r = d[0], a = d[1] + d3_svg_arcOffset; - return [ r * Math.cos(a), r * Math.sin(a) ]; - }; - } - d3.svg.mouse = d3.mouse; - d3.svg.touches = d3.touches; - d3.svg.symbol = function() { - var type = d3_svg_symbolType, size = d3_svg_symbolSize; - function symbol(d, i) { - return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i)); - } - symbol.type = function(x) { - if (!arguments.length) return type; - type = d3_functor(x); - return symbol; - }; - symbol.size = function(x) { - if (!arguments.length) return size; - size = d3_functor(x); - return symbol; - }; - return symbol; - }; - function d3_svg_symbolSize() { - return 64; - } - function d3_svg_symbolType() { - return "circle"; - } - function d3_svg_symbolCircle(size) { - var r = Math.sqrt(size / Math.PI); - return "M0," + r + "A" + r + "," + r + " 0 1,1 0," + -r + "A" + r + "," + r + " 0 1,1 0," + r + "Z"; - } - var d3_svg_symbols = d3.map({ - circle: d3_svg_symbolCircle, - cross: function(size) { - var r = Math.sqrt(size / 5) / 2; - return "M" + -3 * r + "," + -r + "H" + -r + "V" + -3 * r + "H" + r + "V" + -r + "H" + 3 * r + "V" + r + "H" + r + "V" + 3 * r + "H" + -r + "V" + r + "H" + -3 * r + "Z"; - }, - diamond: function(size) { - var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30; - return "M0," + -ry + "L" + rx + ",0" + " 0," + ry + " " + -rx + ",0" + "Z"; - }, - square: function(size) { - var r = Math.sqrt(size) / 2; - return "M" + -r + "," + -r + "L" + r + "," + -r + " " + r + "," + r + " " + -r + "," + r + "Z"; - }, - "triangle-down": function(size) { - var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; - return "M0," + ry + "L" + rx + "," + -ry + " " + -rx + "," + -ry + "Z"; - }, - "triangle-up": function(size) { - var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; - return "M0," + -ry + "L" + rx + "," + ry + " " + -rx + "," + ry + "Z"; - } - }); - d3.svg.symbolTypes = d3_svg_symbols.keys(); - var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * Math.PI / 180); - d3.svg.axis = function() { - var scale = d3.scale.linear(), orient = "bottom", tickMajorSize = 6, tickMinorSize = 6, tickEndSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_, tickSubdivide = 0; - function axis(g) { - g.each(function() { - var g = d3.select(this); - var ticks = tickValues == null ? scale.ticks ? scale.ticks.apply(scale, tickArguments_) : scale.domain() : tickValues, tickFormat = tickFormat_ == null ? scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments_) : String : tickFormat_; - var subticks = d3_svg_axisSubdivide(scale, ticks, tickSubdivide), subtick = g.selectAll(".minor").data(subticks, String), subtickEnter = subtick.enter().insert("line", "g").attr("class", "tick minor").style("opacity", 1e-6), subtickExit = d3.transition(subtick.exit()).style("opacity", 1e-6).remove(), subtickUpdate = d3.transition(subtick).style("opacity", 1); - var tick = g.selectAll("g").data(ticks, String), tickEnter = tick.enter().insert("g", "path").style("opacity", 1e-6), tickExit = d3.transition(tick.exit()).style("opacity", 1e-6).remove(), tickUpdate = d3.transition(tick).style("opacity", 1), tickTransform; - var range = d3_scaleRange(scale), path = g.selectAll(".domain").data([ 0 ]), pathEnter = path.enter().append("path").attr("class", "domain"), pathUpdate = d3.transition(path); - var scale1 = scale.copy(), scale0 = this.__chart__ || scale1; - this.__chart__ = scale1; - tickEnter.append("line").attr("class", "tick"); - tickEnter.append("text"); - var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text"); - switch (orient) { - case "bottom": - { - tickTransform = d3_svg_axisX; - subtickEnter.attr("y2", tickMinorSize); - subtickUpdate.attr("x2", 0).attr("y2", tickMinorSize); - lineEnter.attr("y2", tickMajorSize); - textEnter.attr("y", Math.max(tickMajorSize, 0) + tickPadding); - lineUpdate.attr("x2", 0).attr("y2", tickMajorSize); - textUpdate.attr("x", 0).attr("y", Math.max(tickMajorSize, 0) + tickPadding); - text.attr("dy", ".71em").attr("text-anchor", "middle"); - pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize); - break; - } - case "top": - { - tickTransform = d3_svg_axisX; - subtickEnter.attr("y2", -tickMinorSize); - subtickUpdate.attr("x2", 0).attr("y2", -tickMinorSize); - lineEnter.attr("y2", -tickMajorSize); - textEnter.attr("y", -(Math.max(tickMajorSize, 0) + tickPadding)); - lineUpdate.attr("x2", 0).attr("y2", -tickMajorSize); - textUpdate.attr("x", 0).attr("y", -(Math.max(tickMajorSize, 0) + tickPadding)); - text.attr("dy", "0em").attr("text-anchor", "middle"); - pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize); - break; - } - case "left": - { - tickTransform = d3_svg_axisY; - subtickEnter.attr("x2", -tickMinorSize); - subtickUpdate.attr("x2", -tickMinorSize).attr("y2", 0); - lineEnter.attr("x2", -tickMajorSize); - textEnter.attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)); - lineUpdate.attr("x2", -tickMajorSize).attr("y2", 0); - textUpdate.attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("y", 0); - text.attr("dy", ".32em").attr("text-anchor", "end"); - pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize); - break; - } - case "right": - { - tickTransform = d3_svg_axisY; - subtickEnter.attr("x2", tickMinorSize); - subtickUpdate.attr("x2", tickMinorSize).attr("y2", 0); - lineEnter.attr("x2", tickMajorSize); - textEnter.attr("x", Math.max(tickMajorSize, 0) + tickPadding); - lineUpdate.attr("x2", tickMajorSize).attr("y2", 0); - textUpdate.attr("x", Math.max(tickMajorSize, 0) + tickPadding).attr("y", 0); - text.attr("dy", ".32em").attr("text-anchor", "start"); - pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize); - break; - } - } - if (scale.ticks) { - tickEnter.call(tickTransform, scale0); - tickUpdate.call(tickTransform, scale1); - tickExit.call(tickTransform, scale1); - subtickEnter.call(tickTransform, scale0); - subtickUpdate.call(tickTransform, scale1); - subtickExit.call(tickTransform, scale1); - } else { - var dx = scale1.rangeBand() / 2, x = function(d) { - return scale1(d) + dx; - }; - tickEnter.call(tickTransform, x); - tickUpdate.call(tickTransform, x); - } - }); - } - axis.scale = function(x) { - if (!arguments.length) return scale; - scale = x; - return axis; - }; - axis.orient = function(x) { - if (!arguments.length) return orient; - orient = x; - return axis; - }; - axis.ticks = function() { - if (!arguments.length) return tickArguments_; - tickArguments_ = arguments; - return axis; - }; - axis.tickValues = function(x) { - if (!arguments.length) return tickValues; - tickValues = x; - return axis; - }; - axis.tickFormat = function(x) { - if (!arguments.length) return tickFormat_; - tickFormat_ = x; - return axis; - }; - axis.tickSize = function(x, y, z) { - if (!arguments.length) return tickMajorSize; - var n = arguments.length - 1; - tickMajorSize = +x; - tickMinorSize = n > 1 ? +y : tickMajorSize; - tickEndSize = n > 0 ? +arguments[n] : tickMajorSize; - return axis; - }; - axis.tickPadding = function(x) { - if (!arguments.length) return tickPadding; - tickPadding = +x; - return axis; - }; - axis.tickSubdivide = function(x) { - if (!arguments.length) return tickSubdivide; - tickSubdivide = +x; - return axis; - }; - return axis; - }; - function d3_svg_axisX(selection, x) { - selection.attr("transform", function(d) { - return "translate(" + x(d) + ",0)"; - }); - } - function d3_svg_axisY(selection, y) { - selection.attr("transform", function(d) { - return "translate(0," + y(d) + ")"; - }); - } - function d3_svg_axisSubdivide(scale, ticks, m) { - subticks = []; - if (m && ticks.length > 1) { - var extent = d3_scaleExtent(scale.domain()), subticks, i = -1, n = ticks.length, d = (ticks[1] - ticks[0]) / ++m, j, v; - while (++i < n) { - for (j = m; --j > 0; ) { - if ((v = +ticks[i] - j * d) >= extent[0]) { - subticks.push(v); - } - } - } - for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1]; ) { - subticks.push(v); - } - } - return subticks; - } - d3.svg.brush = function() { - var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x = null, y = null, resizes = d3_svg_brushResizes[0], extent = [ [ 0, 0 ], [ 0, 0 ] ], extentDomain; - function brush(g) { - g.each(function() { - var g = d3.select(this), bg = g.selectAll(".background").data([ 0 ]), fg = g.selectAll(".extent").data([ 0 ]), tz = g.selectAll(".resize").data(resizes, String), e; - g.style("pointer-events", "all").on("mousedown.brush", brushstart).on("touchstart.brush", brushstart); - bg.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair"); - fg.enter().append("rect").attr("class", "extent").style("cursor", "move"); - tz.enter().append("g").attr("class", function(d) { - return "resize " + d; - }).style("cursor", function(d) { - return d3_svg_brushCursor[d]; - }).append("rect").attr("x", function(d) { - return /[ew]$/.test(d) ? -3 : null; - }).attr("y", function(d) { - return /^[ns]/.test(d) ? -3 : null; - }).attr("width", 6).attr("height", 6).style("visibility", "hidden"); - tz.style("display", brush.empty() ? "none" : null); - tz.exit().remove(); - if (x) { - e = d3_scaleRange(x); - bg.attr("x", e[0]).attr("width", e[1] - e[0]); - redrawX(g); - } - if (y) { - e = d3_scaleRange(y); - bg.attr("y", e[0]).attr("height", e[1] - e[0]); - redrawY(g); - } - redraw(g); - }); - } - function redraw(g) { - g.selectAll(".resize").attr("transform", function(d) { - return "translate(" + extent[+/e$/.test(d)][0] + "," + extent[+/^s/.test(d)][1] + ")"; - }); - } - function redrawX(g) { - g.select(".extent").attr("x", extent[0][0]); - g.selectAll(".extent,.n>rect,.s>rect").attr("width", extent[1][0] - extent[0][0]); - } - function redrawY(g) { - g.select(".extent").attr("y", extent[0][1]); - g.selectAll(".extent,.e>rect,.w>rect").attr("height", extent[1][1] - extent[0][1]); - } - function brushstart() { - var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed("extent"), center, origin = mouse(), offset; - var w = d3.select(window).on("mousemove.brush", brushmove).on("mouseup.brush", brushend).on("touchmove.brush", brushmove).on("touchend.brush", brushend).on("keydown.brush", keydown).on("keyup.brush", keyup); - if (dragging) { - origin[0] = extent[0][0] - origin[0]; - origin[1] = extent[0][1] - origin[1]; - } else if (resizing) { - var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing); - offset = [ extent[1 - ex][0] - origin[0], extent[1 - ey][1] - origin[1] ]; - origin[0] = extent[ex][0]; - origin[1] = extent[ey][1]; - } else if (d3.event.altKey) center = origin.slice(); - g.style("pointer-events", "none").selectAll(".resize").style("display", null); - d3.select("body").style("cursor", eventTarget.style("cursor")); - event_({ - type: "brushstart" - }); - brushmove(); - d3_eventCancel(); - function mouse() { - var touches = d3.event.changedTouches; - return touches ? d3.touches(target, touches)[0] : d3.mouse(target); - } - function keydown() { - if (d3.event.keyCode == 32) { - if (!dragging) { - center = null; - origin[0] -= extent[1][0]; - origin[1] -= extent[1][1]; - dragging = 2; - } - d3_eventCancel(); - } - } - function keyup() { - if (d3.event.keyCode == 32 && dragging == 2) { - origin[0] += extent[1][0]; - origin[1] += extent[1][1]; - dragging = 0; - d3_eventCancel(); - } - } - function brushmove() { - var point = mouse(), moved = false; - if (offset) { - point[0] += offset[0]; - point[1] += offset[1]; - } - if (!dragging) { - if (d3.event.altKey) { - if (!center) center = [ (extent[0][0] + extent[1][0]) / 2, (extent[0][1] + extent[1][1]) / 2 ]; - origin[0] = extent[+(point[0] < center[0])][0]; - origin[1] = extent[+(point[1] < center[1])][1]; - } else center = null; - } - if (resizingX && move1(point, x, 0)) { - redrawX(g); - moved = true; - } - if (resizingY && move1(point, y, 1)) { - redrawY(g); - moved = true; - } - if (moved) { - redraw(g); - event_({ - type: "brush", - mode: dragging ? "move" : "resize" - }); - } - } - function move1(point, scale, i) { - var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], size = extent[1][i] - extent[0][i], min, max; - if (dragging) { - r0 -= position; - r1 -= size + position; - } - min = Math.max(r0, Math.min(r1, point[i])); - if (dragging) { - max = (min += position) + size; - } else { - if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min)); - if (position < min) { - max = min; - min = position; - } else { - max = position; - } - } - if (extent[0][i] !== min || extent[1][i] !== max) { - extentDomain = null; - extent[0][i] = min; - extent[1][i] = max; - return true; - } - } - function brushend() { - brushmove(); - g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null); - d3.select("body").style("cursor", null); - w.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null); - event_({ - type: "brushend" - }); - d3_eventCancel(); - } - } - brush.x = function(z) { - if (!arguments.length) return x; - x = z; - resizes = d3_svg_brushResizes[!x << 1 | !y]; - return brush; - }; - brush.y = function(z) { - if (!arguments.length) return y; - y = z; - resizes = d3_svg_brushResizes[!x << 1 | !y]; - return brush; - }; - brush.extent = function(z) { - var x0, x1, y0, y1, t; - if (!arguments.length) { - z = extentDomain || extent; - if (x) { - x0 = z[0][0], x1 = z[1][0]; - if (!extentDomain) { - x0 = extent[0][0], x1 = extent[1][0]; - if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1); - if (x1 < x0) t = x0, x0 = x1, x1 = t; - } - } - if (y) { - y0 = z[0][1], y1 = z[1][1]; - if (!extentDomain) { - y0 = extent[0][1], y1 = extent[1][1]; - if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1); - if (y1 < y0) t = y0, y0 = y1, y1 = t; - } - } - return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ]; - } - extentDomain = [ [ 0, 0 ], [ 0, 0 ] ]; - if (x) { - x0 = z[0], x1 = z[1]; - if (y) x0 = x0[0], x1 = x1[0]; - extentDomain[0][0] = x0, extentDomain[1][0] = x1; - if (x.invert) x0 = x(x0), x1 = x(x1); - if (x1 < x0) t = x0, x0 = x1, x1 = t; - extent[0][0] = x0 | 0, extent[1][0] = x1 | 0; - } - if (y) { - y0 = z[0], y1 = z[1]; - if (x) y0 = y0[1], y1 = y1[1]; - extentDomain[0][1] = y0, extentDomain[1][1] = y1; - if (y.invert) y0 = y(y0), y1 = y(y1); - if (y1 < y0) t = y0, y0 = y1, y1 = t; - extent[0][1] = y0 | 0, extent[1][1] = y1 | 0; - } - return brush; - }; - brush.clear = function() { - extentDomain = null; - extent[0][0] = extent[0][1] = extent[1][0] = extent[1][1] = 0; - return brush; - }; - brush.empty = function() { - return x && extent[0][0] === extent[1][0] || y && extent[0][1] === extent[1][1]; - }; - return d3.rebind(brush, event, "on"); - }; - var d3_svg_brushCursor = { - n: "ns-resize", - e: "ew-resize", - s: "ns-resize", - w: "ew-resize", - nw: "nwse-resize", - ne: "nesw-resize", - se: "nwse-resize", - sw: "nesw-resize" - }; - var d3_svg_brushResizes = [ [ "n", "e", "s", "w", "nw", "ne", "se", "sw" ], [ "e", "w" ], [ "n", "s" ], [] ]; - d3.behavior = {}; - d3.behavior.drag = function() { - var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null; - function drag() { - this.on("mousedown.drag", mousedown).on("touchstart.drag", mousedown); - } - function mousedown() { - var target = this, event_ = event.of(target, arguments), eventTarget = d3.event.target, offset, origin_ = point(), moved = 0; - var w = d3.select(window).on("mousemove.drag", dragmove).on("touchmove.drag", dragmove).on("mouseup.drag", dragend, true).on("touchend.drag", dragend, true); - if (origin) { - offset = origin.apply(target, arguments); - offset = [ offset.x - origin_[0], offset.y - origin_[1] ]; - } else { - offset = [ 0, 0 ]; - } - d3_eventCancel(); - event_({ - type: "dragstart" - }); - function point() { - var p = target.parentNode, t = d3.event.changedTouches; - return t ? d3.touches(p, t)[0] : d3.mouse(p); - } - function dragmove() { - if (!target.parentNode) return dragend(); - var p = point(), dx = p[0] - origin_[0], dy = p[1] - origin_[1]; - moved |= dx | dy; - origin_ = p; - d3_eventCancel(); - event_({ - type: "drag", - x: p[0] + offset[0], - y: p[1] + offset[1], - dx: dx, - dy: dy - }); - } - function dragend() { - event_({ - type: "dragend" - }); - if (moved) { - d3_eventCancel(); - if (d3.event.target === eventTarget) w.on("click.drag", click, true); - } - w.on("mousemove.drag", null).on("touchmove.drag", null).on("mouseup.drag", null).on("touchend.drag", null); - } - function click() { - d3_eventCancel(); - w.on("click.drag", null); - } - } - drag.origin = function(x) { - if (!arguments.length) return origin; - origin = x; - return drag; - }; - return d3.rebind(drag, event, "on"); - }; - d3.behavior.zoom = function() { - var translate = [ 0, 0 ], translate0, scale = 1, scale0, scaleExtent = d3_behavior_zoomInfinity, event = d3_eventDispatch(zoom, "zoom"), x0, x1, y0, y1, touchtime; - function zoom() { - this.on("mousedown.zoom", mousedown).on("mousewheel.zoom", mousewheel).on("mousemove.zoom", mousemove).on("DOMMouseScroll.zoom", mousewheel).on("dblclick.zoom", dblclick).on("touchstart.zoom", touchstart).on("touchmove.zoom", touchmove).on("touchend.zoom", touchstart); - } - zoom.translate = function(x) { - if (!arguments.length) return translate; - translate = x.map(Number); - return zoom; - }; - zoom.scale = function(x) { - if (!arguments.length) return scale; - scale = +x; - return zoom; - }; - zoom.scaleExtent = function(x) { - if (!arguments.length) return scaleExtent; - scaleExtent = x == null ? d3_behavior_zoomInfinity : x.map(Number); - return zoom; - }; - zoom.x = function(z) { - if (!arguments.length) return x1; - x1 = z; - x0 = z.copy(); - return zoom; - }; - zoom.y = function(z) { - if (!arguments.length) return y1; - y1 = z; - y0 = z.copy(); - return zoom; - }; - function location(p) { - return [ (p[0] - translate[0]) / scale, (p[1] - translate[1]) / scale ]; - } - function point(l) { - return [ l[0] * scale + translate[0], l[1] * scale + translate[1] ]; - } - function scaleTo(s) { - scale = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s)); - } - function translateTo(p, l) { - l = point(l); - translate[0] += p[0] - l[0]; - translate[1] += p[1] - l[1]; - } - function dispatch(event) { - if (x1) x1.domain(x0.range().map(function(x) { - return (x - translate[0]) / scale; - }).map(x0.invert)); - if (y1) y1.domain(y0.range().map(function(y) { - return (y - translate[1]) / scale; - }).map(y0.invert)); - d3.event.preventDefault(); - event({ - type: "zoom", - scale: scale, - translate: translate - }); - } - function mousedown() { - var target = this, event_ = event.of(target, arguments), eventTarget = d3.event.target, moved = 0, w = d3.select(window).on("mousemove.zoom", mousemove).on("mouseup.zoom", mouseup), l = location(d3.mouse(target)); - window.focus(); - d3_eventCancel(); - function mousemove() { - moved = 1; - translateTo(d3.mouse(target), l); - dispatch(event_); - } - function mouseup() { - if (moved) d3_eventCancel(); - w.on("mousemove.zoom", null).on("mouseup.zoom", null); - if (moved && d3.event.target === eventTarget) w.on("click.zoom", click, true); - } - function click() { - d3_eventCancel(); - w.on("click.zoom", null); - } - } - function mousewheel() { - if (!translate0) translate0 = location(d3.mouse(this)); - scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * scale); - translateTo(d3.mouse(this), translate0); - dispatch(event.of(this, arguments)); - } - function mousemove() { - translate0 = null; - } - function dblclick() { - var p = d3.mouse(this), l = location(p); - scaleTo(d3.event.shiftKey ? scale / 2 : scale * 2); - translateTo(p, l); - dispatch(event.of(this, arguments)); - } - function touchstart() { - var touches = d3.touches(this), now = Date.now(); - scale0 = scale; - translate0 = {}; - touches.forEach(function(t) { - translate0[t.identifier] = location(t); - }); - d3_eventCancel(); - if (touches.length === 1) { - if (now - touchtime < 500) { - var p = touches[0], l = location(touches[0]); - scaleTo(scale * 2); - translateTo(p, l); - dispatch(event.of(this, arguments)); - } - touchtime = now; - } - } - function touchmove() { - var touches = d3.touches(this), p0 = touches[0], l0 = translate0[p0.identifier]; - if (p1 = touches[1]) { - var p1, l1 = translate0[p1.identifier]; - p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ]; - l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ]; - scaleTo(d3.event.scale * scale0); - } - translateTo(p0, l0); - touchtime = null; - dispatch(event.of(this, arguments)); - } - return d3.rebind(zoom, event, "on"); - }; - var d3_behavior_zoomDiv, d3_behavior_zoomInfinity = [ 0, Infinity ]; - function d3_behavior_zoomDelta() { - if (!d3_behavior_zoomDiv) { - d3_behavior_zoomDiv = d3.select("body").append("div").style("visibility", "hidden").style("top", 0).style("height", 0).style("width", 0).style("overflow-y", "scroll").append("div").style("height", "2000px").node().parentNode; - } - var e = d3.event, delta; - try { - d3_behavior_zoomDiv.scrollTop = 1e3; - d3_behavior_zoomDiv.dispatchEvent(e); - delta = 1e3 - d3_behavior_zoomDiv.scrollTop; - } catch (error) { - delta = e.wheelDelta || -e.detail * 5; - } - return delta; - } - d3.layout = {}; - d3.layout.bundle = function() { - return function(links) { - var paths = [], i = -1, n = links.length; - while (++i < n) paths.push(d3_layout_bundlePath(links[i])); - return paths; - }; - }; - function d3_layout_bundlePath(link) { - var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ]; - while (start !== lca) { - start = start.parent; - points.push(start); - } - var k = points.length; - while (end !== lca) { - points.splice(k, 0, end); - end = end.parent; - } - return points; - } - function d3_layout_bundleAncestors(node) { - var ancestors = [], parent = node.parent; - while (parent != null) { - ancestors.push(node); - node = parent; - parent = parent.parent; - } - ancestors.push(node); - return ancestors; - } - function d3_layout_bundleLeastCommonAncestor(a, b) { - if (a === b) return a; - var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null; - while (aNode === bNode) { - sharedNode = aNode; - aNode = aNodes.pop(); - bNode = bNodes.pop(); - } - return sharedNode; - } - d3.layout.chord = function() { - var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords; - function relayout() { - var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j; - chords = []; - groups = []; - k = 0, i = -1; - while (++i < n) { - x = 0, j = -1; - while (++j < n) { - x += matrix[i][j]; - } - groupSums.push(x); - subgroupIndex.push(d3.range(n)); - k += x; - } - if (sortGroups) { - groupIndex.sort(function(a, b) { - return sortGroups(groupSums[a], groupSums[b]); - }); - } - if (sortSubgroups) { - subgroupIndex.forEach(function(d, i) { - d.sort(function(a, b) { - return sortSubgroups(matrix[i][a], matrix[i][b]); - }); - }); - } - k = (2 * Math.PI - padding * n) / k; - x = 0, i = -1; - while (++i < n) { - x0 = x, j = -1; - while (++j < n) { - var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k; - subgroups[di + "-" + dj] = { - index: di, - subindex: dj, - startAngle: a0, - endAngle: a1, - value: v - }; - } - groups[di] = { - index: di, - startAngle: x0, - endAngle: x, - value: (x - x0) / k - }; - x += padding; - } - i = -1; - while (++i < n) { - j = i - 1; - while (++j < n) { - var source = subgroups[i + "-" + j], target = subgroups[j + "-" + i]; - if (source.value || target.value) { - chords.push(source.value < target.value ? { - source: target, - target: source - } : { - source: source, - target: target - }); - } - } - } - if (sortChords) resort(); - } - function resort() { - chords.sort(function(a, b) { - return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2); - }); - } - chord.matrix = function(x) { - if (!arguments.length) return matrix; - n = (matrix = x) && matrix.length; - chords = groups = null; - return chord; - }; - chord.padding = function(x) { - if (!arguments.length) return padding; - padding = x; - chords = groups = null; - return chord; - }; - chord.sortGroups = function(x) { - if (!arguments.length) return sortGroups; - sortGroups = x; - chords = groups = null; - return chord; - }; - chord.sortSubgroups = function(x) { - if (!arguments.length) return sortSubgroups; - sortSubgroups = x; - chords = null; - return chord; - }; - chord.sortChords = function(x) { - if (!arguments.length) return sortChords; - sortChords = x; - if (chords) resort(); - return chord; - }; - chord.chords = function() { - if (!chords) relayout(); - return chords; - }; - chord.groups = function() { - if (!groups) relayout(); - return groups; - }; - return chord; - }; - d3.layout.force = function() { - var force = {}, event = d3.dispatch("start", "tick", "end"), size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, gravity = .1, theta = .8, interval, nodes = [], links = [], distances, strengths, charges; - function repulse(node) { - return function(quad, x1, y1, x2, y2) { - if (quad.point !== node) { - var dx = quad.cx - node.x, dy = quad.cy - node.y, dn = 1 / Math.sqrt(dx * dx + dy * dy); - if ((x2 - x1) * dn < theta) { - var k = quad.charge * dn * dn; - node.px -= dx * k; - node.py -= dy * k; - return true; - } - if (quad.point && isFinite(dn)) { - var k = quad.pointCharge * dn * dn; - node.px -= dx * k; - node.py -= dy * k; - } - } - return !quad.charge; - }; - } - force.tick = function() { - if ((alpha *= .99) < .005) { - event.end({ - type: "end", - alpha: alpha = 0 - }); - return true; - } - var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y; - for (i = 0; i < m; ++i) { - o = links[i]; - s = o.source; - t = o.target; - x = t.x - s.x; - y = t.y - s.y; - if (l = x * x + y * y) { - l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l; - x *= l; - y *= l; - t.x -= x * (k = s.weight / (t.weight + s.weight)); - t.y -= y * k; - s.x += x * (k = 1 - k); - s.y += y * k; - } - } - if (k = alpha * gravity) { - x = size[0] / 2; - y = size[1] / 2; - i = -1; - if (k) while (++i < n) { - o = nodes[i]; - o.x += (x - o.x) * k; - o.y += (y - o.y) * k; - } - } - if (charge) { - d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges); - i = -1; - while (++i < n) { - if (!(o = nodes[i]).fixed) { - q.visit(repulse(o)); - } - } - } - i = -1; - while (++i < n) { - o = nodes[i]; - if (o.fixed) { - o.x = o.px; - o.y = o.py; - } else { - o.x -= (o.px - (o.px = o.x)) * friction; - o.y -= (o.py - (o.py = o.y)) * friction; - } - } - event.tick({ - type: "tick", - alpha: alpha - }); - }; - force.nodes = function(x) { - if (!arguments.length) return nodes; - nodes = x; - return force; - }; - force.links = function(x) { - if (!arguments.length) return links; - links = x; - return force; - }; - force.size = function(x) { - if (!arguments.length) return size; - size = x; - return force; - }; - force.linkDistance = function(x) { - if (!arguments.length) return linkDistance; - linkDistance = d3_functor(x); - return force; - }; - force.distance = force.linkDistance; - force.linkStrength = function(x) { - if (!arguments.length) return linkStrength; - linkStrength = d3_functor(x); - return force; - }; - force.friction = function(x) { - if (!arguments.length) return friction; - friction = x; - return force; - }; - force.charge = function(x) { - if (!arguments.length) return charge; - charge = typeof x === "function" ? x : +x; - return force; - }; - force.gravity = function(x) { - if (!arguments.length) return gravity; - gravity = x; - return force; - }; - force.theta = function(x) { - if (!arguments.length) return theta; - theta = x; - return force; - }; - force.alpha = function(x) { - if (!arguments.length) return alpha; - if (alpha) { - if (x > 0) alpha = x; else alpha = 0; - } else if (x > 0) { - event.start({ - type: "start", - alpha: alpha = x - }); - d3.timer(force.tick); - } - return force; - }; - force.start = function() { - var i, j, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o; - for (i = 0; i < n; ++i) { - (o = nodes[i]).index = i; - o.weight = 0; - } - distances = []; - strengths = []; - for (i = 0; i < m; ++i) { - o = links[i]; - if (typeof o.source == "number") o.source = nodes[o.source]; - if (typeof o.target == "number") o.target = nodes[o.target]; - distances[i] = linkDistance.call(this, o, i); - strengths[i] = linkStrength.call(this, o, i); - ++o.source.weight; - ++o.target.weight; - } - for (i = 0; i < n; ++i) { - o = nodes[i]; - if (isNaN(o.x)) o.x = position("x", w); - if (isNaN(o.y)) o.y = position("y", h); - if (isNaN(o.px)) o.px = o.x; - if (isNaN(o.py)) o.py = o.y; - } - charges = []; - if (typeof charge === "function") { - for (i = 0; i < n; ++i) { - charges[i] = +charge.call(this, nodes[i], i); - } - } else { - for (i = 0; i < n; ++i) { - charges[i] = charge; - } - } - function position(dimension, size) { - var neighbors = neighbor(i), j = -1, m = neighbors.length, x; - while (++j < m) if (!isNaN(x = neighbors[j][dimension])) return x; - return Math.random() * size; - } - function neighbor() { - if (!neighbors) { - neighbors = []; - for (j = 0; j < n; ++j) { - neighbors[j] = []; - } - for (j = 0; j < m; ++j) { - var o = links[j]; - neighbors[o.source.index].push(o.target); - neighbors[o.target.index].push(o.source); - } - } - return neighbors[i]; - } - return force.resume(); - }; - force.resume = function() { - return force.alpha(.1); - }; - force.stop = function() { - return force.alpha(0); - }; - force.drag = function() { - if (!drag) drag = d3.behavior.drag().origin(d3_identity).on("dragstart", dragstart).on("drag", d3_layout_forceDrag).on("dragend", d3_layout_forceDragEnd); - this.on("mouseover.force", d3_layout_forceDragOver).on("mouseout.force", d3_layout_forceDragOut).call(drag); - }; - function dragstart(d) { - d3_layout_forceDragOver(d3_layout_forceDragNode = d); - d3_layout_forceDragForce = force; - } - return d3.rebind(force, event, "on"); - }; - var d3_layout_forceDragForce, d3_layout_forceDragNode; - function d3_layout_forceDragOver(d) { - d.fixed |= 2; - } - function d3_layout_forceDragOut(d) { - if (d !== d3_layout_forceDragNode) d.fixed &= 1; - } - function d3_layout_forceDragEnd() { - d3_layout_forceDragNode.fixed &= 1; - d3_layout_forceDragForce = d3_layout_forceDragNode = null; - } - function d3_layout_forceDrag() { - d3_layout_forceDragNode.px = d3.event.x; - d3_layout_forceDragNode.py = d3.event.y; - d3_layout_forceDragForce.resume(); - } - function d3_layout_forceAccumulate(quad, alpha, charges) { - var cx = 0, cy = 0; - quad.charge = 0; - if (!quad.leaf) { - var nodes = quad.nodes, n = nodes.length, i = -1, c; - while (++i < n) { - c = nodes[i]; - if (c == null) continue; - d3_layout_forceAccumulate(c, alpha, charges); - quad.charge += c.charge; - cx += c.charge * c.cx; - cy += c.charge * c.cy; - } - } - if (quad.point) { - if (!quad.leaf) { - quad.point.x += Math.random() - .5; - quad.point.y += Math.random() - .5; - } - var k = alpha * charges[quad.point.index]; - quad.charge += quad.pointCharge = k; - cx += k * quad.point.x; - cy += k * quad.point.y; - } - quad.cx = cx / quad.charge; - quad.cy = cy / quad.charge; - } - function d3_layout_forceLinkDistance(link) { - return 20; - } - function d3_layout_forceLinkStrength(link) { - return 1; - } - d3.layout.partition = function() { - var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ]; - function position(node, x, dx, dy) { - var children = node.children; - node.x = x; - node.y = node.depth * dy; - node.dx = dx; - node.dy = dy; - if (children && (n = children.length)) { - var i = -1, n, c, d; - dx = node.value ? dx / node.value : 0; - while (++i < n) { - position(c = children[i], x, d = c.value * dx, dy); - x += d; - } - } - } - function depth(node) { - var children = node.children, d = 0; - if (children && (n = children.length)) { - var i = -1, n; - while (++i < n) d = Math.max(d, depth(children[i])); - } - return 1 + d; - } - function partition(d, i) { - var nodes = hierarchy.call(this, d, i); - position(nodes[0], 0, size[0], size[1] / depth(nodes[0])); - return nodes; - } - partition.size = function(x) { - if (!arguments.length) return size; - size = x; - return partition; - }; - return d3_layout_hierarchyRebind(partition, hierarchy); - }; - d3.layout.pie = function() { - var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = 2 * Math.PI; - function pie(data, i) { - var values = data.map(function(d, i) { - return +value.call(pie, d, i); - }); - var a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle); - var k = ((typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - startAngle) / d3.sum(values); - var index = d3.range(data.length); - if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) { - return values[j] - values[i]; - } : function(i, j) { - return sort(data[i], data[j]); - }); - var arcs = []; - index.forEach(function(i) { - var d; - arcs[i] = { - data: data[i], - value: d = values[i], - startAngle: a, - endAngle: a += d * k - }; - }); - return arcs; - } - pie.value = function(x) { - if (!arguments.length) return value; - value = x; - return pie; - }; - pie.sort = function(x) { - if (!arguments.length) return sort; - sort = x; - return pie; - }; - pie.startAngle = function(x) { - if (!arguments.length) return startAngle; - startAngle = x; - return pie; - }; - pie.endAngle = function(x) { - if (!arguments.length) return endAngle; - endAngle = x; - return pie; - }; - return pie; - }; - var d3_layout_pieSortByValue = {}; - d3.layout.stack = function() { - var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY; - function stack(data, index) { - var series = data.map(function(d, i) { - return values.call(stack, d, i); - }); - var points = series.map(function(d, i) { - return d.map(function(v, i) { - return [ x.call(stack, v, i), y.call(stack, v, i) ]; - }); - }); - var orders = order.call(stack, points, index); - series = d3.permute(series, orders); - points = d3.permute(points, orders); - var offsets = offset.call(stack, points, index); - var n = series.length, m = series[0].length, i, j, o; - for (j = 0; j < m; ++j) { - out.call(stack, series[0][j], o = offsets[j], points[0][j][1]); - for (i = 1; i < n; ++i) { - out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]); - } - } - return data; - } - stack.values = function(x) { - if (!arguments.length) return values; - values = x; - return stack; - }; - stack.order = function(x) { - if (!arguments.length) return order; - order = typeof x === "function" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault; - return stack; - }; - stack.offset = function(x) { - if (!arguments.length) return offset; - offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero; - return stack; - }; - stack.x = function(z) { - if (!arguments.length) return x; - x = z; - return stack; - }; - stack.y = function(z) { - if (!arguments.length) return y; - y = z; - return stack; - }; - stack.out = function(z) { - if (!arguments.length) return out; - out = z; - return stack; - }; - return stack; - }; - function d3_layout_stackX(d) { - return d.x; - } - function d3_layout_stackY(d) { - return d.y; - } - function d3_layout_stackOut(d, y0, y) { - d.y0 = y0; - d.y = y; - } - var d3_layout_stackOrders = d3.map({ - "inside-out": function(data) { - var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) { - return max[a] - max[b]; - }), top = 0, bottom = 0, tops = [], bottoms = []; - for (i = 0; i < n; ++i) { - j = index[i]; - if (top < bottom) { - top += sums[j]; - tops.push(j); - } else { - bottom += sums[j]; - bottoms.push(j); - } - } - return bottoms.reverse().concat(tops); - }, - reverse: function(data) { - return d3.range(data.length).reverse(); - }, - "default": d3_layout_stackOrderDefault - }); - var d3_layout_stackOffsets = d3.map({ - silhouette: function(data) { - var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = []; - for (j = 0; j < m; ++j) { - for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; - if (o > max) max = o; - sums.push(o); - } - for (j = 0; j < m; ++j) { - y0[j] = (max - sums[j]) / 2; - } - return y0; - }, - wiggle: function(data) { - var n = data.length, x = data[0], m = x.length, max = 0, i, j, k, s1, s2, s3, dx, o, o0, y0 = []; - y0[0] = o = o0 = 0; - for (j = 1; j < m; ++j) { - for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1]; - for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) { - for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) { - s3 += (data[k][j][1] - data[k][j - 1][1]) / dx; - } - s2 += s3 * data[i][j][1]; - } - y0[j] = o -= s1 ? s2 / s1 * dx : 0; - if (o < o0) o0 = o; - } - for (j = 0; j < m; ++j) y0[j] -= o0; - return y0; - }, - expand: function(data) { - var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = []; - for (j = 0; j < m; ++j) { - for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; - if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k; - } - for (j = 0; j < m; ++j) y0[j] = 0; - return y0; - }, - zero: d3_layout_stackOffsetZero - }); - function d3_layout_stackOrderDefault(data) { - return d3.range(data.length); - } - function d3_layout_stackOffsetZero(data) { - var j = -1, m = data[0].length, y0 = []; - while (++j < m) y0[j] = 0; - return y0; - } - function d3_layout_stackMaxIndex(array) { - var i = 1, j = 0, v = array[0][1], k, n = array.length; - for (; i < n; ++i) { - if ((k = array[i][1]) > v) { - j = i; - v = k; - } - } - return j; - } - function d3_layout_stackReduceSum(d) { - return d.reduce(d3_layout_stackSum, 0); - } - function d3_layout_stackSum(p, d) { - return p + d[1]; - } - d3.layout.histogram = function() { - var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges; - function histogram(data, i) { - var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x; - while (++i < m) { - bin = bins[i] = []; - bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]); - bin.y = 0; - } - if (m > 0) { - i = -1; - while (++i < n) { - x = values[i]; - if (x >= range[0] && x <= range[1]) { - bin = bins[d3.bisect(thresholds, x, 1, m) - 1]; - bin.y += k; - bin.push(data[i]); - } - } - } - return bins; - } - histogram.value = function(x) { - if (!arguments.length) return valuer; - valuer = x; - return histogram; - }; - histogram.range = function(x) { - if (!arguments.length) return ranger; - ranger = d3_functor(x); - return histogram; - }; - histogram.bins = function(x) { - if (!arguments.length) return binner; - binner = typeof x === "number" ? function(range) { - return d3_layout_histogramBinFixed(range, x); - } : d3_functor(x); - return histogram; - }; - histogram.frequency = function(x) { - if (!arguments.length) return frequency; - frequency = !!x; - return histogram; - }; - return histogram; - }; - function d3_layout_histogramBinSturges(range, values) { - return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1)); - } - function d3_layout_histogramBinFixed(range, n) { - var x = -1, b = +range[0], m = (range[1] - b) / n, f = []; - while (++x <= n) f[x] = m * x + b; - return f; - } - function d3_layout_histogramRange(values) { - return [ d3.min(values), d3.max(values) ]; - } - d3.layout.hierarchy = function() { - var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue; - function recurse(data, depth, nodes) { - var childs = children.call(hierarchy, data, depth), node = d3_layout_hierarchyInline ? data : { - data: data - }; - node.depth = depth; - nodes.push(node); - if (childs && (n = childs.length)) { - var i = -1, n, c = node.children = [], v = 0, j = depth + 1, d; - while (++i < n) { - d = recurse(childs[i], j, nodes); - d.parent = node; - c.push(d); - v += d.value; - } - if (sort) c.sort(sort); - if (value) node.value = v; - } else if (value) { - node.value = +value.call(hierarchy, data, depth) || 0; - } - return node; - } - function revalue(node, depth) { - var children = node.children, v = 0; - if (children && (n = children.length)) { - var i = -1, n, j = depth + 1; - while (++i < n) v += revalue(children[i], j); - } else if (value) { - v = +value.call(hierarchy, d3_layout_hierarchyInline ? node : node.data, depth) || 0; - } - if (value) node.value = v; - return v; - } - function hierarchy(d) { - var nodes = []; - recurse(d, 0, nodes); - return nodes; - } - hierarchy.sort = function(x) { - if (!arguments.length) return sort; - sort = x; - return hierarchy; - }; - hierarchy.children = function(x) { - if (!arguments.length) return children; - children = x; - return hierarchy; - }; - hierarchy.value = function(x) { - if (!arguments.length) return value; - value = x; - return hierarchy; - }; - hierarchy.revalue = function(root) { - revalue(root, 0); - return root; - }; - return hierarchy; - }; - function d3_layout_hierarchyRebind(object, hierarchy) { - d3.rebind(object, hierarchy, "sort", "children", "value"); - object.links = d3_layout_hierarchyLinks; - object.nodes = function(d) { - d3_layout_hierarchyInline = true; - return (object.nodes = object)(d); - }; - return object; - } - function d3_layout_hierarchyChildren(d) { - return d.children; - } - function d3_layout_hierarchyValue(d) { - return d.value; - } - function d3_layout_hierarchySort(a, b) { - return b.value - a.value; - } - function d3_layout_hierarchyLinks(nodes) { - return d3.merge(nodes.map(function(parent) { - return (parent.children || []).map(function(child) { - return { - source: parent, - target: child - }; - }); - })); - } - var d3_layout_hierarchyInline = false; - d3.layout.pack = function() { - var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ]; - function pack(d, i) { - var nodes = hierarchy.call(this, d, i), root = nodes[0]; - root.x = 0; - root.y = 0; - d3_layout_treeVisitAfter(root, function(d) { - d.r = Math.sqrt(d.value); - }); - d3_layout_treeVisitAfter(root, d3_layout_packSiblings); - var w = size[0], h = size[1], k = Math.max(2 * root.r / w, 2 * root.r / h); - if (padding > 0) { - var dr = padding * k / 2; - d3_layout_treeVisitAfter(root, function(d) { - d.r += dr; - }); - d3_layout_treeVisitAfter(root, d3_layout_packSiblings); - d3_layout_treeVisitAfter(root, function(d) { - d.r -= dr; - }); - k = Math.max(2 * root.r / w, 2 * root.r / h); - } - d3_layout_packTransform(root, w / 2, h / 2, 1 / k); - return nodes; - } - pack.size = function(x) { - if (!arguments.length) return size; - size = x; - return pack; - }; - pack.padding = function(_) { - if (!arguments.length) return padding; - padding = +_; - return pack; - }; - return d3_layout_hierarchyRebind(pack, hierarchy); - }; - function d3_layout_packSort(a, b) { - return a.value - b.value; - } - function d3_layout_packInsert(a, b) { - var c = a._pack_next; - a._pack_next = b; - b._pack_prev = a; - b._pack_next = c; - c._pack_prev = b; - } - function d3_layout_packSplice(a, b) { - a._pack_next = b; - b._pack_prev = a; - } - function d3_layout_packIntersects(a, b) { - var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r; - return dr * dr - dx * dx - dy * dy > .001; - } - function d3_layout_packSiblings(node) { - if (!(nodes = node.children) || !(n = nodes.length)) return; - var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n; - function bound(node) { - xMin = Math.min(node.x - node.r, xMin); - xMax = Math.max(node.x + node.r, xMax); - yMin = Math.min(node.y - node.r, yMin); - yMax = Math.max(node.y + node.r, yMax); - } - nodes.forEach(d3_layout_packLink); - a = nodes[0]; - a.x = -a.r; - a.y = 0; - bound(a); - if (n > 1) { - b = nodes[1]; - b.x = b.r; - b.y = 0; - bound(b); - if (n > 2) { - c = nodes[2]; - d3_layout_packPlace(a, b, c); - bound(c); - d3_layout_packInsert(a, c); - a._pack_prev = c; - d3_layout_packInsert(c, b); - b = a._pack_next; - for (i = 3; i < n; i++) { - d3_layout_packPlace(a, b, c = nodes[i]); - var isect = 0, s1 = 1, s2 = 1; - for (j = b._pack_next; j !== b; j = j._pack_next, s1++) { - if (d3_layout_packIntersects(j, c)) { - isect = 1; - break; - } - } - if (isect == 1) { - for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) { - if (d3_layout_packIntersects(k, c)) { - break; - } - } - } - if (isect) { - if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b); - i--; - } else { - d3_layout_packInsert(a, c); - b = c; - bound(c); - } - } - } - } - var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0; - for (i = 0; i < n; i++) { - c = nodes[i]; - c.x -= cx; - c.y -= cy; - cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y)); - } - node.r = cr; - nodes.forEach(d3_layout_packUnlink); - } - function d3_layout_packLink(node) { - node._pack_next = node._pack_prev = node; - } - function d3_layout_packUnlink(node) { - delete node._pack_next; - delete node._pack_prev; - } - function d3_layout_packTransform(node, x, y, k) { - var children = node.children; - node.x = x += k * node.x; - node.y = y += k * node.y; - node.r *= k; - if (children) { - var i = -1, n = children.length; - while (++i < n) d3_layout_packTransform(children[i], x, y, k); - } - } - function d3_layout_packPlace(a, b, c) { - var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y; - if (db && (dx || dy)) { - var da = b.r + c.r, dc = dx * dx + dy * dy; - da *= da; - db *= db; - var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc); - c.x = a.x + x * dx + y * dy; - c.y = a.y + x * dy - y * dx; - } else { - c.x = a.x + db; - c.y = a.y; - } - } - d3.layout.cluster = function() { - var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ]; - function cluster(d, i) { - var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0, kx, ky; - d3_layout_treeVisitAfter(root, function(node) { - var children = node.children; - if (children && children.length) { - node.x = d3_layout_clusterX(children); - node.y = d3_layout_clusterY(children); - } else { - node.x = previousNode ? x += separation(node, previousNode) : 0; - node.y = 0; - previousNode = node; - } - }); - var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2; - d3_layout_treeVisitAfter(root, function(node) { - node.x = (node.x - x0) / (x1 - x0) * size[0]; - node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1]; - }); - return nodes; - } - cluster.separation = function(x) { - if (!arguments.length) return separation; - separation = x; - return cluster; - }; - cluster.size = function(x) { - if (!arguments.length) return size; - size = x; - return cluster; - }; - return d3_layout_hierarchyRebind(cluster, hierarchy); - }; - function d3_layout_clusterY(children) { - return 1 + d3.max(children, function(child) { - return child.y; - }); - } - function d3_layout_clusterX(children) { - return children.reduce(function(x, child) { - return x + child.x; - }, 0) / children.length; - } - function d3_layout_clusterLeft(node) { - var children = node.children; - return children && children.length ? d3_layout_clusterLeft(children[0]) : node; - } - function d3_layout_clusterRight(node) { - var children = node.children, n; - return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node; - } - d3.layout.tree = function() { - var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ]; - function tree(d, i) { - var nodes = hierarchy.call(this, d, i), root = nodes[0]; - function firstWalk(node, previousSibling) { - var children = node.children, layout = node._tree; - if (children && (n = children.length)) { - var n, firstChild = children[0], previousChild, ancestor = firstChild, child, i = -1; - while (++i < n) { - child = children[i]; - firstWalk(child, previousChild); - ancestor = apportion(child, previousChild, ancestor); - previousChild = child; - } - d3_layout_treeShift(node); - var midpoint = .5 * (firstChild._tree.prelim + child._tree.prelim); - if (previousSibling) { - layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling); - layout.mod = layout.prelim - midpoint; - } else { - layout.prelim = midpoint; - } - } else { - if (previousSibling) { - layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling); - } - } - } - function secondWalk(node, x) { - node.x = node._tree.prelim + x; - var children = node.children; - if (children && (n = children.length)) { - var i = -1, n; - x += node._tree.mod; - while (++i < n) { - secondWalk(children[i], x); - } - } - } - function apportion(node, previousSibling, ancestor) { - if (previousSibling) { - var vip = node, vop = node, vim = previousSibling, vom = node.parent.children[0], sip = vip._tree.mod, sop = vop._tree.mod, sim = vim._tree.mod, som = vom._tree.mod, shift; - while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) { - vom = d3_layout_treeLeft(vom); - vop = d3_layout_treeRight(vop); - vop._tree.ancestor = node; - shift = vim._tree.prelim + sim - vip._tree.prelim - sip + separation(vim, vip); - if (shift > 0) { - d3_layout_treeMove(d3_layout_treeAncestor(vim, node, ancestor), node, shift); - sip += shift; - sop += shift; - } - sim += vim._tree.mod; - sip += vip._tree.mod; - som += vom._tree.mod; - sop += vop._tree.mod; - } - if (vim && !d3_layout_treeRight(vop)) { - vop._tree.thread = vim; - vop._tree.mod += sim - sop; - } - if (vip && !d3_layout_treeLeft(vom)) { - vom._tree.thread = vip; - vom._tree.mod += sip - som; - ancestor = node; - } - } - return ancestor; - } - d3_layout_treeVisitAfter(root, function(node, previousSibling) { - node._tree = { - ancestor: node, - prelim: 0, - mod: 0, - change: 0, - shift: 0, - number: previousSibling ? previousSibling._tree.number + 1 : 0 - }; - }); - firstWalk(root); - secondWalk(root, -root._tree.prelim); - var left = d3_layout_treeSearch(root, d3_layout_treeLeftmost), right = d3_layout_treeSearch(root, d3_layout_treeRightmost), deep = d3_layout_treeSearch(root, d3_layout_treeDeepest), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2, y1 = deep.depth || 1; - d3_layout_treeVisitAfter(root, function(node) { - node.x = (node.x - x0) / (x1 - x0) * size[0]; - node.y = node.depth / y1 * size[1]; - delete node._tree; - }); - return nodes; - } - tree.separation = function(x) { - if (!arguments.length) return separation; - separation = x; - return tree; - }; - tree.size = function(x) { - if (!arguments.length) return size; - size = x; - return tree; - }; - return d3_layout_hierarchyRebind(tree, hierarchy); - }; - function d3_layout_treeSeparation(a, b) { - return a.parent == b.parent ? 1 : 2; - } - function d3_layout_treeLeft(node) { - var children = node.children; - return children && children.length ? children[0] : node._tree.thread; - } - function d3_layout_treeRight(node) { - var children = node.children, n; - return children && (n = children.length) ? children[n - 1] : node._tree.thread; - } - function d3_layout_treeSearch(node, compare) { - var children = node.children; - if (children && (n = children.length)) { - var child, n, i = -1; - while (++i < n) { - if (compare(child = d3_layout_treeSearch(children[i], compare), node) > 0) { - node = child; - } - } - } - return node; - } - function d3_layout_treeRightmost(a, b) { - return a.x - b.x; - } - function d3_layout_treeLeftmost(a, b) { - return b.x - a.x; - } - function d3_layout_treeDeepest(a, b) { - return a.depth - b.depth; - } - function d3_layout_treeVisitAfter(node, callback) { - function visit(node, previousSibling) { - var children = node.children; - if (children && (n = children.length)) { - var child, previousChild = null, i = -1, n; - while (++i < n) { - child = children[i]; - visit(child, previousChild); - previousChild = child; - } - } - callback(node, previousSibling); - } - visit(node, null); - } - function d3_layout_treeShift(node) { - var shift = 0, change = 0, children = node.children, i = children.length, child; - while (--i >= 0) { - child = children[i]._tree; - child.prelim += shift; - child.mod += shift; - shift += child.shift + (change += child.change); - } - } - function d3_layout_treeMove(ancestor, node, shift) { - ancestor = ancestor._tree; - node = node._tree; - var change = shift / (node.number - ancestor.number); - ancestor.change += change; - node.change -= change; - node.shift += shift; - node.prelim += shift; - node.mod += shift; - } - function d3_layout_treeAncestor(vim, node, ancestor) { - return vim._tree.ancestor.parent == node.parent ? vim._tree.ancestor : ancestor; - } - d3.layout.treemap = function() { - var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, ratio = .5 * (1 + Math.sqrt(5)); - function scale(children, k) { - var i = -1, n = children.length, child, area; - while (++i < n) { - area = (child = children[i]).value * (k < 0 ? 0 : k); - child.area = isNaN(area) || area <= 0 ? 0 : area; - } - } - function squarify(node) { - var children = node.children; - if (children && children.length) { - var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = Math.min(rect.dx, rect.dy), n; - scale(remaining, rect.dx * rect.dy / node.value); - row.area = 0; - while ((n = remaining.length) > 0) { - row.push(child = remaining[n - 1]); - row.area += child.area; - if ((score = worst(row, u)) <= best) { - remaining.pop(); - best = score; - } else { - row.area -= row.pop().area; - position(row, u, rect, false); - u = Math.min(rect.dx, rect.dy); - row.length = row.area = 0; - best = Infinity; - } - } - if (row.length) { - position(row, u, rect, true); - row.length = row.area = 0; - } - children.forEach(squarify); - } - } - function stickify(node) { - var children = node.children; - if (children && children.length) { - var rect = pad(node), remaining = children.slice(), child, row = []; - scale(remaining, rect.dx * rect.dy / node.value); - row.area = 0; - while (child = remaining.pop()) { - row.push(child); - row.area += child.area; - if (child.z != null) { - position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length); - row.length = row.area = 0; - } - } - children.forEach(stickify); - } - } - function worst(row, u) { - var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length; - while (++i < n) { - if (!(r = row[i].area)) continue; - if (r < rmin) rmin = r; - if (r > rmax) rmax = r; - } - s *= s; - u *= u; - return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity; - } - function position(row, u, rect, flush) { - var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o; - if (u == rect.dx) { - if (flush || v > rect.dy) v = rect.dy; - while (++i < n) { - o = row[i]; - o.x = x; - o.y = y; - o.dy = v; - x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0); - } - o.z = true; - o.dx += rect.x + rect.dx - x; - rect.y += v; - rect.dy -= v; - } else { - if (flush || v > rect.dx) v = rect.dx; - while (++i < n) { - o = row[i]; - o.x = x; - o.y = y; - o.dx = v; - y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0); - } - o.z = false; - o.dy += rect.y + rect.dy - y; - rect.x += v; - rect.dx -= v; - } - } - function treemap(d) { - var nodes = stickies || hierarchy(d), root = nodes[0]; - root.x = 0; - root.y = 0; - root.dx = size[0]; - root.dy = size[1]; - if (stickies) hierarchy.revalue(root); - scale([ root ], root.dx * root.dy / root.value); - (stickies ? stickify : squarify)(root); - if (sticky) stickies = nodes; - return nodes; - } - treemap.size = function(x) { - if (!arguments.length) return size; - size = x; - return treemap; - }; - treemap.padding = function(x) { - if (!arguments.length) return padding; - function padFunction(node) { - var p = x.call(treemap, node, node.depth); - return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === "number" ? [ p, p, p, p ] : p); - } - function padConstant(node) { - return d3_layout_treemapPad(node, x); - } - var type; - pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [ x, x, x, x ], padConstant) : padConstant; - return treemap; - }; - treemap.round = function(x) { - if (!arguments.length) return round != Number; - round = x ? Math.round : Number; - return treemap; - }; - treemap.sticky = function(x) { - if (!arguments.length) return sticky; - sticky = x; - stickies = null; - return treemap; - }; - treemap.ratio = function(x) { - if (!arguments.length) return ratio; - ratio = x; - return treemap; - }; - return d3_layout_hierarchyRebind(treemap, hierarchy); - }; - function d3_layout_treemapPadNull(node) { - return { - x: node.x, - y: node.y, - dx: node.dx, - dy: node.dy - }; - } - function d3_layout_treemapPad(node, padding) { - var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2]; - if (dx < 0) { - x += dx / 2; - dx = 0; - } - if (dy < 0) { - y += dy / 2; - dy = 0; - } - return { - x: x, - y: y, - dx: dx, - dy: dy - }; - } - function d3_dsv(delimiter, mimeType) { - var reParse = new RegExp("\r\n|[" + delimiter + "\r\n]", "g"), reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0); - function dsv(url, callback) { - d3.text(url, mimeType, function(text) { - callback(text && dsv.parse(text)); - }); - } - dsv.parse = function(text) { - var header; - return dsv.parseRows(text, function(row, i) { - if (i) { - var o = {}, j = -1, m = header.length; - while (++j < m) o[header[j]] = row[j]; - return o; - } else { - header = row; - return null; - } - }); - }; - dsv.parseRows = function(text, f) { - var EOL = {}, EOF = {}, rows = [], n = 0, t, eol; - reParse.lastIndex = 0; - function token() { - if (reParse.lastIndex >= text.length) return EOF; - if (eol) { - eol = false; - return EOL; - } - var j = reParse.lastIndex; - if (text.charCodeAt(j) === 34) { - var i = j; - while (i++ < text.length) { - if (text.charCodeAt(i) === 34) { - if (text.charCodeAt(i + 1) !== 34) break; - i++; - } - } - reParse.lastIndex = i + 2; - var c = text.charCodeAt(i + 1); - if (c === 13) { - eol = true; - if (text.charCodeAt(i + 2) === 10) reParse.lastIndex++; - } else if (c === 10) { - eol = true; - } - return text.substring(j + 1, i).replace(/""/g, '"'); - } - var m = reParse.exec(text); - if (m) { - eol = m[0].charCodeAt(0) !== delimiterCode; - return text.substring(j, m.index); - } - reParse.lastIndex = text.length; - return text.substring(j); - } - while ((t = token()) !== EOF) { - var a = []; - while (t !== EOL && t !== EOF) { - a.push(t); - t = token(); - } - if (f && !(a = f(a, n++))) continue; - rows.push(a); - } - return rows; - }; - dsv.format = function(rows) { - return rows.map(formatRow).join("\n"); - }; - function formatRow(row) { - return row.map(formatValue).join(delimiter); - } - function formatValue(text) { - return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text; - } - return dsv; - } - d3.csv = d3_dsv(",", "text/csv"); - d3.tsv = d3_dsv("\t", "text/tab-separated-values"); - d3.geo = {}; - var d3_geo_radians = Math.PI / 180; - d3.geo.azimuthal = function() { - var mode = "orthographic", origin, scale = 200, translate = [ 480, 250 ], x0, y0, cy0, sy0; - function azimuthal(coordinates) { - var x1 = coordinates[0] * d3_geo_radians - x0, y1 = coordinates[1] * d3_geo_radians, cx1 = Math.cos(x1), sx1 = Math.sin(x1), cy1 = Math.cos(y1), sy1 = Math.sin(y1), cc = mode !== "orthographic" ? sy0 * sy1 + cy0 * cy1 * cx1 : null, c, k = mode === "stereographic" ? 1 / (1 + cc) : mode === "gnomonic" ? 1 / cc : mode === "equidistant" ? (c = Math.acos(cc), c ? c / Math.sin(c) : 0) : mode === "equalarea" ? Math.sqrt(2 / (1 + cc)) : 1, x = k * cy1 * sx1, y = k * (sy0 * cy1 * cx1 - cy0 * sy1); - return [ scale * x + translate[0], scale * y + translate[1] ]; - } - azimuthal.invert = function(coordinates) { - var x = (coordinates[0] - translate[0]) / scale, y = (coordinates[1] - translate[1]) / scale, p = Math.sqrt(x * x + y * y), c = mode === "stereographic" ? 2 * Math.atan(p) : mode === "gnomonic" ? Math.atan(p) : mode === "equidistant" ? p : mode === "equalarea" ? 2 * Math.asin(.5 * p) : Math.asin(p), sc = Math.sin(c), cc = Math.cos(c); - return [ (x0 + Math.atan2(x * sc, p * cy0 * cc + y * sy0 * sc)) / d3_geo_radians, Math.asin(cc * sy0 - (p ? y * sc * cy0 / p : 0)) / d3_geo_radians ]; - }; - azimuthal.mode = function(x) { - if (!arguments.length) return mode; - mode = x + ""; - return azimuthal; - }; - azimuthal.origin = function(x) { - if (!arguments.length) return origin; - origin = x; - x0 = origin[0] * d3_geo_radians; - y0 = origin[1] * d3_geo_radians; - cy0 = Math.cos(y0); - sy0 = Math.sin(y0); - return azimuthal; - }; - azimuthal.scale = function(x) { - if (!arguments.length) return scale; - scale = +x; - return azimuthal; - }; - azimuthal.translate = function(x) { - if (!arguments.length) return translate; - translate = [ +x[0], +x[1] ]; - return azimuthal; - }; - return azimuthal.origin([ 0, 0 ]); - }; - d3.geo.albers = function() { - var origin = [ -98, 38 ], parallels = [ 29.5, 45.5 ], scale = 1e3, translate = [ 480, 250 ], lng0, n, C, p0; - function albers(coordinates) { - var t = n * (d3_geo_radians * coordinates[0] - lng0), p = Math.sqrt(C - 2 * n * Math.sin(d3_geo_radians * coordinates[1])) / n; - return [ scale * p * Math.sin(t) + translate[0], scale * (p * Math.cos(t) - p0) + translate[1] ]; - } - albers.invert = function(coordinates) { - var x = (coordinates[0] - translate[0]) / scale, y = (coordinates[1] - translate[1]) / scale, p0y = p0 + y, t = Math.atan2(x, p0y), p = Math.sqrt(x * x + p0y * p0y); - return [ (lng0 + t / n) / d3_geo_radians, Math.asin((C - p * p * n * n) / (2 * n)) / d3_geo_radians ]; - }; - function reload() { - var phi1 = d3_geo_radians * parallels[0], phi2 = d3_geo_radians * parallels[1], lat0 = d3_geo_radians * origin[1], s = Math.sin(phi1), c = Math.cos(phi1); - lng0 = d3_geo_radians * origin[0]; - n = .5 * (s + Math.sin(phi2)); - C = c * c + 2 * n * s; - p0 = Math.sqrt(C - 2 * n * Math.sin(lat0)) / n; - return albers; - } - albers.origin = function(x) { - if (!arguments.length) return origin; - origin = [ +x[0], +x[1] ]; - return reload(); - }; - albers.parallels = function(x) { - if (!arguments.length) return parallels; - parallels = [ +x[0], +x[1] ]; - return reload(); - }; - albers.scale = function(x) { - if (!arguments.length) return scale; - scale = +x; - return albers; - }; - albers.translate = function(x) { - if (!arguments.length) return translate; - translate = [ +x[0], +x[1] ]; - return albers; - }; - return reload(); - }; - d3.geo.albersUsa = function() { - var lower48 = d3.geo.albers(); - var alaska = d3.geo.albers().origin([ -160, 60 ]).parallels([ 55, 65 ]); - var hawaii = d3.geo.albers().origin([ -160, 20 ]).parallels([ 8, 18 ]); - var puertoRico = d3.geo.albers().origin([ -60, 10 ]).parallels([ 8, 18 ]); - function albersUsa(coordinates) { - var lon = coordinates[0], lat = coordinates[1]; - return (lat > 50 ? alaska : lon < -140 ? hawaii : lat < 21 ? puertoRico : lower48)(coordinates); - } - albersUsa.scale = function(x) { - if (!arguments.length) return lower48.scale(); - lower48.scale(x); - alaska.scale(x * .6); - hawaii.scale(x); - puertoRico.scale(x * 1.5); - return albersUsa.translate(lower48.translate()); - }; - albersUsa.translate = function(x) { - if (!arguments.length) return lower48.translate(); - var dz = lower48.scale() / 1e3, dx = x[0], dy = x[1]; - lower48.translate(x); - alaska.translate([ dx - 400 * dz, dy + 170 * dz ]); - hawaii.translate([ dx - 190 * dz, dy + 200 * dz ]); - puertoRico.translate([ dx + 580 * dz, dy + 430 * dz ]); - return albersUsa; - }; - return albersUsa.scale(lower48.scale()); - }; - d3.geo.bonne = function() { - var scale = 200, translate = [ 480, 250 ], x0, y0, y1, c1; - function bonne(coordinates) { - var x = coordinates[0] * d3_geo_radians - x0, y = coordinates[1] * d3_geo_radians - y0; - if (y1) { - var p = c1 + y1 - y, E = x * Math.cos(y) / p; - x = p * Math.sin(E); - y = p * Math.cos(E) - c1; - } else { - x *= Math.cos(y); - y *= -1; - } - return [ scale * x + translate[0], scale * y + translate[1] ]; - } - bonne.invert = function(coordinates) { - var x = (coordinates[0] - translate[0]) / scale, y = (coordinates[1] - translate[1]) / scale; - if (y1) { - var c = c1 + y, p = Math.sqrt(x * x + c * c); - y = c1 + y1 - p; - x = x0 + p * Math.atan2(x, c) / Math.cos(y); - } else { - y *= -1; - x /= Math.cos(y); - } - return [ x / d3_geo_radians, y / d3_geo_radians ]; - }; - bonne.parallel = function(x) { - if (!arguments.length) return y1 / d3_geo_radians; - c1 = 1 / Math.tan(y1 = x * d3_geo_radians); - return bonne; - }; - bonne.origin = function(x) { - if (!arguments.length) return [ x0 / d3_geo_radians, y0 / d3_geo_radians ]; - x0 = x[0] * d3_geo_radians; - y0 = x[1] * d3_geo_radians; - return bonne; - }; - bonne.scale = function(x) { - if (!arguments.length) return scale; - scale = +x; - return bonne; - }; - bonne.translate = function(x) { - if (!arguments.length) return translate; - translate = [ +x[0], +x[1] ]; - return bonne; - }; - return bonne.origin([ 0, 0 ]).parallel(45); - }; - d3.geo.equirectangular = function() { - var scale = 500, translate = [ 480, 250 ]; - function equirectangular(coordinates) { - var x = coordinates[0] / 360, y = -coordinates[1] / 360; - return [ scale * x + translate[0], scale * y + translate[1] ]; - } - equirectangular.invert = function(coordinates) { - var x = (coordinates[0] - translate[0]) / scale, y = (coordinates[1] - translate[1]) / scale; - return [ 360 * x, -360 * y ]; - }; - equirectangular.scale = function(x) { - if (!arguments.length) return scale; - scale = +x; - return equirectangular; - }; - equirectangular.translate = function(x) { - if (!arguments.length) return translate; - translate = [ +x[0], +x[1] ]; - return equirectangular; - }; - return equirectangular; - }; - d3.geo.mercator = function() { - var scale = 500, translate = [ 480, 250 ]; - function mercator(coordinates) { - var x = coordinates[0] / 360, y = -(Math.log(Math.tan(Math.PI / 4 + coordinates[1] * d3_geo_radians / 2)) / d3_geo_radians) / 360; - return [ scale * x + translate[0], scale * Math.max(-.5, Math.min(.5, y)) + translate[1] ]; - } - mercator.invert = function(coordinates) { - var x = (coordinates[0] - translate[0]) / scale, y = (coordinates[1] - translate[1]) / scale; - return [ 360 * x, 2 * Math.atan(Math.exp(-360 * y * d3_geo_radians)) / d3_geo_radians - 90 ]; - }; - mercator.scale = function(x) { - if (!arguments.length) return scale; - scale = +x; - return mercator; - }; - mercator.translate = function(x) { - if (!arguments.length) return translate; - translate = [ +x[0], +x[1] ]; - return mercator; - }; - return mercator; - }; - function d3_geo_type(types, defaultValue) { - return function(object) { - return object && types.hasOwnProperty(object.type) ? types[object.type](object) : defaultValue; - }; - } - d3.geo.path = function() { - var pointRadius = 4.5, pointCircle = d3_path_circle(pointRadius), projection = d3.geo.albersUsa(), buffer = []; - function path(d, i) { - if (typeof pointRadius === "function") pointCircle = d3_path_circle(pointRadius.apply(this, arguments)); - pathType(d); - var result = buffer.length ? buffer.join("") : null; - buffer = []; - return result; - } - function project(coordinates) { - return projection(coordinates).join(","); - } - var pathType = d3_geo_type({ - FeatureCollection: function(o) { - var features = o.features, i = -1, n = features.length; - while (++i < n) buffer.push(pathType(features[i].geometry)); - }, - Feature: function(o) { - pathType(o.geometry); - }, - Point: function(o) { - buffer.push("M", project(o.coordinates), pointCircle); - }, - MultiPoint: function(o) { - var coordinates = o.coordinates, i = -1, n = coordinates.length; - while (++i < n) buffer.push("M", project(coordinates[i]), pointCircle); - }, - LineString: function(o) { - var coordinates = o.coordinates, i = -1, n = coordinates.length; - buffer.push("M"); - while (++i < n) buffer.push(project(coordinates[i]), "L"); - buffer.pop(); - }, - MultiLineString: function(o) { - var coordinates = o.coordinates, i = -1, n = coordinates.length, subcoordinates, j, m; - while (++i < n) { - subcoordinates = coordinates[i]; - j = -1; - m = subcoordinates.length; - buffer.push("M"); - while (++j < m) buffer.push(project(subcoordinates[j]), "L"); - buffer.pop(); - } - }, - Polygon: function(o) { - var coordinates = o.coordinates, i = -1, n = coordinates.length, subcoordinates, j, m; - while (++i < n) { - subcoordinates = coordinates[i]; - j = -1; - if ((m = subcoordinates.length - 1) > 0) { - buffer.push("M"); - while (++j < m) buffer.push(project(subcoordinates[j]), "L"); - buffer[buffer.length - 1] = "Z"; - } - } - }, - MultiPolygon: function(o) { - var coordinates = o.coordinates, i = -1, n = coordinates.length, subcoordinates, j, m, subsubcoordinates, k, p; - while (++i < n) { - subcoordinates = coordinates[i]; - j = -1; - m = subcoordinates.length; - while (++j < m) { - subsubcoordinates = subcoordinates[j]; - k = -1; - if ((p = subsubcoordinates.length - 1) > 0) { - buffer.push("M"); - while (++k < p) buffer.push(project(subsubcoordinates[k]), "L"); - buffer[buffer.length - 1] = "Z"; - } - } - } - }, - GeometryCollection: function(o) { - var geometries = o.geometries, i = -1, n = geometries.length; - while (++i < n) buffer.push(pathType(geometries[i])); - } - }); - var areaType = path.area = d3_geo_type({ - FeatureCollection: function(o) { - var area = 0, features = o.features, i = -1, n = features.length; - while (++i < n) area += areaType(features[i]); - return area; - }, - Feature: function(o) { - return areaType(o.geometry); - }, - Polygon: function(o) { - return polygonArea(o.coordinates); - }, - MultiPolygon: function(o) { - var sum = 0, coordinates = o.coordinates, i = -1, n = coordinates.length; - while (++i < n) sum += polygonArea(coordinates[i]); - return sum; - }, - GeometryCollection: function(o) { - var sum = 0, geometries = o.geometries, i = -1, n = geometries.length; - while (++i < n) sum += areaType(geometries[i]); - return sum; - } - }, 0); - function polygonArea(coordinates) { - var sum = area(coordinates[0]), i = 0, n = coordinates.length; - while (++i < n) sum -= area(coordinates[i]); - return sum; - } - function polygonCentroid(coordinates) { - var polygon = d3.geom.polygon(coordinates[0].map(projection)), area = polygon.area(), centroid = polygon.centroid(area < 0 ? (area *= -1, 1) : -1), x = centroid[0], y = centroid[1], z = area, i = 0, n = coordinates.length; - while (++i < n) { - polygon = d3.geom.polygon(coordinates[i].map(projection)); - area = polygon.area(); - centroid = polygon.centroid(area < 0 ? (area *= -1, 1) : -1); - x -= centroid[0]; - y -= centroid[1]; - z -= area; - } - return [ x, y, 6 * z ]; - } - var centroidType = path.centroid = d3_geo_type({ - Feature: function(o) { - return centroidType(o.geometry); - }, - Polygon: function(o) { - var centroid = polygonCentroid(o.coordinates); - return [ centroid[0] / centroid[2], centroid[1] / centroid[2] ]; - }, - MultiPolygon: function(o) { - var area = 0, coordinates = o.coordinates, centroid, x = 0, y = 0, z = 0, i = -1, n = coordinates.length; - while (++i < n) { - centroid = polygonCentroid(coordinates[i]); - x += centroid[0]; - y += centroid[1]; - z += centroid[2]; - } - return [ x / z, y / z ]; - } - }); - function area(coordinates) { - return Math.abs(d3.geom.polygon(coordinates.map(projection)).area()); - } - path.projection = function(x) { - projection = x; - return path; - }; - path.pointRadius = function(x) { - if (typeof x === "function") pointRadius = x; else { - pointRadius = +x; - pointCircle = d3_path_circle(pointRadius); - } - return path; - }; - return path; - }; - function d3_path_circle(radius) { - return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + +2 * radius + "z"; - } - d3.geo.bounds = function(feature) { - var left = Infinity, bottom = Infinity, right = -Infinity, top = -Infinity; - d3_geo_bounds(feature, function(x, y) { - if (x < left) left = x; - if (x > right) right = x; - if (y < bottom) bottom = y; - if (y > top) top = y; - }); - return [ [ left, bottom ], [ right, top ] ]; - }; - function d3_geo_bounds(o, f) { - if (d3_geo_boundsTypes.hasOwnProperty(o.type)) d3_geo_boundsTypes[o.type](o, f); - } - var d3_geo_boundsTypes = { - Feature: d3_geo_boundsFeature, - FeatureCollection: d3_geo_boundsFeatureCollection, - GeometryCollection: d3_geo_boundsGeometryCollection, - LineString: d3_geo_boundsLineString, - MultiLineString: d3_geo_boundsMultiLineString, - MultiPoint: d3_geo_boundsLineString, - MultiPolygon: d3_geo_boundsMultiPolygon, - Point: d3_geo_boundsPoint, - Polygon: d3_geo_boundsPolygon - }; - function d3_geo_boundsFeature(o, f) { - d3_geo_bounds(o.geometry, f); - } - function d3_geo_boundsFeatureCollection(o, f) { - for (var a = o.features, i = 0, n = a.length; i < n; i++) { - d3_geo_bounds(a[i].geometry, f); - } - } - function d3_geo_boundsGeometryCollection(o, f) { - for (var a = o.geometries, i = 0, n = a.length; i < n; i++) { - d3_geo_bounds(a[i], f); - } - } - function d3_geo_boundsLineString(o, f) { - for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) { - f.apply(null, a[i]); - } - } - function d3_geo_boundsMultiLineString(o, f) { - for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) { - for (var b = a[i], j = 0, m = b.length; j < m; j++) { - f.apply(null, b[j]); - } - } - } - function d3_geo_boundsMultiPolygon(o, f) { - for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) { - for (var b = a[i][0], j = 0, m = b.length; j < m; j++) { - f.apply(null, b[j]); - } - } - } - function d3_geo_boundsPoint(o, f) { - f.apply(null, o.coordinates); - } - function d3_geo_boundsPolygon(o, f) { - for (var a = o.coordinates[0], i = 0, n = a.length; i < n; i++) { - f.apply(null, a[i]); - } - } - d3.geo.circle = function() { - var origin = [ 0, 0 ], degrees = 90 - .01, radians = degrees * d3_geo_radians, arc = d3.geo.greatArc().source(origin).target(d3_identity); - function circle() {} - function visible(point) { - return arc.distance(point) < radians; - } - circle.clip = function(d) { - if (typeof origin === "function") arc.source(origin.apply(this, arguments)); - return clipType(d) || null; - }; - var clipType = d3_geo_type({ - FeatureCollection: function(o) { - var features = o.features.map(clipType).filter(d3_identity); - return features && (o = Object.create(o), o.features = features, o); - }, - Feature: function(o) { - var geometry = clipType(o.geometry); - return geometry && (o = Object.create(o), o.geometry = geometry, o); - }, - Point: function(o) { - return visible(o.coordinates) && o; - }, - MultiPoint: function(o) { - var coordinates = o.coordinates.filter(visible); - return coordinates.length && { - type: o.type, - coordinates: coordinates - }; - }, - LineString: function(o) { - var coordinates = clip(o.coordinates); - return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o); - }, - MultiLineString: function(o) { - var coordinates = o.coordinates.map(clip).filter(function(d) { - return d.length; - }); - return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o); - }, - Polygon: function(o) { - var coordinates = o.coordinates.map(clip); - return coordinates[0].length && (o = Object.create(o), o.coordinates = coordinates, o); - }, - MultiPolygon: function(o) { - var coordinates = o.coordinates.map(function(d) { - return d.map(clip); - }).filter(function(d) { - return d[0].length; - }); - return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o); - }, - GeometryCollection: function(o) { - var geometries = o.geometries.map(clipType).filter(d3_identity); - return geometries.length && (o = Object.create(o), o.geometries = geometries, o); - } - }); - function clip(coordinates) { - var i = -1, n = coordinates.length, clipped = [], p0, p1, p2, d0, d1; - while (++i < n) { - d1 = arc.distance(p2 = coordinates[i]); - if (d1 < radians) { - if (p1) clipped.push(d3_geo_greatArcInterpolate(p1, p2)((d0 - radians) / (d0 - d1))); - clipped.push(p2); - p0 = p1 = null; - } else { - p1 = p2; - if (!p0 && clipped.length) { - clipped.push(d3_geo_greatArcInterpolate(clipped[clipped.length - 1], p1)((radians - d0) / (d1 - d0))); - p0 = p1; - } - } - d0 = d1; - } - p0 = coordinates[0]; - p1 = clipped[0]; - if (p1 && p2[0] === p0[0] && p2[1] === p0[1] && !(p2[0] === p1[0] && p2[1] === p1[1])) { - clipped.push(p1); - } - return resample(clipped); - } - function resample(coordinates) { - var i = 0, n = coordinates.length, j, m, resampled = n ? [ coordinates[0] ] : coordinates, resamples, origin = arc.source(); - while (++i < n) { - resamples = arc.source(coordinates[i - 1])(coordinates[i]).coordinates; - for (j = 0, m = resamples.length; ++j < m; ) resampled.push(resamples[j]); - } - arc.source(origin); - return resampled; - } - circle.origin = function(x) { - if (!arguments.length) return origin; - origin = x; - if (typeof origin !== "function") arc.source(origin); - return circle; - }; - circle.angle = function(x) { - if (!arguments.length) return degrees; - radians = (degrees = +x) * d3_geo_radians; - return circle; - }; - return d3.rebind(circle, arc, "precision"); - }; - d3.geo.greatArc = function() { - var source = d3_geo_greatArcSource, p0, target = d3_geo_greatArcTarget, p1, precision = 6 * d3_geo_radians, interpolate = d3_geo_greatArcInterpolator(); - function greatArc() { - var d = greatArc.distance.apply(this, arguments), t = 0, dt = precision / d, coordinates = [ p0 ]; - while ((t += dt) < 1) coordinates.push(interpolate(t)); - coordinates.push(p1); - return { - type: "LineString", - coordinates: coordinates - }; - } - greatArc.distance = function() { - if (typeof source === "function") interpolate.source(p0 = source.apply(this, arguments)); - if (typeof target === "function") interpolate.target(p1 = target.apply(this, arguments)); - return interpolate.distance(); - }; - greatArc.source = function(_) { - if (!arguments.length) return source; - source = _; - if (typeof source !== "function") interpolate.source(p0 = source); - return greatArc; - }; - greatArc.target = function(_) { - if (!arguments.length) return target; - target = _; - if (typeof target !== "function") interpolate.target(p1 = target); - return greatArc; - }; - greatArc.precision = function(_) { - if (!arguments.length) return precision / d3_geo_radians; - precision = _ * d3_geo_radians; - return greatArc; - }; - return greatArc; - }; - function d3_geo_greatArcSource(d) { - return d.source; - } - function d3_geo_greatArcTarget(d) { - return d.target; - } - function d3_geo_greatArcInterpolator() { - var x0, y0, cy0, sy0, kx0, ky0, x1, y1, cy1, sy1, kx1, ky1, d, k; - function interpolate(t) { - var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1; - return [ Math.atan2(y, x) / d3_geo_radians, Math.atan2(z, Math.sqrt(x * x + y * y)) / d3_geo_radians ]; - } - interpolate.distance = function() { - if (d == null) k = 1 / Math.sin(d = Math.acos(Math.max(-1, Math.min(1, sy0 * sy1 + cy0 * cy1 * Math.cos(x1 - x0))))); - return d; - }; - interpolate.source = function(_) { - var cx0 = Math.cos(x0 = _[0] * d3_geo_radians), sx0 = Math.sin(x0); - cy0 = Math.cos(y0 = _[1] * d3_geo_radians); - sy0 = Math.sin(y0); - kx0 = cy0 * cx0; - ky0 = cy0 * sx0; - d = null; - return interpolate; - }; - interpolate.target = function(_) { - var cx1 = Math.cos(x1 = _[0] * d3_geo_radians), sx1 = Math.sin(x1); - cy1 = Math.cos(y1 = _[1] * d3_geo_radians); - sy1 = Math.sin(y1); - kx1 = cy1 * cx1; - ky1 = cy1 * sx1; - d = null; - return interpolate; - }; - return interpolate; - } - function d3_geo_greatArcInterpolate(a, b) { - var i = d3_geo_greatArcInterpolator().source(a).target(b); - i.distance(); - return i; - } - d3.geo.greatCircle = d3.geo.circle; - d3.geom = {}; - d3.geom.contour = function(grid, start) { - var s = start || d3_geom_contourStart(grid), c = [], x = s[0], y = s[1], dx = 0, dy = 0, pdx = NaN, pdy = NaN, i = 0; - do { - i = 0; - if (grid(x - 1, y - 1)) i += 1; - if (grid(x, y - 1)) i += 2; - if (grid(x - 1, y)) i += 4; - if (grid(x, y)) i += 8; - if (i === 6) { - dx = pdy === -1 ? -1 : 1; - dy = 0; - } else if (i === 9) { - dx = 0; - dy = pdx === 1 ? -1 : 1; - } else { - dx = d3_geom_contourDx[i]; - dy = d3_geom_contourDy[i]; - } - if (dx != pdx && dy != pdy) { - c.push([ x, y ]); - pdx = dx; - pdy = dy; - } - x += dx; - y += dy; - } while (s[0] != x || s[1] != y); - return c; - }; - var d3_geom_contourDx = [ 1, 0, 1, 1, -1, 0, -1, 1, 0, 0, 0, 0, -1, 0, -1, NaN ], d3_geom_contourDy = [ 0, -1, 0, 0, 0, -1, 0, 0, 1, -1, 1, 1, 0, -1, 0, NaN ]; - function d3_geom_contourStart(grid) { - var x = 0, y = 0; - while (true) { - if (grid(x, y)) { - return [ x, y ]; - } - if (x === 0) { - x = y + 1; - y = 0; - } else { - x = x - 1; - y = y + 1; - } - } - } - d3.geom.hull = function(vertices) { - if (vertices.length < 3) return []; - var len = vertices.length, plen = len - 1, points = [], stack = [], i, j, h = 0, x1, y1, x2, y2, u, v, a, sp; - for (i = 1; i < len; ++i) { - if (vertices[i][1] < vertices[h][1]) { - h = i; - } else if (vertices[i][1] == vertices[h][1]) { - h = vertices[i][0] < vertices[h][0] ? i : h; - } - } - for (i = 0; i < len; ++i) { - if (i === h) continue; - y1 = vertices[i][1] - vertices[h][1]; - x1 = vertices[i][0] - vertices[h][0]; - points.push({ - angle: Math.atan2(y1, x1), - index: i - }); - } - points.sort(function(a, b) { - return a.angle - b.angle; - }); - a = points[0].angle; - v = points[0].index; - u = 0; - for (i = 1; i < plen; ++i) { - j = points[i].index; - if (a == points[i].angle) { - x1 = vertices[v][0] - vertices[h][0]; - y1 = vertices[v][1] - vertices[h][1]; - x2 = vertices[j][0] - vertices[h][0]; - y2 = vertices[j][1] - vertices[h][1]; - if (x1 * x1 + y1 * y1 >= x2 * x2 + y2 * y2) { - points[i].index = -1; - } else { - points[u].index = -1; - a = points[i].angle; - u = i; - v = j; - } - } else { - a = points[i].angle; - u = i; - v = j; - } - } - stack.push(h); - for (i = 0, j = 0; i < 2; ++j) { - if (points[j].index !== -1) { - stack.push(points[j].index); - i++; - } - } - sp = stack.length; - for (; j < plen; ++j) { - if (points[j].index === -1) continue; - while (!d3_geom_hullCCW(stack[sp - 2], stack[sp - 1], points[j].index, vertices)) { - --sp; - } - stack[sp++] = points[j].index; - } - var poly = []; - for (i = 0; i < sp; ++i) { - poly.push(vertices[stack[i]]); - } - return poly; - }; - function d3_geom_hullCCW(i1, i2, i3, v) { - var t, a, b, c, d, e, f; - t = v[i1]; - a = t[0]; - b = t[1]; - t = v[i2]; - c = t[0]; - d = t[1]; - t = v[i3]; - e = t[0]; - f = t[1]; - return (f - b) * (c - a) - (d - b) * (e - a) > 0; - } - d3.geom.polygon = function(coordinates) { - coordinates.area = function() { - var i = 0, n = coordinates.length, a = coordinates[n - 1][0] * coordinates[0][1], b = coordinates[n - 1][1] * coordinates[0][0]; - while (++i < n) { - a += coordinates[i - 1][0] * coordinates[i][1]; - b += coordinates[i - 1][1] * coordinates[i][0]; - } - return (b - a) * .5; - }; - coordinates.centroid = function(k) { - var i = -1, n = coordinates.length, x = 0, y = 0, a, b = coordinates[n - 1], c; - if (!arguments.length) k = -1 / (6 * coordinates.area()); - while (++i < n) { - a = b; - b = coordinates[i]; - c = a[0] * b[1] - b[0] * a[1]; - x += (a[0] + b[0]) * c; - y += (a[1] + b[1]) * c; - } - return [ x * k, y * k ]; - }; - coordinates.clip = function(subject) { - var input, i = -1, n = coordinates.length, j, m, a = coordinates[n - 1], b, c, d; - while (++i < n) { - input = subject.slice(); - subject.length = 0; - b = coordinates[i]; - c = input[(m = input.length) - 1]; - j = -1; - while (++j < m) { - d = input[j]; - if (d3_geom_polygonInside(d, a, b)) { - if (!d3_geom_polygonInside(c, a, b)) { - subject.push(d3_geom_polygonIntersect(c, d, a, b)); - } - subject.push(d); - } else if (d3_geom_polygonInside(c, a, b)) { - subject.push(d3_geom_polygonIntersect(c, d, a, b)); - } - c = d; - } - a = b; - } - return subject; - }; - return coordinates; - }; - function d3_geom_polygonInside(p, a, b) { - return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]); - } - function d3_geom_polygonIntersect(c, d, a, b) { - var x1 = c[0], x2 = d[0], x3 = a[0], x4 = b[0], y1 = c[1], y2 = d[1], y3 = a[1], y4 = b[1], x13 = x1 - x3, x21 = x2 - x1, x43 = x4 - x3, y13 = y1 - y3, y21 = y2 - y1, y43 = y4 - y3, ua = (x43 * y13 - y43 * x13) / (y43 * x21 - x43 * y21); - return [ x1 + ua * x21, y1 + ua * y21 ]; - } - d3.geom.voronoi = function(vertices) { - var polygons = vertices.map(function() { - return []; - }); - d3_voronoi_tessellate(vertices, function(e) { - var s1, s2, x1, x2, y1, y2; - if (e.a === 1 && e.b >= 0) { - s1 = e.ep.r; - s2 = e.ep.l; - } else { - s1 = e.ep.l; - s2 = e.ep.r; - } - if (e.a === 1) { - y1 = s1 ? s1.y : -1e6; - x1 = e.c - e.b * y1; - y2 = s2 ? s2.y : 1e6; - x2 = e.c - e.b * y2; - } else { - x1 = s1 ? s1.x : -1e6; - y1 = e.c - e.a * x1; - x2 = s2 ? s2.x : 1e6; - y2 = e.c - e.a * x2; - } - var v1 = [ x1, y1 ], v2 = [ x2, y2 ]; - polygons[e.region.l.index].push(v1, v2); - polygons[e.region.r.index].push(v1, v2); - }); - return polygons.map(function(polygon, i) { - var cx = vertices[i][0], cy = vertices[i][1]; - polygon.forEach(function(v) { - v.angle = Math.atan2(v[0] - cx, v[1] - cy); - }); - return polygon.sort(function(a, b) { - return a.angle - b.angle; - }).filter(function(d, i) { - return !i || d.angle - polygon[i - 1].angle > 1e-10; - }); - }); - }; - var d3_voronoi_opposite = { - l: "r", - r: "l" - }; - function d3_voronoi_tessellate(vertices, callback) { - var Sites = { - list: vertices.map(function(v, i) { - return { - index: i, - x: v[0], - y: v[1] - }; - }).sort(function(a, b) { - return a.y < b.y ? -1 : a.y > b.y ? 1 : a.x < b.x ? -1 : a.x > b.x ? 1 : 0; - }), - bottomSite: null - }; - var EdgeList = { - list: [], - leftEnd: null, - rightEnd: null, - init: function() { - EdgeList.leftEnd = EdgeList.createHalfEdge(null, "l"); - EdgeList.rightEnd = EdgeList.createHalfEdge(null, "l"); - EdgeList.leftEnd.r = EdgeList.rightEnd; - EdgeList.rightEnd.l = EdgeList.leftEnd; - EdgeList.list.unshift(EdgeList.leftEnd, EdgeList.rightEnd); - }, - createHalfEdge: function(edge, side) { - return { - edge: edge, - side: side, - vertex: null, - l: null, - r: null - }; - }, - insert: function(lb, he) { - he.l = lb; - he.r = lb.r; - lb.r.l = he; - lb.r = he; - }, - leftBound: function(p) { - var he = EdgeList.leftEnd; - do { - he = he.r; - } while (he != EdgeList.rightEnd && Geom.rightOf(he, p)); - he = he.l; - return he; - }, - del: function(he) { - he.l.r = he.r; - he.r.l = he.l; - he.edge = null; - }, - right: function(he) { - return he.r; - }, - left: function(he) { - return he.l; - }, - leftRegion: function(he) { - return he.edge == null ? Sites.bottomSite : he.edge.region[he.side]; - }, - rightRegion: function(he) { - return he.edge == null ? Sites.bottomSite : he.edge.region[d3_voronoi_opposite[he.side]]; - } - }; - var Geom = { - bisect: function(s1, s2) { - var newEdge = { - region: { - l: s1, - r: s2 - }, - ep: { - l: null, - r: null - } - }; - var dx = s2.x - s1.x, dy = s2.y - s1.y, adx = dx > 0 ? dx : -dx, ady = dy > 0 ? dy : -dy; - newEdge.c = s1.x * dx + s1.y * dy + (dx * dx + dy * dy) * .5; - if (adx > ady) { - newEdge.a = 1; - newEdge.b = dy / dx; - newEdge.c /= dx; - } else { - newEdge.b = 1; - newEdge.a = dx / dy; - newEdge.c /= dy; - } - return newEdge; - }, - intersect: function(el1, el2) { - var e1 = el1.edge, e2 = el2.edge; - if (!e1 || !e2 || e1.region.r == e2.region.r) { - return null; - } - var d = e1.a * e2.b - e1.b * e2.a; - if (Math.abs(d) < 1e-10) { - return null; - } - var xint = (e1.c * e2.b - e2.c * e1.b) / d, yint = (e2.c * e1.a - e1.c * e2.a) / d, e1r = e1.region.r, e2r = e2.region.r, el, e; - if (e1r.y < e2r.y || e1r.y == e2r.y && e1r.x < e2r.x) { - el = el1; - e = e1; - } else { - el = el2; - e = e2; - } - var rightOfSite = xint >= e.region.r.x; - if (rightOfSite && el.side === "l" || !rightOfSite && el.side === "r") { - return null; - } - return { - x: xint, - y: yint - }; - }, - rightOf: function(he, p) { - var e = he.edge, topsite = e.region.r, rightOfSite = p.x > topsite.x; - if (rightOfSite && he.side === "l") { - return 1; - } - if (!rightOfSite && he.side === "r") { - return 0; - } - if (e.a === 1) { - var dyp = p.y - topsite.y, dxp = p.x - topsite.x, fast = 0, above = 0; - if (!rightOfSite && e.b < 0 || rightOfSite && e.b >= 0) { - above = fast = dyp >= e.b * dxp; - } else { - above = p.x + p.y * e.b > e.c; - if (e.b < 0) { - above = !above; - } - if (!above) { - fast = 1; - } - } - if (!fast) { - var dxs = topsite.x - e.region.l.x; - above = e.b * (dxp * dxp - dyp * dyp) < dxs * dyp * (1 + 2 * dxp / dxs + e.b * e.b); - if (e.b < 0) { - above = !above; - } - } - } else { - var yl = e.c - e.a * p.x, t1 = p.y - yl, t2 = p.x - topsite.x, t3 = yl - topsite.y; - above = t1 * t1 > t2 * t2 + t3 * t3; - } - return he.side === "l" ? above : !above; - }, - endPoint: function(edge, side, site) { - edge.ep[side] = site; - if (!edge.ep[d3_voronoi_opposite[side]]) return; - callback(edge); - }, - distance: function(s, t) { - var dx = s.x - t.x, dy = s.y - t.y; - return Math.sqrt(dx * dx + dy * dy); - } - }; - var EventQueue = { - list: [], - insert: function(he, site, offset) { - he.vertex = site; - he.ystar = site.y + offset; - for (var i = 0, list = EventQueue.list, l = list.length; i < l; i++) { - var next = list[i]; - if (he.ystar > next.ystar || he.ystar == next.ystar && site.x > next.vertex.x) { - continue; - } else { - break; - } - } - list.splice(i, 0, he); - }, - del: function(he) { - for (var i = 0, ls = EventQueue.list, l = ls.length; i < l && ls[i] != he; ++i) {} - ls.splice(i, 1); - }, - empty: function() { - return EventQueue.list.length === 0; - }, - nextEvent: function(he) { - for (var i = 0, ls = EventQueue.list, l = ls.length; i < l; ++i) { - if (ls[i] == he) return ls[i + 1]; - } - return null; - }, - min: function() { - var elem = EventQueue.list[0]; - return { - x: elem.vertex.x, - y: elem.ystar - }; - }, - extractMin: function() { - return EventQueue.list.shift(); - } - }; - EdgeList.init(); - Sites.bottomSite = Sites.list.shift(); - var newSite = Sites.list.shift(), newIntStar; - var lbnd, rbnd, llbnd, rrbnd, bisector; - var bot, top, temp, p, v; - var e, pm; - while (true) { - if (!EventQueue.empty()) { - newIntStar = EventQueue.min(); - } - if (newSite && (EventQueue.empty() || newSite.y < newIntStar.y || newSite.y == newIntStar.y && newSite.x < newIntStar.x)) { - lbnd = EdgeList.leftBound(newSite); - rbnd = EdgeList.right(lbnd); - bot = EdgeList.rightRegion(lbnd); - e = Geom.bisect(bot, newSite); - bisector = EdgeList.createHalfEdge(e, "l"); - EdgeList.insert(lbnd, bisector); - p = Geom.intersect(lbnd, bisector); - if (p) { - EventQueue.del(lbnd); - EventQueue.insert(lbnd, p, Geom.distance(p, newSite)); - } - lbnd = bisector; - bisector = EdgeList.createHalfEdge(e, "r"); - EdgeList.insert(lbnd, bisector); - p = Geom.intersect(bisector, rbnd); - if (p) { - EventQueue.insert(bisector, p, Geom.distance(p, newSite)); - } - newSite = Sites.list.shift(); - } else if (!EventQueue.empty()) { - lbnd = EventQueue.extractMin(); - llbnd = EdgeList.left(lbnd); - rbnd = EdgeList.right(lbnd); - rrbnd = EdgeList.right(rbnd); - bot = EdgeList.leftRegion(lbnd); - top = EdgeList.rightRegion(rbnd); - v = lbnd.vertex; - Geom.endPoint(lbnd.edge, lbnd.side, v); - Geom.endPoint(rbnd.edge, rbnd.side, v); - EdgeList.del(lbnd); - EventQueue.del(rbnd); - EdgeList.del(rbnd); - pm = "l"; - if (bot.y > top.y) { - temp = bot; - bot = top; - top = temp; - pm = "r"; - } - e = Geom.bisect(bot, top); - bisector = EdgeList.createHalfEdge(e, pm); - EdgeList.insert(llbnd, bisector); - Geom.endPoint(e, d3_voronoi_opposite[pm], v); - p = Geom.intersect(llbnd, bisector); - if (p) { - EventQueue.del(llbnd); - EventQueue.insert(llbnd, p, Geom.distance(p, bot)); - } - p = Geom.intersect(bisector, rrbnd); - if (p) { - EventQueue.insert(bisector, p, Geom.distance(p, bot)); - } - } else { - break; - } - } - for (lbnd = EdgeList.right(EdgeList.leftEnd); lbnd != EdgeList.rightEnd; lbnd = EdgeList.right(lbnd)) { - callback(lbnd.edge); - } - } - d3.geom.delaunay = function(vertices) { - var edges = vertices.map(function() { - return []; - }), triangles = []; - d3_voronoi_tessellate(vertices, function(e) { - edges[e.region.l.index].push(vertices[e.region.r.index]); - }); - edges.forEach(function(edge, i) { - var v = vertices[i], cx = v[0], cy = v[1]; - edge.forEach(function(v) { - v.angle = Math.atan2(v[0] - cx, v[1] - cy); - }); - edge.sort(function(a, b) { - return a.angle - b.angle; - }); - for (var j = 0, m = edge.length - 1; j < m; j++) { - triangles.push([ v, edge[j], edge[j + 1] ]); - } - }); - return triangles; - }; - d3.geom.quadtree = function(points, x1, y1, x2, y2) { - var p, i = -1, n = points.length; - if (n && isNaN(points[0].x)) points = points.map(d3_geom_quadtreePoint); - if (arguments.length < 5) { - if (arguments.length === 3) { - y2 = x2 = y1; - y1 = x1; - } else { - x1 = y1 = Infinity; - x2 = y2 = -Infinity; - while (++i < n) { - p = points[i]; - if (p.x < x1) x1 = p.x; - if (p.y < y1) y1 = p.y; - if (p.x > x2) x2 = p.x; - if (p.y > y2) y2 = p.y; - } - var dx = x2 - x1, dy = y2 - y1; - if (dx > dy) y2 = y1 + dx; else x2 = x1 + dy; - } - } - function insert(n, p, x1, y1, x2, y2) { - if (isNaN(p.x) || isNaN(p.y)) return; - if (n.leaf) { - var v = n.point; - if (v) { - if (Math.abs(v.x - p.x) + Math.abs(v.y - p.y) < .01) { - insertChild(n, p, x1, y1, x2, y2); - } else { - n.point = null; - insertChild(n, v, x1, y1, x2, y2); - insertChild(n, p, x1, y1, x2, y2); - } - } else { - n.point = p; - } - } else { - insertChild(n, p, x1, y1, x2, y2); - } - } - function insertChild(n, p, x1, y1, x2, y2) { - var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, right = p.x >= sx, bottom = p.y >= sy, i = (bottom << 1) + right; - n.leaf = false; - n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode()); - if (right) x1 = sx; else x2 = sx; - if (bottom) y1 = sy; else y2 = sy; - insert(n, p, x1, y1, x2, y2); - } - var root = d3_geom_quadtreeNode(); - root.add = function(p) { - insert(root, p, x1, y1, x2, y2); - }; - root.visit = function(f) { - d3_geom_quadtreeVisit(f, root, x1, y1, x2, y2); - }; - points.forEach(root.add); - return root; - }; - function d3_geom_quadtreeNode() { - return { - leaf: true, - nodes: [], - point: null - }; - } - function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) { - if (!f(node, x1, y1, x2, y2)) { - var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes; - if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy); - if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy); - if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2); - if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2); - } - } - function d3_geom_quadtreePoint(p) { - return { - x: p[0], - y: p[1] - }; - } - d3.time = {}; - var d3_time = Date, d3_time_daySymbols = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ]; - function d3_time_utc() { - this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]); - } - d3_time_utc.prototype = { - getDate: function() { - return this._.getUTCDate(); - }, - getDay: function() { - return this._.getUTCDay(); - }, - getFullYear: function() { - return this._.getUTCFullYear(); - }, - getHours: function() { - return this._.getUTCHours(); - }, - getMilliseconds: function() { - return this._.getUTCMilliseconds(); - }, - getMinutes: function() { - return this._.getUTCMinutes(); - }, - getMonth: function() { - return this._.getUTCMonth(); - }, - getSeconds: function() { - return this._.getUTCSeconds(); - }, - getTime: function() { - return this._.getTime(); - }, - getTimezoneOffset: function() { - return 0; - }, - valueOf: function() { - return this._.valueOf(); - }, - setDate: function() { - d3_time_prototype.setUTCDate.apply(this._, arguments); - }, - setDay: function() { - d3_time_prototype.setUTCDay.apply(this._, arguments); - }, - setFullYear: function() { - d3_time_prototype.setUTCFullYear.apply(this._, arguments); - }, - setHours: function() { - d3_time_prototype.setUTCHours.apply(this._, arguments); - }, - setMilliseconds: function() { - d3_time_prototype.setUTCMilliseconds.apply(this._, arguments); - }, - setMinutes: function() { - d3_time_prototype.setUTCMinutes.apply(this._, arguments); - }, - setMonth: function() { - d3_time_prototype.setUTCMonth.apply(this._, arguments); - }, - setSeconds: function() { - d3_time_prototype.setUTCSeconds.apply(this._, arguments); - }, - setTime: function() { - d3_time_prototype.setTime.apply(this._, arguments); - } - }; - var d3_time_prototype = Date.prototype; - var d3_time_formatDateTime = "%a %b %e %H:%M:%S %Y", d3_time_formatDate = "%m/%d/%y", d3_time_formatTime = "%H:%M:%S"; - var d3_time_days = d3_time_daySymbols, d3_time_dayAbbreviations = d3_time_days.map(d3_time_formatAbbreviate), d3_time_months = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], d3_time_monthAbbreviations = d3_time_months.map(d3_time_formatAbbreviate); - function d3_time_formatAbbreviate(name) { - return name.substring(0, 3); - } - d3.time.format = function(template) { - var n = template.length; - function format(date) { - var string = [], i = -1, j = 0, c, f; - while (++i < n) { - if (template.charCodeAt(i) == 37) { - string.push(template.substring(j, i), (f = d3_time_formats[c = template.charAt(++i)]) ? f(date) : c); - j = i + 1; - } - } - string.push(template.substring(j, i)); - return string.join(""); - } - format.parse = function(string) { - var d = { - y: 1900, - m: 0, - d: 1, - H: 0, - M: 0, - S: 0, - L: 0 - }, i = d3_time_parse(d, template, string, 0); - if (i != string.length) return null; - if ("p" in d) d.H = d.H % 12 + d.p * 12; - var date = new d3_time; - date.setFullYear(d.y, d.m, d.d); - date.setHours(d.H, d.M, d.S, d.L); - return date; - }; - format.toString = function() { - return template; - }; - return format; - }; - function d3_time_parse(date, template, string, j) { - var c, p, i = 0, n = template.length, m = string.length; - while (i < n) { - if (j >= m) return -1; - c = template.charCodeAt(i++); - if (c == 37) { - p = d3_time_parsers[template.charAt(i++)]; - if (!p || (j = p(date, string, j)) < 0) return -1; - } else if (c != string.charCodeAt(j++)) { - return -1; - } - } - return j; - } - function d3_time_formatRe(names) { - return new RegExp("^(?:" + names.map(d3.requote).join("|") + ")", "i"); - } - function d3_time_formatLookup(names) { - var map = new d3_Map, i = -1, n = names.length; - while (++i < n) map.set(names[i].toLowerCase(), i); - return map; - } - var d3_time_zfill2 = d3.format("02d"), d3_time_zfill3 = d3.format("03d"), d3_time_zfill4 = d3.format("04d"), d3_time_sfill2 = d3.format("2d"); - var d3_time_dayRe = d3_time_formatRe(d3_time_days), d3_time_dayAbbrevRe = d3_time_formatRe(d3_time_dayAbbreviations), d3_time_monthRe = d3_time_formatRe(d3_time_months), d3_time_monthLookup = d3_time_formatLookup(d3_time_months), d3_time_monthAbbrevRe = d3_time_formatRe(d3_time_monthAbbreviations), d3_time_monthAbbrevLookup = d3_time_formatLookup(d3_time_monthAbbreviations); - var d3_time_formats = { - a: function(d) { - return d3_time_dayAbbreviations[d.getDay()]; - }, - A: function(d) { - return d3_time_days[d.getDay()]; - }, - b: function(d) { - return d3_time_monthAbbreviations[d.getMonth()]; - }, - B: function(d) { - return d3_time_months[d.getMonth()]; - }, - c: d3.time.format(d3_time_formatDateTime), - d: function(d) { - return d3_time_zfill2(d.getDate()); - }, - e: function(d) { - return d3_time_sfill2(d.getDate()); - }, - H: function(d) { - return d3_time_zfill2(d.getHours()); - }, - I: function(d) { - return d3_time_zfill2(d.getHours() % 12 || 12); - }, - j: function(d) { - return d3_time_zfill3(1 + d3.time.dayOfYear(d)); - }, - L: function(d) { - return d3_time_zfill3(d.getMilliseconds()); - }, - m: function(d) { - return d3_time_zfill2(d.getMonth() + 1); - }, - M: function(d) { - return d3_time_zfill2(d.getMinutes()); - }, - p: function(d) { - return d.getHours() >= 12 ? "PM" : "AM"; - }, - S: function(d) { - return d3_time_zfill2(d.getSeconds()); - }, - U: function(d) { - return d3_time_zfill2(d3.time.sundayOfYear(d)); - }, - w: function(d) { - return d.getDay(); - }, - W: function(d) { - return d3_time_zfill2(d3.time.mondayOfYear(d)); - }, - x: d3.time.format(d3_time_formatDate), - X: d3.time.format(d3_time_formatTime), - y: function(d) { - return d3_time_zfill2(d.getFullYear() % 100); - }, - Y: function(d) { - return d3_time_zfill4(d.getFullYear() % 1e4); - }, - Z: d3_time_zone, - "%": function(d) { - return "%"; - } - }; - var d3_time_parsers = { - a: d3_time_parseWeekdayAbbrev, - A: d3_time_parseWeekday, - b: d3_time_parseMonthAbbrev, - B: d3_time_parseMonth, - c: d3_time_parseLocaleFull, - d: d3_time_parseDay, - e: d3_time_parseDay, - H: d3_time_parseHour24, - I: d3_time_parseHour24, - L: d3_time_parseMilliseconds, - m: d3_time_parseMonthNumber, - M: d3_time_parseMinutes, - p: d3_time_parseAmPm, - S: d3_time_parseSeconds, - x: d3_time_parseLocaleDate, - X: d3_time_parseLocaleTime, - y: d3_time_parseYear, - Y: d3_time_parseFullYear - }; - function d3_time_parseWeekdayAbbrev(date, string, i) { - d3_time_dayAbbrevRe.lastIndex = 0; - var n = d3_time_dayAbbrevRe.exec(string.substring(i)); - return n ? i += n[0].length : -1; - } - function d3_time_parseWeekday(date, string, i) { - d3_time_dayRe.lastIndex = 0; - var n = d3_time_dayRe.exec(string.substring(i)); - return n ? i += n[0].length : -1; - } - function d3_time_parseMonthAbbrev(date, string, i) { - d3_time_monthAbbrevRe.lastIndex = 0; - var n = d3_time_monthAbbrevRe.exec(string.substring(i)); - return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i += n[0].length) : -1; - } - function d3_time_parseMonth(date, string, i) { - d3_time_monthRe.lastIndex = 0; - var n = d3_time_monthRe.exec(string.substring(i)); - return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i += n[0].length) : -1; - } - function d3_time_parseLocaleFull(date, string, i) { - return d3_time_parse(date, d3_time_formats.c.toString(), string, i); - } - function d3_time_parseLocaleDate(date, string, i) { - return d3_time_parse(date, d3_time_formats.x.toString(), string, i); - } - function d3_time_parseLocaleTime(date, string, i) { - return d3_time_parse(date, d3_time_formats.X.toString(), string, i); - } - function d3_time_parseFullYear(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 4)); - return n ? (date.y = +n[0], i += n[0].length) : -1; - } - function d3_time_parseYear(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.y = d3_time_expandYear(+n[0]), i += n[0].length) : -1; - } - function d3_time_expandYear(d) { - return d + (d > 68 ? 1900 : 2e3); - } - function d3_time_parseMonthNumber(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.m = n[0] - 1, i += n[0].length) : -1; - } - function d3_time_parseDay(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.d = +n[0], i += n[0].length) : -1; - } - function d3_time_parseHour24(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.H = +n[0], i += n[0].length) : -1; - } - function d3_time_parseMinutes(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.M = +n[0], i += n[0].length) : -1; - } - function d3_time_parseSeconds(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 2)); - return n ? (date.S = +n[0], i += n[0].length) : -1; - } - function d3_time_parseMilliseconds(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.substring(i, i + 3)); - return n ? (date.L = +n[0], i += n[0].length) : -1; - } - var d3_time_numberRe = /^\s*\d+/; - function d3_time_parseAmPm(date, string, i) { - var n = d3_time_amPmLookup.get(string.substring(i, i += 2).toLowerCase()); - return n == null ? -1 : (date.p = n, i); - } - var d3_time_amPmLookup = d3.map({ - am: 0, - pm: 1 - }); - function d3_time_zone(d) { - var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = ~~(Math.abs(z) / 60), zm = Math.abs(z) % 60; - return zs + d3_time_zfill2(zh) + d3_time_zfill2(zm); - } - d3.time.format.utc = function(template) { - var local = d3.time.format(template); - function format(date) { - try { - d3_time = d3_time_utc; - var utc = new d3_time; - utc._ = date; - return local(utc); - } finally { - d3_time = Date; - } - } - format.parse = function(string) { - try { - d3_time = d3_time_utc; - var date = local.parse(string); - return date && date._; - } finally { - d3_time = Date; - } - }; - format.toString = local.toString; - return format; - }; - var d3_time_formatIso = d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ"); - d3.time.format.iso = Date.prototype.toISOString ? d3_time_formatIsoNative : d3_time_formatIso; - function d3_time_formatIsoNative(date) { - return date.toISOString(); - } - d3_time_formatIsoNative.parse = function(string) { - var date = new Date(string); - return isNaN(date) ? null : date; - }; - d3_time_formatIsoNative.toString = d3_time_formatIso.toString; - function d3_time_interval(local, step, number) { - function round(date) { - var d0 = local(date), d1 = offset(d0, 1); - return date - d0 < d1 - date ? d0 : d1; - } - function ceil(date) { - step(date = local(new d3_time(date - 1)), 1); - return date; - } - function offset(date, k) { - step(date = new d3_time(+date), k); - return date; - } - function range(t0, t1, dt) { - var time = ceil(t0), times = []; - if (dt > 1) { - while (time < t1) { - if (!(number(time) % dt)) times.push(new Date(+time)); - step(time, 1); - } - } else { - while (time < t1) times.push(new Date(+time)), step(time, 1); - } - return times; - } - function range_utc(t0, t1, dt) { - try { - d3_time = d3_time_utc; - var utc = new d3_time_utc; - utc._ = t0; - return range(utc, t1, dt); - } finally { - d3_time = Date; - } - } - local.floor = local; - local.round = round; - local.ceil = ceil; - local.offset = offset; - local.range = range; - var utc = local.utc = d3_time_interval_utc(local); - utc.floor = utc; - utc.round = d3_time_interval_utc(round); - utc.ceil = d3_time_interval_utc(ceil); - utc.offset = d3_time_interval_utc(offset); - utc.range = range_utc; - return local; - } - function d3_time_interval_utc(method) { - return function(date, k) { - try { - d3_time = d3_time_utc; - var utc = new d3_time_utc; - utc._ = date; - return method(utc, k)._; - } finally { - d3_time = Date; - } - }; - } - d3.time.second = d3_time_interval(function(date) { - return new d3_time(Math.floor(date / 1e3) * 1e3); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 1e3); - }, function(date) { - return date.getSeconds(); - }); - d3.time.seconds = d3.time.second.range; - d3.time.seconds.utc = d3.time.second.utc.range; - d3.time.minute = d3_time_interval(function(date) { - return new d3_time(Math.floor(date / 6e4) * 6e4); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 6e4); - }, function(date) { - return date.getMinutes(); - }); - d3.time.minutes = d3.time.minute.range; - d3.time.minutes.utc = d3.time.minute.utc.range; - d3.time.hour = d3_time_interval(function(date) { - var timezone = date.getTimezoneOffset() / 60; - return new d3_time((Math.floor(date / 36e5 - timezone) + timezone) * 36e5); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 36e5); - }, function(date) { - return date.getHours(); - }); - d3.time.hours = d3.time.hour.range; - d3.time.hours.utc = d3.time.hour.utc.range; - d3.time.day = d3_time_interval(function(date) { - var day = new d3_time(0, date.getMonth(), date.getDate()); - day.setFullYear(date.getFullYear()); - return day; - }, function(date, offset) { - date.setDate(date.getDate() + offset); - }, function(date) { - return date.getDate() - 1; - }); - d3.time.days = d3.time.day.range; - d3.time.days.utc = d3.time.day.utc.range; - d3.time.dayOfYear = function(date) { - var year = d3.time.year(date); - return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5); - }; - d3_time_daySymbols.forEach(function(day, i) { - day = day.toLowerCase(); - i = 7 - i; - var interval = d3.time[day] = d3_time_interval(function(date) { - (date = d3.time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7); - return date; - }, function(date, offset) { - date.setDate(date.getDate() + Math.floor(offset) * 7); - }, function(date) { - var day = d3.time.year(date).getDay(); - return Math.floor((d3.time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i); - }); - d3.time[day + "s"] = interval.range; - d3.time[day + "s"].utc = interval.utc.range; - d3.time[day + "OfYear"] = function(date) { - var day = d3.time.year(date).getDay(); - return Math.floor((d3.time.dayOfYear(date) + (day + i) % 7) / 7); - }; - }); - d3.time.week = d3.time.sunday; - d3.time.weeks = d3.time.sunday.range; - d3.time.weeks.utc = d3.time.sunday.utc.range; - d3.time.weekOfYear = d3.time.sundayOfYear; - d3.time.month = d3_time_interval(function(date) { - date = d3.time.day(date); - date.setDate(1); - return date; - }, function(date, offset) { - date.setMonth(date.getMonth() + offset); - }, function(date) { - return date.getMonth(); - }); - d3.time.months = d3.time.month.range; - d3.time.months.utc = d3.time.month.utc.range; - d3.time.year = d3_time_interval(function(date) { - date = d3.time.day(date); - date.setMonth(0, 1); - return date; - }, function(date, offset) { - date.setFullYear(date.getFullYear() + offset); - }, function(date) { - return date.getFullYear(); - }); - d3.time.years = d3.time.year.range; - d3.time.years.utc = d3.time.year.utc.range; - function d3_time_scale(linear, methods, format) { - function scale(x) { - return linear(x); - } - scale.invert = function(x) { - return d3_time_scaleDate(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return linear.domain().map(d3_time_scaleDate); - linear.domain(x); - return scale; - }; - scale.nice = function(m) { - return scale.domain(d3_scale_nice(scale.domain(), function() { - return m; - })); - }; - scale.ticks = function(m, k) { - var extent = d3_time_scaleExtent(scale.domain()); - if (typeof m !== "function") { - var span = extent[1] - extent[0], target = span / m, i = d3.bisect(d3_time_scaleSteps, target); - if (i == d3_time_scaleSteps.length) return methods.year(extent, m); - if (!i) return linear.ticks(m).map(d3_time_scaleDate); - if (Math.log(target / d3_time_scaleSteps[i - 1]) < Math.log(d3_time_scaleSteps[i] / target)) --i; - m = methods[i]; - k = m[1]; - m = m[0].range; - } - return m(extent[0], new Date(+extent[1] + 1), k); - }; - scale.tickFormat = function() { - return format; - }; - scale.copy = function() { - return d3_time_scale(linear.copy(), methods, format); - }; - return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp"); - } - function d3_time_scaleExtent(domain) { - var start = domain[0], stop = domain[domain.length - 1]; - return start < stop ? [ start, stop ] : [ stop, start ]; - } - function d3_time_scaleDate(t) { - return new Date(t); - } - function d3_time_scaleFormat(formats) { - return function(date) { - var i = formats.length - 1, f = formats[i]; - while (!f[1](date)) f = formats[--i]; - return f[0](date); - }; - } - function d3_time_scaleSetYear(y) { - var d = new Date(y, 0, 1); - d.setFullYear(y); - return d; - } - function d3_time_scaleGetYear(d) { - var y = d.getFullYear(), d0 = d3_time_scaleSetYear(y), d1 = d3_time_scaleSetYear(y + 1); - return y + (d - d0) / (d1 - d0); - } - var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ]; - var d3_time_scaleLocalMethods = [ [ d3.time.second, 1 ], [ d3.time.second, 5 ], [ d3.time.second, 15 ], [ d3.time.second, 30 ], [ d3.time.minute, 1 ], [ d3.time.minute, 5 ], [ d3.time.minute, 15 ], [ d3.time.minute, 30 ], [ d3.time.hour, 1 ], [ d3.time.hour, 3 ], [ d3.time.hour, 6 ], [ d3.time.hour, 12 ], [ d3.time.day, 1 ], [ d3.time.day, 2 ], [ d3.time.week, 1 ], [ d3.time.month, 1 ], [ d3.time.month, 3 ], [ d3.time.year, 1 ] ]; - var d3_time_scaleLocalFormats = [ [ d3.time.format("%Y"), function(d) { - return true; - } ], [ d3.time.format("%B"), function(d) { - return d.getMonth(); - } ], [ d3.time.format("%b %d"), function(d) { - return d.getDate() != 1; - } ], [ d3.time.format("%a %d"), function(d) { - return d.getDay() && d.getDate() != 1; - } ], [ d3.time.format("%I %p"), function(d) { - return d.getHours(); - } ], [ d3.time.format("%I:%M"), function(d) { - return d.getMinutes(); - } ], [ d3.time.format(":%S"), function(d) { - return d.getSeconds(); - } ], [ d3.time.format(".%L"), function(d) { - return d.getMilliseconds(); - } ] ]; - var d3_time_scaleLinear = d3.scale.linear(), d3_time_scaleLocalFormat = d3_time_scaleFormat(d3_time_scaleLocalFormats); - d3_time_scaleLocalMethods.year = function(extent, m) { - return d3_time_scaleLinear.domain(extent.map(d3_time_scaleGetYear)).ticks(m).map(d3_time_scaleSetYear); - }; - d3.time.scale = function() { - return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat); - }; - var d3_time_scaleUTCMethods = d3_time_scaleLocalMethods.map(function(m) { - return [ m[0].utc, m[1] ]; - }); - var d3_time_scaleUTCFormats = [ [ d3.time.format.utc("%Y"), function(d) { - return true; - } ], [ d3.time.format.utc("%B"), function(d) { - return d.getUTCMonth(); - } ], [ d3.time.format.utc("%b %d"), function(d) { - return d.getUTCDate() != 1; - } ], [ d3.time.format.utc("%a %d"), function(d) { - return d.getUTCDay() && d.getUTCDate() != 1; - } ], [ d3.time.format.utc("%I %p"), function(d) { - return d.getUTCHours(); - } ], [ d3.time.format.utc("%I:%M"), function(d) { - return d.getUTCMinutes(); - } ], [ d3.time.format.utc(":%S"), function(d) { - return d.getUTCSeconds(); - } ], [ d3.time.format.utc(".%L"), function(d) { - return d.getUTCMilliseconds(); - } ] ]; - var d3_time_scaleUTCFormat = d3_time_scaleFormat(d3_time_scaleUTCFormats); - function d3_time_scaleUTCSetYear(y) { - var d = new Date(Date.UTC(y, 0, 1)); - d.setUTCFullYear(y); - return d; - } - function d3_time_scaleUTCGetYear(d) { - var y = d.getUTCFullYear(), d0 = d3_time_scaleUTCSetYear(y), d1 = d3_time_scaleUTCSetYear(y + 1); - return y + (d - d0) / (d1 - d0); - } - d3_time_scaleUTCMethods.year = function(extent, m) { - return d3_time_scaleLinear.domain(extent.map(d3_time_scaleUTCGetYear)).ticks(m).map(d3_time_scaleUTCSetYear); - }; - d3.time.scale.utc = function() { - return d3_time_scale(d3.scale.linear(), d3_time_scaleUTCMethods, d3_time_scaleUTCFormat); - }; -})(); diff --git a/examples/other/template-demo/client/template-demo.css b/examples/other/template-demo/client/template-demo.css deleted file mode 100644 index 4506e4bebb..0000000000 --- a/examples/other/template-demo/client/template-demo.css +++ /dev/null @@ -1,44 +0,0 @@ -body { - font-family: 'Helvetica Neue', Helvetica, Arial, san-serif; - width: 600px; - margin: auto; - padding: 25px 50px; - border: 5px dashed #ccc; - border-style: none dashed; -} - -h2 { - margin-top: 50px; - text-decoration: underline; -} - -.clearboth { - clear: both; -} - -@-webkit-keyframes spinForward { - from {-webkit-transform: rotate(0deg);} - to {-webkit-transform: rotate(360deg);} -} - -@-webkit-keyframes spinBackward { - from {-webkit-transform: rotate(360deg);} - to {-webkit-transform: rotate(0deg);} -} - -.spinner { - width: 100px; - border: 2px solid black; - font-weight: bold; - text-align: center; - background: white; -} - -.circles { - float: left; - padding-right: 20px; -} - -.circles svg { - border: 2px solid #333; -} \ No newline at end of file diff --git a/examples/other/template-demo/client/template-demo.html b/examples/other/template-demo/client/template-demo.html deleted file mode 100644 index 1aa79e51f9..0000000000 --- a/examples/other/template-demo/client/template-demo.html +++ /dev/null @@ -1,183 +0,0 @@ - - Advanced Template Demo - - - - {{> page}} - - - - - - - - - - - - - - - diff --git a/examples/other/template-demo/client/template-demo.js b/examples/other/template-demo/client/template-demo.js deleted file mode 100644 index 9eadceb0af..0000000000 --- a/examples/other/template-demo/client/template-demo.js +++ /dev/null @@ -1,273 +0,0 @@ -Timers = new Mongo.Collection(null); - -/////////////////////////////////////////////////////////////////////////////// - -if (! Session.get("x")) { - Session.set("x", 1); -} - -if (! Session.get("y")) { - Session.set("y", 1); -} - -if (! Session.get("z")) { - Session.set("z", 1); -} - -Template.preserveDemo.x = -Template.constantDemo.x = -Template.stateDemo.x = -function () { - return Session.get("x"); -}; - -Template.timer.y = function () { - return Session.get("y"); -}; - -Template.stateDemo.z = -function () { - return Session.get("z"); -}; - -Template.page.events({ - 'click input.x': function () { - Session.set("x", Session.get("x") + 1); - }, - - 'click input.y': function () { - Session.set("y", Session.get("y") + 1); - }, - - 'click input.z': function () { - Session.set("z", Session.get("z") + 1); - } -}); - -/////////////////////////////////////////////////////////////////////////////// - -if (typeof Session.get("spinForward") !== 'boolean') { - Session.set("spinForward", true); -} - -Template.preserveDemo.preserve([ '.spinner', '.spinforward' ]); - -Template.preserveDemo.spinForwardChecked = function () { - return Session.get('spinForward') ? 'checked' : ''; -}; - -Template.preserveDemo.spinAnim = function () { - return Session.get('spinForward') ? 'spinForward' : 'spinBackward'; -}; - -Template.preserveDemo.events({ - 'change .spinforward' : function (event) { - Session.set('spinForward', event.currentTarget.checked); - } -}); - -/////////////////////////////////////////////////////////////////////////////// - -Template.constantDemo.checked = function (which) { - return Session.get('mapchecked' + which) ? 'checked' : ''; -}; - -Template.constantDemo.show = function (which) { - return ! Session.get('mapchecked' + which); -}; - -Template.constantDemo.events({ - 'change .remove' : function (event) { - var tgt = event.currentTarget; - Session.set('mapchecked' + tgt.getAttribute("which"), tgt.checked); - } -}); - -/////////////////////////////////////////////////////////////////////////////// - -Template.stateDemo.events({ - 'click .create': function () { - Timers.insert({}); - } -}); - -Template.stateDemo.timers = function () { - return Timers.find(); -}; - -Template.timer.events({ - 'click .reset': function (event, template) { - template.elapsed = 0; - updateTimer(template); - }, - 'click .delete': function () { - Timers.remove(this._id); - } -}); - -var updateTimer = function (timer) { - timer.node.innerHTML = timer.elapsed + " second" + - ((timer.elapsed === 1) ? "" : "s"); -}; - -Template.timer.onCreated(function () { - var self = this; - self.elapsed = 0; - self.node = null; -}); - -Template.timer.onRendered(function () { - var self = this; - self.node = this.find(".elapsed"); - updateTimer(self); - - if (! self.timer) { - var tick = function () { - self.elapsed++; - self.timer = setTimeout(tick, 1000); - updateTimer(self); - }; - tick(); - } -}); - -Template.timer.onDestroyed(function () { - clearInterval(this.timer); -}); - -/////////////////////////////////////////////////////////////////////////////// - -Template.d3Demo.left = function () { - return { group: "left" }; -}; - -Template.d3Demo.right = function () { - return { group: "right" }; -}; - -Template.circles.events({ - 'mousedown circle': function (evt, template) { - Session.set("selectedCircle:" + this.group, evt.currentTarget.id); - }, - 'click .add': function () { - Circles.insert({x: Random.fraction(), y: Random.fraction(), - r: Random.fraction() * .1 + .02, - color: { - r: Random.fraction(), - g: Random.fraction(), - b: Random.fraction() - }, - group: this.group - }); - }, - 'click .remove': function () { - var selected = Session.get("selectedCircle:" + this.group); - if (selected) { - Circles.remove(selected); - Session.set("selectedCircle:" + this.group, null); - } - }, - 'click .scram': function () { - Circles.find({group: this.group}).forEach(function (r) { - Circles.update(r._id, { - $set: { - x: Random.fraction(), y: Random.fraction(), r: Random.fraction() * .1 + .02 - } - }); - }); - }, - 'click .clear': function () { - Circles.remove({group: this.group}); - } -}); - -var colorToString = function (color) { - var f = function (x) { return Math.floor(x * 256); }; - return "rgb(" + f(color.r) + "," + - + f(color.g) + "," + + f(color.b) + ")"; -}; - -Template.circles.count = function () { - return Circles.find({group: this.group}).count(); -}; - -Template.circles.disabled = function () { - return Session.get("selectedCircle:" + this.group) ? - '' : 'disabled'; -}; - -Template.circles.onCreated(function () { -}); - -Template.circles.onRendered(function () { - var self = this; - self.node = self.find("svg"); - - var data = self.data; - - if (! self.handle) { - d3.select(self.node).append("rect"); - self.handle = Deps.autorun(function () { - var circle = d3.select(self.node).selectAll("circle") - .data(Circles.find({group: data.group}).fetch(), - function (d) { return d._id; }); - - circle.enter().append("circle") - .attr("id", function (d) { - return d._id; - }) - .attr("cx", function (d) { - return d.x * 272; - }) - .attr("cy", function (d) { - return d.y * 272; - }) - .attr("r", 50) - .style("fill", function (d) { - return colorToString(d.color); - }) - .style("opacity", 0); - - circle.transition() - .duration(250) - .attr("cx", function (d) { - return d.x * 272; - }) - .attr("cy", function (d) { - return d.y * 272; - }) - .attr("r", function (d) { - return d.r * 272; - }) - .style("fill", function (d) { - return colorToString(d.color); - }) - .style("opacity", .9) - .ease("cubic-out"); - - circle.exit().transition() - .duration(250) - .attr("r", 0) - .remove(); - - var selectionId = Session.get("selectedCircle:" + data.group); - var s = selectionId && Circles.findOne(selectionId); - var rect = d3.select(self.node).select("rect"); - if (s) - rect.attr("x", (s.x - s.r) * 272) - .attr("y", (s.y - s.r) * 272) - .attr("width", s.r * 2 * 272) - .attr("height", s.r * 2 * 272) - .attr("display", '') - .style("fill", "none") - .style("stroke", "red") - .style("stroke-width", 3); - else - rect.attr("display", 'none'); - }); - } -}); - -Template.circles.onDestroyed(function () { - this.handle && this.handle.stop(); -}); diff --git a/examples/other/template-demo/model.js b/examples/other/template-demo/model.js deleted file mode 100644 index b0ef00b4aa..0000000000 --- a/examples/other/template-demo/model.js +++ /dev/null @@ -1 +0,0 @@ -Circles = new Mongo.Collection("circles"); diff --git a/examples/other/wordplay/.meteor/.finished-upgraders b/examples/other/wordplay/.meteor/.finished-upgraders deleted file mode 100644 index 68df3d8d0d..0000000000 --- a/examples/other/wordplay/.meteor/.finished-upgraders +++ /dev/null @@ -1,7 +0,0 @@ -# This file contains information which helps Meteor properly upgrade your -# app when you run 'meteor update'. You should check it into version control -# with your project. - -notices-for-0.9.0 -notices-for-0.9.1 -0.9.4-platform-file diff --git a/examples/other/wordplay/.meteor/.gitignore b/examples/other/wordplay/.meteor/.gitignore deleted file mode 100644 index 4083037423..0000000000 --- a/examples/other/wordplay/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/examples/other/wordplay/.meteor/packages b/examples/other/wordplay/.meteor/packages deleted file mode 100644 index 5facf43e33..0000000000 --- a/examples/other/wordplay/.meteor/packages +++ /dev/null @@ -1,8 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -standard-app-packages -insecure -jquery diff --git a/examples/other/wordplay/.meteor/release b/examples/other/wordplay/.meteor/release deleted file mode 100644 index 7057f80807..0000000000 --- a/examples/other/wordplay/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -METEOR@0.9.4 diff --git a/examples/other/wordplay/.meteor/versions b/examples/other/wordplay/.meteor/versions deleted file mode 100644 index 5a899d9f06..0000000000 --- a/examples/other/wordplay/.meteor/versions +++ /dev/null @@ -1,51 +0,0 @@ -application-configuration@1.0.3 -autoupdate@1.1.2 -base64@1.0.1 -binary-heap@1.0.1 -blaze-tools@1.0.1 -blaze@2.0.2 -boilerplate-generator@1.0.1 -callback-hook@1.0.1 -check@1.0.2 -ctl-helper@1.0.4 -ctl@1.0.2 -ddp@1.0.10 -deps@1.0.5 -ejson@1.0.4 -fastclick@1.0.1 -follower-livedata@1.0.2 -geojson-utils@1.0.1 -html-tools@1.0.2 -htmljs@1.0.2 -http@1.0.7 -id-map@1.0.1 -insecure@1.0.1 -jquery@1.0.1 -json@1.0.1 -livedata@1.0.11 -logging@1.0.4 -meteor-platform@1.1.2 -meteor@1.1.2 -minifiers@1.1.1 -minimongo@1.0.4 -mobile-status-bar@1.0.1 -mongo@1.0.7 -observe-sequence@1.0.3 -ordered-dict@1.0.1 -random@1.0.1 -reactive-dict@1.0.4 -reactive-var@1.0.3 -reload@1.1.1 -retry@1.0.1 -routepolicy@1.0.2 -session@1.0.3 -spacebars-compiler@1.0.3 -spacebars@1.0.3 -standard-app-packages@1.0.3 -templating@1.0.8 -tracker@1.0.3 -ui@1.0.4 -underscore@1.0.1 -url@1.0.1 -webapp-hashing@1.0.1 -webapp@1.1.3 diff --git a/examples/other/wordplay/TODO b/examples/other/wordplay/TODO deleted file mode 100644 index a0076211f5..0000000000 --- a/examples/other/wordplay/TODO +++ /dev/null @@ -1,12 +0,0 @@ -TODOS -strip spaces on input box -focus input on game start -styling -eliminate extra divs - -POSSIBLE EXTENSIONS -publish remaining words at end of game -UI that works on touch devices sans keyboard -spinny while word is getting scored -support clicking on board instead of text box - diff --git a/examples/other/wordplay/client/wordplay.css b/examples/other/wordplay/client/wordplay.css deleted file mode 100644 index 42cb521141..0000000000 --- a/examples/other/wordplay/client/wordplay.css +++ /dev/null @@ -1,180 +0,0 @@ -body { - margin: 0px; - background-color: #f4f4f4; - font-family: Helvetica, Arial, sans-serif; -} - -/* base styles */ - -input { - height: 50px; - width: 300px; - font-size: 2em; - border: 2px solid black; - padding: 5px; -} - -button { - position: relative; - bottom: 3px; - margin: 10px; - height: 50px; - background-color:#E6EFC2; - border:1px solid #dedede; - font-weight:bold; - cursor:pointer; - font-size: 1.5em; -} - -button:hover { - background-color:#D6DFb2; - border:1px solid #C6D880; -} - -button:active { - background-color:#529214; - border:1px solid #529214; - color:#fff; -} - -/*******/ - -#main { - margin: 20px; -} - -#left { - float: left; - width: 40%; -} - -#right { - float: left; - width: 50%; -} - -#clock { - width: 100%; - height: 100px; - text-align: center; - font-size: 3em; -} - -#board { - margin: auto; - border:4px solid #999999; - border-radius: 4px; - -moz-border-radius: 4px; - padding:2px; - - width:400px; - height:400px; - background-color:#999999; -} - -.square { - cursor: pointer; - width:84px; - height:84px; - border:4px solid #eeeee8; - border-radius: 4px; - -moz-border-radius: 4px; - margin: 4px; - float:left; - text-align: center; - background-color:#eeeee8; - font-size: 65px; -} - -.square.last_in_path { - color: #ff0000; -} - -.square.in_path { - color: #990000; -} - -#login { - margin: 100px auto; - text-align: center; -} - -#login .error { - color: red; -} - -#lobby { - margin: 100px auto; - text-align: center; -} - -#postgame { - height: 100px; - text-align: center; -} - -#scratchpad { - height: 100px; -} - -#scratchpad input { - width: 70%; -} - -#scratchpad h1 { - float: left; -} - -#scores { - float: left; - width: 100%; - background-color: #eeeee8; - border: 1px solid black; - padding: 0.5em; -} - -#scores .player { - float: left; - width: 100%; -} - -#scores .header { - font-size: 1.25em; -} - -#scores .unnamed { - color: #444; - font-style: italic; -} - -#scores .winner { - background-color: yellow; -} - -#scores .winner_text { - float: right; -} - -#scores .word { - float: left; - font-size: 1.25em; - padding: 0.25em; - margin: 0.5em; - border: 1px solid #030; -} - -#scores .word.good { - background-color: #0a0; -} - -#scores .word.bad { - text-decoration: line-through; -} - -#scores .word span.score { - width: 1em; -} - -#scores .word.bad span.score { - background-image: 'circle-ball-dark-antialiased.gif'; -} diff --git a/examples/other/wordplay/client/wordplay.html b/examples/other/wordplay/client/wordplay.html deleted file mode 100644 index c286df6634..0000000000 --- a/examples/other/wordplay/client/wordplay.html +++ /dev/null @@ -1,136 +0,0 @@ - - Word play! - - - - {{> page}} - - - - - - - - - - - - - - - - - diff --git a/examples/other/wordplay/client/wordplay.js b/examples/other/wordplay/client/wordplay.js deleted file mode 100644 index 9e3059ffab..0000000000 --- a/examples/other/wordplay/client/wordplay.js +++ /dev/null @@ -1,252 +0,0 @@ -////////// Main client application logic ////////// - -////// -////// Utility functions -////// - -var player = function () { - return Players.findOne(Session.get('player_id')); -}; - -var game = function () { - var me = player(); - return me && me.game_id && Games.findOne(me.game_id); -}; - -var set_selected_positions = function (word) { - var paths = paths_for_word(game().board, word.toUpperCase()); - var in_a_path = []; - var last_in_a_path = []; - - for (var i = 0; i < paths.length; i++) { - in_a_path = in_a_path.concat(paths[i]); - last_in_a_path.push(paths[i].slice(-1)[0]); - } - - for (var pos = 0; pos < 16; pos++) { - if (_.indexOf(last_in_a_path, pos) !== -1) - Session.set('selected_' + pos, 'last_in_path'); - else if (_.indexOf(in_a_path, pos) !== -1) - Session.set('selected_' + pos, 'in_path'); - else - Session.set('selected_' + pos, false); - } -}; - -var clear_selected_positions = function () { - for (var pos = 0; pos < 16; pos++) - Session.set('selected_' + pos, false); -}; - -////// -////// lobby template: shows everyone not currently playing, and -////// offers a button to start a fresh game. -////// - -Template.lobby.helpers({ - show: function () { - // only show lobby if we're not in a game - return !game(); - }, - - waiting: function () { - var players = Players.find({_id: {$ne: Session.get('player_id')}, - name: {$ne: ''}, - game_id: {$exists: false}}); - - return players; - }, - - count: function () { - var players = Players.find({_id: {$ne: Session.get('player_id')}, - name: {$ne: ''}, - game_id: {$exists: false}}); - - return players.count(); - }, - - disabled: function () { - var me = player(); - if (me && me.name) - return ''; - return 'disabled'; - } -}); - -var trim = function (string) { return string.replace(/^\s+|\s+$/g, ''); }; - -Template.lobby.events({ - 'keyup input#myname': function (evt) { - var name = trim($('#lobby input#myname').val()); - Players.update(Session.get('player_id'), {$set: {name: name}}); - }, - 'click button.startgame': function () { - Meteor.call('start_new_game'); - } -}); - -////// -////// board template: renders the board and the clock given the -////// current game. if there is no game, show a splash screen. -////// -var SPLASH = ['','','','', - 'W', 'O', 'R', 'D', - 'P', 'L', 'A', 'Y', - '','','','']; - -Template.board.helpers({ - square: function (i) { - var g = game(); - return g && g.board && g.board[i] || SPLASH[i]; - }, - - selected: function (i) { - return Session.get('selected_' + i); - }, - - clock: function () { - var clock = game() && game().clock; - - if (!clock || clock === 0) - return; - - // format into M:SS - var min = Math.floor(clock / 60); - var sec = clock % 60; - return min + ':' + (sec < 10 ? ('0' + sec) : sec); - } -}); - -Template.board.events({ - 'click .square': function (evt) { - var textbox = $('#scratchpad input'); - // Note: Getting the letter out of the DOM is kind of a hack - var letter = evt.target.textContent || evt.target.innerText; - textbox.val(textbox.val() + letter); - textbox.focus(); - } -}); - -////// -////// scratchpad is where we enter new words. -////// - -Template.scratchpad.helpers({ - show: function () { - return game() && game().clock > 0; - } -}); - -Template.scratchpad.events({ - 'click button, keyup input': function (evt) { - var textbox = $('#scratchpad input'); - // if we clicked the button or hit enter - if ((evt.type === "click" || (evt.type === "keyup" && evt.which === 13)) - && textbox.val()) { - var word_id = Words.insert({player_id: Session.get('player_id'), - game_id: game() && game()._id, - word: textbox.val().toUpperCase(), - state: 'pending'}); - Meteor.call('score_word', word_id); - textbox.val(''); - textbox.focus(); - clear_selected_positions(); - } else { - set_selected_positions(textbox.val()); - } - } -}); - -Template.postgame.helpers({ - show: function () { - return game() && game().clock === 0; - } -}); - -Template.postgame.events({ - 'click button': function (evt) { - Players.update(Session.get('player_id'), {$set: {game_id: null}}); - } -}); - -////// -////// scores shows everyone's score and word list. -////// - -Template.scores.helpers({ - show: function () { - return !!game(); - }, - - players: function () { - return game() && game().players; - } -}); - -Template.player.helpers({ - winner: function () { - var g = game(); - if (g.winners && _.include(g.winners, this._id)) - return 'winner'; - return ''; - }, - - total_score: function () { - var words = Words.find({game_id: game() && game()._id, - player_id: this._id}); - - var score = 0; - words.forEach(function (word) { - if (word.score) - score += word.score; - }); - return score; - } -}); - -Template.words.helpers({ - words: function () { - return Words.find({game_id: game() && game()._id, - player_id: this._id}); - } -}); - - -////// -////// Initialization -////// - -Meteor.startup(function () { - // Allocate a new player id. - // - // XXX this does not handle hot reload. In the reload case, - // Session.get('player_id') will return a real id. We should check for - // a pre-existing player, and if it exists, make sure the server still - // knows about us. - var player_id = Players.insert({name: '', idle: false}); - Session.set('player_id', player_id); - - // subscribe to all the players, the game i'm in, and all - // the words in that game. - Tracker.autorun(function () { - Meteor.subscribe('players'); - - if (Session.get('player_id')) { - var me = player(); - if (me && me.game_id) { - Meteor.subscribe('games', me.game_id); - Meteor.subscribe('words', me.game_id, Session.get('player_id')); - } - } - }); - - // send keepalives so the server can tell when we go away. - // - // XXX this is not a great idiom. meteor server does not yet have a - // way to expose connection status to user code. Once it does, this - // code can go away. - Meteor.setInterval(function() { - if (Meteor.status().connected) - Meteor.call('keepalive', Session.get('player_id')); - }, 20*1000); -}); diff --git a/examples/other/wordplay/model.js b/examples/other/wordplay/model.js deleted file mode 100644 index 94d89cfc92..0000000000 --- a/examples/other/wordplay/model.js +++ /dev/null @@ -1,158 +0,0 @@ -////////// Shared code (client and server) ////////// - -Games = new Mongo.Collection('games'); -// { board: ['A','I',...], clock: 60, -// players: [{player_id, name}], winners: [player_id] } - -Words = new Mongo.Collection('words'); -// {player_id: 10, game_id: 123, word: 'hello', state: 'good', score: 4} - -Players = new Mongo.Collection('players'); -// {name: 'matt', game_id: 123} - -// 6 faces per die, 16 dice. Q really means Qu. -var DICE = ['PCHOAS', 'OATTOW', 'LRYTTE', 'VTHRWE', - 'EGHWNE', 'SEOTIS', 'ANAEEG', 'IDSYTT', - 'MTOICU', 'AFPKFS', 'XLDERI', 'ENSIEU', - 'YLDEVR', 'ZNRNHL', 'NMIQHU', 'OBBAOJ']; - -var DICTIONARY = null; - -// board is an array of length 16, in row-major order. ADJACENCIES -// lists the board positions adjacent to each board position. -var ADJACENCIES = [ - [1,4,5], - [0,2,4,5,6], - [1,3,5,6,7], - [2,6,7], - [0,1,5,8,9], - [0,1,2,4,6,8,9,10], - [1,2,3,5,7,9,10,11], - [2,3,6,10,11], - [4,5,9,12,13], - [4,5,6,8,10,12,13,14], - [5,6,7,9,11,13,14,15], - [6,7,10,14,15], - [8,9,13], - [8,9,10,12,14], - [9,10,11,13,15], - [10,11,14] -]; - -// generate a new random selection of letters. -new_board = function () { - var board = []; - var i; - - // pick random letter from each die - for (i = 0; i < 16; i += 1) { - board[i] = Random.choice(DICE[i]); - } - - // knuth shuffle - for (i = 15; i > 0; i -= 1) { - var j = Math.floor(Math.random() * (i + 1)); - var tmp = board[i]; - board[i] = board[j]; - board[j] = tmp; - } - - return board; -}; - -// returns an array of valid paths to make the specified word on the -// board. each path is an array of board positions 0-15. a valid -// path can use each position only once, and each position must be -// adjacent to the previous position. -paths_for_word = function (board, word) { - var valid_paths = []; - - var check_path = function (word, path, positions_to_try) { - // base case: the whole word has been consumed. path is valid. - if (word.length === 0) { - valid_paths.push(path); - return; - } - - // otherwise, try to match each available position against the - // first letter of the word, avoiding any positions that are - // already used by the path. for each of those matches, descend - // recursively, passing the remainder of the word, the accumulated - // path, and the positions adjacent to the match. - - for (var i = 0; i < positions_to_try.length; i++) { - var pos = positions_to_try[i]; - if (board[pos] === word[0] && _.indexOf(path, pos) === -1) - check_path(word.slice(1), // cdr of word - path.concat([pos]), // append matching loc to path - ADJACENCIES[pos]); // only look at surrounding tiles - } - }; - - // start recursive search w/ full word, empty path, and all tiles - // available for the first letter. - check_path(word, [], [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]); - - return valid_paths; -}; - -Meteor.methods({ - score_word: function (word_id) { - check(word_id, String); - var word = Words.findOne(word_id); - var game = Games.findOne(word.game_id); - - // client and server can both check that the game has time remaining, and - // that the word is at least three chars, isn't already used, and is - // possible to make on the board. - if (game.clock === 0 - || !word.word - || word.word.length < 3 - || Words.find({game_id: word.game_id, word: word.word}).count() > 1 - || paths_for_word(game.board, word.word).length === 0) { - Words.update(word._id, {$set: {score: 0, state: 'bad'}}); - return; - } - - // now only on the server, check against dictionary and score it. - if (Meteor.isServer) { - if (_.has(DICTIONARY, word.word.toLowerCase())) { - var score = Math.pow(2, word.word.length - 3); - Words.update(word._id, {$set: {score: score, state: 'good'}}); - } else { - Words.update(word._id, {$set: {score: 0, state: 'bad'}}); - } - } - } -}); - - -if (Meteor.isServer) { - DICTIONARY = {}; - _.each(Assets.getText("enable2k.txt").split("\n"), function (line) { - // Skip blanks and comment lines - if (line && line.indexOf("//") !== 0) { - DICTIONARY[line] = true; - } - }); - - // publish all the non-idle players. - Meteor.publish('players', function () { - return Players.find({idle: false}); - }); - - // publish single games - Meteor.publish('games', function (id) { - check(id, String); - return Games.find({_id: id}); - }); - - // publish all my words and opponents' words that the server has - // scored as good. - Meteor.publish('words', function (game_id, player_id) { - check(game_id, String); - check(player_id, String); - return Words.find({$or: [{game_id: game_id, state: 'good'}, - {player_id: player_id}]}); - }); -} diff --git a/examples/other/wordplay/private/enable2k.txt b/examples/other/wordplay/private/enable2k.txt deleted file mode 100644 index a6f2618e14..0000000000 --- a/examples/other/wordplay/private/enable2k.txt +++ /dev/null @@ -1,173531 +0,0 @@ -// enable2k dictionary courtesy of http://www.morewords.com/, public -// domain. includes standard inflections, which are missing in -// /usr/share/dict/words. -aa -aah -aahed -aahing -aahs -aal -aalii -aaliis -aals -aardvark -aardvarks -aardwolf -aardwolves -aargh -aarrgh -aarrghh -aas -aasvogel -aasvogels -ab -aba -abaca -abacas -abaci -aback -abacterial -abacus -abacuses -abaft -abaka -abakas -abalone -abalones -abamp -abampere -abamperes -abamps -abandon -abandoned -abandoner -abandoners -abandoning -abandonment -abandonments -abandons -abapical -abas -abase -abased -abasedly -abasement -abasements -abaser -abasers -abases -abash -abashed -abashes -abashing -abashment -abashments -abasia -abasias -abasing -abatable -abate -abated -abatement -abatements -abater -abaters -abates -abating -abatis -abatises -abator -abators -abattis -abattises -abattoir -abattoirs -abaxial -abaxile -abba -abbacies -abbacy -abbas -abbatial -abbe -abbes -abbess -abbesses -abbey -abbeys -abbot -abbotcies -abbotcy -abbots -abbreviate -abbreviated -abbreviates -abbreviating -abbreviation -abbreviations -abbreviator -abbreviators -abdicable -abdicate -abdicated -abdicates -abdicating -abdication -abdications -abdicator -abdicators -abdomen -abdomens -abdomina -abdominal -abdominally -abduce -abduced -abducens -abducent -abducentes -abduces -abducing -abduct -abducted -abductee -abductees -abducting -abduction -abductions -abductor -abductores -abductors -abducts -abeam -abecedarian -abecedarians -abed -abele -abeles -abelia -abelian -abelias -abelmosk -abelmosks -aberrance -aberrances -aberrancies -aberrancy -aberrant -aberrantly -aberrants -aberrated -aberration -aberrational -aberrations -abet -abetment -abetments -abets -abettal -abettals -abetted -abetter -abetters -abetting -abettor -abettors -abeyance -abeyances -abeyancies -abeyancy -abeyant -abfarad -abfarads -abhenries -abhenry -abhenrys -abhor -abhorred -abhorrence -abhorrences -abhorrent -abhorrently -abhorrer -abhorrers -abhorring -abhors -abidance -abidances -abide -abided -abider -abiders -abides -abiding -abidingly -abigail -abigails -abilities -ability -abiogeneses -abiogenesis -abiogenic -abiogenically -abiogenist -abiogenists -abiological -abioses -abiosis -abiotic -abiotically -abject -abjection -abjections -abjectly -abjectness -abjectnesses -abjuration -abjurations -abjure -abjured -abjurer -abjurers -abjures -abjuring -ablate -ablated -ablates -ablating -ablation -ablations -ablative -ablatively -ablatives -ablaut -ablauts -ablaze -able -ablegate -ablegates -abler -ables -ablest -ablings -ablins -abloom -abluent -abluents -ablush -abluted -ablution -ablutionary -ablutions -ably -abmho -abmhos -abnegate -abnegated -abnegates -abnegating -abnegation -abnegations -abnegator -abnegators -abnormal -abnormalities -abnormality -abnormally -abnormals -abo -aboard -abode -aboded -abodes -aboding -abohm -abohms -aboideau -aboideaus -aboideaux -aboil -aboiteau -aboiteaus -aboiteaux -abolish -abolishable -abolished -abolisher -abolishers -abolishes -abolishing -abolishment -abolishments -abolition -abolitionary -abolitionism -abolitionisms -abolitionist -abolitionists -abolitions -abolla -abollae -aboma -abomas -abomasa -abomasal -abomasi -abomasum -abomasus -abominable -abominably -abominate -abominated -abominates -abominating -abomination -abominations -abominator -abominators -aboon -aboral -aborally -aboriginal -aboriginally -aboriginals -aborigine -aborigines -aborning -abort -aborted -aborter -aborters -abortifacient -abortifacients -aborting -abortion -abortionist -abortionists -abortions -abortive -abortively -abortiveness -abortivenesses -aborts -abos -abought -aboulia -aboulias -aboulic -abound -abounded -abounding -abounds -about -above -aboveboard -aboveground -aboves -abracadabra -abracadabras -abrachia -abrachias -abradable -abradant -abradants -abrade -abraded -abrader -abraders -abrades -abrading -abrasion -abrasions -abrasive -abrasively -abrasiveness -abrasivenesses -abrasives -abreact -abreacted -abreacting -abreaction -abreactions -abreacts -abreast -abri -abridge -abridged -abridgement -abridgements -abridger -abridgers -abridges -abridging -abridgment -abridgments -abris -abroach -abroad -abrogate -abrogated -abrogates -abrogating -abrogation -abrogations -abrosia -abrosias -abrupt -abrupter -abruptest -abruption -abruptions -abruptly -abruptness -abruptnesses -abs -abscess -abscessed -abscesses -abscessing -abscise -abscised -abscises -abscisin -abscising -abscisins -abscissa -abscissae -abscissas -abscission -abscissions -abscond -absconded -absconder -absconders -absconding -absconds -abseil -abseiled -abseiling -abseils -absence -absences -absent -absented -absentee -absenteeism -absenteeisms -absentees -absenter -absenters -absenting -absently -absentminded -absentmindedly -absentmindedness -absentmindednesses -absents -absinth -absinthe -absinthes -absinths -absolute -absolutely -absoluteness -absolutenesses -absoluter -absolutes -absolutest -absolution -absolutions -absolutism -absolutisms -absolutist -absolutistic -absolutists -absolutive -absolutize -absolutized -absolutizes -absolutizing -absolve -absolved -absolver -absolvers -absolves -absolving -absonant -absorb -absorbabilities -absorbability -absorbable -absorbance -absorbances -absorbancies -absorbancy -absorbant -absorbants -absorbed -absorbencies -absorbency -absorbent -absorbents -absorber -absorbers -absorbing -absorbingly -absorbs -absorptance -absorptances -absorption -absorptions -absorptive -absorptivities -absorptivity -absquatulate -absquatulated -absquatulates -absquatulating -abstain -abstained -abstainer -abstainers -abstaining -abstains -abstemious -abstemiously -abstemiousness -abstemiousnesses -abstention -abstentions -abstentious -absterge -absterged -absterges -absterging -abstinence -abstinences -abstinent -abstinently -abstract -abstractable -abstracted -abstractedly -abstractedness -abstractednesses -abstracter -abstracters -abstractest -abstracting -abstraction -abstractional -abstractionism -abstractionisms -abstractionist -abstractionists -abstractions -abstractive -abstractly -abstractness -abstractnesses -abstractor -abstractors -abstracts -abstrict -abstricted -abstricting -abstricts -abstruse -abstrusely -abstruseness -abstrusenesses -abstruser -abstrusest -abstrusities -abstrusity -absurd -absurder -absurdest -absurdism -absurdisms -absurdist -absurdists -absurdities -absurdity -absurdly -absurdness -absurdnesses -absurds -abubble -abuilding -abulia -abulias -abulic -abundance -abundances -abundant -abundantly -abusable -abuse -abused -abuser -abusers -abuses -abusing -abusive -abusively -abusiveness -abusivenesses -abut -abutilon -abutilons -abutment -abutments -abuts -abuttal -abuttals -abutted -abutter -abutters -abutting -abuzz -abvolt -abvolts -abwatt -abwatts -aby -abye -abyes -abying -abys -abysm -abysmal -abysmally -abysms -abyss -abyssal -abysses -acacia -acacias -academe -academes -academia -academias -academic -academical -academically -academician -academicians -academicism -academicisms -academics -academies -academism -academisms -academy -acajou -acajous -acaleph -acalephae -acalephe -acalephes -acalephs -acanthi -acanthocephalan -acanthocephalans -acanthus -acanthuses -acapnia -acapnias -acari -acariases -acariasis -acaricidal -acaricide -acaricides -acarid -acaridan -acaridans -acarids -acarine -acarines -acaroid -acarpous -acarus -acatalectic -acatalectics -acaudal -acaudate -acaulescent -acauline -acaulose -acaulous -accede -acceded -acceder -acceders -accedes -acceding -accelerando -accelerandos -accelerant -accelerants -accelerate -accelerated -accelerates -accelerating -acceleratingly -acceleration -accelerations -accelerative -accelerator -accelerators -accelerometer -accelerometers -accent -accented -accenting -accentless -accentor -accentors -accents -accentual -accentually -accentuate -accentuated -accentuates -accentuating -accentuation -accentuations -accept -acceptabilities -acceptability -acceptable -acceptableness -acceptablenesses -acceptably -acceptance -acceptances -acceptant -acceptation -acceptations -accepted -acceptedly -acceptee -acceptees -accepter -accepters -accepting -acceptingly -acceptingness -acceptingnesses -acceptive -acceptor -acceptors -accepts -access -accessaries -accessary -accessed -accesses -accessibilities -accessibility -accessible -accessibleness -accessiblenesses -accessibly -accessing -accession -accessional -accessioned -accessioning -accessions -accessorial -accessories -accessorise -accessorised -accessorises -accessorising -accessorize -accessorized -accessorizes -accessorizing -accessory -acciaccatura -acciaccaturas -acciaccature -accidence -accidences -accident -accidental -accidentally -accidentalness -accidentalnesses -accidentals -accidently -accidents -accidia -accidias -accidie -accidies -accipiter -accipiters -accipitrine -accipitrines -acclaim -acclaimed -acclaimer -acclaimers -acclaiming -acclaims -acclamation -acclamations -acclimate -acclimated -acclimates -acclimating -acclimation -acclimations -acclimatise -acclimatised -acclimatises -acclimatising -acclimatization -acclimatizations -acclimatize -acclimatized -acclimatizer -acclimatizers -acclimatizes -acclimatizing -acclivities -acclivity -accolade -accolades -accommodate -accommodated -accommodates -accommodating -accommodatingly -accommodation -accommodational -accommodationist -accommodationists -accommodations -accommodative -accommodativeness -accommodativenesses -accommodator -accommodators -accompanied -accompanies -accompaniment -accompaniments -accompanist -accompanists -accompany -accompanying -accomplice -accomplices -accomplish -accomplishable -accomplished -accomplisher -accomplishers -accomplishes -accomplishing -accomplishment -accomplishments -accord -accordance -accordances -accordant -accordantly -accorded -accorder -accorders -according -accordingly -accordion -accordionist -accordionists -accordions -accords -accost -accosted -accosting -accosts -accouchement -accouchements -accoucheur -accoucheurs -account -accountabilities -accountability -accountable -accountableness -accountablenesses -accountably -accountancies -accountancy -accountant -accountants -accountantship -accountantships -accounted -accounting -accountings -accounts -accouter -accoutered -accoutering -accouterment -accouterments -accouters -accoutre -accoutred -accoutrement -accoutrements -accoutres -accoutring -accredit -accreditable -accreditation -accreditations -accredited -accrediting -accredits -accrete -accreted -accretes -accreting -accretion -accretionary -accretions -accretive -accruable -accrual -accruals -accrue -accrued -accruement -accruements -accrues -accruing -acculturate -acculturated -acculturates -acculturating -acculturation -acculturational -acculturations -acculturative -accumulate -accumulated -accumulates -accumulating -accumulation -accumulations -accumulative -accumulatively -accumulativeness -accumulativenesses -accumulator -accumulators -accuracies -accuracy -accurate -accurately -accurateness -accuratenesses -accursed -accursedly -accursedness -accursednesses -accurst -accusal -accusals -accusant -accusants -accusation -accusations -accusative -accusatives -accusatory -accuse -accused -accuser -accusers -accuses -accusing -accusingly -accustom -accustomation -accustomations -accustomed -accustomedness -accustomednesses -accustoming -accustoms -ace -aced -acedia -acedias -aceldama -aceldamas -acellular -acentric -acephalous -acequia -acequias -acerate -acerated -acerb -acerbate -acerbated -acerbates -acerbating -acerber -acerbest -acerbic -acerbically -acerbities -acerbity -acerola -acerolas -acerose -acerous -acervate -acervuli -acervulus -aces -acescent -acescents -aceta -acetabula -acetabular -acetabulum -acetabulums -acetal -acetaldehyde -acetaldehydes -acetals -acetamid -acetamide -acetamides -acetamids -acetaminophen -acetaminophens -acetanilid -acetanilide -acetanilides -acetanilids -acetate -acetated -acetates -acetazolamide -acetazolamides -acetic -acetification -acetifications -acetified -acetifies -acetify -acetifying -acetin -acetins -acetone -acetones -acetonic -acetonitrile -acetonitriles -acetophenetidin -acetophenetidins -acetose -acetous -acetoxyl -acetoxyls -acetum -acetyl -acetylate -acetylated -acetylates -acetylating -acetylation -acetylations -acetylative -acetylcholine -acetylcholines -acetylcholinesterase -acetylcholinesterases -acetylene -acetylenes -acetylenic -acetylic -acetyls -acetylsalicylate -acetylsalicylates -achalasia -achalasias -ache -ached -achene -achenes -achenial -aches -achier -achiest -achievable -achieve -achieved -achievement -achievements -achiever -achievers -achieves -achieving -achillea -achilleas -achiness -achinesses -aching -achingly -achiote -achiotes -achlorhydria -achlorhydrias -achlorhydric -acholia -acholias -achondrite -achondrites -achondritic -achondroplasia -achondroplasias -achondroplastic -achoo -achromat -achromatic -achromatically -achromatism -achromatisms -achromatize -achromatized -achromatizes -achromatizing -achromats -achromic -achy -acicula -aciculae -acicular -aciculas -aciculum -aciculums -acid -acidemia -acidemias -acidhead -acidheads -acidic -acidification -acidifications -acidified -acidifier -acidifiers -acidifies -acidify -acidifying -acidimeter -acidimeters -acidimetric -acidimetries -acidimetry -acidities -acidity -acidly -acidness -acidnesses -acidophil -acidophile -acidophiles -acidophilic -acidophils -acidoses -acidosis -acidotic -acids -acidulate -acidulated -acidulates -acidulating -acidulation -acidulations -acidulent -acidulous -aciduria -acidurias -acidy -acierate -acierated -acierates -acierating -aciform -acinar -acing -acini -acinic -acinose -acinous -acinus -ackee -ackees -acknowledge -acknowledged -acknowledgedly -acknowledgement -acknowledgements -acknowledges -acknowledging -acknowledgment -acknowledgments -aclinic -acmatic -acme -acmes -acmic -acne -acned -acnes -acnode -acnodes -acock -acoelomate -acoelomates -acold -acolyte -acolytes -aconite -aconites -aconitic -aconitum -aconitums -acorn -acorns -acoustic -acoustical -acoustically -acoustician -acousticians -acoustics -acquaint -acquaintance -acquaintances -acquaintanceship -acquaintanceships -acquainted -acquainting -acquaints -acquest -acquests -acquiesce -acquiesced -acquiescence -acquiescences -acquiescent -acquiescently -acquiesces -acquiescing -acquirable -acquire -acquired -acquirement -acquirements -acquirer -acquirers -acquires -acquiring -acquisition -acquisitional -acquisitions -acquisitive -acquisitively -acquisitiveness -acquisitivenesses -acquisitor -acquisitors -acquit -acquits -acquittal -acquittals -acquittance -acquittances -acquitted -acquitter -acquitters -acquitting -acrasia -acrasias -acrasin -acrasins -acre -acreage -acreages -acred -acres -acrid -acrider -acridest -acridine -acridines -acridities -acridity -acridly -acridness -acridnesses -acriflavine -acriflavines -acrimonies -acrimonious -acrimoniously -acrimoniousness -acrimoniousnesses -acrimony -acritarch -acritarchs -acrobat -acrobatic -acrobatically -acrobatics -acrobats -acrocentric -acrocentrics -acrodont -acrodonts -acrogen -acrogens -acrolect -acrolects -acrolein -acroleins -acrolith -acroliths -acromegalic -acromegalics -acromegalies -acromegaly -acromia -acromial -acromion -acromions -acronic -acronym -acronymic -acronymically -acronyms -acropetal -acropetally -acrophobe -acrophobes -acrophobia -acrophobias -acropolis -acropolises -acrosomal -acrosome -acrosomes -across -acrostic -acrostical -acrostically -acrostics -acrotic -acrotism -acrotisms -acrylamide -acrylamides -acrylate -acrylates -acrylic -acrylics -acrylonitrile -acrylonitriles -act -acta -actabilities -actability -actable -acted -actin -actinal -acting -actings -actinia -actiniae -actinian -actinians -actinias -actinic -actinically -actinide -actinides -actinism -actinisms -actinium -actiniums -actinoid -actinoids -actinolite -actinolites -actinometer -actinometers -actinometric -actinometries -actinometry -actinomorphic -actinomorphies -actinomorphy -actinomyces -actinomycete -actinomycetes -actinomycetous -actinomycin -actinomycins -actinomycoses -actinomycosis -actinomycotic -actinon -actinons -actins -action -actionable -actionably -actionless -actions -activate -activated -activates -activating -activation -activations -activator -activators -active -actively -activeness -activenesses -actives -activism -activisms -activist -activistic -activists -activities -activity -activize -activized -activizes -activizing -actomyosin -actomyosins -actor -actorish -actors -actress -actresses -actressy -acts -actual -actualities -actuality -actualization -actualizations -actualize -actualized -actualizes -actualizing -actually -actuarial -actuarially -actuaries -actuary -actuate -actuated -actuates -actuating -actuation -actuations -actuator -actuators -acuate -acuities -acuity -aculeate -aculei -aculeus -acumen -acumens -acuminate -acupressure -acupressures -acupuncture -acupunctures -acupuncturist -acupuncturists -acutance -acutances -acute -acutely -acuteness -acutenesses -acuter -acutes -acutest -acyclic -acyclovir -acyclovirs -acyl -acylate -acylated -acylates -acylating -acylation -acylations -acyloin -acyloins -acyls -ad -adage -adages -adagial -adagio -adagios -adamance -adamances -adamancies -adamancy -adamant -adamantine -adamantly -adamants -adamsite -adamsites -adapt -adaptabilities -adaptability -adaptable -adaptation -adaptational -adaptationally -adaptations -adapted -adaptedness -adaptednesses -adapter -adapters -adapting -adaption -adaptions -adaptive -adaptively -adaptiveness -adaptivenesses -adaptivities -adaptivity -adaptor -adaptors -adapts -adaxial -add -addable -addax -addaxes -added -addedly -addend -addenda -addends -addendum -adder -adders -addible -addict -addicted -addicting -addiction -addictions -addictive -addicts -adding -addition -additional -additionally -additions -additive -additively -additives -additivities -additivity -additory -addle -addled -addlepated -addles -addling -address -addressabilities -addressability -addressable -addressed -addressee -addressees -addresser -addressers -addresses -addressing -addrest -adds -adduce -adduced -adducent -adducer -adducers -adduces -adducing -adduct -adducted -adducting -adduction -adductions -adductive -adductor -adductors -adducts -adeem -adeemed -adeeming -adeems -adenine -adenines -adenitis -adenitises -adenocarcinoma -adenocarcinomas -adenocarcinomata -adenocarcinomatous -adenohypophyseal -adenohypophyses -adenohypophysial -adenohypophysis -adenoid -adenoidal -adenoids -adenoma -adenomas -adenomata -adenomatous -adenoses -adenosine -adenosines -adenosis -adenoviral -adenovirus -adenoviruses -adenyl -adenyls -adept -adepter -adeptest -adeptly -adeptness -adeptnesses -adepts -adequacies -adequacy -adequate -adequately -adequateness -adequatenesses -adhere -adhered -adherence -adherences -adherend -adherends -adherent -adherently -adherents -adherer -adherers -adheres -adhering -adhesion -adhesional -adhesions -adhesive -adhesively -adhesiveness -adhesivenesses -adhesives -adhibit -adhibited -adhibiting -adhibits -adiabatic -adiabatically -adieu -adieus -adieux -adios -adipic -adipocyte -adipocytes -adipose -adiposes -adiposis -adiposities -adiposity -adipous -adit -adits -adjacencies -adjacency -adjacent -adjacently -adjectival -adjectivally -adjective -adjectively -adjectives -adjoin -adjoined -adjoining -adjoins -adjoint -adjoints -adjourn -adjourned -adjourning -adjournment -adjournments -adjourns -adjudge -adjudged -adjudges -adjudging -adjudicate -adjudicated -adjudicates -adjudicating -adjudication -adjudications -adjudicative -adjudicator -adjudicators -adjudicatory -adjunct -adjunction -adjunctions -adjunctive -adjunctly -adjuncts -adjuration -adjurations -adjuratory -adjure -adjured -adjurer -adjurers -adjures -adjuring -adjuror -adjurors -adjust -adjustabilities -adjustability -adjustable -adjusted -adjuster -adjusters -adjusting -adjustive -adjustment -adjustmental -adjustments -adjustor -adjustors -adjusts -adjutancies -adjutancy -adjutant -adjutants -adjuvant -adjuvants -adman -admass -admasses -admeasure -admeasured -admeasurement -admeasurements -admeasures -admeasuring -admen -administer -administered -administering -administers -administrable -administrant -administrants -administrate -administrated -administrates -administrating -administration -administrations -administrative -administratively -administrator -administrators -administratrices -administratrix -admirabilities -admirability -admirable -admirableness -admirablenesses -admirably -admiral -admirals -admiralties -admiralty -admiration -admirations -admire -admired -admirer -admirers -admires -admiring -admiringly -admissibilities -admissibility -admissible -admission -admissions -admissive -admit -admits -admittance -admittances -admitted -admittedly -admitter -admitters -admitting -admix -admixed -admixes -admixing -admixt -admixture -admixtures -admonish -admonished -admonisher -admonishers -admonishes -admonishing -admonishingly -admonishment -admonishments -admonition -admonitions -admonitorily -admonitory -adnate -adnation -adnations -adnexa -adnexal -adnoun -adnouns -ado -adobe -adobelike -adobes -adobo -adobos -adolescence -adolescences -adolescent -adolescently -adolescents -adonis -adonises -adopt -adoptabilities -adoptability -adoptable -adopted -adoptee -adoptees -adopter -adopters -adoptianism -adoptianisms -adopting -adoption -adoptionism -adoptionisms -adoptionist -adoptionists -adoptions -adoptive -adoptively -adopts -adorabilities -adorability -adorable -adorableness -adorablenesses -adorably -adoration -adorations -adore -adored -adorer -adorers -adores -adoring -adoringly -adorn -adorned -adorner -adorners -adorning -adornment -adornments -adorns -ados -adown -adoze -adrenal -adrenalectomies -adrenalectomized -adrenalectomy -adrenaline -adrenalines -adrenalized -adrenals -adrenergic -adrenergically -adrenochrome -adrenochromes -adrenocortical -adrenocorticosteroid -adrenocorticosteroids -adrenocorticotrophic -adrenocorticotrophin -adrenocorticotrophins -adrenocorticotropic -adrenocorticotropin -adrenocorticotropins -adrift -adroit -adroiter -adroitest -adroitly -adroitness -adroitnesses -ads -adscititious -adscript -adscripts -adsorb -adsorbable -adsorbate -adsorbates -adsorbed -adsorbent -adsorbents -adsorber -adsorbers -adsorbing -adsorbs -adsorption -adsorptions -adsorptive -adularia -adularias -adulate -adulated -adulates -adulating -adulation -adulations -adulator -adulators -adulatory -adult -adulterant -adulterants -adulterate -adulterated -adulterates -adulterating -adulteration -adulterations -adulterator -adulterators -adulterer -adulterers -adulteress -adulteresses -adulteries -adulterine -adulterous -adulterously -adultery -adulthood -adulthoods -adultlike -adultly -adultness -adultnesses -adults -adumbral -adumbrate -adumbrated -adumbrates -adumbrating -adumbration -adumbrations -adumbrative -adumbratively -adunc -aduncate -aduncous -adust -advance -advanced -advancement -advancements -advancer -advancers -advances -advancing -advantage -advantaged -advantageous -advantageously -advantageousness -advantageousnesses -advantages -advantaging -advect -advected -advecting -advection -advections -advective -advects -advent -adventitia -adventitial -adventitias -adventitious -adventitiously -adventive -adventives -advents -adventure -adventured -adventurer -adventurers -adventures -adventuresome -adventuresomeness -adventuresomenesses -adventuress -adventuresses -adventuring -adventurism -adventurisms -adventurist -adventuristic -adventurists -adventurous -adventurously -adventurousness -adventurousnesses -adverb -adverbial -adverbially -adverbials -adverbs -adversarial -adversaries -adversariness -adversarinesses -adversary -adversative -adversatively -adversatives -adverse -adversely -adverseness -adversenesses -adversities -adversity -advert -adverted -advertence -advertences -advertencies -advertency -advertent -advertently -adverting -advertise -advertised -advertisement -advertisements -advertiser -advertisers -advertises -advertising -advertisings -advertize -advertized -advertizement -advertizements -advertizes -advertizing -advertorial -advertorials -adverts -advice -advices -advisabilities -advisability -advisable -advisableness -advisablenesses -advisably -advise -advised -advisedly -advisee -advisees -advisement -advisements -adviser -advisers -advises -advising -advisor -advisories -advisors -advisory -advocacies -advocacy -advocate -advocated -advocates -advocating -advocation -advocations -advocative -advocator -advocators -advowson -advowsons -adynamia -adynamias -adynamic -adyta -adytum -adz -adze -adzes -adzuki -adzukis -ae -aecia -aecial -aecidia -aecidial -aecidium -aeciospore -aeciospores -aecium -aedes -aedile -aediles -aedine -aegis -aegises -aeneous -aeneus -aeolian -aeon -aeonian -aeonic -aeons -aepyornis -aepyornises -aequorin -aequorins -aerate -aerated -aerates -aerating -aeration -aerations -aerator -aerators -aerenchyma -aerenchymas -aerenchymata -aerial -aerialist -aerialists -aerially -aerials -aerie -aeried -aerier -aeries -aeriest -aerified -aerifies -aeriform -aerify -aerifying -aerily -aero -aerobatic -aerobatics -aerobe -aerobes -aerobia -aerobic -aerobically -aerobicize -aerobicized -aerobicizes -aerobicizing -aerobics -aerobiological -aerobiologies -aerobiology -aerobioses -aerobiosis -aerobium -aerobrake -aerobraked -aerobrakes -aerobraking -aerodrome -aerodromes -aeroduct -aeroducts -aerodynamic -aerodynamical -aerodynamically -aerodynamicist -aerodynamicists -aerodynamics -aerodyne -aerodynes -aeroelastic -aeroelasticities -aeroelasticity -aeroembolism -aeroembolisms -aerofoil -aerofoils -aerogel -aerogels -aerogram -aerogramme -aerogrammes -aerograms -aerolite -aerolites -aerolith -aeroliths -aerologies -aerology -aeromagnetic -aeromechanics -aeromedical -aeromedicine -aeromedicines -aerometer -aerometers -aeronaut -aeronautic -aeronautical -aeronautically -aeronautics -aeronauts -aeronomer -aeronomers -aeronomic -aeronomical -aeronomies -aeronomist -aeronomists -aeronomy -aeroplane -aeroplanes -aerosat -aerosats -aerosol -aerosolization -aerosolizations -aerosolize -aerosolized -aerosolizes -aerosolizing -aerosols -aerospace -aerospaces -aerostat -aerostatics -aerostats -aerothermodynamic -aerothermodynamics -aerugo -aerugos -aery -aesthete -aesthetes -aesthetic -aesthetical -aesthetically -aesthetician -aestheticians -aestheticism -aestheticisms -aestheticize -aestheticized -aestheticizes -aestheticizing -aesthetics -aestival -aestivate -aestivated -aestivates -aestivating -aestivation -aestivations -aether -aetheric -aethers -aetiologies -aetiology -afar -afars -afeard -afeared -afebrile -aff -affabilities -affability -affable -affably -affair -affaire -affaires -affairs -affect -affectabilities -affectability -affectable -affectation -affectations -affected -affectedly -affectedness -affectednesses -affecter -affecters -affecting -affectingly -affection -affectional -affectionally -affectionate -affectionately -affectioned -affectionless -affections -affective -affectively -affectivities -affectivity -affectless -affectlessness -affectlessnesses -affects -affenpinscher -affenpinschers -afferent -afferently -afferents -affiance -affianced -affiances -affiancing -affiant -affiants -affiche -affiches -afficionado -afficionados -affidavit -affidavits -affiliate -affiliated -affiliates -affiliating -affiliation -affiliations -affinal -affine -affined -affinely -affines -affinities -affinity -affirm -affirmable -affirmance -affirmances -affirmation -affirmations -affirmative -affirmatively -affirmatives -affirmed -affirmer -affirmers -affirming -affirms -affix -affixable -affixal -affixation -affixations -affixed -affixer -affixers -affixes -affixial -affixing -affixment -affixments -afflatus -afflatuses -afflict -afflicted -afflicting -affliction -afflictions -afflictive -afflictively -afflicts -affluence -affluences -affluencies -affluency -affluent -affluently -affluents -afflux -affluxes -afford -affordabilities -affordability -affordable -affordably -afforded -affording -affords -afforest -afforestation -afforestations -afforested -afforesting -afforests -affray -affrayed -affrayer -affrayers -affraying -affrays -affricate -affricates -affricative -affricatives -affright -affrighted -affrighting -affrights -affront -affronted -affronting -affronts -affusion -affusions -afghan -afghani -afghanis -afghans -aficionada -aficionadas -aficionado -aficionados -afield -afire -aflame -aflatoxin -aflatoxins -afloat -aflutter -afoot -afore -aforementioned -aforesaid -aforethought -afoul -afraid -afreet -afreets -afresh -afrit -afrits -aft -after -afterbirth -afterbirths -afterburner -afterburners -aftercare -aftercares -afterclap -afterclaps -afterdeck -afterdecks -aftereffect -aftereffects -afterglow -afterglows -afterimage -afterimages -afterlife -afterlives -aftermarket -aftermarkets -aftermath -aftermaths -aftermost -afternoon -afternoons -afterpiece -afterpieces -afters -aftershave -aftershaves -aftershock -aftershocks -aftertaste -aftertastes -aftertax -afterthought -afterthoughts -aftertime -aftertimes -afterward -afterwards -afterword -afterwords -afterworld -afterworlds -aftmost -aftosa -aftosas -ag -aga -again -against -agalloch -agallochs -agalwood -agalwoods -agama -agamas -agamete -agametes -agamic -agammaglobulinemia -agammaglobulinemias -agammaglobulinemic -agamospermies -agamospermy -agamous -agapae -agapai -agapanthus -agapanthuses -agape -agapeic -agar -agaric -agarics -agarose -agaroses -agars -agas -agate -agates -agatize -agatized -agatizes -agatizing -agatoid -agave -agaves -agaze -age -aged -agedly -agedness -agednesses -agee -ageing -ageings -ageism -ageisms -ageist -ageists -ageless -agelessly -agelessness -agelessnesses -agelong -agencies -agency -agenda -agendaless -agendas -agendum -agendums -agene -agenes -ageneses -agenesia -agenesias -agenesis -agenetic -agenize -agenized -agenizes -agenizing -agent -agential -agenting -agentings -agentive -agentives -agentries -agentry -agents -ager -ageratum -ageratums -agers -ages -aggadic -agger -aggers -aggie -aggies -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 -aggrade -aggraded -aggrades -aggrading -aggrandise -aggrandised -aggrandises -aggrandising -aggrandize -aggrandized -aggrandizement -aggrandizements -aggrandizer -aggrandizers -aggrandizes -aggrandizing -aggravate -aggravated -aggravates -aggravating -aggravation -aggravations -aggregate -aggregated -aggregately -aggregateness -aggregatenesses -aggregates -aggregating -aggregation -aggregational -aggregations -aggregative -aggregatively -aggress -aggressed -aggresses -aggressing -aggression -aggressions -aggressive -aggressively -aggressiveness -aggressivenesses -aggressivities -aggressivity -aggressor -aggressors -aggrieve -aggrieved -aggrievedly -aggrievement -aggrievements -aggrieves -aggrieving -aggro -aggros -agha -aghas -aghast -agile -agilely -agilities -agility -agin -aging -agings -aginner -aginners -agio -agios -agiotage -agiotages -agism -agisms -agist -agisted -agisting -agists -agitable -agitate -agitated -agitatedly -agitates -agitating -agitation -agitational -agitations -agitative -agitato -agitator -agitators -agitprop -agitprops -aglare -agleam -aglee -aglet -aglets -agley -aglimmer -aglitter -aglow -agly -aglycon -aglycone -aglycones -aglycons -agma -agmas -agminate -agnail -agnails -agnate -agnates -agnatic -agnation -agnations -agnize -agnized -agnizes -agnizing -agnomen -agnomens -agnomina -agnosia -agnosias -agnostic -agnosticism -agnosticisms -agnostics -ago -agog -agon -agonal -agone -agones -agonic -agonies -agonise -agonised -agonises -agonising -agonist -agonistes -agonistic -agonistically -agonists -agonize -agonized -agonizes -agonizing -agonizingly -agons -agony -agora -agorae -agoraphobe -agoraphobes -agoraphobia -agoraphobias -agoraphobic -agoraphobics -agoras -agorot -agoroth -agouti -agouties -agoutis -agouty -agrafe -agrafes -agraffe -agraffes -agranulocyte -agranulocytes -agranulocytoses -agranulocytosis -agrapha -agraphia -agraphias -agraphic -agrarian -agrarianism -agrarianisms -agrarians -agravic -agree -agreeabilities -agreeability -agreeable -agreeableness -agreeablenesses -agreeably -agreed -agreeing -agreement -agreements -agrees -agrestal -agrestic -agria -agrias -agribusiness -agribusinesses -agribusinessman -agribusinessmen -agrichemical -agrichemicals -agricultural -agriculturalist -agriculturalists -agriculturally -agriculture -agricultures -agriculturist -agriculturists -agrimonies -agrimony -agrochemical -agrochemicals -agroforester -agroforesters -agroforestries -agroforestry -agrologies -agrology -agronomic -agronomically -agronomies -agronomist -agronomists -agronomy -aground -agrypnia -agrypnias -ague -aguelike -agues -agueweed -agueweeds -aguish -aguishly -ah -aha -ahchoo -ahead -ahem -ahimsa -ahimsas -ahistoric -ahistorical -ahold -aholds -ahorse -ahoy -ahull -ai -aiblins -aid -aide -aided -aider -aiders -aides -aidful -aiding -aidless -aidman -aidmen -aids -aiglet -aiglets -aigret -aigrets -aigrette -aigrettes -aiguille -aiguilles -aiguillette -aiguillettes -aikido -aikidos -ail -ailanthus -ailanthuses -ailed -aileron -ailerons -ailing -ailment -ailments -ails -ailurophile -ailurophiles -ailurophobe -ailurophobes -ailurophobia -ailurophobias -aim -aimed -aimer -aimers -aimful -aimfully -aiming -aimless -aimlessly -aimlessness -aimlessnesses -aims -ain -ains -ainsell -ainsells -aioli -aiolis -air -airbag -airbags -airboat -airboats -airborne -airbound -airbrush -airbrushed -airbrushes -airbrushing -airburst -airbursts -airbus -airbuses -airbusses -aircheck -airchecks -aircoach -aircoaches -aircraft -aircrew -aircrews -airdate -airdates -airdrome -airdromes -airdrop -airdropped -airdropping -airdrops -aired -airer -airers -airest -airfare -airfares -airfield -airfields -airflow -airflows -airfoil -airfoils -airframe -airframes -airfreight -airfreighted -airfreighting -airfreights -airglow -airglows -airhead -airheaded -airheads -airhole -airholes -airier -airiest -airily -airiness -airinesses -airing -airings -airless -airlessness -airlessnesses -airlift -airlifted -airlifting -airlifts -airlike -airline -airliner -airliners -airlines -airmail -airmailed -airmailing -airmails -airman -airmanship -airmanships -airmen -airmobile -airn -airns -airpark -airparks -airplane -airplanes -airplay -airplays -airport -airports -airpost -airposts -airpower -airpowers -airproof -airproofed -airproofing -airproofs -airs -airscape -airscapes -airscrew -airscrews -airshed -airsheds -airship -airships -airsick -airsickness -airsicknesses -airspace -airspaces -airspeed -airspeeds -airstream -airstreams -airstrike -airstrikes -airstrip -airstrips -airt -airted -airth -airthed -airthing -airths -airtight -airtightness -airtightnesses -airtime -airtimes -airting -airts -airward -airwave -airwaves -airway -airways -airwise -airwoman -airwomen -airworthier -airworthiest -airworthiness -airworthinesses -airworthy -airy -ais -aisle -aisled -aisles -aisleway -aisleways -ait -aitch -aitchbone -aitchbones -aitches -aits -aiver -aivers -ajar -ajee -ajiva -ajivas -ajowan -ajowans -ajuga -ajugas -akee -akees -akela -akelas -akene -akenes -akimbo -akin -akvavit -akvavits -al -ala -alabaster -alabasters -alabastrine -alack -alacrities -alacritous -alacrity -alae -alameda -alamedas -alamo -alamode -alamodes -alamos -alan -aland -alands -alane -alang -alanin -alanine -alanines -alanins -alans -alant -alants -alanyl -alanyls -alar -alarm -alarmed -alarming -alarmingly -alarmism -alarmisms -alarmist -alarmists -alarms -alarum -alarumed -alaruming -alarums -alary -alas -alaska -alaskas -alastor -alastors -alate -alated -alates -alation -alations -alb -alba -albacore -albacores -albas -albata -albatas -albatross -albatrosses -albedo -albedoes -albedos -albeit -albicore -albicores -albinal -albinic -albinism -albinisms -albinistic -albino -albinos -albinotic -albite -albites -albitic -albizia -albizias -albizzia -albizzias -albs -album -albumen -albumens -albumin -albuminous -albumins -albuminuria -albuminurias -albuminuric -albumose -albumoses -albums -alburnum -alburnums -alcade -alcades -alcahest -alcahests -alcaic -alcaics -alcaide -alcaides -alcalde -alcaldes -alcayde -alcaydes -alcazar -alcazars -alchemic -alchemical -alchemically -alchemies -alchemist -alchemistic -alchemistical -alchemists -alchemize -alchemized -alchemizes -alchemizing -alchemy -alchymies -alchymy -alcid -alcidine -alcids -alcohol -alcoholic -alcoholically -alcoholics -alcoholism -alcoholisms -alcohols -alcove -alcoved -alcoves -alcyonarian -alcyonarians -aldehyde -aldehydes -aldehydic -alder -alderflies -alderfly -alderman -aldermanic -aldermen -alders -alderwoman -alderwomen -aldol -aldolase -aldolases -aldolization -aldolizations -aldols -aldose -aldoses -aldosterone -aldosterones -aldosteronism -aldosteronisms -aldrin -aldrins -ale -aleatoric -aleatory -alec -alecs -alee -alef -alefs -alegar -alegars -alehouse -alehouses -alembic -alembics -alencon -alencons -aleph -alephs -alert -alerted -alerter -alertest -alerting -alertly -alertness -alertnesses -alerts -ales -aleuron -aleurone -aleurones -aleurons -alevin -alevins -alewife -alewives -alexander -alexanders -alexandrine -alexandrines -alexandrite -alexandrites -alexia -alexias -alexin -alexine -alexines -alexins -alfa -alfaki -alfakis -alfalfa -alfalfas -alfaqui -alfaquin -alfaquins -alfaquis -alfas -alfilaria -alfilarias -alforja -alforjas -alfresco -alga -algae -algaecide -algaecides -algal -algaroba -algarobas -algarroba -algarrobas -algas -algebra -algebraic -algebraically -algebraist -algebraists -algebras -algerine -algerines -algicidal -algicide -algicides -algid -algidities -algidity -algin -alginate -alginates -algins -algoid -algolagnia -algolagniac -algolagniacs -algolagnias -algological -algologies -algologist -algologists -algology -algor -algorism -algorisms -algorithm -algorithmic -algorithmically -algorithms -algors -algum -algums -alias -aliases -alibi -alibied -alibies -alibiing -alibis -alible -alicyclic -alidad -alidade -alidades -alidads -alien -alienabilities -alienability -alienable -alienage -alienages -alienate -alienated -alienates -alienating -alienation -alienations -alienator -alienators -aliened -alienee -alienees -aliener -alieners -aliening -alienism -alienisms -alienist -alienists -alienly -alienness -aliennesses -alienor -alienors -aliens -alif -aliform -alifs -alight -alighted -alighting -alightment -alightments -alights -align -aligned -aligner -aligners -aligning -alignment -alignments -aligns -alike -alikeness -alikenesses -aliment -alimentary -alimentation -alimentations -alimented -alimenting -aliments -alimonies -alimony -aline -alined -alinement -alinements -aliner -aliners -alines -alining -aliped -alipeds -aliphatic -aliquant -aliquot -aliquots -alist -alit -aliteracies -aliteracy -aliterate -aliterates -aliunde -alive -aliveness -alivenesses -aliya -aliyah -aliyahs -aliyas -aliyos -aliyot -aliyoth -alizarin -alizarins -alkahest -alkahestic -alkahests -alkali -alkalic -alkalies -alkalified -alkalifies -alkalify -alkalifying -alkalimeter -alkalimeters -alkalimetries -alkalimetry -alkalin -alkaline -alkalinities -alkalinity -alkalinization -alkalinizations -alkalinize -alkalinized -alkalinizes -alkalinizing -alkalis -alkalise -alkalised -alkalises -alkalising -alkalize -alkalized -alkalizes -alkalizing -alkaloid -alkaloidal -alkaloids -alkaloses -alkalosis -alkalotic -alkane -alkanes -alkanet -alkanets -alkene -alkenes -alkies -alkine -alkines -alkoxide -alkoxides -alkoxy -alky -alkyd -alkyds -alkyl -alkylate -alkylated -alkylates -alkylating -alkylation -alkylations -alkylic -alkyls -alkyne -alkynes -all -allanite -allanites -allantoic -allantoides -allantoin -allantoins -allantois -allargando -allay -allayed -allayer -allayers -allaying -allays -allee -allees -allegation -allegations -allege -alleged -allegedly -alleger -allegers -alleges -allegiance -allegiances -allegiant -alleging -allegorical -allegorically -allegoricalness -allegoricalnesses -allegories -allegorise -allegorised -allegorises -allegorising -allegorist -allegorists -allegorization -allegorizations -allegorize -allegorized -allegorizer -allegorizers -allegorizes -allegorizing -allegory -allegretto -allegrettos -allegro -allegros -allele -alleles -allelic -allelism -allelisms -allelomorph -allelomorphic -allelomorphism -allelomorphisms -allelomorphs -allelopathic -allelopathies -allelopathy -alleluia -alleluias -allemande -allemandes -allergen -allergenic -allergenicities -allergenicity -allergens -allergic -allergies -allergin -allergins -allergist -allergists -allergy -allethrin -allethrins -alleviate -alleviated -alleviates -alleviating -alleviation -alleviations -alleviator -alleviators -alley -alleys -alleyway -alleyways -allheal -allheals -alliable -alliaceous -alliance -alliances -allicin -allicins -allied -allies -alligator -alligators -alliterate -alliterated -alliterates -alliterating -alliteration -alliterations -alliterative -alliteratively -allium -alliums -alloantibodies -alloantibody -alloantigen -alloantigens -allobar -allobars -allocable -allocatable -allocate -allocated -allocates -allocating -allocation -allocations -allocator -allocators -allocution -allocutions -allod -allodia -allodial -allodium -allods -allogamies -allogamous -allogamy -allogeneic -allogenic -allograft -allografted -allografting -allografts -allograph -allographic -allographs -allometric -allometries -allometry -allomorph -allomorphic -allomorphism -allomorphisms -allomorphs -allonge -allonges -allonym -allonyms -allopath -allopaths -allopatric -allopatrically -allopatries -allopatry -allophane -allophanes -allophone -allophones -allophonic -allopolyploid -allopolyploidies -allopolyploids -allopolyploidy -allopurinol -allopurinols -allosaurus -allosauruses -allosteric -allosterically -allosteries -allostery -allot -allotetraploid -allotetraploidies -allotetraploids -allotetraploidy -allotment -allotments -allotrope -allotropes -allotropic -allotropies -allotropy -allots -allotted -allottee -allottees -allotter -allotters -allotting -allotype -allotypes -allotypic -allotypically -allotypies -allotypy -allover -allovers -allow -allowable -allowably -allowance -allowanced -allowances -allowancing -allowed -allowedly -allowing -allows -alloxan -alloxans -alloy -alloyed -alloying -alloys -alls -allseed -allseeds -allspice -allspices -allude -alluded -alludes -alluding -allure -allured -allurement -allurements -allurer -allurers -allures -alluring -alluringly -allusion -allusions -allusive -allusively -allusiveness -allusivenesses -alluvia -alluvial -alluvials -alluvion -alluvions -alluvium -alluviums -ally -allying -allyl -allylic -allyls -alma -almagest -almagests -almah -almahs -almanac -almanacs -almandine -almandines -almandite -almandites -almas -alme -almeh -almehs -almemar -almemars -almes -almightiness -almightinesses -almighty -almner -almners -almond -almonds -almoner -almoners -almonries -almonry -almost -alms -almsgiver -almsgivers -almsgiving -almsgivings -almshouse -almshouses -almsman -almsmen -almuce -almuces -almud -almude -almudes -almuds -almug -almugs -alnico -alnicoes -alnicos -alodia -alodial -alodium -aloe -aloes -aloetic -aloft -alogical -alogically -aloha -alohas -aloin -aloins -alone -aloneness -alonenesses -along -alongshore -alongside -aloof -aloofly -aloofness -aloofnesses -alopecia -alopecias -alopecic -aloud -alow -alp -alpaca -alpacas -alpenglow -alpenglows -alpenhorn -alpenhorns -alpenstock -alpenstocks -alpha -alphabet -alphabeted -alphabetic -alphabetical -alphabetically -alphabeting -alphabetization -alphabetizations -alphabetize -alphabetized -alphabetizer -alphabetizers -alphabetizes -alphabetizing -alphabets -alphameric -alphanumeric -alphanumerical -alphanumerically -alphanumerics -alphas -alphorn -alphorns -alphosis -alphosises -alphyl -alphyls -alpine -alpinely -alpines -alpinism -alpinisms -alpinist -alpinists -alps -already -alright -als -alsike -alsikes -also -alt -altar -altarpiece -altarpieces -altars -altazimuth -altazimuths -alter -alterabilities -alterability -alterable -alterably -alterant -alterants -alteration -alterations -altercate -altercated -altercates -altercating -altercation -altercations -altered -alterer -alterers -altering -alternate -alternated -alternately -alternates -alternating -alternation -alternations -alternative -alternatively -alternativeness -alternativenesses -alternatives -alternator -alternators -alters -althaea -althaeas -althea -altheas -altho -althorn -althorns -although -altimeter -altimeters -altimetries -altimetry -altiplano -altiplanos -altitude -altitudes -altitudinal -altitudinous -alto -altocumuli -altocumulus -altogether -altogethers -altoist -altoists -altos -altostrati -altostratus -altricial -altruism -altruisms -altruist -altruistic -altruistically -altruists -alts -aludel -aludels -alula -alulae -alular -alum -alumin -alumina -aluminas -aluminate -aluminates -alumine -alumines -aluminic -aluminium -aluminiums -aluminize -aluminized -aluminizes -aluminizing -aluminosilicate -aluminosilicates -aluminous -alumins -aluminum -aluminums -alumna -alumnae -alumni -alumnus -alumroot -alumroots -alums -alunite -alunites -alveolar -alveolarly -alveolars -alveolate -alveoli -alveolus -alvine -alway -always -alyssum -alyssums -am -ama -amadavat -amadavats -amadou -amadous -amah -amahs -amain -amalgam -amalgamate -amalgamated -amalgamates -amalgamating -amalgamation -amalgamations -amalgamator -amalgamators -amalgams -amandine -amanita -amanitas -amanitin -amanitins -amantadine -amantadines -amanuenses -amanuensis -amaranth -amaranthine -amaranths -amarelle -amarelles -amaretti -amaretto -amarettos -amarna -amaryllis -amaryllises -amas -amass -amassed -amasser -amassers -amasses -amassing -amassment -amassments -amateur -amateurish -amateurishly -amateurishness -amateurishnesses -amateurism -amateurisms -amateurs -amative -amatively -amativeness -amativenesses -amatol -amatols -amatory -amauroses -amaurosis -amaurotic -amaze -amazed -amazedly -amazement -amazements -amazes -amazing -amazingly -amazon -amazonite -amazonites -amazons -amazonstone -amazonstones -ambage -ambages -ambari -ambaries -ambaris -ambary -ambassador -ambassadorial -ambassadors -ambassadorship -ambassadorships -ambassadress -ambassadresses -ambeer -ambeers -amber -ambergris -ambergrises -amberies -amberina -amberinas -amberjack -amberjacks -amberoid -amberoids -ambers -ambery -ambiance -ambiances -ambidexterities -ambidexterity -ambidextrous -ambidextrously -ambience -ambiences -ambient -ambients -ambiguities -ambiguity -ambiguous -ambiguously -ambiguousness -ambiguousnesses -ambisexual -ambisexualities -ambisexuality -ambisexuals -ambit -ambition -ambitioned -ambitioning -ambitionless -ambitions -ambitious -ambitiously -ambitiousness -ambitiousnesses -ambits -ambivalence -ambivalences -ambivalent -ambivalently -ambiversion -ambiversions -ambivert -ambiverts -amble -ambled -ambler -amblers -ambles -ambling -amblygonite -amblygonites -amblyopia -amblyopias -amblyopic -ambo -amboina -amboinas -ambones -ambos -amboyna -amboynas -ambries -ambroid -ambroids -ambrosia -ambrosial -ambrosially -ambrosias -ambrotype -ambrotypes -ambry -ambsace -ambsaces -ambulacra -ambulacral -ambulacrum -ambulance -ambulances -ambulant -ambulate -ambulated -ambulates -ambulating -ambulation -ambulations -ambulatories -ambulatorily -ambulatory -ambuscade -ambuscaded -ambuscader -ambuscaders -ambuscades -ambuscading -ambush -ambushed -ambusher -ambushers -ambushes -ambushing -ambushment -ambushments -ameba -amebae -ameban -amebas -amebean -amebiases -amebiasis -amebic -amebocyte -amebocytes -ameboid -ameer -ameerate -ameerates -ameers -amelcorn -amelcorns -ameliorate -ameliorated -ameliorates -ameliorating -amelioration -ameliorations -ameliorative -ameliorator -ameliorators -amelioratory -ameloblast -ameloblasts -amen -amenabilities -amenability -amenable -amenably -amend -amendable -amendatory -amended -amender -amenders -amending -amendment -amendments -amends -amenities -amenity -amenorrhea -amenorrheas -amenorrheic -amens -ament -amentia -amentias -amentiferous -aments -amerce -amerced -amercement -amercements -amercer -amercers -amerces -amerciable -amercing -americium -americiums -amesace -amesaces -amethyst -amethystine -amethysts -ametropia -ametropias -ametropic -ami -amia -amiabilities -amiability -amiable -amiableness -amiablenesses -amiably -amiantus -amiantuses -amias -amicabilities -amicability -amicable -amicableness -amicablenesses -amicably -amice -amices -amici -amicus -amid -amidase -amidases -amide -amides -amidic -amidin -amidine -amidines -amidins -amido -amidogen -amidogens -amidol -amidols -amidone -amidones -amids -amidship -amidships -amidst -amie -amies -amiga -amigas -amigo -amigos -amin -amine -amines -aminic -aminities -aminity -amino -aminoaciduria -aminoacidurias -aminopeptidase -aminopeptidases -aminophylline -aminophyllines -aminopterin -aminopterins -aminopyrine -aminopyrines -aminotransferase -aminotransferases -amins -amir -amirate -amirates -amirs -amis -amiss -amities -amitoses -amitosis -amitotic -amitotically -amitriptyline -amitriptylines -amitrole -amitroles -amity -ammeter -ammeters -ammine -ammines -ammino -ammo -ammocete -ammocetes -ammonal -ammonals -ammonia -ammoniac -ammoniacal -ammoniacs -ammonias -ammoniate -ammoniated -ammoniates -ammoniating -ammoniation -ammoniations -ammonic -ammonification -ammonifications -ammonified -ammonifies -ammonify -ammonifying -ammonite -ammonites -ammonitic -ammonium -ammoniums -ammono -ammonoid -ammonoids -ammos -ammunition -ammunitions -amnesia -amnesiac -amnesiacs -amnesias -amnesic -amnesics -amnestic -amnestied -amnesties -amnesty -amnestying -amnia -amnic -amnio -amniocenteses -amniocentesis -amnion -amnionic -amnions -amnios -amniote -amniotes -amniotic -amobarbital -amobarbitals -amoeba -amoebae -amoeban -amoebas -amoebean -amoebiases -amoebiasis -amoebic -amoebocyte -amoebocytes -amoeboid -amok -amoks -amole -amoles -among -amongst -amontillado -amontillados -amoral -amoralism -amoralisms -amoralities -amorality -amorally -amoretti -amoretto -amorettos -amorini -amorino -amorist -amoristic -amorists -amoroso -amorous -amorously -amorousness -amorousnesses -amorphous -amorphously -amorphousness -amorphousnesses -amort -amortise -amortised -amortises -amortising -amortizable -amortization -amortizations -amortize -amortized -amortizes -amortizing -amosite -amosites -amotion -amotions -amount -amounted -amounting -amounts -amour -amours -amoxicillin -amoxicillins -amoxycillin -amoxycillins -amp -amperage -amperages -ampere -amperes -amperometric -ampersand -ampersands -amphetamine -amphetamines -amphibia -amphibian -amphibians -amphibious -amphibiously -amphibiousness -amphibiousnesses -amphibole -amphiboles -amphibolies -amphibolite -amphibolites -amphibologies -amphibology -amphiboly -amphibrach -amphibrachic -amphibrachs -amphictyonic -amphictyonies -amphictyony -amphidiploid -amphidiploidies -amphidiploids -amphidiploidy -amphimacer -amphimacers -amphimixes -amphimixis -amphioxi -amphioxus -amphioxuses -amphipathic -amphiphile -amphiphiles -amphiphilic -amphiploid -amphiploidies -amphiploids -amphiploidy -amphipod -amphipods -amphiprostyle -amphiprostyles -amphisbaena -amphisbaenae -amphisbaenas -amphisbaenic -amphitheater -amphitheaters -amphitheatric -amphitheatrical -amphitheatrically -amphora -amphorae -amphoral -amphoras -amphoteric -ampicillin -ampicillins -ample -ampleness -amplenesses -ampler -amplest -amplexus -amplexuses -amplidyne -amplidynes -amplification -amplifications -amplified -amplifier -amplifiers -amplifies -amplify -amplifying -amplitude -amplitudes -amply -ampoule -ampoules -amps -ampul -ampule -ampules -ampulla -ampullae -ampullar -ampullary -ampuls -amputate -amputated -amputates -amputating -amputation -amputations -amputee -amputees -amreeta -amreetas -amrita -amritas -amtrac -amtrack -amtracks -amtracs -amu -amuck -amucks -amulet -amulets -amus -amusable -amuse -amused -amusedly -amusement -amusements -amuser -amusers -amuses -amusia -amusias -amusing -amusingly -amusingness -amusingnesses -amusive -amygdala -amygdalae -amygdale -amygdales -amygdalin -amygdalins -amygdaloid -amygdaloidal -amygdaloids -amygdule -amygdules -amyl -amylase -amylases -amylene -amylenes -amylic -amylogen -amylogens -amyloid -amyloidoses -amyloidosis -amyloids -amylolytic -amylopectin -amylopectins -amyloplast -amyloplasts -amylopsin -amylopsins -amylose -amyloses -amyls -amylum -amylums -amyotonia -amyotonias -an -ana -anabaena -anabaenas -anabaptism -anabaptisms -anabas -anabases -anabasis -anabatic -anableps -anablepses -anabolic -anabolism -anabolisms -anachronic -anachronism -anachronisms -anachronistic -anachronistically -anachronous -anachronously -anaclitic -anacolutha -anacoluthic -anacoluthically -anacoluthon -anacoluthons -anaconda -anacondas -anacreontic -anacreontics -anacruses -anacrusis -anadem -anadems -anadiploses -anadiplosis -anadromous -anaemia -anaemias -anaemic -anaerobe -anaerobes -anaerobic -anaerobically -anaerobioses -anaerobiosis -anaesthesia -anaesthesias -anaesthetic -anaesthetics -anageneses -anagenesis -anaglyph -anaglyphic -anaglyphs -anagnorises -anagnorisis -anagoge -anagoges -anagogic -anagogical -anagogically -anagogies -anagogy -anagram -anagrammatic -anagrammatical -anagrammatically -anagrammatization -anagrammatizations -anagrammatize -anagrammatized -anagrammatizes -anagrammatizing -anagrammed -anagramming -anagrams -anal -analcime -analcimes -analcite -analcites -analecta -analects -analemma -analemmas -analemmata -analemmatic -analeptic -analeptics -analgesia -analgesias -analgesic -analgesics -analgetic -analgetics -analgia -analgias -analities -anality -anally -analog -analogic -analogical -analogically -analogies -analogist -analogists -analogize -analogized -analogizes -analogizing -analogous -analogously -analogousness -analogousnesses -analogs -analogue -analogues -analogy -analphabet -analphabetic -analphabetics -analphabetism -analphabetisms -analphabets -analysand -analysands -analyse -analysed -analyser -analysers -analyses -analysing -analysis -analyst -analysts -analytic -analytical -analytically -analyticities -analyticity -analytics -analyzabilities -analyzability -analyzable -analyzation -analyzations -analyze -analyzed -analyzer -analyzers -analyzes -analyzing -anamneses -anamnesis -anamnestic -anamorphic -ananke -anankes -anapaest -anapaests -anapest -anapestic -anapestics -anapests -anaphase -anaphases -anaphasic -anaphor -anaphora -anaphoras -anaphoric -anaphorically -anaphors -anaphrodisiac -anaphrodisiacs -anaphylactic -anaphylactically -anaphylactoid -anaphylaxes -anaphylaxis -anaplasia -anaplasias -anaplasmoses -anaplasmosis -anaplastic -anarch -anarchic -anarchical -anarchically -anarchies -anarchism -anarchisms -anarchist -anarchistic -anarchists -anarchs -anarchy -anas -anasarca -anasarcas -anasarcous -anastigmat -anastigmatic -anastigmats -anastomose -anastomosed -anastomoses -anastomosing -anastomosis -anastomotic -anastrophe -anastrophes -anatase -anatases -anathema -anathemas -anathemata -anathematize -anathematized -anathematizes -anathematizing -anatomic -anatomical -anatomically -anatomies -anatomise -anatomised -anatomises -anatomising -anatomist -anatomists -anatomize -anatomized -anatomizes -anatomizing -anatomy -anatoxin -anatoxins -anatropous -anatto -anattos -ancestor -ancestored -ancestoring -ancestors -ancestral -ancestrally -ancestress -ancestresses -ancestries -ancestry -anchor -anchorage -anchorages -anchored -anchoress -anchoresses -anchoret -anchorets -anchoring -anchorite -anchorites -anchoritic -anchoritically -anchorless -anchorman -anchormen -anchorpeople -anchorperson -anchorpersons -anchors -anchorwoman -anchorwomen -anchoveta -anchovetas -anchovetta -anchovettas -anchovies -anchovy -anchusa -anchusas -anchusin -anchusins -ancient -ancienter -ancientest -anciently -ancientness -ancientnesses -ancientries -ancientry -ancients -ancilla -ancillae -ancillaries -ancillary -ancillas -ancon -anconal -ancone -anconeal -ancones -anconoid -ancress -ancresses -ancylostomiases -ancylostomiasis -and -andalusite -andalusites -andante -andantes -andantino -andantinos -andesite -andesites -andesitic -andesyte -andesytes -andiron -andirons -andouille -andouilles -andouillette -andouillettes -andradite -andradites -androcentric -androecia -androecium -androgen -androgeneses -androgenesis -androgenetic -androgenic -androgens -androgyne -androgynes -androgynies -androgynous -androgyny -android -androids -andromeda -andromedas -androsterone -androsterones -ands -ane -anear -aneared -anearing -anears -anecdota -anecdotage -anecdotages -anecdotal -anecdotalism -anecdotalisms -anecdotalist -anecdotalists -anecdotally -anecdote -anecdotes -anecdotic -anecdotical -anecdotically -anecdotist -anecdotists -anechoic -anelastic -anelasticities -anelasticity -anele -aneled -aneles -aneling -anemia -anemias -anemic -anemically -anemograph -anemographs -anemometer -anemometers -anemometries -anemometry -anemone -anemones -anemophilous -anemoses -anemosis -anencephalic -anencephalies -anencephaly -anenst -anent -anergia -anergias -anergic -anergies -anergy -aneroid -aneroids -anes -anesthesia -anesthesias -anesthesiologies -anesthesiologist -anesthesiologists -anesthesiology -anesthetic -anesthetically -anesthetics -anesthetist -anesthetists -anesthetize -anesthetized -anesthetizes -anesthetizing -anestri -anestrous -anestrus -anestruses -anethol -anethole -anetholes -anethols -aneuploid -aneuploidies -aneuploids -aneuploidy -aneurin -aneurins -aneurism -aneurisms -aneurysm -aneurysmal -aneurysms -anew -anfractuosities -anfractuosity -anfractuous -anga -angakok -angakoks -angaria -angarias -angaries -angary -angas -angel -angeled -angelfish -angelfishes -angelic -angelica -angelical -angelically -angelicas -angeling -angelologies -angelologist -angelologists -angelology -angels -angelus -angeluses -anger -angered -angering -angerless -angerly -angers -angina -anginal -anginas -anginose -anginous -angiocardiographic -angiocardiographies -angiocardiography -angiogeneses -angiogenesis -angiogenic -angiogram -angiograms -angiographic -angiographies -angiography -angioma -angiomas -angiomata -angiomatous -angioplasties -angioplasty -angiosperm -angiospermous -angiosperms -angiotensin -angiotensins -angle -angled -anglepod -anglepods -angler -anglerfish -anglerfishes -anglers -angles -anglesite -anglesites -angleworm -angleworms -anglice -anglicise -anglicised -anglicises -anglicising -anglicism -anglicisms -anglicization -anglicizations -anglicize -anglicized -anglicizes -anglicizing -angling -anglings -anglophone -angora -angoras -angrier -angriest -angrily -angriness -angrinesses -angry -angst -angstrom -angstroms -angsts -anguine -anguish -anguished -anguishes -anguishing -angular -angularities -angularity -angularly -angulate -angulated -angulates -angulating -angulation -angulations -angulose -angulous -anhedonia -anhedonias -anhedonic -anhinga -anhingas -anhydride -anhydrides -anhydrite -anhydrites -anhydrous -ani -anil -anile -anilin -anilinctus -anilinctuses -aniline -anilines -anilingus -anilinguses -anilins -anilities -anility -anils -anima -animadversion -animadversions -animadvert -animadverted -animadverting -animadverts -animal -animalcula -animalcule -animalcules -animalculum -animalic -animalier -animaliers -animalism -animalisms -animalistic -animalities -animality -animalization -animalizations -animalize -animalized -animalizes -animalizing -animallike -animally -animals -animas -animate -animated -animatedly -animately -animateness -animatenesses -animater -animaters -animates -animating -animation -animations -animato -animator -animators -anime -animes -animi -animis -animism -animisms -animist -animistic -animists -animosities -animosity -animus -animuses -anion -anionic -anions -anis -anise -aniseed -aniseeds -aniseikonia -aniseikonias -aniseikonic -anises -anisette -anisettes -anisic -anisogamies -anisogamous -anisogamy -anisole -anisoles -anisometropia -anisometropias -anisometropic -anisotropic -anisotropically -anisotropies -anisotropism -anisotropisms -anisotropy -ankerite -ankerites -ankh -ankhs -ankle -anklebone -anklebones -ankled -ankles -anklet -anklets -ankling -ankus -ankuses -ankush -ankushes -ankylosaur -ankylosaurs -ankylosaurus -ankylosauruses -ankylose -ankylosed -ankyloses -ankylosing -ankylosis -ankylostomiases -ankylostomiasis -ankylotic -anlace -anlaces -anlage -anlagen -anlages -anlas -anlases -anna -annal -annalist -annalistic -annalists -annals -annas -annates -annatto -annattos -anneal -annealed -annealer -annealers -annealing -anneals -annelid -annelidan -annelidans -annelids -annex -annexation -annexational -annexationist -annexationists -annexations -annexe -annexed -annexes -annexing -annihilate -annihilated -annihilates -annihilating -annihilation -annihilations -annihilator -annihilators -annihilatory -anniversaries -anniversary -annotate -annotated -annotates -annotating -annotation -annotations -annotative -annotator -annotators -announce -announced -announcement -announcements -announcer -announcers -announces -announcing -annoy -annoyance -annoyances -annoyed -annoyer -annoyers -annoying -annoyingly -annoys -annual -annualize -annualized -annualizes -annualizing -annually -annuals -annuitant -annuitants -annuities -annuity -annul -annular -annulate -annulation -annulations -annulet -annulets -annuli -annulled -annulling -annulment -annulments -annulose -annuls -annulus -annuluses -annunciate -annunciated -annunciates -annunciating -annunciation -annunciations -annunciator -annunciators -annunciatory -anoa -anoas -anodal -anodally -anode -anodes -anodic -anodically -anodization -anodizations -anodize -anodized -anodizes -anodizing -anodyne -anodynes -anodynic -anoint -anointed -anointer -anointers -anointing -anointment -anointments -anoints -anole -anoles -anolyte -anolytes -anomalies -anomalous -anomalously -anomalousness -anomalousnesses -anomaly -anomic -anomie -anomies -anomy -anon -anonym -anonymities -anonymity -anonymous -anonymously -anonymousness -anonymousnesses -anonyms -anoopsia -anoopsias -anopheles -anopheline -anophelines -anopia -anopias -anopsia -anopsias -anorak -anoraks -anorectic -anorectics -anoretic -anoretics -anorexia -anorexias -anorexic -anorexics -anorexies -anorexigenic -anorexy -anorthic -anorthite -anorthites -anorthitic -anorthosite -anorthosites -anorthositic -anosmia -anosmias -anosmic -another -anovular -anovulatory -anoxemia -anoxemias -anoxemic -anoxia -anoxias -anoxic -ansa -ansae -ansate -ansated -anserine -anserines -anserous -answer -answerable -answered -answerer -answerers -answering -answers -ant -anta -antacid -antacids -antae -antagonism -antagonisms -antagonist -antagonistic -antagonistically -antagonists -antagonize -antagonized -antagonizes -antagonizing -antalgic -antalgics -antarctic -antas -antbear -antbears -ante -anteater -anteaters -antebellum -antecede -anteceded -antecedence -antecedences -antecedent -antecedently -antecedents -antecedes -anteceding -antecessor -antecessors -antechamber -antechambers -antechapel -antechapels -antechoir -antechoirs -anted -antedate -antedated -antedates -antedating -antediluvian -antediluvians -anteed -antefix -antefixa -antefixae -antefixes -anteing -antelope -antelopes -antemortem -antenatal -antenatally -antenna -antennae -antennal -antennas -antennular -antennule -antennules -antenuptial -antepast -antepasts -antependia -antependium -antependiums -antepenult -antepenultima -antepenultimas -antepenultimate -antepenultimates -antepenults -anterior -anteriorly -anteroom -anterooms -antes -antetype -antetypes -antevert -anteverted -anteverting -anteverts -anthelia -anthelices -anthelion -anthelions -anthelix -anthelixes -anthelmintic -anthelmintics -anthem -anthemed -anthemia -antheming -anthemion -anthems -anther -antheral -antherid -antheridia -antheridial -antheridium -antherids -anthers -antheses -anthesis -anthill -anthills -anthocyan -anthocyanin -anthocyanins -anthocyans -anthodia -anthodium -anthoid -anthological -anthologies -anthologist -anthologists -anthologize -anthologized -anthologizer -anthologizers -anthologizes -anthologizing -anthology -anthophilous -anthophyllite -anthophyllites -anthozoan -anthozoans -anthracene -anthracenes -anthraces -anthracite -anthracites -anthracitic -anthracnose -anthracnoses -anthranilate -anthranilates -anthraquinone -anthraquinones -anthrax -anthropic -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 -anthurium -anthuriums -anti -antiabortion -antiabortionist -antiabortionists -antiacademic -antiacademics -antiadministration -antiaggression -antiaging -antiair -antiaircraft -antiaircrafts -antialcohol -antialcoholism -antialcoholisms -antialien -antiallergenic -antiallergenics -antianemia -antianxiety -antiapartheid -antiapartheids -antiaphrodisiac -antiaphrodisiacs -antiar -antiarin -antiarins -antiaristocratic -antiarrhythmic -antiarrhythmics -antiars -antiarthritic -antiarthritics -antiarthritis -antiassimilation -antiassimilations -antiasthma -antiatom -antiatoms -antiauthoritarian -antiauthoritarianism -antiauthoritarianisms -antiauthority -antiauxin -antiauxins -antibacklash -antibacterial -antibacterials -antibaryon -antibaryons -antibias -antibillboard -antibioses -antibiosis -antibiotic -antibiotically -antibiotics -antiblack -antiblackism -antiblackisms -antibodies -antibody -antiboss -antibourgeois -antiboycott -antiboycotts -antibug -antibureaucratic -antiburglar -antiburglary -antibusiness -antibusing -antic -anticaking -antically -anticancer -anticapitalism -anticapitalisms -anticapitalist -anticapitalists -anticar -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 -anticity -antick -anticked -anticking -anticks -anticlassical -anticlerical -anticlericalism -anticlericalisms -anticlericalist -anticlericalists -anticlericals -anticlimactic -anticlimactical -anticlimactically -anticlimax -anticlimaxes -anticlinal -anticline -anticlines -anticling -anticlockwise -anticlotting -anticly -anticoagulant -anticoagulants -anticodon -anticodons -anticold -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 -anticrack -anticreative -anticrime -anticruelty -antics -anticult -anticultural -anticyclone -anticyclones -anticyclonic -antidandruff -antidefamation -antidemocratic -antidepressant -antidepressants -antidepression -antidepressions -antiderivative -antiderivatives -antidesegregation -antidesertification -antidesiccant -antidesiccants -antidevelopment -antidiabetic -antidiabetics -antidiarrheal -antidilution -antidiscrimination -antidogmatic -antidora -antidotal -antidotally -antidote -antidoted -antidotes -antidoting -antidraft -antidromic -antidromically -antidrug -antidumping -antieconomic -antieducational -antiegalitarian -antielectron -antielectrons -antielite -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 -antifat -antifatigue -antifederalist -antifederalists -antifemale -antifeminine -antifeminism -antifeminisms -antifeminist -antifeminists -antiferromagnet -antiferromagnetic -antiferromagnetically -antiferromagnetism -antiferromagnetisms -antiferromagnets -antifertility -antifilibuster -antifilibusters -antiflu -antifluoridationist -antifluoridationists -antifoam -antifoaming -antifogging -antiforeclosure -antiforeign -antiforeigner -antiformalist -antiformalists -antifouling -antifraud -antifreeze -antifreezes -antifriction -antifrictions -antifungal -antifungals -antifur -antigambling -antigay -antigen -antigene -antigenes -antigenic -antigenically -antigenicities -antigenicity -antigens -antiglare -antiglobulin -antiglobulins -antigovernment -antigravities -antigravity -antigrowth -antiguerrilla -antiguerrillas -antigun -antihero -antiheroes -antiheroic -antiheroine -antiheroines -antiherpes -antihierarchical -antihijack -antihistamine -antihistamines -antihistaminic -antihistaminics -antihistorical -antihomosexual -antihuman -antihumanism -antihumanisms -antihumanistic -antihumanitarian -antihumanitarians -antihunter -antihunting -antihuntings -antihypertensive -antihypertensives -antihysteric -antihysterics -antijam -antijamming -antikickback -antiking -antikings -antiknock -antiknocks -antilabor -antileak -antileft -antileprosy -antilepton -antileptons -antileukemic -antiliberal -antiliberalism -antiliberalisms -antiliberals -antilibertarian -antilibertarians -antilife -antiliterate -antiliterates -antilitter -antilittering -antilock -antilog -antilogarithm -antilogarithmic -antilogarithms -antilogical -antilogies -antilogs -antilogy -antilynching -antimacassar -antimacassars -antimacho -antimagnetic -antimalaria -antimalarial -antimalarials -antimale -antiman -antimanagement -antimanagements -antimarijuana -antimarket -antimask -antimasks -antimaterialism -antimaterialisms -antimaterialist -antimaterialists -antimatter -antimatters -antimechanist -antimechanists -antimere -antimeres -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 -antimony -antimosquito -antimusical -antimycin -antimycins -antinarrative -antinational -antinationalist -antinationalists -antinatural -antinature -antinatures -antinausea -antineoplastic -antinepotism -antinepotisms -antineutrino -antineutrinos -antineutron -antineutrons -anting -antings -antinodal -antinode -antinodes -antinoise -antinomian -antinomianism -antinomianisms -antinomians -antinomic -antinomies -antinomy -antinovel -antinovelist -antinovelists -antinovels -antinuclear -antinucleon -antinucleons -antinuke -antiobesities -antiobesity -antiobscenities -antiobscenity -antiorganization -antiorganizations -antioxidant -antioxidants -antiozonant -antiozonants -antipapal -antiparallel -antiparasitic -antiparasitics -antiparticle -antiparticles -antiparty -antipasti -antipasto -antipastos -antipathetic -antipathetically -antipathies -antipathy -antiperiodic -antipersonnel -antiperspirant -antiperspirants -antipesticide -antiphlogistic -antiphon -antiphonal -antiphonally -antiphonals -antiphonaries -antiphonary -antiphonies -antiphons -antiphony -antiphrases -antiphrasis -antipill -antipiracies -antipiracy -antiplague -antiplagues -antiplaque -antipleasure -antipleasures -antipoaching -antipodal -antipodals -antipode -antipodean -antipodeans -antipodes -antipoetic -antipole -antipoles -antipolice -antipolitical -antipolitics -antipollution -antipollutions -antipope -antipopes -antipopular -antiporn -antipornographic -antipornography -antipot -antipoverty -antipredator -antipredators -antipress -antiprofiteering -antiprogressive -antiprostitution -antiproton -antiprotons -antipruritic -antipruritics -antipsychotic -antipsychotics -antipyic -antipyics -antipyreses -antipyresis -antipyretic -antipyretics -antipyrine -antipyrines -antiquarian -antiquarianism -antiquarianisms -antiquarians -antiquaries -antiquark -antiquarks -antiquary -antiquate -antiquated -antiquates -antiquating -antiquation -antiquations -antique -antiqued -antiquer -antiquers -antiques -antiquing -antiquities -antiquity -antirabies -antirachitic -antiracism -antiracisms -antiracist -antiracists -antiracketeering -antiradar -antiradical -antiradicalism -antiradicalisms -antirape -antirational -antirationalism -antirationalisms -antirationalist -antirationalists -antirationalities -antirationality -antirealism -antirealisms -antirealist -antirealists -antirecession -antirecessionary -antirecessions -antired -antireductionism -antireductionisms -antireductionist -antireductionists -antireflection -antireflective -antireform -antiregulatory -antirejection -antireligion -antireligious -antirevolutionaries -antirevolutionary -antirheumatic -antirheumatics -antiriot -antiritualism -antiritualisms -antirock -antiroll -antiromantic -antiromanticism -antiromanticisms -antiromantics -antiroyalist -antiroyalists -antirrhinum -antirrhinums -antirust -antirusts -antis -antisag -antisatellite -antischizophrenia -antischizophrenic -antiscience -antisciences -antiscientific -antiscorbutic -antiscorbutics -antisecrecy -antisegregation -antiseizure -antisense -antisentimental -antiseparatist -antiseparatists -antisepses -antisepsis -antiseptic -antiseptically -antiseptics -antisera -antiserum -antiserums -antisex -antisexist -antisexists -antisexual -antisexualities -antisexuality -antishark -antiship -antishock -antishoplifting -antiskid -antislaveries -antislavery -antisleep -antislip -antismog -antismoke -antismoker -antismokers -antismoking -antismuggling -antismut -antisnob -antisocial -antisocialist -antisocialists -antisocially -antisolar -antispasmodic -antispasmodics -antispeculation -antispeculative -antispending -antistat -antistate -antistatic -antistick -antistories -antistory -antistress -antistrike -antistrophe -antistrophes -antistrophic -antistrophically -antistudent -antisubmarine -antisubsidy -antisubversion -antisubversions -antisubversive -antisubversives -antisuicide -antisymmetric -antisyphilitic -antisyphilitics -antitakeover -antitank -antitarnish -antitax -antitechnological -antitechnologies -antitechnology -antiterrorism -antiterrorisms -antiterrorist -antiterrorists -antitheft -antitheoretical -antitheses -antithesis -antithetic -antithetical -antithetically -antithrombin -antithrombins -antithyroid -antitobacco -antitotalitarian -antitoxic -antitoxin -antitoxins -antitrades -antitraditional -antitrust -antitruster -antitrusters -antitubercular -antituberculosis -antituberculous -antitumor -antitumoral -antitussive -antitussives -antitype -antitypes -antityphoid -antiulcer -antiunemployment -antiunion -antiuniversities -antiuniversity -antiurban -antivenin -antivenins -antiviolence -antiviral -antivirus -antivitamin -antivitamins -antivivisection -antivivisectionist -antivivisectionists -antiwar -antiwear -antiweed -antiwelfare -antiwhaling -antiwhite -antiwoman -antiwrinkle -antler -antlered -antlers -antlike -antlion -antlions -antonomasia -antonomasias -antonym -antonymic -antonymies -antonymous -antonyms -antonymy -antra -antral -antre -antres -antrorse -antrum -antrums -ants -antsier -antsiest -antsy -anural -anuran -anurans -anureses -anuresis -anuretic -anuria -anurias -anuric -anurous -anus -anuses -anvil -anviled -anviling -anvilled -anvilling -anvils -anviltop -anviltops -anxieties -anxiety -anxiolytic -anxiolytics -anxious -anxiously -anxiousness -anxiousnesses -any -anybodies -anybody -anyhow -anymore -anyone -anyplace -anything -anythings -anytime -anyway -anyways -anywhere -anywheres -anywise -aorist -aoristic -aoristically -aorists -aorta -aortae -aortal -aortas -aortic -aortographic -aortographies -aortography -aoudad -aoudads -apace -apache -apaches -apagoge -apagoges -apagogic -apanage -apanages -aparejo -aparejos -apart -apartheid -apartheids -apartment -apartmental -apartments -apartness -apartnesses -apatetic -apathetic -apathetically -apathies -apathy -apatite -apatites -apatosaurus -apatosauruses -ape -apeak -aped -apeek -apelike -aper -apercu -apercus -aperient -aperients -aperies -aperiodic -aperiodically -aperiodicities -aperiodicity -aperitif -aperitifs -apers -aperture -apertures -apery -apes -apetalies -apetalous -apetaly -apex -apexes -aphaereses -aphaeresis -aphaeretic -aphagia -aphagias -aphanite -aphanites -aphanitic -aphasia -aphasiac -aphasiacs -aphasias -aphasic -aphasics -aphelia -aphelian -aphelion -aphelions -aphereses -apheresis -apheses -aphesis -aphetic -aphetically -aphid -aphides -aphidian -aphidians -aphids -aphis -apholate -apholates -aphonia -aphonias -aphonic -aphonics -aphorise -aphorised -aphorises -aphorising -aphorism -aphorisms -aphorist -aphoristic -aphoristically -aphorists -aphorize -aphorized -aphorizes -aphorizing -aphotic -aphrodisiac -aphrodisiacal -aphrodisiacs -aphtha -aphthae -aphthous -aphyllies -aphylly -apian -apiarian -apiarians -apiaries -apiarist -apiarists -apiary -apical -apically -apicals -apices -apiculate -apiculi -apicultural -apiculture -apicultures -apiculturist -apiculturists -apiculus -apiece -apimania -apimanias -aping -apiologies -apiology -apish -apishly -apishness -apishnesses -aplanatic -aplasia -aplasias -aplastic -aplenty -aplite -aplites -aplitic -aplomb -aplombs -apnea -apneal -apneas -apneic -apnoea -apnoeal -apnoeas -apnoeic -apoapsides -apoapsis -apocalypse -apocalypses -apocalyptic -apocalyptical -apocalyptically -apocalypticism -apocalypticisms -apocalyptism -apocalyptisms -apocalyptist -apocalyptists -apocarp -apocarpies -apocarps -apocarpy -apochromatic -apocope -apocopes -apocopic -apocrine -apocrypha -apocryphal -apocryphally -apocryphalness -apocryphalnesses -apod -apodal -apodeictic -apodictic -apodictically -apodoses -apodosis -apodous -apods -apoenzyme -apoenzymes -apogamic -apogamies -apogamous -apogamy -apogeal -apogean -apogee -apogees -apogeic -apolipoprotein -apolipoproteins -apolitical -apolitically -apollo -apollos -apolog -apologal -apologetic -apologetically -apologetics -apologia -apologiae -apologias -apologies -apologise -apologised -apologises -apologising -apologist -apologists -apologize -apologized -apologizer -apologizers -apologizes -apologizing -apologs -apologue -apologues -apology -apolune -apolunes -apomict -apomictic -apomictically -apomicts -apomixes -apomixis -apomorphine -apomorphines -aponeuroses -aponeurosis -aponeurotic -apophonies -apophony -apophthegm -apophthegms -apophyge -apophyges -apophyllite -apophyllites -apophyseal -apophyses -apophysis -apoplectic -apoplectically -apoplexies -apoplexy -apoptoses -apoptosis -apoptotic -aport -aposematic -aposematically -aposiopeses -aposiopesis -aposiopetic -apospories -aposporous -apospory -apostacies -apostacy -apostasies -apostasy -apostate -apostates -apostatise -apostatised -apostatises -apostatising -apostatize -apostatized -apostatizes -apostatizing -apostil -apostils -apostle -apostles -apostleship -apostleships -apostolate -apostolates -apostolic -apostolicities -apostolicity -apostrophe -apostrophes -apostrophic -apostrophise -apostrophised -apostrophises -apostrophising -apostrophize -apostrophized -apostrophizes -apostrophizing -apothecaries -apothecary -apothece -apotheces -apothecia -apothecial -apothecium -apothegm -apothegmatic -apothegms -apothem -apothems -apotheoses -apotheosis -apotheosize -apotheosized -apotheosizes -apotheosizing -apotropaic -apotropaically -appal -appall -appalled -appalling -appallingly -appalls -appals -appanage -appanages -apparat -apparatchik -apparatchiki -apparatchiks -apparats -apparatus -apparatuses -apparel -appareled -appareling -apparelled -apparelling -apparels -apparent -apparently -apparentness -apparentnesses -apparition -apparitional -apparitions -apparitor -apparitors -appeal -appealabilities -appealability -appealable -appealed -appealer -appealers -appealing -appealingly -appeals -appear -appearance -appearances -appeared -appearing -appears -appeasable -appease -appeased -appeasement -appeasements -appeaser -appeasers -appeases -appeasing -appel -appellant -appellants -appellate -appellation -appellations -appellative -appellatively -appellatives -appellee -appellees -appellor -appellors -appels -append -appendage -appendages -appendant -appendants -appendectomies -appendectomy -appended -appendicectomies -appendicectomy -appendices -appendicitis -appendicitises -appendicular -appending -appendix -appendixes -appends -apperceive -apperceived -apperceives -apperceiving -apperception -apperceptions -apperceptive -appertain -appertained -appertaining -appertains -appestat -appestats -appetence -appetences -appetencies -appetency -appetent -appetiser -appetisers -appetising -appetite -appetites -appetitive -appetizer -appetizers -appetizing -appetizingly -applaud -applaudable -applaudably -applauded -applauder -applauders -applauding -applauds -applause -applauses -apple -applecart -applecarts -applejack -applejacks -apples -applesauce -applesauces -appliance -appliances -applicabilities -applicability -applicable -applicant -applicants -application -applications -applicative -applicatively -applicator -applicators -applicatory -applied -applier -appliers -applies -applique -appliqued -appliqueing -appliques -apply -applying -appoggiatura -appoggiaturas -appoint -appointed -appointee -appointees -appointing -appointive -appointment -appointments -appoints -apportion -apportionable -apportioned -apportioning -apportionment -apportionments -apportions -appose -apposed -apposer -apposers -apposes -apposing -apposite -appositely -appositeness -appositenesses -apposition -appositional -appositions -appositive -appositively -appositives -appraisal -appraisals -appraise -appraised -appraisee -appraisees -appraisement -appraisements -appraiser -appraisers -appraises -appraising -appraisingly -appraisive -appreciable -appreciably -appreciate -appreciated -appreciates -appreciating -appreciation -appreciations -appreciative -appreciatively -appreciativeness -appreciativenesses -appreciator -appreciators -appreciatory -apprehend -apprehended -apprehending -apprehends -apprehensible -apprehensibly -apprehension -apprehensions -apprehensive -apprehensively -apprehensiveness -apprehensivenesses -apprentice -apprenticed -apprentices -apprenticeship -apprenticeships -apprenticing -appressed -appressoria -appressorium -apprise -apprised -appriser -apprisers -apprises -apprising -apprize -apprized -apprizer -apprizers -apprizes -apprizing -approach -approachabilities -approachability -approachable -approached -approaches -approaching -approbate -approbated -approbates -approbating -approbation -approbations -approbatory -appropriable -appropriate -appropriated -appropriately -appropriateness -appropriatenesses -appropriates -appropriating -appropriation -appropriations -appropriative -appropriator -appropriators -approvable -approvably -approval -approvals -approve -approved -approver -approvers -approves -approving -approvingly -approximate -approximated -approximately -approximates -approximating -approximation -approximations -approximative -appulse -appulses -appurtenance -appurtenances -appurtenant -appurtenants -apractic -apraxia -apraxias -apraxic -apres -apricot -apricots -apriorities -apriority -apron -aproned -aproning -aprons -apropos -aprotic -apse -apses -apsidal -apsides -apsis -apt -apter -apteral -apteria -apterium -apterous -apteryx -apteryxes -aptest -aptitude -aptitudes -aptitudinal -aptitudinally -aptly -aptness -aptnesses -apyrase -apyrases -apyretic -aqua -aquacade -aquacades -aquacultural -aquaculture -aquacultures -aquaculturist -aquaculturists -aquae -aquamarine -aquamarines -aquanaut -aquanauts -aquaplane -aquaplaned -aquaplaner -aquaplaners -aquaplanes -aquaplaning -aquarelle -aquarelles -aquarellist -aquarellists -aquaria -aquarial -aquarian -aquarians -aquarist -aquarists -aquarium -aquariums -aquas -aquatic -aquatically -aquatics -aquatint -aquatinted -aquatinter -aquatinters -aquatinting -aquatintist -aquatintists -aquatints -aquatone -aquatones -aquavit -aquavits -aqueduct -aqueducts -aqueous -aquiculture -aquicultures -aquifer -aquiferous -aquifers -aquilegia -aquilegias -aquiline -aquilinities -aquilinity -aquiver -ar -arabesk -arabesks -arabesque -arabesques -arabic -arabica -arabicas -arabicization -arabicizations -arabicize -arabicized -arabicizes -arabicizing -arabilities -arability -arabinose -arabinoses -arabinoside -arabinosides -arabize -arabized -arabizes -arabizing -arable -arables -araceous -arachnid -arachnids -arachnoid -arachnoids -aragonite -aragonites -aragonitic -arak -araks -aramid -aramids -araneid -araneids -arapaima -arapaimas -araroba -ararobas -araucaria -araucarian -araucarias -arb -arbalest -arbalests -arbalist -arbalists -arbelest -arbelests -arbiter -arbiters -arbitrable -arbitrage -arbitraged -arbitrager -arbitragers -arbitrages -arbitrageur -arbitrageurs -arbitraging -arbitral -arbitrament -arbitraments -arbitrarily -arbitrariness -arbitrarinesses -arbitrary -arbitrate -arbitrated -arbitrates -arbitrating -arbitration -arbitrational -arbitrations -arbitrative -arbitrator -arbitrators -arbor -arboreal -arboreally -arbored -arboreous -arbores -arborescence -arborescences -arborescent -arboreta -arboretum -arboretums -arboricultural -arboriculture -arboricultures -arborist -arborists -arborization -arborizations -arborize -arborized -arborizes -arborizing -arborous -arbors -arborvitae -arborvitaes -arbour -arboured -arbours -arbovirus -arboviruses -arbs -arbuscle -arbuscles -arbute -arbutean -arbutes -arbutus -arbutuses -arc -arcade -arcaded -arcades -arcadia -arcadian -arcadians -arcadias -arcading -arcadings -arcana -arcane -arcanum -arcanums -arcature -arcatures -arccosine -arccosines -arced -arch -archaea -archaeal -archaean -archaeans -archaebacteria -archaebacterium -archaeoastronomies -archaeoastronomy -archaeological -archaeologically -archaeologies -archaeologist -archaeologists -archaeology -archaeopteryx -archaeopteryxes -archaic -archaically -archaise -archaised -archaises -archaising -archaism -archaisms -archaist -archaistic -archaists -archaize -archaized -archaizes -archaizing -archangel -archangelic -archangels -archbishop -archbishopric -archbishoprics -archbishops -archconservative -archconservatives -archdeacon -archdeaconries -archdeaconry -archdeacons -archdiocesan -archdiocese -archdioceses -archducal -archduchess -archduchesses -archduchies -archduchy -archduke -archdukedom -archdukedoms -archdukes -arched -archegonia -archegonial -archegoniate -archegoniates -archegonium -archenemies -archenemy -archentera -archenteron -archenterons -archeological -archeologically -archeologies -archeologist -archeologists -archeology -archer -archerfish -archerfishes -archeries -archers -archery -arches -archesporia -archesporial -archesporium -archetypal -archetypally -archetype -archetypes -archetypical -archfiend -archfiends -archidiaconal -archiepiscopal -archiepiscopally -archiepiscopate -archiepiscopates -archil -archils -archimandrite -archimandrites -archine -archines -arching -archings -archipelagic -archipelago -archipelagoes -archipelagos -architect -architectonic -architectonically -architectonics -architects -architectural -architecturally -architecture -architectures -architrave -architraves -archival -archive -archived -archives -archiving -archivist -archivists -archivolt -archivolts -archly -archness -archnesses -archon -archons -archosaur -archosaurian -archosaurs -archpriest -archpriests -archway -archways -arciform -arcing -arcked -arcking -arco -arcs -arcsine -arcsines -arctangent -arctangents -arctic -arctically -arctics -arcuate -arcuated -arcuately -arcus -arcuses -ardeb -ardebs -ardencies -ardency -ardent -ardently -ardor -ardors -ardour -ardours -arduous -arduously -arduousness -arduousnesses -are -area -areae -areal -areally -areas -areaway -areaways -areca -arecas -arecoline -arecolines -areic -arena -arenaceous -arenas -arenicolous -arenite -arenites -arenose -arenous -areocentric -areola -areolae -areolar -areolas -areolate -areole -areoles -areologies -areology -ares -arete -aretes -arethusa -arethusas -arf -arfs -argal -argala -argalas -argali -argalis -argals -argent -argental -argentic -argentiferous -argentine -argentines -argentite -argentites -argents -argentum -argentums -argil -argillaceous -argillite -argillites -argils -arginase -arginases -arginine -arginines -argle -argled -argles -argling -argol -argols -argon -argonaut -argonauts -argons -argosies -argosy -argot -argotic -argots -arguable -arguably -argue -argued -arguer -arguers -argues -argufied -argufier -argufiers -argufies -argufy -argufying -arguing -argument -argumenta -argumentation -argumentations -argumentative -argumentatively -argumentive -arguments -argumentum -argus -arguses -argyle -argyles -argyll -argylls -arhat -arhats -arhatship -arhatships -aria -arias -ariboflavinoses -ariboflavinosis -arid -arider -aridest -aridities -aridity -aridly -aridness -aridnesses -ariel -ariels -arietta -ariettas -ariette -ariettes -aright -aril -ariled -arillate -arillode -arillodes -arilloid -arils -ariose -ariosi -arioso -ariosos -arise -arisen -arises -arising -arista -aristae -aristas -aristate -aristo -aristocracies -aristocracy -aristocrat -aristocratic -aristocratically -aristocrats -aristos -arithmetic -arithmetical -arithmetically -arithmetician -arithmeticians -arithmetics -ark -arkose -arkoses -arkosic -arks -arles -arm -armada -armadas -armadillo -armadillos -armagnac -armagnacs -armament -armamentaria -armamentarium -armamentariums -armaments -armature -armatured -armatures -armaturing -armband -armbands -armchair -armchairs -armed -armer -armers -armet -armets -armful -armfuls -armhole -armholes -armies -armiger -armigeral -armigero -armigeros -armigerous -armigers -armilla -armillae -armillas -arming -armings -armistice -armistices -armless -armlet -armlets -armlike -armload -armloads -armlock -armlocks -armoire -armoires -armonica -armonicas -armor -armored -armorer -armorers -armorial -armorially -armorials -armories -armoring -armorless -armors -armory -armour -armoured -armourer -armourers -armouries -armouring -armours -armoury -armpit -armpits -armrest -armrests -arms -armsful -armure -armures -army -armyworm -armyworms -arnatto -arnattos -arnica -arnicas -arnotto -arnottos -aroid -aroids -aroint -arointed -arointing -aroints -aroma -aromas -aromatherapies -aromatherapist -aromatherapists -aromatherapy -aromatic -aromatically -aromaticities -aromaticity -aromatics -aromatization -aromatizations -aromatize -aromatized -aromatizes -aromatizing -arose -around -arousal -arousals -arouse -aroused -arouser -arousers -arouses -arousing -aroynt -aroynted -aroynting -aroynts -arpeggiate -arpeggiated -arpeggiates -arpeggiating -arpeggio -arpeggios -arpen -arpens -arpent -arpents -arquebus -arquebuses -arrack -arracks -arraign -arraigned -arraigning -arraignment -arraignments -arraigns -arrange -arranged -arrangement -arrangements -arranger -arrangers -arranges -arranging -arrant -arrantly -arras -arrased -arrases -array -arrayal -arrayals -arrayed -arrayer -arrayers -arraying -arrays -arrear -arrearage -arrearages -arrears -arrest -arrestant -arrestants -arrested -arrestee -arrestees -arrester -arresters -arresting -arrestingly -arrestment -arrestments -arrestor -arrestors -arrests -arrhizal -arrhythmia -arrhythmias -arrhythmic -arris -arrises -arrival -arrivals -arrive -arrived -arriver -arrivers -arrives -arriving -arriviste -arrivistes -arroba -arrobas -arrogance -arrogances -arrogant -arrogantly -arrogate -arrogated -arrogates -arrogating -arrogation -arrogations -arrondissement -arrondissements -arrow -arrowed -arrowhead -arrowheads -arrowing -arrowroot -arrowroots -arrows -arrowwood -arrowwoods -arrowworm -arrowworms -arrowy -arroyo -arroyos -ars -arse -arsenal -arsenals -arsenate -arsenates -arsenic -arsenical -arsenicals -arsenics -arsenide -arsenides -arsenious -arsenite -arsenites -arseno -arsenopyrite -arsenopyrites -arsenous -arses -arshin -arshins -arsine -arsines -arsino -arsis -arson -arsonist -arsonists -arsonous -arsons -arsphenamine -arsphenamines -art -artal -artefact -artefacts -artel -artels -artemisia -artemisias -arterial -arterially -arterials -arteries -arteriogram -arteriograms -arteriographic -arteriographies -arteriography -arteriolar -arteriole -arterioles -arterioscleroses -arteriosclerosis -arteriosclerotic -arteriosclerotics -arteriovenous -arteritides -arteritis -arteritises -artery -artful -artfully -artfulness -artfulnesses -arthralgia -arthralgias -arthralgic -arthritic -arthritically -arthritics -arthritides -arthritis -arthrodeses -arthrodesis -arthropathies -arthropathy -arthropod -arthropodan -arthropods -arthroscope -arthroscopes -arthroscopic -arthroscopies -arthroscopy -arthroses -arthrosis -arthrospore -arthrospores -artichoke -artichokes -article -articled -articles -articling -articulable -articulacies -articulacy -articular -articulate -articulated -articulately -articulateness -articulatenesses -articulates -articulating -articulation -articulations -articulative -articulator -articulators -articulatory -artier -artiest -artifact -artifacts -artifactual -artifice -artificer -artificers -artifices -artificial -artificialities -artificiality -artificially -artificialness -artificialnesses -artilleries -artillerist -artillerists -artillery -artilleryman -artillerymen -artily -artiness -artinesses -artiodactyl -artiodactyls -artisan -artisanal -artisans -artisanship -artisanships -artist -artiste -artistes -artistic -artistically -artistries -artistry -artists -artless -artlessly -artlessness -artlessnesses -arts -artsier -artsiest -artsy -artwork -artworks -arty -arugola -arugolas -arugula -arugulas -arum -arums -aruspex -aruspices -arval -arvo -arvos -aryl -aryls -arytenoid -arytenoids -arythmia -arythmias -arythmic -as -asafetida -asafetidas -asafoetida -asafoetidas -asana -asanas -asarum -asarums -asbestic -asbestos -asbestoses -asbestosis -asbestus -asbestuses -ascariases -ascariasis -ascarid -ascarides -ascarids -ascaris -ascend -ascendable -ascendance -ascendances -ascendancies -ascendancy -ascendant -ascendantly -ascendants -ascended -ascendence -ascendences -ascendencies -ascendency -ascendent -ascendents -ascender -ascenders -ascendible -ascending -ascends -ascension -ascensional -ascensions -ascensive -ascent -ascents -ascertain -ascertainable -ascertained -ascertaining -ascertainment -ascertainments -ascertains -asceses -ascesis -ascetic -ascetical -ascetically -asceticism -asceticisms -ascetics -asci -ascidia -ascidian -ascidians -ascidium -ascites -ascitic -asclepiad -asclepiads -ascocarp -ascocarpic -ascocarps -ascogonia -ascogonium -ascomycete -ascomycetes -ascomycetous -ascorbate -ascorbates -ascorbic -ascospore -ascospores -ascosporic -ascot -ascots -ascribable -ascribe -ascribed -ascribes -ascribing -ascription -ascriptions -ascriptive -ascus -asdic -asdics -asea -asepses -asepsis -aseptic -aseptically -asexual -asexualities -asexuality -asexually -ash -ashamed -ashamedly -ashcan -ashcans -ashed -ashen -ashes -ashfall -ashfalls -ashier -ashiest -ashiness -ashinesses -ashing -ashlar -ashlared -ashlaring -ashlars -ashler -ashlered -ashlering -ashlers -ashless -ashman -ashmen -ashore -ashplant -ashplants -ashram -ashrams -ashtray -ashtrays -ashy -aside -asides -asinine -asininely -asininities -asininity -ask -askance -askant -asked -asker -askers -askeses -askesis -askew -askewness -askewnesses -asking -askings -askoi -askos -asks -aslant -asleep -aslope -asocial -asp -asparagine -asparagines -asparagus -asparkle -aspartame -aspartames -aspartate -aspartates -aspect -aspects -aspectual -aspen -aspens -asper -asperate -asperated -asperates -asperating -asperges -aspergilla -aspergilli -aspergilloses -aspergillosis -aspergillum -aspergillums -aspergillus -asperities -asperity -aspers -asperse -aspersed -asperser -aspersers -asperses -aspersing -aspersion -aspersions -aspersor -aspersors -asphalt -asphalted -asphaltic -asphalting -asphaltite -asphaltites -asphalts -asphaltum -asphaltums -aspheric -aspherical -asphodel -asphodels -asphyxia -asphyxias -asphyxiate -asphyxiated -asphyxiates -asphyxiating -asphyxiation -asphyxiations -asphyxies -asphyxy -aspic -aspics -aspidistra -aspidistras -aspirant -aspirants -aspirata -aspiratae -aspirate -aspirated -aspirates -aspirating -aspiration -aspirational -aspirations -aspirator -aspirators -aspire -aspired -aspirer -aspirers -aspires -aspirin -aspiring -aspirins -aspis -aspises -aspish -asps -asquint -asrama -asramas -ass -assagai -assagaied -assagaiing -assagais -assai -assail -assailable -assailant -assailants -assailed -assailer -assailers -assailing -assails -assais -assassin -assassinate -assassinated -assassinates -assassinating -assassination -assassinations -assassinator -assassinators -assassins -assault -assaulted -assaulter -assaulters -assaulting -assaultive -assaultively -assaultiveness -assaultivenesses -assaults -assay -assayed -assayer -assayers -assaying -assays -assed -assegai -assegaied -assegaiing -assegais -assemblage -assemblages -assemblagist -assemblagists -assemble -assembled -assembler -assemblers -assembles -assemblies -assembling -assembly -assemblyman -assemblymen -assemblywoman -assemblywomen -assent -assentation -assentations -assented -assenter -assenters -assenting -assentor -assentors -assents -assert -asserted -assertedly -asserter -asserters -asserting -assertion -assertions -assertive -assertively -assertiveness -assertivenesses -assertor -assertors -asserts -asses -assess -assessable -assessed -assesses -assessing -assessment -assessments -assessor -assessors -asset -assets -asseverate -asseverated -asseverates -asseverating -asseveration -asseverations -asseverative -asshole -assholes -assiduities -assiduity -assiduous -assiduously -assiduousness -assiduousnesses -assign -assignabilities -assignability -assignable -assignat -assignation -assignations -assignats -assigned -assignee -assignees -assigner -assigners -assigning -assignment -assignments -assignor -assignors -assigns -assimilabilities -assimilability -assimilable -assimilate -assimilated -assimilates -assimilating -assimilation -assimilationism -assimilationisms -assimilationist -assimilationists -assimilations -assimilative -assimilator -assimilators -assimilatory -assist -assistance -assistances -assistant -assistants -assistantship -assistantships -assisted -assister -assisters -assisting -assistor -assistors -assists -assize -assizes -asslike -associate -associated -associates -associateship -associateships -associating -association -associational -associationism -associationisms -associationist -associationistic -associationists -associations -associative -associatively -associativities -associativity -assoil -assoiled -assoiling -assoilment -assoilments -assoils -assonance -assonances -assonant -assonantal -assonants -assort -assortative -assortatively -assorted -assorter -assorters -assorting -assortment -assortments -assorts -assuage -assuaged -assuagement -assuagements -assuages -assuaging -assuasive -assumabilities -assumability -assumable -assumably -assume -assumed -assumer -assumers -assumes -assuming -assumpsit -assumpsits -assumption -assumptions -assumptive -assurance -assurances -assure -assured -assuredly -assuredness -assurednesses -assureds -assurer -assurers -assures -assurgent -assuring -assuror -assurors -asswage -asswaged -asswages -asswaging -astarboard -astasia -astasias -astatic -astatine -astatines -aster -asteria -asterias -asteriated -asterisk -asterisked -asterisking -asteriskless -asterisks -asterism -asterisms -astern -asternal -asteroid -asteroidal -asteroids -asters -asthenia -asthenias -asthenic -asthenics -asthenies -asthenosphere -asthenospheres -asthenospheric -astheny -asthma -asthmas -asthmatic -asthmatically -asthmatics -astigmatic -astigmatics -astigmatism -astigmatisms -astigmia -astigmias -astilbe -astilbes -astir -astomous -astonied -astonies -astonish -astonished -astonishes -astonishing -astonishingly -astonishment -astonishments -astony -astonying -astound -astounded -astounding -astoundingly -astounds -astraddle -astragal -astragals -astrakhan -astrakhans -astral -astrally -astrals -astray -astrict -astricted -astricting -astricts -astride -astringe -astringed -astringencies -astringency -astringent -astringently -astringents -astringes -astringing -astrobiologies -astrobiologist -astrobiologists -astrobiology -astrocyte -astrocytes -astrocytic -astrocytoma -astrocytomas -astrocytomata -astrodome -astrodomes -astrolabe -astrolabes -astrologer -astrologers -astrological -astrologically -astrologies -astrology -astrometric -astrometries -astrometry -astronaut -astronautic -astronautical -astronautically -astronautics -astronauts -astronomer -astronomers -astronomic -astronomical -astronomically -astronomies -astronomy -astrophotograph -astrophotographer -astrophotographers -astrophotographies -astrophotographs -astrophotography -astrophysical -astrophysically -astrophysicist -astrophysicists -astrophysics -astute -astutely -astuteness -astutenesses -astylar -asunder -aswarm -aswirl -aswoon -asyla -asylum -asylums -asymmetric -asymmetrical -asymmetrically -asymmetries -asymmetry -asymptomatic -asymptomatically -asymptote -asymptotes -asymptotic -asymptotically -asynapses -asynapsis -asynchronies -asynchronism -asynchronisms -asynchronous -asynchronously -asynchrony -asyndeta -asyndetic -asyndetically -asyndeton -asyndetons -at -atabal -atabals -atactic -ataghan -ataghans -atalaya -atalayas -ataman -atamans -atamasco -atamascos -atap -ataps -ataractic -ataractics -ataraxia -ataraxias -ataraxic -ataraxics -ataraxies -ataraxy -atavic -atavism -atavisms -atavist -atavistic -atavistically -atavists -ataxia -ataxias -ataxic -ataxics -ataxies -ataxy -ate -atechnic -atelectases -atelectasis -atelic -atelier -ateliers -atemoya -atemoyas -atemporal -ates -athanasies -athanasy -atheism -atheisms -atheist -atheistic -atheistical -atheistically -atheists -atheling -athelings -athenaeum -athenaeums -atheneum -atheneums -atheoretical -atherogeneses -atherogenesis -atherogenic -atheroma -atheromas -atheromata -atheromatous -atheroscleroses -atherosclerosis -atherosclerotic -athetoid -athirst -athlete -athletes -athletic -athletically -athleticism -athleticisms -athletics -athodyd -athodyds -athrocyte -athrocytes -athwart -athwartship -athwartships -atilt -atingle -atlantes -atlas -atlases -atlatl -atlatls -atma -atman -atmans -atmas -atmometer -atmometers -atmosphere -atmosphered -atmospheres -atmospheric -atmospherically -atmospherics -atoll -atolls -atom -atomic -atomical -atomically -atomics -atomies -atomise -atomised -atomiser -atomisers -atomises -atomising -atomism -atomisms -atomist -atomistic -atomistically -atomists -atomization -atomizations -atomize -atomized -atomizer -atomizers -atomizes -atomizing -atoms -atomy -atonable -atonal -atonalism -atonalisms -atonalist -atonalists -atonalities -atonality -atonally -atone -atoned -atonement -atonements -atoner -atoners -atones -atonic -atonics -atonies -atoning -atony -atop -atopic -atopies -atopy -atrabilious -atrabiliousness -atrabiliousnesses -atrazine -atrazines -atremble -atresia -atresias -atria -atrial -atrioventricular -atrip -atrium -atriums -atrocious -atrociously -atrociousness -atrociousnesses -atrocities -atrocity -atrophia -atrophias -atrophic -atrophied -atrophies -atrophy -atrophying -atropin -atropine -atropines -atropins -atropism -atropisms -att -attaboy -attach -attachable -attache -attached -attacher -attachers -attaches -attaching -attachment -attachments -attack -attacked -attacker -attackers -attacking -attackman -attackmen -attacks -attain -attainabilities -attainability -attainable -attainder -attainders -attained -attainer -attainers -attaining -attainment -attainments -attains -attaint -attainted -attainting -attaints -attar -attars -attemper -attempered -attempering -attempers -attempt -attemptable -attempted -attempting -attempts -attend -attendance -attendances -attendant -attendants -attended -attendee -attendees -attender -attenders -attending -attends -attent -attention -attentional -attentions -attentive -attentively -attentiveness -attentivenesses -attenuate -attenuated -attenuates -attenuating -attenuation -attenuations -attenuator -attenuators -attest -attestation -attestations -attested -attester -attesters -attesting -attestor -attestors -attests -attic -atticism -atticisms -atticist -atticists -attics -attire -attired -attires -attiring -attitude -attitudes -attitudinal -attitudinally -attitudinise -attitudinised -attitudinises -attitudinising -attitudinize -attitudinized -attitudinizes -attitudinizing -attorn -attorned -attorney -attorneys -attorneyship -attorneyships -attorning -attornment -attornments -attorns -attract -attractance -attractances -attractancies -attractancy -attractant -attractants -attracted -attracting -attraction -attractions -attractive -attractively -attractiveness -attractivenesses -attractor -attractors -attracts -attributable -attribute -attributed -attributes -attributing -attribution -attributional -attributions -attributive -attributively -attributives -attrite -attrited -attrition -attritional -attritions -attune -attuned -attunement -attunements -attunes -attuning -atwain -atween -atwitter -atypic -atypical -atypicalities -atypicality -atypically -aubade -aubades -auberge -auberges -aubergine -aubergines -aubretia -aubretias -aubrieta -aubrietas -auburn -auburns -auction -auctioned -auctioneer -auctioneers -auctioning -auctions -auctorial -aucuba -aucubas -audacious -audaciously -audaciousness -audaciousnesses -audacities -audacity -audad -audads -audial -audibilities -audibility -audible -audibles -audibly -audience -audiences -audient -audients -audile -audiles -auding -audings -audio -audiobook -audiobooks -audiocassette -audiocassettes -audiogenic -audiogram -audiograms -audiologic -audiological -audiologies -audiologist -audiologists -audiology -audiometer -audiometers -audiometric -audiometries -audiometry -audiophile -audiophiles -audios -audiotape -audiotapes -audiovisual -audiovisuals -audit -auditable -audited -auditing -audition -auditioned -auditioning -auditions -auditive -auditives -auditor -auditoria -auditories -auditorily -auditorium -auditoriums -auditors -auditory -audits -augend -augends -auger -augers -aught -aughts -augite -augites -augitic -augment -augmentation -augmentations -augmentative -augmentatives -augmented -augmenter -augmenters -augmenting -augmentor -augmentors -augments -augur -augural -augured -augurer -augurers -auguries -auguring -augurs -augury -august -auguster -augustest -augustly -augustness -augustnesses -auk -auklet -auklets -auks -auld -aulder -auldest -aulic -aunt -aunthood -aunthoods -auntie -aunties -auntlier -auntliest -auntlike -auntly -aunts -aunty -aura -aurae -aural -aurally -aurar -auras -aurate -aurated -aureate -aurei -aureola -aureolae -aureolas -aureole -aureoled -aureoles -aureoling -aures -aureus -auric -auricle -auricled -auricles -auricula -auriculae -auricular -auriculas -auriculate -auriferous -auriform -auris -aurist -aurists -aurochs -aurochses -aurora -aurorae -auroral -auroras -aurorean -aurous -aurum -aurums -auscultate -auscultated -auscultates -auscultating -auscultation -auscultations -auscultatory -ausform -ausformed -ausforming -ausforms -auslander -auslanders -auspex -auspice -auspices -auspicious -auspiciously -auspiciousness -auspiciousnesses -austenite -austenites -austenitic -austere -austerely -austereness -austerenesses -austerer -austerest -austerities -austerity -austral -australes -australopithecine -australopithecines -australs -ausubo -ausubos -autacoid -autacoids -autarchic -autarchical -autarchies -autarchy -autarkic -autarkical -autarkies -autarky -autecism -autecisms -autecological -autecologies -autecology -auteur -auteurist -auteurists -auteurs -authentic -authentically -authenticate -authenticated -authenticates -authenticating -authentication -authentications -authenticator -authenticators -authenticities -authenticity -author -authored -authoress -authoresses -authorial -authoring -authorise -authorised -authorises -authorising -authoritarian -authoritarianism -authoritarianisms -authoritarians -authoritative -authoritatively -authoritativeness -authoritativenesses -authorities -authority -authorization -authorizations -authorize -authorized -authorizer -authorizers -authorizes -authorizing -authors -authorship -authorships -autism -autisms -autistic -autistically -autistics -auto -autoantibodies -autoantibody -autobahn -autobahnen -autobahns -autobiographer -autobiographers -autobiographic -autobiographical -autobiographically -autobiographies -autobiography -autobus -autobuses -autobusses -autocade -autocades -autocatalyses -autocatalysis -autocatalytic -autocatalytically -autocephalies -autocephalous -autocephaly -autochthon -autochthones -autochthonous -autochthonously -autochthons -autoclave -autoclaved -autoclaves -autoclaving -autocoid -autocoids -autocorrelation -autocorrelations -autocracies -autocracy -autocrat -autocratic -autocratical -autocratically -autocrats -autocross -autocrosses -autodidact -autodidactic -autodidacts -autodyne -autodynes -autoecious -autoeciously -autoecism -autoecisms -autoed -autoerotic -autoeroticism -autoeroticisms -autoerotism -autoerotisms -autogamies -autogamous -autogamy -autogenic -autogenies -autogenous -autogenously -autogeny -autogiro -autogiros -autograft -autografted -autografting -autografts -autograph -autographed -autographic -autographically -autographies -autographing -autographs -autography -autogyro -autogyros -autohypnoses -autohypnosis -autohypnotic -autoimmune -autoimmunities -autoimmunity -autoimmunization -autoimmunizations -autoinfection -autoinfections -autoing -autointoxication -autointoxications -autoloading -autologous -autolysate -autolysates -autolyse -autolysed -autolyses -autolysing -autolysis -autolytic -autolyzate -autolyzates -autolyze -autolyzed -autolyzes -autolyzing -automaker -automakers -automan -automata -automatable -automate -automated -automates -automatic -automatically -automaticities -automaticity -automatics -automating -automation -automations -automatism -automatisms -automatist -automatists -automatization -automatizations -automatize -automatized -automatizes -automatizing -automaton -automatons -automen -automobile -automobiled -automobiles -automobiling -automobilist -automobilists -automobilities -automobility -automorphism -automorphisms -automotive -autonomic -autonomically -autonomies -autonomist -autonomists -autonomous -autonomously -autonomy -autopilot -autopilots -autopolyploid -autopolyploidies -autopolyploids -autopolyploidy -autopsic -autopsied -autopsies -autopsy -autopsying -autoradiogram -autoradiograms -autoradiograph -autoradiographic -autoradiographies -autoradiographs -autoradiography -autorotate -autorotated -autorotates -autorotating -autorotation -autorotations -autoroute -autoroutes -autos -autosexing -autosomal -autosomally -autosome -autosomes -autostrada -autostradas -autostrade -autosuggest -autosuggested -autosuggesting -autosuggestion -autosuggestions -autosuggests -autotelic -autotetraploid -autotetraploidies -autotetraploids -autotetraploidy -autotomies -autotomize -autotomized -autotomizes -autotomizing -autotomous -autotomy -autotransformer -autotransformers -autotransfusion -autotransfusions -autotroph -autotrophic -autotrophically -autotrophies -autotrophs -autotrophy -autotype -autotypes -autotypies -autotypy -autoworker -autoworkers -autoxidation -autoxidations -autumn -autumnal -autumnally -autumns -autunite -autunites -auxeses -auxesis -auxetic -auxetics -auxiliaries -auxiliary -auxin -auxinic -auxins -auxotroph -auxotrophic -auxotrophies -auxotrophs -auxotrophy -ava -avadavat -avadavats -avail -availabilities -availability -available -availableness -availablenesses -availably -availed -availing -avails -avalanche -avalanched -avalanches -avalanching -avant -avarice -avarices -avaricious -avariciously -avariciousness -avariciousnesses -avascular -avascularities -avascularity -avast -avatar -avatars -avaunt -ave -avellan -avellane -avenge -avenged -avenger -avengers -avenges -avenging -avens -avenses -aventail -aventails -aventurine -aventurines -avenue -avenues -aver -average -averaged -averagely -averageness -averagenesses -averages -averaging -averment -averments -averred -averring -avers -averse -aversely -averseness -aversenesses -aversion -aversions -aversive -aversively -aversiveness -aversivenesses -avert -averted -averting -averts -aves -avgas -avgases -avgasses -avgolemono -avgolemonos -avian -avianize -avianized -avianizes -avianizing -avians -aviaries -aviarist -aviarists -aviary -aviate -aviated -aviates -aviating -aviation -aviations -aviator -aviators -aviatrices -aviatrix -aviatrixes -avicular -aviculture -avicultures -aviculturist -aviculturists -avid -avidin -avidins -avidities -avidity -avidly -avidness -avidnesses -avifauna -avifaunae -avifaunal -avifaunas -avigator -avigators -avion -avionic -avionics -avions -avirulent -aviso -avisos -avitaminoses -avitaminosis -avitaminotic -avo -avocado -avocadoes -avocados -avocation -avocational -avocationally -avocations -avocet -avocets -avodire -avodires -avoid -avoidable -avoidably -avoidance -avoidances -avoided -avoider -avoiders -avoiding -avoids -avoirdupois -avoirdupoises -avos -avoset -avosets -avouch -avouched -avoucher -avouchers -avouches -avouching -avouchment -avouchments -avow -avowable -avowably -avowal -avowals -avowed -avowedly -avower -avowers -avowing -avows -avulse -avulsed -avulses -avulsing -avulsion -avulsions -avuncular -avuncularities -avuncularity -avuncularly -aw -awa -await -awaited -awaiter -awaiters -awaiting -awaits -awake -awaked -awaken -awakened -awakener -awakeners -awakening -awakens -awakes -awaking -award -awardable -awarded -awardee -awardees -awarder -awarders -awarding -awards -aware -awareness -awarenesses -awash -away -awayness -awaynesses -awe -aweary -aweather -awed -awee -aweigh -aweing -aweless -awes -awesome -awesomely -awesomeness -awesomenesses -awestricken -awestruck -awful -awfuller -awfullest -awfully -awfulness -awfulnesses -awhile -awhirl -awing -awkward -awkwarder -awkwardest -awkwardly -awkwardness -awkwardnesses -awl -awless -awls -awlwort -awlworts -awmous -awn -awned -awning -awninged -awnings -awnless -awns -awny -awoke -awoken -awol -awols -awry -ax -axal -axe -axed -axel -axels -axeman -axemen -axenic -axenically -axes -axial -axialities -axiality -axially -axil -axile -axilla -axillae -axillar -axillaries -axillars -axillary -axillas -axils -axing -axiological -axiologically -axiologies -axiology -axiom -axiomatic -axiomatically -axiomatisation -axiomatisations -axiomatization -axiomatizations -axiomatize -axiomatized -axiomatizes -axiomatizing -axioms -axion -axions -axis -axised -axises -axisymmetric -axisymmetrical -axisymmetries -axisymmetry -axite -axites -axle -axled -axles -axletree -axletrees -axlike -axman -axmen -axolotl -axolotls -axon -axonal -axone -axonemal -axoneme -axonemes -axones -axonic -axonometric -axons -axoplasm -axoplasmic -axoplasms -axseed -axseeds -ay -ayah -ayahs -ayahuasca -ayahuascas -ayatollah -ayatollahs -aye -ayes -ayin -ayins -ays -ayurveda -ayurvedas -azalea -azaleas -azan -azans -azathioprine -azathioprines -azeotrope -azeotropes -azerty -azide -azides -azido -azidothymidine -azidothymidines -azimuth -azimuthal -azimuthally -azimuths -azine -azines -azlon -azlons -azo -azoic -azole -azoles -azon -azonal -azonic -azons -azoospermia -azoospermias -azote -azoted -azotemia -azotemias -azotemic -azotes -azoth -azoths -azotic -azotise -azotised -azotises -azotising -azotize -azotized -azotizes -azotizing -azotobacter -azotobacters -azoturia -azoturias -azure -azures -azurite -azurites -azygos -azygoses -azygous -ba -baa -baaed -baaing -baal -baalim -baalism -baalisms -baals -baas -baases -baaskaap -baaskaaps -baba -babas -babassu -babassus -babbitt -babbitted -babbitting -babbitts -babble -babbled -babblement -babblements -babbler -babblers -babbles -babbling -babblings -babe -babel -babels -babes -babesia -babesias -babesioses -babesiosis -babiche -babiches -babied -babies -babirusa -babirusas -babka -babkas -baboo -babool -babools -baboon -baboons -baboos -babu -babul -babuls -babus -babushka -babushkas -baby -babyhood -babyhoods -babying -babyish -babysat -babysit -babysits -babysitter -babysitters -babysitting -bacalao -bacalaos -bacca -baccae -baccalaureate -baccalaureates -baccara -baccaras -baccarat -baccarats -baccate -baccated -bacchanal -bacchanalia -bacchanalian -bacchanalians -bacchanalias -bacchanals -bacchant -bacchante -bacchantes -bacchants -bacchic -bacchii -bacchius -bach -bached -bachelor -bachelordom -bachelordoms -bachelorette -bachelorettes -bachelorhood -bachelorhoods -bachelors -baches -baching -bacillar -bacillary -bacilli -bacillus -bacitracin -bacitracins -back -backache -backaches -backbeat -backbeats -backbench -backbencher -backbenchers -backbenches -backbend -backbends -backbit -backbite -backbiter -backbiters -backbites -backbiting -backbitings -backbitten -backblock -backblocks -backboard -backboards -backbone -backbones -backbreaker -backbreakers -backbreaking -backcast -backcasts -backchat -backchats -backcloth -backcloths -backcountries -backcountry -backcourt -backcourtman -backcourtmen -backcourts -backcross -backcrossed -backcrosses -backcrossing -backdate -backdated -backdates -backdating -backdoor -backdrop -backdropped -backdropping -backdrops -backdropt -backed -backer -backers -backfield -backfields -backfill -backfilled -backfilling -backfills -backfire -backfired -backfires -backfiring -backfit -backfits -backfitted -backfitting -backflow -backflows -backgammon -backgammons -background -backgrounded -backgrounder -backgrounders -backgrounding -backgrounds -backhand -backhanded -backhandedly -backhander -backhanders -backhanding -backhands -backhaul -backhauled -backhauling -backhauls -backhoe -backhoes -backhouse -backhouses -backing -backings -backland -backlands -backlash -backlashed -backlasher -backlashers -backlashes -backlashing -backless -backlight -backlighted -backlighting -backlights -backlist -backlisted -backlisting -backlists -backlit -backlog -backlogged -backlogging -backlogs -backmost -backout -backouts -backpack -backpacked -backpacker -backpackers -backpacking -backpacks -backpedal -backpedaled -backpedaling -backpedalled -backpedalling -backpedals -backrest -backrests -backroom -backrooms -backrush -backrushes -backs -backsaw -backsaws -backscatter -backscattered -backscattering -backscatterings -backscatters -backseat -backseats -backset -backsets -backside -backsides -backslap -backslapped -backslapper -backslappers -backslapping -backslaps -backslash -backslashes -backslid -backslidden -backslide -backslider -backsliders -backslides -backsliding -backspace -backspaced -backspaces -backspacing -backspin -backspins -backsplash -backsplashes -backstab -backstabbed -backstabber -backstabbers -backstabbing -backstabbings -backstabs -backstage -backstairs -backstay -backstays -backstitch -backstitched -backstitches -backstitching -backstop -backstopped -backstopping -backstops -backstreet -backstreets -backstretch -backstretches -backstroke -backstrokes -backswept -backswing -backswings -backsword -backswords -backtalk -backtalks -backtrack -backtracked -backtracking -backtracks -backup -backups -backward -backwardly -backwardness -backwardnesses -backwards -backwash -backwashed -backwashes -backwashing -backwater -backwaters -backwood -backwoods -backwoodsman -backwoodsmen -backwoodsy -backwrap -backwraps -backyard -backyards -bacon -bacons -bacteremia -bacteremias -bacteremic -bacteria -bacterial -bacterially -bacterias -bactericidal -bactericidally -bactericide -bactericides -bacterin -bacterins -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 -bacterium -bacteriuria -bacteriurias -bacterization -bacterizations -bacterize -bacterized -bacterizes -bacterizing -bacteroid -bacteroids -bacula -baculine -baculum -baculums -bad -badass -badassed -badasses -badder -baddest -baddie -baddies -baddy -bade -badge -badged -badger -badgered -badgering -badgerly -badgers -badges -badging -badinage -badinaged -badinages -badinaging -badland -badlands -badly -badman -badmen -badminton -badmintons -badmouth -badmouthed -badmouthing -badmouths -badness -badnesses -bads -baff -baffed -baffies -baffing -baffle -baffled -bafflegab -bafflegabs -bafflement -bafflements -baffler -bafflers -baffles -baffling -bafflingly -baffs -baffy -bag -bagass -bagasse -bagasses -bagatelle -bagatelles -bagel -bagels -bagful -bagfuls -baggage -baggages -bagged -bagger -baggers -baggie -baggier -baggies -baggiest -baggily -bagginess -bagginesses -bagging -baggings -baggy -baghouse -baghouses -bagman -bagmen -bagnio -bagnios -bagpipe -bagpiper -bagpipers -bagpipes -bags -bagsful -baguet -baguets -baguette -baguettes -bagwig -bagwigs -bagworm -bagworms -bah -bahadur -bahadurs -baht -bahts -baidarka -baidarkas -bail -bailable -bailed -bailee -bailees -bailer -bailers -bailey -baileys -bailie -bailies -bailiff -bailiffs -bailiffship -bailiffships -bailing -bailiwick -bailiwicks -bailment -bailments -bailor -bailors -bailout -bailouts -bails -bailsman -bailsmen -bairn -bairnish -bairnlier -bairnliest -bairnly -bairns -bait -baited -baiter -baiters -baith -baiting -baits -baiza -baizas -baize -baizes -bake -baked -bakemeat -bakemeats -baker -bakeries -bakers -bakery -bakes -bakeshop -bakeshops -baking -bakings -baklava -baklavas -baklawa -baklawas -baksheesh -baksheeshes -bakshish -bakshished -bakshishes -bakshishing -bal -balaclava -balaclavas -balalaika -balalaikas -balance -balanced -balancer -balancers -balances -balancing -balas -balases -balata -balatas -balboa -balboas -balbriggan -balbriggans -balconied -balconies -balcony -bald -baldachin -baldachino -baldachinos -baldachins -balded -balder -balderdash -balderdashes -baldest -baldhead -baldheaded -baldheads -baldies -balding -baldish -baldly -baldness -baldnesses -baldpate -baldpates -baldric -baldrick -baldricks -baldrics -balds -baldy -bale -baled -baleen -baleens -balefire -balefires -baleful -balefully -balefulness -balefulnesses -baler -balers -bales -baling -balisaur -balisaurs -balk -balkanization -balkanizations -balkanize -balkanized -balkanizes -balkanizing -balked -balker -balkers -balkier -balkiest -balkily -balkiness -balkinesses -balking -balkline -balklines -balks -balky -ball -ballad -ballade -balladeer -balladeers -ballades -balladic -balladist -balladists -balladries -balladry -ballads -ballast -ballasted -ballasting -ballasts -ballcarrier -ballcarriers -balled -baller -ballerina -ballerinas -ballers -ballet -balletic -balletomane -balletomanes -balletomania -balletomanias -ballets -ballgame -ballgames -ballhandling -ballhandlings -ballhawk -ballhawks -ballies -balling -ballista -ballistae -ballistic -ballistically -ballistics -ballon -ballonet -ballonets -ballonne -ballonnes -ballons -balloon -ballooned -ballooning -balloonings -balloonist -balloonists -balloons -ballot -balloted -balloter -balloters -balloting -ballots -ballpark -ballparks -ballplayer -ballplayers -ballpoint -ballpoints -ballroom -ballrooms -balls -ballsier -ballsiest -ballsy -ballute -ballutes -bally -ballyhoo -ballyhooed -ballyhooing -ballyhoos -ballyrag -ballyragged -ballyragging -ballyrags -balm -balmacaan -balmacaans -balmier -balmiest -balmily -balminess -balminesses -balmlike -balmoral -balmorals -balms -balmy -balneal -balneologies -balneology -baloney -baloneys -bals -balsa -balsam -balsamed -balsamic -balsaming -balsams -balsas -baluster -balusters -balustrade -balustraded -balustrades -bam -bambini -bambino -bambinos -bamboo -bamboos -bamboozle -bamboozled -bamboozlement -bamboozlements -bamboozles -bamboozling -bammed -bamming -bams -ban -banal -banalities -banality -banalize -banalized -banalizes -banalizing -banally -banana -bananas -banausic -banco -bancos -band -bandage -bandaged -bandager -bandagers -bandages -bandaging -bandaid -bandaids -bandana -bandanas -bandanna -bandannas -bandbox -bandboxes -bandeau -bandeaus -bandeaux -banded -bander -banderilla -banderillas -banderillero -banderilleros -banderol -banderole -banderoles -banderols -banders -bandicoot -bandicoots -bandied -bandies -banding -bandit -banditries -banditry -bandits -banditti -bandleader -bandleaders -bandmaster -bandmasters -bandog -bandogs -bandoleer -bandoleers -bandolier -bandoliers -bandora -bandoras -bandore -bandores -bands -bandsman -bandsmen -bandstand -bandstands -bandwagon -bandwagons -bandwidth -bandwidths -bandy -bandying -bane -baneberries -baneberry -baned -baneful -banefully -banes -bang -banged -banger -bangers -banging -bangkok -bangkoks -bangle -bangles -bangs -bangtail -bangtails -bani -banian -banians -baning -banish -banished -banisher -banishers -banishes -banishing -banishment -banishments -banister -banistered -banisters -banjax -banjaxed -banjaxes -banjaxing -banjo -banjoes -banjoist -banjoists -banjos -bank -bankabilities -bankability -bankable -bankbook -bankbooks -bankcard -bankcards -banked -banker -bankerly -bankers -banking -bankings -banknote -banknotes -bankroll -bankrolled -bankroller -bankrollers -bankrolling -bankrolls -bankrupt -bankruptcies -bankruptcy -bankrupted -bankrupting -bankrupts -banks -banksia -banksias -bankside -banksides -banned -banner -bannered -banneret -bannerets -bannerette -bannerettes -bannering -bannerol -bannerols -banners -bannet -bannets -banning -bannister -bannisters -bannock -bannocks -banns -banquet -banqueted -banqueter -banqueters -banqueting -banquets -banquette -banquettes -bans -banshee -banshees -banshie -banshies -bantam -bantams -bantamweight -bantamweights -banteng -bantengs -banter -bantered -banterer -banterers -bantering -banteringly -banters -banties -bantling -bantlings -banty -banyan -banyans -banzai -banzais -baobab -baobabs -bap -baps -baptise -baptised -baptises -baptisia -baptisias -baptising -baptism -baptismal -baptismally -baptisms -baptist -baptisteries -baptistery -baptistries -baptistry -baptists -baptize -baptized -baptizer -baptizers -baptizes -baptizing -bar -barathea -baratheas -barb -barbal -barbarian -barbarianism -barbarianisms -barbarians -barbaric -barbarically -barbarism -barbarisms -barbarities -barbarity -barbarization -barbarizations -barbarize -barbarized -barbarizes -barbarizing -barbarous -barbarously -barbarousness -barbarousnesses -barbasco -barbascoes -barbascos -barbate -barbe -barbecue -barbecued -barbecuer -barbecuers -barbecues -barbecuing -barbed -barbel -barbell -barbells -barbels -barbeque -barbequed -barbeques -barbequing -barber -barbered -barbering -barberries -barberry -barbers -barbershop -barbershops -barbes -barbet -barbets -barbette -barbettes -barbican -barbicans -barbicel -barbicels -barbing -barbital -barbitals -barbitone -barbitones -barbiturate -barbiturates -barbless -barbs -barbule -barbules -barbut -barbuts -barbwire -barbwires -barcarole -barcaroles -barcarolle -barcarolles -barchan -barchans -bard -barde -barded -bardes -bardic -barding -bardolater -bardolaters -bardolatries -bardolatry -bards -bare -bareback -barebacked -bareboat -bareboats -bared -barefaced -barefacedly -barefacedness -barefacednesses -barefit -barefoot -barefooted -barege -bareges -barehanded -barehead -bareheaded -barely -bareness -barenesses -barer -bares -baresark -baresarks -barest -barf -barfed -barfing -barflies -barfly -barfs -bargain -bargained -bargainer -bargainers -bargaining -bargains -barge -bargeboard -bargeboards -barged -bargee -bargees -bargello -bargellos -bargeman -bargemen -barges -barghest -barghests -barging -barguest -barguests -barhop -barhopped -barhopping -barhops -baric -barilla -barillas -baring -barite -barites -baritonal -baritone -baritones -barium -bariums -bark -barked -barkeep -barkeeper -barkeepers -barkeeps -barkentine -barkentines -barker -barkers -barkier -barkiest -barking -barkless -barks -barky -barleduc -barleducs -barless -barley -barleycorn -barleycorns -barleys -barlow -barlows -barm -barmaid -barmaids -barman -barmen -barmie -barmier -barmiest -barms -barmy -barn -barnacle -barnacled -barnacles -barnier -barniest -barnlike -barns -barnstorm -barnstormed -barnstormer -barnstormers -barnstorming -barnstorms -barny -barnyard -barnyards -baroceptor -baroceptors -barogram -barograms -barograph -barographic -barographs -barometer -barometers -barometric -barometrically -barometries -barometry -baron -baronage -baronages -baroness -baronesses -baronet -baronetage -baronetages -baronetcies -baronetcy -baronets -barong -barongs -baronial -baronies -baronne -baronnes -barons -barony -baroque -baroquely -baroques -baroreceptor -baroreceptors -barouche -barouches -barque -barquentine -barquentines -barques -barquette -barquettes -barrable -barrack -barracked -barracker -barrackers -barracking -barracks -barracoon -barracoons -barracouta -barracoutas -barracuda -barracudas -barrage -barraged -barrages -barraging -barramunda -barramundas -barramundi -barramundies -barramundis -barranca -barrancas -barranco -barrancos -barrater -barraters -barrator -barrators -barratries -barratry -barre -barred -barrel -barrelage -barrelages -barreled -barrelful -barrelfuls -barrelhead -barrelheads -barrelhouse -barrelhouses -barreling -barrelled -barrelling -barrels -barrelsful -barren -barrener -barrenest -barrenly -barrenness -barrennesses -barrens -barres -barret -barretor -barretors -barretries -barretry -barrets -barrette -barrettes -barricade -barricaded -barricades -barricading -barricado -barricadoed -barricadoes -barricadoing -barrier -barriers -barring -barrio -barrios -barrister -barristers -barroom -barrooms -barrow -barrows -bars -barstool -barstools -bartend -bartended -bartender -bartenders -bartending -bartends -barter -bartered -barterer -barterers -bartering -barters -bartisan -bartisans -bartizan -bartizans -barware -barwares -barye -baryes -baryon -baryonic -baryons -baryta -barytas -baryte -barytes -barytic -barytone -barytones -bas -basal -basally -basalt -basaltes -basaltic -basalts -bascule -bascules -base -baseball -baseballs -baseboard -baseboards -baseborn -based -baseless -baseline -baseliner -baseliners -baselines -basely -baseman -basemen -basement -basementless -basements -baseness -basenesses -basenji -basenjis -baser -baserunning -baserunnings -bases -basest -bash -bashaw -bashaws -bashed -basher -bashers -bashes -bashful -bashfully -bashfulness -bashfulnesses -bashing -bashlyk -bashlyks -basic -basically -basicities -basicity -basics -basidia -basidial -basidiomycete -basidiomycetes -basidiomycetous -basidiospore -basidiospores -basidium -basification -basifications -basified -basifier -basifiers -basifies -basify -basifying -basil -basilar -basilary -basilic -basilica -basilicae -basilican -basilicas -basilisk -basilisks -basils -basin -basinal -basined -basinet -basinets -basinful -basinfuls -basing -basins -basion -basions -basipetal -basipetally -basis -bask -basked -basket -basketball -basketballs -basketful -basketfuls -basketlike -basketries -basketry -baskets -basketsful -basketwork -basketworks -basking -basks -basmati -basmatis -basophil -basophile -basophiles -basophilia -basophilias -basophilic -basophils -basque -basques -bass -basses -basset -basseted -basseting -bassets -bassetted -bassetting -bassi -bassinet -bassinets -bassist -bassists -bassly -bassness -bassnesses -basso -bassoon -bassoonist -bassoonists -bassoons -bassos -basswood -basswoods -bassy -bast -bastard -bastardies -bastardise -bastardised -bastardises -bastardising -bastardization -bastardizations -bastardize -bastardized -bastardizes -bastardizing -bastardly -bastards -bastardy -baste -basted -baster -basters -bastes -bastile -bastiles -bastille -bastilles -bastinade -bastinades -bastinado -bastinadoed -bastinadoes -bastinadoing -basting -bastings -bastion -bastioned -bastions -basts -bat -batboy -batboys -batch -batched -batcher -batchers -batches -batching -bate -bateau -bateaux -bated -bates -batfish -batfishes -batfowl -batfowled -batfowling -batfowls -bath -bathe -bathed -bather -bathers -bathes -bathetic -bathetically -bathhouse -bathhouses -bathing -bathless -bathmat -bathmats -batholith -batholithic -batholiths -bathos -bathoses -bathrobe -bathrobes -bathroom -bathrooms -baths -bathtub -bathtubs -bathwater -bathwaters -bathyal -bathymetric -bathymetrical -bathymetrically -bathymetries -bathymetry -bathypelagic -bathyscaph -bathyscaphe -bathyscaphes -bathyscaphs -bathysphere -bathyspheres -bathythermograph -bathythermographs -batik -batiks -bating -batiste -batistes -batlike -batman -batmen -baton -batons -batrachian -batrachians -bats -batsman -batsmen -batt -battailous -battalia -battalias -battalion -battalions -batteau -batteaux -batted -battement -battements -batten -battened -battener -batteners -battening -battens -batter -battered -batterie -batteries -battering -batters -battery -battier -battiest -battik -battiks -battiness -battinesses -batting -battings -battle -battled -battlefield -battlefields -battlefront -battlefronts -battleground -battlegrounds -battlement -battlemented -battlements -battler -battlers -battles -battleship -battleships -battlewagon -battlewagons -battling -batts -battu -battue -battues -batty -batwing -baubee -baubees -bauble -baubles -baud -baudekin -baudekins -baudrons -baudronses -bauds -bauhinia -bauhinias -baulk -baulked -baulkier -baulkiest -baulking -baulks -baulky -bausond -bauxite -bauxites -bauxitic -bawbee -bawbees -bawcock -bawcocks -bawd -bawdier -bawdies -bawdiest -bawdily -bawdiness -bawdinesses -bawdric -bawdrics -bawdries -bawdry -bawds -bawdy -bawdyhouse -bawdyhouses -bawl -bawled -bawler -bawlers -bawling -bawls -bawsunt -bawtie -bawties -bawty -bay -bayadeer -bayadeers -bayadere -bayaderes -bayamo -bayamos -bayard -bayards -bayberries -bayberry -bayed -baying -bayman -baymen -bayonet -bayoneted -bayoneting -bayonets -bayonetted -bayonetting -bayou -bayous -bays -baywood -baywoods -bazaar -bazaars -bazar -bazars -bazoo -bazooka -bazookas -bazooms -bazoos -bdellium -bdelliums -be -beach -beachboy -beachboys -beachcomb -beachcombed -beachcomber -beachcombers -beachcombing -beachcombs -beached -beaches -beachfront -beachfronts -beachgoer -beachgoers -beachhead -beachheads -beachier -beachiest -beaching -beachside -beachwear -beachy -beacon -beaconed -beaconing -beacons -bead -beaded -beadier -beadiest -beadily -beading -beadings -beadle -beadles -beadlike -beadman -beadmen -beadroll -beadrolls -beads -beadsman -beadsmen -beadwork -beadworks -beady -beagle -beagles -beak -beaked -beaker -beakers -beakier -beakiest -beakless -beaklike -beaks -beaky -beam -beamed -beamier -beamiest -beamily -beaming -beamish -beamishly -beamless -beamlike -beams -beamy -bean -beanbag -beanbags -beanball -beanballs -beaned -beaneries -beanery -beanie -beanies -beaning -beanlike -beano -beanos -beanpole -beanpoles -beans -beanstalk -beanstalks -bear -bearabilities -bearability -bearable -bearably -bearbaiting -bearbaitings -bearberries -bearberry -bearcat -bearcats -beard -bearded -beardedness -beardednesses -bearding -beardless -beards -beardtongue -beardtongues -bearer -bearers -bearhug -bearhugs -bearing -bearings -bearish -bearishly -bearishness -bearishnesses -bearlike -bears -bearskin -bearskins -bearwood -bearwoods -beast -beastie -beasties -beastings -beastlier -beastliest -beastliness -beastlinesses -beastly -beasts -beat -beatable -beaten -beater -beaters -beatific -beatifically -beatification -beatifications -beatified -beatifies -beatify -beatifying -beating -beatings -beatitude -beatitudes -beatless -beatnik -beatniks -beats -beau -beaucoup -beauish -beaus -beaut -beauteous -beauteously -beauteousness -beauteousnesses -beautician -beauticians -beauties -beautification -beautifications -beautified -beautifier -beautifiers -beautifies -beautiful -beautifuler -beautifulest -beautifully -beautifulness -beautifulnesses -beautify -beautifying -beauts -beauty -beaux -beaver -beaverboard -beaverboards -beavered -beavering -beavers -bebeeru -bebeerus -beblood -beblooded -beblooding -bebloods -bebop -bebopper -beboppers -bebops -becalm -becalmed -becalming -becalms -became -becap -becapped -becapping -becaps -becarpet -becarpeted -becarpeting -becarpets -because -bechalk -bechalked -bechalking -bechalks -bechamel -bechamels -bechance -bechanced -bechances -bechancing -becharm -becharmed -becharming -becharms -beck -becked -becket -beckets -becking -beckon -beckoned -beckoner -beckoners -beckoning -beckons -becks -beclamor -beclamored -beclamoring -beclamors -beclasp -beclasped -beclasping -beclasps -becloak -becloaked -becloaking -becloaks -beclog -beclogged -beclogging -beclogs -beclothe -beclothed -beclothes -beclothing -becloud -beclouded -beclouding -beclouds -beclown -beclowned -beclowning -beclowns -become -becomes -becoming -becomingly -becomings -becoward -becowarded -becowarding -becowards -becrawl -becrawled -becrawling -becrawls -becrime -becrimed -becrimes -becriming -becrowd -becrowded -becrowding -becrowds -becrust -becrusted -becrusting -becrusts -becudgel -becudgeled -becudgeling -becudgelled -becudgelling -becudgels -becurse -becursed -becurses -becursing -becurst -bed -bedabble -bedabbled -bedabbles -bedabbling -bedamn -bedamned -bedamning -bedamns -bedarken -bedarkened -bedarkening -bedarkens -bedaub -bedaubed -bedaubing -bedaubs -bedazzle -bedazzled -bedazzlement -bedazzlements -bedazzles -bedazzling -bedbug -bedbugs -bedchair -bedchairs -bedchamber -bedchambers -bedclothes -bedcover -bedcovering -bedcoverings -bedcovers -beddable -bedded -bedder -bedders -bedding -beddings -bedeafen -bedeafened -bedeafening -bedeafens -bedeck -bedecked -bedecking -bedecks -bedel -bedell -bedells -bedels -bedeman -bedemen -bedesman -bedesmen -bedevil -bedeviled -bedeviling -bedevilled -bedevilling -bedevilment -bedevilments -bedevils -bedew -bedewed -bedewing -bedews -bedfast -bedfellow -bedfellows -bedframe -bedframes -bedgown -bedgowns -bediaper -bediapered -bediapering -bediapers -bedight -bedighted -bedighting -bedights -bedim -bedimmed -bedimming -bedimple -bedimpled -bedimples -bedimpling -bedims -bedirtied -bedirties -bedirty -bedirtying -bedizen -bedizened -bedizening -bedizenment -bedizenments -bedizens -bedlam -bedlamite -bedlamites -bedlamp -bedlamps -bedlams -bedless -bedlike -bedmaker -bedmakers -bedmate -bedmates -bedotted -bedouin -bedouins -bedpan -bedpans -bedplate -bedplates -bedpost -bedposts -bedquilt -bedquilts -bedraggle -bedraggled -bedraggles -bedraggling -bedrail -bedrails -bedrape -bedraped -bedrapes -bedraping -bedrench -bedrenched -bedrenches -bedrenching -bedrid -bedridden -bedrivel -bedriveled -bedriveling -bedrivelled -bedrivelling -bedrivels -bedrock -bedrocks -bedroll -bedrolls -bedroom -bedroomed -bedrooms -bedrug -bedrugged -bedrugging -bedrugs -beds -bedsheet -bedsheets -bedside -bedsides -bedsit -bedsits -bedsonia -bedsoniae -bedsonias -bedsore -bedsores -bedspread -bedspreads -bedspring -bedsprings -bedstand -bedstands -bedstead -bedsteads -bedstraw -bedstraws -bedtick -bedticks -bedtime -bedtimes -bedu -beduin -beduins -bedumb -bedumbed -bedumbing -bedumbs -bedunce -bedunced -bedunces -beduncing -bedward -bedwards -bedwarf -bedwarfed -bedwarfing -bedwarfs -bedwetter -bedwetters -bee -beebee -beebees -beebread -beebreads -beech -beechdrops -beechen -beeches -beechier -beechiest -beechnut -beechnuts -beechy -beef -beefalo -beefaloes -beefalos -beefcake -beefcakes -beefeater -beefeaters -beefed -beefier -beefiest -beefily -beefing -beefless -beefs -beefsteak -beefsteaks -beefwood -beefwoods -beefy -beehive -beehives -beekeeper -beekeepers -beekeeping -beekeepings -beelike -beeline -beelined -beelines -beelining -been -beep -beeped -beeper -beepers -beeping -beeps -beer -beerier -beeriest -beers -beery -bees -beestings -beeswax -beeswaxes -beeswing -beeswings -beet -beetle -beetled -beetler -beetlers -beetles -beetling -beetroot -beetroots -beets -beeves -beeyard -beeyards -beezer -beezers -befall -befallen -befalling -befalls -befell -befinger -befingered -befingering -befingers -befit -befits -befitted -befitting -befittingly -beflag -beflagged -beflagging -beflags -beflea -befleaed -befleaing -befleas -befleck -beflecked -beflecking -beflecks -beflower -beflowered -beflowering -beflowers -befog -befogged -befogging -befogs -befool -befooled -befooling -befools -before -beforehand -beforetime -befoul -befouled -befouler -befoulers -befouling -befouls -befret -befrets -befretted -befretting -befriend -befriended -befriending -befriends -befringe -befringed -befringes -befringing -befuddle -befuddled -befuddlement -befuddlements -befuddles -befuddling -beg -begall -begalled -begalling -begalls -began -begat -begaze -begazed -begazes -begazing -beget -begets -begetter -begetters -begetting -beggar -beggared -beggaries -beggaring -beggarliness -beggarlinesses -beggarly -beggars -beggarweed -beggarweeds -beggary -begged -begging -begin -beginner -beginners -beginning -beginnings -begins -begird -begirded -begirding -begirdle -begirdled -begirdles -begirdling -begirds -begirt -beglad -begladded -begladding -beglads -beglamor -beglamored -beglamoring -beglamors -beglamour -beglamoured -beglamouring -beglamours -begloom -begloomed -beglooming -beglooms -begone -begonia -begonias -begorah -begorra -begorrah -begot -begotten -begrim -begrime -begrimed -begrimes -begriming -begrimmed -begrimming -begrims -begroan -begroaned -begroaning -begroans -begrudge -begrudged -begrudges -begrudging -begrudgingly -begs -beguile -beguiled -beguilement -beguilements -beguiler -beguilers -beguiles -beguiling -beguilingly -beguine -beguines -begulf -begulfed -begulfing -begulfs -begum -begums -begun -behalf -behalves -behave -behaved -behaver -behavers -behaves -behaving -behavior -behavioral -behaviorally -behaviorism -behaviorisms -behaviorist -behavioristic -behaviorists -behaviors -behaviour -behaviours -behead -beheaded -beheading -beheadings -beheads -beheld -behemoth -behemoths -behest -behests -behind -behindhand -behinds -behold -beholden -beholder -beholders -beholding -beholds -behoof -behoove -behooved -behooves -behooving -behove -behoved -behoves -behoving -behowl -behowled -behowling -behowls -beige -beiges -beignet -beignets -beigy -being -beings -bejabers -bejeezus -bejesus -bejewel -bejeweled -bejeweling -bejewelled -bejewelling -bejewels -bejumble -bejumbled -bejumbles -bejumbling -bekiss -bekissed -bekisses -bekissing -beknight -beknighted -beknighting -beknights -beknot -beknots -beknotted -beknotting -bel -belabor -belabored -belaboring -belabors -belabour -belaboured -belabouring -belabours -belaced -beladied -beladies -belady -beladying -belated -belatedly -belatedness -belatednesses -belaud -belauded -belauding -belauds -belay -belayed -belaying -belays -belch -belched -belcher -belchers -belches -belching -beldam -beldame -beldames -beldams -beleaguer -beleaguered -beleaguering -beleaguerment -beleaguerments -beleaguers -beleap -beleaped -beleaping -beleaps -beleapt -belemnite -belemnites -belfried -belfries -belfry -belga -belgas -belie -belied -belief -beliefs -belier -beliers -belies -believabilities -believability -believable -believably -believe -believed -believer -believers -believes -believing -belike -beliquor -beliquored -beliquoring -beliquors -belittle -belittled -belittlement -belittlements -belittler -belittlers -belittles -belittling -belive -bell -belladonna -belladonnas -bellbird -bellbirds -bellboy -bellboys -belle -belled -belleek -belleeks -belles -belletrist -belletristic -belletrists -bellflower -bellflowers -bellhop -bellhops -bellicose -bellicosely -bellicosities -bellicosity -bellied -bellies -belligerence -belligerences -belligerencies -belligerency -belligerent -belligerently -belligerents -belling -bellman -bellmen -bellow -bellowed -bellower -bellowers -bellowing -bellows -bellpull -bellpulls -bells -bellwether -bellwethers -bellwort -bellworts -belly -bellyache -bellyached -bellyacher -bellyachers -bellyaches -bellyaching -bellyband -bellybands -bellybutton -bellybuttons -bellyful -bellyfuls -bellying -belong -belonged -belonging -belongingness -belongingnesses -belongings -belongs -beloved -beloveds -below -belowdecks -belowground -belows -bels -belt -belted -belter -belters -belting -beltings -beltless -beltline -beltlines -belts -beltway -beltways -beluga -belugas -belvedere -belvederes -belying -bema -bemadam -bemadamed -bemadaming -bemadams -bemadden -bemaddened -bemaddening -bemaddens -bemas -bemata -bemean -bemeaned -bemeaning -bemeans -bemedaled -bemedalled -bemingle -bemingled -bemingles -bemingling -bemire -bemired -bemires -bemiring -bemist -bemisted -bemisting -bemists -bemix -bemixed -bemixes -bemixing -bemixt -bemoan -bemoaned -bemoaning -bemoans -bemock -bemocked -bemocking -bemocks -bemuddle -bemuddled -bemuddles -bemuddling -bemurmur -bemurmured -bemurmuring -bemurmurs -bemuse -bemused -bemusedly -bemusement -bemusements -bemuses -bemusing -bemuzzle -bemuzzled -bemuzzles -bemuzzling -ben -bename -benamed -benames -benaming -bench -benched -bencher -benchers -benches -benching -benchland -benchlands -benchmark -benchmarking -benchmarkings -benchmarks -benchwarmer -benchwarmers -bend -bendable -benday -bendayed -bendaying -bendays -bended -bendee -bendees -bender -benders -bending -bends -bendways -bendwise -bendy -bendys -bene -beneath -benedick -benedicks -benedict -benediction -benedictions -benedictory -benedicts -benefaction -benefactions -benefactor -benefactors -benefactress -benefactresses -benefic -benefice -beneficed -beneficence -beneficences -beneficent -beneficently -benefices -beneficial -beneficially -beneficialness -beneficialnesses -beneficiaries -beneficiary -beneficiate -beneficiated -beneficiates -beneficiating -beneficiation -beneficiations -beneficing -benefit -benefited -benefiter -benefiters -benefiting -benefits -benefitted -benefitting -benempt -benempted -benes -benevolence -benevolences -benevolent -benevolently -benevolentness -benevolentnesses -bengaline -bengalines -benighted -benightedly -benightedness -benightednesses -benign -benignancies -benignancy -benignant -benignantly -benignities -benignity -benignly -benison -benisons -benjamin -benjamins -benne -bennes -bennet -bennets -benni -bennies -bennis -benny -benomyl -benomyls -bens -bent -benthal -benthic -benthonic -benthos -benthoses -bentonite -bentonites -bentonitic -bents -bentwood -bentwoods -benumb -benumbed -benumbing -benumbs -benzal -benzaldehyde -benzaldehydes -benzanthracene -benzanthracenes -benzene -benzenes -benzenoid -benzidin -benzidine -benzidines -benzidins -benzimidazole -benzimidazoles -benzin -benzine -benzines -benzins -benzoapyrene -benzoapyrenes -benzoate -benzoates -benzocaine -benzocaines -benzodiazepine -benzodiazepines -benzofuran -benzofurans -benzoic -benzoin -benzoins -benzol -benzole -benzoles -benzols -benzophenone -benzophenones -benzoyl -benzoyls -benzyl -benzylic -benzyls -bepaint -bepainted -bepainting -bepaints -bepimple -bepimpled -bepimples -bepimpling -bequeath -bequeathal -bequeathals -bequeathed -bequeathing -bequeaths -bequest -bequests -berake -beraked -berakes -beraking -berascal -berascaled -berascaling -berascals -berate -berated -berates -berating -berberin -berberine -berberines -berberins -berberis -berberises -berceuse -berceuses -berdache -berdaches -bereave -bereaved -bereavement -bereavements -bereaver -bereavers -bereaves -bereaving -bereft -beret -berets -beretta -berettas -berg -bergamot -bergamots -bergere -bergeres -bergs -berhyme -berhymed -berhymes -berhyming -beribboned -beriberi -beriberis -berime -berimed -berimes -beriming -beringed -berkelium -berkeliums -berlin -berline -berlines -berlins -berm -berme -bermes -berms -bermudas -bernicle -bernicles -berobed -berouged -berretta -berrettas -berried -berries -berry -berrying -berrylike -berseem -berseems -berserk -berserker -berserkers -berserkly -berserks -berth -bertha -berthas -berthed -berthing -berths -beryl -beryline -beryllium -berylliums -beryls -bescorch -bescorched -bescorches -bescorching -bescour -bescoured -bescouring -bescours -bescreen -bescreened -bescreening -bescreens -beseech -beseeched -beseeches -beseeching -beseechingly -beseem -beseemed -beseeming -beseems -beset -besetment -besetments -besets -besetter -besetters -besetting -beshadow -beshadowed -beshadowing -beshadows -beshame -beshamed -beshames -beshaming -beshiver -beshivered -beshivering -beshivers -beshout -beshouted -beshouting -beshouts -beshrew -beshrewed -beshrewing -beshrews -beshroud -beshrouded -beshrouding -beshrouds -beside -besides -besiege -besieged -besieger -besiegers -besieges -besieging -beslaved -beslime -beslimed -beslimes -besliming -besmear -besmeared -besmearing -besmears -besmile -besmiled -besmiles -besmiling -besmirch -besmirched -besmirches -besmirching -besmoke -besmoked -besmokes -besmoking -besmooth -besmoothed -besmoothing -besmooths -besmudge -besmudged -besmudges -besmudging -besmut -besmuts -besmutted -besmutting -besnow -besnowed -besnowing -besnows -besom -besoms -besoothe -besoothed -besoothes -besoothing -besot -besots -besotted -besotting -besought -bespake -bespatter -bespattered -bespattering -bespatters -bespeak -bespeaking -bespeaks -bespectacled -bespoke -bespoken -bespouse -bespoused -bespouses -bespousing -bespread -bespreading -bespreads -besprent -besprinkle -besprinkled -besprinkles -besprinkling -best -bestead -besteaded -besteading -besteads -bested -bestial -bestialities -bestiality -bestialize -bestialized -bestializes -bestializing -bestially -bestiaries -bestiary -besting -bestir -bestirred -bestirring -bestirs -bestow -bestowal -bestowals -bestowed -bestowing -bestows -bestrew -bestrewed -bestrewing -bestrewn -bestrews -bestrid -bestridden -bestride -bestrides -bestriding -bestrode -bestrow -bestrowed -bestrowing -bestrown -bestrows -bests -bestseller -bestsellerdom -bestsellerdoms -bestsellers -bestud -bestudded -bestudding -bestuds -beswarm -beswarmed -beswarming -beswarms -bet -beta -betaine -betaines -betake -betaken -betakes -betaking -betas -betatron -betatrons -betatter -betattered -betattering -betatters -betaxed -betel -betelnut -betelnuts -betels -beth -bethank -bethanked -bethanking -bethanks -bethel -bethels -bethesda -bethesdas -bethink -bethinking -bethinks -bethorn -bethorned -bethorning -bethorns -bethought -beths -bethump -bethumped -bethumping -bethumps -betide -betided -betides -betiding -betime -betimes -betise -betises -betoken -betokened -betokening -betokens -beton -betonies -betons -betony -betook -betray -betrayal -betrayals -betrayed -betrayer -betrayers -betraying -betrays -betroth -betrothal -betrothals -betrothed -betrotheds -betrothing -betroths -bets -betta -bettas -betted -better -bettered -bettering -betterment -betterments -betters -betting -bettor -bettors -between -betweenbrain -betweenbrains -betweenness -betweennesses -betweentimes -betweenwhiles -betwixt -beuncled -bevatron -bevatrons -bevel -beveled -beveler -bevelers -beveling -bevelled -beveller -bevellers -bevelling -bevels -beverage -beverages -bevies -bevomit -bevomited -bevomiting -bevomits -bevor -bevors -bevy -bewail -bewailed -bewailer -bewailers -bewailing -bewails -beware -bewared -bewares -bewaring -bewearied -bewearies -beweary -bewearying -beweep -beweeping -beweeps -bewept -bewhiskered -bewig -bewigged -bewigging -bewigs -bewilder -bewildered -bewilderedly -bewilderedness -bewilderednesses -bewildering -bewilderingly -bewilderment -bewilderments -bewilders -bewinged -bewitch -bewitched -bewitcheries -bewitchery -bewitches -bewitching -bewitchingly -bewitchment -bewitchments -beworm -bewormed -beworming -beworms -beworried -beworries -beworry -beworrying -bewrap -bewrapped -bewrapping -bewraps -bewrapt -bewray -bewrayed -bewrayer -bewrayers -bewraying -bewrays -bey -beylic -beylics -beylik -beyliks -beyond -beyonds -beys -bezant -bezants -bezazz -bezazzes -bezel -bezels -bezil -bezils -bezique -beziques -bezoar -bezoars -bezzant -bezzants -bhakta -bhaktas -bhakti -bhaktis -bhang -bhangs -bharal -bharals -bheestie -bheesties -bheesty -bhistie -bhisties -bhoot -bhoots -bhut -bhuts -bi -biacetyl -biacetyls -biali -bialies -bialis -bialy -bialys -biannual -biannually -bias -biased -biasedly -biases -biasing -biasness -biasnesses -biassed -biasses -biassing -biathlete -biathletes -biathlon -biathlons -biaxal -biaxial -biaxially -bib -bibasic -bibb -bibbed -bibber -bibberies -bibbers -bibbery -bibbing -bibbs -bibcock -bibcocks -bibelot -bibelots -bible -bibles -bibless -biblical -biblically -biblicism -biblicisms -biblicist -biblicists -biblike -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 -bibliotic -bibliotics -bibliotist -bibliotists -biblist -biblists -bibs -bibulous -bibulously -bibulousness -bibulousnesses -bicameral -bicameralism -bicameralisms -bicarb -bicarbonate -bicarbonates -bicarbs -bicaudal -bice -bicentenaries -bicentenary -bicentennial -bicentennials -biceps -bicepses -bices -bichromate -bichromated -bichromates -bichrome -bicipital -bicker -bickered -bickerer -bickerers -bickering -bickers -bicoastal -bicolor -bicolored -bicolors -bicolour -bicolours -bicomponent -biconcave -biconcavities -biconcavity -biconditional -biconditionals -biconvex -biconvexities -biconvexity -bicorn -bicorne -bicornes -bicron -bicrons -bicultural -biculturalism -biculturalisms -bicuspid -bicuspids -bicycle -bicycled -bicycler -bicyclers -bicycles -bicyclic -bicycling -bicyclist -bicyclists -bid -bidarka -bidarkas -bidarkee -bidarkees -biddabilities -biddability -biddable -biddably -bidden -bidder -bidders -biddies -bidding -biddings -biddy -bide -bided -bidental -bider -biders -bides -bidet -bidets -bidialectal -bidialectalism -bidialectalisms -biding -bidirectional -bidirectionally -bidonville -bidonvilles -bids -bield -bielded -bielding -bields -biennale -biennales -biennia -biennial -biennially -biennials -biennium -bienniums -bier -biers -biface -bifaces -bifacial -bifacially -biff -biffed -biffies -biffin -biffing -biffins -biffs -biffy -bifid -bifidities -bifidity -bifidly -bifilar -bifilarly -biflagellate -biflex -bifocal -bifocals -bifold -biforate -biforked -biform -biformed -bifunctional -bifurcate -bifurcated -bifurcates -bifurcating -bifurcation -bifurcations -big -bigamies -bigamist -bigamists -bigamous -bigamously -bigamy -bigarade -bigarades -bigaroon -bigaroons -bigeminal -bigeminies -bigeminy -bigeneric -bigeye -bigeyes -bigfeet -bigfoot -bigfoots -bigger -biggest -biggety -biggie -biggies -biggin -bigging -biggings -biggins -biggish -biggity -bighead -bigheaded -bigheads -bighearted -bigheartedly -bigheartedness -bigheartednesses -bighorn -bighorns -bight -bighted -bighting -bights -bigly -bigmouth -bigmouthed -bigmouths -bigness -bignesses -bignonia -bignonias -bigot -bigoted -bigotedly -bigotries -bigotry -bigots -bigs -bigshot -bigshots -bigwig -bigwigs -bihourly -bijection -bijections -bijective -bijou -bijous -bijouterie -bijouteries -bijoux -bijugate -bijugous -bike -biked -biker -bikers -bikes -bikeway -bikeways -bikie -bikies -biking -bikini -bikinied -bikinis -bilabial -bilabials -bilabiate -bilander -bilanders -bilateral -bilateralism -bilateralisms -bilaterally -bilayer -bilayers -bilberries -bilberry -bilbo -bilboa -bilboas -bilboes -bilbos -bildungsroman -bildungsromane -bildungsromans -bile -biles -bilge -bilged -bilges -bilgewater -bilgewaters -bilgier -bilgiest -bilging -bilgy -bilharzia -bilharzial -bilharzias -bilharziases -bilharziasis -biliary -bilinear -bilingual -bilingualism -bilingualisms -bilingually -bilinguals -bilious -biliously -biliousness -biliousnesses -bilirubin -bilirubins -biliverdin -biliverdins -bilk -bilked -bilker -bilkers -bilking -bilks -bill -billable -billabong -billabongs -billboard -billboarded -billboarding -billboards -billbug -billbugs -billed -biller -billers -billet -billeted -billeter -billeters -billeting -billets -billfish -billfishes -billfold -billfolds -billhead -billheads -billhook -billhooks -billiard -billiards -billie -billies -billing -billings -billingsgate -billingsgates -billion -billionaire -billionaires -billions -billionth -billionths -billon -billons -billow -billowed -billowier -billowiest -billowing -billows -billowy -bills -billy -billycan -billycans -billycock -billycocks -bilobate -bilobed -bilocation -bilocations -bilsted -bilsteds -biltong -biltongs -bima -bimah -bimahs -bimanous -bimanual -bimanually -bimas -bimbo -bimboes -bimbos -bimensal -bimester -bimesters -bimetal -bimetallic -bimetallics -bimetallism -bimetallisms -bimetallist -bimetallistic -bimetallists -bimetals -bimethyl -bimethyls -bimillenaries -bimillenary -bimillennial -bimillennials -bimodal -bimodalities -bimodality -bimolecular -bimolecularly -bimonthlies -bimonthly -bimorph -bimorphemic -bimorphs -bin -binal -binaries -binary -binate -binately -binational -binaural -binaurally -bind -bindable -binder -binderies -binders -bindery -bindi -binding -bindingly -bindingness -bindingnesses -bindings -bindis -bindle -bindles -binds -bindweed -bindweeds -bine -bines -binge -binged -bingeing -binger -bingers -binges -binging -bingo -bingos -binit -binits -binnacle -binnacles -binned -binning -binocle -binocles -binocs -binocular -binocularities -binocularity -binocularly -binoculars -binomial -binomially -binomials -bins -bint -bints -binucleate -binucleated -bio -bioacoustics -bioactive -bioactivities -bioactivity -bioassay -bioassayed -bioassaying -bioassays -bioavailabilities -bioavailability -bioavailable -biocenoses -biocenosis -biochemical -biochemically -biochemicals -biochemist -biochemistries -biochemistry -biochemists -biochip -biochips -biocidal -biocide -biocides -bioclean -bioclimatic -biocoenoses -biocoenosis -biocompatibilities -biocompatibility -biocompatible -biocontrol -biocontrols -bioconversion -bioconversions -biocycle -biocycles -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 -bioethic -bioethical -bioethicist -bioethicists -bioethics -biofeedback -biofeedbacks -biofouling -biofoulings -biogas -biogases -biogasses -biogen -biogeneses -biogenesis -biogenetic -biogenetically -biogenic -biogenies -biogenous -biogens -biogeny -biogeochemical -biogeochemicals -biogeochemistries -biogeochemistry -biogeographer -biogeographers -biogeographic -biogeographical -biogeographies -biogeography -biographee -biographees -biographer -biographers -biographic -biographical -biographically -biographies -biography -biohazard -biohazards -bioherm -bioherms -biologic -biological -biologically -biologicals -biologics -biologies -biologism -biologisms -biologist -biologistic -biologists -biology -bioluminescence -bioluminescences -bioluminescent -biolyses -biolysis -biolytic -biomarker -biomarkers -biomass -biomasses -biomaterial -biomaterials -biomathematical -biomathematician -biomathematicians -biomathematics -biome -biomechanical -biomechanically -biomechanics -biomedical -biomedicine -biomedicines -biomes -biometeorological -biometeorologies -biometeorology -biometric -biometrical -biometrician -biometricians -biometrics -biometries -biometry -biomolecular -biomolecule -biomolecules -biomorphic -bionic -bionics -bionomic -bionomics -bionomies -bionomy -biont -biontic -bionts -biophysical -biophysicist -biophysicists -biophysics -biopic -biopics -bioplasm -bioplasms -biopolymer -biopolymers -biopsic -biopsied -biopsies -biopsy -biopsying -bioptic -bioreactor -bioreactors -bioregion -bioregional -bioregionalism -bioregionalisms -bioregionalist -bioregionalists -bioregions -bioremediation -bioremediations -biorhythm -biorhythmic -biorhythms -bios -biosafeties -biosafety -bioscience -biosciences -bioscientific -bioscientist -bioscientists -bioscope -bioscopes -bioscopies -bioscopy -biosensor -biosensors -biosocial -biosocially -biosolid -biosolids -biosphere -biospheres -biospheric -biostatistical -biostatistician -biostatisticians -biostatistics -biostratigraphic -biostratigraphies -biostratigraphy -biosyntheses -biosynthesis -biosynthetic -biosynthetically -biosystematic -biosystematics -biosystematist -biosystematists -biota -biotas -biotech -biotechnical -biotechnological -biotechnologies -biotechnologist -biotechnologists -biotechnology -biotechs -biotelemetric -biotelemetries -biotelemetry -biotic -biotical -biotics -biotin -biotins -biotite -biotites -biotitic -biotope -biotopes -biotoxin -biotoxins -biotransformation -biotransformations -biotron -biotrons -biotype -biotypes -biotypic -biovular -bipack -bipacks -biparental -biparentally -biparous -biparted -bipartisan -bipartisanism -bipartisanisms -bipartisanship -bipartisanships -bipartite -bipartitely -bipartition -bipartitions -biparty -biped -bipedal -bipedalism -bipedalisms -bipedalities -bipedality -bipedally -bipeds -biphasic -biphenyl -biphenyls -bipinnate -bipinnately -biplane -biplanes -bipod -bipods -bipolar -bipolarities -bipolarity -bipolarization -bipolarizations -bipolarize -bipolarized -bipolarizes -bipolarizing -bipropellant -bipropellants -bipyramid -bipyramidal -bipyramids -biquadratic -biquadratics -biracial -biracialism -biracialisms -biradial -biramose -biramous -birch -birched -birchen -birches -birching -bird -birdbath -birdbaths -birdbrain -birdbrained -birdbrains -birdcage -birdcages -birdcall -birdcalls -birded -birder -birders -birdfarm -birdfarms -birdhouse -birdhouses -birdie -birdied -birdieing -birdies -birding -birdings -birdlike -birdlime -birdlimed -birdlimes -birdliming -birdman -birdmen -birds -birdseed -birdseeds -birdseye -birdseyes -birdshot -birdshots -birdsong -birdsongs -birdwatcher -birdwatchers -birefringence -birefringences -birefringent -bireme -biremes -biretta -birettas -birk -birkie -birkies -birks -birl -birle -birled -birler -birlers -birles -birling -birlings -birls -birr -birred -birretta -birrettas -birring -birrotch -birrs -birse -birses -birth -birthdate -birthdates -birthday -birthdays -birthed -birthing -birthmark -birthmarks -birthplace -birthplaces -birthrate -birthrates -birthright -birthrights -birthroot -birthroots -births -birthstone -birthstones -birthwort -birthworts -bis -biscuit -biscuits -bise -bisect -bisected -bisecting -bisection -bisectional -bisectionally -bisections -bisector -bisectors -bisects -bises -bisexual -bisexualities -bisexuality -bisexually -bisexuals -bishop -bishoped -bishoping -bishopric -bishoprics -bishops -bisk -bisks -bismuth -bismuthic -bismuths -bisnaga -bisnagas -bison -bisons -bisontine -bisque -bisques -bistate -bister -bistered -bisters -bistort -bistorts -bistouries -bistoury -bistre -bistred -bistres -bistro -bistroic -bistros -bisulfate -bisulfates -bisulfide -bisulfides -bisulfite -bisulfites -bit -bitable -bitartrate -bitartrates -bitch -bitched -bitcheries -bitchery -bitches -bitchier -bitchiest -bitchily -bitchiness -bitchinesses -bitching -bitchy -bite -biteable -biter -biters -bites -bitewing -bitewings -biting -bitingly -bits -bitstock -bitstocks -bitsy -bitt -bitted -bitten -bitter -bitterbrush -bitterbrushes -bittered -bitterer -bitterest -bittering -bitterish -bitterly -bittern -bitterness -bitternesses -bitterns -bitterroot -bitterroots -bitters -bittersweet -bittersweetly -bittersweetness -bittersweetnesses -bittersweets -bitterweed -bitterweeds -bittier -bittiest -bitting -bittings -bittock -bittocks -bitts -bitty -bitumen -bitumens -bituminization -bituminizations -bituminize -bituminized -bituminizes -bituminizing -bituminous -biunique -biuniqueness -biuniquenesses -bivalent -bivalents -bivalve -bivalved -bivalves -bivariate -bivinyl -bivinyls -bivouac -bivouacked -bivouacking -bivouacks -bivouacs -biweeklies -biweekly -biyearly -biz -bizarre -bizarrely -bizarreness -bizarrenesses -bizarrerie -bizarreries -bizarres -bize -bizes -biznaga -biznagas -bizonal -bizone -bizones -bizzes -blab -blabbed -blabber -blabbered -blabbering -blabbermouth -blabbermouths -blabbers -blabbing -blabby -blabs -black -blackamoor -blackamoors -blackball -blackballed -blackballing -blackballs -blackberries -blackberry -blackbird -blackbirded -blackbirder -blackbirders -blackbirding -blackbirds -blackboard -blackboards -blackbodies -blackbody -blackboy -blackboys -blackcap -blackcaps -blackcock -blackcocks -blacked -blacken -blackened -blackener -blackeners -blackening -blackenings -blackens -blacker -blackest -blackface -blackfaces -blackfin -blackfins -blackfish -blackfishes -blackflies -blackfly -blackguard -blackguarded -blackguarding -blackguardism -blackguardisms -blackguardly -blackguards -blackgum -blackgums -blackhander -blackhanders -blackhead -blackheads -blackheart -blackhearts -blacking -blackings -blackish -blackjack -blackjacked -blackjacking -blackjacks -blackland -blacklands -blacklead -blackleads -blackleg -blacklegs -blacklist -blacklisted -blacklister -blacklisters -blacklisting -blacklists -blackly -blackmail -blackmailed -blackmailer -blackmailers -blackmailing -blackmails -blackness -blacknesses -blackout -blackouts -blackpoll -blackpolls -blacks -blacksmith -blacksmithing -blacksmithings -blacksmiths -blacksnake -blacksnakes -blacktail -blacktails -blackthorn -blackthorns -blacktop -blacktopped -blacktopping -blacktops -blackwater -blackwaters -blackwood -blackwoods -bladder -bladderlike -bladdernut -bladdernuts -bladders -bladderwort -bladderworts -bladdery -blade -bladed -bladelike -blades -blae -blaeberries -blaeberry -blah -blahs -blain -blains -blam -blamable -blamably -blame -blamed -blameful -blamefully -blameless -blamelessly -blamelessness -blamelessnesses -blamer -blamers -blames -blameworthiness -blameworthinesses -blameworthy -blaming -blams -blanch -blanched -blancher -blanchers -blanches -blanching -blancmange -blancmanges -bland -blander -blandest -blandish -blandished -blandisher -blandishers -blandishes -blandishing -blandishment -blandishments -blandly -blandness -blandnesses -blank -blanked -blanker -blankest -blanket -blanketed -blanketflower -blanketflowers -blanketing -blanketlike -blankets -blanking -blankly -blankness -blanknesses -blanks -blanquette -blanquettes -blare -blared -blares -blaring -blarney -blarneyed -blarneying -blarneys -blase -blaspheme -blasphemed -blasphemer -blasphemers -blasphemes -blasphemies -blaspheming -blasphemous -blasphemously -blasphemousness -blasphemousnesses -blasphemy -blast -blasted -blastema -blastemal -blastemas -blastemata -blastematic -blaster -blasters -blastie -blastier -blasties -blastiest -blasting -blastings -blastment -blastments -blastocoel -blastocoele -blastocoeles -blastocoelic -blastocoels -blastocyst -blastocysts -blastoderm -blastoderms -blastodisc -blastodiscs -blastoff -blastoffs -blastoma -blastomas -blastomata -blastomere -blastomeres -blastomycoses -blastomycosis -blastopore -blastopores -blastoporic -blastospore -blastospores -blasts -blastula -blastulae -blastulas -blastulation -blastulations -blasty -blat -blatancies -blatancy -blatant -blatantly -blate -blather -blathered -blatherer -blatherers -blathering -blathers -blatherskite -blatherskites -blats -blatted -blatter -blattered -blattering -blatters -blatting -blaubok -blauboks -blaw -blawed -blawing -blawn -blaws -blaxploitation -blaxploitations -blaze -blazed -blazer -blazers -blazes -blazing -blazingly -blazon -blazoned -blazoner -blazoners -blazoning -blazonings -blazonries -blazonry -blazons -bleach -bleachable -bleached -bleacher -bleacherite -bleacherites -bleachers -bleaches -bleaching -bleak -bleaker -bleakest -bleakish -bleakly -bleakness -bleaknesses -bleaks -blear -bleared -blearier -bleariest -blearily -bleariness -blearinesses -blearing -blears -bleary -bleat -bleated -bleater -bleaters -bleating -bleats -bleb -blebby -blebs -bled -bleed -bleeder -bleeders -bleeding -bleedings -bleeds -bleep -bleeped -bleeping -bleeps -blellum -blellums -blemish -blemished -blemishes -blemishing -blench -blenched -blencher -blenchers -blenches -blenching -blend -blende -blended -blender -blenders -blendes -blending -blends -blennies -blenny -blent -blepharoplast -blepharoplasties -blepharoplasts -blepharoplasty -blepharospasm -blepharospasms -blesbok -blesboks -blesbuck -blesbucks -bless -blessed -blesseder -blessedest -blessedly -blessedness -blessednesses -blesser -blessers -blesses -blessing -blessings -blest -blet -blether -blethered -blethering -blethers -blets -blew -blight -blighted -blighter -blighters -blighties -blighting -blights -blighty -blimey -blimp -blimpish -blimpishly -blimpishness -blimpishnesses -blimps -blimy -blin -blind -blindage -blindages -blinded -blinder -blinders -blindest -blindfish -blindfishes -blindfold -blindfolded -blindfolding -blindfolds -blinding -blindingly -blindly -blindness -blindnesses -blinds -blindside -blindsided -blindsides -blindsiding -blindworm -blindworms -blini -blinis -blink -blinkard -blinkards -blinked -blinker -blinkered -blinkering -blinkers -blinking -blinks -blintz -blintze -blintzes -blip -blipped -blipping -blips -bliss -blissed -blisses -blissful -blissfully -blissfulness -blissfulnesses -blissing -blister -blistered -blistering -blisteringly -blisters -blistery -blite -blites -blithe -blithely -blither -blithered -blithering -blithers -blithesome -blithesomely -blithest -blitz -blitzed -blitzes -blitzing -blitzkrieg -blitzkriegs -blivet -blivets -blizzard -blizzardly -blizzards -blizzardy -bloat -bloated -bloater -bloaters -bloating -bloats -blob -blobbed -blobbing -blobs -bloc -block -blockade -blockaded -blockader -blockaders -blockades -blockading -blockage -blockages -blockbuster -blockbusters -blockbusting -blockbustings -blocked -blocker -blockers -blockhead -blockheads -blockhouse -blockhouses -blockier -blockiest -blocking -blockish -blocks -blocky -blocs -bloke -blokes -blond -blonde -blonder -blondes -blondest -blondish -blonds -blood -bloodbath -bloodbaths -bloodcurdling -blooded -bloodfin -bloodfins -bloodguilt -bloodguiltiness -bloodguiltinesses -bloodguilts -bloodguilty -bloodhound -bloodhounds -bloodied -bloodier -bloodies -bloodiest -bloodily -bloodiness -bloodinesses -blooding -bloodings -bloodless -bloodlessly -bloodlessness -bloodlessnesses -bloodletting -bloodlettings -bloodline -bloodlines -bloodmobile -bloodmobiles -bloodred -bloodroot -bloodroots -bloods -bloodshed -bloodsheds -bloodshot -bloodstain -bloodstained -bloodstains -bloodstock -bloodstocks -bloodstone -bloodstones -bloodstream -bloodstreams -bloodsucker -bloodsuckers -bloodsucking -bloodthirstily -bloodthirstiness -bloodthirstinesses -bloodthirsty -bloodworm -bloodworms -bloody -bloodying -blooey -blooie -bloom -bloomed -bloomer -bloomeries -bloomers -bloomery -bloomier -bloomiest -blooming -blooms -bloomy -bloop -blooped -blooper -bloopers -blooping -bloops -blossom -blossomed -blossoming -blossoms -blossomy -blot -blotch -blotched -blotches -blotchier -blotchiest -blotchily -blotching -blotchy -blotless -blots -blotted -blotter -blotters -blottier -blottiest -blotting -blotto -blotty -blouse -bloused -blouses -blousier -blousiest -blousily -blousing -blouson -blousons -blousy -bloviate -bloviated -bloviates -bloviating -bloviation -bloviations -blow -blowback -blowbacks -blowball -blowballs -blowby -blowbys -blowdown -blowdowns -blowed -blower -blowers -blowfish -blowfishes -blowflies -blowfly -blowgun -blowguns -blowhard -blowhards -blowhole -blowholes -blowier -blowiest -blowing -blowjob -blowjobs -blown -blowoff -blowoffs -blowout -blowouts -blowpipe -blowpipes -blows -blowsed -blowsier -blowsiest -blowsily -blowsy -blowtorch -blowtorches -blowtube -blowtubes -blowup -blowups -blowy -blowzed -blowzier -blowziest -blowzily -blowzy -blub -blubbed -blubber -blubbered -blubbering -blubbers -blubbery -blubbing -blubs -blucher -bluchers -bludgeon -bludgeoned -bludgeoning -bludgeons -bludger -bludgers -blue -blueball -blueballs -bluebeard -bluebeards -bluebell -bluebells -blueberries -blueberry -bluebill -bluebills -bluebird -bluebirds -blueblood -bluebloods -bluebonnet -bluebonnets -bluebook -bluebooks -bluebottle -bluebottles -bluecap -bluecaps -bluecoat -bluecoats -blued -bluefin -bluefins -bluefish -bluefishes -bluegill -bluegills -bluegrass -bluegrasses -bluegum -bluegums -bluehead -blueheads -blueing -blueings -blueish -bluejack -bluejacket -bluejackets -bluejacks -bluejay -bluejays -bluejeans -blueline -bluelines -bluely -blueness -bluenesses -bluenose -bluenoses -bluepoint -bluepoints -blueprint -blueprinted -blueprinting -blueprints -bluer -blues -blueshift -blueshifted -blueshifts -bluesier -bluesiest -bluesman -bluesmen -bluest -bluestem -bluestems -bluestocking -bluestockings -bluestone -bluestones -bluesy -bluet -bluetick -blueticks -bluetongue -bluetongues -bluets -blueweed -blueweeds -bluewood -bluewoods -bluey -blueys -bluff -bluffed -bluffer -bluffers -bluffest -bluffing -bluffly -bluffness -bluffnesses -bluffs -bluing -bluings -bluish -bluishness -bluishnesses -blume -blumed -blumes -bluming -blunder -blunderbuss -blunderbusses -blundered -blunderer -blunderers -blundering -blunderingly -blunders -blunge -blunged -blunger -blungers -blunges -blunging -blunt -blunted -blunter -bluntest -blunting -bluntly -bluntness -bluntnesses -blunts -blur -blurb -blurbed -blurbing -blurbs -blurred -blurrier -blurriest -blurrily -blurriness -blurrinesses -blurring -blurringly -blurry -blurs -blurt -blurted -blurter -blurters -blurting -blurts -blush -blushed -blusher -blushers -blushes -blushful -blushing -blushingly -bluster -blustered -blusterer -blusterers -blustering -blusteringly -blusterous -blusters -blustery -blype -blypes -bo -boa -boar -board -boarded -boarder -boarders -boarding -boardinghouse -boardinghouses -boardings -boardlike -boardman -boardmen -boardroom -boardrooms -boards -boardsailing -boardsailings -boardsailor -boardsailors -boardwalk -boardwalks -boarfish -boarfishes -boarish -boars -boart -boarts -boas -boast -boasted -boaster -boasters -boastful -boastfully -boastfulness -boastfulnesses -boasting -boasts -boat -boatable -boatbill -boatbills -boatbuilder -boatbuilders -boatbuilding -boatbuildings -boated -boatel -boatels -boater -boaters -boatful -boatfuls -boathook -boathooks -boathouse -boathouses -boating -boatings -boatlike -boatload -boatloads -boatman -boatmen -boats -boatsman -boatsmen -boatswain -boatswains -boatyard -boatyards -bob -bobbed -bobber -bobberies -bobbers -bobbery -bobbies -bobbin -bobbinet -bobbinets -bobbing -bobbins -bobble -bobbled -bobbles -bobbling -bobby -bobcat -bobcats -bobeche -bobeches -bobolink -bobolinks -bobs -bobsled -bobsledded -bobsledder -bobsledders -bobsledding -bobsleddings -bobsleds -bobstay -bobstays -bobtail -bobtailed -bobtailing -bobtails -bobwhite -bobwhites -bocaccio -bocaccios -bocce -bocces -bocci -boccia -boccias -boccie -boccies -boccis -boche -boches -bock -bocks -bod -bodacious -bodaciously -boddhisattva -boddhisattvas -bode -boded -bodega -bodegas -bodement -bodements -bodes -bodhisattva -bodhisattvas -bodhran -bodhrans -bodice -bodices -bodied -bodies -bodiless -bodily -boding -bodingly -bodings -bodkin -bodkins -bods -body -bodybuilder -bodybuilders -bodybuilding -bodybuildings -bodycheck -bodychecked -bodychecking -bodychecks -bodyguard -bodyguards -bodying -bodysuit -bodysuits -bodysurf -bodysurfed -bodysurfer -bodysurfers -bodysurfing -bodysurfs -bodywork -bodyworks -boehmite -boehmites -boff -boffed -boffin -boffing -boffins -boffo -boffola -boffolas -boffos -boffs -bog -bogan -bogans -bogbean -bogbeans -bogey -bogeyed -bogeying -bogeyman -bogeymen -bogeys -bogged -boggier -boggiest -bogging -boggish -boggle -boggled -boggler -bogglers -boggles -boggling -boggy -bogie -bogies -bogle -bogles -bogs -bogus -bogwood -bogwoods -bogy -bogyism -bogyisms -bogyman -bogymen -bohea -boheas -bohemia -bohemian -bohemianism -bohemianisms -bohemians -bohemias -bohrium -bohriums -bohunk -bohunks -boil -boilable -boiled -boiler -boilermaker -boilermakers -boilerplate -boilerplates -boilers -boilersuit -boilersuits -boiling -boiloff -boiloffs -boils -boing -boiserie -boiseries -boisterous -boisterously -boisterousness -boisterousnesses -boite -boites -bola -bolar -bolas -bolases -bold -bolder -boldest -boldface -boldfaced -boldfaces -boldfacing -boldly -boldness -boldnesses -bolds -bole -bolero -boleros -boles -bolete -boletes -boleti -boletus -boletuses -bolide -bolides -bolivar -bolivares -bolivars -bolivia -boliviano -bolivianos -bolivias -boll -bollard -bollards -bolled -bolling -bollix -bollixed -bollixes -bollixing -bollocks -bollox -bolloxed -bolloxes -bolloxing -bolls -bollworm -bollworms -bolo -bologna -bolognas -bolometer -bolometers -bolometric -bolometrically -boloney -boloneys -bolos -bolshevism -bolshevisms -bolshevize -bolshevized -bolshevizes -bolshevizing -bolshie -bolshies -bolshy -bolson -bolsons -bolster -bolstered -bolsterer -bolsterers -bolstering -bolsters -bolt -bolted -bolter -bolters -bolthead -boltheads -bolthole -boltholes -bolting -boltonia -boltonias -boltrope -boltropes -bolts -bolus -boluses -bomb -bombard -bombarded -bombardier -bombardiers -bombarding -bombardment -bombardments -bombardon -bombardons -bombards -bombast -bombastic -bombastically -bombasts -bombax -bombazine -bombazines -bombe -bombed -bomber -bombers -bombes -bombesin -bombesins -bombinate -bombinated -bombinates -bombinating -bombination -bombinations -bombing -bombings -bombload -bombloads -bombproof -bombs -bombshell -bombshells -bombsight -bombsights -bombycid -bombycids -bombyx -bombyxes -bonaci -bonacis -bonanza -bonanzas -bonbon -bonbons -bond -bondable -bondage -bondages -bonded -bonder -bonders -bondholder -bondholders -bonding -bondings -bondmaid -bondmaids -bondman -bondmen -bonds -bondsman -bondsmen -bondstone -bondstones -bonduc -bonducs -bondwoman -bondwomen -bone -boned -bonefish -bonefishes -bonefishing -bonefishings -bonehead -boneheaded -boneheadedness -boneheadednesses -boneheads -boneless -bonemeal -bonemeals -boner -boners -bones -boneset -bonesets -bonesetter -bonesetters -boney -boneyard -boneyards -bonfire -bonfires -bong -bonged -bonging -bongo -bongoes -bongoist -bongoists -bongos -bongs -bonhomie -bonhomies -bonhomous -bonier -boniest -boniface -bonifaces -boniness -boninesses -boning -bonita -bonitas -bonito -bonitoes -bonitos -bonk -bonked -bonkers -bonking -bonks -bonne -bonnes -bonnet -bonneted -bonneting -bonnets -bonnie -bonnier -bonniest -bonnily -bonnock -bonnocks -bonny -bonnyclabber -bonnyclabbers -bonsai -bonsais -bonspell -bonspells -bonspiel -bonspiels -bontebok -bonteboks -bonus -bonuses -bony -bonze -bonzer -bonzes -boo -boob -boobed -boobie -boobies -boobing -boobish -booboisie -booboisies -booboo -booboos -boobs -booby -boodle -boodled -boodler -boodlers -boodles -boodling -booed -booger -boogerman -boogermen -boogers -boogey -boogeyed -boogeying -boogeyman -boogeymen -boogeys -boogie -boogied -boogieing -boogies -boogy -boogying -boogyman -boogymen -boohoo -boohooed -boohooing -boohoos -booing -book -bookable -bookbinder -bookbinderies -bookbinders -bookbindery -bookbinding -bookbindings -bookcase -bookcases -booked -bookend -bookends -booker -bookers -bookful -bookfuls -bookie -bookies -booking -bookings -bookish -bookishly -bookishness -bookishnesses -bookkeeper -bookkeepers -bookkeeping -bookkeepings -booklet -booklets -booklice -booklore -booklores -booklouse -bookmaker -bookmakers -bookmaking -bookmakings -bookman -bookmark -bookmarked -bookmarker -bookmarkers -bookmarking -bookmarks -bookmen -bookmobile -bookmobiles -bookplate -bookplates -bookrack -bookracks -bookrest -bookrests -books -bookseller -booksellers -bookselling -booksellings -bookshelf -bookshelves -bookshop -bookshops -bookstall -bookstalls -bookstore -bookstores -bookworm -bookworms -boom -boombox -boomboxes -boomed -boomer -boomerang -boomeranged -boomeranging -boomerangs -boomers -boomier -boomiest -booming -boomkin -boomkins -boomlet -boomlets -booms -boomtown -boomtowns -boomy -boon -boondock -boondocks -boondoggle -boondoggled -boondoggler -boondogglers -boondoggles -boondoggling -boonies -boons -boor -boorish -boorishly -boorishness -boorishnesses -boors -boos -boost -boosted -booster -boosterism -boosterisms -boosters -boosting -boosts -boot -bootable -bootblack -bootblacks -booted -bootee -bootees -booteries -bootery -booth -booths -bootie -booties -booting -bootjack -bootjacks -bootlace -bootlaces -bootleg -bootlegged -bootlegger -bootleggers -bootlegging -bootlegs -bootless -bootlessly -bootlessness -bootlessnesses -bootlick -bootlicked -bootlicker -bootlickers -bootlicking -bootlicks -boots -bootstrap -bootstrapped -bootstrapping -bootstraps -booty -booze -boozed -boozer -boozers -boozes -boozier -booziest -boozily -boozing -boozy -bop -bopeep -bopeeps -bopped -bopper -boppers -bopping -bops -bora -boraces -boracic -boracite -boracites -borage -borages -boral -borals -borane -boranes -boras -borate -borated -borates -borating -borax -boraxes -borborygmi -borborygmus -bordeaux -bordel -bordello -bordellos -bordels -border -bordereau -bordereaux -bordered -borderer -borderers -bordering -borderland -borderlands -borderline -borderlines -borders -bordure -bordures -bore -boreal -borecole -borecoles -bored -boredom -boredoms -boreen -boreens -borehole -boreholes -borer -borers -bores -borescope -borescopes -boresome -boric -boride -borides -boring -boringly -boringness -boringnesses -borings -born -borne -borneol -borneols -bornite -bornites -borohydride -borohydrides -boron -boronic -borons -borosilicate -borosilicates -borough -boroughs -borrow -borrowed -borrower -borrowers -borrowing -borrowings -borrows -borsch -borsches -borscht -borschts -borsht -borshts -borstal -borstals -bort -borts -borty -bortz -bortzes -borzoi -borzois -bos -boscage -boscages -boschbok -boschboks -bosh -boshbok -boshboks -boshes -boshvark -boshvarks -bosk -boskage -boskages -bosker -bosket -boskets -boskier -boskiest -bosks -bosky -bosom -bosomed -bosoming -bosoms -bosomy -boson -bosons -bosque -bosques -bosquet -bosquets -boss -bossdom -bossdoms -bossed -bosses -bossier -bossies -bossiest -bossily -bossiness -bossinesses -bossing -bossism -bossisms -bossy -boston -bostons -bosun -bosuns -bot -bota -botanic -botanica -botanical -botanically -botanicals -botanicas -botanies -botanise -botanised -botanises -botanising -botanist -botanists -botanize -botanized -botanizes -botanizing -botany -botas -botch -botched -botcher -botcheries -botchers -botchery -botches -botchier -botchiest -botchily -botching -botchy -botel -botels -botflies -botfly -both -bother -botheration -botherations -bothered -bothering -bothers -bothersome -bothies -bothria -bothrium -bothriums -bothy -botonee -botonnee -botryoid -botryoidal -botryose -botrytis -botrytises -bots -bott -bottle -bottlebrush -bottlebrushes -bottled -bottleful -bottlefuls -bottleneck -bottlenecked -bottlenecking -bottlenecks -bottler -bottlers -bottles -bottling -bottlings -bottom -bottomed -bottomer -bottomers -bottoming -bottomland -bottomlands -bottomless -bottomlessly -bottomlessness -bottomlessnesses -bottommost -bottomries -bottomry -bottoms -botts -botulin -botulinal -botulins -botulinum -botulinums -botulinus -botulinuses -botulism -botulisms -boubou -boubous -bouchee -bouchees -boucle -boucles -boudoir -boudoirs -bouffant -bouffants -bouffe -bouffes -bougainvillaea -bougainvillaeas -bougainvillea -bougainvilleas -bough -boughed -boughpot -boughpots -boughs -bought -boughten -bougie -bougies -bouillabaisse -bouillabaisses -bouillon -bouillons -boulder -bouldered -boulders -bouldery -boule -boules -boulevard -boulevardier -boulevardiers -boulevards -bouleversement -bouleversements -boulle -boulles -bounce -bounced -bouncer -bouncers -bounces -bouncier -bounciest -bouncily -bouncing -bouncingly -bouncy -bound -boundaries -boundary -bounded -boundedness -boundednesses -bounden -bounder -bounderish -bounders -bounding -boundless -boundlessly -boundlessness -boundlessnesses -bounds -bounteous -bounteously -bounteousness -bounteousnesses -bountied -bounties -bountiful -bountifully -bountifulness -bountifulnesses -bounty -bouquet -bouquets -bourbon -bourbonism -bourbonisms -bourbons -bourdon -bourdons -bourg -bourgeois -bourgeoise -bourgeoises -bourgeoisie -bourgeoisies -bourgeoisification -bourgeoisifications -bourgeoisified -bourgeoisifies -bourgeoisify -bourgeoisifying -bourgeon -bourgeoned -bourgeoning -bourgeons -bourgs -bourguignon -bourguignonne -bourn -bourne -bournes -bourns -bourree -bourrees -bourride -bourrides -bourse -bourses -bourtree -bourtrees -bouse -boused -bouses -bousing -bousouki -bousoukia -bousoukis -boustrophedon -boustrophedonic -boustrophedons -bousy -bout -boutique -boutiques -bouton -boutonniere -boutonnieres -boutons -bouts -bouvier -bouviers -bouzouki -bouzoukia -bouzoukis -bovid -bovids -bovine -bovinely -bovines -bovinities -bovinity -bow -bowdlerise -bowdlerised -bowdlerises -bowdlerising -bowdlerization -bowdlerizations -bowdlerize -bowdlerized -bowdlerizer -bowdlerizers -bowdlerizes -bowdlerizing -bowed -bowel -boweled -boweling -bowelled -bowelless -bowelling -bowels -bower -bowerbird -bowerbirds -bowered -boweries -bowering -bowers -bowery -bowfin -bowfins -bowfront -bowhead -bowheads -bowing -bowingly -bowings -bowknot -bowknots -bowl -bowlder -bowlders -bowled -bowleg -bowlegged -bowlegs -bowler -bowlers -bowless -bowlful -bowlfuls -bowlike -bowline -bowlines -bowling -bowlings -bowllike -bowls -bowman -bowmen -bowpot -bowpots -bows -bowse -bowsed -bowses -bowshot -bowshots -bowsing -bowsprit -bowsprits -bowstring -bowstrings -bowwow -bowwowed -bowwowing -bowwows -bowyer -bowyers -box -boxberries -boxberry -boxboard -boxboards -boxcar -boxcars -boxed -boxer -boxers -boxes -boxfish -boxfishes -boxful -boxfuls -boxhaul -boxhauled -boxhauling -boxhauls -boxier -boxiest -boxiness -boxinesses -boxing -boxings -boxlike -boxthorn -boxthorns -boxwood -boxwoods -boxy -boy -boyar -boyard -boyards -boyarism -boyarisms -boyars -boychick -boychicks -boychik -boychiks -boycott -boycotted -boycotter -boycotters -boycotting -boycotts -boyfriend -boyfriends -boyhood -boyhoods -boyish -boyishly -boyishness -boyishnesses -boyla -boylas -boyo -boyos -boys -boysenberries -boysenberry -bozo -bozos -bra -brabble -brabbled -brabbler -brabblers -brabbles -brabbling -brace -braced -bracelet -bracelets -bracer -bracero -braceros -bracers -braces -brach -braches -brachet -brachets -brachia -brachial -brachials -brachiate -brachiated -brachiates -brachiating -brachiation -brachiations -brachiator -brachiators -brachiopod -brachiopods -brachium -brachs -brachycephalic -brachycephalies -brachycephaly -brachypterous -bracing -bracingly -bracings -braciola -braciolas -braciole -bracioles -bracken -brackens -bracket -bracketed -bracketing -brackets -brackish -brackishness -brackishnesses -braconid -braconids -bract -bracteal -bracteate -bracted -bracteole -bracteoles -bractlet -bractlets -bracts -brad -bradawl -bradawls -bradded -bradding -bradoon -bradoons -brads -bradycardia -bradycardias -bradykinin -bradykinins -brae -braes -brag -braggadocio -braggadocios -braggart -braggarts -bragged -bragger -braggers -braggest -braggier -braggiest -bragging -braggy -brags -brahma -brahmas -braid -braided -braider -braiders -braiding -braidings -braids -brail -brailed -brailing -braille -brailled -brailles -braillewriter -braillewriters -brailling -braillist -braillists -brails -brain -braincase -braincases -brainchild -brainchildren -brained -brainiac -brainiacs -brainier -brainiest -brainily -braininess -braininesses -braining -brainish -brainless -brainlessly -brainlessness -brainlessnesses -brainpan -brainpans -brainpower -brainpowers -brains -brainsick -brainsickly -brainstorm -brainstormed -brainstormer -brainstormers -brainstorming -brainstormings -brainstorms -brainteaser -brainteasers -brainwash -brainwashed -brainwasher -brainwashers -brainwashes -brainwashing -brainwashings -brainy -braise -braised -braises -braising -braize -braizes -brake -brakeage -brakeages -braked -brakeless -brakeman -brakemen -brakes -brakier -brakiest -braking -braky -braless -bramble -brambled -brambles -bramblier -brambliest -brambling -brambly -bran -branch -branched -branches -branchia -branchiae -branchial -branchier -branchiest -branching -branchiopod -branchiopods -branchless -branchlet -branchlets -branchline -branchlines -branchy -brand -branded -brander -branders -brandied -brandies -branding -brandish -brandished -brandishes -brandishing -brands -brandy -brandying -brank -branks -branned -branner -branners -brannier -branniest -brannigan -brannigans -branning -branny -brans -brant -brantail -brantails -brants -bras -brash -brasher -brashes -brashest -brashier -brashiest -brashly -brashness -brashnesses -brashy -brasier -brasiers -brasil -brasilin -brasilins -brasils -brass -brassage -brassages -brassard -brassards -brassart -brassarts -brassbound -brassed -brasserie -brasseries -brasses -brassica -brassicas -brassie -brassier -brassiere -brassieres -brassies -brassiest -brassily -brassiness -brassinesses -brassing -brassish -brassy -brat -brats -brattice -bratticed -brattices -bratticing -brattier -brattiest -brattiness -brattinesses -brattish -brattle -brattled -brattles -brattling -bratty -bratwurst -bratwursts -braunite -braunites -braunschweiger -braunschweigers -brava -bravado -bravadoes -bravados -bravas -brave -braved -bravely -braver -braveries -bravers -bravery -braves -bravest -bravi -braving -bravo -bravoed -bravoes -bravoing -bravos -bravura -bravuras -bravure -braw -brawer -brawest -brawl -brawled -brawler -brawlers -brawlie -brawlier -brawliest -brawling -brawls -brawly -brawn -brawnier -brawniest -brawnily -brawniness -brawninesses -brawns -brawny -braws -braxies -braxy -bray -brayed -brayer -brayers -braying -brays -braza -brazas -braze -brazed -brazen -brazened -brazening -brazenly -brazenness -brazennesses -brazens -brazer -brazers -brazes -brazier -braziers -brazil -brazilin -brazilins -brazils -brazilwood -brazilwoods -brazing -breach -breached -breacher -breachers -breaches -breaching -bread -breadbasket -breadbaskets -breadboard -breadboarded -breadboarding -breadboards -breadbox -breadboxes -breadcrumb -breadcrumbs -breaded -breadfruit -breadfruits -breading -breadline -breadlines -breadnut -breadnuts -breads -breadstick -breadsticks -breadstuff -breadstuffs -breadth -breadths -breadthwise -breadwinner -breadwinners -breadwinning -breadwinnings -bready -break -breakable -breakables -breakage -breakages -breakaway -breakaways -breakdown -breakdowns -breaker -breakers -breakeven -breakevens -breakfast -breakfasted -breakfaster -breakfasters -breakfasting -breakfasts -breakfront -breakfronts -breaking -breakings -breakneck -breakout -breakouts -breaks -breaksaway -breakthrough -breakthroughs -breakup -breakups -breakwater -breakwaters -bream -breamed -breaming -breams -breast -breastbone -breastbones -breasted -breasting -breastplate -breastplates -breasts -breaststroke -breaststroker -breaststrokers -breaststrokes -breastwork -breastworks -breath -breathabilities -breathability -breathable -breathe -breathed -breather -breathers -breathes -breathier -breathiest -breathily -breathiness -breathinesses -breathing -breathings -breathless -breathlessly -breathlessness -breathlessnesses -breaths -breathtaking -breathtakingly -breathy -breccia -breccial -breccias -brecciate -brecciated -brecciates -brecciating -brecciation -brecciations -brecham -brechams -brechan -brechans -bred -brede -bredes -bree -breech -breechblock -breechblocks -breechcloth -breechcloths -breechclout -breechclouts -breeched -breeches -breeching -breechings -breechloader -breechloaders -breed -breeder -breeders -breeding -breedings -breeds -breeks -brees -breeze -breezed -breezeless -breezes -breezeway -breezeways -breezier -breeziest -breezily -breeziness -breezinesses -breezing -breezy -bregma -bregmata -bregmate -bremsstrahlung -bremsstrahlungs -bren -brens -brent -brents -brethren -breve -breves -brevet -brevetcies -brevetcy -breveted -breveting -brevets -brevetted -brevetting -breviaries -breviary -brevier -breviers -brevities -brevity -brew -brewage -brewages -brewed -brewer -breweries -brewers -brewery -brewing -brewings -brewis -brewises -brewpub -brewpubs -brews -briar -briard -briards -briars -briary -bribable -bribe -bribed -bribee -bribees -briber -briberies -bribers -bribery -bribes -bribing -brick -brickbat -brickbats -bricked -brickfield -brickfields -brickier -brickiest -bricking -bricklayer -bricklayers -bricklaying -bricklayings -brickle -brickles -bricks -brickwork -brickworks -bricky -brickyard -brickyards -bricolage -bricolages -bricole -bricoles -bridal -bridally -bridals -bride -bridegroom -bridegrooms -brides -bridesmaid -bridesmaids -bridewell -bridewells -bridge -bridgeable -bridged -bridgehead -bridgeheads -bridgeless -bridges -bridgework -bridgeworks -bridging -bridgings -bridle -bridled -bridler -bridlers -bridles -bridling -bridoon -bridoons -brie -brief -briefcase -briefcases -briefed -briefer -briefers -briefest -briefing -briefings -briefless -briefly -briefness -briefnesses -briefs -brier -briers -briery -bries -brig -brigade -brigaded -brigades -brigadier -brigadiers -brigading -brigand -brigandage -brigandages -brigandine -brigandines -brigands -brigantine -brigantines -bright -brighten -brightened -brightener -brighteners -brightening -brightens -brighter -brightest -brightly -brightness -brightnesses -brights -brightwork -brightworks -brigs -brill -brilliance -brilliances -brilliancies -brilliancy -brilliant -brilliantine -brilliantines -brilliantly -brilliants -brills -brim -brimful -brimfull -brimless -brimmed -brimmer -brimmers -brimming -brims -brimstone -brimstones -brin -brinded -brindle -brindled -brindles -brine -brined -briner -briners -brines -bring -bringdown -bringdowns -bringer -bringers -bringing -brings -brinier -brinies -briniest -brininess -brininesses -brining -brinish -brink -brinkmanship -brinkmanships -brinks -brinksmanship -brinksmanships -brins -briny -brio -brioche -brioches -briolette -briolettes -brionies -briony -brios -briquet -briquets -briquette -briquetted -briquettes -briquetting -bris -brisance -brisances -brisant -brisk -brisked -brisker -briskest -brisket -briskets -brisking -briskly -briskness -brisknesses -brisks -brisling -brislings -brisses -bristle -bristled -bristlelike -bristles -bristletail -bristletails -bristlier -bristliest -bristling -bristly -bristol -bristols -brit -britches -brits -britska -britskas -britt -brittle -brittled -brittlely -brittleness -brittlenesses -brittler -brittles -brittlest -brittling -brittly -britts -britzka -britzkas -britzska -britzskas -bro -broach -broached -broacher -broachers -broaches -broaching -broad -broadax -broadaxe -broadaxes -broadband -broadcast -broadcasted -broadcaster -broadcasters -broadcasting -broadcasts -broadcloth -broadcloths -broaden -broadened -broadening -broadens -broader -broadest -broadish -broadleaf -broadloom -broadlooms -broadly -broadness -broadnesses -broads -broadscale -broadsheet -broadsheets -broadside -broadsided -broadsides -broadsiding -broadsword -broadswords -broadtail -broadtails -brocade -brocaded -brocades -brocading -brocatel -brocatelle -brocatelles -brocatels -broccoli -broccolis -broche -brochette -brochettes -brochure -brochures -brock -brockage -brockages -brocket -brockets -brocks -brocoli -brocolis -brogan -brogans -brogue -brogueries -broguery -brogues -broguish -broider -broidered -broideries -broidering -broiders -broidery -broil -broiled -broiler -broilers -broiling -broils -brokage -brokages -broke -broken -brokenhearted -brokenly -brokenness -brokennesses -broker -brokerage -brokerages -brokered -brokering -brokerings -brokers -broking -brokings -brollies -brolly -bromal -bromals -bromate -bromated -bromates -bromating -brome -bromegrass -bromegrasses -bromelain -bromelains -bromeliad -bromeliads -bromelin -bromelins -bromes -bromic -bromid -bromide -bromides -bromidic -bromids -bromin -brominate -brominated -brominates -brominating -bromination -brominations -bromine -bromines -bromins -bromism -bromisms -bromize -bromized -bromizes -bromizing -bromo -bromocriptine -bromocriptines -bromos -bromouracil -bromouracils -bronc -bronchi -bronchia -bronchial -bronchially -bronchiectases -bronchiectasis -bronchiolar -bronchiole -bronchioles -bronchitic -bronchitis -bronchitises -bronchium -broncho -bronchodilator -bronchodilators -bronchogenic -bronchopneumonia -bronchopneumonias -bronchos -bronchoscope -bronchoscopes -bronchoscopic -bronchoscopies -bronchoscopist -bronchoscopists -bronchoscopy -bronchospasm -bronchospasms -bronchospastic -bronchus -bronco -broncobuster -broncobusters -broncos -broncs -brontosaur -brontosaurs -brontosaurus -brontosauruses -bronze -bronzed -bronzer -bronzers -bronzes -bronzier -bronziest -bronzing -bronzings -bronzy -broo -brooch -brooches -brood -brooded -brooder -brooders -broodier -broodiest -broodily -broodiness -broodinesses -brooding -broodingly -broodmare -broodmares -broods -broody -brook -brooked -brookie -brookies -brooking -brookite -brookites -brooklet -brooklets -brooks -broom -broomball -broomballer -broomballers -broomballs -broomcorn -broomcorns -broomed -broomier -broomiest -brooming -broomrape -broomrapes -brooms -broomstick -broomsticks -broomy -broos -bros -brose -broses -brosy -broth -brothel -brothels -brother -brothered -brotherhood -brotherhoods -brothering -brotherliness -brotherlinesses -brotherly -brothers -broths -brothy -brougham -broughams -brought -brouhaha -brouhahas -brow -browband -browbands -browbeat -browbeaten -browbeating -browbeats -browed -browless -brown -browned -browner -brownest -brownfield -brownfields -brownie -brownier -brownies -browniest -browning -brownish -brownnose -brownnosed -brownnoser -brownnosers -brownnoses -brownnosing -brownout -brownouts -browns -brownshirt -brownshirts -brownstone -brownstones -browny -browridge -browridges -brows -browse -browsed -browser -browsers -browses -browsing -brr -brrr -brucella -brucellae -brucellas -brucelloses -brucellosis -brucin -brucine -brucines -brucins -brugh -brughs -bruin -bruins -bruise -bruised -bruiser -bruisers -bruises -bruising -bruit -bruited -bruiter -bruiters -bruiting -bruits -brulot -brulots -brulyie -brulyies -brulzie -brulzies -brumal -brumbies -brumby -brume -brumes -brummagem -brummagems -brumous -brunch -brunched -brunches -brunching -brunet -brunets -brunette -brunettes -brunizem -brunizems -brunt -brunts -brush -brushabilities -brushability -brushback -brushbacks -brushed -brusher -brushers -brushes -brushfire -brushfires -brushier -brushiest -brushing -brushland -brushlands -brushoff -brushoffs -brushup -brushups -brushwood -brushwoods -brushwork -brushworks -brushy -brusk -brusker -bruskest -brusque -brusquely -brusqueness -brusquenesses -brusquer -brusquerie -brusqueries -brusquest -brut -brutal -brutalise -brutalised -brutalises -brutalising -brutalities -brutality -brutalization -brutalizations -brutalize -brutalized -brutalizes -brutalizing -brutally -brute -bruted -brutely -brutes -brutified -brutifies -brutify -brutifying -bruting -brutish -brutishly -brutishness -brutishnesses -brutism -brutisms -bruxism -bruxisms -bryological -bryologies -bryologist -bryologists -bryology -bryonies -bryony -bryophyllum -bryophyllums -bryophyte -bryophytes -bryophytic -bryozoan -bryozoans -bub -bubal -bubale -bubales -bubaline -bubalis -bubalises -bubals -bubbies -bubble -bubbled -bubblegum -bubblegums -bubblehead -bubbleheaded -bubbleheads -bubbler -bubblers -bubbles -bubblier -bubblies -bubbliest -bubbling -bubbly -bubby -bubinga -bubingas -bubo -buboed -buboes -bubonic -bubs -buccal -buccally -buccaneer -buccaneered -buccaneering -buccaneerish -buccaneers -buccinator -buccinators -buck -buckaroo -buckaroos -buckayro -buckayros -buckbean -buckbeans -buckboard -buckboards -bucked -buckeen -buckeens -bucker -buckeroo -buckeroos -buckers -bucket -bucketed -bucketful -bucketfuls -bucketing -buckets -bucketsful -buckeye -buckeyes -bucking -buckish -buckle -buckled -buckler -bucklered -bucklering -bucklers -buckles -buckling -buckminsterfullerene -buckminsterfullerenes -bucko -buckoes -buckos -buckra -buckram -buckramed -buckraming -buckrams -buckras -bucks -bucksaw -bucksaws -buckshee -buckshees -buckshot -buckshots -buckskin -buckskinned -buckskins -bucktail -bucktails -buckteeth -buckthorn -buckthorns -bucktooth -bucktoothed -buckwheat -buckwheats -buckyball -buckyballs -bucolic -bucolically -bucolics -bud -budded -budder -budders -buddied -buddies -budding -buddings -buddle -buddleia -buddleias -buddles -buddy -buddying -budge -budged -budger -budgerigar -budgerigars -budgers -budges -budget -budgetary -budgeted -budgeteer -budgeteers -budgeter -budgeters -budgeting -budgets -budgie -budgies -budging -budless -budlike -buds -budworm -budworms -buff -buffable -buffalo -buffaloberries -buffaloberry -buffaloed -buffaloes -buffalofish -buffalofishes -buffaloing -buffalos -buffed -buffer -buffered -buffering -buffers -buffet -buffeted -buffeter -buffeters -buffeting -buffets -buffi -buffier -buffiest -buffing -bufflehead -buffleheads -buffo -buffoon -buffooneries -buffoonery -buffoonish -buffoons -buffos -buffs -buffy -bug -bugaboo -bugaboos -bugbane -bugbanes -bugbear -bugbears -bugeye -bugeyes -bugged -bugger -buggered -buggeries -buggering -buggers -buggery -buggier -buggies -buggiest -bugging -buggy -bughouse -bughouses -bugle -bugled -bugler -buglers -bugles -bugleweed -bugleweeds -bugling -bugloss -buglosses -bugs -bugseed -bugseeds -bugsha -bugshas -buhl -buhls -buhlwork -buhlworks -buhr -buhrs -buhrstone -buhrstones -build -buildable -builded -builder -builders -building -buildings -builds -buildup -buildups -built -buirdly -bulb -bulbar -bulbed -bulbel -bulbels -bulbil -bulbils -bulblet -bulblets -bulbous -bulbously -bulbs -bulbul -bulbuls -bulge -bulged -bulger -bulgers -bulges -bulgier -bulgiest -bulging -bulgur -bulgurs -bulgy -bulimia -bulimiac -bulimias -bulimic -bulimics -bulk -bulkage -bulkages -bulked -bulkhead -bulkheads -bulkier -bulkiest -bulkily -bulkiness -bulkinesses -bulking -bulks -bulky -bull -bulla -bullace -bullaces -bullae -bullate -bullbaiting -bullbaitings -bullbat -bullbats -bulldog -bulldogged -bulldogger -bulldoggers -bulldogging -bulldoggings -bulldogs -bulldoze -bulldozed -bulldozer -bulldozers -bulldozes -bulldozing -bulled -bullet -bulleted -bulletin -bulletined -bulleting -bulletining -bulletins -bulletproof -bullets -bullfight -bullfighter -bullfighters -bullfighting -bullfightings -bullfights -bullfinch -bullfinches -bullfrog -bullfrogs -bullhead -bullheaded -bullheadedly -bullheadedness -bullheadednesses -bullheads -bullhorn -bullhorns -bullied -bullier -bullies -bulliest -bulling -bullion -bullions -bullish -bullishly -bullishness -bullishnesses -bullmastiff -bullmastiffs -bullneck -bullnecked -bullnecks -bullnose -bullnoses -bullock -bullocks -bullocky -bullous -bullpen -bullpens -bullpout -bullpouts -bullring -bullrings -bullrush -bullrushes -bulls -bullshit -bullshits -bullshitted -bullshitting -bullshot -bullshots -bullterrier -bullterriers -bullweed -bullweeds -bullwhip -bullwhipped -bullwhipping -bullwhips -bully -bullyboy -bullyboys -bullying -bullyrag -bullyragged -bullyragging -bullyrags -bulrush -bulrushes -bulwark -bulwarked -bulwarking -bulwarks -bum -bumbershoot -bumbershoots -bumble -bumblebee -bumblebees -bumbled -bumbler -bumblers -bumbles -bumbling -bumblingly -bumblings -bumboat -bumboats -bumf -bumfs -bumkin -bumkins -bummed -bummer -bummers -bummest -bumming -bump -bumped -bumper -bumpered -bumpering -bumpers -bumph -bumphs -bumpier -bumpiest -bumpily -bumpiness -bumpinesses -bumping -bumpkin -bumpkinish -bumpkinly -bumpkins -bumps -bumptious -bumptiously -bumptiousness -bumptiousnesses -bumpy -bums -bun -bunch -bunchberries -bunchberry -bunched -bunches -bunchgrass -bunchgrasses -bunchier -bunchiest -bunchily -bunching -bunchy -bunco -buncoed -buncoes -buncoing -buncombe -buncombes -buncos -bund -bundist -bundists -bundle -bundled -bundler -bundlers -bundles -bundling -bundlings -bunds -bundt -bundts -bung -bungalow -bungalows -bunged -bungee -bungees -bunghole -bungholes -bunging -bungle -bungled -bungler -bunglers -bungles -bunglesome -bungling -bunglingly -bunglings -bungs -bunion -bunions -bunk -bunked -bunker -bunkered -bunkering -bunkers -bunkhouse -bunkhouses -bunking -bunkmate -bunkmates -bunko -bunkoed -bunkoes -bunkoing -bunkos -bunks -bunkum -bunkums -bunn -bunnies -bunns -bunny -bunraku -bunrakus -buns -bunt -bunted -bunter -bunters -bunting -buntings -buntline -buntlines -bunts -bunya -bunyas -buoy -buoyage -buoyages -buoyance -buoyances -buoyancies -buoyancy -buoyant -buoyantly -buoyed -buoying -buoys -buppie -buppies -buqsha -buqshas -bur -bura -buran -burans -buras -burble -burbled -burbler -burblers -burbles -burblier -burbliest -burbling -burbly -burbot -burbots -burbs -burd -burden -burdened -burdener -burdeners -burdening -burdens -burdensome -burdie -burdies -burdock -burdocks -burds -bureau -bureaucracies -bureaucracy -bureaucrat -bureaucratese -bureaucrateses -bureaucratic -bureaucratically -bureaucratise -bureaucratised -bureaucratises -bureaucratising -bureaucratism -bureaucratisms -bureaucratization -bureaucratizations -bureaucratize -bureaucratized -bureaucratizes -bureaucratizing -bureaucrats -bureaus -bureaux -buret -burets -burette -burettes -burg -burgage -burgages -burgee -burgees -burgeon -burgeoned -burgeoning -burgeons -burger -burgers -burgess -burgesses -burgh -burghal -burgher -burghers -burghs -burglar -burglaries -burglarious -burglariously -burglarize -burglarized -burglarizes -burglarizing -burglarproof -burglars -burglary -burgle -burgled -burgles -burgling -burgomaster -burgomasters -burgonet -burgonets -burgoo -burgoos -burgout -burgouts -burgrave -burgraves -burgs -burgundies -burgundy -burial -burials -buried -burier -buriers -buries -burin -burins -burke -burked -burker -burkers -burkes -burking -burkite -burkites -burl -burladero -burladeros -burlap -burlaps -burled -burler -burlers -burlesk -burlesks -burlesque -burlesqued -burlesquely -burlesquer -burlesquers -burlesques -burlesquing -burley -burleys -burlier -burliest -burlily -burliness -burlinesses -burling -burls -burly -burn -burnable -burnables -burned -burner -burners -burnet -burnets -burnie -burnies -burning -burningly -burnings -burnish -burnished -burnisher -burnishers -burnishes -burnishing -burnishings -burnoose -burnoosed -burnooses -burnous -burnouses -burnout -burnouts -burns -burnsides -burnt -burp -burped -burping -burps -burr -burred -burrer -burrers -burrier -burriest -burring -burrito -burritos -burro -burros -burrow -burrowed -burrower -burrowers -burrowing -burrows -burrs -burrstone -burrstones -burry -burs -bursa -bursae -bursal -bursar -bursaries -bursars -bursary -bursas -bursate -burse -burseed -burseeds -bursera -burses -bursitis -bursitises -burst -bursted -burster -bursters -bursting -burstone -burstones -bursts -burthen -burthened -burthening -burthens -burton -burtons -burweed -burweeds -bury -burying -bus -busbar -busbars -busbies -busboy -busboys -busby -bused -buses -bush -bushbuck -bushbucks -bushed -bushel -busheled -busheler -bushelers -busheling -bushelled -bushelling -bushels -busher -bushers -bushes -bushfire -bushfires -bushgoat -bushgoats -bushido -bushidos -bushier -bushiest -bushily -bushiness -bushinesses -bushing -bushings -bushland -bushlands -bushless -bushlike -bushman -bushmaster -bushmasters -bushmen -bushpig -bushpigs -bushranger -bushrangers -bushranging -bushrangings -bushtit -bushtits -bushwa -bushwah -bushwahs -bushwas -bushwhack -bushwhacked -bushwhacker -bushwhackers -bushwhacking -bushwhacks -bushy -busied -busier -busies -busiest -busily -business -businesses -businesslike -businessman -businessmen -businesspeople -businessperson -businesspersons -businesswoman -businesswomen -busing -busings -busk -busked -busker -buskers -buskin -buskined -busking -buskins -busks -busload -busloads -busman -busmen -buss -bussed -busses -bussing -bussings -bust -bustard -bustards -busted -buster -busters -bustic -bustics -bustier -bustiers -bustiest -busting -bustle -bustled -bustles -bustline -bustlines -bustling -bustlingly -busts -busty -busulfan -busulfans -busy -busybodies -busybody -busying -busyness -busynesses -busywork -busyworks -but -butadiene -butadienes -butane -butanes -butanol -butanols -butanone -butanones -butch -butcher -butchered -butcheries -butchering -butcherly -butchers -butchery -butches -bute -butene -butenes -buteo -buteos -butes -butle -butled -butler -butleries -butlers -butlery -butles -butling -buts -butt -buttals -butte -butted -butter -butterball -butterballs -buttercup -buttercups -buttered -butterfat -butterfats -butterfingered -butterfingers -butterfish -butterfishes -butterflied -butterflies -butterfly -butterflyer -butterflyers -butterflying -butterier -butteries -butteriest -buttering -butterless -buttermilk -buttermilks -butternut -butternuts -butters -butterscotch -butterscotches -butterweed -butterweeds -butterwort -butterworts -buttery -buttes -butties -butting -buttinski -buttinskies -buttinsky -buttock -buttocks -button -buttonball -buttonballs -buttonbush -buttonbushes -buttoned -buttoner -buttoners -buttonhole -buttonholed -buttonholer -buttonholers -buttonholes -buttonholing -buttonhook -buttonhooked -buttonhooking -buttonhooks -buttoning -buttonless -buttons -buttonwood -buttonwoods -buttony -buttress -buttressed -buttresses -buttressing -butts -buttstock -buttstocks -butty -butut -bututs -butyl -butylate -butylated -butylates -butylating -butylation -butylations -butylene -butylenes -butyls -butyral -butyraldehyde -butyraldehydes -butyrals -butyrate -butyrates -butyric -butyrin -butyrins -butyrophenone -butyrophenones -butyrous -butyryl -butyryls -buxom -buxomer -buxomest -buxomly -buxomness -buxomnesses -buy -buyable -buyback -buybacks -buyer -buyers -buying -buyout -buyouts -buys -buzuki -buzukia -buzukis -buzz -buzzard -buzzards -buzzed -buzzer -buzzers -buzzes -buzzing -buzzwig -buzzwigs -buzzword -buzzwords -bwana -bwanas -by -bye -byelaw -byelaws -byes -bygone -bygones -bylaw -bylaws -byline -bylined -byliner -byliners -bylines -bylining -byname -bynames -bypass -bypassed -bypasses -bypassing -bypast -bypath -bypaths -byplay -byplays -byproduct -byproducts -byre -byres -byrl -byrled -byrling -byrls -byrnie -byrnies -byroad -byroads -bys -byssi -byssinoses -byssinosis -byssus -byssuses -bystander -bystanders -bystreet -bystreets -bytalk -bytalks -byte -bytes -byway -byways -byword -bywords -bywork -byworks -byzant -byzantine -byzants -cab -cabal -cabala -cabalas -cabaletta -cabalettas -cabalism -cabalisms -cabalist -cabalistic -cabalists -caballed -caballero -caballeros -caballing -cabals -cabana -cabanas -cabaret -cabarets -cabbage -cabbaged -cabbages -cabbageworm -cabbageworms -cabbaging -cabbala -cabbalah -cabbalahs -cabbalas -cabbed -cabbie -cabbies -cabbing -cabby -cabdriver -cabdrivers -caber -cabernet -cabernets -cabers -cabestro -cabestros -cabezon -cabezone -cabezones -cabezons -cabildo -cabildos -cabin -cabined -cabinet -cabinetmaker -cabinetmakers -cabinetmaking -cabinetmakings -cabinetries -cabinetry -cabinets -cabinetwork -cabinetworks -cabining -cabins -cable -cabled -cablegram -cablegrams -cables -cablet -cablets -cableway -cableways -cabling -cabman -cabmen -cabob -cabobs -caboched -cabochon -cabochons -cabomba -cabombas -caboodle -caboodles -caboose -cabooses -caboshed -cabotage -cabotages -cabresta -cabrestas -cabresto -cabrestos -cabretta -cabrettas -cabrilla -cabrillas -cabriole -cabrioles -cabriolet -cabriolets -cabs -cabstand -cabstands -caca -cacao -cacaos -cacas -cacciatore -cachalot -cachalots -cache -cachectic -cached -cachepot -cachepots -caches -cachet -cacheted -cacheting -cachets -cachexia -cachexias -cachexic -cachexies -cachexy -caching -cachinnate -cachinnated -cachinnates -cachinnating -cachinnation -cachinnations -cachou -cachous -cachucha -cachuchas -cacique -caciques -caciquism -caciquisms -cackle -cackled -cackler -cacklers -cackles -cackling -cacodemon -cacodemonic -cacodemons -cacodyl -cacodyls -cacoethes -cacographical -cacographies -cacography -cacomistle -cacomistles -cacomixl -cacomixls -cacophonies -cacophonous -cacophonously -cacophony -cacti -cactoid -cactus -cactuses -cacuminal -cad -cadaster -cadasters -cadastral -cadastrally -cadastre -cadastres -cadaver -cadaveric -cadaverine -cadaverines -cadaverous -cadaverously -cadavers -caddice -caddices -caddie -caddied -caddies -caddis -caddises -caddish -caddishly -caddishness -caddishnesses -caddisworm -caddisworms -caddy -caddying -cade -cadelle -cadelles -cadence -cadenced -cadences -cadencies -cadencing -cadency -cadent -cadential -cadenza -cadenzas -cades -cadet -cadets -cadetship -cadetships -cadge -cadged -cadger -cadgers -cadges -cadging -cadgy -cadi -cadis -cadmic -cadmium -cadmiums -cadre -cadres -cads -caducean -caducei -caduceus -caducities -caducity -caducous -caeca -caecal -caecally -caecilian -caecilians -caecum -caeoma -caeomas -caesar -caesarean -caesareans -caesarian -caesarians -caesars -caesium -caesiums -caespitose -caestus -caestuses -caesura -caesurae -caesural -caesuras -caesuric -cafe -cafes -cafeteria -cafeterias -cafetoria -cafetorium -cafetoriums -caff -caffein -caffeinated -caffeine -caffeines -caffeins -caffs -caftan -caftans -cage -caged -cageful -cagefuls -cageling -cagelings -cager -cagers -cages -cagey -cageyness -cageynesses -cagier -cagiest -cagily -caginess -caginesses -caging -cagy -cahier -cahiers -cahoot -cahoots -cahow -cahows -caid -caids -caiman -caimans -cain -cains -caique -caiques -caird -cairds -cairn -cairned -cairngorm -cairngorms -cairns -cairny -caisson -caissons -caitiff -caitiffs -cajaput -cajaputs -cajeput -cajeputs -cajole -cajoled -cajolement -cajolements -cajoler -cajoleries -cajolers -cajolery -cajoles -cajoling -cajon -cajones -cajuput -cajuputs -cake -caked -cakes -cakewalk -cakewalked -cakewalker -cakewalkers -cakewalking -cakewalks -cakey -cakier -cakiest -caking -caky -calabash -calabashes -calaboose -calabooses -caladium -caladiums -calamander -calamanders -calamar -calamari -calamaries -calamaris -calamars -calamary -calami -calamine -calamined -calamines -calamining -calamint -calamints -calamite -calamites -calamities -calamitous -calamitously -calamity -calamondin -calamondins -calamus -calando -calash -calashes -calathi -calathos -calathus -calcanea -calcaneal -calcanei -calcaneum -calcaneus -calcar -calcareous -calcareously -calcaria -calcars -calceate -calces -calcic -calcicole -calcicoles -calcicolous -calciferol -calciferols -calciferous -calcific -calcification -calcifications -calcified -calcifies -calcifuge -calcifuges -calcifugous -calcify -calcifying -calcimine -calcimined -calcimines -calcimining -calcination -calcinations -calcine -calcined -calcines -calcining -calcinoses -calcinosis -calcite -calcites -calcitic -calcitonin -calcitonins -calcium -calciums -calcspar -calcspars -calctufa -calctufas -calctuff -calctuffs -calculable -calculate -calculated -calculatedly -calculatedness -calculatednesses -calculates -calculating -calculatingly -calculation -calculational -calculations -calculator -calculators -calculi -calculous -calculus -calculuses -caldaria -caldarium -caldera -calderas -caldron -caldrons -caleche -caleches -calefactories -calefactory -calendal -calendar -calendared -calendaring -calendars -calender -calendered -calenderer -calenderers -calendering -calenders -calendric -calendrical -calends -calendula -calendulas -calenture -calentures -calesa -calesas -calf -calflike -calfs -calfskin -calfskins -caliber -calibers -calibrate -calibrated -calibrates -calibrating -calibration -calibrations -calibrator -calibrators -calibre -calibred -calibres -calices -caliche -caliches -calicle -calicles -calico -calicoes -calicos -calif -califate -califates -californium -californiums -califs -caliginous -calipash -calipashes -calipee -calipees -caliper -calipered -calipering -calipers -caliph -caliphal -caliphate -caliphates -caliphs -calisaya -calisayas -calisthenic -calisthenics -calix -calk -calked -calker -calkers -calkin -calking -calkins -calks -call -calla -callable -callaloo -callaloos -callan -callans -callant -callants -callas -callback -callbacks -callboy -callboys -called -caller -callers -callet -callets -calligrapher -calligraphers -calligraphic -calligraphically -calligraphies -calligraphist -calligraphists -calligraphy -calling -callings -calliope -calliopes -callipee -callipees -calliper -callipered -callipering -callipers -callipygian -callipygous -callithump -callithumpian -callithumps -callose -calloses -callosities -callosity -callous -calloused -callouses -callousing -callously -callousness -callousnesses -callow -callower -callowest -callowness -callownesses -calls -callus -callused -calluses -callusing -calm -calmative -calmatives -calmed -calmer -calmest -calming -calmly -calmness -calmnesses -calmodulin -calmodulins -calms -calo -calomel -calomels -caloric -calorically -calorics -calorie -calories -calorific -calorimeter -calorimeters -calorimetric -calorimetrically -calorimetries -calorimetry -calorize -calorized -calorizes -calorizing -calory -calos -calotte -calottes -calotype -calotypes -caloyer -caloyers -calpac -calpack -calpacks -calpacs -calque -calqued -calques -calquing -calthrop -calthrops -caltrap -caltraps -caltrop -caltrops -calumet -calumets -calumniate -calumniated -calumniates -calumniating -calumniation -calumniations -calumniator -calumniators -calumnies -calumnious -calumniously -calumny -calutron -calutrons -calvados -calvadoses -calvaria -calvarias -calvaries -calvarium -calvariums -calvary -calve -calved -calves -calving -calx -calxes -calycate -calyceal -calyces -calycine -calycle -calycles -calyculi -calyculus -calypso -calypsoes -calypsonian -calypsonians -calypsos -calypter -calypters -calyptra -calyptras -calyx -calyxes -calzone -calzones -cam -camail -camailed -camails -camaraderie -camaraderies -camarilla -camarillas -camas -camases -camass -camasses -camber -cambered -cambering -cambers -cambia -cambial -cambism -cambisms -cambist -cambists -cambium -cambiums -cambogia -cambogias -cambric -cambrics -camcorder -camcorders -came -camel -camelback -camelbacks -cameleer -cameleers -camelia -camelias -camellia -camellias -camelopard -camelopards -camels -cameo -cameoed -cameoing -cameos -camera -camerae -cameral -cameraman -cameramen -cameraperson -camerapersons -cameras -camerawoman -camerawomen -camerlengo -camerlengos -cames -camion -camions -camisa -camisade -camisades -camisado -camisadoes -camisados -camisas -camise -camises -camisia -camisias -camisole -camisoles -camlet -camlets -camomile -camomiles -camorra -camorras -camorrista -camorristi -camouflage -camouflageable -camouflaged -camouflages -camouflagic -camouflaging -camp -campagna -campagne -campaign -campaigned -campaigner -campaigners -campaigning -campaigns -campanile -campaniles -campanili -campanologies -campanologist -campanologists -campanology -campanula -campanulas -campanulate -campcraft -campcrafts -camped -camper -campers -campesino -campesinos -campestral -campfire -campfires -campground -campgrounds -camphene -camphenes -camphine -camphines -camphire -camphires -camphol -camphols -camphor -camphoraceous -camphorate -camphorated -camphorates -camphorating -camphors -campi -campier -campiest -campily -campiness -campinesses -camping -campings -campion -campions -campo -campong -campongs -camporee -camporees -campos -camps -campsite -campsites -campus -campused -campuses -campusing -campy -campylobacter -campylobacters -campylotropous -cams -camshaft -camshafts -can -canaille -canailles -canakin -canakins -canal -canaled -canalicular -canaliculi -canaliculus -canaling -canalise -canalised -canalises -canalising -canalization -canalizations -canalize -canalized -canalizes -canalizing -canalled -canaller -canallers -canalling -canals -canape -canapes -canard -canards -canaries -canary -canasta -canastas -cancan -cancans -cancel -cancelable -cancelation -cancelations -canceled -canceler -cancelers -canceling -cancellable -cancellation -cancellations -cancelled -canceller -cancellers -cancelling -cancellous -cancels -cancer -cancerous -cancerously -cancers -cancha -canchas -cancroid -cancroids -candela -candelabra -candelabras -candelabrum -candelabrums -candelas -candent -candescence -candescences -candescent -candid -candida -candidacies -candidacy -candidas -candidate -candidates -candidature -candidatures -candider -candidest -candidiases -candidiasis -candidly -candidness -candidnesses -candids -candied -candies -candle -candleberries -candleberry -candled -candlefish -candlefishes -candleholder -candleholders -candlelight -candlelighted -candlelighter -candlelighters -candlelights -candlelit -candlenut -candlenuts -candlepin -candlepins -candlepower -candlepowers -candler -candlers -candles -candlesnuffer -candlesnuffers -candlestick -candlesticks -candlewick -candlewicks -candlewood -candlewoods -candling -candor -candors -candour -candours -candy -candyfloss -candyflosses -candygram -candygrams -candying -candytuft -candytufts -cane -canebrake -canebrakes -caned -canella -canellas -canephor -canephors -caner -caners -canes -canescent -caneware -canewares -canfield -canfields -canful -canfuls -cangue -cangues -canicular -canid -canids -canikin -canikins -canine -canines -caning -caninities -caninity -canister -canisters -canities -canker -cankered -cankering -cankerous -cankers -cankerworm -cankerworms -canna -cannabic -cannabin -cannabinoid -cannabinoids -cannabinol -cannabinols -cannabins -cannabis -cannabises -cannas -canned -cannel -cannelloni -cannelon -cannelons -cannels -canner -canneries -canners -cannery -cannibal -cannibalise -cannibalised -cannibalises -cannibalising -cannibalism -cannibalisms -cannibalistic -cannibalization -cannibalizations -cannibalize -cannibalized -cannibalizes -cannibalizing -cannibals -cannie -cannier -canniest -cannikin -cannikins -cannily -canniness -canninesses -canning -cannings -cannister -cannisters -cannoli -cannolis -cannon -cannonade -cannonaded -cannonades -cannonading -cannonball -cannonballed -cannonballing -cannonballs -cannoned -cannoneer -cannoneers -cannoning -cannonries -cannonry -cannons -cannot -cannula -cannulae -cannular -cannulas -canny -canoe -canoeable -canoed -canoeing -canoeist -canoeists -canoes -canola -canolas -canon -canoness -canonesses -canonic -canonical -canonically -canonicals -canonicities -canonicity -canonise -canonised -canonises -canonising -canonist -canonists -canonization -canonizations -canonize -canonized -canonizes -canonizing -canonries -canonry -canons -canoodle -canoodled -canoodles -canoodling -canopied -canopies -canopy -canopying -canorous -canorously -canorousness -canorousnesses -cans -cansful -canso -cansos -canst -cant -cantabile -cantala -cantalas -cantaloup -cantaloupe -cantaloupes -cantaloups -cantankerous -cantankerously -cantankerousness -cantankerousnesses -cantata -cantatas -cantatrice -cantatrices -cantatrici -cantdog -cantdogs -canted -canteen -canteens -canter -cantered -cantering -canters -canthal -cantharides -cantharidin -cantharidins -cantharis -canthaxanthin -canthaxanthins -canthi -canthus -cantic -canticle -canticles -cantilena -cantilenas -cantilever -cantilevered -cantilevering -cantilevers -cantillate -cantillated -cantillates -cantillating -cantillation -cantillations -cantina -cantinas -canting -cantle -cantles -canto -canton -cantonal -cantoned -cantoning -cantonment -cantonments -cantons -cantor -cantorial -cantors -cantos -cantraip -cantraips -cantrap -cantraps -cantrip -cantrips -cants -cantus -canty -canula -canulae -canulas -canulate -canulated -canulates -canulating -canvas -canvasback -canvasbacks -canvased -canvaser -canvasers -canvases -canvasing -canvaslike -canvass -canvassed -canvasser -canvassers -canvasses -canvassing -canyon -canyons -canzona -canzonas -canzone -canzones -canzonet -canzonets -canzoni -caoutchouc -caoutchoucs -cap -capabilities -capability -capable -capableness -capablenesses -capabler -capablest -capably -capacious -capaciously -capaciousness -capaciousnesses -capacitance -capacitances -capacitate -capacitated -capacitates -capacitating -capacitation -capacitations -capacities -capacitive -capacitively -capacitor -capacitors -capacity -caparison -caparisoned -caparisoning -caparisons -cape -caped -capelan -capelans -capelet -capelets -capelin -capelins -caper -capercaillie -capercaillies -capercailzie -capercailzies -capered -caperer -caperers -capering -capers -capes -capeskin -capeskins -capework -capeworks -capful -capfuls -caph -caphs -capias -capiases -capillaries -capillarities -capillarity -capillary -capita -capital -capitalise -capitalised -capitalises -capitalising -capitalism -capitalisms -capitalist -capitalistic -capitalistically -capitalists -capitalization -capitalizations -capitalize -capitalized -capitalizes -capitalizing -capitally -capitals -capitate -capitation -capitations -capitol -capitols -capitula -capitular -capitularies -capitulary -capitulate -capitulated -capitulates -capitulating -capitulation -capitulations -capitulum -capless -caplet -caplets -caplin -caplins -capmaker -capmakers -capo -capon -caponata -caponatas -caponier -caponiers -caponize -caponized -caponizes -caponizing -capons -caporal -caporals -capos -capote -capotes -capouch -capouches -capped -cappelletti -capper -cappers -capping -cappings -cappuccino -cappuccinos -capric -capricci -capriccio -capriccios -caprice -caprices -capricious -capriciously -capriciousness -capriciousnesses -caprification -caprifications -caprifig -caprifigs -caprine -capriole -caprioled -caprioles -caprioling -capris -caprock -caprocks -caprolactam -caprolactams -caps -capsaicin -capsaicins -capsicin -capsicins -capsicum -capsicums -capsid -capsidal -capsids -capsize -capsized -capsizes -capsizing -capsomer -capsomers -capstan -capstans -capstone -capstones -capsular -capsulated -capsule -capsuled -capsules -capsuling -capsulize -capsulized -capsulizes -capsulizing -captain -captaincies -captaincy -captained -captaining -captains -captainship -captainships -captan -captans -caption -captioned -captioning -captionless -captions -captious -captiously -captiousness -captiousnesses -captivate -captivated -captivates -captivating -captivation -captivations -captivator -captivators -captive -captives -captivities -captivity -captopril -captoprils -captor -captors -capture -captured -capturer -capturers -captures -capturing -capuche -capuched -capuches -capuchin -capuchins -caput -capybara -capybaras -car -carabao -carabaos -carabid -carabids -carabin -carabine -carabineer -carabineers -carabiner -carabinero -carabineros -carabiners -carabines -carabinier -carabiniere -carabinieri -carabiniers -carabins -caracal -caracals -caracara -caracaras -carack -caracks -caracol -caracole -caracoled -caracoles -caracoling -caracolled -caracolling -caracols -caracul -caraculs -carafe -carafes -caragana -caraganas -carageen -carageens -caramba -carambola -carambolas -caramel -caramelise -caramelised -caramelises -caramelising -caramelize -caramelized -caramelizes -caramelizing -caramels -carangid -carangids -carapace -carapaces -carapax -carapaxes -carassow -carassows -carat -carate -carates -carats -caravan -caravaned -caravaner -caravaners -caravaning -caravanned -caravanner -caravanners -caravanning -caravans -caravansaries -caravansary -caravanserai -caravanserais -caravel -caravels -caraway -caraways -carb -carbachol -carbachols -carbamate -carbamates -carbamic -carbamide -carbamides -carbamino -carbamyl -carbamyls -carbanion -carbanions -carbarn -carbarns -carbaryl -carbaryls -carbazole -carbazoles -carbide -carbides -carbine -carbines -carbinol -carbinols -carbo -carbocyclic -carbohydrase -carbohydrases -carbohydrate -carbohydrates -carbolic -carbolics -carbon -carbonaceous -carbonade -carbonades -carbonado -carbonadoed -carbonadoes -carbonadoing -carbonados -carbonara -carbonaras -carbonate -carbonated -carbonates -carbonating -carbonation -carbonations -carbonic -carboniferous -carbonization -carbonizations -carbonize -carbonized -carbonizes -carbonizing -carbonless -carbonnade -carbonnades -carbons -carbonyl -carbonylation -carbonylations -carbonylic -carbonyls -carbora -carboras -carbos -carboxyl -carboxylase -carboxylases -carboxylate -carboxylated -carboxylates -carboxylating -carboxylation -carboxylations -carboxylic -carboxyls -carboxymethylcellulose -carboxymethylcelluloses -carboxypeptidase -carboxypeptidases -carboy -carboyed -carboys -carbs -carbuncle -carbuncled -carbuncles -carbuncular -carburet -carbureted -carbureting -carburetion -carburetions -carburetor -carburetors -carburets -carburetted -carburetter -carburetters -carburetting -carburettor -carburettors -carburise -carburised -carburises -carburising -carburization -carburizations -carburize -carburized -carburizes -carburizing -carcajou -carcajous -carcanet -carcanets -carcase -carcases -carcass -carcasses -carcel -carcels -carcinogen -carcinogeneses -carcinogenesis -carcinogenic -carcinogenicities -carcinogenicity -carcinogens -carcinoid -carcinoids -carcinoma -carcinomas -carcinomata -carcinomatoses -carcinomatosis -carcinomatous -carcinosarcoma -carcinosarcomas -carcinosarcomata -card -cardamom -cardamoms -cardamon -cardamons -cardamum -cardamums -cardboard -cardboards -cardcase -cardcases -carded -carder -carders -cardholder -cardholders -cardia -cardiac -cardiacs -cardiae -cardias -cardigan -cardigans -cardinal -cardinalate -cardinalates -cardinalities -cardinality -cardinally -cardinals -cardinalship -cardinalships -carding -cardings -cardiogenic -cardiogram -cardiograms -cardiograph -cardiographic -cardiographies -cardiographs -cardiography -cardioid -cardioids -cardiological -cardiologies -cardiologist -cardiologists -cardiology -cardiomyopathies -cardiomyopathy -cardiopathies -cardiopathy -cardiopulmonary -cardiorespiratory -cardiothoracic -cardiotonic -cardiotonics -cardiovascular -carditic -carditides -carditis -carditises -cardoon -cardoons -cardplayer -cardplayers -cards -cardsharp -cardsharper -cardsharpers -cardsharps -care -cared -careen -careened -careener -careeners -careening -careens -career -careered -careerer -careerers -careering -careerism -careerisms -careerist -careerists -careers -carefree -careful -carefuller -carefullest -carefully -carefulness -carefulnesses -caregiver -caregivers -caregiving -caregivings -careless -carelessly -carelessness -carelessnesses -carer -carers -cares -caress -caressed -caresser -caressers -caresses -caressing -caressingly -caressive -caressively -caret -caretake -caretaken -caretaker -caretakers -caretakes -caretaking -caretakings -caretook -carets -careworn -carex -carfare -carfares -carful -carfuls -cargo -cargoes -cargos -carhop -carhops -caribe -caribes -caribou -caribous -caricatural -caricature -caricatured -caricatures -caricaturing -caricaturist -caricaturists -carices -caried -caries -carillon -carillonned -carillonneur -carillonneurs -carillonning -carillons -carina -carinae -carinal -carinas -carinate -carinated -caring -carioca -cariocas -cariogenic -cariole -carioles -carious -caritas -caritases -carjacker -carjackers -carjacking -carjackings -cark -carked -carking -carks -carl -carle -carles -carless -carlin -carline -carlines -carling -carlings -carlins -carlish -carload -carloads -carls -carmagnole -carmagnoles -carmaker -carmakers -carman -carmen -carminative -carminatives -carmine -carmines -carn -carnage -carnages -carnal -carnalities -carnality -carnallite -carnallites -carnally -carnassial -carnassials -carnation -carnations -carnauba -carnaubas -carnelian -carnelians -carnet -carnets -carney -carneys -carnie -carnies -carnified -carnifies -carnify -carnifying -carnitine -carnitines -carnival -carnivals -carnivora -carnivore -carnivores -carnivorous -carnivorously -carnivorousness -carnivorousnesses -carnotite -carnotites -carns -carny -caroach -caroaches -carob -carobs -caroch -caroche -caroches -carol -caroled -caroler -carolers -caroli -caroling -carolled -caroller -carollers -carolling -carols -carolus -caroluses -carom -caromed -caroming -caroms -carotene -carotenes -carotenoid -carotenoids -carotid -carotids -carotin -carotinoid -carotinoids -carotins -carousal -carousals -carouse -caroused -carousel -carousels -carouser -carousers -carouses -carousing -carp -carpaccio -carpaccios -carpal -carpale -carpalia -carpals -carped -carpel -carpellary -carpellate -carpels -carpenter -carpentered -carpentering -carpenters -carpentries -carpentry -carper -carpers -carpet -carpetbag -carpetbagger -carpetbaggeries -carpetbaggers -carpetbaggery -carpetbagging -carpetbags -carpeted -carpeting -carpetings -carpets -carpetweed -carpetweeds -carpi -carping -carpingly -carpings -carpogonia -carpogonial -carpogonium -carpool -carpooled -carpooler -carpoolers -carpooling -carpools -carpophore -carpophores -carport -carports -carpospore -carpospores -carps -carpus -carr -carrack -carracks -carrageen -carrageenan -carrageenans -carrageenin -carrageenins -carrageens -carragheen -carragheens -carrefour -carrefours -carrel -carrell -carrells -carrels -carriage -carriages -carriageway -carriageways -carried -carrier -carriers -carries -carriole -carrioles -carrion -carrions -carritch -carritches -carroch -carroches -carrom -carromed -carroming -carroms -carronade -carronades -carrot -carrotier -carrotiest -carrotin -carrotins -carrots -carrottop -carrottopped -carrottops -carroty -carrousel -carrousels -carrs -carry -carryall -carryalls -carryback -carrybacks -carryforward -carryforwards -carrying -carryon -carryons -carryout -carryouts -carryover -carryovers -cars -carse -carses -carsick -carsickness -carsicknesses -cart -cartable -cartage -cartages -carte -carted -cartel -cartelise -cartelised -cartelises -cartelising -cartelization -cartelizations -cartelize -cartelized -cartelizes -cartelizing -cartels -carter -carters -cartes -cartilage -cartilages -cartilaginous -carting -cartload -cartloads -cartographer -cartographers -cartographic -cartographical -cartographically -cartographies -cartography -carton -cartoned -cartoning -cartons -cartoon -cartooned -cartooning -cartoonings -cartoonish -cartoonishly -cartoonist -cartoonists -cartoonlike -cartoons -cartoony -cartop -cartopper -cartoppers -cartouch -cartouche -cartouches -cartridge -cartridges -carts -cartularies -cartulary -cartwheel -cartwheeled -cartwheeler -cartwheelers -cartwheeling -cartwheels -caruncle -caruncles -carvacrol -carvacrols -carve -carved -carvel -carvels -carven -carver -carvers -carves -carving -carvings -carwash -carwashes -caryatic -caryatid -caryatides -caryatids -caryopses -caryopsides -caryopsis -caryotin -caryotins -casa -casaba -casabas -casas -casava -casavas -casbah -casbahs -cascabel -cascabels -cascable -cascables -cascade -cascaded -cascades -cascading -cascara -cascaras -cascarilla -cascarillas -case -casease -caseases -caseate -caseated -caseates -caseating -caseation -caseations -casebearer -casebearers -casebook -casebooks -cased -casefied -casefies -casefy -casefying -caseic -casein -caseinate -caseinates -caseins -caseload -caseloads -casemate -casemates -casement -casements -caseose -caseoses -caseous -casern -caserne -casernes -caserns -cases -casette -casettes -casework -caseworker -caseworkers -caseworks -caseworm -caseworms -cash -cashable -cashaw -cashaws -cashbook -cashbooks -cashbox -cashboxes -cashed -cashes -cashew -cashews -cashier -cashiered -cashiering -cashiers -cashing -cashless -cashmere -cashmeres -cashoo -cashoos -casimere -casimeres -casimire -casimires -casing -casings -casini -casino -casinos -casita -casitas -cask -casked -casket -casketed -casketing -caskets -casking -casks -casky -casque -casqued -casques -cassaba -cassabas -cassata -cassatas -cassava -cassavas -casserole -casseroles -cassette -cassettes -cassia -cassias -cassimere -cassimeres -cassino -cassinos -cassis -cassises -cassiterite -cassiterites -cassock -cassocks -cassoulet -cassoulets -cassowaries -cassowary -cast -castabilities -castability -castable -castanet -castanets -castaway -castaways -caste -casteism -casteisms -castellan -castellans -castellated -caster -casters -castes -castigate -castigated -castigates -castigating -castigation -castigations -castigator -castigators -casting -castings -castle -castled -castles -castling -castoff -castoffs -castor -castoreum -castoreums -castors -castrate -castrated -castrates -castrati -castrating -castration -castrations -castrato -castrator -castrators -castratory -castratos -casts -casual -casually -casualness -casualnesses -casuals -casualties -casualty -casuarina -casuarinas -casuist -casuistic -casuistical -casuistries -casuistry -casuists -casus -cat -catabolic -catabolically -catabolism -catabolisms -catabolite -catabolites -catabolize -catabolized -catabolizes -catabolizing -catachreses -catachresis -catachrestic -catachrestical -catachrestically -cataclysm -cataclysmal -cataclysmic -cataclysmically -cataclysms -catacomb -catacombs -catadioptric -catadromous -catafalque -catafalques -catalase -catalases -catalatic -catalectic -catalectics -catalepsies -catalepsy -cataleptic -cataleptically -cataleptics -catalexes -catalexis -catalo -cataloes -catalog -cataloged -cataloger -catalogers -cataloging -catalogs -catalogue -catalogued -cataloguer -cataloguers -catalogues -cataloguing -catalos -catalpa -catalpas -catalyses -catalysis -catalyst -catalysts -catalytic -catalytically -catalyze -catalyzed -catalyzer -catalyzers -catalyzes -catalyzing -catamaran -catamarans -catamenia -catamenial -catamite -catamites -catamount -catamounts -cataphora -cataphoras -cataphoreses -cataphoresis -cataphoretic -cataphoretically -cataphoric -cataplasm -cataplasms -cataplexies -cataplexy -catapult -catapulted -catapulting -catapults -cataract -cataractous -cataracts -catarrh -catarrhal -catarrhally -catarrhine -catarrhines -catarrhs -catastrophe -catastrophes -catastrophic -catastrophically -catastrophism -catastrophisms -catastrophist -catastrophists -catatonia -catatonias -catatonic -catatonically -catatonics -catawba -catawbas -catbird -catbirds -catboat -catboats -catbrier -catbriers -catcall -catcalled -catcalling -catcalls -catch -catchable -catchall -catchalls -catcher -catchers -catches -catchflies -catchfly -catchier -catchiest -catching -catchment -catchments -catchpenny -catchphrase -catchphrases -catchpole -catchpoles -catchpoll -catchpolls -catchup -catchups -catchword -catchwords -catchy -catclaw -catclaws -cate -catecheses -catechesis -catechetical -catechin -catechins -catechism -catechismal -catechisms -catechist -catechistic -catechists -catechization -catechizations -catechize -catechized -catechizer -catechizers -catechizes -catechizing -catechol -catecholamine -catecholaminergic -catecholamines -catechols -catechu -catechumen -catechumens -catechus -categoric -categorical -categorically -categories -categorise -categorised -categorises -categorising -categorization -categorizations -categorize -categorized -categorizes -categorizing -category -catena -catenae -catenaries -catenary -catenas -catenate -catenated -catenates -catenating -catenation -catenations -catenoid -catenoids -cater -cateran -caterans -catercorner -catercornered -catered -caterer -caterers -cateress -cateresses -catering -caterpillar -caterpillars -caters -caterwaul -caterwauled -caterwauling -caterwauls -cates -catface -catfaces -catfacing -catfacings -catfall -catfalls -catfight -catfights -catfish -catfishes -catgut -catguts -catharses -catharsis -cathartic -cathartics -cathead -catheads -cathect -cathected -cathectic -cathecting -cathects -cathedra -cathedrae -cathedral -cathedrals -cathedras -cathepsin -cathepsins -catheter -catheterization -catheterizations -catheterize -catheterized -catheterizes -catheterizing -catheters -cathexes -cathexis -cathodal -cathodally -cathode -cathodes -cathodic -cathodically -catholic -catholically -catholicate -catholicates -catholicities -catholicity -catholicize -catholicized -catholicizes -catholicizing -catholicoi -catholicon -catholicons -catholicos -catholicoses -catholics -cathouse -cathouses -cation -cationic -cationically -cations -catkin -catkins -catlike -catlin -catling -catlings -catlins -catmint -catmints -catnap -catnaper -catnapers -catnapped -catnapper -catnappers -catnapping -catnaps -catnip -catnips -catoptric -cats -catspaw -catspaws -catsup -catsups -cattail -cattails -cattalo -cattaloes -cattalos -catted -catteries -cattery -cattie -cattier -catties -cattiest -cattily -cattiness -cattinesses -catting -cattish -cattle -cattleman -cattlemen -cattleya -cattleyas -catty -catwalk -catwalks -caucus -caucused -caucuses -caucusing -caucussed -caucusses -caucussing -caudad -caudal -caudally -caudate -caudated -caudates -caudex -caudexes -caudices -caudillismo -caudillismos -caudillo -caudillos -caudle -caudles -caught -caul -cauld -cauldron -cauldrons -caulds -caules -caulicle -caulicles -cauliflower -caulifloweret -cauliflowerets -cauliflowers -cauline -caulis -caulk -caulked -caulker -caulkers -caulking -caulkings -caulks -cauls -causable -causal -causalgia -causalgias -causalgic -causalities -causality -causally -causals -causation -causations -causative -causatively -causatives -cause -caused -causeless -causer -causerie -causeries -causers -causes -causeway -causewayed -causewaying -causeways -causey -causeys -causing -caustic -caustically -causticities -causticity -caustics -cauteries -cauterization -cauterizations -cauterize -cauterized -cauterizes -cauterizing -cautery -caution -cautionary -cautioned -cautioning -cautions -cautious -cautiously -cautiousness -cautiousnesses -cavalcade -cavalcades -cavalero -cavaleros -cavaletti -cavalier -cavaliered -cavaliering -cavalierism -cavalierisms -cavalierly -cavaliers -cavalla -cavallas -cavalletti -cavallies -cavally -cavalries -cavalry -cavalryman -cavalrymen -cavatina -cavatinas -cavatine -cave -caveat -caveated -caveating -caveator -caveators -caveats -caved -cavefish -cavefishes -cavelike -caveman -cavemen -caver -cavern -caverned -cavernicolous -caverning -cavernous -cavernously -caverns -cavers -caves -cavetti -cavetto -cavettos -caviar -caviare -caviares -caviars -cavicorn -cavie -cavies -cavil -caviled -caviler -cavilers -caviling -cavilled -caviller -cavillers -cavilling -cavils -caving -cavings -cavitary -cavitate -cavitated -cavitates -cavitating -cavitation -cavitations -cavitied -cavities -cavity -cavort -cavorted -cavorter -cavorters -cavorting -cavorts -cavy -caw -cawed -cawing -caws -cay -cayenne -cayenned -cayennes -cayman -caymans -cays -cayuse -cayuses -cazique -caziques -ceanothus -ceanothuses -cease -ceased -ceasefire -ceasefires -ceaseless -ceaselessly -ceaselessness -ceaselessnesses -ceases -ceasing -cebid -cebids -ceboid -ceboids -ceca -cecal -cecally -cecum -cedar -cedarbird -cedarbirds -cedarn -cedars -cedarwood -cedarwoods -cede -ceded -ceder -ceders -cedes -cedi -cedilla -cedillas -ceding -cedis -cedula -cedulas -cee -cees -ceiba -ceibas -ceil -ceiled -ceiler -ceilers -ceiling -ceilinged -ceilings -ceilometer -ceilometers -ceils -ceinture -ceintures -cel -celadon -celadons -celandine -celandines -celeb -celebrant -celebrants -celebrate -celebrated -celebratedness -celebratednesses -celebrates -celebrating -celebration -celebrations -celebrator -celebrators -celebratory -celebrities -celebrity -celebs -celeriac -celeriacs -celeries -celerities -celerity -celery -celesta -celestas -celeste -celestes -celestial -celestially -celestials -celestite -celestites -celiac -celiacs -celibacies -celibacy -celibate -celibates -cell -cella -cellae -cellar -cellarage -cellarages -cellared -cellarer -cellarers -cellaret -cellarets -cellarette -cellarettes -cellaring -cellars -cellblock -cellblocks -celled -celli -celling -cellist -cellists -cellmate -cellmates -cello -cellobiose -cellobioses -celloidin -celloidins -cellophane -cellophanes -cellos -cellphone -cellphones -cells -cellular -cellularities -cellularity -cellulase -cellulases -cellule -cellules -cellulite -cellulites -cellulitis -cellulitises -celluloid -celluloids -cellulolytic -cellulose -celluloses -cellulosic -cellulosics -celom -celomata -celoms -celosia -celosias -cels -celt -celts -cembali -cembalo -cembalos -cement -cementa -cementation -cementations -cemented -cementer -cementers -cementing -cementite -cementites -cementitious -cements -cementum -cementums -cemeteries -cemetery -cenacle -cenacles -cenobite -cenobites -cenobitic -cenospecies -cenotaph -cenotaphs -cenote -cenotes -cense -censed -censer -censers -censes -censing -censor -censored -censorial -censoring -censorious -censoriously -censoriousness -censoriousnesses -censors -censorship -censorships -censual -censurable -censure -censured -censurer -censurers -censures -censuring -census -censused -censuses -censusing -cent -centai -cental -centals -centare -centares -centas -centaur -centaurea -centaureas -centauries -centaurs -centaury -centavo -centavos -centenarian -centenarians -centenaries -centenary -centennial -centennially -centennials -center -centerboard -centerboards -centered -centeredness -centerednesses -centerfold -centerfolds -centering -centerless -centerline -centerlines -centerpiece -centerpieces -centers -centeses -centesimal -centesimi -centesimo -centesimos -centesis -centiare -centiares -centigrade -centigram -centigrams -centile -centiles -centiliter -centiliters -centillion -centillions -centime -centimes -centimeter -centimeters -centimo -centimorgan -centimorgans -centimos -centipede -centipedes -centner -centners -cento -centones -centos -centra -central -centraler -centralest -centralise -centralised -centralises -centralising -centralism -centralisms -centralist -centralistic -centralists -centralities -centrality -centralization -centralizations -centralize -centralized -centralizer -centralizers -centralizes -centralizing -centrally -centrals -centre -centred -centres -centric -centrically -centricities -centricity -centrifugal -centrifugally -centrifugals -centrifugation -centrifugations -centrifuge -centrifuged -centrifuges -centrifuging -centring -centrings -centriole -centrioles -centripetal -centripetally -centrism -centrisms -centrist -centrists -centroid -centroids -centromere -centromeres -centromeric -centrosome -centrosomes -centrosymmetric -centrum -centrums -cents -centu -centum -centums -centuple -centupled -centuples -centupling -centuries -centurion -centurions -century -ceorl -ceorlish -ceorls -cep -cepe -cepes -cephalad -cephalexin -cephalexins -cephalic -cephalically -cephalin -cephalins -cephalization -cephalizations -cephalometric -cephalometries -cephalometry -cephalopod -cephalopods -cephaloridine -cephaloridines -cephalosporin -cephalosporins -cephalothin -cephalothins -cephalothoraces -cephalothorax -cephalothoraxes -cepheid -cepheids -ceps -ceramal -ceramals -ceramic -ceramicist -ceramicists -ceramics -ceramist -ceramists -cerastes -cerate -cerated -cerates -ceratin -ceratins -ceratoid -ceratopsian -ceratopsians -cercaria -cercariae -cercarial -cercarias -cerci -cercis -cercises -cercus -cere -cereal -cereals -cerebella -cerebellar -cerebellum -cerebellums -cerebra -cerebral -cerebrally -cerebrals -cerebrate -cerebrated -cerebrates -cerebrating -cerebration -cerebrations -cerebric -cerebroside -cerebrosides -cerebrospinal -cerebrovascular -cerebrum -cerebrums -cerecloth -cerecloths -cered -cerement -cerements -ceremonial -ceremonialism -ceremonialisms -ceremonialist -ceremonialists -ceremonially -ceremonials -ceremonies -ceremonious -ceremoniously -ceremoniousness -ceremoniousnesses -ceremony -ceres -cereus -cereuses -ceria -cerias -ceric -cering -ceriph -ceriphs -cerise -cerises -cerite -cerites -cerium -ceriums -cermet -cermets -cernuous -cero -ceros -cerotic -cerotype -cerotypes -cerous -certain -certainer -certainest -certainly -certainties -certainty -certes -certifiable -certifiably -certificate -certificated -certificates -certificating -certification -certifications -certificatory -certified -certifier -certifiers -certifies -certify -certifying -certiorari -certioraris -certitude -certitudes -cerulean -ceruleans -ceruloplasmin -ceruloplasmins -cerumen -cerumens -ceruminous -ceruse -ceruses -cerusite -cerusites -cerussite -cerussites -cervelas -cervelases -cervelat -cervelats -cervical -cervices -cervicitis -cervicitises -cervid -cervine -cervix -cervixes -cesarean -cesareans -cesarian -cesarians -cesium -cesiums -cess -cessation -cessations -cessed -cesses -cessing -cession -cessions -cesspit -cesspits -cesspool -cesspools -cesta -cestas -cesti -cestode -cestodes -cestoi -cestoid -cestoids -cestos -cestus -cestuses -cesura -cesurae -cesuras -cetacean -cetaceans -cetaceous -cetane -cetanes -cete -cetes -cetologies -cetologist -cetologists -cetology -ceviche -ceviches -chablis -chabouk -chabouks -chabuk -chabuks -chacma -chacmas -chaconne -chaconnes -chad -chadar -chadarim -chadars -chadless -chador -chadors -chadri -chads -chaeta -chaetae -chaetal -chaetognath -chaetognaths -chafe -chafed -chafer -chafers -chafes -chaff -chaffed -chaffer -chaffered -chafferer -chafferers -chaffering -chaffers -chaffier -chaffiest -chaffinch -chaffinches -chaffing -chaffs -chaffy -chafing -chagrin -chagrined -chagrining -chagrinned -chagrinning -chagrins -chain -chaine -chained -chaines -chaining -chainman -chainmen -chains -chainsaw -chainsawed -chainsawing -chainsaws -chainwheel -chainwheels -chair -chaired -chairing -chairlift -chairlifts -chairman -chairmaned -chairmaning -chairmanned -chairmanning -chairmans -chairmanship -chairmanships -chairmen -chairperson -chairpersons -chairs -chairwoman -chairwomen -chaise -chaises -chakra -chakras -chalah -chalahs -chalaza -chalazae -chalazal -chalazas -chalazia -chalazion -chalazions -chalcedonic -chalcedonies -chalcedony -chalcid -chalcids -chalcocite -chalcocites -chalcogen -chalcogenide -chalcogenides -chalcogens -chalcopyrite -chalcopyrites -chaldron -chaldrons -chaleh -chalehs -chalet -chalets -chalice -chaliced -chalices -chalk -chalkboard -chalkboards -chalked -chalkier -chalkiest -chalking -chalks -chalky -challa -challah -challahs -challas -challenge -challenged -challenger -challengers -challenges -challenging -challengingly -challie -challies -challis -challises -challot -challoth -chally -chalone -chalones -chalot -chaloth -chalutz -chalutzim -chalybeate -chalybeates -cham -chamade -chamades -chamaephyte -chamaephytes -chamber -chambered -chambering -chamberlain -chamberlains -chambermaid -chambermaids -chambers -chambray -chambrays -chameleon -chameleonic -chameleonlike -chameleons -chamfer -chamfered -chamfering -chamfers -chamfron -chamfrons -chamise -chamises -chamiso -chamisos -chammied -chammies -chammy -chammying -chamois -chamoised -chamoises -chamoising -chamoix -chamomile -chamomiles -champ -champac -champacs -champagne -champagnes -champaign -champaigns -champak -champaks -champed -champer -champers -champerties -champertous -champerty -champignon -champignons -champing -champion -championed -championing -champions -championship -championships -champleve -champleves -champs -champy -chams -chance -chanced -chanceful -chancel -chancelleries -chancellery -chancellor -chancellories -chancellors -chancellorship -chancellorships -chancellory -chancels -chanceries -chancery -chances -chancier -chanciest -chancily -chanciness -chancinesses -chancing -chancre -chancres -chancroid -chancroidal -chancroids -chancrous -chancy -chandelier -chandeliered -chandeliers -chandelle -chandelled -chandelles -chandelling -chandler -chandleries -chandlers -chandlery -chanfron -chanfrons -chang -change -changeabilities -changeability -changeable -changeableness -changeablenesses -changeably -changed -changeful -changefully -changefulness -changefulnesses -changeless -changelessly -changelessness -changelessnesses -changeling -changelings -changeover -changeovers -changer -changers -changes -changing -changs -channel -channeled -channeler -channelers -channeling -channelization -channelizations -channelize -channelized -channelizes -channelizing -channelled -channelling -channels -chanson -chansonnier -chansonniers -chansons -chant -chantage -chantages -chanted -chanter -chanterelle -chanterelles -chanters -chanteuse -chanteuses -chantey -chanteys -chanticleer -chanticleers -chanties -chanting -chantor -chantors -chantries -chantry -chants -chanty -chao -chaos -chaoses -chaotic -chaotically -chap -chaparajos -chaparejos -chaparral -chaparrals -chapati -chapaties -chapatis -chapatti -chapatties -chapattis -chapbook -chapbooks -chape -chapeau -chapeaus -chapeaux -chapel -chapels -chaperon -chaperonage -chaperonages -chaperone -chaperoned -chaperones -chaperoning -chaperons -chapes -chapfallen -chapiter -chapiters -chaplain -chaplaincies -chaplaincy -chaplains -chaplet -chapleted -chaplets -chapman -chapmen -chappati -chappatis -chapped -chapping -chaps -chapt -chapter -chaptered -chaptering -chapters -chaqueta -chaquetas -char -charabanc -charabancs -characid -characids -characin -characins -character -charactered -characterful -characteries -charactering -characteristic -characteristically -characteristics -characterization -characterizations -characterize -characterized -characterizes -characterizing -characterless -characterological -characterologically -characters -charactery -charade -charades -charas -charases -charbroil -charbroiled -charbroiler -charbroilers -charbroiling -charbroils -charcoal -charcoaled -charcoaling -charcoals -charcuterie -charcuteries -chard -chardonnay -chardonnays -chards -chare -chared -chares -charge -chargeable -charged -chargehand -chargehands -charger -chargers -charges -charging -charier -chariest -charily -chariness -charinesses -charing -chariot -charioted -charioteer -charioteers -charioting -chariots -charism -charisma -charismata -charismatic -charismatics -charisms -charitable -charitableness -charitablenesses -charitably -charities -charity -charivari -charivaris -chark -charka -charkas -charked -charkha -charkhas -charking -charks -charladies -charlady -charlatan -charlatanism -charlatanisms -charlatanries -charlatanry -charlatans -charley -charleys -charlie -charlies -charlock -charlocks -charlotte -charlottes -charm -charmed -charmer -charmers -charmeuse -charmeuses -charming -charminger -charmingest -charmingly -charmless -charms -charnel -charnels -charpai -charpais -charpoy -charpoys -charqui -charquid -charquis -charr -charred -charrier -charriest -charring -charro -charros -charrs -charry -chars -chart -charted -charter -chartered -charterer -charterers -chartering -charters -charting -chartist -chartists -chartreuse -chartreuses -charts -chartularies -chartulary -charwoman -charwomen -chary -chase -chased -chaser -chasers -chases -chasing -chasings -chasm -chasmal -chasmed -chasmic -chasms -chasmy -chasse -chassed -chasseing -chassepot -chassepots -chasses -chasseur -chasseurs -chassis -chaste -chastely -chasten -chastened -chastener -chasteners -chasteness -chastenesses -chastening -chastens -chaster -chastest -chastise -chastised -chastisement -chastisements -chastiser -chastisers -chastises -chastising -chastities -chastity -chasuble -chasubles -chat -chatchka -chatchkas -chatchke -chatchkes -chateau -chateaubriand -chateaubriands -chateaus -chateaux -chatelain -chatelaine -chatelaines -chatelains -chatoyance -chatoyances -chatoyancies -chatoyancy -chatoyant -chatoyants -chats -chatted -chattel -chattels -chatter -chatterbox -chatterboxes -chattered -chatterer -chatterers -chattering -chatters -chattery -chattier -chattiest -chattily -chattiness -chattinesses -chatting -chatty -chaufer -chaufers -chauffer -chauffers -chauffeur -chauffeured -chauffeuring -chauffeurs -chaulmoogra -chaulmoogras -chaunt -chaunted -chaunter -chaunters -chaunting -chaunts -chausses -chaussure -chaussures -chautauqua -chautauquas -chauvinism -chauvinisms -chauvinist -chauvinistic -chauvinistically -chauvinists -chaw -chawbacon -chawbacons -chawed -chawer -chawers -chawing -chaws -chay -chayote -chayotes -chays -chazan -chazanim -chazans -chazzan -chazzanim -chazzans -chazzen -chazzenim -chazzens -cheap -cheapen -cheapened -cheapening -cheapens -cheaper -cheapest -cheapie -cheapies -cheapish -cheapishly -cheapjack -cheapjacks -cheaply -cheapness -cheapnesses -cheapo -cheapos -cheaps -cheapskate -cheapskates -cheat -cheated -cheater -cheaters -cheating -cheats -chebec -chebecs -chechako -chechakos -check -checkable -checkbook -checkbooks -checked -checker -checkerberries -checkerberry -checkerboard -checkerboards -checkered -checkering -checkers -checking -checkless -checklist -checklists -checkmark -checkmarked -checkmarking -checkmarks -checkmate -checkmated -checkmates -checkmating -checkoff -checkoffs -checkout -checkouts -checkpoint -checkpoints -checkrein -checkreins -checkroom -checkrooms -checkrow -checkrowed -checkrowing -checkrows -checks -checkup -checkups -chedarim -cheddar -cheddars -cheddite -cheddites -cheder -cheders -chedite -chedites -cheechako -cheechakos -cheek -cheekbone -cheekbones -cheeked -cheekful -cheekfuls -cheekier -cheekiest -cheekily -cheekiness -cheekinesses -cheeking -cheeks -cheeky -cheep -cheeped -cheeper -cheepers -cheeping -cheeps -cheer -cheered -cheerer -cheerers -cheerful -cheerfuller -cheerfullest -cheerfully -cheerfulness -cheerfulnesses -cheerier -cheeriest -cheerily -cheeriness -cheerinesses -cheering -cheerio -cheerios -cheerlead -cheerleader -cheerleaders -cheerleading -cheerleads -cheerled -cheerless -cheerlessly -cheerlessness -cheerlessnesses -cheerly -cheero -cheeros -cheers -cheery -cheese -cheeseburger -cheeseburgers -cheesecake -cheesecakes -cheesecloth -cheesecloths -cheesed -cheeseparing -cheeseparings -cheeses -cheesier -cheesiest -cheesily -cheesiness -cheesinesses -cheesing -cheesy -cheetah -cheetahs -chef -chefdom -chefdoms -cheffed -cheffing -chefs -chegoe -chegoes -chela -chelae -chelas -chelatable -chelate -chelated -chelates -chelating -chelation -chelations -chelator -chelators -chelicera -chelicerae -cheliceral -cheliped -chelipeds -cheloid -cheloids -chelonian -chelonians -chemic -chemical -chemically -chemicals -chemics -chemiluminescence -chemiluminescences -chemiluminescent -chemiosmotic -chemise -chemises -chemisette -chemisettes -chemism -chemisms -chemisorb -chemisorbed -chemisorbing -chemisorbs -chemisorption -chemisorptions -chemist -chemistries -chemistry -chemists -chemo -chemoautotrophic -chemoautotrophies -chemoautotrophy -chemoprophylactic -chemoprophylaxes -chemoprophylaxis -chemoreception -chemoreceptions -chemoreceptive -chemoreceptor -chemoreceptors -chemos -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 -chemurgy -chenille -chenilles -chenopod -chenopods -cheongsam -cheongsams -cheque -chequer -chequered -chequering -chequers -cheques -cherimoya -cherimoyas -cherish -cherishable -cherished -cherisher -cherishers -cherishes -cherishing -chernozem -chernozemic -chernozems -cheroot -cheroots -cherries -cherry -cherrylike -cherrystone -cherrystones -chert -chertier -chertiest -cherts -cherty -cherub -cherubic -cherubically -cherubim -cherubims -cherublike -cherubs -chervil -chervils -chess -chessboard -chessboards -chesses -chessman -chessmen -chest -chested -chesterfield -chesterfields -chestful -chestfuls -chestier -chestiest -chestnut -chestnuts -chests -chesty -chetah -chetahs -cheth -cheths -chetrum -chetrums -chevalet -chevalets -chevalier -chevaliers -chevelure -chevelures -cheveron -cheverons -chevied -chevies -cheviot -cheviots -chevre -chevres -chevron -chevrons -chevy -chevying -chew -chewable -chewed -chewer -chewers -chewier -chewiest -chewing -chewink -chewinks -chews -chewy -chez -chi -chia -chiao -chiaroscurist -chiaroscurists -chiaroscuro -chiaroscuros -chias -chiasm -chiasma -chiasmal -chiasmas -chiasmata -chiasmatic -chiasmi -chiasmic -chiasms -chiasmus -chiastic -chiaus -chiauses -chibouk -chibouks -chibouque -chibouques -chic -chicane -chicaned -chicaner -chicaneries -chicaners -chicanery -chicanes -chicaning -chicano -chicanos -chiccories -chiccory -chicer -chicest -chichi -chichis -chick -chickadee -chickadees -chickaree -chickarees -chickee -chickees -chicken -chickened -chickenhearted -chickening -chickenpox -chickenpoxes -chickens -chickenshit -chickenshits -chickories -chickory -chickpea -chickpeas -chicks -chickweed -chickweeds -chicle -chicles -chicly -chicness -chicnesses -chico -chicories -chicory -chicos -chics -chid -chidden -chide -chided -chider -chiders -chides -chiding -chief -chiefdom -chiefdoms -chiefer -chiefest -chiefly -chiefs -chiefship -chiefships -chieftain -chieftaincies -chieftaincy -chieftains -chieftainship -chieftainships -chiel -chield -chields -chiels -chiffchaff -chiffchaffs -chiffon -chiffonade -chiffonades -chiffonier -chiffoniers -chiffons -chifforobe -chifforobes -chigetai -chigetais -chigger -chiggers -chignon -chignons -chigoe -chigoes -chihuahua -chihuahuas -chilblain -chilblains -child -childbearing -childbearings -childbed -childbeds -childbirth -childbirths -childe -childes -childhood -childhoods -childing -childish -childishly -childishness -childishnesses -childless -childlessness -childlessnesses -childlier -childliest -childlike -childlikeness -childlikenesses -childly -childproof -childproofed -childproofing -childproofs -children -chile -chiles -chili -chiliad -chiliads -chiliasm -chiliasms -chiliast -chiliastic -chiliasts -chilidog -chilidogs -chilies -chilis -chill -chilled -chiller -chillers -chillest -chilli -chillier -chillies -chilliest -chillily -chilliness -chillinesses -chilling -chillingly -chillness -chillnesses -chills -chillum -chillums -chilly -chilopod -chilopods -chimaera -chimaeras -chimaeric -chimaerism -chimaerisms -chimar -chimars -chimb -chimbley -chimbleys -chimblies -chimbly -chimbs -chime -chimed -chimer -chimera -chimeras -chimere -chimeres -chimeric -chimerical -chimerically -chimerism -chimerisms -chimers -chimes -chimichanga -chimichangas -chiming -chimla -chimlas -chimley -chimleys -chimney -chimneylike -chimneypiece -chimneypieces -chimneys -chimp -chimpanzee -chimpanzees -chimps -chin -china -chinaberries -chinaberry -chinas -chinaware -chinawares -chinbone -chinbones -chinch -chincherinchee -chincherinchees -chinches -chinchier -chinchiest -chinchilla -chinchillas -chinchy -chine -chined -chines -chining -chink -chinkapin -chinkapins -chinked -chinkier -chinkiest -chinking -chinks -chinky -chinless -chinned -chinning -chino -chinoiserie -chinoiseries -chinone -chinones -chinook -chinooks -chinos -chinquapin -chinquapins -chins -chints -chintses -chintz -chintzes -chintzier -chintziest -chintzy -chionodoxa -chionodoxas -chip -chipboard -chipboards -chipmuck -chipmucks -chipmunk -chipmunks -chipped -chipper -chippered -chippering -chippers -chippie -chippier -chippies -chippiest -chipping -chippy -chips -chiral -chiralities -chirality -chirimoya -chirimoyas -chirk -chirked -chirker -chirkest -chirking -chirks -chirm -chirmed -chirming -chirms -chiro -chirographer -chirographers -chirographic -chirographical -chirographies -chirography -chiromancer -chiromancers -chiromancies -chiromancy -chironomid -chironomids -chiropodies -chiropodist -chiropodists -chiropody -chiropractic -chiropractics -chiropractor -chiropractors -chiropteran -chiropterans -chiros -chirp -chirped -chirper -chirpers -chirpier -chirpiest -chirpily -chirping -chirps -chirpy -chirr -chirre -chirred -chirres -chirring -chirrs -chirrup -chirruped -chirruping -chirrups -chirrupy -chirurgeon -chirurgeons -chis -chisel -chiseled -chiseler -chiselers -chiseling -chiselled -chiseller -chisellers -chiselling -chisels -chit -chital -chitals -chitchat -chitchats -chitchatted -chitchatting -chitin -chitinous -chitins -chitlin -chitling -chitlings -chitlins -chiton -chitons -chitosan -chitosans -chits -chitter -chittered -chittering -chitterlings -chitters -chitties -chitty -chivalric -chivalries -chivalrous -chivalrously -chivalrousness -chivalrousnesses -chivalry -chivaree -chivareed -chivareeing -chivarees -chivari -chivaried -chivaries -chivariing -chive -chives -chivied -chivies -chivvied -chivvies -chivvy -chivvying -chivy -chivying -chlamydes -chlamydia -chlamydiae -chlamydial -chlamydospore -chlamydospores -chlamys -chlamyses -chloasma -chloasmata -chloracne -chloracnes -chloral -chloralose -chloralosed -chloraloses -chlorals -chloramine -chloramines -chloramphenicol -chloramphenicols -chlorate -chlorates -chlordan -chlordane -chlordanes -chlordans -chlordiazepoxide -chlordiazepoxides -chlorella -chlorellas -chlorenchyma -chlorenchymas -chlorenchymata -chloric -chlorid -chloride -chlorides -chlorids -chlorin -chlorinate -chlorinated -chlorinates -chlorinating -chlorination -chlorinations -chlorinator -chlorinators -chlorine -chlorines -chlorinities -chlorinity -chlorins -chlorite -chlorites -chloritic -chlorobenzene -chlorobenzenes -chlorofluorocarbon -chlorofluorocarbons -chlorofluoromethane -chlorofluoromethanes -chloroform -chloroformed -chloroforming -chloroforms -chlorohydrin -chlorohydrins -chlorophyll -chlorophyllous -chlorophylls -chloropicrin -chloropicrins -chloroplast -chloroplastic -chloroplasts -chloroprene -chloroprenes -chloroquine -chloroquines -chloroses -chlorosis -chlorothiazide -chlorothiazides -chlorotic -chlorous -chlorpromazine -chlorpromazines -chlorpropamide -chlorpropamides -chlortetracycline -chlortetracyclines -choana -choanae -choanocyte -choanocytes -chock -chockablock -chocked -chockful -chocking -chocks -chocoholic -chocoholics -chocolate -chocolates -chocolatey -chocolatier -chocolatiers -chocolaty -choice -choicely -choiceness -choicenesses -choicer -choices -choicest -choir -choirboy -choirboys -choired -choiring -choirmaster -choirmasters -choirs -choke -chokeberries -chokeberry -chokecherries -chokecherry -choked -chokehold -chokeholds -choker -chokers -chokes -chokey -chokier -chokiest -choking -chokingly -choky -cholangiogram -cholangiograms -cholangiographic -cholangiographies -cholangiography -cholate -cholates -cholecalciferol -cholecalciferols -cholecystectomies -cholecystectomized -cholecystectomy -cholecystitides -cholecystitis -cholecystokinin -cholecystokinins -cholelithiases -cholelithiasis -cholent -cholents -choler -cholera -choleras -choleric -cholerically -cholers -cholestases -cholestasis -cholestatic -cholesteric -cholesterol -cholesterols -cholestyramine -cholestyramines -choline -cholinergic -cholinergically -cholines -cholinesterase -cholinesterases -cholla -chollas -cholo -cholos -chomp -chomped -chomper -chompers -chomping -chomps -chon -chondriosome -chondriosomes -chondrite -chondrites -chondritic -chondrocrania -chondrocranium -chondrocraniums -chondroitin -chondroitins -chondrule -chondrules -chook -chooks -choose -chooser -choosers -chooses -choosey -choosier -choosiest -choosing -choosy -chop -chopfallen -chophouse -chophouses -chopin -chopine -chopines -chopins -choplogic -choplogics -chopped -chopper -choppered -choppering -choppers -choppier -choppiest -choppily -choppiness -choppinesses -chopping -choppy -chops -chopstick -chopsticks -choragi -choragic -choragus -choraguses -choral -chorale -chorales -chorally -chorals -chord -chordal -chordamesoderm -chordamesodermal -chordamesoderms -chordate -chordates -chorded -chording -chords -chore -chorea -choreal -choreas -chored -choregi -choregus -choreguses -choreic -choreiform -choreman -choremen -choreograph -choreographed -choreographer -choreographers -choreographic -choreographically -choreographies -choreographing -choreographs -choreography -choreoid -chores -chorial -choriamb -choriambs -choric -chorine -chorines -choring -chorioallantoic -chorioallantoides -chorioallantois -choriocarcinoma -choriocarcinomas -choriocarcinomata -chorioid -chorioids -chorion -chorionic -chorions -chorister -choristers -chorizo -chorizos -chorographer -chorographers -chorographic -chorographies -chorography -choroid -choroidal -choroids -chortle -chortled -chortler -chortlers -chortles -chortling -chorus -chorused -choruses -chorusing -chorussed -chorusses -chorussing -chose -chosen -choses -chott -chotts -chough -choughs -chouse -choused -chouser -chousers -chouses -choush -choushes -chousing -chow -chowchow -chowchows -chowder -chowdered -chowderhead -chowderheaded -chowderheads -chowdering -chowders -chowed -chowhound -chowhounds -chowing -chows -chowse -chowsed -chowses -chowsing -chowtime -chowtimes -chresard -chresards -chrestomathies -chrestomathy -chrism -chrisma -chrismal -chrismation -chrismations -chrismon -chrismons -chrisms -chrisom -chrisoms -christen -christened -christening -christenings -christens -christiania -christianias -christie -christies -christy -chroma -chromaffin -chromas -chromate -chromates -chromatic -chromatically -chromaticism -chromaticisms -chromaticities -chromaticity -chromatics -chromatid -chromatids -chromatin -chromatinic -chromatins -chromatogram -chromatograms -chromatograph -chromatographed -chromatographer -chromatographers -chromatographic -chromatographically -chromatographies -chromatographing -chromatographs -chromatography -chromatolyses -chromatolysis -chromatolytic -chromatophore -chromatophores -chrome -chromed -chromes -chromic -chromide -chromides -chrominance -chrominances -chroming -chromings -chromite -chromites -chromium -chromiums -chromize -chromized -chromizes -chromizing -chromo -chromocenter -chromocenters -chromodynamics -chromogen -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 -chromos -chromosomal -chromosomally -chromosome -chromosomes -chromosphere -chromospheres -chromospheric -chromous -chromyl -chromyls -chronaxie -chronaxies -chronaxy -chronic -chronically -chronicities -chronicity -chronicle -chronicled -chronicler -chroniclers -chronicles -chronicling -chronics -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 -chronon -chronons -chronotherapies -chronotherapy -chrysalid -chrysalides -chrysalids -chrysalis -chrysalises -chrysanthemum -chrysanthemums -chrysarobin -chrysarobins -chrysoberyl -chrysoberyls -chrysolite -chrysolites -chrysomelid -chrysomelids -chrysophyte -chrysophytes -chrysoprase -chrysoprases -chrysotile -chrysotiles -chthonian -chthonic -chub -chubasco -chubascos -chubbier -chubbiest -chubbily -chubbiness -chubbinesses -chubby -chubs -chuck -chuckawalla -chuckawallas -chucked -chuckhole -chuckholes -chuckies -chucking -chuckle -chuckled -chucklehead -chuckleheaded -chuckleheads -chuckler -chucklers -chuckles -chucklesome -chuckling -chucklingly -chucks -chuckwalla -chuckwallas -chucky -chuddah -chuddahs -chuddar -chuddars -chudder -chudders -chufa -chufas -chuff -chuffed -chuffer -chuffest -chuffier -chuffiest -chuffing -chuffs -chuffy -chug -chugalug -chugalugged -chugalugging -chugalugs -chugged -chugger -chuggers -chugging -chugs -chukar -chukars -chukka -chukkar -chukkars -chukkas -chukker -chukkers -chum -chummed -chummier -chummiest -chummily -chumminess -chumminesses -chumming -chummy -chump -chumped -chumping -chumps -chums -chumship -chumships -chunk -chunked -chunkier -chunkiest -chunkily -chunking -chunks -chunky -chunter -chuntered -chuntering -chunters -church -churched -churches -churchgoer -churchgoers -churchgoing -churchgoings -churchianities -churchianity -churchier -churchiest -churching -churchings -churchless -churchlier -churchliest -churchliness -churchlinesses -churchly -churchman -churchmanship -churchmanships -churchmen -churchwarden -churchwardens -churchwoman -churchwomen -churchy -churchyard -churchyards -churl -churlish -churlishly -churlishness -churlishnesses -churls -churn -churned -churner -churners -churning -churnings -churns -churr -churred -churrigueresque -churring -churrs -chute -chuted -chutes -chuting -chutist -chutists -chutnee -chutnees -chutney -chutneys -chutzpa -chutzpah -chutzpahs -chutzpas -chyle -chyles -chylomicron -chylomicrons -chylous -chyme -chymes -chymic -chymics -chymist -chymists -chymosin -chymosins -chymotrypsin -chymotrypsinogen -chymotrypsinogens -chymotrypsins -chymotryptic -chymous -ciao -cibol -cibols -ciboria -ciborium -ciboule -ciboules -cicada -cicadae -cicadas -cicala -cicalas -cicale -cicatrices -cicatricial -cicatrix -cicatrixes -cicatrization -cicatrizations -cicatrize -cicatrized -cicatrizes -cicatrizing -cicelies -cicely -cicero -cicerone -cicerones -ciceroni -ciceros -cichlid -cichlidae -cichlids -cicisbei -cicisbeism -cicisbeisms -cicisbeo -cicisbeos -cicoree -cicorees -cider -ciders -cig -cigar -cigaret -cigarets -cigarette -cigarettes -cigarillo -cigarillos -cigars -cigs -ciguatera -ciguateras -cilantro -cilantros -cilia -ciliary -ciliate -ciliated -ciliates -ciliation -ciliations -cilice -cilices -cilium -cimbalom -cimbaloms -cimetidine -cimetidines -cimex -cimices -cinch -cinched -cinches -cinching -cinchona -cinchonas -cinchonine -cinchonines -cinchonism -cinchonisms -cincture -cinctured -cinctures -cincturing -cinder -cinderblock -cinderblocks -cindered -cindering -cinders -cindery -cine -cineast -cineaste -cineastes -cineasts -cinema -cinemagoer -cinemagoers -cinemas -cinematheque -cinematheques -cinematic -cinematically -cinematize -cinematized -cinematizes -cinematizing -cinematograph -cinematographer -cinematographers -cinematographic -cinematographically -cinematographies -cinematographs -cinematography -cineol -cineole -cineoles -cineols -cineplex -cineplexes -cineraria -cinerarias -cinerarium -cinerary -cinereous -cinerin -cinerins -cines -cingula -cingulate -cingulum -cinnabar -cinnabarine -cinnabars -cinnamic -cinnamon -cinnamons -cinnamyl -cinnamyls -cinquain -cinquains -cinque -cinquecentist -cinquecentisti -cinquecentists -cinquecento -cinquecentos -cinquefoil -cinquefoils -cinques -cion -cions -cioppino -cioppinos -cipher -ciphered -ciphering -ciphers -ciphertext -ciphertexts -ciphonies -ciphony -cipolin -cipolins -circa -circadian -circinate -circinately -circle -circled -circler -circlers -circles -circlet -circlets -circling -circuit -circuital -circuited -circuities -circuiting -circuitous -circuitously -circuitousness -circuitousnesses -circuitries -circuitry -circuits -circuity -circular -circularise -circularised -circularises -circularising -circularities -circularity -circularization -circularizations -circularize -circularized -circularizes -circularizing -circularly -circularness -circularnesses -circulars -circulatable -circulate -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 -circus -circuses -circusy -cire -cires -cirque -cirques -cirrate -cirrhoses -cirrhosis -cirrhotic -cirrhotics -cirri -cirriped -cirripeds -cirrocumuli -cirrocumulus -cirrose -cirrostrati -cirrostratus -cirrous -cirrus -cirsoid -cis -cisalpine -cisco -ciscoes -ciscos -cislunar -cisplatin -cisplatins -cissies -cissoid -cissoids -cissy -cist -cistern -cisterna -cisternae -cisternal -cisterns -cistron -cistronic -cistrons -cists -cistus -cistuses -citable -citadel -citadels -citation -citational -citations -citator -citators -citatory -cite -citeable -cited -citer -citers -cites -cithara -citharas -cither -cithern -citherns -cithers -cithren -cithrens -citied -cities -citification -citifications -citified -citifies -citify -citifying -citing -citizen -citizeness -citizenesses -citizenly -citizenries -citizenry -citizens -citizenship -citizenships -citola -citolas -citole -citoles -citral -citrals -citrate -citrated -citrates -citreous -citric -citriculture -citricultures -citriculturist -citriculturists -citrin -citrine -citrines -citrinin -citrinins -citrins -citron -citronella -citronellal -citronellals -citronellas -citronellol -citronellols -citrons -citrous -citrulline -citrullines -citrus -citruses -citrusy -cittern -citterns -city -cityfied -cityscape -cityscapes -cityward -citywide -civet -civets -civic -civically -civicism -civicisms -civics -civie -civies -civil -civilian -civilianization -civilianizations -civilianize -civilianized -civilianizes -civilianizing -civilians -civilisation -civilisations -civilise -civilised -civilises -civilising -civilities -civility -civilization -civilizational -civilizations -civilize -civilized -civilizer -civilizers -civilizes -civilizing -civilly -civism -civisms -civvies -civvy -clabber -clabbered -clabbering -clabbers -clach -clachan -clachans -clachs -clack -clacked -clacker -clackers -clacking -clacks -clad -cladding -claddings -clade -clades -cladist -cladistic -cladistically -cladistics -cladists -cladoceran -cladocerans -cladode -cladodes -cladodial -cladogeneses -cladogenesis -cladogenetic -cladogenetically -cladogram -cladograms -cladophyll -cladophylla -cladophylls -cladophyllum -clads -clag -clagged -clagging -clags -claim -claimable -claimant -claimants -claimed -claimer -claimers -claiming -claims -clairaudience -clairaudiences -clairaudient -clairaudiently -clairvoyance -clairvoyances -clairvoyant -clairvoyantly -clairvoyants -clam -clamant -clamantly -clambake -clambakes -clamber -clambered -clamberer -clamberers -clambering -clambers -clammed -clammer -clammers -clammier -clammiest -clammily -clamminess -clamminesses -clamming -clammy -clamor -clamored -clamorer -clamorers -clamoring -clamorous -clamorously -clamorousness -clamorousnesses -clamors -clamour -clamoured -clamouring -clamours -clamp -clampdown -clampdowns -clamped -clamper -clampers -clamping -clamps -clams -clamshell -clamshells -clamworm -clamworms -clan -clandestine -clandestinely -clandestineness -clandestinenesses -clandestinities -clandestinity -clang -clanged -clanger -clangers -clanging -clangor -clangored -clangoring -clangorous -clangorously -clangors -clangour -clangoured -clangouring -clangours -clangs -clank -clanked -clanking -clankingly -clanks -clannish -clannishly -clannishness -clannishnesses -clans -clansman -clansmen -clap -clapboard -clapboarded -clapboarding -clapboards -clapped -clapper -clapperclaw -clapperclawed -clapperclawing -clapperclaws -clappers -clapping -claps -clapt -claptrap -claptraps -claque -claquer -claquers -claques -claqueur -claqueurs -clarence -clarences -claret -clarets -claries -clarification -clarifications -clarified -clarifier -clarifiers -clarifies -clarify -clarifying -clarinet -clarinetist -clarinetists -clarinets -clarinettist -clarinettists -clarion -clarioned -clarioning -clarions -clarities -clarity -clarkia -clarkias -claro -claroes -claros -clary -clash -clashed -clasher -clashers -clashes -clashing -clasp -clasped -clasper -claspers -clasping -clasps -claspt -class -classed -classer -classers -classes -classic -classical -classicalities -classicality -classically -classicism -classicisms -classicist -classicistic -classicists -classicize -classicized -classicizes -classicizing -classico -classics -classier -classiest -classifiable -classification -classifications -classificatory -classified -classifieds -classifier -classifiers -classifies -classify -classifying -classily -classiness -classinesses -classing -classis -classism -classisms -classist -classists -classless -classlessness -classlessnesses -classmate -classmates -classroom -classrooms -classy -clast -clastic -clastics -clasts -clathrate -clathrates -clatter -clattered -clatterer -clatterers -clattering -clatteringly -clatters -clattery -claucht -claudication -claudications -claught -claughted -claughting -claughts -clausal -clause -clauses -claustra -claustral -claustrophobe -claustrophobes -claustrophobia -claustrophobias -claustrophobic -claustrophobically -claustrum -clavate -clave -claver -clavered -clavering -clavers -claves -clavi -clavichord -clavichordist -clavichordists -clavichords -clavicle -clavicles -clavicular -clavier -clavierist -clavieristic -clavierists -claviers -clavus -claw -clawed -clawer -clawers -clawhammer -clawing -clawless -clawlike -claws -claxon -claxons -clay -claybank -claybanks -clayed -clayey -clayier -clayiest -claying -clayish -claylike -claymore -claymores -claypan -claypans -clays -clayware -claywares -clean -cleanabilities -cleanability -cleanable -cleaned -cleaner -cleaners -cleanest -cleanhanded -cleaning -cleanlier -cleanliest -cleanliness -cleanlinesses -cleanly -cleanness -cleannesses -cleans -cleanse -cleansed -cleanser -cleansers -cleanses -cleansing -cleanup -cleanups -clear -clearable -clearance -clearances -cleared -clearer -clearers -clearest -clearheaded -clearheadedly -clearheadedness -clearheadednesses -clearing -clearinghouse -clearinghouses -clearings -clearly -clearness -clearnesses -clears -clearstories -clearstory -clearwing -clearwings -cleat -cleated -cleating -cleats -cleavable -cleavage -cleavages -cleave -cleaved -cleaver -cleavers -cleaves -cleaving -cleek -cleeked -cleeking -cleeks -clef -clefs -cleft -clefted -clefting -clefts -cleidoic -cleistogamic -cleistogamies -cleistogamous -cleistogamously -cleistogamy -clematis -clematises -clemencies -clemency -clement -clemently -clench -clenched -clencher -clenchers -clenches -clenching -cleome -cleomes -clepe -cleped -clepes -cleping -clepsydra -clepsydrae -clepsydras -clept -clerestories -clerestory -clergies -clergy -clergyman -clergymen -clergywoman -clergywomen -cleric -clerical -clericalism -clericalisms -clericalist -clericalists -clerically -clericals -clerics -clerid -clerids -clerihew -clerihews -clerisies -clerisy -clerk -clerkdom -clerkdoms -clerked -clerking -clerkish -clerklier -clerkliest -clerkly -clerks -clerkship -clerkships -cleveite -cleveites -clever -cleverer -cleverest -cleverish -cleverly -cleverness -clevernesses -clevis -clevises -clew -clewed -clewing -clews -cliche -cliched -cliches -click -clicked -clicker -clickers -clicking -clicks -client -clientage -clientages -cliental -clientele -clienteles -clientless -clients -cliff -cliffhanger -cliffhangers -cliffier -cliffiest -cliffs -cliffy -clift -clifts -climacteric -climacterics -climactic -climactically -climatal -climate -climates -climatic -climatically -climatological -climatologically -climatologies -climatologist -climatologists -climatology -climax -climaxed -climaxes -climaxing -climaxless -climb -climbable -climbed -climber -climbers -climbing -climbs -clime -climes -clinal -clinally -clinch -clinched -clincher -clinchers -clinches -clinching -clinchingly -cline -clines -cling -clinged -clinger -clingers -clingier -clingiest -clinging -clings -clingstone -clingstones -clingy -clinic -clinical -clinically -clinician -clinicians -clinicopathologic -clinicopathological -clinicopathologically -clinics -clink -clinked -clinker -clinkered -clinkering -clinkers -clinking -clinks -clinometer -clinometers -clinquant -clinquants -clintonia -clintonias -cliometric -cliometrician -cliometricians -cliometrics -clip -clipboard -clipboards -clipped -clipper -clippers -clipping -clippings -clips -clipsheet -clipsheets -clipt -clique -cliqued -cliques -cliquey -cliquier -cliquiest -cliquing -cliquish -cliquishly -cliquishness -cliquishnesses -cliquy -clit -clitella -clitellum -clitic -clitics -clitoral -clitorectomies -clitorectomy -clitoric -clitoridectomies -clitoridectomy -clitorides -clitoris -clitorises -clits -clivers -clivia -clivias -cloaca -cloacae -cloacal -cloacas -cloak -cloaked -cloaking -cloakroom -cloakrooms -cloaks -clobber -clobbered -clobbering -clobbers -clochard -clochards -cloche -cloches -clock -clocked -clocker -clockers -clocking -clocklike -clocks -clockwise -clockwork -clockworks -clod -cloddier -cloddiest -cloddish -cloddishness -cloddishnesses -cloddy -clodhopper -clodhoppers -clodhopping -clodpate -clodpates -clodpole -clodpoles -clodpoll -clodpolls -clods -clofibrate -clofibrates -clog -clogged -clogger -cloggers -cloggier -cloggiest -clogging -cloggy -clogs -cloisonne -cloisonnes -cloister -cloistered -cloistering -cloisters -cloistral -cloistress -cloistresses -clomb -clomiphene -clomiphenes -clomp -clomped -clomping -clomps -clon -clonal -clonally -clone -cloned -cloner -cloners -clones -clonic -clonicities -clonicity -clonidine -clonidines -cloning -clonings -clonism -clonisms -clonk -clonked -clonking -clonks -clons -clonus -clonuses -cloot -cloots -clop -clopped -clopping -clops -cloque -cloques -closable -close -closeable -closed -closedown -closedowns -closefisted -closely -closemouthed -closeness -closenesses -closeout -closeouts -closer -closers -closes -closest -closestool -closestools -closet -closeted -closetful -closetfuls -closeting -closets -closeup -closeups -closing -closings -clostridia -clostridial -clostridium -closure -closured -closures -closuring -clot -cloth -clothbound -clothe -clothed -clothes -clotheshorse -clotheshorses -clothesline -clotheslined -clotheslines -clotheslining -clothespin -clothespins -clothespress -clothespresses -clothier -clothiers -clothing -clothings -cloths -clots -clotted -clotting -clotty -cloture -clotured -clotures -cloturing -cloud -cloudberries -cloudberry -cloudburst -cloudbursts -clouded -cloudier -cloudiest -cloudily -cloudiness -cloudinesses -clouding -cloudland -cloudlands -cloudless -cloudlessly -cloudlessness -cloudlessnesses -cloudlet -cloudlets -clouds -cloudscape -cloudscapes -cloudy -clough -cloughs -clour -cloured -clouring -clours -clout -clouted -clouter -clouters -clouting -clouts -clove -cloven -clover -cloverleaf -cloverleafs -cloverleaves -clovers -cloves -clowder -clowders -clown -clowned -clowneries -clownery -clowning -clownish -clownishly -clownishness -clownishnesses -clowns -cloxacillin -cloxacillins -cloy -cloyed -cloying -cloyingly -cloys -cloze -clozes -club -clubable -clubbable -clubbed -clubber -clubbers -clubbier -clubbiest -clubbiness -clubbinesses -clubbing -clubbish -clubby -clubfeet -clubfoot -clubfooted -clubhand -clubhands -clubhaul -clubhauled -clubhauling -clubhauls -clubhouse -clubhouses -clubman -clubmen -clubroom -clubrooms -clubroot -clubroots -clubs -cluck -clucked -clucking -clucks -clue -clued -clueing -clueless -clues -cluing -clumber -clumbers -clump -clumped -clumpier -clumpiest -clumping -clumpish -clumps -clumpy -clumsier -clumsiest -clumsily -clumsiness -clumsinesses -clumsy -clung -clunk -clunked -clunker -clunkers -clunkier -clunkiest -clunking -clunks -clunky -clupeid -clupeids -clupeoid -clupeoids -cluster -clustered -clustering -clusters -clustery -clutch -clutched -clutches -clutching -clutchy -clutter -cluttered -cluttering -clutters -cluttery -clypeal -clypeate -clypei -clypeus -clyster -clysters -cnidarian -cnidarians -coacervate -coacervates -coacervation -coacervations -coach -coachable -coached -coacher -coachers -coaches -coaching -coachman -coachmen -coachwork -coachworks -coact -coacted -coacting -coaction -coactions -coactive -coactor -coactors -coacts -coadaptation -coadaptations -coadapted -coadjutor -coadjutors -coadjutrices -coadjutrix -coadministration -coadministrations -coadmire -coadmired -coadmires -coadmiring -coadmit -coadmits -coadmitted -coadmitting -coaeval -coaevals -coagencies -coagency -coagent -coagents -coagula -coagulabilities -coagulability -coagulable -coagulant -coagulants -coagulase -coagulases -coagulate -coagulated -coagulates -coagulating -coagulation -coagulations -coagulum -coagulums -coal -coala -coalas -coalbin -coalbins -coalbox -coalboxes -coaled -coaler -coalers -coalesce -coalesced -coalescence -coalescences -coalescent -coalesces -coalescing -coalfield -coalfields -coalfish -coalfishes -coalhole -coalholes -coalier -coaliest -coalification -coalifications -coalified -coalifies -coalify -coalifying -coaling -coalition -coalitionist -coalitionists -coalitions -coalless -coalpit -coalpits -coals -coalsack -coalsacks -coalshed -coalsheds -coaly -coalyard -coalyards -coaming -coamings -coanchor -coanchored -coanchoring -coanchors -coannex -coannexed -coannexes -coannexing -coappear -coappeared -coappearing -coappears -coapt -coaptation -coaptations -coapted -coapting -coapts -coarctation -coarctations -coarse -coarsely -coarsen -coarsened -coarseness -coarsenesses -coarsening -coarsens -coarser -coarsest -coassist -coassisted -coassisting -coassists -coassume -coassumed -coassumes -coassuming -coast -coastal -coasted -coaster -coasters -coastguard -coastguardman -coastguardmen -coastguards -coastguardsman -coastguardsmen -coasting -coastings -coastland -coastlands -coastline -coastlines -coasts -coastward -coastwards -coastwise -coat -coatdress -coatdresses -coated -coatee -coatees -coater -coaters -coati -coatimundi -coatimundis -coating -coatings -coatis -coatless -coatrack -coatracks -coatroom -coatrooms -coats -coattail -coattails -coattend -coattended -coattending -coattends -coattest -coattested -coattesting -coattests -coauthor -coauthored -coauthoring -coauthors -coauthorship -coauthorships -coax -coaxal -coaxed -coaxer -coaxers -coaxes -coaxial -coaxially -coaxing -cob -cobalamin -cobalamins -cobalt -cobaltic -cobaltine -cobaltines -cobaltite -cobaltites -cobaltous -cobalts -cobb -cobber -cobbers -cobbier -cobbiest -cobble -cobbled -cobbler -cobblers -cobbles -cobblestone -cobblestoned -cobblestones -cobbling -cobbs -cobby -cobelligerent -cobelligerents -cobia -cobias -coble -cobles -cobnut -cobnuts -cobra -cobras -cobs -cobweb -cobwebbed -cobwebbier -cobwebbiest -cobwebbing -cobwebby -cobwebs -coca -cocain -cocaine -cocaines -cocainization -cocainizations -cocainize -cocainized -cocainizes -cocainizing -cocains -cocaptain -cocaptained -cocaptaining -cocaptains -cocarboxylase -cocarboxylases -cocarcinogen -cocarcinogenic -cocarcinogens -cocas -cocatalyst -cocatalysts -coccal -cocci -coccic -coccid -coccidia -coccidioidomycoses -coccidioidomycosis -coccidioses -coccidiosis -coccidium -coccids -coccoid -coccoids -coccous -coccus -coccygeal -coccyges -coccyx -coccyxes -cochair -cochaired -cochairing -cochairman -cochairmen -cochairperson -cochairpersons -cochairs -cochairwoman -cochairwomen -cochampion -cochampions -cochin -cochineal -cochineals -cochins -cochlea -cochleae -cochlear -cochleas -cocinera -cocineras -cock -cockade -cockaded -cockades -cockalorum -cockalorums -cockamamie -cockamamy -cockapoo -cockapoos -cockatiel -cockatiels -cockatoo -cockatoos -cockatrice -cockatrices -cockbill -cockbilled -cockbilling -cockbills -cockboat -cockboats -cockchafer -cockchafers -cockcrow -cockcrows -cocked -cocker -cockered -cockerel -cockerels -cockering -cockers -cockeye -cockeyed -cockeyedly -cockeyedness -cockeyednesses -cockeyes -cockfight -cockfighting -cockfightings -cockfights -cockhorse -cockhorses -cockier -cockiest -cockily -cockiness -cockinesses -cocking -cockish -cockle -cocklebur -cockleburs -cockled -cockles -cockleshell -cockleshells -cocklike -cockling -cockloft -cocklofts -cockney -cockneyfied -cockneyfies -cockneyfy -cockneyfying -cockneyish -cockneyism -cockneyisms -cockneys -cockpit -cockpits -cockroach -cockroaches -cocks -cockscomb -cockscombs -cocksfoot -cocksfoots -cockshies -cockshut -cockshuts -cockshy -cockspur -cockspurs -cocksucker -cocksuckers -cocksure -cocksurely -cocksureness -cocksurenesses -cocktail -cocktailed -cocktailing -cocktails -cockup -cockups -cocky -coco -cocoa -cocoanut -cocoanuts -cocoas -cocobola -cocobolas -cocobolo -cocobolos -cocomat -cocomats -cocomposer -cocomposers -coconspirator -coconspirators -coconut -coconuts -cocoon -cocooned -cocooning -cocoonings -cocoons -cocos -cocotte -cocottes -cocounsel -cocounseled -cocounseling -cocounselled -cocounselling -cocounsels -cocoyam -cocoyams -cocreate -cocreated -cocreates -cocreating -cocreator -cocreators -cocultivate -cocultivated -cocultivates -cocultivating -cocultivation -cocultivations -coculture -cocultured -cocultures -coculturing -cocurator -cocurators -cocurricular -cod -coda -codable -codas -codded -codder -codders -codding -coddle -coddled -coddler -coddlers -coddles -coddling -code -codebook -codebooks -codebtor -codebtors -codec -codecs -coded -codefendant -codefendants -codeia -codeias -codein -codeina -codeinas -codeine -codeines -codeins -codeless -coden -codens -codependence -codependences -codependencies -codependency -codependent -codependents -coder -coderive -coderived -coderives -coderiving -coders -codes -codesign -codesigned -codesigning -codesigns -codetermination -codeterminations -codevelop -codeveloped -codeveloper -codevelopers -codeveloping -codevelops -codex -codfish -codfishes -codger -codgers -codices -codicil -codicillary -codicils -codicological -codicologies -codicology -codifiabilities -codifiability -codification -codifications -codified -codifier -codifiers -codifies -codify -codifying -coding -codirect -codirected -codirecting -codirection -codirections -codirector -codirectors -codirects -codiscover -codiscovered -codiscoverer -codiscoverers -codiscovering -codiscovers -codlin -codling -codlings -codlins -codominant -codominants -codon -codons -codpiece -codpieces -codrive -codriven -codriver -codrivers -codrives -codriving -codrove -cods -codswallop -codswallops -coed -coedit -coedited -coediting -coeditor -coeditors -coedits -coeds -coeducation -coeducational -coeducationally -coeducations -coeffect -coeffects -coefficient -coefficients -coelacanth -coelacanths -coelentera -coelenterate -coelenterates -coelenteron -coeliac -coelom -coelomata -coelomate -coelomates -coelome -coelomes -coelomic -coeloms -coembodied -coembodies -coembody -coembodying -coemploy -coemployed -coemploying -coemploys -coempt -coempted -coempting -coempts -coenact -coenacted -coenacting -coenacts -coenamor -coenamored -coenamoring -coenamors -coendure -coendured -coendures -coenduring -coenobite -coenobites -coenocyte -coenocytes -coenocytic -coenure -coenures -coenuri -coenurus -coenzymatic -coenzymatically -coenzyme -coenzymes -coequal -coequalities -coequality -coequally -coequals -coequate -coequated -coequates -coequating -coerce -coerced -coercer -coercers -coerces -coercible -coercing -coercion -coercions -coercive -coercively -coerciveness -coercivenesses -coercivities -coercivity -coerect -coerected -coerecting -coerects -coesite -coesites -coetaneous -coeternal -coeval -coevalities -coevality -coevally -coevals -coevolution -coevolutionary -coevolutions -coevolve -coevolved -coevolves -coevolving -coexecutor -coexecutors -coexert -coexerted -coexerting -coexerts -coexist -coexisted -coexistence -coexistences -coexistent -coexisting -coexists -coextend -coextended -coextending -coextends -coextensive -coextensively -cofactor -cofactors -cofavorite -cofavorites -cofeature -cofeatured -cofeatures -cofeaturing -coff -coffee -coffeecake -coffeecakes -coffeehouse -coffeehouses -coffeemaker -coffeemakers -coffeepot -coffeepots -coffees -coffer -cofferdam -cofferdams -coffered -coffering -coffers -coffin -coffined -coffing -coffining -coffins -coffle -coffled -coffles -coffling -coffret -coffrets -coffs -cofinance -cofinanced -cofinances -cofinancing -cofound -cofounded -cofounder -cofounders -cofounding -cofounds -coft -cofunction -cofunctions -cog -cogencies -cogency -cogeneration -cogenerations -cogenerator -cogenerators -cogent -cogently -cogged -cogging -cogitable -cogitate -cogitated -cogitates -cogitating -cogitation -cogitations -cogitative -cogito -cogitos -cognac -cognacs -cognate -cognately -cognates -cognation -cognations -cognise -cognised -cognises -cognising -cognition -cognitional -cognitions -cognitive -cognitively -cognizable -cognizably -cognizance -cognizances -cognizant -cognize -cognized -cognizer -cognizers -cognizes -cognizing -cognomen -cognomens -cognomina -cognominal -cognoscente -cognoscenti -cognoscible -cognovit -cognovits -cogon -cogons -cogs -cogway -cogways -cogwheel -cogwheels -cohabit -cohabitant -cohabitants -cohabitation -cohabitations -cohabited -cohabiting -cohabits -cohead -coheaded -coheading -coheads -coheir -coheiress -coheiresses -coheirs -cohere -cohered -coherence -coherences -coherencies -coherency -coherent -coherently -coherer -coherers -coheres -cohering -cohesion -cohesionless -cohesions -cohesive -cohesively -cohesiveness -cohesivenesses -coho -cohobate -cohobated -cohobates -cohobating -cohog -cohogs -coholder -coholders -cohomological -cohomologies -cohomology -cohort -cohorts -cohos -cohosh -cohoshes -cohost -cohosted -cohostess -cohostessed -cohostesses -cohostessing -cohosting -cohosts -cohune -cohunes -coif -coifed -coiffe -coiffed -coiffes -coiffeur -coiffeurs -coiffeuse -coiffeuses -coiffing -coiffure -coiffured -coiffures -coiffuring -coifing -coifs -coign -coigne -coigned -coignes -coigning -coigns -coil -coilabilities -coilability -coiled -coiler -coilers -coiling -coils -coin -coinable -coinage -coinages -coincide -coincided -coincidence -coincidences -coincident -coincidental -coincidentally -coincidently -coincides -coinciding -coined -coiner -coiners -coinfer -coinferred -coinferring -coinfers -coinhere -coinhered -coinheres -coinhering -coining -coinmate -coinmates -coins -coinsurance -coinsurances -coinsure -coinsured -coinsurer -coinsurers -coinsures -coinsuring -cointer -cointerred -cointerring -cointers -coinvent -coinvented -coinventing -coinventor -coinventors -coinvents -coinvestigator -coinvestigators -coinvestor -coinvestors -coir -coirs -coistrel -coistrels -coistril -coistrils -coital -coitally -coition -coitional -coitions -coitus -coituses -cojoin -cojoined -cojoining -cojoins -cojones -coke -coked -cokehead -cokeheads -cokes -coking -col -cola -colander -colanders -colas -colatitude -colatitudes -colcannon -colcannons -colchicine -colchicines -colchicum -colchicums -cold -coldblood -coldblooded -coldcock -coldcocked -coldcocking -coldcocks -colder -coldest -coldhearted -coldheartedly -coldheartedness -coldheartednesses -coldish -coldly -coldness -coldnesses -colds -cole -colead -coleader -coleaders -coleading -coleads -coled -colemanite -colemanites -coleoptera -coleopteran -coleopterans -coleopterist -coleopterists -coleopterous -coleoptile -coleoptiles -coleorhiza -coleorhizae -coles -coleseed -coleseeds -coleslaw -coleslaws -colessee -colessees -colessor -colessors -coleus -coleuses -colewort -coleworts -colic -colicin -colicine -colicines -colicins -colicky -colicroot -colicroots -colics -colies -coliform -coliforms -colin -colinear -colinearities -colinearity -colins -coliphage -coliphages -coliseum -coliseums -colistin -colistins -colitic -colitis -colitises -collaborate -collaborated -collaborates -collaborating -collaboration -collaborationism -collaborationisms -collaborationist -collaborationists -collaborations -collaborative -collaboratively -collaboratives -collaborator -collaborators -collage -collaged -collagen -collagenase -collagenases -collagenous -collagens -collages -collaging -collagist -collagists -collapse -collapsed -collapses -collapsibilities -collapsibility -collapsible -collapsing -collar -collarbone -collarbones -collard -collards -collared -collaret -collarets -collaring -collarless -collars -collate -collated -collateral -collateralities -collaterality -collateralize -collateralized -collateralizes -collateralizing -collaterally -collaterals -collates -collating -collation -collations -collator -collators -colleague -colleagues -colleagueship -colleagueships -collect -collectable -collectables -collectanea -collected -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 -collector -collectors -collectorship -collectorships -collects -colleen -colleens -college -colleger -collegers -colleges -collegia -collegial -collegialities -collegiality -collegially -collegian -collegians -collegiate -collegiately -collegium -collegiums -collembolan -collembolans -collembolous -collenchyma -collenchymas -collenchymata -collenchymatous -collet -colleted -colleting -collets -collide -collided -collider -colliders -collides -colliding -collie -collied -collier -collieries -colliers -colliery -collies -collieshangie -collieshangies -colligate -colligated -colligates -colligating -colligation -colligations -colligative -collimate -collimated -collimates -collimating -collimation -collimations -collimator -collimators -collinear -collinearities -collinearity -collins -collinses -collision -collisional -collisionally -collisions -collocate -collocated -collocates -collocating -collocation -collocational -collocations -collodion -collodions -collogue -collogued -collogues -colloguing -colloid -colloidal -colloidally -colloids -collop -collops -colloquia -colloquial -colloquialism -colloquialisms -colloquialities -colloquiality -colloquially -colloquials -colloquies -colloquist -colloquists -colloquium -colloquiums -colloquy -collotype -collotypes -collude -colluded -colluder -colluders -colludes -colluding -collusion -collusions -collusive -collusively -colluvia -colluvial -colluvium -colluviums -colly -collying -collyria -collyrium -collyriums -collywobbles -colobi -coloboma -colobomata -colobus -colobuses -colocate -colocated -colocates -colocating -colocynth -colocynths -colog -cologarithm -cologarithms -cologne -cologned -colognes -cologs -colon -colone -colonel -colonelcies -colonelcy -colonels -colones -coloni -colonial -colonialism -colonialisms -colonialist -colonialistic -colonialists -colonialize -colonialized -colonializes -colonializing -colonially -colonialness -colonialnesses -colonials -colonic -colonics -colonies -colonisation -colonisations -colonise -colonised -colonises -colonising -colonist -colonists -colonization -colonizationist -colonizationists -colonizations -colonize -colonized -colonizer -colonizers -colonizes -colonizing -colonnade -colonnaded -colonnades -colons -colonus -colony -colophon -colophonies -colophons -colophony -color -colorable -colorably -colorado -colorant -colorants -coloration -colorations -coloratura -coloraturas -colorblind -colorblindness -colorblindnesses -colorbred -colorectal -colored -coloreds -colorer -colorers -colorfast -colorfastness -colorfastnesses -colorful -colorfully -colorfulness -colorfulnesses -colorific -colorimeter -colorimeters -colorimetric -colorimetrically -colorimetries -colorimetry -coloring -colorings -colorism -colorisms -colorist -coloristic -coloristically -colorists -colorization -colorizations -colorize -colorized -colorizes -colorizing -colorless -colorlessly -colorlessness -colorlessnesses -colorman -colormen -colorpoint -colorpoints -colors -colossal -colossally -colosseum -colosseums -colossi -colossus -colossuses -colostomies -colostomy -colostral -colostrum -colostrums -colotomies -colotomy -colour -coloured -colourer -colourers -colouring -colours -colpitis -colpitises -colportage -colportages -colporteur -colporteurs -cols -colt -colter -colters -coltish -coltishly -coltishness -coltishnesses -colts -coltsfoot -coltsfoots -colubrid -colubrids -colubrine -colugo -colugos -columbaria -columbarium -columbic -columbine -columbines -columbite -columbites -columbium -columbiums -columel -columella -columellae -columellar -columels -column -columnal -columnar -columned -columniation -columniations -columnist -columnistic -columnists -columns -colure -colures -coly -colza -colzas -coma -comade -comae -comake -comaker -comakers -comakes -comaking -comal -comanage -comanaged -comanagement -comanagements -comanager -comanagers -comanages -comanaging -comas -comate -comates -comatic -comatik -comatiks -comatose -comatula -comatulae -comb -combat -combatant -combatants -combated -combater -combaters -combating -combative -combatively -combativeness -combativenesses -combats -combatted -combatting -combe -combed -comber -combers -combes -combinable -combination -combinational -combinations -combinative -combinatorial -combinatorially -combinatorics -combinatory -combine -combined -combiner -combiners -combines -combing -combings -combining -comblike -combo -combos -combs -combust -combusted -combustibilities -combustibility -combustible -combustibles -combustibly -combusting -combustion -combustions -combustive -combustor -combustors -combusts -come -comeback -comebacks -comedian -comedians -comedic -comedically -comedienne -comediennes -comedies -comedo -comedones -comedos -comedown -comedowns -comedy -comelier -comeliest -comelily -comeliness -comelinesses -comely -comember -comembers -comer -comers -comes -comestible -comestibles -comet -cometary -cometh -comether -comethers -cometic -comets -comeuppance -comeuppances -comfier -comfiest -comfit -comfits -comfort -comfortable -comfortableness -comfortablenesses -comfortably -comforted -comforter -comforters -comforting -comfortingly -comfortless -comforts -comfrey -comfreys -comfy -comic -comical -comicalities -comicality -comically -comics -coming -comingle -comingled -comingles -comingling -comings -comitia -comitial -comities -comity -comix -comma -command -commandable -commandant -commandants -commanded -commandeer -commandeered -commandeering -commandeers -commander -commanderies -commanders -commandership -commanderships -commandery -commanding -commandingly -commandment -commandments -commando -commandoes -commandos -commands -commas -commata -commemorate -commemorated -commemorates -commemorating -commemoration -commemorations -commemorative -commemoratively -commemoratives -commemorator -commemorators -commence -commenced -commencement -commencements -commencer -commencers -commences -commencing -commend -commendable -commendably -commendation -commendations -commendatory -commended -commender -commenders -commending -commends -commensal -commensalism -commensalisms -commensally -commensals -commensurabilities -commensurability -commensurable -commensurably -commensurate -commensurately -commensuration -commensurations -comment -commentaries -commentary -commentate -commentated -commentates -commentating -commentator -commentators -commented -commenting -comments -commerce -commerced -commerces -commercial -commercialise -commercialised -commercialises -commercialising -commercialism -commercialisms -commercialist -commercialistic -commercialists -commercialities -commerciality -commercialization -commercializations -commercialize -commercialized -commercializes -commercializing -commercially -commercials -commercing -commie -commies -commination -comminations -comminatory -commingle -commingled -commingles -commingling -comminute -comminuted -comminutes -comminuting -comminution -comminutions -commiserate -commiserated -commiserates -commiserating -commiseratingly -commiseration -commiserations -commiserative -commissar -commissarial -commissariat -commissariats -commissaries -commissars -commissary -commission -commissionaire -commissionaires -commissioned -commissioner -commissioners -commissionership -commissionerships -commissioning -commissions -commissural -commissure -commissures -commit -commitment -commitments -commits -committable -committal -committals -committed -committee -committeeman -committeemen -committees -committeewoman -committeewomen -committing -commix -commixed -commixes -commixing -commixt -commixture -commixtures -commode -commodes -commodification -commodifications -commodified -commodifies -commodify -commodifying -commodious -commodiously -commodiousness -commodiousnesses -commodities -commodity -commodore -commodores -common -commonage -commonages -commonalities -commonality -commonalties -commonalty -commoner -commoners -commonest -commonly -commonness -commonnesses -commonplace -commonplaceness -commonplacenesses -commonplaces -commons -commonsense -commonsensible -commonsensical -commonsensically -commonweal -commonweals -commonwealth -commonwealths -commotion -commotions -commove -commoved -commoves -commoving -communal -communalism -communalisms -communalist -communalists -communalities -communality -communalize -communalized -communalizes -communalizing -communally -communard -communards -commune -communed -communes -communicabilities -communicability -communicable -communicableness -communicablenesses -communicably -communicant -communicants -communicate -communicated -communicatee -communicatees -communicates -communicating -communication -communicational -communications -communicative -communicatively -communicativeness -communicativenesses -communicator -communicators -communicatory -communing -communion -communions -communique -communiques -communise -communised -communises -communising -communism -communisms -communist -communistic -communistically -communists -communitarian -communitarianism -communitarianisms -communitarians -communities -community -communization -communizations -communize -communized -communizes -communizing -commutable -commutate -commutated -commutates -commutating -commutation -commutations -commutative -commutativities -commutativity -commutator -commutators -commute -commuted -commuter -commuters -commutes -commuting -commy -comonomer -comonomers -comose -comous -comp -compact -compacted -compacter -compacters -compactest -compactible -compacting -compaction -compactions -compactly -compactness -compactnesses -compactor -compactors -compacts -compadre -compadres -companied -companies -companion -companionabilities -companionability -companionable -companionableness -companionablenesses -companionably -companionate -companioned -companioning -companions -companionship -companionships -companionway -companionways -company -companying -comparabilities -comparability -comparable -comparableness -comparablenesses -comparably -comparatist -comparatists -comparative -comparatively -comparativeness -comparativenesses -comparatives -comparativist -comparativists -comparator -comparators -compare -compared -comparer -comparers -compares -comparing -comparison -comparisons -compart -comparted -comparting -compartment -compartmental -compartmentalise -compartmentalised -compartmentalises -compartmentalising -compartmentalization -compartmentalizations -compartmentalize -compartmentalized -compartmentalizes -compartmentalizing -compartmentation -compartmentations -compartmented -compartmenting -compartments -comparts -compass -compassable -compassed -compasses -compassing -compassion -compassionate -compassionated -compassionately -compassionateness -compassionatenesses -compassionates -compassionating -compassionless -compassions -compatibilities -compatibility -compatible -compatibleness -compatiblenesses -compatibles -compatibly -compatriot -compatriotic -compatriots -comped -compeer -compeered -compeering -compeers -compel -compellable -compellation -compellations -compelled -compelling -compellingly -compels -compend -compendia -compendious -compendiously -compendiousness -compendiousnesses -compendium -compendiums -compends -compensabilities -compensability -compensable -compensate -compensated -compensates -compensating -compensation -compensational -compensations -compensative -compensator -compensators -compensatory -compere -compered -comperes -compering -compete -competed -competence -competences -competencies -competency -competent -competently -competes -competing -competition -competitions -competitive -competitively -competitiveness -competitivenesses -competitor -competitors -compilation -compilations -compile -compiled -compiler -compilers -compiles -compiling -comping -complacence -complacences -complacencies -complacency -complacent -complacently -complain -complainant -complainants -complained -complainer -complainers -complaining -complainingly -complains -complaint -complaints -complaisance -complaisances -complaisant -complaisantly -compleat -complect -complected -complecting -complects -complement -complemental -complementaries -complementarily -complementariness -complementarinesses -complementarities -complementarity -complementary -complementation -complementations -complemented -complementing -complementizer -complementizers -complements -complete -completed -completely -completeness -completenesses -completer -completes -completest -completing -completion -completions -completist -completists -completive -complex -complexation -complexations -complexed -complexer -complexes -complexest -complexified -complexifies -complexify -complexifying -complexing -complexion -complexional -complexioned -complexions -complexities -complexity -complexly -complexness -complexnesses -compliance -compliances -compliancies -compliancy -compliant -compliantly -complicacies -complicacy -complicate -complicated -complicatedly -complicatedness -complicatednesses -complicates -complicating -complication -complications -complice -complices -complicit -complicities -complicitous -complicity -complied -complier -compliers -complies -compliment -complimentarily -complimentary -complimented -complimenting -compliments -complin -compline -complines -complins -complot -complots -complotted -complotting -comply -complying -compo -compone -component -componential -components -compony -comport -comported -comporting -comportment -comportments -comports -compos -compose -composed -composedly -composedness -composednesses -composer -composers -composes -composing -composite -composited -compositely -composites -compositing -composition -compositional -compositionally -compositions -compositor -compositors -compost -composted -composting -composts -composure -composures -compote -compotes -compound -compoundable -compounded -compounder -compounders -compounding -compounds -comprador -compradore -compradores -compradors -comprehend -comprehended -comprehendible -comprehending -comprehends -comprehensibilities -comprehensibility -comprehensible -comprehensibleness -comprehensiblenesses -comprehensibly -comprehension -comprehensions -comprehensive -comprehensively -comprehensiveness -comprehensivenesses -compress -compressed -compressedly -compresses -compressibilities -compressibility -compressible -compressing -compression -compressional -compressions -compressive -compressively -compressor -compressors -comprise -comprised -comprises -comprising -comprize -comprized -comprizes -comprizing -compromise -compromised -compromiser -compromisers -compromises -compromising -comps -compt -compted -compting -comptroller -comptrollers -comptrollership -comptrollerships -compts -compulsion -compulsions -compulsive -compulsively -compulsiveness -compulsivenesses -compulsives -compulsivities -compulsivity -compulsorily -compulsory -compunction -compunctions -compunctious -compurgation -compurgations -compurgator -compurgators -computabilities -computability -computable -computation -computational -computationally -computations -compute -computed -computer -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 -computers -computes -computing -comrade -comradeliness -comradelinesses -comradely -comraderies -comradery -comrades -comradeship -comradeships -comsymp -comsymps -comte -comtes -con -conation -conations -conative -conatus -concanavalin -concanavalins -concatenate -concatenated -concatenates -concatenating -concatenation -concatenations -concave -concaved -concaves -concaving -concavities -concavity -conceal -concealable -concealed -concealer -concealers -concealing -concealingly -concealment -concealments -conceals -concede -conceded -concededly -conceder -conceders -concedes -conceding -conceit -conceited -conceitedly -conceitedness -conceitednesses -conceiting -conceits -conceivabilities -conceivability -conceivable -conceivableness -conceivablenesses -conceivably -conceive -conceived -conceiver -conceivers -conceives -conceiving -concelebrant -concelebrants -concelebrate -concelebrated -concelebrates -concelebrating -concelebration -concelebrations -concent -concenter -concentered -concentering -concenters -concentrate -concentrated -concentratedly -concentrates -concentrating -concentration -concentrations -concentrative -concentrator -concentrators -concentric -concentrically -concentricities -concentricity -concents -concept -conceptacle -conceptacles -conception -conceptional -conceptions -conceptive -concepts -conceptual -conceptualise -conceptualised -conceptualises -conceptualising -conceptualism -conceptualisms -conceptualist -conceptualistic -conceptualistically -conceptualists -conceptualities -conceptuality -conceptualization -conceptualizations -conceptualize -conceptualized -conceptualizer -conceptualizers -conceptualizes -conceptualizing -conceptually -conceptus -conceptuses -concern -concerned -concerning -concernment -concernments -concerns -concert -concerted -concertedly -concertedness -concertednesses -concertgoer -concertgoers -concertgoing -concertgoings -concerti -concertina -concertinas -concerting -concertini -concertino -concertinos -concertize -concertized -concertizes -concertizing -concertmaster -concertmasters -concertmeister -concertmeisters -concerto -concertos -concerts -concession -concessionaire -concessionaires -concessional -concessionary -concessioner -concessioners -concessions -concessive -concessively -conch -concha -conchae -conchal -conches -conchie -conchies -conchoid -conchoidal -conchoidally -conchoids -conchologies -conchologist -conchologists -conchology -conchs -conchy -concierge -concierges -conciliar -conciliarly -conciliate -conciliated -conciliates -conciliating -conciliation -conciliations -conciliative -conciliator -conciliators -conciliatory -concinnities -concinnity -concise -concisely -conciseness -concisenesses -conciser -concisest -concision -concisions -conclave -conclaves -conclude -concluded -concluder -concluders -concludes -concluding -conclusion -conclusionary -conclusions -conclusive -conclusively -conclusiveness -conclusivenesses -conclusory -concoct -concocted -concocter -concocters -concocting -concoction -concoctions -concoctive -concocts -concomitance -concomitances -concomitant -concomitantly -concomitants -concord -concordance -concordances -concordant -concordantly -concordat -concordats -concords -concourse -concourses -concrescence -concrescences -concrescent -concrete -concreted -concretely -concreteness -concretenesses -concretes -concreting -concretion -concretionary -concretions -concretism -concretisms -concretist -concretists -concretization -concretizations -concretize -concretized -concretizes -concretizing -concubinage -concubinages -concubine -concubines -concupiscence -concupiscences -concupiscent -concupiscible -concur -concurred -concurrence -concurrences -concurrencies -concurrency -concurrent -concurrently -concurrents -concurring -concurs -concuss -concussed -concusses -concussing -concussion -concussions -concussive -condemn -condemnable -condemnation -condemnations -condemnatory -condemned -condemner -condemners -condemning -condemnor -condemnors -condemns -condensable -condensate -condensates -condensation -condensational -condensations -condense -condensed -condenser -condensers -condenses -condensible -condensing -condescend -condescended -condescendence -condescendences -condescending -condescendingly -condescends -condescension -condescensions -condign -condignly -condiment -condimental -condiments -condition -conditionable -conditional -conditionalities -conditionality -conditionally -conditionals -conditioned -conditioner -conditioners -conditioning -conditions -condo -condoes -condolatory -condole -condoled -condolence -condolences -condoler -condolers -condoles -condoling -condom -condominium -condominiums -condoms -condonable -condonation -condonations -condone -condoned -condoner -condoners -condones -condoning -condor -condores -condors -condos -condottiere -condottieri -conduce -conduced -conducer -conducers -conduces -conducing -conducive -conduciveness -conducivenesses -conduct -conductance -conductances -conducted -conductibilities -conductibility -conductible -conductimetric -conducting -conduction -conductions -conductive -conductivities -conductivity -conductometric -conductor -conductorial -conductors -conductress -conductresses -conducts -conduit -conduits -conduplicate -condylar -condyle -condyles -condyloid -condyloma -condylomas -condylomata -condylomatous -cone -coned -coneflower -coneflowers -conelrad -conelrads -conenose -conenoses -conepate -conepates -conepatl -conepatls -cones -coney -coneys -confab -confabbed -confabbing -confabs -confabulate -confabulated -confabulates -confabulating -confabulation -confabulations -confabulator -confabulators -confabulatory -confect -confected -confecting -confection -confectionaries -confectionary -confectioner -confectioneries -confectioners -confectionery -confections -confects -confederacies -confederacy -confederal -confederate -confederated -confederates -confederating -confederation -confederations -confederative -confer -conferee -conferees -conference -conferences -conferencing -conferencings -conferential -conferment -conferments -conferrable -conferral -conferrals -conferred -conferrence -conferrences -conferrer -conferrers -conferring -confers -conferva -confervae -confervas -confess -confessable -confessed -confessedly -confesses -confessing -confession -confessional -confessionalism -confessionalisms -confessionalist -confessionalists -confessionally -confessionals -confessions -confessor -confessors -confetti -confetto -confidant -confidante -confidantes -confidants -confide -confided -confidence -confidences -confident -confidential -confidentialities -confidentiality -confidentially -confidently -confider -confiders -confides -confiding -confidingly -confidingness -confidingnesses -configuration -configurational -configurationally -configurations -configurative -configure -configured -configures -configuring -confine -confined -confinement -confinements -confiner -confiners -confines -confining -confirm -confirmabilities -confirmability -confirmable -confirmand -confirmands -confirmation -confirmational -confirmations -confirmatory -confirmed -confirmedly -confirmedness -confirmednesses -confirming -confirms -confiscable -confiscatable -confiscate -confiscated -confiscates -confiscating -confiscation -confiscations -confiscator -confiscators -confiscatory -confit -confiteor -confiteors -confits -confiture -confitures -conflagrant -conflagration -conflagrations -conflate -conflated -conflates -conflating -conflation -conflations -conflict -conflicted -conflictful -conflicting -conflictingly -confliction -conflictions -conflictive -conflicts -conflictual -confluence -confluences -confluent -confluents -conflux -confluxes -confocal -confocally -conform -conformable -conformably -conformal -conformance -conformances -conformation -conformational -conformations -conformed -conformer -conformers -conforming -conformism -conformisms -conformist -conformists -conformities -conformity -conforms -confound -confounded -confoundedly -confounder -confounders -confounding -confoundingly -confounds -confraternities -confraternity -confrere -confreres -confront -confrontal -confrontals -confrontation -confrontational -confrontationist -confrontationists -confrontations -confronted -confronter -confronters -confronting -confronts -confuse -confused -confusedly -confusedness -confusednesses -confuses -confusing -confusingly -confusion -confusional -confusions -confutation -confutations -confutative -confute -confuted -confuter -confuters -confutes -confuting -conga -congaed -congaing -congas -conge -congeal -congealed -congealing -congealment -congealments -congeals -congee -congeed -congeeing -congees -congelation -congelations -congener -congeneric -congenerous -congeners -congenial -congenialities -congeniality -congenially -congenital -congenitally -conger -congeries -congers -conges -congest -congested -congesting -congestion -congestions -congestive -congests -congii -congius -conglobate -conglobated -conglobates -conglobating -conglobation -conglobations -conglobe -conglobed -conglobes -conglobing -conglomerate -conglomerated -conglomerates -conglomerateur -conglomerateurs -conglomeratic -conglomerating -conglomeration -conglomerations -conglomerative -conglomerator -conglomerators -conglutinate -conglutinated -conglutinates -conglutinating -conglutination -conglutinations -congo -congoes -congos -congou -congous -congrats -congratulate -congratulated -congratulates -congratulating -congratulation -congratulations -congratulator -congratulators -congratulatory -congregant -congregants -congregate -congregated -congregates -congregating -congregation -congregational -congregationalism -congregationalisms -congregationalist -congregationalists -congregations -congregator -congregators -congress -congressed -congresses -congressing -congressional -congressionally -congressman -congressmen -congresspeople -congressperson -congresspersons -congresswoman -congresswomen -congruence -congruences -congruencies -congruency -congruent -congruently -congruities -congruity -congruous -congruously -congruousness -congruousnesses -coni -conic -conical -conically -conicities -conicity -conics -conidia -conidial -conidian -conidiophore -conidiophores -conidium -conies -conifer -coniferous -conifers -coniine -coniines -conin -conine -conines -coning -conins -conioses -coniosis -conium -coniums -conjectural -conjecturally -conjecture -conjectured -conjecturer -conjecturers -conjectures -conjecturing -conjoin -conjoined -conjoining -conjoins -conjoint -conjointly -conjugal -conjugalities -conjugality -conjugally -conjugant -conjugants -conjugate -conjugated -conjugately -conjugateness -conjugatenesses -conjugates -conjugating -conjugation -conjugational -conjugationally -conjugations -conjunct -conjunction -conjunctional -conjunctionally -conjunctions -conjunctiva -conjunctivae -conjunctival -conjunctivas -conjunctive -conjunctively -conjunctives -conjunctivitis -conjunctivitises -conjuncts -conjuncture -conjunctures -conjuration -conjurations -conjure -conjured -conjurer -conjurers -conjures -conjuring -conjuror -conjurors -conk -conked -conker -conkers -conking -conks -conky -conn -connate -connately -connatural -connaturalities -connaturality -connaturally -connect -connectable -connected -connectedly -connectedness -connectednesses -connecter -connecters -connectible -connecting -connection -connectional -connections -connective -connectively -connectives -connectivities -connectivity -connector -connectors -connects -conned -conner -conners -connexion -connexions -conning -conniption -conniptions -connivance -connivances -connive -connived -connivent -conniver -connivers -connives -conniving -connoisseur -connoisseurs -connoisseurship -connoisseurships -connotation -connotational -connotations -connotative -connotatively -connote -connoted -connotes -connoting -conns -connubial -connubialism -connubialisms -connubialities -connubiality -connubially -conodont -conodonts -conoid -conoidal -conoids -conominee -conominees -conquer -conquered -conquering -conqueror -conquerors -conquers -conquest -conquests -conquian -conquians -conquistador -conquistadores -conquistadors -cons -consanguine -consanguineous -consanguineously -consanguinities -consanguinity -conscience -conscienceless -consciences -conscientious -conscientiously -conscientiousness -conscientiousnesses -conscionable -conscious -consciouses -consciously -consciousness -consciousnesses -conscribe -conscribed -conscribes -conscribing -conscript -conscripted -conscripting -conscription -conscriptions -conscripts -consecrate -consecrated -consecrates -consecrating -consecration -consecrations -consecrative -consecrator -consecrators -consecratory -consecution -consecutions -consecutive -consecutively -consecutiveness -consecutivenesses -consensual -consensually -consensus -consensuses -consent -consentaneous -consentaneously -consented -consenter -consenters -consenting -consentingly -consents -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 -conserve -conserved -conserver -conservers -conserves -conserving -consider -considerable -considerables -considerably -considerate -considerately -considerateness -consideratenesses -consideration -considerations -considered -considering -considers -consigliere -consiglieri -consign -consignable -consignation -consignations -consigned -consignee -consignees -consigning -consignment -consignments -consignor -consignors -consigns -consist -consisted -consistence -consistences -consistencies -consistency -consistent -consistently -consisting -consistorial -consistories -consistory -consists -consociate -consociated -consociates -consociating -consociation -consociational -consociations -consol -consolation -consolations -consolatory -console -consoled -consoler -consolers -consoles -consolidate -consolidated -consolidates -consolidating -consolidation -consolidations -consolidator -consolidators -consoling -consolingly -consols -consomme -consommes -consonance -consonances -consonancies -consonancy -consonant -consonantal -consonantly -consonants -consort -consorted -consortia -consorting -consortium -consortiums -consorts -conspecific -conspecifics -conspectus -conspectuses -conspicuities -conspicuity -conspicuous -conspicuously -conspicuousness -conspicuousnesses -conspiracies -conspiracy -conspiration -conspirational -conspirations -conspirator -conspiratorial -conspiratorially -conspirators -conspire -conspired -conspires -conspiring -constable -constables -constabularies -constabulary -constancies -constancy -constant -constantan -constantans -constantly -constants -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 -constrain -constrained -constrainedly -constraining -constrains -constraint -constraints -constrict -constricted -constricting -constriction -constrictions -constrictive -constrictor -constrictors -constricts -constringe -constringed -constringent -constringes -constringing -construable -construct -constructed -constructible -constructing -construction -constructional -constructionally -constructionist -constructionists -constructions -constructive -constructively -constructiveness -constructivenesses -constructivism -constructivisms -constructivist -constructivists -constructor -constructors -constructs -construe -construed -construes -construing -consubstantial -consubstantiation -consubstantiations -consuetude -consuetudes -consuetudinary -consul -consular -consulate -consulates -consuls -consulship -consulships -consult -consultancies -consultancy -consultant -consultants -consultantship -consultantships -consultation -consultations -consultative -consulted -consulter -consulters -consulting -consultive -consultor -consultors -consults -consumable -consumables -consume -consumed -consumedly -consumer -consumerism -consumerisms -consumerist -consumeristic -consumerists -consumers -consumership -consumerships -consumes -consuming -consummate -consummated -consummately -consummates -consummating -consummation -consummations -consummative -consummator -consummators -consummatory -consumption -consumptions -consumptive -consumptively -consumptives -contact -contacted -contactee -contactees -contacting -contacts -contagia -contagion -contagions -contagious -contagiously -contagiousness -contagiousnesses -contagium -contain -containable -contained -container -containerboard -containerboards -containerisation -containerisations -containerise -containerised -containerises -containerising -containerization -containerizations -containerize -containerized -containerizes -containerizing -containerless -containerport -containerports -containers -containership -containerships -containing -containment -containments -contains -contaminant -contaminants -contaminate -contaminated -contaminates -contaminating -contamination -contaminations -contaminative -contaminator -contaminators -conte -contemn -contemned -contemner -contemners -contemning -contemnor -contemnors -contemns -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 -contempt -contemptibilities -contemptibility -contemptible -contemptibleness -contemptiblenesses -contemptibly -contempts -contemptuous -contemptuously -contemptuousness -contemptuousnesses -contend -contended -contender -contenders -contending -contends -content -contented -contentedly -contentedness -contentednesses -contenting -contention -contentions -contentious -contentiously -contentiousness -contentiousnesses -contentment -contentments -contents -conterminous -conterminously -contes -contest -contestable -contestant -contestants -contestation -contestations -contested -contester -contesters -contesting -contests -context -contextless -contexts -contextual -contextualize -contextualized -contextualizes -contextualizing -contextually -contexture -contextures -contiguities -contiguity -contiguous -contiguously -contiguousness -contiguousnesses -continence -continences -continent -continental -continentally -continentals -continently -continents -contingence -contingences -contingencies -contingency -contingent -contingently -contingents -continua -continual -continually -continuance -continuances -continuant -continuants -continuate -continuation -continuations -continuative -continuator -continuators -continue -continued -continuer -continuers -continues -continuing -continuingly -continuities -continuity -continuo -continuos -continuous -continuously -continuousness -continuousnesses -continuum -continuums -conto -contort -contorted -contorting -contortion -contortionist -contortionistic -contortionists -contortions -contortive -contorts -contos -contour -contoured -contouring -contours -contra -contraband -contrabandist -contrabandists -contrabands -contrabass -contrabasses -contrabassist -contrabassists -contrabassoon -contrabassoons -contraception -contraceptions -contraceptive -contraceptives -contract -contracted -contractibilities -contractibility -contractible -contractile -contractilities -contractility -contracting -contraction -contractional -contractionary -contractions -contractive -contractor -contractors -contracts -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 -contrail -contrails -contraindicate -contraindicated -contraindicates -contraindicating -contraindication -contraindications -contralateral -contralto -contraltos -contraoctave -contraoctaves -contraposition -contrapositions -contrapositive -contrapositives -contraption -contraptions -contrapuntal -contrapuntally -contrapuntist -contrapuntists -contrarian -contrarians -contraries -contrarieties -contrariety -contrarily -contrariness -contrarinesses -contrarious -contrariwise -contrary -contras -contrast -contrastable -contrasted -contrasting -contrastive -contrastively -contrasts -contrasty -contravene -contravened -contravener -contraveners -contravenes -contravening -contravention -contraventions -contredanse -contredanses -contretemps -contribute -contributed -contributes -contributing -contribution -contributions -contributive -contributively -contributor -contributors -contributory -contrite -contritely -contriteness -contritenesses -contrition -contritions -contrivance -contrivances -contrive -contrived -contriver -contrivers -contrives -contriving -control -controllabilities -controllability -controllable -controlled -controller -controllers -controllership -controllerships -controlling -controlment -controlments -controls -controversial -controversialism -controversialisms -controversialist -controversialists -controversially -controversies -controversy -controvert -controverted -controverter -controverters -controvertible -controverting -controverts -contumacies -contumacious -contumaciously -contumacy -contumelies -contumelious -contumeliously -contumely -contuse -contused -contuses -contusing -contusion -contusions -conundrum -conundrums -conurbation -conurbations -conus -convalesce -convalesced -convalescence -convalescences -convalescent -convalescents -convalesces -convalescing -convect -convected -convecting -convection -convectional -convections -convective -convector -convectors -convects -convene -convened -convener -conveners -convenes -convenience -conveniences -conveniencies -conveniency -convenient -conveniently -convening -convenor -convenors -convent -convented -conventicle -conventicler -conventiclers -conventicles -conventing -convention -conventional -conventionalism -conventionalisms -conventionalist -conventionalists -conventionalities -conventionality -conventionalization -conventionalizations -conventionalize -conventionalized -conventionalizes -conventionalizing -conventionally -conventioneer -conventioneers -conventions -convents -conventual -conventually -conventuals -converge -converged -convergence -convergences -convergencies -convergency -convergent -converges -converging -conversable -conversance -conversances -conversancies -conversancy -conversant -conversation -conversational -conversationalist -conversationalists -conversationally -conversations -conversazione -conversaziones -conversazioni -converse -conversed -conversely -converser -conversers -converses -conversing -conversion -conversional -conversions -convert -convertaplane -convertaplanes -converted -converter -converters -convertibilities -convertibility -convertible -convertibleness -convertiblenesses -convertibles -convertibly -converting -convertiplane -convertiplanes -convertor -convertors -converts -convex -convexes -convexities -convexity -convexly -convey -conveyance -conveyancer -conveyancers -conveyances -conveyancing -conveyancings -conveyed -conveyer -conveyers -conveying -conveyor -conveyorise -conveyorised -conveyorises -conveyorising -conveyorization -conveyorizations -conveyorize -conveyorized -conveyorizes -conveyorizing -conveyors -conveys -convict -convicted -convicting -conviction -convictions -convicts -convince -convinced -convincer -convincers -convinces -convincing -convincingly -convincingness -convincingnesses -convivial -convivialities -conviviality -convivially -convocation -convocational -convocations -convoke -convoked -convoker -convokers -convokes -convoking -convolute -convoluted -convolutes -convoluting -convolution -convolutions -convolve -convolved -convolves -convolving -convolvuli -convolvulus -convolvuluses -convoy -convoyed -convoying -convoys -convulsant -convulsants -convulse -convulsed -convulses -convulsing -convulsion -convulsionary -convulsions -convulsive -convulsively -convulsiveness -convulsivenesses -cony -coo -cooch -cooches -coocoo -cooed -cooee -cooeed -cooeeing -cooees -cooer -cooers -cooey -cooeyed -cooeying -cooeys -coof -coofs -cooing -cooingly -cook -cookable -cookbook -cookbooks -cooked -cooker -cookeries -cookers -cookery -cookey -cookeys -cookhouse -cookhouses -cookie -cookies -cooking -cookings -cookless -cookoff -cookoffs -cookout -cookouts -cooks -cookshack -cookshacks -cookshop -cookshops -cookstove -cookstoves -cooktop -cooktops -cookware -cookwares -cooky -cool -coolant -coolants -cooldown -cooldowns -cooled -cooler -coolers -coolest -coolheaded -coolie -coolies -cooling -coolish -coolly -coolness -coolnesses -cools -coolth -coolths -cooly -coomb -coombe -coombes -coombs -coon -cooncan -cooncans -coonhound -coonhounds -coons -coonskin -coonskins -coontie -coonties -coop -cooped -cooper -cooperage -cooperages -cooperate -cooperated -cooperates -cooperating -cooperation -cooperationist -cooperationists -cooperations -cooperative -cooperatively -cooperativeness -cooperativenesses -cooperatives -cooperator -cooperators -coopered -cooperies -coopering -coopers -coopery -cooping -coops -coopt -coopted -coopting -cooption -cooptions -coopts -coordinate -coordinated -coordinately -coordinateness -coordinatenesses -coordinates -coordinating -coordination -coordinations -coordinative -coordinator -coordinators -coos -coot -cooter -cooters -cootie -cooties -coots -cop -copacetic -copaiba -copaibas -copal -copalm -copalms -copals -coparcenaries -coparcenary -coparcener -coparceners -coparent -coparents -copartner -copartnered -copartnering -copartners -copartnership -copartnerships -copasetic -copastor -copastors -copatron -copatrons -copayment -copayments -cope -copeck -copecks -coped -copemate -copemates -copen -copens -copepod -copepods -coper -copers -copes -copesetic -copestone -copestones -copied -copier -copiers -copies -copihue -copihues -copilot -copilots -coping -copings -copingstone -copingstones -copious -copiously -copiousness -copiousnesses -coplanar -coplanarities -coplanarity -coplot -coplots -coplotted -coplotting -copolymer -copolymeric -copolymerization -copolymerizations -copolymerize -copolymerized -copolymerizes -copolymerizing -copolymers -copout -copouts -copped -copper -copperah -copperahs -copperas -copperases -coppered -copperhead -copperheads -coppering -copperplate -copperplates -coppers -coppersmith -coppersmiths -coppery -coppice -coppiced -coppices -coppicing -copping -coppra -coppras -copra -coprah -coprahs -copras -copremia -copremias -copremic -copresent -copresented -copresenting -copresents -copresident -copresidents -coprince -coprinces -coprincipal -coprincipals -coprisoner -coprisoners -coprocessing -coprocessings -coprocessor -coprocessors -coproduce -coproduced -coproducer -coproducers -coproduces -coproducing -coproduct -coproduction -coproductions -coproducts -coprolite -coprolites -coprolitic -copromoter -copromoters -coprophagies -coprophagous -coprophagy -coprophilia -coprophiliac -coprophiliacs -coprophilias -coprophilous -coproprietor -coproprietors -coproprietorship -coproprietorships -coprosperities -coprosperity -cops -copse -copses -copter -copters -copublish -copublished -copublisher -copublishers -copublishes -copublishing -copula -copulae -copular -copulas -copulate -copulated -copulates -copulating -copulation -copulations -copulative -copulatives -copulatory -copurified -copurifies -copurify -copurifying -copy -copybook -copybooks -copyboy -copyboys -copycat -copycats -copycatted -copycatting -copydesk -copydesks -copyedit -copyedited -copyediting -copyedits -copyhold -copyholder -copyholders -copyholds -copying -copyist -copyists -copyread -copyreader -copyreaders -copyreading -copyreads -copyright -copyrightable -copyrighted -copyrighting -copyrights -copywriter -copywriters -coquet -coquetries -coquetry -coquets -coquette -coquetted -coquettes -coquetting -coquettish -coquettishly -coquettishness -coquettishnesses -coquille -coquilles -coquina -coquinas -coquito -coquitos -cor -coracle -coracles -coracoid -coracoids -coral -coralbells -coralberries -coralberry -coralline -corallines -coralloid -corals -coranto -corantoes -corantos -corban -corbans -corbeil -corbeille -corbeilles -corbeils -corbel -corbeled -corbeling -corbelings -corbelled -corbelling -corbels -corbicula -corbiculae -corbie -corbies -corbina -corbinas -corby -cord -cordage -cordages -cordate -cordately -corded -cordelle -cordelled -cordelles -cordelling -corder -corders -cordgrass -cordgrasses -cordial -cordialities -cordiality -cordially -cordialness -cordialnesses -cordials -cordierite -cordierites -cordiform -cordillera -cordilleran -cordilleras -cording -cordings -cordite -cordites -cordless -cordlike -cordoba -cordobas -cordon -cordoned -cordoning -cordons -cordovan -cordovans -cords -corduroy -corduroyed -corduroying -corduroys -cordwain -cordwainer -cordwaineries -cordwainers -cordwainery -cordwains -cordwood -cordwoods -core -corecipient -corecipients -cored -coredeem -coredeemed -coredeeming -coredeems -coreign -coreigns -corelate -corelated -corelates -corelating -coreless -coreligionist -coreligionists -coremia -coremium -coreopsis -corepressor -corepressors -corequisite -corequisites -corer -corers -cores -coresearcher -coresearchers -coresident -coresidential -coresidents -corespondent -corespondents -corf -corgi -corgis -coria -coriaceous -coriander -corianders -coring -corium -cork -corkage -corkages -corkboard -corkboards -corked -corker -corkers -corkier -corkiest -corkiness -corkinesses -corking -corklike -corks -corkscrew -corkscrewed -corkscrewing -corkscrews -corkwood -corkwoods -corky -corm -cormel -cormels -cormlike -cormoid -cormorant -cormorants -cormous -corms -corn -cornball -cornballs -cornbread -cornbreads -corncake -corncakes -corncob -corncobs -corncrake -corncrakes -corncrib -corncribs -cornea -corneae -corneal -corneas -corned -cornel -cornelian -cornelians -cornels -corneous -corner -cornerback -cornerbacks -cornered -cornering -cornerman -cornermen -corners -cornerstone -cornerstones -cornerways -cornerwise -cornet -cornetcies -cornetcy -cornetist -cornetists -cornets -cornettist -cornettists -cornfed -cornfield -cornfields -cornflakes -cornflower -cornflowers -cornhusk -cornhusker -cornhuskers -cornhusking -cornhuskings -cornhusks -cornice -corniced -cornices -corniche -corniches -cornicing -cornicle -cornicles -cornier -corniest -cornification -cornifications -cornily -corniness -corninesses -corning -cornmeal -cornmeals -cornpone -cornpones -cornrow -cornrowed -cornrowing -cornrows -corns -cornstalk -cornstalks -cornstarch -cornstarches -cornu -cornua -cornual -cornucopia -cornucopian -cornucopias -cornus -cornuses -cornute -cornuted -cornuto -cornutos -corny -corodies -corody -corolla -corollaries -corollary -corollas -corollate -coromandel -coromandels -corona -coronach -coronachs -coronae -coronagraph -coronagraphs -coronal -coronals -coronaries -coronary -coronas -coronate -coronated -coronates -coronating -coronation -coronations -coronel -coronels -coroner -coroners -coronet -coronets -coronograph -coronographs -coronoid -corotate -corotated -corotates -corotating -corotation -corotations -corpora -corporal -corporalities -corporality -corporally -corporals -corporate -corporately -corporation -corporations -corporatism -corporatisms -corporatist -corporative -corporativism -corporativisms -corporator -corporators -corporeal -corporealities -corporeality -corporeally -corporealness -corporealnesses -corporeities -corporeity -corposant -corposants -corps -corpse -corpses -corpsman -corpsmen -corpulence -corpulences -corpulencies -corpulency -corpulent -corpulently -corpus -corpuscle -corpuscles -corpuscular -corpuses -corrade -corraded -corrades -corrading -corral -corralled -corralling -corrals -corrasion -corrasions -corrasive -correct -correctable -corrected -correcter -correctest -correcting -correction -correctional -corrections -correctitude -correctitudes -corrective -correctively -correctives -correctly -correctness -correctnesses -corrector -correctors -corrects -correlatable -correlate -correlated -correlates -correlating -correlation -correlational -correlations -correlative -correlatively -correlatives -correlator -correlators -correspond -corresponded -correspondence -correspondences -correspondencies -correspondency -correspondent -correspondents -corresponding -correspondingly -corresponds -corresponsive -corrida -corridas -corridor -corridors -corrie -corries -corrigenda -corrigendum -corrigibilities -corrigibility -corrigible -corrival -corrivals -corroborant -corroborate -corroborated -corroborates -corroborating -corroboration -corroborations -corroborative -corroborator -corroborators -corroboratory -corroboree -corroborees -corrode -corroded -corrodes -corrodible -corrodies -corroding -corrody -corrosion -corrosions -corrosive -corrosively -corrosiveness -corrosivenesses -corrosives -corrugate -corrugated -corrugates -corrugating -corrugation -corrugations -corrupt -corrupted -corrupter -corrupters -corruptest -corruptibilities -corruptibility -corruptible -corruptibly -corrupting -corruption -corruptionist -corruptionists -corruptions -corruptive -corruptively -corruptly -corruptness -corruptnesses -corruptor -corruptors -corrupts -cors -corsac -corsacs -corsage -corsages -corsair -corsairs -corse -corselet -corselets -corselette -corselettes -corses -corset -corseted -corsetiere -corsetieres -corseting -corsetries -corsetry -corsets -corslet -corslets -cortege -corteges -cortex -cortexes -cortical -cortically -cortices -corticoid -corticoids -corticosteroid -corticosteroids -corticosterone -corticosterones -corticotrophin -corticotrophins -corticotropin -corticotropins -cortin -cortins -cortisol -cortisols -cortisone -cortisones -coruler -corulers -corundum -corundums -coruscant -coruscate -coruscated -coruscates -coruscating -coruscation -coruscations -corvee -corvees -corves -corvet -corvets -corvette -corvettes -corvina -corvinas -corvine -cory -corybant -corybantes -corybantic -corybants -corydalis -corydalises -corymb -corymbed -corymbose -corymbosely -corymbs -corynebacteria -corynebacterial -corynebacterium -coryneform -coryphaei -coryphaeus -coryphee -coryphees -coryza -coryzal -coryzas -cos -coscript -coscripted -coscripting -coscripts -cosec -cosecant -cosecants -cosecs -coses -coset -cosets -cosey -coseys -cosh -coshed -cosher -coshered -coshering -coshers -coshes -coshing -cosie -cosied -cosier -cosies -cosiest -cosign -cosignatories -cosignatory -cosigned -cosigner -cosigners -cosigning -cosigns -cosily -cosine -cosines -cosiness -cosinesses -cosmetic -cosmetically -cosmetician -cosmeticians -cosmeticize -cosmeticized -cosmeticizes -cosmeticizing -cosmetics -cosmetologies -cosmetologist -cosmetologists -cosmetology -cosmic -cosmical -cosmically -cosmism -cosmisms -cosmist -cosmists -cosmochemical -cosmochemist -cosmochemistries -cosmochemistry -cosmochemists -cosmogenic -cosmogonic -cosmogonical -cosmogonies -cosmogonist -cosmogonists -cosmogony -cosmographer -cosmographers -cosmographic -cosmographical -cosmographies -cosmography -cosmological -cosmologically -cosmologies -cosmologist -cosmologists -cosmology -cosmonaut -cosmonauts -cosmopolis -cosmopolises -cosmopolitan -cosmopolitanism -cosmopolitanisms -cosmopolitans -cosmopolite -cosmopolites -cosmopolitism -cosmopolitisms -cosmos -cosmoses -cosponsor -cosponsored -cosponsoring -cosponsors -cosponsorship -cosponsorships -coss -cossack -cossacks -cosset -cosseted -cosseting -cossets -cost -costa -costae -costal -costar -costard -costards -costarred -costarring -costars -costate -costed -coster -costermonger -costermongers -costers -costing -costive -costively -costiveness -costivenesses -costless -costlessly -costlier -costliest -costliness -costlinesses -costly -costmaries -costmary -costrel -costrels -costs -costume -costumed -costumer -costumeries -costumers -costumery -costumes -costumey -costumier -costumiers -costuming -cosurfactant -cosurfactants -cosy -cosying -cot -cotan -cotangent -cotangents -cotans -cote -coteau -coteaus -coteaux -coted -cotenant -cotenants -coterie -coteries -coterminous -coterminously -cotes -cothurn -cothurni -cothurns -cothurnus -cotidal -cotillion -cotillions -cotillon -cotillons -coting -cotoneaster -cotoneasters -cotquean -cotqueans -cotransduce -cotransduced -cotransduces -cotransducing -cotransduction -cotransductions -cotransfer -cotransferred -cotransferring -cotransfers -cotransport -cotransported -cotransporting -cotransports -cotrustee -cotrustees -cots -cotta -cottae -cottage -cottager -cottagers -cottages -cottagey -cottar -cottars -cottas -cotter -cottered -cotterless -cotters -cottier -cottiers -cotton -cottoned -cottoning -cottonmouth -cottonmouths -cottons -cottonseed -cottonseeds -cottontail -cottontails -cottonweed -cottonweeds -cottonwood -cottonwoods -cottony -cotyledon -cotyledonary -cotyledons -cotyloid -cotylosaur -cotylosaurs -cotype -cotypes -couch -couchant -couched -coucher -couchers -couches -couching -couchings -coude -cougar -cougars -cough -coughed -cougher -coughers -coughing -coughs -could -couldest -couldst -coulee -coulees -coulis -coulises -coulisse -coulisses -couloir -couloirs -coulomb -coulombic -coulombs -coulometer -coulometers -coulometric -coulometrically -coulometries -coulometry -coulter -coulters -coumaric -coumarin -coumarins -coumarou -coumarous -council -councillor -councillors -councillorship -councillorships -councilman -councilmanic -councilmen -councilor -councilors -councils -councilwoman -councilwomen -counsel -counseled -counselee -counselees -counseling -counselings -counselled -counselling -counsellings -counsellor -counsellors -counselor -counselors -counselorship -counselorships -counsels -count -countabilities -countability -countable -countably -countdown -countdowns -counted -countenance -countenanced -countenancer -countenancers -countenances -countenancing -counter -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 -countered -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 -counters -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 -countess -countesses -countian -countians -counties -counting -countinghouse -countinghouses -countless -countlessly -countries -countrified -country -countryfied -countryish -countryman -countrymen -countryseat -countryseats -countryside -countrysides -countrywide -countrywoman -countrywomen -counts -county -coup -coupe -couped -coupes -couping -couple -coupled -couplement -couplements -coupler -couplers -couples -couplet -couplets -coupling -couplings -coupon -couponing -couponings -coupons -coups -courage -courageous -courageously -courageousness -courageousnesses -courages -courant -courante -courantes -couranto -courantoes -courantos -courants -courgette -courgettes -courier -couriers -courlan -courlans -course -coursed -courser -coursers -courses -courseware -coursewares -coursing -coursings -court -courted -courteous -courteously -courteousness -courteousnesses -courter -courters -courtesan -courtesans -courtesied -courtesies -courtesy -courtesying -courthouse -courthouses -courtier -courtiers -courting -courtlier -courtliest -courtliness -courtlinesses -courtly -courtroom -courtrooms -courts -courtship -courtships -courtside -courtsides -courtyard -courtyards -couscous -couscouses -cousin -cousinage -cousinages -cousinhood -cousinhoods -cousinly -cousinries -cousinry -cousins -cousinship -cousinships -couteau -couteaux -couter -couters -couth -couther -couthest -couthie -couthier -couthiest -couths -couture -coutures -couturier -couturiere -couturieres -couturiers -couvade -couvades -covalence -covalences -covalencies -covalency -covalent -covalently -covariance -covariances -covariant -covariation -covariations -cove -coved -covelline -covellines -covellite -covellites -coven -covenant -covenantal -covenanted -covenantee -covenantees -covenanter -covenanters -covenanting -covenantor -covenantors -covenants -covens -cover -coverable -coverage -coverages -coverall -coveralled -coveralls -covered -coverer -coverers -covering -coverings -coverless -coverlet -coverlets -coverlid -coverlids -covers -coverslip -coverslips -covert -covertly -covertness -covertnesses -coverts -coverture -covertures -coverup -coverups -coves -covet -covetable -coveted -coveter -coveters -coveting -covetingly -covetous -covetously -covetousness -covetousnesses -covets -covey -coveys -covin -coving -covings -covins -cow -cowage -cowages -coward -cowardice -cowardices -cowardliness -cowardlinesses -cowardly -cowards -cowbane -cowbanes -cowbell -cowbells -cowberries -cowberry -cowbind -cowbinds -cowbird -cowbirds -cowboy -cowboys -cowcatcher -cowcatchers -cowed -cowedly -cower -cowered -cowering -cowers -cowfish -cowfishes -cowflap -cowflaps -cowflop -cowflops -cowgirl -cowgirls -cowhage -cowhages -cowhand -cowhands -cowherb -cowherbs -cowherd -cowherds -cowhide -cowhided -cowhides -cowhiding -cowier -cowiest -cowing -cowinner -cowinners -cowl -cowled -cowlick -cowlicks -cowling -cowlings -cowls -cowlstaff -cowlstaffs -cowlstaves -cowman -cowmen -coworker -coworkers -cowpat -cowpats -cowpea -cowpeas -cowpie -cowpies -cowplop -cowplops -cowpoke -cowpokes -cowpox -cowpoxes -cowpuncher -cowpunchers -cowrie -cowries -cowrite -cowrites -cowriting -cowritten -cowrote -cowry -cows -cowshed -cowsheds -cowskin -cowskins -cowslip -cowslips -cowy -cox -coxa -coxae -coxal -coxalgia -coxalgias -coxalgic -coxalgies -coxalgy -coxcomb -coxcombical -coxcombries -coxcombry -coxcombs -coxed -coxes -coxing -coxitides -coxitis -coxswain -coxswained -coxswaining -coxswains -coy -coydog -coydogs -coyed -coyer -coyest -coying -coyish -coyly -coyness -coynesses -coyote -coyotes -coyotillo -coyotillos -coypou -coypous -coypu -coypus -coys -coz -cozen -cozenage -cozenages -cozened -cozener -cozeners -cozening -cozens -cozes -cozey -cozeys -cozie -cozied -cozier -cozies -coziest -cozily -coziness -cozinesses -cozy -cozying -cozzes -craal -craaled -craaling -craals -crab -crabbed -crabbedness -crabbednesses -crabber -crabbers -crabbier -crabbiest -crabbily -crabbing -crabby -crabgrass -crabgrasses -crabmeat -crabmeats -crabs -crabstick -crabsticks -crabwise -crack -crackajack -crackajacks -crackback -crackbacks -crackbrain -crackbrained -crackbrains -crackdown -crackdowns -cracked -cracker -crackerjack -crackerjacks -crackers -cracking -crackings -crackle -crackled -crackles -crackleware -cracklewares -cracklier -crackliest -crackling -cracklings -crackly -cracknel -cracknels -crackpot -crackpots -cracks -cracksman -cracksmen -crackup -crackups -cracky -cradle -cradled -cradler -cradlers -cradles -cradlesong -cradlesongs -cradling -craft -crafted -craftier -craftiest -craftily -craftiness -craftinesses -crafting -crafts -craftsman -craftsmanlike -craftsmanly -craftsmanship -craftsmanships -craftsmen -craftspeople -craftsperson -craftspersons -craftswoman -craftswomen -crafty -crag -cragged -craggier -craggiest -craggily -cragginess -cragginesses -craggy -crags -cragsman -cragsmen -crake -crakes -cram -crambe -crambes -crambo -cramboes -crambos -crammed -crammer -crammers -cramming -cramoisie -cramoisies -cramoisy -cramp -cramped -cramping -crampit -crampits -crampon -crampons -crampoon -crampoons -cramps -crams -cranberries -cranberry -cranch -cranched -cranches -cranching -crane -craned -cranes -cranesbill -cranesbills -crania -cranial -cranially -craniate -craniates -craning -craniocerebral -craniofacial -craniologies -craniology -craniometries -craniometry -craniosacral -craniotomies -craniotomy -cranium -craniums -crank -crankcase -crankcases -cranked -cranker -crankest -crankier -crankiest -crankily -crankiness -crankinesses -cranking -crankish -crankle -crankled -crankles -crankling -crankly -crankous -crankpin -crankpins -cranks -crankshaft -crankshafts -cranky -crannied -crannies -crannog -crannoge -crannoges -crannogs -cranny -cranreuch -cranreuchs -crap -crape -craped -crapes -craping -crapped -crapper -crappers -crappie -crappier -crappies -crappiest -crapping -crappy -craps -crapshoot -crapshooter -crapshooters -crapshoots -crapulous -crases -crash -crashed -crasher -crashers -crashes -crashing -crashingly -crashworthiness -crashworthinesses -crashworthy -crasis -crass -crasser -crassest -crassitude -crassitudes -crassly -crassness -crassnesses -cratch -cratches -crate -crated -crater -cratered -cratering -craterlet -craterlets -craterlike -craters -crates -crating -craton -cratonic -cratons -craunch -craunched -craunches -craunching -cravat -cravats -crave -craved -craven -cravened -cravening -cravenly -cravenness -cravennesses -cravens -craver -cravers -craves -craving -cravings -craw -crawdad -crawdads -crawfish -crawfished -crawfishes -crawfishing -crawl -crawled -crawler -crawlers -crawlier -crawliest -crawling -crawls -crawlspace -crawlspaces -crawlway -crawlways -crawly -craws -crayfish -crayfishes -crayola -crayolas -crayon -crayoned -crayoning -crayonist -crayonists -crayons -craze -crazed -crazes -crazier -crazies -craziest -crazily -craziness -crazinesses -crazing -crazy -crazyweed -crazyweeds -creak -creaked -creakier -creakiest -creakily -creakiness -creakinesses -creaking -creaks -creaky -cream -creamcups -creamed -creamer -creameries -creamers -creamery -creamier -creamiest -creamily -creaminess -creaminesses -creaming -creampuff -creampuffs -creams -creamware -creamwares -creamy -crease -creased -creaseless -creaser -creasers -creases -creasier -creasiest -creasing -creasy -create -created -creates -creatin -creatine -creatines -creating -creatinine -creatinines -creatins -creation -creationism -creationisms -creationist -creationists -creations -creative -creatively -creativeness -creativenesses -creativities -creativity -creator -creators -creatural -creature -creaturehood -creaturehoods -creatureliness -creaturelinesses -creaturely -creatures -creche -creches -credal -credence -credences -credenda -credendum -credent -credential -credentialed -credentialing -credentialism -credentialisms -credentialled -credentialling -credentials -credenza -credenzas -credibilities -credibility -credible -credibly -credit -creditabilities -creditability -creditable -creditableness -creditablenesses -creditably -credited -crediting -creditor -creditors -credits -creditworthiness -creditworthinesses -creditworthy -credo -credos -credulities -credulity -credulous -credulously -credulousness -credulousnesses -creed -creedal -creeds -creek -creeks -creel -creeled -creeling -creels -creep -creepage -creepages -creeper -creepers -creepie -creepier -creepies -creepiest -creepily -creepiness -creepinesses -creeping -creeps -creepy -creese -creeses -creesh -creeshed -creeshes -creeshing -cremains -cremate -cremated -cremates -cremating -cremation -cremations -cremator -crematoria -crematories -crematorium -crematoriums -cremators -crematory -creme -cremes -crenate -crenated -crenation -crenations -crenel -crenelated -crenelation -crenelations -creneled -creneling -crenellated -crenellation -crenellations -crenelle -crenelled -crenelles -crenelling -crenels -crenulate -crenulated -crenulation -crenulations -creodont -creodonta -creodonts -creole -creoles -creolise -creolised -creolises -creolising -creolization -creolizations -creolize -creolized -creolizes -creolizing -creosol -creosols -creosote -creosoted -creosotes -creosoting -crepe -creped -crepes -crepey -crepier -crepiest -creping -crepitant -crepitate -crepitated -crepitates -crepitating -crepitation -crepitations -crepon -crepons -crept -crepuscle -crepuscles -crepuscular -crepuscule -crepuscules -crepy -crescendi -crescendo -crescendoed -crescendoes -crescendoing -crescendos -crescent -crescentic -crescents -crescive -crescively -cresol -cresols -cress -cresses -cresset -cressets -crest -crestal -crested -crestfallen -crestfallenly -crestfallenness -crestfallennesses -cresting -crestings -crestless -crests -cresyl -cresylic -cresyls -cretic -cretics -cretin -cretinism -cretinisms -cretinous -cretins -cretonne -cretonnes -crevalle -crevalles -crevasse -crevassed -crevasses -crevassing -crevice -creviced -crevices -crew -crewcut -crewcuts -crewed -crewel -crewels -crewelwork -crewelworks -crewing -crewless -crewman -crewmate -crewmates -crewmen -crewneck -crewnecks -crews -crib -cribbage -cribbages -cribbed -cribber -cribbers -cribbing -cribbings -cribbled -cribriform -cribrous -cribs -cribwork -cribworks -cricetid -cricetids -crick -cricked -cricket -cricketed -cricketer -cricketers -cricketing -crickets -crickey -cricking -cricks -cricoid -cricoids -cried -crier -criers -cries -crikey -crime -crimeless -crimes -criminal -criminalistics -criminalities -criminality -criminalization -criminalizations -criminalize -criminalized -criminalizes -criminalizing -criminally -criminals -criminate -criminated -criminates -criminating -crimination -criminations -criminological -criminologically -criminologies -criminologist -criminologists -criminology -criminous -crimmer -crimmers -crimp -crimped -crimper -crimpers -crimpier -crimpiest -crimping -crimple -crimpled -crimples -crimpling -crimps -crimpy -crimson -crimsoned -crimsoning -crimsons -cringe -cringed -cringer -cringers -cringes -cringing -cringle -cringles -crinite -crinites -crinkle -crinkled -crinkles -crinklier -crinkliest -crinkling -crinkly -crinoid -crinoids -crinoline -crinolined -crinolines -crinum -crinums -criollo -criollos -cripe -cripes -cripple -crippled -crippler -cripplers -cripples -crippling -cripplingly -cris -crises -crisic -crisis -crisp -crispate -crispbread -crispbreads -crisped -crispen -crispened -crispening -crispens -crisper -crispers -crispest -crispier -crispiest -crispily -crispiness -crispinesses -crisping -crisply -crispness -crispnesses -crisps -crispy -crissa -crissal -crisscross -crisscrossed -crisscrosses -crisscrossing -crissum -crista -cristae -cristate -criteria -criterion -criterions -criterium -criteriums -critic -critical -criticalities -criticality -critically -criticalness -criticalnesses -criticaster -criticasters -criticise -criticised -criticises -criticising -criticism -criticisms -criticizable -criticize -criticized -criticizer -criticizers -criticizes -criticizing -critics -critique -critiqued -critiques -critiquing -critter -critters -crittur -critturs -croak -croaked -croaker -croakers -croakier -croakiest -croakily -croaking -croaks -croaky -croc -crocein -croceine -croceines -croceins -crochet -crocheted -crocheter -crocheters -crocheting -crochets -croci -crocidolite -crocidolites -crocine -crock -crocked -crockeries -crockery -crocket -crocketed -crockets -crocking -crocks -crocodile -crocodiles -crocodilian -crocodilians -crocoite -crocoites -crocs -crocus -crocuses -croft -crofter -crofters -crofts -croissant -croissants -crojik -crojiks -cromlech -cromlechs -crone -crones -cronies -crony -cronyism -cronyisms -crook -crookback -crookbacked -crookbacks -crooked -crookeder -crookedest -crookedly -crookedness -crookednesses -crookeries -crookery -crooking -crookneck -crooknecks -crooks -croon -crooned -crooner -crooners -crooning -croons -crop -cropland -croplands -cropless -cropped -cropper -croppers -croppie -croppies -cropping -crops -croquet -croqueted -croqueting -croquets -croquette -croquettes -croquignole -croquignoles -croquis -crore -crores -crosier -crosiers -cross -crossabilities -crossability -crossable -crossarm -crossarms -crossbanded -crossbanding -crossbandings -crossbar -crossbarred -crossbarring -crossbars -crossbeam -crossbeams -crossbearer -crossbearers -crossbill -crossbills -crossbones -crossbow -crossbowman -crossbowmen -crossbows -crossbred -crossbreds -crossbreed -crossbreeding -crossbreeds -crosscheck -crosschecked -crosschecking -crosschecks -crosscourt -crosscurrent -crosscurrents -crosscut -crosscuts -crosscutting -crosscuttings -crosse -crossed -crosser -crossers -crosses -crossest -crossfire -crossfires -crosshair -crosshairs -crosshatch -crosshatched -crosshatches -crosshatching -crosshead -crossheads -crossing -crossings -crosslet -crosslets -crosslinguistic -crosslinguistically -crossly -crossness -crossnesses -crossopterygian -crossopterygians -crossover -crossovers -crosspatch -crosspatches -crosspiece -crosspieces -crossroad -crossroads -crossruff -crossruffed -crossruffing -crossruffs -crosstalk -crosstalks -crosstie -crossties -crosstown -crosstrees -crosswalk -crosswalks -crossway -crossways -crosswind -crosswinds -crosswise -crossword -crosswords -crotch -crotched -crotches -crotchet -crotchetiness -crotchetinesses -crotchets -crotchety -croton -crotons -crouch -crouched -crouches -crouching -croup -croupe -croupes -croupier -croupiers -croupiest -croupily -croupous -croups -croupy -crouse -crousely -croustade -croustades -crouton -croutons -crow -crowbar -crowbarred -crowbarring -crowbars -crowberries -crowberry -crowd -crowded -crowdedness -crowdednesses -crowder -crowders -crowdie -crowdies -crowding -crowds -crowdy -crowed -crower -crowers -crowfeet -crowfoot -crowfoots -crowing -crowkeeper -crowkeepers -crown -crowned -crowner -crowners -crownet -crownets -crowning -crownless -crowns -crows -crowstep -crowstepped -crowsteps -croze -crozer -crozers -crozes -crozier -croziers -cruces -crucial -crucially -crucian -crucians -cruciate -crucible -crucibles -crucifer -cruciferous -crucifers -crucified -crucifies -crucifix -crucifixes -crucifixion -crucifixions -cruciform -cruciforms -crucify -crucifying -cruciverbalist -cruciverbalists -cruck -crucks -crud -crudded -cruddier -cruddiest -crudding -cruddy -crude -crudely -crudeness -crudenesses -cruder -crudes -crudest -crudites -crudities -crudity -cruds -cruel -crueler -cruelest -crueller -cruellest -cruelly -cruelness -cruelnesses -cruelties -cruelty -cruet -cruets -cruise -cruised -cruiser -cruisers -cruiserweight -cruiserweights -cruises -cruising -cruisings -cruller -crullers -crumb -crumbed -crumber -crumbers -crumbier -crumbiest -crumbing -crumble -crumbled -crumbles -crumblier -crumbliest -crumbliness -crumblinesses -crumbling -crumblings -crumbly -crumbs -crumbum -crumbums -crumby -crumhorn -crumhorns -crummie -crummier -crummies -crummiest -crumminess -crumminesses -crummy -crump -crumped -crumpet -crumpets -crumping -crumple -crumpled -crumples -crumplier -crumpliest -crumpling -crumply -crumps -crunch -crunchable -crunched -cruncher -crunchers -crunches -crunchier -crunchiest -crunchily -crunchiness -crunchinesses -crunching -crunchy -crunodal -crunode -crunodes -cruor -cruors -crupper -cruppers -crura -crural -crus -crusade -crusaded -crusader -crusaders -crusades -crusading -crusado -crusadoes -crusados -cruse -cruses -cruset -crusets -crush -crushable -crushed -crusher -crushers -crushes -crushing -crushingly -crushproof -crusily -crust -crustacea -crustacean -crustaceans -crustaceous -crustal -crusted -crustier -crustiest -crustily -crustiness -crustinesses -crusting -crustless -crustose -crusts -crusty -crutch -crutched -crutches -crutching -crux -cruxes -cruzado -cruzadoes -cruzados -cruzeiro -cruzeiros -crwth -crwths -cry -crybabies -crybaby -crying -cryingly -cryobiological -cryobiologies -cryobiologist -cryobiologists -cryobiology -cryogen -cryogenic -cryogenically -cryogenics -cryogenies -cryogens -cryogeny -cryolite -cryolites -cryonic -cryonics -cryophilic -cryopreservation -cryopreservations -cryopreserve -cryopreserved -cryopreserves -cryopreserving -cryoprobe -cryoprobes -cryoprotectant -cryoprotectants -cryoprotective -cryoscope -cryoscopes -cryoscopic -cryoscopies -cryoscopy -cryostat -cryostatic -cryostats -cryosurgeon -cryosurgeons -cryosurgeries -cryosurgery -cryosurgical -cryotherapies -cryotherapy -cryotron -cryotrons -crypt -cryptal -cryptanalyses -cryptanalysis -cryptanalyst -cryptanalysts -cryptanalytic -cryptanalytical -cryptarithm -cryptarithms -cryptic -cryptically -crypto -cryptococcal -cryptococci -cryptococcoses -cryptococcosis -cryptococcus -cryptocrystalline -cryptogam -cryptogamic -cryptogamous -cryptogams -cryptogenic -cryptogram -cryptograms -cryptograph -cryptographer -cryptographers -cryptographic -cryptographically -cryptographies -cryptographs -cryptography -cryptologic -cryptological -cryptologies -cryptologist -cryptologists -cryptology -cryptomeria -cryptomerias -cryptonym -cryptonyms -cryptorchid -cryptorchidism -cryptorchidisms -cryptorchids -cryptorchism -cryptorchisms -cryptos -cryptozoologies -cryptozoologist -cryptozoologists -cryptozoology -crypts -crystal -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 -crystals -ctenidia -ctenidium -ctenoid -ctenophoran -ctenophorans -ctenophore -ctenophores -cuadrilla -cuadrillas -cub -cubage -cubages -cubature -cubatures -cubbies -cubbish -cubby -cubbyhole -cubbyholes -cube -cubeb -cubebs -cubed -cuber -cubers -cubes -cubic -cubical -cubically -cubicities -cubicity -cubicle -cubicles -cubicly -cubics -cubicula -cubiculum -cubiform -cubing -cubism -cubisms -cubist -cubistic -cubists -cubit -cubital -cubits -cuboid -cuboidal -cuboids -cubs -cuckold -cuckolded -cuckolding -cuckoldries -cuckoldry -cuckolds -cuckoo -cuckooed -cuckooflower -cuckooflowers -cuckooing -cuckoopint -cuckoopints -cuckoos -cucullate -cucumber -cucumbers -cucurbit -cucurbits -cud -cudbear -cudbears -cuddie -cuddies -cuddle -cuddled -cuddler -cuddlers -cuddles -cuddlesome -cuddlier -cuddliest -cuddling -cuddly -cuddy -cudgel -cudgeled -cudgeler -cudgelers -cudgeling -cudgelled -cudgelling -cudgels -cuds -cudweed -cudweeds -cue -cued -cueing -cues -cuesta -cuestas -cuff -cuffed -cuffing -cuffless -cufflink -cufflinks -cuffs -cuif -cuifs -cuing -cuirass -cuirassed -cuirasses -cuirassier -cuirassiers -cuirassing -cuish -cuishes -cuisine -cuisines -cuisse -cuisses -cuittle -cuittled -cuittles -cuittling -cuke -cukes -culch -culches -culet -culets -culex -culexes -culices -culicid -culicids -culicine -culicines -culinarian -culinarians -culinarily -culinary -cull -cullay -cullays -culled -cullender -cullenders -culler -cullers -cullet -cullets -cullied -cullies -culling -cullion -cullions -cullis -cullises -culls -cully -cullying -culm -culmed -culminant -culminate -culminated -culminates -culminating -culmination -culminations -culming -culms -culotte -culottes -culpa -culpabilities -culpability -culpable -culpableness -culpablenesses -culpably -culpae -culprit -culprits -cult -cultch -cultches -culti -cultic -cultigen -cultigens -cultish -cultishly -cultishness -cultishnesses -cultism -cultisms -cultist -cultists -cultivabilities -cultivability -cultivable -cultivar -cultivars -cultivatable -cultivate -cultivated -cultivates -cultivating -cultivation -cultivations -cultivator -cultivators -cultlike -cultrate -cults -cultural -culturally -culturati -culture -cultured -cultures -culturing -cultus -cultuses -culver -culverin -culverins -culvers -culvert -culverts -cum -cumarin -cumarins -cumber -cumberbund -cumberbunds -cumbered -cumberer -cumberers -cumbering -cumbers -cumbersome -cumbersomely -cumbersomeness -cumbersomenesses -cumbrous -cumbrously -cumbrousness -cumbrousnesses -cumin -cumins -cummer -cummerbund -cummerbunds -cummers -cummin -cummins -cumquat -cumquats -cumshaw -cumshaws -cumulate -cumulated -cumulates -cumulating -cumulation -cumulations -cumulative -cumulatively -cumulativeness -cumulativenesses -cumuli -cumuliform -cumulonimbi -cumulonimbus -cumulonimbuses -cumulous -cumulus -cunctation -cunctations -cunctative -cundum -cundums -cuneal -cuneate -cuneated -cuneatic -cuneiform -cuneiforms -cuniform -cuniforms -cunner -cunners -cunnilinctus -cunnilinctuses -cunnilingus -cunnilinguses -cunning -cunninger -cunningest -cunningly -cunningness -cunningnesses -cunnings -cunt -cunts -cup -cupbearer -cupbearers -cupboard -cupboards -cupcake -cupcakes -cupel -cupeled -cupeler -cupelers -cupeling -cupellation -cupellations -cupelled -cupeller -cupellers -cupelling -cupels -cupful -cupfuls -cupid -cupidities -cupidity -cupids -cuplike -cupola -cupolaed -cupolaing -cupolas -cuppa -cuppas -cupped -cupper -cuppers -cuppier -cuppiest -cupping -cuppings -cuppy -cupreous -cupric -cupriferous -cuprite -cuprites -cupronickel -cupronickels -cuprous -cuprum -cuprums -cups -cupsful -cupula -cupulae -cupular -cupulate -cupule -cupules -cur -curabilities -curability -curable -curableness -curablenesses -curably -curacao -curacaos -curacies -curacoa -curacoas -curacy -curagh -curaghs -curara -curaras -curare -curares -curari -curarine -curarines -curaris -curarization -curarizations -curarize -curarized -curarizes -curarizing -curassow -curassows -curate -curated -curates -curating -curative -curatively -curatives -curator -curatorial -curators -curatorship -curatorships -curb -curbable -curbed -curber -curbers -curbing -curbings -curbs -curbside -curbsides -curbstone -curbstones -curch -curches -curculio -curculios -curcuma -curcumas -curd -curded -curdier -curdiest -curding -curdle -curdled -curdler -curdlers -curdles -curdling -curds -curdy -cure -cured -cureless -curer -curers -cures -curet -curets -curettage -curettages -curette -curetted -curettement -curettements -curettes -curetting -curf -curfew -curfews -curfs -curia -curiae -curial -curie -curies -curing -curio -curios -curiosa -curiosities -curiosity -curious -curiouser -curiousest -curiously -curiousness -curiousnesses -curite -curites -curium -curiums -curl -curled -curler -curlers -curlew -curlews -curlicue -curlicued -curlicues -curlicuing -curlier -curliest -curlily -curliness -curlinesses -curling -curlings -curlpaper -curlpapers -curls -curly -curlycue -curlycues -curmudgeon -curmudgeonliness -curmudgeonlinesses -curmudgeonly -curmudgeons -curn -curns -curr -currach -currachs -curragh -curraghs -curran -currans -currant -currants -curred -currencies -currency -current -currently -currentness -currentnesses -currents -curricle -curricles -curricula -curricular -curriculum -curriculums -currie -curried -currier -currieries -curriers -curriery -curries -curring -currish -currishly -currs -curry -currycomb -currycombed -currycombing -currycombs -currying -curs -curse -cursed -curseder -cursedest -cursedly -cursedness -cursednesses -curser -cursers -curses -cursing -cursive -cursively -cursiveness -cursivenesses -cursives -cursor -cursorial -cursorily -cursoriness -cursorinesses -cursors -cursory -curst -curt -curtail -curtailed -curtailer -curtailers -curtailing -curtailment -curtailments -curtails -curtain -curtained -curtaining -curtainless -curtains -curtal -curtalax -curtalaxes -curtals -curtate -curter -curtesies -curtest -curtesy -curtilage -curtilages -curtly -curtness -curtnesses -curtsey -curtseyed -curtseying -curtseys -curtsied -curtsies -curtsy -curtsying -curule -curvaceous -curvacious -curvature -curvatures -curve -curveball -curveballed -curveballing -curveballs -curved -curvedly -curves -curvet -curveted -curveting -curvets -curvetted -curvetting -curvey -curvier -curviest -curvilinear -curvilinearities -curvilinearity -curving -curvy -cuscus -cuscuses -cusec -cusecs -cushat -cushats -cushaw -cushaws -cushier -cushiest -cushily -cushion -cushioned -cushioning -cushionless -cushions -cushiony -cushy -cusk -cusks -cusp -cuspate -cuspated -cusped -cuspid -cuspidal -cuspidate -cuspidation -cuspidations -cuspides -cuspidor -cuspidors -cuspids -cuspis -cusps -cuss -cussed -cussedly -cussedness -cussednesses -cusser -cussers -cusses -cussing -cusso -cussos -cussword -cusswords -custard -custards -custardy -custodes -custodial -custodian -custodians -custodianship -custodianships -custodies -custody -custom -customarily -customariness -customarinesses -customary -customer -customers -customhouse -customhouses -customise -customised -customises -customising -customization -customizations -customize -customized -customizer -customizers -customizes -customizing -customs -customshouse -customshouses -custos -custumal -custumals -cut -cutabilities -cutability -cutaneous -cutaneously -cutaway -cutaways -cutback -cutbacks -cutbank -cutbanks -cutch -cutcheries -cutchery -cutches -cutdown -cutdowns -cute -cutely -cuteness -cutenesses -cuter -cutes -cutesie -cutesier -cutesiest -cutest -cutesy -cutey -cuteys -cutgrass -cutgrasses -cuticle -cuticles -cuticula -cuticulae -cuticular -cutie -cuties -cutin -cutinise -cutinised -cutinises -cutinising -cutinize -cutinized -cutinizes -cutinizing -cutins -cutis -cutises -cutlas -cutlases -cutlass -cutlasses -cutler -cutleries -cutlers -cutlery -cutlet -cutlets -cutline -cutlines -cutoff -cutoffs -cutout -cutouts -cutover -cutovers -cutpurse -cutpurses -cuts -cuttable -cuttage -cuttages -cutter -cutters -cutthroat -cutthroats -cutties -cutting -cuttingly -cuttings -cuttle -cuttlebone -cuttlebones -cuttled -cuttlefish -cuttlefishes -cuttles -cuttling -cutty -cutup -cutups -cutwater -cutwaters -cutwork -cutworks -cutworm -cutworms -cuvette -cuvettes -cwm -cwms -cyan -cyanamid -cyanamide -cyanamides -cyanamids -cyanate -cyanates -cyanic -cyanid -cyanide -cyanided -cyanides -cyaniding -cyanids -cyanin -cyanine -cyanines -cyanins -cyanite -cyanites -cyanitic -cyano -cyanoacrylate -cyanoacrylates -cyanobacteria -cyanobacterium -cyanocobalamin -cyanocobalamine -cyanocobalamines -cyanocobalamins -cyanoethylate -cyanoethylated -cyanoethylates -cyanoethylating -cyanoethylation -cyanoethylations -cyanogen -cyanogeneses -cyanogenesis -cyanogenetic -cyanogenic -cyanogens -cyanohydrin -cyanohydrins -cyanosed -cyanoses -cyanosis -cyanotic -cyans -cybernated -cybernation -cybernations -cybernetic -cybernetical -cybernetically -cybernetician -cyberneticians -cyberneticist -cyberneticists -cybernetics -cyberpunk -cyberpunks -cyberspace -cyberspaces -cyborg -cyborgs -cycad -cycadeoid -cycadeoids -cycadophyte -cycadophytes -cycads -cycas -cycases -cycasin -cycasins -cyclamate -cyclamates -cyclamen -cyclamens -cyclase -cyclases -cyclazocine -cyclazocines -cycle -cyclecar -cyclecars -cycled -cycler -cycleries -cyclers -cyclery -cycles -cyclic -cyclical -cyclicalities -cyclicality -cyclically -cyclicals -cyclicities -cyclicity -cyclicly -cycling -cyclings -cyclist -cyclists -cyclitol -cyclitols -cyclization -cyclizations -cyclize -cyclized -cyclizes -cyclizing -cyclo -cycloaddition -cycloadditions -cycloaliphatic -cyclodextrin -cyclodextrins -cyclodiene -cyclodienes -cyclogeneses -cyclogenesis -cyclohexane -cyclohexanes -cyclohexanone -cyclohexanones -cycloheximide -cycloheximides -cyclohexylamine -cyclohexylamines -cycloid -cycloidal -cycloids -cyclometer -cyclometers -cyclonal -cyclone -cyclones -cyclonic -cyclonically -cycloolefin -cycloolefinic -cycloolefins -cyclopaedia -cyclopaedias -cycloparaffin -cycloparaffins -cyclopean -cyclopedia -cyclopedias -cyclopedic -cyclopes -cyclophosphamide -cyclophosphamides -cyclopropane -cyclopropanes -cyclops -cyclorama -cycloramas -cycloramic -cyclos -cycloserine -cycloserines -cycloses -cyclosis -cyclosporine -cyclosporines -cyclostome -cyclostomes -cyclostyle -cyclostyled -cyclostyles -cyclostyling -cyclothymia -cyclothymias -cyclothymic -cyclotomic -cyclotron -cyclotrons -cyder -cyders -cyeses -cyesis -cygnet -cygnets -cylices -cylinder -cylindered -cylindering -cylinders -cylindric -cylindrical -cylindrically -cylix -cyma -cymae -cymar -cymars -cymas -cymatia -cymatium -cymbal -cymbaler -cymbalers -cymbalist -cymbalists -cymbalom -cymbaloms -cymbals -cymbidia -cymbidium -cymbidiums -cymbling -cymblings -cyme -cymene -cymenes -cymes -cymlin -cymling -cymlings -cymlins -cymogene -cymogenes -cymoid -cymol -cymols -cymophane -cymophanes -cymose -cymosely -cymous -cynic -cynical -cynically -cynicism -cynicisms -cynics -cynosure -cynosures -cypher -cyphered -cyphering -cyphers -cypres -cypreses -cypress -cypresses -cyprian -cyprians -cyprinid -cyprinids -cypripedia -cypripedium -cypripediums -cyproheptadine -cyproheptadines -cyproterone -cyproterones -cyprus -cypruses -cypsela -cypselae -cyst -cysteamine -cysteamines -cystein -cysteine -cysteines -cysteins -cystic -cysticerci -cysticercoid -cysticercoids -cysticercoses -cysticercosis -cysticercus -cystine -cystines -cystinuria -cystinurias -cystitides -cystitis -cystocarp -cystocarps -cystoid -cystoids -cystolith -cystoliths -cystoscope -cystoscopes -cystoscopic -cystoscopies -cystoscopy -cysts -cytaster -cytasters -cytidine -cytidines -cytochalasin -cytochalasins -cytochemical -cytochemistries -cytochemistry -cytochrome -cytochromes -cytodifferentiation -cytodifferentiations -cytogenetic -cytogenetical -cytogenetically -cytogeneticist -cytogeneticists -cytogenetics -cytogenies -cytogeny -cytokine -cytokines -cytokineses -cytokinesis -cytokinetic -cytokinin -cytokinins -cytologic -cytological -cytologically -cytologies -cytologist -cytologists -cytology -cytolyses -cytolysin -cytolysins -cytolysis -cytolytic -cytomegalic -cytomegalovirus -cytomegaloviruses -cytomembrane -cytomembranes -cyton -cytons -cytopathic -cytopathogenic -cytopathogenicities -cytopathogenicity -cytophilic -cytophotometric -cytophotometries -cytophotometry -cytoplasm -cytoplasmic -cytoplasmically -cytoplasms -cytosine -cytosines -cytoskeletal -cytoskeleton -cytoskeletons -cytosol -cytosolic -cytosols -cytostatic -cytostatically -cytostatics -cytotaxonomic -cytotaxonomically -cytotaxonomies -cytotaxonomy -cytotechnologies -cytotechnologist -cytotechnologists -cytotechnology -cytotoxic -cytotoxicities -cytotoxicity -cytotoxin -cytotoxins -czar -czardas -czardases -czardom -czardoms -czarevitch -czarevitches -czarevna -czarevnas -czarina -czarinas -czarism -czarisms -czarist -czarists -czaritza -czaritzas -czars -dab -dabbed -dabber -dabbers -dabbing -dabble -dabbled -dabbler -dabblers -dabbles -dabbling -dabblings -dabchick -dabchicks -dabs -dabster -dabsters -dace -daces -dacha -dachas -dachshund -dachshunds -dacker -dackered -dackering -dackers -dacoit -dacoities -dacoits -dacoity -dactyl -dactyli -dactylic -dactylics -dactylologies -dactylology -dactyls -dactylus -dad -dada -dadaism -dadaisms -dadaist -dadaistic -dadaists -dadas -daddies -daddle -daddled -daddles -daddling -daddy -dado -dadoed -dadoes -dadoing -dados -dads -daedal -daemon -daemones -daemonic -daemons -daff -daffed -daffier -daffiest -daffily -daffing -daffodil -daffodils -daffs -daffy -daft -dafter -daftest -daftly -daftness -daftnesses -dag -dagga -daggas -dagger -daggered -daggering -daggerlike -daggers -daggle -daggled -daggles -daggling -daglock -daglocks -dago -dagoba -dagobas -dagoes -dagos -dags -daguerreotype -daguerreotyped -daguerreotypes -daguerreotypies -daguerreotyping -daguerreotypist -daguerreotypists -daguerreotypy -dagwood -dagwoods -dah -dahabeah -dahabeahs -dahabiah -dahabiahs -dahabieh -dahabiehs -dahabiya -dahabiyas -dahl -dahlia -dahlias -dahls -dahoon -dahoons -dahs -daiker -daikered -daikering -daikers -daikon -daikons -dailies -dailiness -dailinesses -daily -daimen -daimio -daimios -daimon -daimones -daimonic -daimons -daimyo -daimyos -daintier -dainties -daintiest -daintily -daintiness -daintinesses -dainty -daiquiri -daiquiris -dairies -dairy -dairying -dairyings -dairymaid -dairymaids -dairyman -dairymen -dais -daises -daishiki -daishikis -daisied -daisies -daisy -dak -dakerhen -dakerhens -dakoit -dakoities -dakoits -dakoity -daks -dal -dalapon -dalapons -dalasi -dalasis -dale -daledh -daledhs -dales -dalesman -dalesmen -daleth -daleths -dalles -dalliance -dalliances -dallied -dallier -dalliers -dallies -dally -dallying -dalmatian -dalmatians -dalmatic -dalmatics -dals -dalton -daltonic -daltons -dam -damage -damageabilities -damageability -damaged -damager -damagers -damages -damaging -damagingly -daman -damans -damar -damars -damascene -damascened -damascenes -damascening -damask -damasked -damasking -damasks -dame -dames -damewort -dameworts -dammar -dammars -dammed -dammer -dammers -damming -damn -damnable -damnableness -damnablenesses -damnably -damnation -damnations -damnatory -damndest -damndests -damned -damneder -damnedest -damnedests -damner -damners -damnified -damnifies -damnify -damnifying -damning -damningly -damns -damosel -damosels -damozel -damozels -damp -damped -dampen -dampened -dampener -dampeners -dampening -dampens -damper -dampers -dampest -damping -dampings -dampish -damply -dampness -dampnesses -damps -dams -damsel -damselfish -damselfishes -damselflies -damselfly -damsels -damson -damsons -dance -danceable -danced -dancer -dancers -dances -dancing -dandelion -dandelions -dander -dandered -dandering -danders -dandiacal -dandier -dandies -dandiest -dandification -dandifications -dandified -dandifies -dandify -dandifying -dandily -dandle -dandled -dandler -dandlers -dandles -dandling -dandriff -dandriffs -dandruff -dandruffs -dandruffy -dandy -dandyish -dandyishly -dandyism -dandyisms -danegeld -danegelds -daneweed -daneweeds -danewort -daneworts -dang -danged -danger -dangered -dangering -dangerous -dangerously -dangerousness -dangerousnesses -dangers -danging -dangle -dangled -dangler -danglers -dangles -dangling -dangs -danio -danios -danish -dank -danker -dankest -dankly -dankness -danknesses -danseur -danseurs -danseuse -danseuses -dap -daphne -daphnes -daphnia -daphnias -dapped -dapper -dapperer -dapperest -dapperly -dapperness -dappernesses -dapping -dapple -dappled -dapples -dappling -daps -dapsone -dapsones -darb -darbies -darbs -dare -dared -daredevil -daredevilries -daredevilry -daredevils -daredeviltries -daredeviltry -dareful -darer -darers -dares -daresay -daric -darics -daring -daringly -daringness -daringnesses -darings -dariole -darioles -dark -darked -darken -darkened -darkener -darkeners -darkening -darkens -darker -darkest -darkey -darkeys -darkie -darkies -darking -darkish -darkle -darkled -darkles -darklier -darkliest -darkling -darkly -darkness -darknesses -darkroom -darkrooms -darks -darksome -darky -darling -darlingly -darlingness -darlingnesses -darlings -darn -darndest -darndests -darned -darneder -darnedest -darnel -darnels -darner -darners -darning -darnings -darns -darshan -darshans -dart -dartboard -dartboards -darted -darter -darters -darting -dartle -dartled -dartles -dartling -darts -dash -dashboard -dashboards -dashed -dasheen -dasheens -dasher -dashers -dashes -dashi -dashier -dashiest -dashiki -dashikis -dashing -dashingly -dashis -dashpot -dashpots -dashy -dassie -dassies -dastard -dastardliness -dastardlinesses -dastardly -dastards -dasyure -dasyures -data -databank -databanks -database -databases -datable -dataries -datary -datcha -datchas -date -dateable -datebook -datebooks -dated -datedly -datedness -datednesses -dateless -dateline -datelined -datelines -datelining -dater -daters -dates -dating -datival -dative -datively -datives -dato -datos -datto -dattos -datum -datums -datura -daturas -daturic -daub -daube -daubed -dauber -dauberies -daubers -daubery -daubes -daubier -daubiest -daubing -daubries -daubry -daubs -dauby -daughter -daughterless -daughters -daunder -daundered -daundering -daunders -daunomycin -daunomycins -daunorubicin -daunorubicins -daunt -daunted -daunter -daunters -daunting -dauntingly -dauntless -dauntlessly -dauntlessness -dauntlessnesses -daunts -dauphin -dauphine -dauphines -dauphins -daut -dauted -dautie -dauties -dauting -dauts -daven -davened -davening -davenport -davenports -davens -davies -davit -davits -davy -daw -dawdle -dawdled -dawdler -dawdlers -dawdles -dawdling -dawed -dawen -dawing -dawk -dawks -dawn -dawned -dawning -dawnlike -dawns -daws -dawsonite -dawsonites -dawt -dawted -dawtie -dawties -dawting -dawts -day -daybed -daybeds -daybook -daybooks -daybreak -daybreaks -daydream -daydreamed -daydreamer -daydreamers -daydreaming -daydreamlike -daydreams -daydreamt -dayflies -dayflower -dayflowers -dayfly -dayglow -dayglows -daylight -daylighted -daylighting -daylightings -daylights -daylilies -daylily -daylit -daylong -daymare -daymares -dayroom -dayrooms -days -dayshift -dayshifts -dayside -daysides -daysman -daysmen -daystar -daystars -daytime -daytimes -daytrader -daytraders -daywork -dayworks -daze -dazed -dazedly -dazedness -dazednesses -dazes -dazing -dazzle -dazzled -dazzler -dazzlers -dazzles -dazzling -dazzlingly -de -deacidification -deacidifications -deacidified -deacidifies -deacidify -deacidifying -deacon -deaconed -deaconess -deaconesses -deaconing -deaconries -deaconry -deacons -deactivate -deactivated -deactivates -deactivating -deactivation -deactivations -deactivator -deactivators -dead -deadbeat -deadbeats -deadbolt -deadbolts -deaden -deadened -deadener -deadeners -deadening -deadeningly -deadenings -deadens -deader -deadest -deadeye -deadeyes -deadfall -deadfalls -deadhead -deadheaded -deadheading -deadheads -deadlier -deadliest -deadlift -deadlifted -deadlifting -deadlifts -deadlight -deadlights -deadline -deadlines -deadliness -deadlinesses -deadlock -deadlocked -deadlocking -deadlocks -deadly -deadness -deadnesses -deadpan -deadpanned -deadpanner -deadpanners -deadpanning -deadpans -deads -deadweight -deadweights -deadwood -deadwoods -deaerate -deaerated -deaerates -deaerating -deaeration -deaerations -deaerator -deaerators -deaf -deafen -deafened -deafening -deafeningly -deafens -deafer -deafest -deafish -deafly -deafness -deafnesses -deair -deaired -deairing -deairs -deal -dealate -dealated -dealates -dealation -dealations -dealer -dealers -dealership -dealerships -dealfish -dealfishes -dealing -dealings -deals -dealt -deaminase -deaminases -deaminate -deaminated -deaminates -deaminating -deamination -deaminations -dean -deaned -deaneries -deanery -deaning -deans -deanship -deanships -dear -dearer -dearest -dearie -dearies -dearly -dearness -dearnesses -dears -dearth -dearths -deary -deash -deashed -deashes -deashing -deasil -death -deathbed -deathbeds -deathblow -deathblows -deathcup -deathcups -deathful -deathless -deathlessly -deathlessness -deathlessnesses -deathlike -deathly -deaths -deathsman -deathsmen -deathtrap -deathtraps -deathwatch -deathwatches -deathy -deave -deaved -deaves -deaving -deb -debacle -debacles -debar -debark -debarkation -debarkations -debarked -debarking -debarks -debarment -debarments -debarred -debarring -debars -debase -debased -debasement -debasements -debaser -debasers -debases -debasing -debatable -debate -debated -debatement -debatements -debater -debaters -debates -debating -debauch -debauched -debauchee -debauchees -debaucher -debaucheries -debauchers -debauchery -debauches -debauching -debeak -debeaked -debeaking -debeaks -debenture -debentures -debilitate -debilitated -debilitates -debilitating -debilitation -debilitations -debilities -debility -debit -debited -debiting -debits -debonair -debonairly -debonairness -debonairnesses -debone -deboned -deboner -deboners -debones -deboning -debouch -debouche -debouched -debouches -debouching -debouchment -debouchments -debride -debrided -debridement -debridements -debrides -debriding -debrief -debriefed -debriefing -debriefings -debriefs -debris -debruise -debruised -debruises -debruising -debs -debt -debtless -debtor -debtors -debts -debug -debugged -debugger -debuggers -debugging -debugs -debunk -debunked -debunker -debunkers -debunking -debunks -debut -debutant -debutante -debutantes -debutants -debuted -debuting -debuts -debye -debyes -decadal -decade -decadence -decadences -decadencies -decadency -decadent -decadently -decadents -decades -decaf -decaffeinate -decaffeinated -decaffeinates -decaffeinating -decaffeination -decaffeinations -decafs -decagon -decagons -decagram -decagrams -decahedra -decahedron -decahedrons -decal -decalcification -decalcifications -decalcified -decalcifies -decalcify -decalcifying -decalcomania -decalcomanias -decaliter -decaliters -decalog -decalogs -decalogue -decalogues -decals -decameter -decameters -decamethonium -decamethoniums -decametric -decamp -decamped -decamping -decampment -decampments -decamps -decanal -decane -decanes -decant -decantation -decantations -decanted -decanter -decanters -decanting -decants -decapitate -decapitated -decapitates -decapitating -decapitation -decapitations -decapitator -decapitators -decapod -decapodan -decapodans -decapodous -decapods -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 -decare -decares -decasualization -decasualizations -decasyllabic -decasyllabics -decasyllable -decasyllables -decathlete -decathletes -decathlon -decathlons -decay -decayed -decayer -decayers -decaying -decays -decease -deceased -deceases -deceasing -decedent -decedents -deceit -deceitful -deceitfully -deceitfulness -deceitfulnesses -deceits -deceivable -deceive -deceived -deceiver -deceivers -deceives -deceiving -deceivingly -decelerate -decelerated -decelerates -decelerating -deceleration -decelerations -decelerator -decelerators -decemvir -decemviral -decemvirate -decemvirates -decemviri -decemvirs -decenaries -decenary -decencies -decency -decennia -decennial -decennially -decennials -decennium -decenniums -decent -decenter -decentered -decentering -decenters -decentest -decently -decentralization -decentralizations -decentralize -decentralized -decentralizes -decentralizing -decentre -decentred -decentres -decentring -deception -deceptional -deceptions -deceptive -deceptively -deceptiveness -deceptivenesses -decerebrate -decerebrated -decerebrates -decerebrating -decerebration -decerebrations -decern -decerned -decerning -decerns -decertification -decertifications -decertified -decertifies -decertify -decertifying -dechlorinate -dechlorinated -dechlorinates -dechlorinating -dechlorination -dechlorinations -deciare -deciares -decibel -decibels -decidabilities -decidability -decidable -decide -decided -decidedly -decidedness -decidednesses -decider -deciders -decides -deciding -decidua -deciduae -decidual -deciduas -deciduate -deciduous -deciduousness -deciduousnesses -decigram -decigrams -decile -deciles -deciliter -deciliters -decillion -decillions -decimal -decimalization -decimalizations -decimalize -decimalized -decimalizes -decimalizing -decimally -decimals -decimate -decimated -decimates -decimating -decimation -decimations -decimeter -decimeters -decipher -decipherable -deciphered -decipherer -decipherers -deciphering -decipherment -decipherments -deciphers -decision -decisional -decisioned -decisioning -decisions -decisive -decisively -decisiveness -decisivenesses -deck -decked -deckel -deckels -decker -deckers -deckhand -deckhands -deckhouse -deckhouses -decking -deckings -deckle -deckles -decks -declaim -declaimed -declaimer -declaimers -declaiming -declaims -declamation -declamations -declamatory -declarable -declarant -declarants -declaration -declarations -declarative -declaratively -declaratory -declare -declared -declarer -declarers -declares -declaring -declass -declasse -declassed -declasses -declassification -declassifications -declassified -declassifies -declassify -declassifying -declassing -declaw -declawed -declawing -declaws -declension -declensional -declensions -declinable -declination -declinational -declinations -decline -declined -decliner -decliners -declines -declining -declivities -declivitous -declivity -deco -decoct -decocted -decocting -decoction -decoctions -decocts -decode -decoded -decoder -decoders -decodes -decoding -decollate -decollated -decollates -decollating -decollation -decollations -decolletage -decolletages -decollete -decolletes -decolonization -decolonizations -decolonize -decolonized -decolonizes -decolonizing -decolor -decolored -decoloring -decolorization -decolorizations -decolorize -decolorized -decolorizer -decolorizers -decolorizes -decolorizing -decolors -decolour -decoloured -decolouring -decolours -decommission -decommissioned -decommissioning -decommissions -decompensate -decompensated -decompensates -decompensating -decompensation -decompensations -decomposabilities -decomposability -decomposable -decompose -decomposed -decomposer -decomposers -decomposes -decomposing -decomposition -decompositions -decompound -decompress -decompressed -decompresses -decompressing -decompression -decompressions -deconcentrate -deconcentrated -deconcentrates -deconcentrating -deconcentration -deconcentrations -decondition -deconditioned -deconditioning -deconditions -decongest -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 -decontrol -decontrolled -decontrolling -decontrols -decor -decorate -decorated -decorates -decorating -decoration -decorations -decorative -decoratively -decorativeness -decorativenesses -decorator -decorators -decorous -decorously -decorousness -decorousnesses -decors -decorticate -decorticated -decorticates -decorticating -decortication -decortications -decorticator -decorticators -decorum -decorums -decos -decoupage -decoupaged -decoupages -decoupaging -decouple -decoupled -decouples -decoupling -decoy -decoyed -decoyer -decoyers -decoying -decoys -decrease -decreased -decreases -decreasing -decreasingly -decree -decreed -decreeing -decreer -decreers -decrees -decrement -decremental -decremented -decrementing -decrements -decrepit -decrepitate -decrepitated -decrepitates -decrepitating -decrepitation -decrepitations -decrepitly -decrepitude -decrepitudes -decrescendo -decrescendos -decrescent -decretal -decretals -decretive -decretory -decrial -decrials -decried -decrier -decriers -decries -decriminalization -decriminalizations -decriminalize -decriminalized -decriminalizes -decriminalizing -decrown -decrowned -decrowning -decrowns -decry -decrying -decrypt -decrypted -decrypting -decryption -decryptions -decrypts -decuman -decumbent -decuple -decupled -decuples -decupling -decuries -decurion -decurions -decurrent -decurve -decurved -decurves -decurving -decury -decussate -decussated -decussates -decussating -decussation -decussations -dedal -dedans -dedicate -dedicated -dedicatedly -dedicatee -dedicatees -dedicates -dedicating -dedication -dedications -dedicator -dedicators -dedicatory -dedifferentiate -dedifferentiated -dedifferentiates -dedifferentiating -dedifferentiation -dedifferentiations -deduce -deduced -deduces -deducible -deducing -deduct -deducted -deductibilities -deductibility -deductible -deductibles -deducting -deduction -deductions -deductive -deductively -deducts -dee -deed -deeded -deedier -deediest -deeding -deedless -deeds -deedy -deejay -deejays -deem -deemed -deeming -deemphasize -deemphasized -deemphasizes -deemphasizing -deems -deemster -deemsters -deep -deepen -deepened -deepener -deepeners -deepening -deepens -deeper -deepest -deeply -deepness -deepnesses -deeps -deepwater -deer -deerberries -deerberry -deerflies -deerfly -deerhound -deerhounds -deerlike -deers -deerskin -deerskins -deerstalker -deerstalkers -deerweed -deerweeds -deeryard -deeryards -dees -deescalate -deescalated -deescalates -deescalating -deescalation -deescalations -deet -deets -deewan -deewans -deface -defaced -defacement -defacements -defacer -defacers -defaces -defacing -defalcate -defalcated -defalcates -defalcating -defalcation -defalcations -defalcator -defalcators -defamation -defamations -defamatory -defame -defamed -defamer -defamers -defames -defaming -defang -defanged -defanging -defangs -defat -defats -defatted -defatting -default -defaulted -defaulter -defaulters -defaulting -defaults -defeasance -defeasances -defeasibilities -defeasibility -defeasible -defeat -defeated -defeater -defeaters -defeating -defeatism -defeatisms -defeatist -defeatists -defeats -defeature -defeatures -defecate -defecated -defecates -defecating -defecation -defecations -defect -defected -defecting -defection -defections -defective -defectively -defectiveness -defectivenesses -defectives -defector -defectors -defects -defeminization -defeminizations -defeminize -defeminized -defeminizes -defeminizing -defence -defenceman -defencemen -defences -defend -defendable -defendant -defendants -defended -defender -defenders -defending -defends -defenestrate -defenestrated -defenestrates -defenestrating -defenestration -defenestrations -defense -defensed -defenseless -defenselessly -defenselessness -defenselessnesses -defenseman -defensemen -defenses -defensibilities -defensibility -defensible -defensibly -defensing -defensive -defensively -defensiveness -defensivenesses -defensives -defer -deference -deferences -deferent -deferential -deferentially -deferents -deferment -deferments -deferrable -deferrables -deferral -deferrals -deferred -deferrer -deferrers -deferring -defers -defervescence -defervescences -defi -defiance -defiances -defiant -defiantly -defibrillate -defibrillated -defibrillates -defibrillating -defibrillation -defibrillations -defibrillator -defibrillators -defibrinate -defibrinated -defibrinates -defibrinating -defibrination -defibrinations -deficiencies -deficiency -deficient -deficiently -deficients -deficit -deficits -defied -defier -defiers -defies -defilade -defiladed -defilades -defilading -defile -defiled -defilement -defilements -defiler -defilers -defiles -defiling -definable -definably -define -defined -definement -definements -definer -definers -defines -definienda -definiendum -definiens -definientia -defining -definite -definitely -definiteness -definitenesses -definition -definitional -definitions -definitive -definitively -definitiveness -definitivenesses -definitives -definitize -definitized -definitizes -definitizing -definitude -definitudes -defis -deflagrate -deflagrated -deflagrates -deflagrating -deflagration -deflagrations -deflate -deflated -deflater -deflaters -deflates -deflating -deflation -deflationary -deflations -deflator -deflators -deflea -defleaed -defleaing -defleas -deflect -deflectable -deflected -deflecting -deflection -deflections -deflective -deflector -deflectors -deflects -deflexed -defloration -deflorations -deflower -deflowered -deflowerer -deflowerers -deflowering -deflowers -defoam -defoamed -defoamer -defoamers -defoaming -defoams -defocus -defocused -defocuses -defocusing -defocussed -defocusses -defocussing -defog -defogged -defogger -defoggers -defogging -defogs -defoliant -defoliants -defoliate -defoliated -defoliates -defoliating -defoliation -defoliations -defoliator -defoliators -deforce -deforced -deforcement -deforcements -deforces -deforcing -deforest -deforestation -deforestations -deforested -deforesting -deforests -deform -deformable -deformalize -deformalized -deformalizes -deformalizing -deformation -deformational -deformations -deformative -deformed -deformer -deformers -deforming -deformities -deformity -deforms -defraud -defrauded -defrauder -defrauders -defrauding -defrauds -defray -defrayable -defrayal -defrayals -defrayed -defrayer -defrayers -defraying -defrays -defrock -defrocked -defrocking -defrocks -defrost -defrosted -defroster -defrosters -defrosting -defrosts -deft -defter -deftest -deftly -deftness -deftnesses -defunct -defund -defunded -defunding -defunds -defuse -defused -defuses -defusing -defuze -defuzed -defuzes -defuzing -defy -defying -degage -degame -degames -degami -degamis -degas -degases -degassed -degasser -degassers -degasses -degassing -degauss -degaussed -degausser -degaussers -degausses -degaussing -degeneracies -degeneracy -degenerate -degenerated -degenerately -degenerateness -degeneratenesses -degenerates -degenerating -degeneration -degenerations -degenerative -degerm -degermed -degerming -degerms -deglaciated -deglaciation -deglaciations -deglamorization -deglamorizations -deglamorize -deglamorized -deglamorizes -deglamorizing -deglaze -deglazed -deglazes -deglazing -deglutition -deglutitions -degradable -degradation -degradations -degradative -degrade -degraded -degradedly -degrader -degraders -degrades -degrading -degradingly -degranulation -degranulations -degrease -degreased -degreaser -degreasers -degreases -degreasing -degree -degreed -degrees -degressive -degressively -degringolade -degringolades -degum -degummed -degumming -degums -degust -degustation -degustations -degusted -degusting -degusts -dehisce -dehisced -dehiscence -dehiscences -dehiscent -dehisces -dehiscing -dehorn -dehorned -dehorner -dehorners -dehorning -dehorns -dehort -dehorted -dehorting -dehorts -dehumanization -dehumanizations -dehumanize -dehumanized -dehumanizes -dehumanizing -dehumidification -dehumidifications -dehumidified -dehumidifier -dehumidifiers -dehumidifies -dehumidify -dehumidifying -dehydrate -dehydrated -dehydrates -dehydrating -dehydration -dehydrations -dehydrator -dehydrators -dehydrochlorinase -dehydrochlorinases -dehydrochlorinate -dehydrochlorinated -dehydrochlorinates -dehydrochlorinating -dehydrochlorination -dehydrochlorinations -dehydrogenase -dehydrogenases -dehydrogenate -dehydrogenated -dehydrogenates -dehydrogenating -dehydrogenation -dehydrogenations -deice -deiced -deicer -deicers -deices -deicidal -deicide -deicides -deicing -deictic -deific -deifical -deification -deifications -deified -deifier -deifiers -deifies -deiform -deify -deifying -deign -deigned -deigning -deigns -deil -deils -deindustrialization -deindustrializations -deindustrialize -deindustrialized -deindustrializes -deindustrializing -deinonychus -deinonychuses -deinstitutionalization -deinstitutionalizations -deinstitutionalize -deinstitutionalized -deinstitutionalizes -deinstitutionalizing -deionization -deionizations -deionize -deionized -deionizer -deionizers -deionizes -deionizing -deism -deisms -deist -deistic -deistical -deistically -deists -deities -deity -deixis -deixises -deject -dejecta -dejected -dejectedly -dejectedness -dejectednesses -dejecting -dejection -dejections -dejects -dejeuner -dejeuners -dekagram -dekagrams -dekaliter -dekaliters -dekameter -dekameters -dekametric -dekare -dekares -deke -deked -dekes -deking -dekko -dekkos -del -delaine -delaines -delaminate -delaminated -delaminates -delaminating -delamination -delaminations -delate -delated -delates -delating -delation -delations -delator -delators -delay -delayed -delayer -delayers -delaying -delays -dele -delead -deleaded -deleading -deleads -deleave -deleaved -deleaves -deleaving -delectabilities -delectability -delectable -delectables -delectably -delectation -delectations -deled -delegable -delegacies -delegacy -delegate -delegated -delegatee -delegatees -delegates -delegating -delegation -delegations -delegator -delegators -delegitimation -delegitimations -deleing -deles -delete -deleted -deleterious -deleteriously -deleteriousness -deleteriousnesses -deletes -deleting -deletion -deletions -delf -delfs -delft -delfts -delftware -delftwares -deli -deliberate -deliberated -deliberately -deliberateness -deliberatenesses -deliberates -deliberating -deliberation -deliberations -deliberative -deliberatively -deliberativeness -deliberativenesses -delicacies -delicacy -delicate -delicately -delicates -delicatessen -delicatessens -delicious -deliciously -deliciousness -deliciousnesses -delict -delicts -delight -delighted -delightedly -delightedness -delightednesses -delighter -delighters -delightful -delightfully -delightfulness -delightfulnesses -delighting -delights -delightsome -delime -delimed -delimes -deliming -delimit -delimitation -delimitations -delimited -delimiter -delimiters -delimiting -delimits -delineate -delineated -delineates -delineating -delineation -delineations -delineative -delineator -delineators -delinquencies -delinquency -delinquent -delinquently -delinquents -deliquesce -deliquesced -deliquescence -deliquescences -deliquescent -deliquesces -deliquescing -deliria -delirious -deliriously -deliriousness -deliriousnesses -delirium -deliriums -delis -delist -delisted -delisting -delists -deliver -deliverabilities -deliverability -deliverable -deliverance -deliverances -delivered -deliverer -deliverers -deliveries -delivering -delivers -delivery -deliveryman -deliverymen -dell -dellies -dells -delly -delocalization -delocalizations -delocalize -delocalized -delocalizes -delocalizing -delouse -deloused -delouser -delousers -delouses -delousing -delphic -delphically -delphinium -delphiniums -dels -delt -delta -deltaic -deltas -deltic -deltoid -deltoidei -deltoideus -deltoids -delts -delude -deluded -deluder -deluders -deludes -deluding -deluge -deluged -deluges -deluging -delusion -delusional -delusionary -delusions -delusive -delusively -delusiveness -delusivenesses -delusory -deluster -delustered -delustering -delusters -deluxe -delve -delved -delver -delvers -delves -delving -demagnetization -demagnetizations -demagnetize -demagnetized -demagnetizer -demagnetizers -demagnetizes -demagnetizing -demagog -demagoged -demagogic -demagogically -demagogies -demagoging -demagogs -demagogue -demagogued -demagogueries -demagoguery -demagogues -demagoguing -demagogy -demand -demandable -demandant -demandants -demanded -demander -demanders -demanding -demandingly -demandingness -demandingnesses -demands -demantoid -demantoids -demarcate -demarcated -demarcates -demarcating -demarcation -demarcations -demarche -demarches -demark -demarked -demarking -demarks -demast -demasted -demasting -demasts -dematerialization -dematerializations -dematerialize -dematerialized -dematerializes -dematerializing -deme -demean -demeaned -demeaning -demeanor -demeanors -demeanour -demeanours -demeans -dement -demented -dementedly -dementedness -dementednesses -dementia -demential -dementias -dementing -dements -demerara -demeraras -demerge -demerged -demerger -demergered -demergering -demergers -demerges -demerging -demerit -demerited -demeriting -demerits -demersal -demes -demesne -demesnes -demeton -demetons -demies -demigod -demigoddess -demigoddesses -demigods -demijohn -demijohns -demilitarization -demilitarizations -demilitarize -demilitarized -demilitarizes -demilitarizing -demilune -demilunes -demimondaine -demimondaines -demimonde -demimondes -demineralization -demineralizations -demineralize -demineralized -demineralizer -demineralizers -demineralizes -demineralizing -demirep -demireps -demise -demised -demisemiquaver -demisemiquavers -demises -demising -demission -demissions -demit -demitasse -demitasses -demits -demitted -demitting -demiurge -demiurges -demiurgic -demiurgical -demivolt -demivolts -demiworld -demiworlds -demo -demob -demobbed -demobbing -demobilization -demobilizations -demobilize -demobilized -demobilizes -demobilizing -demobs -democracies -democracy -democrat -democratic -democratically -democratization -democratizations -democratize -democratized -democratizer -democratizers -democratizes -democratizing -democrats -demode -demoded -demodulate -demodulated -demodulates -demodulating -demodulation -demodulations -demodulator -demodulators -demoed -demographer -demographers -demographic -demographical -demographically -demographics -demographies -demography -demoing -demoiselle -demoiselles -demolish -demolished -demolisher -demolishers -demolishes -demolishing -demolishment -demolishments -demolition -demolitionist -demolitionists -demolitions -demon -demoness -demonesses -demonetization -demonetizations -demonetize -demonetized -demonetizes -demonetizing -demoniac -demoniacal -demoniacally -demoniacs -demonian -demonic -demonical -demonically -demonise -demonised -demonises -demonising -demonism -demonisms -demonist -demonists -demonization -demonizations -demonize -demonized -demonizes -demonizing -demonological -demonologies -demonologist -demonologists -demonology -demons -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 -demos -demoses -demote -demoted -demotes -demotic -demotics -demoting -demotion -demotions -demotist -demotists -demount -demountable -demounted -demounting -demounts -dempster -dempsters -demulcent -demulcents -demultiplexer -demultiplexers -demur -demure -demurely -demureness -demurenesses -demurer -demurest -demurrage -demurrages -demurral -demurrals -demurred -demurrer -demurrers -demurring -demurs -demy -demyelinating -demyelination -demyelinations -demystification -demystifications -demystified -demystifies -demystify -demystifying -demythologization -demythologizations -demythologize -demythologized -demythologizer -demythologizers -demythologizes -demythologizing -den -denar -denari -denarii -denarius -denars -denary -denationalization -denationalizations -denationalize -denationalized -denationalizes -denationalizing -denaturalization -denaturalizations -denaturalize -denaturalized -denaturalizes -denaturalizing -denaturant -denaturants -denaturation -denaturations -denature -denatured -denatures -denaturing -denazification -denazifications -denazified -denazifies -denazify -denazifying -dendriform -dendrite -dendrites -dendritic -dendrochronological -dendrochronologically -dendrochronologies -dendrochronologist -dendrochronologists -dendrochronology -dendrogram -dendrograms -dendroid -dendrologic -dendrological -dendrologies -dendrologist -dendrologists -dendrology -dendron -dendrons -dene -denegation -denegations -denervate -denervated -denervates -denervating -denervation -denervations -denes -dengue -dengues -deni -deniabilities -deniability -deniable -deniably -denial -denials -denied -denier -deniers -denies -denigrate -denigrated -denigrates -denigrating -denigration -denigrations -denigrative -denigrator -denigrators -denigratory -denim -denims -denitrification -denitrifications -denitrified -denitrifier -denitrifiers -denitrifies -denitrify -denitrifying -denizen -denizened -denizening -denizens -denned -denning -denominal -denominate -denominated -denominates -denominating -denomination -denominational -denominationalism -denominationalisms -denominations -denominative -denominatives -denominator -denominators -denotation -denotations -denotative -denote -denoted -denotement -denotements -denotes -denoting -denotive -denouement -denouements -denounce -denounced -denouncement -denouncements -denouncer -denouncers -denounces -denouncing -dens -dense -densely -denseness -densenesses -denser -densest -densification -densifications -densified -densifies -densify -densifying -densities -densitometer -densitometers -densitometric -densitometries -densitometry -density -dent -dental -dentalia -dentalium -dentaliums -dentally -dentals -dentate -dentated -dented -denticle -denticles -denticulate -denticulated -denticulation -denticulations -dentiform -dentifrice -dentifrices -dentil -dentiled -dentils -dentin -dentinal -dentine -dentines -denting -dentins -dentist -dentistries -dentistry -dentists -dentition -dentitions -dentoid -dents -dentulous -dentural -denture -dentures -denturist -denturists -denuclearization -denuclearizations -denuclearize -denuclearized -denuclearizes -denuclearizing -denudate -denudated -denudates -denudating -denudation -denudations -denude -denuded -denudement -denudements -denuder -denuders -denudes -denuding -denumerabilities -denumerability -denumerable -denumerably -denunciation -denunciations -denunciative -denunciatory -deny -denying -denyingly -deodand -deodands -deodar -deodara -deodaras -deodars -deodorant -deodorants -deodorization -deodorizations -deodorize -deodorized -deodorizer -deodorizers -deodorizes -deodorizing -deontic -deontological -deontologies -deontologist -deontologists -deontology -deorbit -deorbited -deorbiting -deorbits -deoxidation -deoxidations -deoxidize -deoxidized -deoxidizer -deoxidizers -deoxidizes -deoxidizing -deoxy -deoxygenate -deoxygenated -deoxygenates -deoxygenating -deoxygenation -deoxygenations -deoxyribonuclease -deoxyribonucleases -deoxyribonucleotide -deoxyribonucleotides -deoxyribose -deoxyriboses -depaint -depainted -depainting -depaints -depart -departed -departee -departees -departing -department -departmental -departmentalization -departmentalizations -departmentalize -departmentalized -departmentalizes -departmentalizing -departmentally -departments -departs -departure -departures -depauperate -depend -dependabilities -dependability -dependable -dependableness -dependablenesses -dependably -dependance -dependances -dependant -dependants -depended -dependence -dependences -dependencies -dependency -dependent -dependently -dependents -depending -depends -deperm -depermed -deperming -deperms -depersonalization -depersonalizations -depersonalize -depersonalized -depersonalizes -depersonalizing -dephosphorylate -dephosphorylated -dephosphorylates -dephosphorylating -dephosphorylation -dephosphorylations -depict -depicted -depicter -depicters -depicting -depiction -depictions -depictor -depictors -depicts -depigmentation -depigmentations -depilate -depilated -depilates -depilating -depilation -depilations -depilatories -depilatory -deplane -deplaned -deplanes -deplaning -depletable -deplete -depleted -depletes -depleting -depletion -depletions -depletive -deplorable -deplorableness -deplorablenesses -deplorably -deplore -deplored -deplorer -deplorers -deplores -deploring -deploringly -deploy -deployable -deployed -deploying -deployment -deployments -deploys -deplume -deplumed -deplumes -depluming -depolarization -depolarizations -depolarize -depolarized -depolarizer -depolarizers -depolarizes -depolarizing -depolish -depolished -depolishes -depolishing -depoliticization -depoliticizations -depoliticize -depoliticized -depoliticizes -depoliticizing -depolymerization -depolymerizations -depolymerize -depolymerized -depolymerizes -depolymerizing -depone -deponed -deponent -deponents -depones -deponing -depopulate -depopulated -depopulates -depopulating -depopulation -depopulations -deport -deportable -deportation -deportations -deported -deportee -deportees -deporting -deportment -deportments -deports -deposal -deposals -depose -deposed -deposer -deposers -deposes -deposing -deposit -depositaries -depositary -deposited -depositing -deposition -depositional -depositions -depositor -depositories -depositors -depository -deposits -depot -depots -depravation -depravations -deprave -depraved -depravedly -depravedness -depravednesses -depravement -depravements -depraver -depravers -depraves -depraving -depravities -depravity -deprecate -deprecated -deprecates -deprecating -deprecatingly -deprecation -deprecations -deprecatorily -deprecatory -depreciable -depreciate -depreciated -depreciates -depreciating -depreciatingly -depreciation -depreciations -depreciative -depreciator -depreciators -depreciatory -depredate -depredated -depredates -depredating -depredation -depredations -depredator -depredators -depredatory -depress -depressant -depressants -depressed -depresses -depressible -depressing -depressingly -depression -depressions -depressive -depressively -depressives -depressor -depressors -depressurization -depressurizations -depressurize -depressurized -depressurizes -depressurizing -deprival -deprivals -deprivation -deprivations -deprive -deprived -depriver -deprivers -deprives -depriving -deprogram -deprogramed -deprograming -deprogrammed -deprogrammer -deprogrammers -deprogramming -deprograms -depside -depsides -depth -depthless -depths -depurate -depurated -depurates -depurating -deputation -deputations -depute -deputed -deputes -deputies -deputing -deputization -deputizations -deputize -deputized -deputizes -deputizing -deputy -deracinate -deracinated -deracinates -deracinating -deracination -deracinations -deraign -deraigned -deraigning -deraigns -derail -derailed -derailing -derailleur -derailleurs -derailment -derailments -derails -derange -deranged -derangement -derangements -deranges -deranging -derat -derate -derated -derates -derating -derats -deratted -deratting -deray -derays -derbies -derby -dere -derealization -derealizations -deregulate -deregulated -deregulates -deregulating -deregulation -deregulations -derelict -dereliction -derelictions -derelicts -derepress -derepressed -derepresses -derepressing -derepression -derepressions -deride -derided -derider -deriders -derides -deriding -deridingly -deringer -deringers -derision -derisions -derisive -derisively -derisiveness -derisivenesses -derisory -derivable -derivate -derivates -derivation -derivational -derivations -derivative -derivatively -derivativeness -derivativenesses -derivatives -derivatization -derivatizations -derivatize -derivatized -derivatizes -derivatizing -derive -derived -deriver -derivers -derives -deriving -derm -derma -dermabrasion -dermabrasions -dermal -dermas -dermatitides -dermatitis -dermatitises -dermatogen -dermatogens -dermatoglyphic -dermatoglyphics -dermatologic -dermatological -dermatologies -dermatologist -dermatologists -dermatology -dermatomal -dermatome -dermatomes -dermatophyte -dermatophytes -dermatoses -dermatosis -dermestid -dermestids -dermic -dermis -dermises -dermoid -dermoids -derms -dernier -derogate -derogated -derogates -derogating -derogation -derogations -derogative -derogatively -derogatorily -derogatory -derrick -derricks -derriere -derrieres -derries -derringer -derringers -derris -derrises -derry -dervish -dervishes -desacralization -desacralizations -desacralize -desacralized -desacralizes -desacralizing -desalinate -desalinated -desalinates -desalinating -desalination -desalinations -desalinator -desalinators -desalinization -desalinizations -desalinize -desalinized -desalinizes -desalinizing -desalt -desalted -desalter -desalters -desalting -desalts -desand -desanded -desanding -desands -descant -descanted -descanting -descants -descend -descendant -descendants -descended -descendent -descendents -descender -descenders -descendible -descending -descends -descension -descensions -descent -descents -descramble -descrambled -descrambler -descramblers -descrambles -descrambling -describable -describe -described -describer -describers -describes -describing -descried -descrier -descriers -descries -description -descriptions -descriptive -descriptively -descriptiveness -descriptivenesses -descriptor -descriptors -descry -descrying -desecrate -desecrated -desecrater -desecraters -desecrates -desecrating -desecration -desecrations -desecrator -desecrators -desegregate -desegregated -desegregates -desegregating -desegregation -desegregations -deselect -deselected -deselecting -deselects -desensitization -desensitizations -desensitize -desensitized -desensitizer -desensitizers -desensitizes -desensitizing -desert -deserted -deserter -deserters -desertic -desertification -desertifications -deserting -desertion -desertions -deserts -deserve -deserved -deservedly -deservedness -deservednesses -deserver -deservers -deserves -deserving -deservings -desex -desexed -desexes -desexing -desexualization -desexualizations -desexualize -desexualized -desexualizes -desexualizing -deshabille -deshabilles -desiccant -desiccants -desiccate -desiccated -desiccates -desiccating -desiccation -desiccations -desiccative -desiccator -desiccators -desiderata -desiderate -desiderated -desiderates -desiderating -desideration -desiderations -desiderative -desideratum -design -designate -designated -designates -designating -designation -designations -designative -designator -designators -designatory -designed -designedly -designee -designees -designer -designers -designing -designment -designments -designs -desilver -desilvered -desilvering -desilvers -desinent -desipramine -desipramines -desirabilities -desirability -desirable -desirableness -desirablenesses -desirables -desirably -desire -desired -desirer -desirers -desires -desiring -desirous -desirously -desirousness -desirousnesses -desist -desistance -desistances -desisted -desisting -desists -desk -deskbound -deskman -deskmen -desks -desktop -desktops -desman -desmans -desmid -desmids -desmoid -desmoids -desmosomal -desmosome -desmosomes -desolate -desolated -desolately -desolateness -desolatenesses -desolater -desolaters -desolates -desolating -desolatingly -desolation -desolations -desolator -desolators -desorb -desorbed -desorbing -desorbs -desorption -desorptions -desoxy -despair -despaired -despairer -despairers -despairing -despairingly -despairs -despatch -despatched -despatches -despatching -desperado -desperadoes -desperados -desperate -desperately -desperateness -desperatenesses -desperation -desperations -despicable -despicableness -despicablenesses -despicably -despiritualize -despiritualized -despiritualizes -despiritualizing -despise -despised -despisement -despisements -despiser -despisers -despises -despising -despite -despited -despiteful -despitefully -despitefulness -despitefulnesses -despiteous -despiteously -despites -despiting -despoil -despoiled -despoiler -despoilers -despoiling -despoilment -despoilments -despoils -despoliation -despoliations -despond -desponded -despondence -despondences -despondencies -despondency -despondent -despondently -desponding -desponds -despot -despotic -despotically -despotism -despotisms -despots -desquamate -desquamated -desquamates -desquamating -desquamation -desquamations -dessert -desserts -dessertspoon -dessertspoonful -dessertspoonfuls -dessertspoons -dessertspoonsful -destabilization -destabilizations -destabilize -destabilized -destabilizes -destabilizing -destain -destained -destaining -destains -destination -destinations -destine -destined -destines -destinies -destining -destiny -destitute -destituteness -destitutenesses -destitution -destitutions -destrier -destriers -destroy -destroyed -destroyer -destroyers -destroying -destroys -destruct -destructed -destructibilities -destructibility -destructible -destructing -destruction -destructionist -destructionists -destructions -destructive -destructively -destructiveness -destructivenesses -destructivities -destructivity -destructs -desuetude -desuetudes -desugar -desugared -desugaring -desugars -desulfur -desulfured -desulfuring -desulfurization -desulfurizations -desulfurize -desulfurized -desulfurizes -desulfurizing -desulfurs -desultorily -desultoriness -desultorinesses -desultory -detach -detachabilities -detachability -detachable -detachably -detached -detachedly -detachedness -detachednesses -detacher -detachers -detaches -detaching -detachment -detachments -detail -detailed -detailedly -detailedness -detailednesses -detailer -detailers -detailing -details -detain -detained -detainee -detainees -detainer -detainers -detaining -detainment -detainments -detains -detassel -detasseled -detasseling -detasselled -detasselling -detassels -detect -detectabilities -detectability -detectable -detected -detecter -detecters -detecting -detection -detections -detective -detectivelike -detectives -detector -detectors -detects -detent -detente -detentes -detention -detentions -detents -deter -deterge -deterged -detergencies -detergency -detergent -detergents -deterger -detergers -deterges -deterging -deteriorate -deteriorated -deteriorates -deteriorating -deterioration -deteriorations -deteriorative -determent -determents -determinable -determinableness -determinablenesses -determinably -determinacies -determinacy -determinant -determinantal -determinants -determinate -determinately -determinateness -determinatenesses -determination -determinations -determinative -determinatives -determinator -determinators -determine -determined -determinedly -determinedness -determinednesses -determiner -determiners -determines -determining -determinism -determinisms -determinist -deterministic -deterministically -determinists -deterrabilities -deterrability -deterrable -deterred -deterrence -deterrences -deterrent -deterrently -deterrents -deterrer -deterrers -deterring -deters -detersive -detersives -detest -detestable -detestableness -detestablenesses -detestably -detestation -detestations -detested -detester -detesters -detesting -detests -dethrone -dethroned -dethronement -dethronements -dethroner -dethroners -dethrones -dethroning -detick -deticked -deticker -detickers -deticking -deticks -detinue -detinues -detonabilities -detonability -detonable -detonatable -detonate -detonated -detonates -detonating -detonation -detonations -detonative -detonator -detonators -detour -detoured -detouring -detours -detox -detoxed -detoxes -detoxicant -detoxicants -detoxicate -detoxicated -detoxicates -detoxicating -detoxication -detoxications -detoxification -detoxifications -detoxified -detoxifies -detoxify -detoxifying -detoxing -detract -detracted -detracting -detraction -detractions -detractive -detractively -detractor -detractors -detracts -detrain -detrained -detraining -detrainment -detrainments -detrains -detribalization -detribalizations -detribalize -detribalized -detribalizes -detribalizing -detriment -detrimental -detrimentally -detrimentals -detriments -detrital -detrition -detritions -detritus -detrude -detruded -detrudes -detruding -detumescence -detumescences -detumescent -deuce -deuced -deucedly -deuces -deucing -deuteragonist -deuteragonists -deuteranomalies -deuteranomalous -deuteranomaly -deuteranope -deuteranopes -deuteranopia -deuteranopias -deuteranopic -deuterate -deuterated -deuterates -deuterating -deuteration -deuterations -deuteric -deuterium -deuteriums -deuterocanonical -deuteron -deuterons -deuterostome -deuterostomes -deutoplasm -deutoplasms -deutzia -deutzias -dev -deva -devaluate -devaluated -devaluates -devaluating -devaluation -devaluations -devalue -devalued -devalues -devaluing -devas -devastate -devastated -devastates -devastating -devastatingly -devastation -devastations -devastative -devastator -devastators -devein -deveined -deveining -deveins -devel -develed -develing -develop -developable -develope -developed -developer -developers -developes -developing -development -developmental -developmentally -developments -develops -devels -deverbal -deverbative -deverbatives -devest -devested -devesting -devests -deviance -deviances -deviancies -deviancy -deviant -deviants -deviate -deviated -deviates -deviating -deviation -deviationism -deviationisms -deviationist -deviationists -deviations -deviator -deviators -deviatory -device -devices -devil -deviled -devilfish -devilfishes -deviling -devilish -devilishly -devilishness -devilishnesses -devilkin -devilkins -devilled -devilling -devilment -devilments -devilries -devilry -devils -deviltries -deviltry -devilwood -devilwoods -devious -deviously -deviousness -deviousnesses -devisable -devisal -devisals -devise -devised -devisee -devisees -deviser -devisers -devises -devising -devisor -devisors -devitalize -devitalized -devitalizes -devitalizing -devitrification -devitrifications -devitrified -devitrifies -devitrify -devitrifying -devocalize -devocalized -devocalizes -devocalizing -devoice -devoiced -devoices -devoicing -devoid -devoir -devoirs -devolution -devolutionary -devolutionist -devolutionists -devolutions -devolve -devolved -devolves -devolving -devon -devons -devote -devoted -devotedly -devotedness -devotednesses -devotee -devotees -devotement -devotements -devotes -devoting -devotion -devotional -devotionally -devotionals -devotions -devour -devoured -devourer -devourers -devouring -devours -devout -devouter -devoutest -devoutly -devoutness -devoutnesses -devs -dew -dewan -dewans -dewar -dewars -dewater -dewatered -dewaterer -dewaterers -dewatering -dewaters -dewax -dewaxed -dewaxes -dewaxing -dewberries -dewberry -dewclaw -dewclaws -dewdrop -dewdrops -dewed -dewfall -dewfalls -dewier -dewiest -dewily -dewiness -dewinesses -dewing -dewlap -dewlapped -dewlaps -dewless -dewool -dewooled -dewooling -dewools -deworm -dewormed -dewormer -dewormers -deworming -deworms -dews -dewy -dex -dexamethasone -dexamethasones -dexes -dexie -dexies -dexter -dexterities -dexterity -dexterous -dexterously -dexterousness -dexterousnesses -dextral -dextran -dextranase -dextranases -dextrans -dextrin -dextrine -dextrines -dextrins -dextro -dextroamphetamine -dextroamphetamines -dextrorotary -dextrorotatory -dextrose -dextroses -dextrous -dexy -dey -deys -dezinc -dezinced -dezincing -dezincked -dezincking -dezincs -dhak -dhaks -dhal -dhals -dharma -dharmas -dharmic -dharna -dharnas -dhobi -dhobis -dhole -dholes -dhoolies -dhooly -dhoora -dhooras -dhooti -dhootie -dhooties -dhootis -dhoti -dhotis -dhourra -dhourras -dhow -dhows -dhurna -dhurnas -dhurrie -dhurries -dhuti -dhutis -diabase -diabases -diabasic -diabetes -diabetic -diabetics -diabetogenic -diabetologist -diabetologists -diablerie -diableries -diablery -diabolic -diabolical -diabolically -diabolicalness -diabolicalnesses -diabolism -diabolisms -diabolist -diabolists -diabolize -diabolized -diabolizes -diabolizing -diabolo -diabolos -diacetyl -diacetyls -diachronic -diachronically -diachronies -diachrony -diacid -diacidic -diacids -diaconal -diaconate -diaconates -diacritic -diacritical -diacritics -diadelphous -diadem -diademed -diademing -diadems -diadromous -diaereses -diaeresis -diaeretic -diageneses -diagenesis -diagenetic -diagenetically -diageotropic -diagnosable -diagnose -diagnoseable -diagnosed -diagnoses -diagnosing -diagnosis -diagnostic -diagnostical -diagnostically -diagnostician -diagnosticians -diagnostics -diagonal -diagonalizable -diagonalization -diagonalizations -diagonalize -diagonalized -diagonalizes -diagonalizing -diagonally -diagonals -diagram -diagramed -diagraming -diagrammable -diagrammatic -diagrammatical -diagrammatically -diagrammed -diagramming -diagrams -diagraph -diagraphs -diakineses -diakinesis -dial -dialect -dialectal -dialectally -dialectic -dialectical -dialectically -dialectician -dialecticians -dialectics -dialectological -dialectologically -dialectologies -dialectologist -dialectologists -dialectology -dialects -dialed -dialer -dialers -dialing -dialings -dialist -dialists -diallage -diallages -dialled -diallel -dialler -diallers -dialling -diallings -diallist -diallists -dialog -dialoged -dialoger -dialogers -dialogic -dialogical -dialogically -dialoging -dialogist -dialogistic -dialogists -dialogs -dialogue -dialogued -dialogues -dialoguing -dials -dialysate -dialysates -dialyse -dialysed -dialyser -dialysers -dialyses -dialysing -dialysis -dialytic -dialyzable -dialyzate -dialyzates -dialyze -dialyzed -dialyzer -dialyzers -dialyzes -dialyzing -diamagnetic -diamagnetism -diamagnetisms -diamante -diamantes -diameter -diameters -diametral -diametric -diametrical -diametrically -diamide -diamides -diamin -diamine -diamines -diamins -diamond -diamondback -diamondbacks -diamonded -diamondiferous -diamonding -diamonds -dianthus -dianthuses -diapason -diapasons -diapause -diapaused -diapauses -diapausing -diapedeses -diapedesis -diaper -diapered -diapering -diapers -diaphaneities -diaphaneity -diaphanous -diaphanously -diaphanousness -diaphanousnesses -diaphone -diaphones -diaphonies -diaphony -diaphorase -diaphorases -diaphoreses -diaphoresis -diaphoretic -diaphoretics -diaphragm -diaphragmatic -diaphragmatically -diaphragms -diaphyseal -diaphyses -diaphysial -diaphysis -diapir -diapiric -diapirs -diapositive -diapositives -diapsid -diarchic -diarchies -diarchy -diaries -diarist -diarists -diarrhea -diarrheal -diarrheas -diarrheic -diarrhetic -diarrhoea -diarrhoeas -diarthroses -diarthrosis -diary -diaspora -diasporas -diaspore -diaspores -diastase -diastases -diastatic -diastem -diastema -diastemata -diastems -diaster -diastereoisomer -diastereoisomeric -diastereoisomerism -diastereoisomerisms -diastereoisomers -diastereomer -diastereomeric -diastereomers -diasters -diastole -diastoles -diastolic -diastral -diastrophic -diastrophically -diastrophism -diastrophisms -diatessaron -diatessarons -diathermanous -diathermic -diathermies -diathermy -diatheses -diathesis -diathetic -diatom -diatomaceous -diatomic -diatomite -diatomites -diatoms -diatonic -diatonically -diatribe -diatribes -diatron -diatrons -diazepam -diazepams -diazin -diazine -diazines -diazinon -diazinons -diazins -diazo -diazole -diazoles -diazonium -diazoniums -diazotization -diazotizations -diazotize -diazotized -diazotizes -diazotizing -dib -dibasic -dibbed -dibber -dibbers -dibbing -dibble -dibbled -dibbler -dibblers -dibbles -dibbling -dibbuk -dibbukim -dibbuks -dibenzofuran -dibenzofurans -dibs -dicarboxylic -dicast -dicastic -dicasts -dice -diced -dicentra -dicentras -dicentric -dicentrics -dicer -dicers -dices -dicey -dichasia -dichasium -dichlorobenzene -dichlorobenzenes -dichlorodifluoromethane -dichlorodifluoromethanes -dichloroethane -dichloroethanes -dichlorvos -dichlorvoses -dichogamies -dichogamous -dichogamy -dichondra -dichondras -dichotic -dichotically -dichotomies -dichotomist -dichotomists -dichotomization -dichotomizations -dichotomize -dichotomized -dichotomizes -dichotomizing -dichotomous -dichotomously -dichotomousness -dichotomousnesses -dichotomy -dichroic -dichroism -dichroisms -dichromat -dichromate -dichromates -dichromatic -dichromatism -dichromatisms -dichromats -dichroscope -dichroscopes -dicier -diciest -dicing -dick -dickcissel -dickcissels -dicked -dickens -dickenses -dicker -dickered -dickering -dickers -dickey -dickeys -dickie -dickier -dickies -dickiest -dicking -dicks -dicky -dickys -diclinies -diclinous -dicliny -dicot -dicots -dicotyl -dicotyledon -dicotyledonous -dicotyledons -dicotyls -dicoumarin -dicoumarins -dicoumarol -dicoumarols -dicrotal -dicrotic -dicrotism -dicrotisms -dicta -dictate -dictated -dictates -dictating -dictation -dictations -dictator -dictatorial -dictatorially -dictatorialness -dictatorialnesses -dictators -dictatorship -dictatorships -dictier -dictiest -diction -dictional -dictionally -dictionaries -dictionary -dictions -dictum -dictums -dicty -dictyosome -dictyosomes -dictyostele -dictyosteles -dicumarol -dicumarols -dicyclic -dicyclies -dicycly -dicynodont -dicynodonts -did -didact -didactic -didactical -didactically -didacticism -didacticisms -didactics -didacts -didactyl -didapper -didappers -diddle -diddled -diddler -diddlers -diddles -diddley -diddleys -diddlies -diddling -diddly -diddlysquat -didgeridoo -didgeridoos -didie -didies -didjeridoo -didjeridoos -dido -didoes -didos -didst -didy -didymium -didymiums -didymous -didynamies -didynamy -die -dieback -diebacks -diecious -died -dieffenbachia -dieffenbachias -diehard -diehards -dieing -diel -dieldrin -dieldrins -dielectric -dielectrics -diemaker -diemakers -diencephala -diencephalic -diencephalon -diencephalons -diene -dienes -diereses -dieresis -dieretic -dies -diesel -dieseled -dieseling -dieselings -dieselization -dieselizations -dieselize -dieselized -dieselizes -dieselizing -diesels -dieses -diesis -diester -diesters -diestock -diestocks -diestrous -diestrum -diestrums -diestrus -diestruses -diet -dietaries -dietarily -dietary -dieted -dieter -dieters -dietetic -dietetically -dietetics -diether -diethers -diethylcarbamazine -diethylcarbamazines -diethylstilbestrol -diethylstilbestrols -dietician -dieticians -dieting -dietitian -dietitians -diets -differ -differed -difference -differenced -differences -differencing -different -differentia -differentiabilities -differentiability -differentiable -differentiae -differential -differentially -differentials -differentiate -differentiated -differentiates -differentiating -differentiation -differentiations -differently -differentness -differentnesses -differing -differs -difficile -difficult -difficulties -difficultly -difficulty -diffidence -diffidences -diffident -diffidently -diffract -diffracted -diffracting -diffraction -diffractions -diffractometer -diffractometers -diffractometric -diffractometries -diffractometry -diffracts -diffuse -diffused -diffusely -diffuseness -diffusenesses -diffuser -diffusers -diffuses -diffusible -diffusing -diffusion -diffusional -diffusionism -diffusionisms -diffusionist -diffusionists -diffusions -diffusive -diffusively -diffusiveness -diffusivenesses -diffusivities -diffusivity -diffusor -diffusors -difunctional -dig -digamies -digamist -digamists -digamma -digammas -digamous -digamy -digastric -digenetic -digest -digested -digester -digesters -digestibilities -digestibility -digestible -digesting -digestion -digestions -digestive -digestively -digestives -digestor -digestors -digests -digged -digger -diggers -digging -diggings -dight -dighted -dighting -dights -digit -digital -digitalin -digitalins -digitalis -digitalises -digitalization -digitalizations -digitalize -digitalized -digitalizes -digitalizing -digitally -digitals -digitate -digitately -digitigrade -digitization -digitizations -digitize -digitized -digitizer -digitizers -digitizes -digitizing -digitonin -digitonins -digitoxigenin -digitoxigenins -digitoxin -digitoxins -digits -diglot -diglots -diglyceride -diglycerides -dignified -dignifies -dignify -dignifying -dignitaries -dignitary -dignities -dignity -digoxin -digoxins -digraph -digraphic -digraphically -digraphs -digress -digressed -digresses -digressing -digression -digressional -digressionary -digressions -digressive -digressively -digressiveness -digressivenesses -digs -dihedral -dihedrals -dihedron -dihedrons -dihybrid -dihybrids -dihydric -dihydroergotamine -dihydroergotamines -dihydroxyacetone -dihydroxyacetones -dikdik -dikdiks -dike -diked -diker -dikers -dikes -dikey -diking -diktat -diktats -dilapidate -dilapidated -dilapidates -dilapidating -dilapidation -dilapidations -dilatabilities -dilatability -dilatable -dilatancies -dilatancy -dilatant -dilatants -dilatate -dilatation -dilatational -dilatations -dilate -dilated -dilater -dilaters -dilates -dilating -dilation -dilations -dilative -dilatometer -dilatometers -dilatometric -dilatometries -dilatometry -dilator -dilatorily -dilatoriness -dilatorinesses -dilators -dilatory -dildo -dildoe -dildoes -dildos -dilemma -dilemmas -dilemmatic -dilemmic -dilettante -dilettantes -dilettanti -dilettantish -dilettantism -dilettantisms -diligence -diligences -diligent -diligently -dill -dilled -dillies -dills -dilly -dillydallied -dillydallies -dillydally -dillydallying -diluent -diluents -dilute -diluted -diluteness -dilutenesses -diluter -diluters -dilutes -diluting -dilution -dilutions -dilutive -dilutor -dilutors -diluvia -diluvial -diluvian -diluvion -diluvions -diluvium -diluviums -dim -dime -dimenhydrinate -dimenhydrinates -dimension -dimensional -dimensionalities -dimensionality -dimensionally -dimensioned -dimensioning -dimensionless -dimensions -dimer -dimercaprol -dimercaprols -dimeric -dimerism -dimerisms -dimerization -dimerizations -dimerize -dimerized -dimerizes -dimerizing -dimerous -dimers -dimes -dimeter -dimeters -dimethoate -dimethoates -dimethyl -dimethylhydrazine -dimethylhydrazines -dimethylnitrosamine -dimethylnitrosamines -dimethyls -dimethyltryptamine -dimethyltryptamines -dimetric -diminish -diminishable -diminished -diminishes -diminishing -diminishment -diminishments -diminuendo -diminuendos -diminution -diminutions -diminutive -diminutively -diminutiveness -diminutivenesses -diminutives -dimities -dimity -dimly -dimmable -dimmed -dimmer -dimmers -dimmest -dimming -dimness -dimnesses -dimorph -dimorphic -dimorphism -dimorphisms -dimorphous -dimorphs -dimout -dimouts -dimple -dimpled -dimples -dimplier -dimpliest -dimpling -dimply -dims -dimwit -dimwits -dimwitted -din -dinar -dinars -dindle -dindled -dindles -dindling -dine -dined -diner -dineric -dinero -dineros -diners -dines -dinette -dinettes -ding -dingbat -dingbats -dingdong -dingdonged -dingdonging -dingdongs -dinge -dinged -dinger -dingers -dinges -dingey -dingeys -dinghies -dinghy -dingier -dingies -dingiest -dingily -dinginess -dinginesses -dinging -dingle -dingleberries -dingleberry -dingles -dingo -dingoes -dings -dingus -dinguses -dingy -dining -dinitro -dinitrobenzene -dinitrobenzenes -dinitrophenol -dinitrophenols -dink -dinked -dinkey -dinkeys -dinkier -dinkies -dinkiest -dinking -dinkly -dinks -dinkum -dinkums -dinky -dinned -dinner -dinnerless -dinners -dinnertime -dinnertimes -dinnerware -dinnerwares -dinning -dinoflagellate -dinoflagellates -dinosaur -dinosaurian -dinosaurs -dins -dint -dinted -dinting -dints -dinucleotide -dinucleotides -diobol -diobolon -diobolons -diobols -diocesan -diocesans -diocese -dioceses -diode -diodes -dioecies -dioecious -dioecism -dioecisms -dioecy -dioicous -diol -diolefin -diolefins -diols -diopside -diopsides -diopsidic -dioptase -dioptases -diopter -diopters -dioptral -dioptre -dioptres -dioptric -diorama -dioramas -dioramic -diorite -diorites -dioritic -dioxan -dioxane -dioxanes -dioxans -dioxid -dioxide -dioxides -dioxids -dioxin -dioxins -dip -dipeptidase -dipeptidases -dipeptide -dipeptides -diphase -diphasic -diphenhydramine -diphenhydramines -diphenyl -diphenylamine -diphenylamines -diphenylhydantoin -diphenylhydantoins -diphenyls -diphosgene -diphosgenes -diphosphate -diphosphates -diphtheria -diphtherial -diphtherias -diphtheritic -diphtheroid -diphtheroids -diphthong -diphthongal -diphthongization -diphthongizations -diphthongize -diphthongized -diphthongizes -diphthongizing -diphthongs -diphyletic -diphyodont -diplegia -diplegias -diplex -diplexer -diplexers -diploblastic -diplococci -diplococcus -diplodocus -diplodocuses -diploe -diploes -diploic -diploid -diploidies -diploids -diploidy -diploma -diplomacies -diplomacy -diplomaed -diplomaing -diplomas -diplomat -diplomata -diplomate -diplomates -diplomatic -diplomatically -diplomatist -diplomatists -diplomats -diplont -diplontic -diplonts -diplophase -diplophases -diplopia -diplopias -diplopic -diplopod -diplopods -diploses -diplosis -diplotene -diplotenes -dipnet -dipnets -dipnetted -dipnetting -dipnoan -dipnoans -dipodic -dipodies -dipody -dipolar -dipole -dipoles -dippable -dipped -dipper -dipperful -dipperfuls -dippers -dippier -dippiest -dipping -dippy -dips -dipsades -dipsas -dipso -dipsomania -dipsomaniac -dipsomaniacal -dipsomaniacs -dipsomanias -dipsos -dipstick -dipsticks -dipt -diptera -dipteral -dipteran -dipterans -dipterocarp -dipterocarps -dipteron -dipterous -diptyca -diptycas -diptych -diptychs -diquat -diquats -dirdum -dirdums -dire -direct -directed -directedness -directednesses -directer -directest -directing -direction -directional -directionalities -directionality -directionless -directionlessness -directionlessnesses -directions -directive -directives -directivities -directivity -directly -directness -directnesses -director -directorate -directorates -directorial -directories -directors -directorship -directorships -directory -directress -directresses -directrice -directrices -directrix -directrixes -directs -direful -direfully -direly -direness -direnesses -direr -direst -dirge -dirgeful -dirgelike -dirges -dirham -dirhams -dirigible -dirigibles -dirigisme -dirigismes -dirigiste -diriment -dirk -dirked -dirking -dirks -dirl -dirled -dirling -dirls -dirndl -dirndls -dirt -dirtbag -dirtbags -dirtied -dirtier -dirties -dirtiest -dirtily -dirtiness -dirtinesses -dirts -dirty -dirtying -dis -disabilities -disability -disable -disabled -disablement -disablements -disables -disabling -disabuse -disabused -disabuses -disabusing -disaccharidase -disaccharidases -disaccharide -disaccharides -disaccord -disaccorded -disaccording -disaccords -disaccustom -disaccustomed -disaccustoming -disaccustoms -disadvantage -disadvantaged -disadvantagedness -disadvantagednesses -disadvantageous -disadvantageously -disadvantageousness -disadvantageousnesses -disadvantages -disadvantaging -disaffect -disaffected -disaffecting -disaffection -disaffections -disaffects -disaffiliate -disaffiliated -disaffiliates -disaffiliating -disaffiliation -disaffiliations -disaffirm -disaffirmance -disaffirmances -disaffirmed -disaffirming -disaffirms -disaggregate -disaggregated -disaggregates -disaggregating -disaggregation -disaggregations -disaggregative -disagree -disagreeable -disagreeableness -disagreeablenesses -disagreeably -disagreed -disagreeing -disagreement -disagreements -disagrees -disallow -disallowance -disallowances -disallowed -disallowing -disallows -disambiguate -disambiguated -disambiguates -disambiguating -disambiguation -disambiguations -disannul -disannulled -disannulling -disannuls -disappear -disappearance -disappearances -disappeared -disappearing -disappears -disappoint -disappointed -disappointedly -disappointing -disappointingly -disappointment -disappointments -disappoints -disapprobation -disapprobations -disapproval -disapprovals -disapprove -disapproved -disapprover -disapprovers -disapproves -disapproving -disapprovingly -disarm -disarmament -disarmaments -disarmed -disarmer -disarmers -disarming -disarmingly -disarms -disarrange -disarranged -disarrangement -disarrangements -disarranges -disarranging -disarray -disarrayed -disarraying -disarrays -disarticulate -disarticulated -disarticulates -disarticulating -disarticulation -disarticulations -disassemble -disassembled -disassembles -disassemblies -disassembling -disassembly -disassociate -disassociated -disassociates -disassociating -disassociation -disassociations -disaster -disasters -disastrous -disastrously -disavow -disavowable -disavowal -disavowals -disavowed -disavowing -disavows -disband -disbanded -disbanding -disbandment -disbandments -disbands -disbar -disbarment -disbarments -disbarred -disbarring -disbars -disbelief -disbeliefs -disbelieve -disbelieved -disbeliever -disbelievers -disbelieves -disbelieving -disbenefit -disbenefits -disbosom -disbosomed -disbosoming -disbosoms -disbound -disbowel -disboweled -disboweling -disbowelled -disbowelling -disbowels -disbud -disbudded -disbudding -disbuds -disburden -disburdened -disburdening -disburdenment -disburdenments -disburdens -disburse -disbursed -disbursement -disbursements -disburser -disbursers -disburses -disbursing -disc -discalced -discant -discanted -discanting -discants -discard -discardable -discarded -discarder -discarders -discarding -discards -discarnate -discase -discased -discases -discasing -disced -discept -discepted -discepting -discepts -discern -discernable -discerned -discerner -discerners -discernible -discernibly -discerning -discerningly -discernment -discernments -discerns -discharge -dischargeable -discharged -dischargee -dischargees -discharger -dischargers -discharges -discharging -disci -disciform -discing -disciple -discipled -disciples -discipleship -discipleships -disciplinable -disciplinal -disciplinarian -disciplinarians -disciplinarily -disciplinarities -disciplinarity -disciplinary -discipline -disciplined -discipliner -discipliners -disciplines -discipling -disciplining -disclaim -disclaimed -disclaimer -disclaimers -disclaiming -disclaims -disclamation -disclamations -disclike -disclimax -disclimaxes -disclose -disclosed -discloser -disclosers -discloses -disclosing -disclosure -disclosures -disco -discoed -discographer -discographers -discographic -discographical -discographies -discography -discoid -discoidal -discoids -discoing -discolor -discoloration -discolorations -discolored -discoloring -discolors -discombobulate -discombobulated -discombobulates -discombobulating -discombobulation -discombobulations -discomfit -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 -discord -discordance -discordances -discordancies -discordancy -discordant -discordantly -discorded -discording -discords -discos -discotheque -discotheques -discount -discountable -discounted -discountenance -discountenanced -discountenances -discountenancing -discounter -discounters -discounting -discounts -discourage -discourageable -discouraged -discouragement -discouragements -discourager -discouragers -discourages -discouraging -discouragingly -discourse -discoursed -discourser -discoursers -discourses -discoursing -discourteous -discourteously -discourteousness -discourteousnesses -discourtesies -discourtesy -discover -discoverable -discovered -discoverer -discoverers -discoveries -discovering -discovers -discovery -discredit -discreditable -discreditably -discredited -discrediting -discredits -discreet -discreeter -discreetest -discreetly -discreetness -discreetnesses -discrepancies -discrepancy -discrepant -discrepantly -discrete -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 -discrown -discrowned -discrowning -discrowns -discs -discursive -discursively -discursiveness -discursivenesses -discus -discuses -discuss -discussable -discussant -discussants -discussed -discusser -discussers -discusses -discussible -discussing -discussion -discussions -disdain -disdained -disdainful -disdainfully -disdainfulness -disdainfulnesses -disdaining -disdains -disease -diseased -diseases -diseasing -diseconomies -diseconomy -disembark -disembarkation -disembarkations -disembarked -disembarking -disembarks -disembarrass -disembarrassed -disembarrasses -disembarrassing -disembodied -disembodies -disembody -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 -disendow -disendowed -disendower -disendowers -disendowing -disendowment -disendowments -disendows -disenfranchise -disenfranchised -disenfranchisement -disenfranchisements -disenfranchises -disenfranchising -disengage -disengaged -disengagement -disengagements -disengages -disengaging -disentail -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 -disesteem -disesteemed -disesteeming -disesteems -diseuse -diseuses -disfavor -disfavored -disfavoring -disfavors -disfigure -disfigured -disfigurement -disfigurements -disfigures -disfiguring -disfranchise -disfranchised -disfranchisement -disfranchisements -disfranchises -disfranchising -disfrock -disfrocked -disfrocking -disfrocks -disfunction -disfunctional -disfunctions -disfurnish -disfurnished -disfurnishes -disfurnishing -disfurnishment -disfurnishments -disgorge -disgorged -disgorges -disgorging -disgrace -disgraced -disgraceful -disgracefully -disgracefulness -disgracefulnesses -disgracer -disgracers -disgraces -disgracing -disgruntle -disgruntled -disgruntlement -disgruntlements -disgruntles -disgruntling -disguise -disguised -disguisedly -disguisement -disguisements -disguiser -disguisers -disguises -disguising -disgust -disgusted -disgustedly -disgustful -disgustfully -disgusting -disgustingly -disgusts -dish -dishabille -dishabilles -disharmonies -disharmonious -disharmonize -disharmonized -disharmonizes -disharmonizing -disharmony -dishcloth -dishcloths -dishclout -dishclouts -dishearten -disheartened -disheartening -dishearteningly -disheartenment -disheartenments -disheartens -dished -dishelm -dishelmed -dishelming -dishelms -disherit -disherited -disheriting -disherits -dishes -dishevel -disheveled -disheveling -dishevelled -dishevelling -dishevels -dishful -dishfuls -dishier -dishiest -dishing -dishlike -dishonest -dishonesties -dishonestly -dishonesty -dishonor -dishonorable -dishonorableness -dishonorablenesses -dishonorably -dishonored -dishonorer -dishonorers -dishonoring -dishonors -dishpan -dishpans -dishrag -dishrags -dishtowel -dishtowels -dishware -dishwares -dishwasher -dishwashers -dishwater -dishwaters -dishy -disillusion -disillusioned -disillusioning -disillusionment -disillusionments -disillusions -disincentive -disincentives -disinclination -disinclinations -disincline -disinclined -disinclines -disinclining -disinfect -disinfectant -disinfectants -disinfected -disinfecting -disinfection -disinfections -disinfects -disinfest -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 -disinter -disinterest -disinterested -disinterestedly -disinterestedness -disinterestednesses -disinteresting -disinterests -disintermediation -disintermediations -disinterment -disinterments -disinterred -disinterring -disinters -disintoxicate -disintoxicated -disintoxicates -disintoxicating -disintoxication -disintoxications -disinvest -disinvested -disinvesting -disinvestment -disinvestments -disinvests -disinvite -disinvited -disinvites -disinviting -disject -disjected -disjecting -disjects -disjoin -disjoined -disjoining -disjoins -disjoint -disjointed -disjointedly -disjointedness -disjointednesses -disjointing -disjoints -disjunct -disjunction -disjunctions -disjunctive -disjunctively -disjunctives -disjuncts -disjuncture -disjunctures -disk -disked -diskette -diskettes -disking -disklike -disks -dislikable -dislike -dislikeable -disliked -disliker -dislikers -dislikes -disliking -dislimn -dislimned -dislimning -dislimns -dislocate -dislocated -dislocates -dislocating -dislocation -dislocations -dislodge -dislodged -dislodgement -dislodgements -dislodges -dislodging -dislodgment -dislodgments -disloyal -disloyally -disloyalties -disloyalty -dismal -dismaler -dismalest -dismally -dismalness -dismalnesses -dismals -dismantle -dismantled -dismantlement -dismantlements -dismantles -dismantling -dismast -dismasted -dismasting -dismasts -dismay -dismayed -dismaying -dismayingly -dismays -disme -dismember -dismembered -dismembering -dismemberment -dismemberments -dismembers -dismes -dismiss -dismissal -dismissals -dismissed -dismisses -dismissing -dismission -dismissions -dismissive -dismissively -dismount -dismounted -dismounting -dismounts -disobedience -disobediences -disobedient -disobediently -disobey -disobeyed -disobeyer -disobeyers -disobeying -disobeys -disoblige -disobliged -disobliges -disobliging -disomic -disorder -disordered -disorderedly -disorderedness -disorderednesses -disordering -disorderliness -disorderlinesses -disorderly -disorders -disorganization -disorganizations -disorganize -disorganized -disorganizes -disorganizing -disorient -disorientate -disorientated -disorientates -disorientating -disorientation -disorientations -disoriented -disorienting -disorients -disown -disowned -disowning -disownment -disownments -disowns -disparage -disparaged -disparagement -disparagements -disparager -disparagers -disparages -disparaging -disparagingly -disparate -disparately -disparateness -disparatenesses -disparities -disparity -dispart -disparted -disparting -disparts -dispassion -dispassionate -dispassionately -dispassionateness -dispassionatenesses -dispassions -dispatch -dispatched -dispatcher -dispatchers -dispatches -dispatching -dispel -dispelled -dispelling -dispels -dispend -dispended -dispending -dispends -dispensabilities -dispensability -dispensable -dispensaries -dispensary -dispensation -dispensational -dispensations -dispensatories -dispensatory -dispense -dispensed -dispenser -dispensers -dispenses -dispensing -dispeople -dispeopled -dispeoples -dispeopling -dispersal -dispersals -dispersant -dispersants -disperse -dispersed -dispersedly -disperser -dispersers -disperses -dispersible -dispersing -dispersion -dispersions -dispersive -dispersively -dispersiveness -dispersivenesses -dispersoid -dispersoids -dispirit -dispirited -dispiritedly -dispiritedness -dispiritednesses -dispiriting -dispirits -dispiteous -displace -displaceable -displaced -displacement -displacements -displaces -displacing -displant -displanted -displanting -displants -display -displayable -displayed -displaying -displays -displease -displeased -displeases -displeasing -displeasure -displeasures -displode -disploded -displodes -disploding -displosion -displosions -displume -displumed -displumes -displuming -disport -disported -disporting -disportment -disportments -disports -disposabilities -disposability -disposable -disposables -disposal -disposals -dispose -disposed -disposer -disposers -disposes -disposing -disposition -dispositional -dispositions -dispositive -dispossess -dispossessed -dispossesses -dispossessing -dispossession -dispossessions -dispossessor -dispossessors -disposure -disposures -dispraise -dispraised -dispraiser -dispraisers -dispraises -dispraising -dispraisingly -dispread -dispreading -dispreads -disprize -disprized -disprizes -disprizing -disproof -disproofs -disproportion -disproportional -disproportionate -disproportionated -disproportionately -disproportionates -disproportionating -disproportionation -disproportionations -disproportioned -disproportioning -disproportions -disprovable -disprove -disproved -disproven -disproves -disproving -disputable -disputably -disputant -disputants -disputation -disputations -disputatious -disputatiously -disputatiousness -disputatiousnesses -dispute -disputed -disputer -disputers -disputes -disputing -disqualification -disqualifications -disqualified -disqualifies -disqualify -disqualifying -disquantitied -disquantities -disquantity -disquantitying -disquiet -disquieted -disquieting -disquietingly -disquietly -disquiets -disquietude -disquietudes -disquisition -disquisitions -disrate -disrated -disrates -disrating -disregard -disregarded -disregardful -disregarding -disregards -disrelated -disrelation -disrelations -disrelish -disrelished -disrelishes -disrelishing -disremember -disremembered -disremembering -disremembers -disrepair -disrepairs -disreputabilities -disreputability -disreputable -disreputableness -disreputablenesses -disreputably -disrepute -disreputes -disrespect -disrespectabilities -disrespectability -disrespectable -disrespected -disrespectful -disrespectfully -disrespectfulness -disrespectfulnesses -disrespecting -disrespects -disrobe -disrobed -disrober -disrobers -disrobes -disrobing -disroot -disrooted -disrooting -disroots -disrupt -disrupted -disrupter -disrupters -disrupting -disruption -disruptions -disruptive -disruptively -disruptiveness -disruptivenesses -disrupts -diss -dissatisfaction -dissatisfactions -dissatisfactory -dissatisfied -dissatisfies -dissatisfy -dissatisfying -dissave -dissaved -dissaves -dissaving -disseat -disseated -disseating -disseats -dissect -dissected -dissecting -dissection -dissections -dissector -dissectors -dissects -dissed -disseise -disseised -disseises -disseisin -disseising -disseisins -disseisor -disseisors -disseize -disseized -disseizes -disseizin -disseizing -disseizins -dissemble -dissembled -dissembler -dissemblers -dissembles -dissembling -disseminate -disseminated -disseminates -disseminating -dissemination -disseminations -disseminator -disseminators -disseminule -disseminules -dissension -dissensions -dissensus -dissensuses -dissent -dissented -dissenter -dissenters -dissentient -dissentients -dissenting -dissention -dissentions -dissentious -dissents -dissepiment -dissepiments -dissert -dissertate -dissertated -dissertates -dissertating -dissertation -dissertational -dissertations -dissertator -dissertators -disserted -disserting -disserts -disserve -disserved -disserves -disservice -disserviceable -disservices -disserving -disses -dissever -disseverance -disseverances -dissevered -dissevering -disseverment -disseverments -dissevers -dissidence -dissidences -dissident -dissidents -dissimilar -dissimilarities -dissimilarity -dissimilarly -dissimilars -dissimilate -dissimilated -dissimilates -dissimilating -dissimilation -dissimilations -dissimilatory -dissimilitude -dissimilitudes -dissimulate -dissimulated -dissimulates -dissimulating -dissimulation -dissimulations -dissimulator -dissimulators -dissing -dissipate -dissipated -dissipatedly -dissipatedness -dissipatednesses -dissipater -dissipaters -dissipates -dissipating -dissipation -dissipations -dissipative -dissociabilities -dissociability -dissociable -dissocial -dissociate -dissociated -dissociates -dissociating -dissociation -dissociations -dissociative -dissoluble -dissolute -dissolutely -dissoluteness -dissolutenesses -dissolution -dissolutions -dissolvable -dissolve -dissolved -dissolvent -dissolvents -dissolver -dissolvers -dissolves -dissolving -dissonance -dissonances -dissonant -dissonantly -dissuade -dissuaded -dissuader -dissuaders -dissuades -dissuading -dissuasion -dissuasions -dissuasive -dissuasively -dissuasiveness -dissuasivenesses -dissyllable -dissyllables -dissymmetric -dissymmetries -dissymmetry -distaff -distaffs -distain -distained -distaining -distains -distal -distally -distance -distanced -distances -distancing -distant -distantly -distantness -distantnesses -distaste -distasted -distasteful -distastefully -distastefulness -distastefulnesses -distastes -distasting -distaves -distelfink -distelfinks -distemper -distemperate -distemperature -distemperatures -distempered -distempering -distempers -distend -distended -distending -distends -distensibilities -distensibility -distensible -distension -distensions -distent -distention -distentions -distich -distichous -distichs -distil -distill -distillate -distillates -distillation -distillations -distilled -distiller -distilleries -distillers -distillery -distilling -distills -distils -distinct -distincter -distinctest -distinction -distinctions -distinctive -distinctively -distinctiveness -distinctivenesses -distinctly -distinctness -distinctnesses -distingue -distinguish -distinguishabilities -distinguishability -distinguishable -distinguishably -distinguished -distinguishes -distinguishing -distome -distomes -distort -distorted -distorter -distorters -distorting -distortion -distortional -distortions -distorts -distract -distractable -distracted -distractedly -distractibilities -distractibility -distractible -distracting -distractingly -distraction -distractions -distractive -distracts -distrain -distrainable -distrained -distrainer -distrainers -distraining -distrainor -distrainors -distrains -distraint -distraints -distrait -distraite -distraught -distraughtly -distress -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 -district -districted -districting -districts -distrust -distrusted -distrustful -distrustfully -distrustfulness -distrustfulnesses -distrusting -distrusts -disturb -disturbance -disturbances -disturbed -disturber -disturbers -disturbing -disturbingly -disturbs -disubstituted -disulfid -disulfide -disulfides -disulfids -disulfiram -disulfirams -disulfoton -disulfotons -disunion -disunionist -disunionists -disunions -disunite -disunited -disunites -disunities -disuniting -disunity -disuse -disused -disuses -disusing -disutilities -disutility -disvalue -disvalued -disvalues -disvaluing -disyllabic -disyllable -disyllables -disyoke -disyoked -disyokes -disyoking -dit -dita -ditas -ditch -ditchdigger -ditchdiggers -ditched -ditcher -ditchers -ditches -ditching -dite -dites -ditheism -ditheisms -ditheist -ditheists -dither -dithered -ditherer -ditherers -dithering -dithers -dithery -dithiocarbamate -dithiocarbamates -dithiol -dithyramb -dithyrambic -dithyrambically -dithyrambs -ditransitive -ditransitives -dits -ditsier -ditsiest -ditsy -dittanies -dittany -ditties -ditto -dittoed -dittoing -dittos -ditty -ditz -ditzes -ditzier -ditziest -ditzy -diureses -diuresis -diuretic -diuretically -diuretics -diurnal -diurnally -diurnals -diuron -diurons -diva -divagate -divagated -divagates -divagating -divagation -divagations -divalent -divan -divans -divaricate -divaricated -divaricates -divaricating -divarication -divarications -divas -dive -divebomb -divebombed -divebombing -divebombs -dived -diver -diverge -diverged -divergence -divergences -divergencies -divergency -divergent -divergently -diverges -diverging -divers -diverse -diversely -diverseness -diversenesses -diversification -diversifications -diversified -diversifier -diversifiers -diversifies -diversify -diversifying -diversion -diversionary -diversionist -diversionists -diversions -diversities -diversity -divert -diverted -diverter -diverters -diverticula -diverticular -diverticulitis -diverticulitises -diverticuloses -diverticulosis -diverticulum -divertimenti -divertimento -divertimentos -diverting -divertissement -divertissements -diverts -dives -divest -divested -divesting -divestiture -divestitures -divestment -divestments -divests -dividable -divide -divided -dividedly -dividedness -dividednesses -dividend -dividendless -dividends -divider -dividers -divides -dividing -dividual -divination -divinations -divinatory -divine -divined -divinely -diviner -diviners -divines -divinest -diving -divining -divinise -divinised -divinises -divinising -divinities -divinity -divinize -divinized -divinizes -divinizing -divisibilities -divisibility -divisible -division -divisional -divisionism -divisionisms -divisionist -divisionists -divisions -divisive -divisively -divisiveness -divisivenesses -divisor -divisors -divorce -divorced -divorcee -divorcees -divorcement -divorcements -divorcer -divorcers -divorces -divorcing -divot -divots -divulge -divulged -divulgence -divulgences -divulger -divulgers -divulges -divulging -divvied -divvies -divvy -divvying -diwan -diwans -dixit -dixits -dizen -dizened -dizening -dizens -dizygotic -dizygous -dizzied -dizzier -dizzies -dizziest -dizzily -dizziness -dizzinesses -dizzy -dizzying -dizzyingly -djebel -djebels -djellaba -djellabah -djellabahs -djellabas -djin -djinn -djinni -djinns -djinny -djins -do -doable -doat -doated -doating -doats -dobber -dobbers -dobbies -dobbin -dobbins -dobby -dobie -dobies -dobla -doblas -doblon -doblones -doblons -dobra -dobras -dobro -dobros -dobson -dobsonflies -dobsonfly -dobsons -doby -doc -docent -docents -docetic -docile -docilely -docilities -docility -dock -dockage -dockages -docked -docker -dockers -docket -docketed -docketing -dockets -dockhand -dockhands -docking -dockland -docklands -dockmaster -dockmasters -docks -dockside -docksides -dockworker -dockworkers -dockyard -dockyards -docs -doctor -doctoral -doctorate -doctorates -doctored -doctoring -doctorless -doctors -doctorship -doctorships -doctrinaire -doctrinaires -doctrinairism -doctrinairisms -doctrinal -doctrinally -doctrine -doctrines -docudrama -docudramas -document -documentable -documental -documentalist -documentalists -documentarian -documentarians -documentaries -documentarily -documentarist -documentarists -documentary -documentation -documentational -documentations -documented -documenter -documenters -documenting -documents -dodder -doddered -dodderer -dodderers -doddering -dodders -doddery -dodecagon -dodecagons -dodecahedra -dodecahedral -dodecahedron -dodecahedrons -dodecaphonic -dodecaphonically -dodecaphonies -dodecaphonist -dodecaphonists -dodecaphony -dodge -dodgeball -dodgeballs -dodged -dodgem -dodgems -dodger -dodgeries -dodgers -dodgery -dodges -dodgier -dodgiest -dodginess -dodginesses -dodging -dodgy -dodo -dodoes -dodoism -dodoisms -dodos -doe -doer -doers -does -doeskin -doeskins -doest -doeth -doff -doffed -doffer -doffers -doffing -doffs -dog -dogbane -dogbanes -dogberries -dogberry -dogcart -dogcarts -dogcatcher -dogcatchers -dogdom -dogdoms -doge -dogear -dogeared -dogearing -dogears -dogedom -dogedoms -doges -dogeship -dogeships -dogey -dogeys -dogface -dogfaces -dogfight -dogfighting -dogfights -dogfish -dogfishes -dogfought -dogged -doggedly -doggedness -doggednesses -dogger -doggerel -doggerels -doggeries -doggers -doggery -doggie -doggier -doggies -doggiest -dogging -doggish -doggishly -doggishness -doggishnesses -doggo -doggone -doggoned -doggoneder -doggonedest -doggoner -doggones -doggonest -doggoning -doggrel -doggrels -doggy -doghouse -doghouses -dogie -dogies -dogleg -doglegged -doglegging -doglegs -doglike -dogma -dogmas -dogmata -dogmatic -dogmatical -dogmatically -dogmaticalness -dogmaticalnesses -dogmatics -dogmatism -dogmatisms -dogmatist -dogmatists -dogmatization -dogmatizations -dogmatize -dogmatized -dogmatizer -dogmatizers -dogmatizes -dogmatizing -dognap -dognaped -dognaper -dognapers -dognaping -dognapped -dognapper -dognappers -dognapping -dognaps -dogs -dogsbodies -dogsbody -dogsled -dogsledded -dogsledder -dogsledders -dogsledding -dogsleds -dogteeth -dogtooth -dogtrot -dogtrots -dogtrotted -dogtrotting -dogvane -dogvanes -dogwatch -dogwatches -dogwood -dogwoods -dogy -doiled -doilies -doily -doing -doings -doit -doited -doits -dojo -dojos -dol -dolce -dolci -doldrums -dole -doled -doleful -dolefuller -dolefullest -dolefully -dolefulness -dolefulnesses -dolerite -dolerites -doleritic -doles -dolesome -dolichocephalic -dolichocephalies -dolichocephaly -doling -doll -dollar -dollars -dolled -dollhouse -dollhouses -dollied -dollies -dolling -dollish -dollishly -dollishness -dollishnesses -dollop -dolloped -dolloping -dollops -dolls -dolly -dollying -dolma -dolmades -dolman -dolmans -dolmas -dolmen -dolmens -dolomite -dolomites -dolomitic -dolomitization -dolomitizations -dolomitize -dolomitized -dolomitizes -dolomitizing -dolor -doloroso -dolorous -dolorously -dolorousness -dolorousnesses -dolors -dolour -dolours -dolphin -dolphinfish -dolphinfishes -dolphins -dols -dolt -doltish -doltishly -doltishness -doltishnesses -dolts -dom -domain -domains -domal -dome -domed -domelike -domes -domesday -domesdays -domestic -domestically -domesticate -domesticated -domesticates -domesticating -domestication -domestications -domesticities -domesticity -domestics -domic -domical -domicil -domicile -domiciled -domiciles -domiciliary -domiciliate -domiciliated -domiciliates -domiciliating -domiciliation -domiciliations -domiciling -domicils -dominance -dominances -dominant -dominantly -dominants -dominate -dominated -dominates -dominating -domination -dominations -dominative -dominator -dominators -dominatrices -dominatrix -dominatrixes -domine -domineer -domineered -domineering -domineeringly -domineeringness -domineeringnesses -domineers -domines -doming -dominical -dominick -dominicker -dominickers -dominicks -dominie -dominies -dominion -dominions -dominique -dominiques -dominium -dominiums -domino -dominoes -dominos -doms -don -dona -donas -donate -donated -donates -donating -donation -donations -donative -donatives -donator -donators -done -donee -donees -doneness -donenesses -dong -donga -dongas -dongle -dongles -dongola -dongolas -dongs -donjon -donjons -donkey -donkeys -donkeywork -donkeyworks -donna -donnas -donne -donned -donnee -donnees -donnerd -donnered -donnert -donnicker -donnickers -donniker -donnikers -donning -donnish -donnishly -donnishness -donnishnesses -donnybrook -donnybrooks -donor -donors -dons -donsie -donsy -donut -donuts -donzel -donzels -doodad -doodads -doodle -doodlebug -doodlebugs -doodled -doodler -doodlers -doodles -doodling -doofus -doofuses -doohickey -doohickeys -doohickies -doolee -doolees -doolie -doolies -dooly -doom -doomed -doomful -doomfully -doomily -dooming -dooms -doomsayer -doomsayers -doomsaying -doomsayings -doomsday -doomsdayer -doomsdayers -doomsdays -doomster -doomsters -doomy -door -doorbell -doorbells -doorjamb -doorjambs -doorkeeper -doorkeepers -doorknob -doorknobs -doorless -doorman -doormat -doormats -doormen -doornail -doornails -doorplate -doorplates -doorpost -doorposts -doors -doorsill -doorsills -doorstep -doorsteps -doorstop -doorstops -doorway -doorways -dooryard -dooryards -doozer -doozers -doozie -doozies -doozy -dopa -dopamine -dopaminergic -dopamines -dopant -dopants -dopas -dope -doped -dopehead -dopeheads -doper -dopers -dopes -dopester -dopesters -dopey -dopier -dopiest -dopiness -dopinesses -doping -doppelganger -doppelgangers -dopy -dor -dorado -dorados -dorbug -dorbugs -dore -dorhawk -dorhawks -dories -dork -dorkier -dorkiest -dorks -dorky -dorm -dormancies -dormancy -dormant -dormer -dormers -dormice -dormie -dormient -dormin -dormins -dormitories -dormitory -dormouse -dorms -dormy -dorneck -dornecks -dornick -dornicks -dornock -dornocks -doronicum -doronicums -dorp -dorper -dorpers -dorps -dorr -dorrs -dors -dorsa -dorsad -dorsal -dorsally -dorsals -dorsel -dorsels -dorser -dorsers -dorsiventral -dorsiventralities -dorsiventrality -dorsiventrally -dorsolateral -dorsoventral -dorsoventralities -dorsoventrality -dorsoventrally -dorsum -dorty -dory -dos -dosage -dosages -dose -dosed -doser -dosers -doses -dosimeter -dosimeters -dosimetric -dosimetries -dosimetry -dosing -doss -dossal -dossals -dossed -dossel -dossels -dosser -dosseret -dosserets -dossers -dosses -dossier -dossiers -dossil -dossils -dossing -dost -dot -dotage -dotages -dotal -dotard -dotardly -dotards -dotation -dotations -dote -doted -doter -doters -dotes -doth -dotier -dotiest -doting -dotingly -dots -dotted -dottel -dottels -dotter -dotterel -dotterels -dotters -dottier -dottiest -dottily -dottiness -dottinesses -dotting -dottle -dottles -dottrel -dottrels -dotty -doty -double -doubled -doubleheader -doubleheaders -doubleness -doublenesses -doubler -doublers -doubles -doublespeak -doublespeaker -doublespeakers -doublespeaks -doublet -doublethink -doublethinks -doubleton -doubletons -doublets -doubling -doubloon -doubloons -doublure -doublures -doubly -doubt -doubtable -doubted -doubter -doubters -doubtful -doubtfully -doubtfulness -doubtfulnesses -doubting -doubtingly -doubtless -doubtlessly -doubtlessness -doubtlessnesses -doubts -douce -doucely -douceur -douceurs -douche -douched -douches -douching -dough -doughboy -doughboys -doughface -doughfaces -doughier -doughiest -doughlike -doughnut -doughnutlike -doughnuts -doughs -dought -doughtier -doughtiest -doughtily -doughtiness -doughtinesses -doughty -doughy -doum -douma -doumas -doums -doupioni -doupionis -dour -doura -dourah -dourahs -douras -dourer -dourest -dourine -dourines -dourly -dourness -dournesses -douroucouli -douroucoulis -douse -doused -douser -dousers -douses -dousing -doux -douzeper -douzepers -dove -dovecot -dovecote -dovecotes -dovecots -dovekey -dovekeys -dovekie -dovekies -dovelike -doven -dovened -dovening -dovens -doves -dovetail -dovetailed -dovetailing -dovetails -dovish -dovishness -dovishnesses -dow -dowable -dowager -dowagers -dowdier -dowdies -dowdiest -dowdily -dowdiness -dowdinesses -dowdy -dowdyish -dowed -dowel -doweled -doweling -dowelled -dowelling -dowels -dower -dowered -doweries -dowering -dowers -dowery -dowie -dowing -dowitcher -dowitchers -down -downbeat -downbeats -downburst -downbursts -downcast -downcasts -downcome -downcomes -downcourt -downdraft -downdrafts -downed -downer -downers -downfall -downfallen -downfalls -downfield -downgrade -downgraded -downgrades -downgrading -downhaul -downhauls -downhearted -downheartedly -downheartedness -downheartednesses -downhill -downhiller -downhillers -downhills -downier -downiest -downing -downland -downlands -downlink -downlinks -download -downloadable -downloaded -downloading -downloads -downpipe -downpipes -downplay -downplayed -downplaying -downplays -downpour -downpours -downrange -downright -downrightly -downrightness -downrightnesses -downriver -downs -downscale -downscaled -downscales -downscaling -downshift -downshifted -downshifting -downshifts -downside -downsides -downsize -downsized -downsizes -downsizing -downslide -downslides -downslope -downspout -downspouts -downstage -downstages -downstairs -downstate -downstater -downstaters -downstates -downstream -downstroke -downstrokes -downswing -downswings -downtick -downticks -downtime -downtimes -downtown -downtowner -downtowners -downtowns -downtrend -downtrends -downtrod -downtrodden -downturn -downturns -downward -downwardly -downwardness -downwardnesses -downwards -downwash -downwashes -downwind -downy -dowries -dowry -dows -dowsabel -dowsabels -dowse -dowsed -dowser -dowsers -dowses -dowsing -doxie -doxies -doxologies -doxology -doxorubicin -doxorubicins -doxy -doxycycline -doxycyclines -doyen -doyenne -doyennes -doyens -doyley -doyleys -doylies -doyly -doze -dozed -dozen -dozened -dozening -dozens -dozenth -dozenths -dozer -dozers -dozes -dozier -doziest -dozily -doziness -dozinesses -dozing -dozy -drab -drabbed -drabber -drabbest -drabbet -drabbets -drabbing -drabble -drabbled -drabbles -drabbling -drably -drabness -drabnesses -drabs -dracaena -dracaenas -drachm -drachma -drachmae -drachmai -drachmas -drachms -draconian -draconic -draff -draffier -draffiest -draffish -draffs -draffy -draft -draftable -drafted -draftee -draftees -drafter -drafters -draftier -draftiest -draftily -draftiness -draftinesses -drafting -draftings -drafts -draftsman -draftsmanship -draftsmanships -draftsmen -draftsperson -draftspersons -drafty -drag -dragee -dragees -dragged -dragger -draggers -draggier -draggiest -dragging -draggingly -draggle -draggled -draggles -draggling -draggy -dragline -draglines -dragnet -dragnets -dragoman -dragomans -dragomen -dragon -dragonet -dragonets -dragonflies -dragonfly -dragonhead -dragonheads -dragonish -dragons -dragoon -dragooned -dragooning -dragoons -dragrope -dragropes -drags -dragster -dragsters -drail -drails -drain -drainage -drainages -drained -drainer -drainers -draining -drainpipe -drainpipes -drains -drake -drakes -dram -drama -dramas -dramatic -dramatically -dramatics -dramatisation -dramatisations -dramatise -dramatised -dramatises -dramatising -dramatist -dramatists -dramatizable -dramatization -dramatizations -dramatize -dramatized -dramatizes -dramatizing -dramaturg -dramaturge -dramaturges -dramaturgic -dramaturgical -dramaturgically -dramaturgies -dramaturgs -dramaturgy -dramedies -dramedy -drammed -dramming -drammock -drammocks -drams -dramshop -dramshops -drank -drapabilities -drapability -drapable -drape -drapeabilities -drapeability -drapeable -draped -draper -draperies -drapers -drapery -drapes -drapey -draping -drastic -drastically -drat -drats -dratted -dratting -draught -draughted -draughtier -draughtiest -draughting -draughts -draughtsman -draughtsmen -draughty -drave -draw -drawable -drawback -drawbacks -drawbar -drawbars -drawbore -drawbores -drawbridge -drawbridges -drawdown -drawdowns -drawee -drawees -drawer -drawerful -drawerfuls -drawers -drawing -drawings -drawknife -drawknives -drawl -drawled -drawler -drawlers -drawlier -drawliest -drawling -drawlingly -drawls -drawly -drawn -drawnwork -drawnworks -drawplate -drawplates -draws -drawshave -drawshaves -drawstring -drawstrings -drawtube -drawtubes -dray -drayage -drayages -drayed -draying -drayman -draymen -drays -dread -dreaded -dreadful -dreadfully -dreadfulness -dreadfulnesses -dreadfuls -dreading -dreadlock -dreadlocks -dreadnought -dreadnoughts -dreads -dream -dreamed -dreamer -dreamers -dreamful -dreamfully -dreamfulness -dreamfulnesses -dreamier -dreamiest -dreamily -dreaminess -dreaminesses -dreaming -dreamland -dreamlands -dreamless -dreamlessly -dreamlessness -dreamlessnesses -dreamlike -dreams -dreamt -dreamtime -dreamtimes -dreamworld -dreamworlds -dreamy -drear -drearier -drearies -dreariest -drearily -dreariness -drearinesses -drears -dreary -dreck -drecks -drecky -dredge -dredged -dredger -dredgers -dredges -dredging -dredgings -dree -dreed -dreeing -drees -dreg -dreggier -dreggiest -dreggish -dreggy -dregs -dreich -dreidel -dreidels -dreidl -dreidls -dreigh -drek -dreks -drench -drenched -drencher -drenchers -drenches -drenching -dress -dressage -dressages -dressed -dresser -dressers -dresses -dressier -dressiest -dressily -dressiness -dressinesses -dressing -dressings -dressmaker -dressmakers -dressmaking -dressmakings -dressy -drest -drew -drib -dribbed -dribbing -dribble -dribbled -dribbler -dribblers -dribbles -dribblet -dribblets -dribbling -dribbly -driblet -driblets -dribs -dried -driegh -drier -driers -dries -driest -drift -driftage -driftages -drifted -drifter -drifters -driftier -driftiest -drifting -driftingly -driftpin -driftpins -drifts -driftwood -driftwoods -drifty -drill -drillabilities -drillability -drillable -drilled -driller -drillers -drilling -drillings -drillmaster -drillmasters -drills -drily -drink -drinkabilities -drinkability -drinkable -drinkables -drinker -drinkers -drinking -drinks -drip -dripless -dripped -dripper -drippers -drippier -drippiest -dripping -drippings -drippy -drips -dripstone -dripstones -dript -drivabilities -drivability -drivable -drive -driveabilities -driveability -driveable -drivel -driveled -driveler -drivelers -driveline -drivelines -driveling -drivelled -drivelling -drivels -driven -drivenness -drivennesses -driver -driverless -drivers -drives -driveshaft -driveshafts -drivetrain -drivetrains -driveway -driveways -driving -drivings -drizzle -drizzled -drizzles -drizzlier -drizzliest -drizzling -drizzlingly -drizzly -drogue -drogues -droid -droids -droit -droits -droll -drolled -droller -drolleries -drollery -drollest -drolling -drollness -drollnesses -drolls -drolly -dromedaries -dromedary -dromon -dromond -dromonds -dromons -drone -droned -droner -droners -drones -drongo -drongos -droning -droningly -dronish -drool -drooled -drooling -drools -droop -drooped -droopier -droopiest -droopily -drooping -droopingly -droops -droopy -drop -dropcloth -dropcloths -drophead -dropheads -dropkick -dropkicker -dropkickers -dropkicks -droplet -droplets -droplight -droplights -dropout -dropouts -droppable -dropped -dropper -dropperful -dropperfuls -droppers -droppersful -dropping -droppings -drops -dropshot -dropshots -dropsical -dropsied -dropsies -dropsy -dropt -dropwort -dropworts -drosera -droseras -droshkies -droshky -droshkys -droskies -drosky -droskys -drosophila -drosophilae -drosophilas -dross -drosses -drossier -drossiest -drossy -drought -droughtier -droughtiest -droughtiness -droughtinesses -droughts -droughty -drouk -drouked -drouking -drouks -drouth -drouthier -drouthiest -drouths -drouthy -drove -droved -drover -drovers -droves -droving -drown -drownd -drownded -drownding -drownds -drowned -drowner -drowners -drowning -drownings -drowns -drowse -drowsed -drowses -drowsier -drowsiest -drowsily -drowsiness -drowsinesses -drowsing -drowsy -drub -drubbed -drubber -drubbers -drubbing -drubbings -drubs -drudge -drudged -drudger -drudgeries -drudgers -drudgery -drudges -drudging -drudgingly -drug -drugged -drugget -druggets -druggie -druggier -druggies -druggiest -drugging -druggist -druggists -druggy -drugmaker -drugmakers -drugs -drugstore -drugstores -druid -druidess -druidesses -druidic -druidical -druidism -druidisms -druids -drum -drumbeat -drumbeater -drumbeaters -drumbeating -drumbeatings -drumbeats -drumble -drumbled -drumbles -drumbling -drumfire -drumfires -drumfish -drumfishes -drumhead -drumheads -drumlier -drumliest -drumlike -drumlin -drumlins -drumly -drummed -drummer -drummers -drumming -drumroll -drumrolls -drums -drumstick -drumsticks -drunk -drunkard -drunkards -drunken -drunkenly -drunkenness -drunkennesses -drunker -drunkest -drunks -drupaceous -drupe -drupelet -drupelets -drupes -druse -druses -druthers -dry -dryable -dryad -dryades -dryadic -dryads -dryasdust -dryasdusts -dryer -dryers -dryest -drying -dryish -dryland -drylot -drylots -dryly -dryness -drynesses -dryopithecine -dryopithecines -drypoint -drypoints -drys -drysalter -drysalteries -drysalters -drysaltery -drystone -drywall -drywalls -duad -duads -dual -dualism -dualisms -dualist -dualistic -dualistically -dualists -dualities -duality -dualize -dualized -dualizes -dualizing -dually -duals -dub -dubbed -dubber -dubbers -dubbin -dubbing -dubbings -dubbins -dubieties -dubiety -dubious -dubiously -dubiousness -dubiousnesses -dubitable -dubitation -dubitations -dubnium -dubniums -dubonnet -dubonnets -dubs -ducal -ducally -ducat -ducats -duce -duces -duchess -duchesses -duchies -duchy -duci -duck -duckbill -duckbills -duckboard -duckboards -ducked -ducker -duckers -duckie -duckier -duckies -duckiest -ducking -duckling -ducklings -duckpin -duckpins -ducks -ducktail -ducktails -duckwalk -duckwalked -duckwalking -duckwalks -duckweed -duckweeds -ducky -duct -ductal -ducted -ductile -ductilities -ductility -ducting -ductings -ductless -ducts -ductule -ductules -ductwork -ductworks -dud -duddie -duddy -dude -duded -dudeen -dudeens -dudes -dudgeon -dudgeons -duding -dudish -dudishly -duds -due -duecento -duecentos -duel -dueled -dueler -duelers -dueling -duelist -duelists -duelled -dueller -duellers -duelli -duelling -duellist -duellists -duello -duellos -duels -duende -duendes -dueness -duenesses -duenna -duennas -duennaship -duennaships -dues -duet -duets -duetted -duetting -duettist -duettists -duff -duffel -duffels -duffer -duffers -duffle -duffles -duffs -dug -dugong -dugongs -dugout -dugouts -dugs -duh -dui -duiker -duikers -duit -duits -duke -duked -dukedom -dukedoms -dukes -duking -dulcet -dulcetly -dulcets -dulciana -dulcianas -dulcified -dulcifies -dulcify -dulcifying -dulcimer -dulcimers -dulcimore -dulcimores -dulcinea -dulcineas -dulia -dulias -dull -dullard -dullards -dulled -duller -dullest -dulling -dullish -dullishly -dullness -dullnesses -dulls -dullsville -dullsvilles -dully -dulness -dulnesses -dulse -dulses -duly -duma -dumas -dumb -dumbbell -dumbbells -dumbcane -dumbcanes -dumbed -dumber -dumbest -dumbfound -dumbfounded -dumbfounder -dumbfoundered -dumbfoundering -dumbfounders -dumbfounding -dumbfounds -dumbhead -dumbheads -dumbing -dumbly -dumbness -dumbnesses -dumbs -dumbstruck -dumbwaiter -dumbwaiters -dumdum -dumdums -dumfound -dumfounded -dumfounding -dumfounds -dumka -dumky -dummied -dummies -dummkopf -dummkopfs -dummy -dummying -dumortierite -dumortierites -dump -dumpcart -dumpcarts -dumped -dumper -dumpers -dumpier -dumpiest -dumpily -dumpiness -dumpinesses -dumping -dumpings -dumpish -dumpling -dumplings -dumps -dumpster -dumpsters -dumpy -dun -dunam -dunams -dunce -dunces -dunch -dunches -duncical -duncish -dunderhead -dunderheaded -dunderheads -dundrearies -dune -duneland -dunelands -dunelike -dunes -dung -dungaree -dungarees -dunged -dungeon -dungeoned -dungeoning -dungeons -dunghill -dunghills -dungier -dungiest -dunging -dungs -dungy -dunite -dunites -dunitic -dunk -dunked -dunker -dunkers -dunking -dunks -dunlin -dunlins -dunnage -dunnages -dunned -dunner -dunness -dunnesses -dunnest -dunning -dunnite -dunnites -duns -dunt -dunted -dunting -dunts -duo -duodecillion -duodecillions -duodecimal -duodecimals -duodecimo -duodecimos -duodena -duodenal -duodenum -duodenums -duolog -duologs -duologue -duologues -duomi -duomo -duomos -duopolies -duopolistic -duopoly -duopsonies -duopsony -duos -duotone -duotones -dup -dupable -dupe -duped -duper -duperies -dupers -dupery -dupes -duping -duple -duplex -duplexed -duplexer -duplexers -duplexes -duplexing -duplicate -duplicated -duplicates -duplicating -duplication -duplications -duplicative -duplicator -duplicators -duplicities -duplicitous -duplicitously -duplicity -dupped -dupping -dups -dura -durabilities -durability -durable -durableness -durablenesses -durables -durably -dural -duralumin -duralumins -duramen -duramens -durance -durances -duras -duration -durations -durative -duratives -durbar -durbars -dure -dured -dures -duress -duresses -durian -durians -during -durion -durions -durmast -durmasts -durn -durndest -durned -durneder -durnedest -durning -durns -duro -duroc -durocs -durometer -durometers -duros -durr -durra -durras -durrie -durries -durrs -durst -durum -durums -dusk -dusked -duskier -duskiest -duskily -duskiness -duskinesses -dusking -duskish -dusks -dusky -dust -dustbin -dustbins -dustcover -dustcovers -dusted -duster -dusters -dustheap -dustheaps -dustier -dustiest -dustily -dustiness -dustinesses -dusting -dustless -dustlike -dustman -dustmen -dustoff -dustoffs -dustpan -dustpans -dustrag -dustrags -dusts -dustup -dustups -dusty -dutch -dutchman -dutchmen -duteous -dutiable -duties -dutiful -dutifully -dutifulness -dutifulnesses -duty -duumvir -duumvirate -duumvirates -duumviri -duumvirs -duvet -duvetine -duvetines -duvets -duvetyn -duvetyne -duvetynes -duvetyns -duxelles -dwarf -dwarfed -dwarfer -dwarfest -dwarfing -dwarfish -dwarfishly -dwarfishness -dwarfishnesses -dwarfism -dwarfisms -dwarflike -dwarfness -dwarfnesses -dwarfs -dwarves -dweeb -dweebs -dwell -dwelled -dweller -dwellers -dwelling -dwellings -dwells -dwelt -dwindle -dwindled -dwindles -dwindling -dwine -dwined -dwines -dwining -dyable -dyad -dyadic -dyadically -dyadics -dyads -dyarchic -dyarchies -dyarchy -dybbuk -dybbukim -dybbuks -dye -dyeabilities -dyeability -dyeable -dyed -dyeing -dyeings -dyer -dyers -dyes -dyestuff -dyestuffs -dyeweed -dyeweeds -dyewood -dyewoods -dying -dyings -dyke -dyked -dykes -dykey -dyking -dynamic -dynamical -dynamically -dynamics -dynamism -dynamisms -dynamist -dynamistic -dynamists -dynamite -dynamited -dynamiter -dynamiters -dynamites -dynamitic -dynamiting -dynamo -dynamometer -dynamometers -dynamometric -dynamometries -dynamometry -dynamos -dynamotor -dynamotors -dynast -dynastic -dynastically -dynasties -dynasts -dynasty -dynatron -dynatrons -dyne -dynein -dyneins -dynel -dynels -dynes -dynode -dynodes -dysarthria -dysarthrias -dyscrasia -dyscrasias -dysenteric -dysenteries -dysentery -dysfunction -dysfunctional -dysfunctions -dysgeneses -dysgenesis -dysgenic -dyskinesia -dyskinesias -dyskinetic -dyslexia -dyslexias -dyslexic -dyslexics -dyslogistic -dyslogistically -dysmenorrhea -dysmenorrheas -dysmenorrheic -dyspepsia -dyspepsias -dyspepsies -dyspepsy -dyspeptic -dyspeptically -dyspeptics -dysphagia -dysphagias -dysphasia -dysphasias -dysphasic -dysphasics -dysphemism -dysphemisms -dysphemistic -dysphonia -dysphonias -dysphoria -dysphorias -dysphoric -dysplasia -dysplasias -dysplastic -dyspnea -dyspneal -dyspneas -dyspneic -dyspnoea -dyspnoeas -dyspnoic -dysprosium -dysprosiums -dysrhythmia -dysrhythmias -dysrhythmic -dystaxia -dystaxias -dystocia -dystocias -dystonia -dystonias -dystonic -dystopia -dystopian -dystopias -dystrophic -dystrophies -dystrophy -dysuria -dysurias -dysuric -dyvour -dyvours -each -eager -eagerer -eagerest -eagerly -eagerness -eagernesses -eagers -eagle -eagles -eaglet -eaglets -eagre -eagres -ealdorman -ealdormen -eanling -eanlings -ear -earache -earaches -eardrop -eardrops -eardrum -eardrums -eared -earflap -earflaps -earful -earfuls -earing -earings -earl -earlap -earlaps -earldom -earldoms -earless -earlier -earliest -earliness -earlinesses -earlobe -earlobes -earlock -earlocks -earls -earlship -earlships -early -earlywood -earlywoods -earmark -earmarked -earmarking -earmarks -earmuff -earmuffs -earn -earned -earner -earners -earnest -earnestly -earnestness -earnestnesses -earnests -earning -earnings -earns -earphone -earphones -earpiece -earpieces -earplug -earplugs -earring -earrings -ears -earshot -earshots -earsplitting -earstone -earstones -earth -earthborn -earthbound -earthed -earthen -earthenware -earthenwares -earthier -earthiest -earthily -earthiness -earthinesses -earthing -earthlier -earthliest -earthlight -earthlights -earthlike -earthliness -earthlinesses -earthling -earthlings -earthly -earthman -earthmen -earthmover -earthmovers -earthmoving -earthmovings -earthnut -earthnuts -earthpea -earthpeas -earthquake -earthquakes -earthrise -earthrises -earths -earthset -earthsets -earthshaker -earthshakers -earthshaking -earthshakingly -earthshine -earthshines -earthstar -earthstars -earthward -earthwards -earthwork -earthworks -earthworm -earthworms -earthy -earwax -earwaxes -earwig -earwigged -earwigging -earwigs -earwitness -earwitnesses -earworm -earworms -ease -eased -easeful -easefully -easel -easels -easement -easements -eases -easier -easies -easiest -easily -easiness -easinesses -easing -east -eastbound -easter -easterlies -easterly -eastern -easterner -easterners -easternmost -easters -easting -eastings -easts -eastward -eastwards -easy -easygoing -easygoingness -easygoingnesses -eat -eatable -eatables -eaten -eater -eateries -eaters -eatery -eath -eating -eatings -eats -eau -eaux -eave -eaved -eaves -eavesdrop -eavesdropped -eavesdropper -eavesdroppers -eavesdropping -eavesdrops -ebb -ebbed -ebbet -ebbets -ebbing -ebbs -ebon -ebonies -ebonise -ebonised -ebonises -ebonising -ebonite -ebonites -ebonize -ebonized -ebonizes -ebonizing -ebons -ebony -ebullience -ebulliences -ebulliencies -ebulliency -ebullient -ebulliently -ebullition -ebullitions -ecarte -ecartes -ecaudate -ecbolic -ecbolics -eccentric -eccentrically -eccentricities -eccentricity -eccentrics -ecchymoses -ecchymosis -ecchymotic -ecclesia -ecclesiae -ecclesial -ecclesiastic -ecclesiastical -ecclesiastically -ecclesiasticism -ecclesiasticisms -ecclesiastics -ecclesiological -ecclesiologies -ecclesiologist -ecclesiologists -ecclesiology -eccrine -ecdyses -ecdysial -ecdysiast -ecdysiasts -ecdysis -ecdyson -ecdysone -ecdysones -ecdysons -ecesis -ecesises -echard -echards -eche -eched -echelle -echelles -echelon -echeloned -echeloning -echelons -eches -echeveria -echeverias -echidna -echidnae -echidnas -echinacea -echinaceas -echinate -eching -echini -echinococci -echinococcoses -echinococcosis -echinococcus -echinoderm -echinodermatous -echinoderms -echinoid -echinoids -echinus -echiuroid -echiuroids -echo -echocardiogram -echocardiograms -echocardiographer -echocardiographers -echocardiographic -echocardiographies -echocardiography -echoed -echoer -echoers -echoes -echoey -echogram -echograms -echoic -echoing -echoism -echoisms -echolalia -echolalias -echolalic -echoless -echolocation -echolocations -echos -echovirus -echoviruses -eclair -eclaircissement -eclaircissements -eclairs -eclampsia -eclampsias -eclamptic -eclat -eclats -eclectic -eclectically -eclecticism -eclecticisms -eclectics -eclipse -eclipsed -eclipses -eclipsing -eclipsis -eclipsises -ecliptic -ecliptics -eclogite -eclogites -eclogue -eclogues -eclosion -eclosions -ecocatastrophe -ecocatastrophes -ecocidal -ecocide -ecocides -ecofreak -ecofreaks -ecologic -ecological -ecologically -ecologies -ecologist -ecologists -ecology -econobox -econoboxes -econometric -econometrically -econometrician -econometricians -econometrics -econometrist -econometrists -economic -economical -economically -economics -economies -economise -economised -economises -economising -economist -economists -economize -economized -economizer -economizers -economizes -economizing -economy -ecophysiological -ecophysiologies -ecophysiology -ecospecies -ecosphere -ecospheres -ecosystem -ecosystems -ecoterrorism -ecoterrorisms -ecoterrorist -ecoterrorists -ecotonal -ecotone -ecotones -ecotourism -ecotourisms -ecotourist -ecotourists -ecotype -ecotypes -ecotypic -ecraseur -ecraseurs -ecru -ecrus -ecstasies -ecstasy -ecstatic -ecstatically -ecstatics -ectases -ectasis -ectatic -ecthyma -ecthymata -ectoderm -ectodermal -ectoderms -ectomere -ectomeres -ectomorph -ectomorphic -ectomorphs -ectoparasite -ectoparasites -ectoparasitic -ectopia -ectopias -ectopic -ectopically -ectoplasm -ectoplasmic -ectoplasms -ectosarc -ectosarcs -ectotherm -ectothermic -ectotherms -ectotrophic -ectozoa -ectozoan -ectozoans -ectozoon -ectypal -ectype -ectypes -ecu -ecumenic -ecumenical -ecumenicalism -ecumenicalisms -ecumenically -ecumenicism -ecumenicisms -ecumenicist -ecumenicists -ecumenicities -ecumenicity -ecumenics -ecumenism -ecumenisms -ecumenist -ecumenists -ecus -eczema -eczemas -eczematous -ed -edacious -edacities -edacity -edaphic -edaphically -eddied -eddies -eddo -eddoes -eddy -eddying -edelweiss -edelweisses -edema -edemas -edemata -edematous -edenic -edentate -edentates -edentulous -edge -edged -edgeless -edger -edgers -edges -edgeways -edgewise -edgier -edgiest -edgily -edginess -edginesses -edging -edgings -edgy -edh -edhs -edibilities -edibility -edible -edibleness -ediblenesses -edibles -edict -edictal -edicts -edification -edifications -edifice -edifices -edified -edifier -edifiers -edifies -edify -edifying -edile -ediles -edit -editable -edited -editing -edition -editions -editor -editorial -editorialist -editorialists -editorialization -editorializations -editorialize -editorialized -editorializer -editorializers -editorializes -editorializing -editorially -editorials -editors -editorship -editorships -editress -editresses -edits -eds -educabilities -educability -educable -educables -educate -educated -educatedness -educatednesses -educates -educating -education -educational -educationalist -educationalists -educationally -educationese -educationeses -educationist -educationists -educations -educative -educator -educators -educe -educed -educes -educible -educing -educt -eduction -eductions -eductive -eductor -eductors -educts -edulcorate -edulcorated -edulcorates -edulcorating -edutainment -edutainments -eel -eelgrass -eelgrasses -eelier -eeliest -eellike -eelpout -eelpouts -eels -eelworm -eelworms -eely -eerie -eerier -eeriest -eerily -eeriness -eerinesses -eery -ef -eff -effable -efface -effaceable -effaced -effacement -effacements -effacer -effacers -effaces -effacing -effect -effected -effecter -effecters -effecting -effective -effectively -effectiveness -effectivenesses -effectives -effectivities -effectivity -effector -effectors -effects -effectual -effectualities -effectuality -effectually -effectualness -effectualnesses -effectuate -effectuated -effectuates -effectuating -effectuation -effectuations -effeminacies -effeminacy -effeminate -effeminately -effeminates -effendi -effendis -efferent -efferently -efferents -effervesce -effervesced -effervescence -effervescences -effervescent -effervescently -effervesces -effervescing -effete -effetely -effeteness -effetenesses -efficacies -efficacious -efficaciously -efficaciousness -efficaciousnesses -efficacities -efficacity -efficacy -efficiencies -efficiency -efficient -efficiently -effigial -effigies -effigy -effloresce -effloresced -efflorescence -efflorescences -efflorescent -effloresces -efflorescing -effluence -effluences -effluent -effluents -effluvia -effluvium -effluviums -efflux -effluxes -effluxion -effluxions -effort -effortful -effortfully -effortfulness -effortfulnesses -effortless -effortlessly -effortlessness -effortlessnesses -efforts -effronteries -effrontery -effs -effulge -effulged -effulgence -effulgences -effulgent -effulges -effulging -effuse -effused -effuses -effusing -effusion -effusions -effusive -effusively -effusiveness -effusivenesses -efs -eft -efts -eftsoon -eftsoons -egad -egads -egal -egalitarian -egalitarianism -egalitarianisms -egalitarians -egalite -egalites -eger -egers -egest -egesta -egested -egesting -egestion -egestions -egestive -egests -egg -eggar -eggars -eggbeater -eggbeaters -eggcup -eggcups -egged -egger -eggers -egghead -eggheaded -eggheadedness -eggheadednesses -eggheads -egging -eggless -eggnog -eggnogs -eggplant -eggplants -eggs -eggshell -eggshells -eggy -egis -egises -eglantine -eglantines -eglatere -eglateres -eglomise -ego -egocentric -egocentrically -egocentricities -egocentricity -egocentrics -egocentrism -egocentrisms -egoism -egoisms -egoist -egoistic -egoistical -egoistically -egoists -egoless -egomania -egomaniac -egomaniacal -egomaniacally -egomaniacs -egomanias -egos -egotism -egotisms -egotist -egotistic -egotistical -egotistically -egotists -egregious -egregiously -egregiousness -egregiousnesses -egress -egressed -egresses -egressing -egression -egressions -egret -egrets -egyptian -egyptians -eh -eicosanoid -eicosanoids -eide -eider -eiderdown -eiderdowns -eiders -eidetic -eidetically -eidola -eidolic -eidolon -eidolons -eidos -eigenmode -eigenmodes -eigenvalue -eigenvalues -eigenvector -eigenvectors -eight -eightball -eightballs -eighteen -eighteens -eighteenth -eighteenths -eightfold -eighth -eighthly -eighths -eighties -eightieth -eightieths -eights -eightvo -eightvos -eighty -eikon -eikones -eikons -einkorn -einkorns -einstein -einsteinium -einsteiniums -einsteins -eirenic -eisegeses -eisegesis -eisteddfod -eisteddfodau -eisteddfodic -eisteddfods -eiswein -eisweins -either -ejaculate -ejaculated -ejaculates -ejaculating -ejaculation -ejaculations -ejaculator -ejaculators -ejaculatory -eject -ejecta -ejectable -ejected -ejecting -ejection -ejections -ejective -ejectives -ejectment -ejectments -ejector -ejectors -ejects -eke -eked -ekes -eking -ekistic -ekistics -ekpwele -ekpweles -ektexine -ektexines -ekuele -el -elaborate -elaborated -elaborately -elaborateness -elaboratenesses -elaborates -elaborating -elaboration -elaborations -elaborative -elain -elains -elan -eland -elands -elans -elaphine -elapid -elapids -elapine -elapse -elapsed -elapses -elapsing -elasmobranch -elasmobranchs -elastase -elastases -elastic -elastically -elasticities -elasticity -elasticized -elastics -elastin -elastins -elastomer -elastomeric -elastomers -elate -elated -elatedly -elatedness -elatednesses -elater -elaterid -elaterids -elaterin -elaterins -elaterite -elaterites -elaters -elates -elating -elation -elations -elative -elatives -elbow -elbowed -elbowing -elbowroom -elbowrooms -elbows -eld -elder -elderberries -elderberry -elderlies -elderliness -elderlinesses -elderly -elders -eldership -elderships -eldest -eldress -eldresses -eldrich -eldritch -elds -elecampane -elecampanes -elect -electabilities -electability -electable -elected -electee -electees -electing -election -electioneer -electioneered -electioneerer -electioneerers -electioneering -electioneers -elections -elective -electively -electiveness -electivenesses -electives -elector -electoral -electorally -electorate -electorates -electors -electress -electresses -electret -electrets -electric -electrical -electrically -electrician -electricians -electricities -electricity -electrics -electrification -electrifications -electrified -electrifies -electrify -electrifying -electro -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 -electrode -electrodeposit -electrodeposited -electrodepositing -electrodeposition -electrodepositions -electrodeposits -electrodermal -electrodes -electrodesiccation -electrodesiccations -electrodialyses -electrodialysis -electrodialytic -electrodynamic -electrodynamics -electrodynamometer -electrodynamometers -electroed -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 -electron -electronegative -electronegativities -electronegativity -electronic -electronically -electronics -electrons -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 -electros -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 -electrum -electrums -elects -electuaries -electuary -eledoisin -eledoisins -eleemosynary -elegance -elegances -elegancies -elegancy -elegant -elegantly -elegiac -elegiacal -elegiacally -elegiacs -elegies -elegise -elegised -elegises -elegising -elegist -elegists -elegit -elegits -elegize -elegized -elegizes -elegizing -elegy -element -elemental -elementally -elementals -elementarily -elementariness -elementarinesses -elementary -elements -elemi -elemis -elenchi -elenchic -elenchus -elenctic -elephant -elephantiases -elephantiasis -elephantine -elephants -elevate -elevated -elevateds -elevates -elevating -elevation -elevations -elevator -elevators -eleven -elevens -elevenses -eleventh -elevenths -elevon -elevons -elf -elfin -elfins -elfish -elfishly -elflike -elflock -elflocks -elhi -elicit -elicitation -elicitations -elicited -eliciting -elicitor -elicitors -elicits -elide -elided -elides -elidible -eliding -eligibilities -eligibility -eligible -eligibles -eligibly -eliminate -eliminated -eliminates -eliminating -elimination -eliminations -eliminative -eliminator -eliminators -elint -elints -elision -elisions -elite -elites -elitism -elitisms -elitist -elitists -elixir -elixirs -elk -elkhound -elkhounds -elks -ell -ellipse -ellipses -ellipsis -ellipsoid -ellipsoidal -ellipsoids -elliptic -elliptical -elliptically -ellipticals -ellipticities -ellipticity -ells -elm -elmier -elmiest -elms -elmy -elocution -elocutionary -elocutionist -elocutionists -elocutions -elodea -elodeas -eloign -eloigned -eloigner -eloigners -eloigning -eloigns -eloin -eloined -eloiner -eloiners -eloining -eloins -elongate -elongated -elongates -elongating -elongation -elongations -elope -eloped -elopement -elopements -eloper -elopers -elopes -eloping -eloquence -eloquences -eloquent -eloquently -els -else -elsewhere -eluant -eluants -eluate -eluates -elucidate -elucidated -elucidates -elucidating -elucidation -elucidations -elucidative -elucidator -elucidators -elucubrate -elucubrated -elucubrates -elucubrating -elucubration -elucubrations -elude -eluded -eluder -eluders -eludes -eluding -eluent -eluents -elusion -elusions -elusive -elusively -elusiveness -elusivenesses -elusory -elute -eluted -elutes -eluting -elution -elutions -elutriate -elutriated -elutriates -elutriating -elutriation -elutriations -elutriator -elutriators -eluvia -eluvial -eluviate -eluviated -eluviates -eluviating -eluviation -eluviations -eluvium -eluviums -elver -elvers -elves -elvish -elvishly -elysian -elytra -elytroid -elytron -elytrous -elytrum -em -emaciate -emaciated -emaciates -emaciating -emaciation -emaciations -email -emailed -emailing -emails -emalangeni -emanate -emanated -emanates -emanating -emanation -emanations -emanative -emanator -emanators -emancipate -emancipated -emancipates -emancipating -emancipation -emancipationist -emancipationists -emancipations -emancipator -emancipators -emarginate -emargination -emarginations -emasculate -emasculated -emasculates -emasculating -emasculation -emasculations -emasculator -emasculators -embalm -embalmed -embalmer -embalmers -embalming -embalmment -embalmments -embalms -embank -embanked -embanking -embankment -embankments -embanks -embar -embarcadero -embarcaderos -embargo -embargoed -embargoes -embargoing -embark -embarkation -embarkations -embarked -embarking -embarkment -embarkments -embarks -embarrass -embarrassable -embarrassed -embarrassedly -embarrasses -embarrassing -embarrassingly -embarrassment -embarrassments -embarred -embarring -embars -embassage -embassages -embassies -embassy -embattle -embattled -embattlement -embattlements -embattles -embattling -embay -embayed -embaying -embayment -embayments -embays -embed -embedded -embedding -embeddings -embedment -embedments -embeds -embellish -embellished -embellisher -embellishers -embellishes -embellishing -embellishment -embellishments -ember -embers -embezzle -embezzled -embezzlement -embezzlements -embezzler -embezzlers -embezzles -embezzling -embitter -embittered -embittering -embitterment -embitterments -embitters -emblaze -emblazed -emblazer -emblazers -emblazes -emblazing -emblazon -emblazoned -emblazoner -emblazoners -emblazoning -emblazonment -emblazonments -emblazonries -emblazonry -emblazons -emblem -emblematic -emblematical -emblematically -emblematize -emblematized -emblematizes -emblematizing -emblemed -emblements -embleming -emblems -embodied -embodier -embodiers -embodies -embodiment -embodiments -embody -embodying -embolden -emboldened -emboldening -emboldens -embolectomies -embolectomy -emboli -embolic -embolies -embolism -embolismic -embolisms -embolization -embolizations -embolus -emboly -embonpoint -embonpoints -emborder -embordered -embordering -emborders -embosk -embosked -embosking -embosks -embosom -embosomed -embosoming -embosoms -emboss -embossable -embossed -embosser -embossers -embosses -embossing -embossment -embossments -embouchure -embouchures -embourgeoisement -embourgeoisements -embow -embowed -embowel -emboweled -emboweling -embowelled -embowelling -embowels -embower -embowered -embowering -embowers -embowing -embows -embrace -embraceable -embraced -embracement -embracements -embraceor -embraceors -embracer -embraceries -embracers -embracery -embraces -embracing -embracingly -embracive -embrangle -embrangled -embranglement -embranglements -embrangles -embrangling -embrasure -embrasures -embrittle -embrittled -embrittlement -embrittlements -embrittles -embrittling -embrocation -embrocations -embroider -embroidered -embroiderer -embroiderers -embroideries -embroidering -embroiders -embroidery -embroil -embroiled -embroiling -embroilment -embroilments -embroils -embrown -embrowned -embrowning -embrowns -embrue -embrued -embrues -embruing -embrute -embruted -embrutes -embruting -embryo -embryogeneses -embryogenesis -embryogenetic -embryogenic -embryogenies -embryogeny -embryoid -embryoids -embryological -embryologically -embryologies -embryologist -embryologists -embryology -embryon -embryonal -embryonated -embryonic -embryonically -embryons -embryophyte -embryophytes -embryos -emcee -emceed -emceeing -emcees -eme -emeer -emeerate -emeerates -emeers -emend -emendable -emendate -emendated -emendates -emendating -emendation -emendations -emended -emender -emenders -emending -emends -emerald -emeralds -emerge -emerged -emergence -emergences -emergencies -emergency -emergent -emergents -emerges -emerging -emeries -emerita -emeritae -emeritas -emeriti -emeritus -emerod -emerods -emeroid -emeroids -emersed -emersion -emersions -emery -emes -emeses -emesis -emetic -emetically -emetics -emetin -emetine -emetines -emetins -emeu -emeus -emeute -emeutes -emf -emfs -emic -emigrant -emigrants -emigrate -emigrated -emigrates -emigrating -emigration -emigrations -emigre -emigres -eminence -eminences -eminencies -eminency -eminent -eminently -emir -emirate -emirates -emirs -emissaries -emissary -emission -emissions -emissive -emissivities -emissivity -emit -emits -emittance -emittances -emitted -emitter -emitters -emitting -emmenagogue -emmenagogues -emmer -emmers -emmet -emmets -emodin -emodins -emollient -emollients -emolument -emoluments -emote -emoted -emoter -emoters -emotes -emoting -emotion -emotional -emotionalism -emotionalisms -emotionalist -emotionalistic -emotionalists -emotionalities -emotionality -emotionalize -emotionalized -emotionalizes -emotionalizing -emotionally -emotionless -emotionlessly -emotionlessness -emotionlessnesses -emotions -emotive -emotively -emotivities -emotivity -empale -empaled -empaler -empalers -empales -empaling -empanada -empanadas -empanel -empaneled -empaneling -empanelled -empanelling -empanels -empathetic -empathetically -empathic -empathically -empathies -empathise -empathised -empathises -empathising -empathize -empathized -empathizes -empathizing -empathy -empennage -empennages -emperies -emperor -emperors -emperorship -emperorships -empery -emphases -emphasis -emphasise -emphasised -emphasises -emphasising -emphasize -emphasized -emphasizes -emphasizing -emphatic -emphatically -emphysema -emphysemas -emphysematous -emphysemic -empire -empires -empiric -empirical -empirically -empiricism -empiricisms -empiricist -empiricists -empirics -emplace -emplaced -emplacement -emplacements -emplaces -emplacing -emplane -emplaned -emplanes -emplaning -employ -employabilities -employability -employable -employables -employe -employed -employee -employees -employer -employers -employes -employing -employment -employments -employs -empoison -empoisoned -empoisoning -empoisonment -empoisonments -empoisons -emporia -emporium -emporiums -empower -empowered -empowering -empowerment -empowerments -empowers -empress -empressement -empressements -empresses -emprise -emprises -emprize -emprizes -emptied -emptier -emptiers -empties -emptiest -emptily -emptiness -emptinesses -emptings -emptins -empty -emptying -empurple -empurpled -empurples -empurpling -empyema -empyemas -empyemata -empyemic -empyreal -empyrean -empyreans -ems -emu -emulate -emulated -emulates -emulating -emulation -emulations -emulative -emulatively -emulator -emulators -emulous -emulously -emulousness -emulousnesses -emulsifiable -emulsification -emulsifications -emulsified -emulsifier -emulsifiers -emulsifies -emulsify -emulsifying -emulsion -emulsions -emulsive -emulsoid -emulsoidal -emulsoids -emus -emyd -emyde -emydes -emyds -en -enable -enabled -enabler -enablers -enables -enabling -enact -enacted -enacting -enactive -enactment -enactments -enactor -enactors -enactory -enacts -enamel -enameled -enameler -enamelers -enameling -enamelist -enamelists -enamelled -enamelling -enamels -enamelware -enamelwares -enamine -enamines -enamor -enamoration -enamorations -enamored -enamoring -enamors -enamour -enamoured -enamouring -enamours -enantiomer -enantiomeric -enantiomers -enantiomorph -enantiomorphic -enantiomorphism -enantiomorphisms -enantiomorphous -enantiomorphs -enate -enates -enatic -enation -enations -encaenia -encage -encaged -encages -encaging -encamp -encamped -encamping -encampment -encampments -encamps -encapsulate -encapsulated -encapsulates -encapsulating -encapsulation -encapsulations -encapsule -encapsuled -encapsules -encapsuling -encase -encased -encasement -encasements -encases -encash -encashable -encashed -encashes -encashing -encashment -encashments -encasing -encaustic -encaustics -enceinte -enceintes -encephala -encephalitic -encephalitides -encephalitis -encephalitogen -encephalitogenic -encephalitogens -encephalogram -encephalograms -encephalograph -encephalographies -encephalographs -encephalography -encephalomyelitides -encephalomyelitis -encephalomyocarditis -encephalomyocarditises -encephalon -encephalopathic -encephalopathies -encephalopathy -enchain -enchained -enchaining -enchainment -enchainments -enchains -enchant -enchanted -enchanter -enchanters -enchanting -enchantingly -enchantment -enchantments -enchantress -enchantresses -enchants -enchase -enchased -enchaser -enchasers -enchases -enchasing -enchilada -enchiladas -enchiridia -enchiridion -enchiridions -enchoric -encina -encinal -encinas -encipher -enciphered -encipherer -encipherers -enciphering -encipherment -encipherments -enciphers -encircle -encircled -encirclement -encirclements -encircles -encircling -enclasp -enclasped -enclasping -enclasps -enclave -enclaves -enclitic -enclitics -enclose -enclosed -encloser -enclosers -encloses -enclosing -enclosure -enclosures -encode -encoded -encoder -encoders -encodes -encoding -encomia -encomiast -encomiastic -encomiasts -encomium -encomiums -encompass -encompassed -encompasses -encompassing -encompassment -encompassments -encore -encored -encores -encoring -encounter -encountered -encountering -encounters -encourage -encouraged -encouragement -encouragements -encourager -encouragers -encourages -encouraging -encouragingly -encrimson -encrimsoned -encrimsoning -encrimsons -encroach -encroached -encroacher -encroachers -encroaches -encroaching -encroachment -encroachments -encrust -encrustation -encrustations -encrusted -encrusting -encrusts -encrypt -encrypted -encrypting -encryption -encryptions -encrypts -encumber -encumbered -encumbering -encumbers -encumbrance -encumbrancer -encumbrancers -encumbrances -encyclic -encyclical -encyclicals -encyclics -encyclopaedia -encyclopaedias -encyclopaedic -encyclopedia -encyclopedias -encyclopedic -encyclopedically -encyclopedism -encyclopedisms -encyclopedist -encyclopedists -encyst -encysted -encysting -encystment -encystments -encysts -end -endamage -endamaged -endamages -endamaging -endameba -endamebae -endamebas -endamoeba -endamoebae -endamoebas -endanger -endangered -endangering -endangerment -endangerments -endangers -endarch -endarchies -endarchy -endarterectomies -endarterectomy -endbrain -endbrains -endear -endeared -endearing -endearingly -endearment -endearments -endears -endeavor -endeavored -endeavoring -endeavors -endeavour -endeavoured -endeavouring -endeavours -ended -endemial -endemic -endemically -endemicities -endemicity -endemics -endemism -endemisms -ender -endergonic -endermic -enders -endexine -endexines -endgame -endgames -ending -endings -endite -endited -endites -enditing -endive -endives -endleaf -endleaves -endless -endlessly -endlessness -endlessnesses -endlong -endmost -endnote -endnotes -endobiotic -endocardia -endocardial -endocarditis -endocarditises -endocardium -endocarp -endocarps -endocast -endocasts -endochondral -endocrine -endocrines -endocrinologic -endocrinological -endocrinologies -endocrinologist -endocrinologists -endocrinology -endocytoses -endocytosis -endocytotic -endoderm -endodermal -endodermis -endodermises -endoderms -endodontic -endodontically -endodontics -endodontist -endodontists -endoenzyme -endoenzymes -endoergic -endogamies -endogamous -endogamy -endogen -endogenic -endogenies -endogenous -endogenously -endogens -endogeny -endolithic -endolymph -endolymphatic -endolymphs -endometria -endometrial -endometrioses -endometriosis -endometritis -endometritises -endometrium -endomitoses -endomitosis -endomitotic -endomixis -endomixises -endomorph -endomorphic -endomorphies -endomorphism -endomorphisms -endomorphs -endomorphy -endonuclease -endonucleases -endonucleolytic -endoparasite -endoparasites -endoparasitic -endoparasitism -endoparasitisms -endopeptidase -endopeptidases -endoperoxide -endoperoxides -endophyte -endophytes -endophytic -endoplasm -endoplasmic -endoplasms -endopod -endopodite -endopodites -endopods -endopolyploid -endopolyploidies -endopolyploidy -endorphin -endorphins -endorsable -endorse -endorsed -endorsee -endorsees -endorsement -endorsements -endorser -endorsers -endorses -endorsing -endorsor -endorsors -endosarc -endosarcs -endoscope -endoscopes -endoscopic -endoscopically -endoscopies -endoscopy -endoskeletal -endoskeleton -endoskeletons -endosmos -endosmoses -endosome -endosomes -endosperm -endosperms -endospore -endospores -endostea -endosteal -endosteally -endosteum -endostyle -endostyles -endosulfan -endosulfans -endosymbiont -endosymbionts -endosymbioses -endosymbiosis -endosymbiotic -endothecia -endothecium -endothelia -endothelial -endothelioma -endotheliomas -endotheliomata -endothelium -endotherm -endothermic -endothermies -endotherms -endothermy -endotoxic -endotoxin -endotoxins -endotracheal -endotrophic -endow -endowed -endower -endowers -endowing -endowment -endowments -endows -endozoic -endpaper -endpapers -endplate -endplates -endpoint -endpoints -endrin -endrins -ends -endue -endued -endues -enduing -endurable -endurably -endurance -endurances -endure -endured -endures -enduring -enduringly -enduringness -enduringnesses -enduro -enduros -endways -endwise -enema -enemas -enemata -enemies -enemy -energetic -energetically -energetics -energid -energids -energies -energise -energised -energises -energising -energization -energizations -energize -energized -energizer -energizers -energizes -energizing -energy -enervate -enervated -enervates -enervating -enervation -enervations -enface -enfaced -enfaces -enfacing -enfeeble -enfeebled -enfeeblement -enfeeblements -enfeebles -enfeebling -enfeoff -enfeoffed -enfeoffing -enfeoffment -enfeoffments -enfeoffs -enfetter -enfettered -enfettering -enfetters -enfever -enfevered -enfevering -enfevers -enfilade -enfiladed -enfilades -enfilading -enflame -enflamed -enflames -enflaming -enfleurage -enfleurages -enfold -enfolded -enfolder -enfolders -enfolding -enfolds -enforce -enforceabilities -enforceability -enforceable -enforced -enforcement -enforcements -enforcer -enforcers -enforces -enforcing -enframe -enframed -enframement -enframements -enframes -enframing -enfranchise -enfranchised -enfranchisement -enfranchisements -enfranchises -enfranchising -eng -engage -engaged -engagement -engagements -engager -engagers -engages -engaging -engagingly -engarland -engarlanded -engarlanding -engarlands -engender -engendered -engendering -engenders -engild -engilded -engilding -engilds -engine -engined -engineer -engineered -engineering -engineerings -engineers -engineries -enginery -engines -engining -enginous -engird -engirded -engirding -engirdle -engirdled -engirdles -engirdling -engirds -engirt -english -englished -englishes -englishing -englobe -englobed -englobes -englobing -englut -engluts -englutted -englutting -engorge -engorged -engorgement -engorgements -engorges -engorging -engraft -engrafted -engrafting -engraftment -engraftments -engrafts -engrail -engrailed -engrailing -engrails -engrain -engrained -engraining -engrains -engram -engramme -engrammes -engrams -engrave -engraved -engraver -engravers -engraves -engraving -engravings -engross -engrossed -engrosser -engrossers -engrosses -engrossing -engrossingly -engrossment -engrossments -engs -engulf -engulfed -engulfing -engulfment -engulfments -engulfs -enhalo -enhaloed -enhaloes -enhaloing -enhalos -enhance -enhanced -enhancement -enhancements -enhancer -enhancers -enhances -enhancing -enharmonic -enharmonically -enigma -enigmas -enigmata -enigmatic -enigmatical -enigmatically -enisle -enisled -enisles -enisling -enjambed -enjambement -enjambements -enjambment -enjambments -enjoin -enjoined -enjoiner -enjoiners -enjoining -enjoins -enjoy -enjoyable -enjoyableness -enjoyablenesses -enjoyably -enjoyed -enjoyer -enjoyers -enjoying -enjoyment -enjoyments -enjoys -enkephalin -enkephalins -enkindle -enkindled -enkindles -enkindling -enlace -enlaced -enlacement -enlacements -enlaces -enlacing -enlarge -enlargeable -enlarged -enlargement -enlargements -enlarger -enlargers -enlarges -enlarging -enlighten -enlightened -enlightening -enlightenment -enlightenments -enlightens -enlist -enlisted -enlistee -enlistees -enlister -enlisters -enlisting -enlistment -enlistments -enlists -enliven -enlivened -enlivening -enlivens -enmesh -enmeshed -enmeshes -enmeshing -enmeshment -enmeshments -enmities -enmity -ennead -enneadic -enneads -enneagon -enneagons -ennoble -ennobled -ennoblement -ennoblements -ennobler -ennoblers -ennobles -ennobling -ennui -ennuis -ennuye -ennuyee -enoki -enokidake -enokidakes -enokis -enol -enolase -enolases -enolic -enological -enologies -enologist -enologists -enology -enols -enorm -enormities -enormity -enormous -enormously -enormousness -enormousnesses -enosis -enosises -enough -enoughs -enounce -enounced -enounces -enouncing -enow -enows -enplane -enplaned -enplanes -enplaning -enquire -enquired -enquires -enquiries -enquiring -enquiry -enrage -enraged -enrages -enraging -enrapt -enrapture -enraptured -enraptures -enrapturing -enravish -enravished -enravishes -enravishing -enregister -enregistered -enregistering -enregisters -enrich -enriched -enricher -enrichers -enriches -enriching -enrichment -enrichments -enrobe -enrobed -enrober -enrobers -enrobes -enrobing -enrol -enroll -enrolled -enrollee -enrollees -enroller -enrollers -enrolling -enrollment -enrollments -enrolls -enrolment -enrolments -enrols -enroot -enrooted -enrooting -enroots -ens -ensample -ensamples -ensanguine -ensanguined -ensanguines -ensanguining -ensconce -ensconced -ensconces -ensconcing -enscroll -enscrolled -enscrolling -enscrolls -ensemble -ensembles -enserf -enserfed -enserfing -enserfment -enserfments -enserfs -ensheath -ensheathe -ensheathed -ensheathes -ensheathing -ensheaths -enshrine -enshrined -enshrinee -enshrinees -enshrinement -enshrinements -enshrines -enshrining -enshroud -enshrouded -enshrouding -enshrouds -ensiform -ensign -ensigncies -ensigncy -ensigns -ensilage -ensilaged -ensilages -ensilaging -ensile -ensiled -ensiles -ensiling -enskied -enskies -ensky -enskyed -enskying -enslave -enslaved -enslavement -enslavements -enslaver -enslavers -enslaves -enslaving -ensnare -ensnared -ensnarer -ensnarers -ensnares -ensnaring -ensnarl -ensnarled -ensnarling -ensnarls -ensorcel -ensorceled -ensorceling -ensorcell -ensorcelled -ensorcelling -ensorcellment -ensorcellments -ensorcells -ensorcels -ensoul -ensouled -ensouling -ensouls -ensphere -ensphered -enspheres -ensphering -ensue -ensued -ensues -ensuing -ensure -ensured -ensurer -ensurers -ensures -ensuring -enswathe -enswathed -enswathes -enswathing -entablature -entablatures -entail -entailed -entailer -entailers -entailing -entailment -entailments -entails -entameba -entamebae -entamebas -entamoeba -entamoebae -entamoebas -entangle -entangled -entanglement -entanglements -entangler -entanglers -entangles -entangling -entases -entasia -entasias -entasis -entastic -entelechies -entelechy -entellus -entelluses -entente -ententes -enter -entera -enterable -enteral -enterally -entered -enterer -enterers -enteric -entering -enteritides -enteritis -enteritises -enterobacteria -enterobacterial -enterobacterium -enterobiases -enterobiasis -enterochromaffin -enterococcal -enterococci -enterococcus -enterocoel -enterocoele -enterocoeles -enterocoelic -enterocoelous -enterocoels -enterocolitis -enterocolitises -enterogastrone -enterogastrones -enterokinase -enterokinases -enteron -enterons -enteropathies -enteropathogenic -enteropathy -enterostomal -enterostomies -enterostomy -enterotoxin -enterotoxins -enteroviral -enterovirus -enteroviruses -enterprise -enterpriser -enterprisers -enterprises -enterprising -enters -entertain -entertained -entertainer -entertainers -entertaining -entertainingly -entertainment -entertainments -entertains -enthalpies -enthalpy -enthetic -enthral -enthrall -enthralled -enthralling -enthrallment -enthrallments -enthralls -enthrals -enthrone -enthroned -enthronement -enthronements -enthrones -enthroning -enthuse -enthused -enthuses -enthusiasm -enthusiasms -enthusiast -enthusiastic -enthusiastically -enthusiasts -enthusing -enthymeme -enthymemes -entia -entice -enticed -enticement -enticements -enticer -enticers -entices -enticing -enticingly -entire -entirely -entireness -entirenesses -entires -entireties -entirety -entities -entitle -entitled -entitlement -entitlements -entitles -entitling -entity -entoderm -entodermal -entodermic -entoderms -entoil -entoiled -entoiling -entoils -entomb -entombed -entombing -entombment -entombments -entombs -entomofauna -entomofaunae -entomofaunas -entomological -entomologically -entomologies -entomologist -entomologists -entomology -entomophagous -entomophilies -entomophilous -entomophily -entopic -entoproct -entoprocts -entourage -entourages -entozoa -entozoal -entozoan -entozoans -entozoic -entozoon -entrails -entrain -entrained -entrainer -entrainers -entraining -entrainment -entrainments -entrains -entrance -entranced -entrancement -entrancements -entrances -entranceway -entranceways -entrancing -entrant -entrants -entrap -entrapment -entrapments -entrapped -entrapping -entraps -entreat -entreated -entreaties -entreating -entreatingly -entreatment -entreatments -entreats -entreaty -entrechat -entrechats -entrecote -entrecotes -entree -entrees -entremets -entrench -entrenched -entrenches -entrenching -entrenchment -entrenchments -entrepot -entrepots -entrepreneur -entrepreneurial -entrepreneurialism -entrepreneurialisms -entrepreneurially -entrepreneurs -entrepreneurship -entrepreneurships -entresol -entresols -entries -entropic -entropically -entropies -entropion -entropions -entropy -entrust -entrusted -entrusting -entrustment -entrustments -entrusts -entry -entryway -entryways -entwine -entwined -entwines -entwining -entwist -entwisted -entwisting -entwists -enucleate -enucleated -enucleates -enucleating -enucleation -enucleations -enumerabilities -enumerability -enumerable -enumerate -enumerated -enumerates -enumerating -enumeration -enumerations -enumerative -enumerator -enumerators -enunciable -enunciate -enunciated -enunciates -enunciating -enunciation -enunciations -enunciator -enunciators -enure -enured -enures -enureses -enuresis -enuresises -enuretic -enuretics -enuring -envelop -envelope -enveloped -envelopes -enveloping -envelopment -envelopments -envelops -envenom -envenomed -envenoming -envenomization -envenomizations -envenoms -enviable -enviableness -enviablenesses -enviably -envied -envier -enviers -envies -envious -enviously -enviousness -enviousnesses -environ -environed -environing -environment -environmental -environmentalism -environmentalisms -environmentalist -environmentalists -environmentally -environments -environs -envisage -envisaged -envisages -envisaging -envision -envisioned -envisioning -envisions -envoi -envois -envoy -envoys -envy -envying -envyingly -enwheel -enwheeled -enwheeling -enwheels -enwind -enwinding -enwinds -enwomb -enwombed -enwombing -enwombs -enwound -enwrap -enwrapped -enwrapping -enwraps -enwreathe -enwreathed -enwreathes -enwreathing -enzootic -enzootics -enzym -enzymatic -enzymatically -enzyme -enzymes -enzymic -enzymically -enzymologies -enzymologist -enzymologists -enzymology -enzyms -eobiont -eobionts -eohippus -eohippuses -eolian -eolipile -eolipiles -eolith -eolithic -eoliths -eolopile -eolopiles -eon -eonian -eonism -eonisms -eons -eosin -eosine -eosines -eosinic -eosinophil -eosinophilia -eosinophilias -eosinophilic -eosinophils -eosins -epact -epacts -eparch -eparchies -eparchs -eparchy -epaulet -epaulets -epaulette -epauletted -epaulettes -epazote -epazotes -epee -epeeist -epeeists -epees -epeiric -epeirogenic -epeirogenically -epeirogenies -epeirogeny -ependyma -ependymas -epentheses -epenthesis -epenthetic -epergne -epergnes -epexegeses -epexegesis -epexegetic -epexegetical -epexegetically -epha -ephah -ephahs -ephas -ephebe -ephebes -ephebi -ephebic -epheboi -ephebos -ephebus -ephedra -ephedras -ephedrin -ephedrine -ephedrines -ephedrins -ephemera -ephemerae -ephemeral -ephemeralities -ephemerality -ephemerally -ephemerals -ephemeras -ephemerid -ephemerides -ephemerids -ephemeris -ephemeron -ephod -ephods -ephor -ephoral -ephorate -ephorates -ephori -ephors -epiblast -epiblastic -epiblasts -epibolic -epibolies -epiboly -epic -epical -epically -epicalyces -epicalyx -epicalyxes -epicardia -epicardial -epicardium -epicarp -epicarps -epicedia -epicedium -epicene -epicenes -epicenism -epicenisms -epicenter -epicenters -epicentral -epichlorohydrin -epichlorohydrins -epiclike -epicontinental -epicotyl -epicotyls -epicritic -epics -epicure -epicurean -epicureanism -epicureanisms -epicureans -epicures -epicurism -epicurisms -epicuticle -epicuticles -epicuticular -epicycle -epicycles -epicyclic -epicycloid -epicycloidal -epicycloids -epidemic -epidemical -epidemically -epidemicities -epidemicity -epidemics -epidemiologic -epidemiological -epidemiologically -epidemiologies -epidemiologist -epidemiologists -epidemiology -epidendrum -epidendrums -epiderm -epidermal -epidermic -epidermis -epidermises -epidermoid -epiderms -epidiascope -epidiascopes -epididymal -epididymides -epididymis -epididymitis -epididymitises -epidote -epidotes -epidotic -epidural -epifauna -epifaunae -epifaunal -epifaunas -epifocal -epigastric -epigeal -epigean -epigeic -epigene -epigeneses -epigenesis -epigenetic -epigenetically -epigenic -epigeous -epiglottal -epiglottic -epiglottides -epiglottis -epiglottises -epigon -epigone -epigones -epigoni -epigonic -epigonism -epigonisms -epigonous -epigons -epigonus -epigram -epigrammatic -epigrammatically -epigrammatism -epigrammatisms -epigrammatist -epigrammatists -epigrammatize -epigrammatized -epigrammatizer -epigrammatizers -epigrammatizes -epigrammatizing -epigrams -epigraph -epigrapher -epigraphers -epigraphic -epigraphical -epigraphically -epigraphies -epigraphist -epigraphists -epigraphs -epigraphy -epigynies -epigynous -epigyny -epilation -epilations -epilepsies -epilepsy -epileptic -epileptically -epileptics -epileptiform -epileptogenic -epileptoid -epilimnion -epilimnions -epilog -epilogs -epilogue -epilogued -epilogues -epiloguing -epimer -epimerase -epimerases -epimere -epimeres -epimeric -epimers -epimysia -epimysium -epinaoi -epinaos -epinasties -epinasty -epinephrin -epinephrine -epinephrines -epinephrins -epineuria -epineurium -epineuriums -epipelagic -epiphanic -epiphanies -epiphanous -epiphany -epiphenomena -epiphenomenal -epiphenomenalism -epiphenomenalisms -epiphenomenally -epiphenomenon -epiphragm -epiphragms -epiphyseal -epiphyses -epiphysial -epiphysis -epiphyte -epiphytes -epiphytic -epiphytically -epiphytism -epiphytisms -epiphytologies -epiphytology -epiphytotic -epiphytotics -episcia -episcias -episcopacies -episcopacy -episcopal -episcopally -episcopate -episcopates -episcope -episcopes -episiotomies -episiotomy -episode -episodes -episodic -episodical -episodically -episomal -episomally -episome -episomes -epistases -epistasies -epistasis -epistasy -epistatic -epistaxes -epistaxis -epistemic -epistemically -epistemological -epistemologically -epistemologies -epistemologist -epistemologists -epistemology -epistle -epistler -epistlers -epistles -epistolaries -epistolary -epistoler -epistolers -epistome -epistomes -epistrophe -epistrophes -epistyle -epistyles -epitaph -epitaphial -epitaphic -epitaphs -epitases -epitasis -epitaxial -epitaxially -epitaxic -epitaxies -epitaxy -epithalamia -epithalamic -epithalamion -epithalamium -epithalamiums -epithelia -epithelial -epithelialization -epithelializations -epithelialize -epithelialized -epithelializes -epithelializing -epithelioid -epithelioma -epitheliomas -epitheliomata -epitheliomatous -epithelium -epitheliums -epithelization -epithelizations -epithelize -epithelized -epithelizes -epithelizing -epithet -epithetic -epithetical -epithets -epitome -epitomes -epitomic -epitomical -epitomise -epitomised -epitomises -epitomising -epitomize -epitomized -epitomizes -epitomizing -epitope -epitopes -epizoa -epizoic -epizoism -epizoisms -epizoite -epizoites -epizoon -epizootic -epizootics -epizooties -epizootiologic -epizootiological -epizootiologies -epizootiology -epizooty -epoch -epochal -epochally -epochs -epode -epodes -eponym -eponymic -eponymies -eponymous -eponyms -eponymy -epopee -epopees -epopoeia -epopoeias -epos -eposes -epoxidation -epoxidations -epoxide -epoxides -epoxidize -epoxidized -epoxidizes -epoxidizing -epoxied -epoxies -epoxy -epoxyed -epoxying -epsilon -epsilonic -epsilons -equabilities -equability -equable -equableness -equablenesses -equably -equal -equaled -equaling -equalise -equalised -equaliser -equalisers -equalises -equalising -equalitarian -equalitarianism -equalitarianisms -equalitarians -equalities -equality -equalization -equalizations -equalize -equalized -equalizer -equalizers -equalizes -equalizing -equalled -equalling -equally -equals -equanimities -equanimity -equate -equated -equates -equating -equation -equational -equationally -equations -equator -equatorial -equators -equatorward -equerries -equerry -equestrian -equestrians -equestrienne -equestriennes -equiangular -equicaloric -equid -equidistant -equidistantly -equids -equilateral -equilibrant -equilibrants -equilibrate -equilibrated -equilibrates -equilibrating -equilibration -equilibrations -equilibrator -equilibrators -equilibratory -equilibria -equilibrist -equilibristic -equilibrists -equilibrium -equilibriums -equimolar -equine -equinely -equines -equinities -equinity -equinoctial -equinoctials -equinox -equinoxes -equip -equipage -equipages -equipment -equipments -equipoise -equipoised -equipoises -equipoising -equipollence -equipollences -equipollent -equipollently -equipollents -equiponderant -equipotential -equipped -equipper -equippers -equipping -equiprobable -equips -equiseta -equisetum -equisetums -equitabilities -equitability -equitable -equitableness -equitablenesses -equitably -equitant -equitation -equitations -equites -equities -equity -equivalence -equivalences -equivalencies -equivalency -equivalent -equivalently -equivalents -equivocal -equivocalities -equivocality -equivocally -equivocalness -equivocalnesses -equivocate -equivocated -equivocates -equivocating -equivocation -equivocations -equivocator -equivocators -equivoke -equivokes -equivoque -equivoques -er -era -eradiate -eradiated -eradiates -eradiating -eradicable -eradicate -eradicated -eradicates -eradicating -eradication -eradications -eradicator -eradicators -eras -erasabilities -erasability -erasable -erase -erased -eraser -erasers -erases -erasing -erasion -erasions -erasure -erasures -erbium -erbiums -ere -erect -erectable -erected -erecter -erecters -erectile -erectilities -erectility -erecting -erection -erections -erective -erectly -erectness -erectnesses -erector -erectors -erects -erelong -eremite -eremites -eremitic -eremitical -eremitism -eremitisms -eremuri -eremurus -erenow -erepsin -erepsins -erethic -erethism -erethisms -erewhile -erewhiles -erg -ergastic -ergastoplasm -ergastoplasmic -ergastoplasms -ergate -ergates -ergative -ergo -ergodic -ergodicities -ergodicity -ergograph -ergographs -ergometer -ergometers -ergometric -ergonomic -ergonomically -ergonomics -ergonomist -ergonomists -ergonovine -ergonovines -ergosterol -ergosterols -ergot -ergotamine -ergotamines -ergotic -ergotism -ergotisms -ergotized -ergots -ergs -erica -ericaceous -ericas -ericoid -erigeron -erigerons -eringo -eringoes -eringos -eriophyid -eriophyids -eristic -eristical -eristically -eristics -erlking -erlkings -ermine -ermined -ermines -ern -erne -ernes -erns -erode -eroded -erodent -erodes -erodibilities -erodibility -erodible -eroding -erogenic -erogenous -eros -erose -erosely -eroses -erosible -erosion -erosional -erosionally -erosions -erosive -erosiveness -erosivenesses -erosivities -erosivity -erotic -erotica -erotical -erotically -eroticism -eroticisms -eroticist -eroticists -eroticization -eroticizations -eroticize -eroticized -eroticizes -eroticizing -erotics -erotism -erotisms -erotization -erotizations -erotize -erotized -erotizes -erotizing -erotogenic -err -errancies -errancy -errand -errands -errant -errantly -errantries -errantry -errants -errata -erratas -erratic -erratical -erratically -erraticism -erraticisms -erratics -erratum -erred -errhine -errhines -erring -erringly -erroneous -erroneously -erroneousness -erroneousnesses -error -errorless -errors -errs -ers -ersatz -ersatzes -erses -erst -erstwhile -eruct -eructate -eructated -eructates -eructating -eructation -eructations -eructed -eructing -eructs -erudite -eruditely -erudition -eruditions -erugo -erugos -erumpent -erupt -erupted -eruptible -erupting -eruption -eruptions -eruptive -eruptively -eruptives -erupts -ervil -ervils -eryngo -eryngoes -eryngos -erysipelas -erysipelases -erythema -erythemas -erythematous -erythorbate -erythorbates -erythremia -erythremias -erythrism -erythrismal -erythrisms -erythristic -erythrite -erythrites -erythroblast -erythroblastic -erythroblastoses -erythroblastosis -erythroblasts -erythrocyte -erythrocytes -erythrocytic -erythroid -erythromycin -erythromycins -erythron -erythrons -erythropoieses -erythropoiesis -erythropoietic -erythropoietin -erythropoietins -erythrosin -erythrosine -erythrosines -erythrosins -es -escadrille -escadrilles -escalade -escaladed -escalader -escaladers -escalades -escalading -escalate -escalated -escalates -escalating -escalation -escalations -escalator -escalators -escalatory -escallop -escalloped -escalloping -escallops -escalop -escaloped -escaloping -escalops -escapade -escapades -escape -escaped -escapee -escapees -escapement -escapements -escaper -escapers -escapes -escaping -escapism -escapisms -escapist -escapists -escapologies -escapologist -escapologists -escapology -escar -escargot -escargots -escarole -escaroles -escarp -escarped -escarping -escarpment -escarpments -escarps -escars -eschalot -eschalots -eschar -escharotic -escharotics -eschars -eschatological -eschatologically -eschatologies -eschatology -escheat -escheatable -escheated -escheating -escheats -eschew -eschewal -eschewals -eschewed -eschewing -eschews -escolar -escolars -escort -escorted -escorting -escorts -escot -escoted -escoting -escots -escritoire -escritoires -escrow -escrowed -escrowing -escrows -escuage -escuages -escudo -escudos -esculent -esculents -escutcheon -escutcheons -esemplastic -eserine -eserines -eses -eskar -eskars -esker -eskers -esophageal -esophagi -esophagus -esophaguses -esoteric -esoterica -esoterically -esotericism -esotericisms -espadrille -espadrilles -espalier -espaliered -espaliering -espaliers -espanol -espanoles -esparto -espartos -especial -especially -esperance -esperances -espial -espials -espied -espiegle -espieglerie -espiegleries -espies -espionage -espionages -esplanade -esplanades -espousal -espousals -espouse -espoused -espouser -espousers -espouses -espousing -espresso -espressos -esprit -esprits -espy -espying -esquire -esquired -esquires -esquiring -ess -essay -essayed -essayer -essayers -essaying -essayist -essayistic -essayists -essays -essence -essences -essential -essentialism -essentialisms -essentialist -essentialists -essentialities -essentiality -essentialize -essentialized -essentializes -essentializing -essentially -essentialness -essentialnesses -essentials -esses -essoin -essoins -essonite -essonites -establish -establishable -established -establisher -establishers -establishes -establishing -establishment -establishmentarian -establishmentarianism -establishmentarianisms -establishmentarians -establishments -estaminet -estaminets -estancia -estancias -estate -estated -estates -estating -esteem -esteemed -esteeming -esteems -ester -esterase -esterases -esterification -esterifications -esterified -esterifies -esterify -esterifying -esters -estheses -esthesia -esthesias -esthesis -esthesises -esthete -esthetes -esthetic -esthetician -estheticians -estheticism -estheticisms -esthetics -estimable -estimableness -estimablenesses -estimably -estimate -estimated -estimates -estimating -estimation -estimations -estimative -estimator -estimators -estival -estivate -estivated -estivates -estivating -estivation -estivations -estop -estopped -estoppel -estoppels -estopping -estops -estovers -estradiol -estradiols -estragon -estragons -estral -estrange -estranged -estrangement -estrangements -estranger -estrangers -estranges -estranging -estray -estrayed -estraying -estrays -estreat -estreated -estreating -estreats -estrin -estrins -estriol -estriols -estrogen -estrogenic -estrogenically -estrogens -estrone -estrones -estrous -estrual -estrum -estrums -estrus -estruses -estuarial -estuaries -estuarine -estuary -esurience -esuriences -esurient -esuriently -et -eta -etagere -etageres -etalon -etalons -etamin -etamine -etamines -etamins -etape -etapes -etas -etatism -etatisms -etatist -etcetera -etceteras -etch -etchant -etchants -etched -etcher -etchers -etches -etching -etchings -eternal -eternalize -eternalized -eternalizes -eternalizing -eternally -eternalness -eternalnesses -eternals -eterne -eternise -eternised -eternises -eternising -eternities -eternity -eternization -eternizations -eternize -eternized -eternizes -eternizing -etesian -etesians -eth -ethambutol -ethambutols -ethane -ethanes -ethanol -ethanolamine -ethanolamines -ethanols -ethene -ethenes -ethephon -ethephons -ether -ethereal -etherealities -ethereality -etherealization -etherealizations -etherealize -etherealized -etherealizes -etherealizing -ethereally -etherealness -etherealnesses -etheric -etherified -etherifies -etherify -etherifying -etherish -etherization -etherizations -etherize -etherized -etherizer -etherizers -etherizes -etherizing -ethers -ethic -ethical -ethicalities -ethicality -ethically -ethicalness -ethicalnesses -ethicals -ethician -ethicians -ethicist -ethicists -ethicize -ethicized -ethicizes -ethicizing -ethics -ethinyl -ethinyls -ethion -ethionamide -ethionamides -ethionine -ethionines -ethions -ethmoid -ethmoidal -ethmoids -ethnarch -ethnarchs -ethnic -ethnical -ethnically -ethnicities -ethnicity -ethnics -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 -ethnology -ethnomethodologies -ethnomethodologist -ethnomethodologists -ethnomethodology -ethnomusicological -ethnomusicologies -ethnomusicologist -ethnomusicologists -ethnomusicology -ethnos -ethnoscience -ethnosciences -ethnoses -ethological -ethologies -ethologist -ethologists -ethology -ethos -ethoses -ethoxies -ethoxy -ethoxyl -ethoxyls -eths -ethyl -ethylate -ethylated -ethylates -ethylating -ethylbenzene -ethylbenzenes -ethylene -ethylenediaminetetraacetate -ethylenediaminetetraacetates -ethylenes -ethylenic -ethylic -ethyls -ethyne -ethynes -ethynyl -ethynyls -etic -etiolate -etiolated -etiolates -etiolating -etiolation -etiolations -etiologic -etiological -etiologically -etiologies -etiology -etiquette -etiquettes -etna -etnas -etoile -etoiles -etouffee -etouffees -etude -etudes -etui -etuis -etwee -etwees -etyma -etymological -etymologically -etymologies -etymologise -etymologised -etymologises -etymologising -etymologist -etymologists -etymologize -etymologized -etymologizes -etymologizing -etymology -etymon -etymons -eucaine -eucaines -eucalypt -eucalypti -eucalyptol -eucalyptole -eucalyptoles -eucalyptols -eucalypts -eucalyptus -eucalyptuses -eucaryote -eucaryotes -eucharis -eucharises -eucharistic -euchre -euchred -euchres -euchring -euchromatic -euchromatin -euchromatins -euclase -euclases -euclidean -euclidian -eucrite -eucrites -eucritic -eudaemon -eudaemonism -eudaemonisms -eudaemonist -eudaemonistic -eudaemonists -eudaemons -eudaimonism -eudaimonisms -eudemon -eudemons -eudiometer -eudiometers -eudiometric -eudiometrically -eugenia -eugenias -eugenic -eugenically -eugenicist -eugenicists -eugenics -eugenist -eugenists -eugenol -eugenols -eugeosynclinal -eugeosyncline -eugeosynclines -euglena -euglenas -euglenoid -euglenoids -euglobulin -euglobulins -euhemerism -euhemerisms -euhemerist -euhemeristic -euhemerists -eukaryote -eukaryotes -eukaryotic -eulachan -eulachans -eulachon -eulachons -eulogia -eulogiae -eulogias -eulogies -eulogise -eulogised -eulogises -eulogising -eulogist -eulogistic -eulogistically -eulogists -eulogium -eulogiums -eulogize -eulogized -eulogizer -eulogizers -eulogizes -eulogizing -eulogy -eunuch -eunuchism -eunuchisms -eunuchoid -eunuchoids -eunuchs -euonymus -euonymuses -eupatrid -eupatridae -eupatrids -eupepsia -eupepsias -eupepsies -eupepsy -eupeptic -euphausiid -euphausiids -euphemise -euphemised -euphemises -euphemising -euphemism -euphemisms -euphemist -euphemistic -euphemistically -euphemists -euphemize -euphemized -euphemizer -euphemizers -euphemizes -euphemizing -euphenic -euphenics -euphonic -euphonically -euphonies -euphonious -euphoniously -euphoniousness -euphoniousnesses -euphonium -euphoniums -euphony -euphorbia -euphorbias -euphoria -euphoriant -euphoriants -euphorias -euphoric -euphorically -euphotic -euphrasies -euphrasy -euphroe -euphroes -euphuism -euphuisms -euphuist -euphuistic -euphuistically -euphuists -euploid -euploidies -euploids -euploidy -eupnea -eupneas -eupneic -eupnoea -eupnoeas -eupnoeic -eureka -eurhythmic -eurhythmics -eurhythmies -eurhythmy -euripi -euripus -euro -eurokies -eurokous -euroky -europium -europiums -euros -eurybath -eurybathic -eurybaths -euryhaline -euryokies -euryoky -eurypterid -eurypterids -eurythermal -eurythermic -eurythermous -eurythmic -eurythmics -eurythmies -eurythmy -eurytopic -eustacies -eustacy -eustatic -eustele -eusteles -eutaxies -eutaxy -eutectic -eutectics -eutectoid -eutectoids -euthanasia -euthanasias -euthanasic -euthanatize -euthanatized -euthanatizes -euthanatizing -euthanize -euthanized -euthanizes -euthanizing -euthenics -euthenist -euthenists -eutherian -eutherians -euthyroid -eutrophic -eutrophication -eutrophications -eutrophies -eutrophy -euxenite -euxenites -evacuant -evacuants -evacuate -evacuated -evacuates -evacuating -evacuation -evacuations -evacuative -evacuee -evacuees -evadable -evade -evaded -evader -evaders -evades -evadible -evading -evagination -evaginations -evaluate -evaluated -evaluates -evaluating -evaluation -evaluations -evaluative -evaluator -evaluators -evanesce -evanesced -evanescence -evanescences -evanescent -evanesces -evanescing -evangel -evangelic -evangelical -evangelically -evangelicals -evangelism -evangelisms -evangelist -evangelistic -evangelistically -evangelists -evangelization -evangelizations -evangelize -evangelized -evangelizes -evangelizing -evangels -evanish -evanished -evanishes -evanishing -evaporate -evaporated -evaporates -evaporating -evaporation -evaporations -evaporative -evaporator -evaporators -evaporite -evaporites -evaporitic -evapotranspiration -evapotranspirations -evasion -evasions -evasive -evasively -evasiveness -evasivenesses -eve -evection -evections -even -evened -evener -eveners -evenest -evenfall -evenfalls -evenhanded -evenhandedly -evenhandedness -evenhandednesses -evening -evenings -evenly -evenness -evennesses -evens -evensong -evensongs -event -eventful -eventfully -eventfulness -eventfulnesses -eventide -eventides -eventless -events -eventual -eventualities -eventuality -eventually -eventuate -eventuated -eventuates -eventuating -ever -everblooming -everduring -everglade -everglades -evergreen -evergreens -everlasting -everlastingly -everlastingness -everlastingnesses -everlastings -evermore -eversible -eversion -eversions -evert -everted -everting -evertor -evertors -everts -every -everybody -everyday -everydayness -everydaynesses -everyman -everymen -everyone -everyplace -everything -everyway -everywhere -everywoman -everywomen -eves -evict -evicted -evictee -evictees -evicting -eviction -evictions -evictor -evictors -evicts -evidence -evidenced -evidences -evidencing -evident -evidential -evidentially -evidentiary -evidently -evil -evildoer -evildoers -evildoing -evildoings -eviler -evilest -eviller -evillest -evilly -evilness -evilnesses -evils -evince -evinced -evinces -evincible -evincing -evincive -eviscerate -eviscerated -eviscerates -eviscerating -evisceration -eviscerations -evitable -evite -evited -evites -eviting -evocable -evocation -evocations -evocative -evocatively -evocativeness -evocativenesses -evocator -evocators -evoke -evoked -evoker -evokers -evokes -evoking -evolute -evolutes -evolution -evolutionarily -evolutionary -evolutionism -evolutionisms -evolutionist -evolutionists -evolutions -evolvable -evolve -evolved -evolvement -evolvements -evolver -evolvers -evolves -evolving -evonymus -evonymuses -evulsion -evulsions -evzone -evzones -ewe -ewer -ewers -ewes -ex -exacerbate -exacerbated -exacerbates -exacerbating -exacerbation -exacerbations -exact -exacta -exactable -exactas -exacted -exacter -exacters -exactest -exacting -exactingly -exactingness -exactingnesses -exaction -exactions -exactitude -exactitudes -exactly -exactness -exactnesses -exactor -exactors -exacts -exaggerate -exaggerated -exaggeratedly -exaggeratedness -exaggeratednesses -exaggerates -exaggerating -exaggeration -exaggerations -exaggerative -exaggerator -exaggerators -exaggeratory -exalt -exaltation -exaltations -exalted -exaltedly -exalter -exalters -exalting -exalts -exam -examen -examens -examinable -examinant -examinants -examination -examinational -examinations -examine -examined -examinee -examinees -examiner -examiners -examines -examining -example -exampled -examples -exampling -exams -exanimate -exanthem -exanthema -exanthemas -exanthemata -exanthematic -exanthematous -exanthems -exarch -exarchal -exarchate -exarchates -exarchies -exarchs -exarchy -exasperate -exasperated -exasperatedly -exasperates -exasperating -exasperatingly -exasperation -exasperations -excavate -excavated -excavates -excavating -excavation -excavational -excavations -excavator -excavators -exceed -exceeded -exceeder -exceeders -exceeding -exceedingly -exceeds -excel -excelled -excellence -excellences -excellencies -excellency -excellent -excellently -excelling -excels -excelsior -excelsiors -except -excepted -excepting -exception -exceptionabilities -exceptionability -exceptionable -exceptionably -exceptional -exceptionalism -exceptionalisms -exceptionalities -exceptionality -exceptionally -exceptionalness -exceptionalnesses -exceptions -exceptive -excepts -excerpt -excerpted -excerpter -excerpters -excerpting -excerption -excerptions -excerptor -excerptors -excerpts -excess -excessed -excesses -excessing -excessive -excessively -excessiveness -excessivenesses -exchange -exchangeabilities -exchangeability -exchangeable -exchanged -exchanger -exchangers -exchanges -exchanging -exchequer -exchequers -excide -excided -excides -exciding -excimer -excimers -excipient -excipients -exciple -exciples -excisable -excise -excised -exciseman -excisemen -excises -excising -excision -excisional -excisions -excitabilities -excitability -excitable -excitableness -excitablenesses -excitant -excitants -excitation -excitations -excitative -excitatory -excite -excited -excitedly -excitement -excitements -exciter -exciters -excites -exciting -excitingly -exciton -excitonic -excitons -excitor -excitors -exclaim -exclaimed -exclaimer -exclaimers -exclaiming -exclaims -exclamation -exclamations -exclamatory -exclave -exclaves -excludabilities -excludability -excludable -exclude -excluded -excluder -excluders -excludes -excludible -excluding -exclusion -exclusionary -exclusionist -exclusionists -exclusions -exclusive -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 -excoriate -excoriated -excoriates -excoriating -excoriation -excoriations -excrement -excremental -excrementitious -excrements -excrescence -excrescences -excrescencies -excrescency -excrescent -excrescently -excreta -excretal -excrete -excreted -excreter -excreters -excretes -excreting -excretion -excretions -excretory -excruciate -excruciated -excruciates -excruciating -excruciatingly -excruciation -excruciations -exculpate -exculpated -exculpates -exculpating -exculpation -exculpations -exculpatory -excurrent -excursion -excursionist -excursionists -excursions -excursive -excursively -excursiveness -excursivenesses -excursus -excursuses -excusable -excusableness -excusablenesses -excusably -excusatory -excuse -excused -excuser -excusers -excuses -excusing -exec -execrable -execrableness -execrablenesses -execrably -execrate -execrated -execrates -execrating -execration -execrations -execrative -execrator -execrators -execs -executable -executables -executant -executants -execute -executed -executer -executers -executes -executing -execution -executioner -executioners -executions -executive -executives -executor -executorial -executors -executorship -executorships -executory -executrices -executrix -executrixes -exedra -exedrae -exegeses -exegesis -exegete -exegetes -exegetic -exegetical -exegetist -exegetists -exempla -exemplar -exemplarily -exemplariness -exemplarinesses -exemplarities -exemplarity -exemplars -exemplary -exemplification -exemplifications -exemplified -exemplifies -exemplify -exemplifying -exemplum -exempt -exempted -exempting -exemption -exemptions -exempts -exenterate -exenterated -exenterates -exenterating -exenteration -exenterations -exequial -exequies -exequy -exercisable -exercise -exercised -exerciser -exercisers -exercises -exercising -exercitation -exercitations -exergonic -exergual -exergue -exergues -exert -exerted -exerting -exertion -exertions -exertive -exerts -exes -exeunt -exfoliate -exfoliated -exfoliates -exfoliating -exfoliation -exfoliations -exfoliative -exhalant -exhalants -exhalation -exhalations -exhale -exhaled -exhalent -exhalents -exhales -exhaling -exhaust -exhausted -exhauster -exhausters -exhaustibilities -exhaustibility -exhaustible -exhausting -exhaustion -exhaustions -exhaustive -exhaustively -exhaustiveness -exhaustivenesses -exhaustivities -exhaustivity -exhaustless -exhaustlessly -exhaustlessness -exhaustlessnesses -exhausts -exhibit -exhibited -exhibiting -exhibition -exhibitioner -exhibitioners -exhibitionism -exhibitionisms -exhibitionist -exhibitionistic -exhibitionistically -exhibitionists -exhibitions -exhibitive -exhibitor -exhibitors -exhibitory -exhibits -exhilarate -exhilarated -exhilarates -exhilarating -exhilaratingly -exhilaration -exhilarations -exhilarative -exhort -exhortation -exhortations -exhortative -exhortatory -exhorted -exhorter -exhorters -exhorting -exhorts -exhumation -exhumations -exhume -exhumed -exhumer -exhumers -exhumes -exhuming -exigence -exigences -exigencies -exigency -exigent -exigently -exigible -exiguities -exiguity -exiguous -exiguously -exiguousness -exiguousnesses -exile -exiled -exiles -exilian -exilic -exiling -eximious -exine -exines -exist -existed -existence -existences -existent -existential -existentialism -existentialisms -existentialist -existentialistic -existentialistically -existentialists -existentially -existents -existing -exists -exit -exited -exiting -exitless -exits -exobiological -exobiologies -exobiologist -exobiologists -exobiology -exocarp -exocarps -exocrine -exocrines -exocyclic -exocytoses -exocytosis -exocytotic -exoderm -exodermis -exodermises -exoderms -exodoi -exodontia -exodontias -exodontist -exodontists -exodos -exodus -exoduses -exoenzyme -exoenzymes -exoergic -exoerythrocytic -exogamic -exogamies -exogamous -exogamy -exogen -exogenous -exogenously -exogens -exon -exonerate -exonerated -exonerates -exonerating -exoneration -exonerations -exonerative -exonic -exons -exonuclease -exonucleases -exonumia -exopeptidase -exopeptidases -exophthalmic -exophthalmos -exophthalmoses -exophthalmus -exophthalmuses -exorable -exorbitance -exorbitances -exorbitant -exorbitantly -exorcise -exorcised -exorciser -exorcisers -exorcises -exorcising -exorcism -exorcisms -exorcist -exorcistic -exorcistical -exorcists -exorcize -exorcized -exorcizes -exorcizing -exordia -exordial -exordium -exordiums -exoskeletal -exoskeleton -exoskeletons -exosmic -exosmose -exosmoses -exosphere -exospheres -exospheric -exospore -exospores -exostoses -exostosis -exoteric -exoterically -exothermal -exothermally -exothermic -exothermically -exothermicities -exothermicity -exotic -exotica -exotically -exoticism -exoticisms -exoticness -exoticnesses -exotics -exotism -exotisms -exotoxic -exotoxin -exotoxins -expand -expandabilities -expandability -expandable -expanded -expander -expanders -expanding -expandor -expandors -expands -expanse -expanses -expansibilities -expansibility -expansible -expansion -expansional -expansionary -expansionism -expansionisms -expansionist -expansionistic -expansionists -expansions -expansive -expansively -expansiveness -expansivenesses -expansivities -expansivity -expat -expatiate -expatiated -expatiates -expatiating -expatiation -expatiations -expatriate -expatriated -expatriates -expatriating -expatriation -expatriations -expatriatism -expatriatisms -expats -expect -expectable -expectably -expectance -expectances -expectancies -expectancy -expectant -expectantly -expectants -expectation -expectational -expectations -expectative -expected -expectedly -expectedness -expectednesses -expecting -expectorant -expectorants -expectorate -expectorated -expectorates -expectorating -expectoration -expectorations -expects -expedience -expediences -expediencies -expediency -expedient -expediential -expediently -expedients -expedite -expedited -expediter -expediters -expedites -expediting -expedition -expeditionary -expeditions -expeditious -expeditiously -expeditiousness -expeditiousnesses -expeditor -expeditors -expel -expellable -expelled -expellee -expellees -expeller -expellers -expelling -expels -expend -expendabilities -expendability -expendable -expendables -expended -expender -expenders -expending -expenditure -expenditures -expends -expense -expensed -expenses -expensing -expensive -expensively -expensiveness -expensivenesses -experience -experienced -experiences -experiencing -experiential -experientially -experiment -experimental -experimentalism -experimentalisms -experimentalist -experimentalists -experimentally -experimentation -experimentations -experimented -experimenter -experimenters -experimenting -experiments -expert -experted -experting -expertise -expertises -expertism -expertisms -expertize -expertized -expertizes -expertizing -expertly -expertness -expertnesses -experts -expiable -expiate -expiated -expiates -expiating -expiation -expiations -expiator -expiators -expiatory -expiration -expirations -expiratory -expire -expired -expirer -expirers -expires -expiries -expiring -expiry -explain -explainable -explained -explainer -explainers -explaining -explains -explanation -explanations -explanative -explanatively -explanatorily -explanatory -explant -explantation -explantations -explanted -explanting -explants -expletive -expletives -expletory -explicable -explicably -explicate -explicated -explicates -explicating -explication -explications -explicative -explicatively -explicator -explicators -explicatory -explicit -explicitly -explicitness -explicitnesses -explicits -explode -exploded -exploder -exploders -explodes -exploding -exploit -exploitable -exploitation -exploitations -exploitative -exploitatively -exploited -exploiter -exploiters -exploiting -exploitive -exploits -exploration -explorational -explorations -explorative -exploratively -exploratory -explore -explored -explorer -explorers -explores -exploring -explosion -explosions -explosive -explosively -explosiveness -explosivenesses -explosives -expo -exponent -exponential -exponentially -exponentials -exponentiation -exponentiations -exponents -export -exportabilities -exportability -exportable -exportation -exportations -exported -exporter -exporters -exporting -exports -expos -exposal -exposals -expose -exposed -exposer -exposers -exposes -exposing -exposit -exposited -expositing -exposition -expositional -expositions -expositive -expositor -expositors -expository -exposits -expostulate -expostulated -expostulates -expostulating -expostulation -expostulations -expostulatory -exposure -exposures -expound -expounded -expounder -expounders -expounding -expounds -express -expressage -expressages -expressed -expresser -expressers -expresses -expressible -expressing -expression -expressional -expressionism -expressionisms -expressionist -expressionistic -expressionistically -expressionists -expressionless -expressionlessly -expressionlessness -expressionlessnesses -expressions -expressive -expressively -expressiveness -expressivenesses -expressivities -expressivity -expressly -expressman -expressmen -expresso -expressos -expressway -expressways -expropriate -expropriated -expropriates -expropriating -expropriation -expropriations -expropriator -expropriators -expulse -expulsed -expulses -expulsing -expulsion -expulsions -expulsive -expunction -expunctions -expunge -expunged -expunger -expungers -expunges -expunging -expurgate -expurgated -expurgates -expurgating -expurgation -expurgations -expurgator -expurgatorial -expurgators -expurgatory -exquisite -exquisitely -exquisiteness -exquisitenesses -exquisites -exsanguinate -exsanguinated -exsanguinates -exsanguinating -exsanguination -exsanguinations -exscind -exscinded -exscinding -exscinds -exsecant -exsecants -exsect -exsected -exsecting -exsects -exsert -exserted -exsertile -exserting -exsertion -exsertions -exserts -exsiccate -exsiccated -exsiccates -exsiccating -exsiccation -exsiccations -exsolution -exsolutions -extant -extemporal -extemporally -extemporaneities -extemporaneity -extemporaneous -extemporaneously -extemporaneousness -extemporaneousnesses -extemporarily -extemporary -extempore -extemporisation -extemporisations -extemporise -extemporised -extemporises -extemporising -extemporization -extemporizations -extemporize -extemporized -extemporizer -extemporizers -extemporizes -extemporizing -extend -extendabilities -extendability -extendable -extended -extendedly -extendedness -extendednesses -extender -extenders -extendible -extending -extends -extensibilities -extensibility -extensible -extensile -extension -extensional -extensionalities -extensionality -extensionally -extensions -extensities -extensity -extensive -extensively -extensiveness -extensivenesses -extensometer -extensometers -extensor -extensors -extent -extents -extenuate -extenuated -extenuates -extenuating -extenuation -extenuations -extenuator -extenuators -extenuatory -exterior -exteriorise -exteriorised -exteriorises -exteriorising -exteriorities -exteriority -exteriorization -exteriorizations -exteriorize -exteriorized -exteriorizes -exteriorizing -exteriorly -exteriors -exterminate -exterminated -exterminates -exterminating -extermination -exterminations -exterminator -exterminators -exterminatory -extermine -extermined -extermines -extermining -extern -external -externalisation -externalisations -externalise -externalised -externalises -externalising -externalism -externalisms -externalities -externality -externalization -externalizations -externalize -externalized -externalizes -externalizing -externally -externals -externe -externes -externs -externship -externships -exteroceptive -exteroceptor -exteroceptors -exterritorial -exterritorialities -exterritoriality -extinct -extincted -extincting -extinction -extinctions -extinctive -extincts -extinguish -extinguishable -extinguished -extinguisher -extinguishers -extinguishes -extinguishing -extinguishment -extinguishments -extirpate -extirpated -extirpates -extirpating -extirpation -extirpations -extirpator -extirpators -extol -extoll -extolled -extoller -extollers -extolling -extolls -extolment -extolments -extols -extort -extorted -extorter -extorters -extorting -extortion -extortionary -extortionate -extortionately -extortioner -extortioners -extortionist -extortionists -extortions -extortive -extorts -extra -extracellular -extracellularly -extrachromosomal -extracorporeal -extracorporeally -extracranial -extract -extractabilities -extractability -extractable -extracted -extracting -extraction -extractions -extractive -extractively -extractives -extractor -extractors -extracts -extracurricular -extracurriculars -extraditable -extradite -extradited -extradites -extraditing -extradition -extraditions -extrados -extradoses -extraembryonic -extragalactic -extrahepatic -extrajudicial -extrajudicially -extralegal -extralegally -extralimital -extralinguistic -extralinguistically -extraliterary -extralities -extrality -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 -extras -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 -extravert -extraverted -extraverts -extrema -extreme -extremely -extremeness -extremenesses -extremer -extremes -extremest -extremism -extremisms -extremist -extremists -extremities -extremity -extremum -extricable -extricate -extricated -extricates -extricating -extrication -extrications -extrinsic -extrinsically -extrorse -extroversion -extroversions -extrovert -extroverted -extroverts -extrudabilities -extrudability -extrudable -extrude -extruded -extruder -extruders -extrudes -extruding -extrusion -extrusions -extrusive -extubate -extubated -extubates -extubating -exuberance -exuberances -exuberant -exuberantly -exuberate -exuberated -exuberates -exuberating -exudate -exudates -exudation -exudations -exudative -exude -exuded -exudes -exuding -exult -exultance -exultances -exultancies -exultancy -exultant -exultantly -exultation -exultations -exulted -exulting -exultingly -exults -exurb -exurban -exurbanite -exurbanites -exurbia -exurbias -exurbs -exuvia -exuviae -exuvial -exuviate -exuviated -exuviates -exuviating -exuviation -exuviations -exuvium -eyas -eyases -eye -eyeable -eyeball -eyeballed -eyeballing -eyeballs -eyebar -eyebars -eyebeam -eyebeams -eyebolt -eyebolts -eyebright -eyebrights -eyebrow -eyebrows -eyecup -eyecups -eyed -eyedness -eyednesses -eyedropper -eyedroppers -eyedrops -eyeful -eyefuls -eyeglass -eyeglasses -eyehole -eyeholes -eyehook -eyehooks -eyeing -eyelash -eyelashes -eyeless -eyelet -eyelets -eyeletted -eyeletting -eyelid -eyelids -eyelike -eyeliner -eyeliners -eyen -eyeopener -eyeopeners -eyepiece -eyepieces -eyepoint -eyepoints -eyepopper -eyepoppers -eyer -eyers -eyes -eyeshade -eyeshades -eyeshot -eyeshots -eyesight -eyesights -eyesome -eyesore -eyesores -eyespot -eyespots -eyestalk -eyestalks -eyestone -eyestones -eyestrain -eyestrains -eyestrings -eyeteeth -eyetooth -eyewash -eyewashes -eyewater -eyewaters -eyewear -eyewink -eyewinks -eyewitness -eyewitnesses -eying -eyne -eyra -eyras -eyre -eyres -eyrie -eyries -eyrir -eyry -fa -fable -fabled -fabler -fablers -fables -fabliau -fabliaux -fabling -fabric -fabricant -fabricants -fabricate -fabricated -fabricates -fabricating -fabrication -fabrications -fabricator -fabricators -fabrics -fabular -fabulist -fabulistic -fabulists -fabulous -fabulously -fabulousness -fabulousnesses -facade -facades -face -faceable -facecloth -facecloths -faced -facedown -facedowns -faceless -facelessness -facelessnesses -facelift -facelifted -facelifting -facelifts -facemask -facemasks -faceplate -faceplates -facer -facers -faces -facet -facete -faceted -facetely -facetiae -faceting -facetious -facetiously -facetiousness -facetiousnesses -facets -facetted -facetting -faceup -facia -facial -facially -facials -facias -faciend -faciends -facies -facile -facilely -facileness -facilenesses -facilitate -facilitated -facilitates -facilitating -facilitation -facilitations -facilitative -facilitator -facilitators -facilitatory -facilities -facility -facing -facings -facsimile -facsimiles -fact -factful -facticities -facticity -faction -factional -factionalism -factionalisms -factionally -factions -factious -factiously -factiousness -factiousnesses -factitious -factitiously -factitiousness -factitiousnesses -factitive -factitively -factoid -factoids -factor -factorable -factorage -factorages -factored -factorial -factorials -factories -factoring -factorization -factorizations -factorize -factorized -factorizes -factorizing -factors -factorship -factorships -factory -factorylike -factotum -factotums -facts -factual -factualism -factualisms -factualist -factualists -factualities -factuality -factually -factualness -factualnesses -facture -factures -facula -faculae -facular -facultative -facultatively -faculties -faculty -fad -fadable -faddier -faddiest -faddish -faddishness -faddishnesses -faddism -faddisms -faddist -faddists -faddy -fade -fadeaway -fadeaways -faded -fadedly -fadein -fadeins -fadeless -fadeout -fadeouts -fader -faders -fades -fadge -fadged -fadges -fadging -fading -fadings -fado -fados -fads -faecal -faeces -faena -faenas -faerie -faeries -faery -fag -fagged -fagging -faggot -faggoted -faggoting -faggotings -faggotries -faggotry -faggots -faggoty -faggy -fagin -fagins -fagot -fagoted -fagoter -fagoters -fagoting -fagotings -fagots -fags -fahlband -fahlbands -faience -faiences -fail -failed -failing -failingly -failings -faille -failles -fails -failure -failures -fain -faineant -faineants -fainer -fainest -faint -fainted -fainter -fainters -faintest -fainthearted -faintheartedly -faintheartedness -faintheartednesses -fainting -faintish -faintishness -faintishnesses -faintly -faintness -faintnesses -faints -fair -faired -fairer -fairest -fairground -fairgrounds -fairies -fairing -fairings -fairish -fairishly -fairlead -fairleader -fairleaders -fairleads -fairly -fairness -fairnesses -fairs -fairway -fairways -fairy -fairyism -fairyisms -fairyland -fairylands -fairylike -faith -faithed -faithful -faithfully -faithfulness -faithfulnesses -faithfuls -faithing -faithless -faithlessly -faithlessness -faithlessnesses -faiths -faitour -faitours -fajita -fajitas -fake -faked -fakeer -fakeers -faker -fakeries -fakers -fakery -fakes -fakey -faking -fakir -fakirs -falafel -falbala -falbalas -falcate -falcated -falces -falchion -falchions -falciform -falcon -falconer -falconers -falconet -falconets -falconine -falconries -falconry -falcons -falderal -falderals -falderol -falderols -faldstool -faldstools -fall -fallacies -fallacious -fallaciously -fallaciousness -fallaciousnesses -fallacy -fallal -fallaleries -fallalery -fallals -fallaway -fallaways -fallback -fallbacks -fallen -faller -fallers -fallfish -fallfishes -fallibilities -fallibility -fallible -fallibly -falling -falloff -falloffs -fallout -fallouts -fallow -fallowed -fallowing -fallowness -fallownesses -fallows -falls -false -falsehood -falsehoods -falsely -falseness -falsenesses -falser -falsest -falsetto -falsettos -falsework -falseworks -falsie -falsies -falsifiabilities -falsifiability -falsifiable -falsification -falsifications -falsified -falsifier -falsifiers -falsifies -falsify -falsifying -falsities -falsity -faltboat -faltboats -falter -faltered -falterer -falterers -faltering -falteringly -falters -falx -fame -famed -fameless -fames -familial -familiar -familiarise -familiarised -familiarises -familiarising -familiarities -familiarity -familiarization -familiarizations -familiarize -familiarized -familiarizes -familiarizing -familiarly -familiarness -familiarnesses -familiars -families -familism -familisms -familistic -family -famine -famines -faming -famish -famished -famishes -famishing -famishment -famishments -famous -famously -famousness -famousnesses -famuli -famulus -fan -fanatic -fanatical -fanatically -fanaticalness -fanaticalnesses -fanaticism -fanaticisms -fanaticize -fanaticized -fanaticizes -fanaticizing -fanatics -fancied -fancier -fanciers -fancies -fanciest -fancified -fancifies -fanciful -fancifully -fancifulness -fancifulnesses -fancify -fancifying -fancily -fanciness -fancinesses -fancy -fancying -fancywork -fancyworks -fandango -fandangos -fandom -fandoms -fane -fanega -fanegada -fanegadas -fanegas -fanes -fanfare -fanfares -fanfaron -fanfaronade -fanfaronades -fanfarons -fanfold -fanfolded -fanfolding -fanfolds -fang -fanga -fangas -fanged -fangless -fanglike -fangs -fanion -fanions -fanjet -fanjets -fanlight -fanlights -fanlike -fanned -fanner -fanners -fannies -fanning -fanny -fano -fanon -fanons -fanos -fans -fantabulous -fantail -fantails -fantasia -fantasias -fantasie -fantasied -fantasies -fantasise -fantasised -fantasises -fantasising -fantasist -fantasists -fantasize -fantasized -fantasizer -fantasizers -fantasizes -fantasizing -fantasm -fantasms -fantast -fantastic -fantastical -fantasticalities -fantasticality -fantastically -fantasticalness -fantasticalnesses -fantasticate -fantasticated -fantasticates -fantasticating -fantastication -fantastications -fantastico -fantasticoes -fantastics -fantasts -fantasy -fantasying -fantasyland -fantasylands -fantoccini -fantod -fantods -fantom -fantoms -fanum -fanums -fanwise -fanwort -fanworts -fanzine -fanzines -faqir -faqirs -faquir -faquirs -far -farad -faradaic -faraday -faradays -faradic -faradise -faradised -faradises -faradising -faradism -faradisms -faradize -faradized -faradizes -faradizing -farads -farandole -farandoles -faraway -farce -farced -farcer -farcers -farces -farceur -farceurs -farci -farcical -farcicalities -farcicality -farcically -farcie -farcies -farcing -farcy -fard -farded -fardel -fardels -farding -fards -fare -fared -farer -farers -fares -farewell -farewelled -farewelling -farewells -farfal -farfalle -farfalles -farfals -farfel -farfels -farfetched -farfetchedness -farfetchednesses -farina -farinaceous -farinas -faring -farinha -farinhas -farinose -farkleberries -farkleberry -farl -farle -farles -farls -farm -farmable -farmed -farmer -farmerette -farmerettes -farmers -farmhand -farmhands -farmhouse -farmhouses -farming -farmings -farmland -farmlands -farms -farmstead -farmsteads -farmwife -farmwives -farmwork -farmworker -farmworkers -farmworks -farmyard -farmyards -farnesol -farnesols -farness -farnesses -faro -faros -farouche -farraginous -farrago -farragoes -farragos -farrier -farrieries -farriers -farriery -farrow -farrowed -farrowing -farrows -farseeing -farside -farsides -farsighted -farsightedly -farsightedness -farsightednesses -fart -farted -farther -farthermost -farthest -farthing -farthingale -farthingales -farthings -farting -farts -fas -fasces -fascia -fasciae -fascial -fascias -fasciate -fasciated -fasciation -fasciations -fascicle -fascicled -fascicles -fascicular -fascicularly -fasciculate -fasciculated -fasciculation -fasciculations -fascicule -fascicules -fasciculi -fasciculus -fascinate -fascinated -fascinates -fascinating -fascinatingly -fascination -fascinations -fascinator -fascinators -fascine -fascines -fascioliases -fascioliasis -fascism -fascisms -fascist -fascistic -fascistically -fascists -fash -fashed -fashes -fashing -fashion -fashionabilities -fashionability -fashionable -fashionableness -fashionablenesses -fashionables -fashionably -fashioned -fashioner -fashioners -fashioning -fashionmonger -fashionmongers -fashions -fashious -fast -fastback -fastbacks -fastball -fastballer -fastballers -fastballs -fasted -fasten -fastened -fastener -fasteners -fastening -fastenings -fastens -faster -fasters -fastest -fastidious -fastidiously -fastidiousness -fastidiousnesses -fastigiate -fasting -fastings -fastness -fastnesses -fasts -fastuous -fat -fatal -fatalism -fatalisms -fatalist -fatalistic -fatalistically -fatalists -fatalities -fatality -fatally -fatback -fatbacks -fatbird -fatbirds -fate -fated -fateful -fatefully -fatefulness -fatefulnesses -fates -fathead -fatheaded -fatheadedly -fatheadedness -fatheadednesses -fatheads -father -fathered -fatherhood -fatherhoods -fathering -fatherland -fatherlands -fatherless -fatherlike -fatherliness -fatherlinesses -fatherly -fathers -fathom -fathomable -fathomed -fathoming -fathomless -fathomlessly -fathomlessness -fathomlessnesses -fathoms -fatidic -fatidical -fatigabilities -fatigability -fatigable -fatigue -fatigued -fatigues -fatiguing -fatiguingly -fating -fatless -fatlike -fatling -fatlings -fatly -fatness -fatnesses -fats -fatshedera -fatshederas -fatso -fatsoes -fatsos -fatstock -fatstocks -fatted -fatten -fattened -fattener -fatteners -fattening -fattens -fatter -fattest -fattier -fatties -fattiest -fattily -fattiness -fattinesses -fatting -fattish -fatty -fatuities -fatuity -fatuous -fatuously -fatuousness -fatuousnesses -fatwa -fatwas -fatwood -fatwoods -faubourg -faubourgs -faucal -faucals -fauces -faucet -faucets -faucial -faugh -fauld -faulds -fault -faulted -faultfinder -faultfinders -faultfinding -faultfindings -faultier -faultiest -faultily -faultiness -faultinesses -faulting -faultless -faultlessly -faultlessness -faultlessnesses -faults -faulty -faun -fauna -faunae -faunal -faunally -faunas -faunistic -faunistically -faunlike -fauns -fauteuil -fauteuils -fauve -fauves -fauvism -fauvisms -fauvist -fauvists -faux -fava -favas -fave -favela -favelas -favella -favellas -faves -favism -favisms -favonian -favor -favorable -favorableness -favorablenesses -favorably -favored -favorer -favorers -favoring -favorite -favorites -favoritism -favoritisms -favors -favour -favoured -favourer -favourers -favouring -favours -favus -favuses -fawn -fawned -fawner -fawners -fawnier -fawniest -fawning -fawningly -fawnlike -fawns -fawny -fax -faxed -faxes -faxing -fay -fayalite -fayalites -fayed -faying -fays -faze -fazed -fazenda -fazendas -fazes -fazing -feal -fealties -fealty -fear -feared -fearer -fearers -fearful -fearfuller -fearfullest -fearfully -fearfulness -fearfulnesses -fearing -fearless -fearlessly -fearlessness -fearlessnesses -fears -fearsome -fearsomely -fearsomeness -fearsomenesses -feasance -feasances -fease -feased -feases -feasibilities -feasibility -feasible -feasibly -feasing -feast -feasted -feaster -feasters -feastful -feasting -feasts -feat -feater -featest -feather -featherbed -featherbedded -featherbedding -featherbeddings -featherbeds -featherbrain -featherbrained -featherbrains -feathered -featheredge -featheredged -featheredges -featheredging -featherhead -featherheaded -featherheads -featherier -featheriest -feathering -featherings -featherless -featherlight -feathers -featherstitch -featherstitched -featherstitches -featherstitching -featherweight -featherweights -feathery -featlier -featliest -featly -feats -feature -featured -featureless -features -featurette -featurettes -featuring -feaze -feazed -feazes -feazing -febrific -febrifuge -febrifuges -febrile -fecal -feces -fecial -fecials -feck -feckless -fecklessly -fecklessness -fecklessnesses -feckly -fecks -fecula -feculae -feculence -feculences -feculent -fecund -fecundate -fecundated -fecundates -fecundating -fecundation -fecundations -fecundities -fecundity -fed -fedayee -fedayeen -federacies -federacy -federal -federalese -federaleses -federalism -federalisms -federalist -federalists -federalization -federalizations -federalize -federalized -federalizes -federalizing -federally -federals -federate -federated -federates -federating -federation -federations -federative -federatively -fedora -fedoras -feds -fee -feeble -feebleminded -feeblemindedly -feeblemindedness -feeblemindednesses -feebleness -feeblenesses -feebler -feeblest -feeblish -feebly -feed -feedable -feedback -feedbacks -feedbag -feedbags -feedbox -feedboxes -feeder -feeders -feedhole -feedholes -feeding -feedings -feedlot -feedlots -feeds -feedstock -feedstocks -feedstuff -feedstuffs -feeing -feel -feeler -feelers -feeless -feeling -feelingly -feelingness -feelingnesses -feelings -feels -fees -feet -feetfirst -feetless -feeze -feezed -feezes -feezing -feh -fehs -feign -feigned -feigner -feigners -feigning -feigns -feijoa -feijoas -feint -feinted -feinting -feints -feirie -feist -feistier -feistiest -feistiness -feistinesses -feists -feisty -felafel -feldsher -feldshers -feldspar -feldspars -feldspathic -felicific -felicitate -felicitated -felicitates -felicitating -felicitation -felicitations -felicitator -felicitators -felicities -felicitous -felicitously -felicitousness -felicitousnesses -felicity -felid -felids -feline -felinely -felines -felinities -felinity -fell -fella -fellable -fellah -fellaheen -fellahin -fellahs -fellas -fellate -fellated -fellates -fellating -fellatio -fellation -fellations -fellatios -fellator -fellators -felled -feller -fellers -fellest -fellies -felling -fellmonger -fellmongered -fellmongeries -fellmongering -fellmongerings -fellmongers -fellmongery -fellness -fellnesses -felloe -felloes -fellow -fellowed -fellowing -fellowly -fellowman -fellowmen -fellows -fellowship -fellowshiped -fellowshiping -fellowshipped -fellowshipping -fellowships -fells -felly -felon -felonies -felonious -feloniously -feloniousness -feloniousnesses -felonries -felonry -felons -felony -felsite -felsites -felsitic -felspar -felspars -felstone -felstones -felt -felted -felting -feltings -feltlike -felts -felucca -feluccas -felwort -felworts -fem -female -femaleness -femalenesses -females -feme -femes -feminacies -feminacy -feminie -feminine -femininely -feminineness -femininenesses -feminines -femininities -femininity -feminise -feminised -feminises -feminising -feminism -feminisms -feminist -feministic -feminists -feminities -feminity -feminization -feminizations -feminize -feminized -feminizes -feminizing -femme -femmes -femora -femoral -fems -femtosecond -femtoseconds -femur -femurs -fen -fenagle -fenagled -fenagles -fenagling -fence -fenced -fenceless -fencelessness -fencelessnesses -fencer -fencerow -fencerows -fencers -fences -fencible -fencibles -fencing -fencings -fend -fended -fender -fendered -fenderless -fenders -fending -fends -fenestra -fenestrae -fenestral -fenestrate -fenestrated -fenestration -fenestrations -fenland -fenlands -fennec -fennecs -fennel -fennels -fenny -fens -fenthion -fenthions -fenugreek -fenugreeks -fenuron -fenurons -feod -feodaries -feodary -feods -feoff -feoffed -feoffee -feoffees -feoffer -feoffers -feoffing -feoffment -feoffments -feoffor -feoffors -feoffs -fer -feracities -feracity -feral -ferbam -ferbams -fere -feres -feretories -feretory -feria -feriae -ferial -ferias -ferine -ferities -ferity -ferlie -ferlies -ferly -fermata -fermatas -fermate -ferment -fermentable -fermentation -fermentations -fermentative -fermented -fermenter -fermenters -fermenting -fermentor -fermentors -ferments -fermi -fermion -fermions -fermis -fermium -fermiums -fern -ferneries -fernery -fernier -ferniest -fernless -fernlike -ferns -ferny -ferocious -ferociously -ferociousness -ferociousnesses -ferocities -ferocity -ferrate -ferrates -ferredoxin -ferredoxins -ferrel -ferreled -ferreling -ferrelled -ferrelling -ferrels -ferreous -ferret -ferreted -ferreter -ferreters -ferreting -ferretings -ferrets -ferrety -ferriage -ferriages -ferric -ferricyanide -ferricyanides -ferried -ferries -ferriferous -ferrimagnet -ferrimagnetic -ferrimagnetically -ferrimagnetism -ferrimagnetisms -ferrimagnets -ferrite -ferrites -ferritic -ferritin -ferritins -ferrocene -ferrocenes -ferroconcrete -ferroconcretes -ferrocyanide -ferrocyanides -ferroelectric -ferroelectricities -ferroelectricity -ferroelectrics -ferromagnesian -ferromagnet -ferromagnetic -ferromagnetism -ferromagnetisms -ferromagnets -ferromanganese -ferromanganeses -ferrosilicon -ferrosilicons -ferrotype -ferrotypes -ferrous -ferruginous -ferrule -ferruled -ferrules -ferruling -ferrum -ferrums -ferry -ferryboat -ferryboats -ferrying -ferryman -ferrymen -fertile -fertilely -fertileness -fertilenesses -fertilities -fertility -fertilizable -fertilization -fertilizations -fertilize -fertilized -fertilizer -fertilizers -fertilizes -fertilizing -ferula -ferulae -ferulas -ferule -feruled -ferules -feruling -fervencies -fervency -fervent -fervently -fervid -fervidly -fervidness -fervidnesses -fervor -fervors -fervour -fervours -fescennine -fescue -fescues -fess -fesse -fessed -fesses -fessing -fesswise -festal -festally -fester -festered -festering -festers -festinate -festinated -festinately -festinates -festinating -festival -festivalgoer -festivalgoers -festivals -festive -festively -festiveness -festivenesses -festivities -festivity -festoon -festooned -festooneries -festoonery -festooning -festoons -fet -feta -fetal -fetas -fetation -fetations -fetch -fetched -fetcher -fetchers -fetches -fetching -fetchingly -fete -feted -feterita -feteritas -fetes -fetial -fetiales -fetialis -fetials -fetich -fetiches -fetichism -fetichisms -feticide -feticides -fetid -fetidly -fetidness -fetidnesses -feting -fetish -fetishes -fetishism -fetishisms -fetishist -fetishistic -fetishistically -fetishists -fetlock -fetlocks -fetologies -fetologist -fetologists -fetology -fetoprotein -fetoproteins -fetor -fetors -fetoscope -fetoscopes -fetoscopies -fetoscopy -fets -fetted -fetter -fettered -fetterer -fetterers -fettering -fetters -fetting -fettle -fettled -fettles -fettling -fettlings -fettuccine -fettuccini -fettucine -fettucini -fetus -fetuses -feu -feuar -feuars -feud -feudal -feudalism -feudalisms -feudalist -feudalistic -feudalists -feudalities -feudality -feudalization -feudalizations -feudalize -feudalized -feudalizes -feudalizing -feudally -feudaries -feudary -feudatories -feudatory -feuded -feuding -feudist -feudists -feuds -feued -feuilleton -feuilletonism -feuilletonisms -feuilletonist -feuilletonists -feuilletons -feuing -feus -fever -fevered -feverfew -feverfews -fevering -feverish -feverishly -feverishness -feverishnesses -feverous -fevers -feverwort -feverworts -few -fewer -fewest -fewness -fewnesses -fewtrils -fey -feyer -feyest -feyly -feyness -feynesses -fez -fezes -fezzed -fezzes -fiacre -fiacres -fiance -fiancee -fiancees -fiances -fianchetti -fianchetto -fianchettoed -fianchettoing -fianchettos -fiar -fiars -fiaschi -fiasco -fiascoes -fiascos -fiat -fiats -fib -fibbed -fibber -fibbers -fibbing -fiber -fiberboard -fiberboards -fibered -fiberfill -fiberfills -fiberglass -fiberglassed -fiberglasses -fiberglassing -fiberization -fiberizations -fiberize -fiberized -fiberizes -fiberizing -fiberoptic -fiberoptics -fibers -fiberscope -fiberscopes -fibranne -fibrannes -fibre -fibreboard -fibreboards -fibrefill -fibrefills -fibreglass -fibreglasses -fibres -fibril -fibrilla -fibrillae -fibrillar -fibrillate -fibrillated -fibrillates -fibrillating -fibrillation -fibrillations -fibrils -fibrin -fibrinogen -fibrinogens -fibrinoid -fibrinoids -fibrinolyses -fibrinolysin -fibrinolysins -fibrinolysis -fibrinolytic -fibrinopeptide -fibrinopeptides -fibrins -fibroblast -fibroblastic -fibroblasts -fibrocystic -fibroid -fibroids -fibroin -fibroins -fibroma -fibromas -fibromata -fibromatous -fibronectin -fibronectins -fibrosarcoma -fibrosarcomas -fibrosarcomata -fibroses -fibrosis -fibrositis -fibrositises -fibrotic -fibrous -fibrovascular -fibs -fibula -fibulae -fibular -fibulas -fice -fices -fiche -fiches -fichu -fichus -ficin -ficins -fickle -fickleness -ficklenesses -fickler -ficklest -fickly -fico -ficoes -fictile -fiction -fictional -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 -fictions -fictitious -fictitiously -fictitiousness -fictitiousnesses -fictive -fictively -fictiveness -fictivenesses -ficus -ficuses -fid -fiddle -fiddleback -fiddlebacks -fiddled -fiddlehead -fiddleheads -fiddler -fiddlers -fiddles -fiddlestick -fiddlesticks -fiddling -fiddly -fideism -fideisms -fideist -fideistic -fideists -fidelities -fidelity -fidge -fidged -fidges -fidget -fidgeted -fidgeter -fidgeters -fidgetiness -fidgetinesses -fidgeting -fidgets -fidgety -fidging -fido -fidos -fids -fiducial -fiducially -fiduciaries -fiduciary -fie -fief -fiefdom -fiefdoms -fiefs -field -fielded -fielder -fielders -fieldfare -fieldfares -fielding -fieldpiece -fieldpieces -fields -fieldstone -fieldstones -fieldstrip -fieldstripped -fieldstripping -fieldstrips -fieldstript -fieldwork -fieldworks -fiend -fiendish -fiendishly -fiendishness -fiendishnesses -fiends -fierce -fiercely -fierceness -fiercenesses -fiercer -fiercest -fierier -fieriest -fierily -fieriness -fierinesses -fiery -fiesta -fiestas -fife -fifed -fifer -fifers -fifes -fifing -fifteen -fifteens -fifteenth -fifteenths -fifth -fifthly -fifths -fifties -fiftieth -fiftieths -fifty -fiftyish -fig -figeater -figeaters -figged -figging -fight -fighter -fighters -fighting -fightings -fights -figment -figments -figs -figuline -figulines -figural -figurant -figurants -figurate -figuration -figurations -figurative -figuratively -figurativeness -figurativenesses -figure -figured -figurehead -figureheads -figurer -figurers -figures -figurine -figurines -figuring -figwort -figworts -fil -fila -filagree -filagreed -filagreeing -filagrees -filament -filamentary -filamentous -filaments -filar -filaree -filarees -filaria -filariae -filarial -filarian -filariases -filariasis -filariid -filariids -filature -filatures -filbert -filberts -filch -filched -filcher -filchers -filches -filching -file -fileable -filed -filefish -filefishes -filemot -filename -filenames -filer -filers -files -filet -fileted -fileting -filets -filial -filially -filiate -filiated -filiates -filiating -filiation -filiations -filibeg -filibegs -filibuster -filibustered -filibusterer -filibusterers -filibustering -filibusters -filicide -filicides -filiform -filigree -filigreed -filigreeing -filigrees -filing -filings -filiopietistic -filister -filisters -fill -fille -filled -filler -fillers -filles -fillet -filleted -filleting -fillets -fillies -filling -fillings -fillip -filliped -filliping -fillips -fillo -fillos -fills -filly -film -filmable -filmcard -filmcards -filmdom -filmdoms -filmed -filmer -filmers -filmgoer -filmgoers -filmic -filmically -filmier -filmiest -filmily -filminess -filminesses -filming -filmland -filmlands -filmmaker -filmmakers -filmmaking -filmmakings -filmographies -filmography -films -filmset -filmsets -filmsetter -filmsetters -filmsetting -filmsettings -filmstrip -filmstrips -filmy -filo -filos -filose -fils -filses -filter -filterabilities -filterability -filterable -filtered -filterer -filterers -filtering -filters -filth -filthier -filthiest -filthily -filthiness -filthinesses -filths -filthy -filtrable -filtrate -filtrated -filtrates -filtrating -filtration -filtrations -filum -fimble -fimbles -fimbria -fimbriae -fimbrial -fimbriate -fimbriated -fimbriation -fimbriations -fin -finable -finagle -finagled -finagler -finaglers -finagles -finagling -final -finale -finales -finalis -finalise -finalised -finalises -finalising -finalism -finalisms -finalist -finalists -finalities -finality -finalization -finalizations -finalize -finalized -finalizes -finalizing -finally -finals -finance -financed -finances -financial -financially -financier -financiers -financing -financings -finback -finbacks -finch -finches -find -findable -finder -finders -finding -findings -finds -fine -fineable -fined -finely -fineness -finenesses -finer -fineries -finery -fines -finespun -finesse -finessed -finesses -finessing -finest -finfish -finfishes -finfoot -finfoots -finger -fingerboard -fingerboards -fingered -fingerer -fingerers -fingerhold -fingerholds -fingering -fingerings -fingerlike -fingerling -fingerlings -fingernail -fingernails -fingerpick -fingerpicked -fingerpicking -fingerpickings -fingerpicks -fingerpost -fingerposts -fingerprint -fingerprinted -fingerprinting -fingerprintings -fingerprints -fingers -fingertip -fingertips -finial -finialed -finials -finical -finically -finicalness -finicalnesses -finickier -finickiest -finickin -finickiness -finickinesses -finicking -finicky -finikin -finiking -fining -finings -finis -finises -finish -finished -finisher -finishers -finishes -finishing -finite -finitely -finiteness -finitenesses -finites -finitude -finitudes -fink -finked -finking -finks -finless -finlike -finmark -finmarks -finned -finnickier -finnickiest -finnicky -finnier -finniest -finning -finnmark -finnmarks -finny -fino -finochio -finochios -finos -fins -fiord -fiords -fioritura -fioriture -fipple -fipples -fique -fiques -fir -fire -fireable -firearm -firearms -fireback -firebacks -fireball -fireballer -fireballers -fireballing -fireballs -firebase -firebases -firebird -firebirds -fireboat -fireboats -firebomb -firebombed -firebombing -firebombs -firebox -fireboxes -firebrand -firebrands -firebrat -firebrats -firebreak -firebreaks -firebrick -firebricks -firebug -firebugs -fireclay -fireclays -firecracker -firecrackers -fired -firedamp -firedamps -firedog -firedogs -firedrake -firedrakes -firefang -firefanged -firefanging -firefangs -firefight -firefighter -firefighters -firefighting -firefightings -firefights -fireflies -firefly -fireguard -fireguards -firehall -firehalls -firehose -firehoses -firehouse -firehouses -fireless -firelight -firelights -firelit -firelock -firelocks -fireman -firemanic -firemen -firepan -firepans -firepink -firepinks -fireplace -fireplaced -fireplaces -fireplug -fireplugs -firepot -firepots -firepower -firepowers -fireproof -fireproofed -fireproofing -fireproofs -firer -fireroom -firerooms -firers -fires -fireside -firesides -firestone -firestones -firestorm -firestorms -firethorn -firethorns -firetrap -firetraps -firewall -firewalled -firewalling -firewalls -firewater -firewaters -fireweed -fireweeds -firewood -firewoods -firework -fireworks -fireworm -fireworms -firing -firings -firkin -firkins -firm -firmament -firmamental -firmaments -firman -firmans -firmed -firmer -firmers -firmest -firming -firmly -firmness -firmnesses -firms -firmware -firmwares -firn -firns -firry -firs -first -firstborn -firstborns -firstfruits -firsthand -firstling -firstlings -firstly -firsts -firth -firths -fisc -fiscal -fiscally -fiscals -fiscs -fish -fishabilities -fishability -fishable -fishbolt -fishbolts -fishbone -fishbones -fishbowl -fishbowls -fished -fisher -fisherfolk -fisheries -fisherman -fishermen -fishers -fisherwoman -fisherwomen -fishery -fishes -fisheye -fisheyes -fishgig -fishgigs -fishhook -fishhooks -fishier -fishiest -fishily -fishing -fishings -fishless -fishlike -fishline -fishlines -fishmeal -fishmeals -fishmonger -fishmongers -fishnet -fishnets -fishplate -fishplates -fishpole -fishpoles -fishpond -fishponds -fishtail -fishtailed -fishtailing -fishtails -fishway -fishways -fishwife -fishwives -fishworm -fishworms -fishy -fissate -fissile -fissilities -fissility -fission -fissionabilities -fissionability -fissionable -fissionables -fissional -fissioned -fissioning -fissions -fissiparous -fissiparousness -fissiparousnesses -fissiped -fissipeds -fissure -fissured -fissures -fissuring -fist -fisted -fistfight -fistfights -fistful -fistfuls -fistic -fisticuffs -fisting -fistnote -fistnotes -fists -fistula -fistulae -fistular -fistulas -fistulous -fit -fitch -fitchee -fitches -fitchet -fitchets -fitchew -fitchews -fitchy -fitful -fitfully -fitfulness -fitfulnesses -fitly -fitment -fitments -fitness -fitnesses -fits -fittable -fitted -fitter -fitters -fittest -fitting -fittingly -fittingness -fittingnesses -fittings -five -fivefold -fivepins -fiver -fivers -fives -fix -fixable -fixate -fixated -fixates -fixatif -fixatifs -fixating -fixation -fixations -fixative -fixatives -fixed -fixedly -fixedness -fixednesses -fixer -fixers -fixes -fixing -fixings -fixit -fixities -fixity -fixt -fixture -fixtures -fixure -fixures -fiz -fizgig -fizgigs -fizz -fizzed -fizzer -fizzers -fizzes -fizzier -fizziest -fizzing -fizzle -fizzled -fizzles -fizzling -fizzy -fjeld -fjelds -fjord -fjords -flab -flabbergast -flabbergasted -flabbergasting -flabbergastingly -flabbergasts -flabbier -flabbiest -flabbily -flabbiness -flabbinesses -flabby -flabella -flabellate -flabelliform -flabellum -flabs -flaccid -flaccidities -flaccidity -flaccidly -flack -flacked -flackeries -flackery -flacking -flacks -flacon -flacons -flag -flagella -flagellant -flagellantism -flagellantisms -flagellants -flagellar -flagellate -flagellated -flagellates -flagellating -flagellation -flagellations -flagellin -flagellins -flagellum -flagellums -flageolet -flageolets -flagged -flagger -flaggers -flaggier -flaggiest -flagging -flaggingly -flaggings -flaggy -flagitious -flagitiously -flagitiousness -flagitiousnesses -flagless -flagman -flagmen -flagon -flagons -flagpole -flagpoles -flagrance -flagrances -flagrancies -flagrancy -flagrant -flagrantly -flags -flagship -flagships -flagstaff -flagstaffs -flagstaves -flagstick -flagsticks -flagstone -flagstones -flail -flailed -flailing -flails -flair -flairs -flak -flake -flaked -flaker -flakers -flakes -flakey -flakier -flakiest -flakily -flakiness -flakinesses -flaking -flaky -flam -flambe -flambeau -flambeaus -flambeaux -flambee -flambeed -flambeing -flambes -flamboyance -flamboyances -flamboyancies -flamboyancy -flamboyant -flamboyantly -flamboyants -flame -flamed -flamen -flamenco -flamencos -flamens -flameout -flameouts -flameproof -flameproofed -flameproofer -flameproofers -flameproofing -flameproofs -flamer -flamers -flames -flamethrower -flamethrowers -flamier -flamiest -flamines -flaming -flamingly -flamingo -flamingoes -flamingos -flammabilities -flammability -flammable -flammables -flammed -flamming -flams -flamy -flan -flancard -flancards -flanerie -flaneries -flanes -flaneur -flaneurs -flange -flanged -flanger -flangers -flanges -flanging -flank -flanked -flanken -flankens -flanker -flankers -flanking -flanks -flannel -flanneled -flannelette -flannelettes -flanneling -flannelled -flannelling -flannelly -flannelmouthed -flannels -flans -flap -flapdoodle -flapdoodles -flapjack -flapjacks -flapless -flappable -flapped -flapper -flappers -flappier -flappiest -flapping -flappy -flaps -flare -flared -flares -flareup -flareups -flaring -flaringly -flash -flashback -flashbacks -flashboard -flashboards -flashbulb -flashbulbs -flashcard -flashcards -flashcube -flashcubes -flashed -flasher -flashers -flashes -flashgun -flashguns -flashier -flashiest -flashily -flashiness -flashinesses -flashing -flashings -flashlamp -flashlamps -flashlight -flashlights -flashover -flashovers -flashtube -flashtubes -flashy -flask -flasket -flaskets -flasks -flat -flatbed -flatbeds -flatboat -flatboats -flatcap -flatcaps -flatcar -flatcars -flatfeet -flatfish -flatfishes -flatfoot -flatfooted -flatfooting -flatfoots -flathead -flatheads -flatiron -flatirons -flatland -flatlander -flatlanders -flatlands -flatlet -flatlets -flatline -flatlined -flatliner -flatliners -flatlines -flatling -flatlings -flatlining -flatlong -flatly -flatmate -flatmates -flatness -flatnesses -flats -flatted -flatten -flattened -flattener -flatteners -flattening -flattens -flatter -flattered -flatterer -flatterers -flatteries -flattering -flatteringly -flatters -flattery -flattest -flatting -flattish -flattop -flattops -flatulence -flatulences -flatulencies -flatulency -flatulent -flatulently -flatus -flatuses -flatware -flatwares -flatwash -flatwashes -flatways -flatwise -flatwork -flatworks -flatworm -flatworms -flaunt -flaunted -flaunter -flaunters -flauntier -flauntiest -flaunting -flauntingly -flaunts -flaunty -flautist -flautists -flavanol -flavanols -flavanone -flavanones -flavin -flavine -flavines -flavins -flavone -flavones -flavonoid -flavonoids -flavonol -flavonols -flavoprotein -flavoproteins -flavor -flavored -flavorer -flavorers -flavorful -flavorfully -flavoring -flavorings -flavorist -flavorists -flavorless -flavors -flavorsome -flavory -flavour -flavoured -flavouring -flavours -flavoury -flaw -flawed -flawier -flawiest -flawing -flawless -flawlessly -flawlessness -flawlessnesses -flaws -flawy -flax -flaxen -flaxes -flaxier -flaxiest -flaxseed -flaxseeds -flaxy -flay -flayed -flayer -flayers -flaying -flays -flea -fleabag -fleabags -fleabane -fleabanes -fleabite -fleabites -fleahopper -fleahoppers -fleam -fleams -fleapit -fleapits -fleas -fleawort -fleaworts -fleche -fleches -flechette -flechettes -fleck -flecked -flecking -flecks -flecky -flection -flections -fled -fledge -fledged -fledges -fledgier -fledgiest -fledging -fledgling -fledglings -fledgy -flee -fleece -fleeced -fleecer -fleecers -fleeces -fleech -fleeched -fleeches -fleeching -fleecier -fleeciest -fleecily -fleecing -fleecy -fleeing -fleer -fleered -fleering -fleeringly -fleers -flees -fleet -fleeted -fleeter -fleetest -fleeting -fleetingly -fleetingness -fleetingnesses -fleetly -fleetness -fleetnesses -fleets -fleishig -flemish -flemished -flemishes -flemishing -flench -flenched -flenches -flenching -flense -flensed -flenser -flensers -flenses -flensing -flesh -fleshed -flesher -fleshers -fleshes -fleshier -fleshiest -fleshiness -fleshinesses -fleshing -fleshings -fleshlier -fleshliest -fleshly -fleshment -fleshments -fleshpot -fleshpots -fleshy -fletch -fletched -fletcher -fletchers -fletches -fletching -fletchings -fleury -flew -flews -flex -flexagon -flexagons -flexed -flexes -flexibilities -flexibility -flexible -flexibly -flexile -flexing -flexion -flexions -flexitime -flexitimes -flexographic -flexographically -flexographies -flexography -flexor -flexors -flextime -flextimes -flexuose -flexuous -flexural -flexure -flexures -fley -fleyed -fleying -fleys -flibbertigibbet -flibbertigibbets -flibbertigibbety -flic -flichter -flichtered -flichtering -flichters -flick -flicked -flicker -flickered -flickering -flickeringly -flickers -flickery -flicking -flicks -flics -flied -flier -fliers -flies -fliest -flight -flighted -flightier -flightiest -flightily -flightiness -flightinesses -flighting -flightless -flights -flighty -flimflam -flimflammed -flimflammer -flimflammeries -flimflammers -flimflammery -flimflamming -flimflams -flimsier -flimsies -flimsiest -flimsily -flimsiness -flimsinesses -flimsy -flinch -flinched -flincher -flinchers -flinches -flinching -flinder -flinders -fling -flinger -flingers -flinging -flings -flinkite -flinkites -flint -flinted -flintier -flintiest -flintily -flintiness -flintinesses -flinting -flintlike -flintlock -flintlocks -flints -flinty -flip -flippancies -flippancy -flippant -flippantly -flipped -flipper -flippers -flippest -flipping -flippy -flips -flirt -flirtation -flirtations -flirtatious -flirtatiously -flirtatiousness -flirtatiousnesses -flirted -flirter -flirters -flirtier -flirtiest -flirting -flirts -flirty -flit -flitch -flitched -flitches -flitching -flite -flited -flites -fliting -flits -flitted -flitter -flittered -flittering -flitters -flitting -flivver -flivvers -float -floatage -floatages -floatation -floatations -floated -floatel -floatels -floater -floaters -floatier -floatiest -floating -floatplane -floatplanes -floats -floaty -floc -flocced -flocci -floccing -floccose -flocculant -flocculants -flocculate -flocculated -flocculates -flocculating -flocculation -flocculations -flocculator -flocculators -floccule -flocculent -floccules -flocculi -flocculus -floccus -flock -flocked -flockier -flockiest -flocking -flockings -flocks -flocky -flocs -floe -floes -flog -flogged -flogger -floggers -flogging -floggings -flogs -flokati -flokatis -flong -flongs -flood -flooded -flooder -flooders -floodgate -floodgates -flooding -floodlight -floodlighted -floodlighting -floodlights -floodlit -floodplain -floodplains -floods -floodwater -floodwaters -floodway -floodways -flooey -flooie -floor -floorage -floorages -floorboard -floorboards -floorcloth -floorcloths -floored -floorer -floorers -flooring -floorings -floors -floorwalker -floorwalkers -floosie -floosies -floosy -floozie -floozies -floozy -flop -flophouse -flophouses -flopover -flopovers -flopped -flopper -floppers -floppier -floppies -floppiest -floppily -floppiness -floppinesses -flopping -floppy -flops -flora -florae -floral -florally -florals -floras -florence -florences -florescence -florescences -florescent -floret -florets -floriated -floriation -floriations -floribunda -floribundas -floricultural -floriculture -floricultures -floriculturist -floriculturists -florid -floridities -floridity -floridly -floridness -floridnesses -floriferous -floriferousness -floriferousnesses -florigen -florigenic -florigens -florilegia -florilegium -florin -florins -florist -floristic -floristically -floristries -floristry -florists -floruit -floruits -floss -flossed -flosses -flossie -flossier -flossies -flossiest -flossily -flossing -flossy -flota -flotage -flotages -flotas -flotation -flotations -flotilla -flotillas -flotsam -flotsams -flounce -flounced -flounces -flouncier -flounciest -flouncing -flouncings -flouncy -flounder -floundered -floundering -flounders -flour -floured -flouring -flourish -flourished -flourisher -flourishers -flourishes -flourishing -flourishingly -flourless -flours -floury -flout -flouted -flouter -flouters -flouting -flouts -flow -flowage -flowages -flowchart -flowcharting -flowchartings -flowcharts -flowed -flower -flowerage -flowerages -flowerbed -flowerbeds -flowered -flowerer -flowerers -floweret -flowerets -flowerette -flowerettes -flowerful -flowerier -floweriest -flowerily -floweriness -flowerinesses -flowering -flowerless -flowerlike -flowerpot -flowerpots -flowers -flowery -flowing -flowingly -flowmeter -flowmeters -flown -flows -flowstone -flowstones -flu -flub -flubbed -flubber -flubbers -flubbing -flubdub -flubdubs -flubs -fluctuant -fluctuate -fluctuated -fluctuates -fluctuating -fluctuation -fluctuational -fluctuations -flue -flued -fluegelhorn -fluegelhorns -fluencies -fluency -fluent -fluently -flueric -fluerics -flues -fluff -fluffed -fluffier -fluffiest -fluffily -fluffiness -fluffinesses -fluffing -fluffs -fluffy -flugelhorn -flugelhornist -flugelhornists -flugelhorns -fluid -fluidal -fluidally -fluidextract -fluidextracts -fluidic -fluidics -fluidise -fluidised -fluidises -fluidising -fluidities -fluidity -fluidization -fluidizations -fluidize -fluidized -fluidizer -fluidizers -fluidizes -fluidizing -fluidly -fluidness -fluidnesses -fluidram -fluidrams -fluids -fluke -fluked -flukes -flukey -flukier -flukiest -fluking -fluky -flume -flumed -flumes -fluming -flummeries -flummery -flummox -flummoxed -flummoxes -flummoxing -flump -flumped -flumping -flumps -flung -flunk -flunked -flunker -flunkers -flunkey -flunkeys -flunkies -flunking -flunks -flunky -fluor -fluorene -fluorenes -fluoresce -fluoresced -fluorescein -fluoresceins -fluorescence -fluorescences -fluorescent -fluorescents -fluorescer -fluorescers -fluoresces -fluorescing -fluoric -fluorid -fluoridate -fluoridated -fluoridates -fluoridating -fluoridation -fluoridations -fluoride -fluorides -fluorids -fluorimeter -fluorimeters -fluorimetric -fluorimetries -fluorimetry -fluorin -fluorinate -fluorinated -fluorinates -fluorinating -fluorination -fluorinations -fluorine -fluorines -fluorins -fluorite -fluorites -fluorocarbon -fluorocarbons -fluorochrome -fluorochromes -fluorographic -fluorographies -fluorography -fluorometer -fluorometers -fluorometric -fluorometries -fluorometry -fluoroscope -fluoroscoped -fluoroscopes -fluoroscopic -fluoroscopically -fluoroscopies -fluoroscoping -fluoroscopist -fluoroscopists -fluoroscopy -fluoroses -fluorosis -fluorotic -fluorouracil -fluorouracils -fluors -fluorspar -fluorspars -fluoxetine -fluoxetines -fluphenazine -fluphenazines -flurried -flurries -flurry -flurrying -flus -flush -flushable -flushed -flusher -flushers -flushes -flushest -flushing -flushness -flushnesses -fluster -flustered -flusteredly -flustering -flusters -flute -fluted -flutelike -fluter -fluters -flutes -flutey -flutier -flutiest -fluting -flutings -flutist -flutists -flutter -flutterboard -flutterboards -fluttered -flutterer -flutterers -fluttering -flutters -fluttery -fluty -fluvial -fluviatile -flux -fluxed -fluxes -fluxgate -fluxgates -fluxing -fluxion -fluxional -fluxions -fluyt -fluyts -fly -flyable -flyaway -flyaways -flybelt -flybelts -flyblew -flyblow -flyblowing -flyblown -flyblows -flyboat -flyboats -flyboy -flyboys -flybridge -flybridges -flyby -flybys -flycatcher -flycatchers -flyer -flyers -flying -flyings -flyleaf -flyleaves -flyless -flyman -flymen -flyoff -flyoffs -flyover -flyovers -flypaper -flypapers -flypast -flypasts -flysch -flysches -flyspeck -flyspecked -flyspecking -flyspecks -flyswatter -flyswatters -flyte -flyted -flytes -flytier -flytiers -flyting -flytings -flytrap -flytraps -flyway -flyways -flyweight -flyweights -flywheel -flywheels -foal -foaled -foaling -foals -foam -foamable -foamed -foamer -foamers -foamflower -foamflowers -foamier -foamiest -foamily -foaminess -foaminesses -foaming -foamless -foamlike -foams -foamy -fob -fobbed -fobbing -fobs -focaccia -focaccias -focal -focalise -focalised -focalises -focalising -focalization -focalizations -focalize -focalized -focalizes -focalizing -focally -foci -focus -focusable -focused -focuser -focusers -focuses -focusing -focusless -focussed -focusses -focussing -fodder -foddered -foddering -fodders -fodgel -foe -foehn -foehns -foeman -foemen -foes -foetal -foetid -foetor -foetors -foetus -foetuses -fog -fogbound -fogbow -fogbows -fogdog -fogdogs -fogey -fogeys -fogfruit -fogfruits -foggage -foggages -fogged -fogger -foggers -foggier -foggiest -foggily -fogginess -fogginesses -fogging -foggy -foghorn -foghorns -fogie -fogies -fogless -fogs -fogy -fogyish -fogyism -fogyisms -foh -fohn -fohns -foible -foibles -foil -foilable -foiled -foiling -foils -foilsman -foilsmen -foin -foined -foining -foins -foison -foisons -foist -foisted -foisting -foists -folacin -folacins -folate -folates -fold -foldable -foldaway -foldboat -foldboats -folded -folder -folderol -folderols -folders -folding -foldout -foldouts -folds -folia -foliaceous -foliage -foliaged -foliages -foliar -foliate -foliated -foliates -foliating -foliation -foliations -folio -folioed -folioing -folios -foliose -folious -folium -foliums -folk -folkie -folkies -folkish -folkishness -folkishnesses -folklife -folklike -folklives -folklore -folklores -folkloric -folklorish -folklorist -folkloristic -folklorists -folkmoot -folkmoots -folkmot -folkmote -folkmotes -folkmots -folks -folksier -folksiest -folksily -folksiness -folksinesses -folksinger -folksingers -folksinging -folksingings -folksong -folksongs -folksy -folktale -folktales -folkway -folkways -folky -folles -follicle -follicles -follicular -folliculitis -folliculitises -follies -follis -follow -followed -follower -followers -followership -followerships -following -followings -follows -followup -followups -folly -foment -fomentation -fomentations -fomented -fomenter -fomenters -fomenting -foments -fomite -fomites -fon -fond -fondant -fondants -fonded -fonder -fondest -fonding -fondle -fondled -fondler -fondlers -fondles -fondling -fondlings -fondly -fondness -fondnesses -fonds -fondu -fondue -fondues -fondus -fons -font -fontal -fontanel -fontanelle -fontanelles -fontanels -fontina -fontinas -fonts -food -foodie -foodies -foodless -foodlessness -foodlessnesses -foods -foodstuff -foodstuffs -foodways -foofaraw -foofaraws -fool -fooled -fooleries -foolery -foolfish -foolfishes -foolhardier -foolhardiest -foolhardily -foolhardiness -foolhardinesses -foolhardy -fooling -foolish -foolisher -foolishest -foolishly -foolishness -foolishnesses -foolproof -fools -foolscap -foolscaps -foot -footage -footages -football -footballer -footballers -footballs -footbath -footbaths -footboard -footboards -footboy -footboys -footbridge -footbridges -footcloth -footcloths -footdragger -footdraggers -footed -footer -footers -footfall -footfalls -footfault -footfaulted -footfaulting -footfaults -footgear -footgears -foothill -foothills -foothold -footholds -footie -footier -footies -footiest -footing -footings -footlambert -footlamberts -footle -footled -footler -footlers -footles -footless -footlessly -footlessness -footlessnesses -footlights -footlike -footling -footlocker -footlockers -footloose -footman -footmark -footmarks -footmen -footnote -footnoted -footnotes -footnoting -footpace -footpaces -footpad -footpads -footpath -footpaths -footprint -footprints -footrace -footraces -footrest -footrests -footrope -footropes -foots -footsie -footsies -footslog -footslogged -footslogger -footsloggers -footslogging -footslogs -footsore -footsoreness -footsorenesses -footstep -footsteps -footstone -footstones -footstool -footstools -footsy -footwall -footwalls -footway -footways -footwear -footwork -footworks -footworn -footy -foozle -foozled -foozler -foozlers -foozles -foozling -fop -fopped -fopperies -foppery -fopping -foppish -foppishly -foppishness -foppishnesses -fops -for -fora -forage -foraged -forager -foragers -forages -foraging -foram -foramen -foramens -foramina -foraminal -foraminifer -foraminifera -foraminiferal -foraminiferan -foraminiferans -foraminifers -foraminous -forams -foray -forayed -forayer -forayers -foraying -forays -forb -forbad -forbade -forbear -forbearance -forbearances -forbearer -forbearers -forbearing -forbears -forbid -forbidal -forbidals -forbiddance -forbiddances -forbidden -forbidder -forbidders -forbidding -forbiddingly -forbids -forbode -forboded -forbodes -forboding -forbore -forborne -forbs -forby -forbye -force -forced -forcedly -forceful -forcefully -forcefulness -forcefulnesses -forceless -forcemeat -forcemeats -forceps -forcepslike -forcer -forcers -forces -forcible -forcibleness -forciblenesses -forcibly -forcing -forcipes -ford -fordable -forded -fordid -fording -fordless -fordo -fordoes -fordoing -fordone -fords -fore -forearm -forearmed -forearming -forearms -forebay -forebays -forebear -forebears -forebode -foreboded -foreboder -foreboders -forebodes -forebodies -foreboding -forebodingly -forebodingness -forebodingnesses -forebodings -forebody -foreboom -forebooms -forebrain -forebrains -foreby -forebye -forecaddie -forecaddies -forecast -forecastable -forecasted -forecaster -forecasters -forecasting -forecastle -forecastles -forecasts -forecheck -forechecked -forechecker -forecheckers -forechecking -forechecks -foreclose -foreclosed -forecloses -foreclosing -foreclosure -foreclosures -forecourt -forecourts -foredate -foredated -foredates -foredating -foredeck -foredecks -foredid -foredo -foredoes -foredoing -foredone -foredoom -foredoomed -foredooming -foredooms -foreface -forefaces -forefather -forefathers -forefeel -forefeeling -forefeels -forefeet -forefelt -forefend -forefended -forefending -forefends -forefinger -forefingers -forefoot -forefront -forefronts -foregather -foregathered -foregathering -foregathers -forego -foregoer -foregoers -foregoes -foregoing -foregone -foreground -foregrounded -foregrounding -foregrounds -foregut -foreguts -forehand -forehanded -forehandedly -forehandedness -forehandednesses -forehands -forehead -foreheads -forehoof -forehoofs -forehooves -foreign -foreigner -foreigners -foreignism -foreignisms -foreignness -foreignnesses -forejudge -forejudged -forejudges -forejudging -foreknew -foreknow -foreknowing -foreknowledge -foreknowledges -foreknown -foreknows -foreladies -forelady -foreland -forelands -foreleg -forelegs -forelimb -forelimbs -forelock -forelocked -forelocking -forelocks -foreman -foremanship -foremanships -foremast -foremasts -foremen -foremilk -foremilks -foremost -foremother -foremothers -forename -forenamed -forenames -forenoon -forenoons -forensic -forensically -forensics -foreordain -foreordained -foreordaining -foreordains -foreordination -foreordinations -forepart -foreparts -forepassed -forepast -forepaw -forepaws -forepeak -forepeaks -foreplay -foreplays -forequarter -forequarters -foreran -forerank -foreranks -forereach -forereached -forereaches -forereaching -forerun -forerunner -forerunners -forerunning -foreruns -fores -foresaid -foresail -foresails -foresaw -foresee -foreseeabilities -foreseeability -foreseeable -foreseeing -foreseen -foreseer -foreseers -foresees -foreshadow -foreshadowed -foreshadower -foreshadowers -foreshadowing -foreshadows -foreshank -foreshanks -foresheet -foresheets -foreshock -foreshocks -foreshore -foreshores -foreshorten -foreshortened -foreshortening -foreshortens -foreshow -foreshowed -foreshowing -foreshown -foreshows -foreside -foresides -foresight -foresighted -foresightedly -foresightedness -foresightednesses -foresightful -foresights -foreskin -foreskins -forespeak -forespeaking -forespeaks -forespoke -forespoken -forest -forestage -forestages -forestal -forestall -forestalled -forestaller -forestallers -forestalling -forestallment -forestallments -forestalls -forestation -forestations -forestay -forestays -forestaysail -forestaysails -forested -forester -foresters -forestial -foresting -forestland -forestlands -forestries -forestry -forests -foreswear -foreswearing -foreswears -foreswore -foresworn -foretaste -foretasted -foretastes -foretasting -foretell -foreteller -foretellers -foretelling -foretells -forethought -forethoughtful -forethoughtfully -forethoughtfulness -forethoughtfulnesses -forethoughts -foretime -foretimes -foretoken -foretokened -foretokening -foretokens -foretold -foretop -foretopman -foretopmen -foretops -forever -forevermore -foreverness -forevernesses -forevers -forewarn -forewarned -forewarning -forewarns -forewent -forewing -forewings -forewoman -forewomen -foreword -forewords -foreworn -foreyard -foreyards -forfeit -forfeitable -forfeited -forfeiter -forfeiters -forfeiting -forfeits -forfeiture -forfeitures -forfend -forfended -forfending -forfends -forgat -forgather -forgathered -forgathering -forgathers -forgave -forge -forgeabilities -forgeability -forgeable -forged -forger -forgeries -forgers -forgery -forges -forget -forgetful -forgetfully -forgetfulness -forgetfulnesses -forgetive -forgets -forgettable -forgetter -forgetters -forgetting -forging -forgings -forgivable -forgivably -forgive -forgiven -forgiveness -forgivenesses -forgiver -forgivers -forgives -forgiving -forgivingly -forgivingness -forgivingnesses -forgo -forgoer -forgoers -forgoes -forgoing -forgone -forgot -forgotten -forint -forints -forjudge -forjudged -forjudges -forjudging -fork -forkball -forkballs -forked -forkedly -forker -forkers -forkful -forkfuls -forkier -forkiest -forking -forkless -forklift -forklifted -forklifting -forklifts -forklike -forks -forksful -forky -forlorn -forlorner -forlornest -forlornly -forlornness -forlornnesses -form -formabilities -formability -formable -formal -formaldehyde -formaldehydes -formalin -formalins -formalise -formalised -formalises -formalising -formalism -formalisms -formalist -formalistic -formalists -formalities -formality -formalizable -formalization -formalizations -formalize -formalized -formalizer -formalizers -formalizes -formalizing -formally -formalness -formalnesses -formals -formalwear -formamide -formamides -formant -formants -format -formate -formates -formation -formations -formative -formatively -formatives -formats -formatted -formatter -formatters -formatting -forme -formed -formee -former -formerly -formers -formes -formfitting -formful -formic -formicaries -formicary -formidabilities -formidability -formidable -formidableness -formidablenesses -formidably -forming -formless -formlessly -formlessness -formlessnesses -formol -formols -forms -formula -formulae -formulaic -formulaically -formularies -formularization -formularizations -formularize -formularized -formularizer -formularizers -formularizes -formularizing -formulary -formulas -formulate -formulated -formulates -formulating -formulation -formulations -formulator -formulators -formulize -formulized -formulizes -formulizing -formwork -formworks -formyl -formyls -fornical -fornicate -fornicated -fornicates -fornicating -fornication -fornications -fornicator -fornicators -fornices -fornix -forrader -forrarder -forrit -forsake -forsaken -forsaker -forsakers -forsakes -forsaking -forsook -forsooth -forspent -forswear -forswearing -forswears -forswore -forsworn -forsythia -forsythias -fort -fortalice -fortalices -forte -fortepiano -fortepianos -fortes -forth -forthcoming -forthright -forthrightly -forthrightness -forthrightnesses -forthrights -forthwith -forties -fortieth -fortieths -fortification -fortifications -fortified -fortifier -fortifiers -fortifies -fortify -fortifying -fortis -fortissimi -fortissimo -fortissimos -fortitude -fortitudes -fortnight -fortnightlies -fortnightly -fortnights -fortress -fortressed -fortresses -fortressing -fortresslike -forts -fortuities -fortuitous -fortuitously -fortuitousness -fortuitousnesses -fortuity -fortunate -fortunately -fortunateness -fortunatenesses -fortune -fortuned -fortunes -fortuneteller -fortunetellers -fortunetelling -fortunetellings -fortuning -forty -fortyish -forum -forums -forward -forwarded -forwarder -forwarders -forwardest -forwarding -forwardly -forwardness -forwardnesses -forwards -forwent -forwhy -forworn -forzando -forzandos -foss -fossa -fossae -fossas -fossate -fosse -fosses -fossette -fossettes -fossick -fossicked -fossicker -fossickers -fossicking -fossicks -fossil -fossiliferous -fossilise -fossilised -fossilises -fossilising -fossilization -fossilizations -fossilize -fossilized -fossilizes -fossilizing -fossils -fossorial -foster -fosterage -fosterages -fostered -fosterer -fosterers -fostering -fosterling -fosterlings -fosters -fou -fouette -fouettes -fought -foughten -foul -foulard -foulards -foulbrood -foulbroods -fouled -fouler -foulest -fouling -foulings -foully -foulmouthed -foulness -foulnesses -fouls -found -foundation -foundational -foundationally -foundationless -foundations -founded -founder -foundered -foundering -founders -founding -foundling -foundlings -foundries -foundry -founds -fount -fountain -fountained -fountainhead -fountainheads -fountaining -fountains -founts -four -fourchee -fourdrinier -fourdriniers -fourfold -fourgon -fourgons -fourplex -fourplexes -fourragere -fourrageres -fours -fourscore -foursome -foursomes -foursquare -fourteen -fourteener -fourteeners -fourteens -fourteenth -fourteenths -fourth -fourthly -fourths -fovea -foveae -foveal -foveas -foveate -foveated -foveola -foveolae -foveolar -foveolas -foveole -foveoles -foveolet -foveolets -fowl -fowled -fowler -fowlers -fowling -fowlings -fowlpox -fowlpoxes -fowls -fox -foxed -foxes -foxfire -foxfires -foxfish -foxfishes -foxglove -foxgloves -foxhole -foxholes -foxhound -foxhounds -foxhunt -foxhunted -foxhunter -foxhunters -foxhunting -foxhuntings -foxhunts -foxier -foxiest -foxily -foxiness -foxinesses -foxing -foxings -foxlike -foxskin -foxskins -foxtail -foxtails -foxtrot -foxtrots -foxtrotted -foxtrotting -foxy -foy -foyer -foyers -foys -fozier -foziest -foziness -fozinesses -fozy -frabjous -fracas -fracases -fractal -fractals -fracted -fracti -fraction -fractional -fractionalization -fractionalizations -fractionalize -fractionalized -fractionalizes -fractionalizing -fractionally -fractionate -fractionated -fractionates -fractionating -fractionation -fractionations -fractionator -fractionators -fractioned -fractioning -fractions -fractious -fractiously -fractiousness -fractiousnesses -fractur -fracture -fractured -fractures -fracturing -fracturs -fractus -frae -fraena -fraenum -fraenums -frag -fragged -fragging -fraggings -fragile -fragilities -fragility -fragment -fragmental -fragmentally -fragmentarily -fragmentariness -fragmentarinesses -fragmentary -fragmentate -fragmentated -fragmentates -fragmentating -fragmentation -fragmentations -fragmented -fragmenting -fragmentize -fragmentized -fragmentizes -fragmentizing -fragments -fragrance -fragrances -fragrancies -fragrancy -fragrant -fragrantly -frags -frail -frailer -frailest -frailly -frailness -frailnesses -frails -frailties -frailty -fraise -fraises -fraktur -frakturs -framable -frambesia -frambesias -framboise -framboises -frame -frameable -framed -framer -framers -frames -frameshift -frameshifts -framework -frameworks -framing -framings -franc -franchise -franchised -franchisee -franchisees -franchiser -franchisers -franchises -franchising -franchisor -franchisors -francium -franciums -francolin -francolins -francophone -francs -frangibilities -frangibility -frangible -frangipane -frangipanes -frangipani -frangipanis -frangipanni -franglais -frank -frankable -franked -franker -frankers -frankest -frankfurt -frankfurter -frankfurters -frankfurts -frankincense -frankincenses -franking -franklin -franklinite -franklinites -franklins -frankly -frankness -franknesses -frankpledge -frankpledges -franks -frantic -frantically -franticness -franticnesses -frap -frappe -frapped -frappes -frapping -fraps -frass -frasses -frat -frater -fraternal -fraternalism -fraternalisms -fraternally -fraternities -fraternity -fraternization -fraternizations -fraternize -fraternized -fraternizer -fraternizers -fraternizes -fraternizing -fraters -fratricidal -fratricide -fratricides -frats -fraud -frauds -fraudulence -fraudulences -fraudulent -fraudulently -fraudulentness -fraudulentnesses -fraught -fraughted -fraughting -fraughts -fraulein -frauleins -fraxinella -fraxinellas -fray -frayed -fraying -frayings -frays -frazil -frazils -frazzle -frazzled -frazzles -frazzling -freak -freaked -freakier -freakiest -freakily -freakiness -freakinesses -freaking -freakish -freakishly -freakishness -freakishnesses -freakout -freakouts -freaks -freaky -freckle -freckled -freckles -frecklier -freckliest -freckling -freckly -free -freebase -freebased -freebaser -freebasers -freebases -freebasing -freebee -freebees -freebie -freebies -freeboard -freeboards -freeboot -freebooted -freebooter -freebooters -freebooting -freeboots -freeborn -freed -freedman -freedmen -freedom -freedoms -freedwoman -freedwomen -freeform -freehand -freehanded -freehandedly -freehandedness -freehandednesses -freehearted -freeheartedly -freehold -freeholder -freeholders -freeholds -freeing -freelance -freelanced -freelancer -freelancers -freelances -freelancing -freeload -freeloaded -freeloader -freeloaders -freeloading -freeloads -freely -freeman -freemartin -freemartins -freemasonries -freemasonry -freemen -freeness -freenesses -freer -freers -frees -freesia -freesias -freest -freestanding -freestone -freestones -freestyle -freestyler -freestylers -freestyles -freethinker -freethinkers -freethinking -freethinkings -freeware -freewares -freeway -freeways -freewheel -freewheeled -freewheeler -freewheelers -freewheeling -freewheelingly -freewheels -freewill -freewriting -freewritings -freeze -freezer -freezers -freezes -freezing -freezingly -freight -freightage -freightages -freighted -freighter -freighters -freighting -freights -fremd -fremitus -fremituses -frena -french -frenched -frenches -frenchification -frenchifications -frenchified -frenchifies -frenchify -frenchifying -frenching -frenetic -frenetically -freneticism -freneticisms -frenetics -frenula -frenulum -frenulums -frenum -frenums -frenzied -frenziedly -frenzies -frenzily -frenzy -frenzying -frequence -frequences -frequencies -frequency -frequent -frequentation -frequentations -frequentative -frequentatives -frequented -frequenter -frequenters -frequentest -frequenting -frequently -frequentness -frequentnesses -frequents -frere -freres -fresco -frescoed -frescoer -frescoers -frescoes -frescoing -frescos -fresh -freshed -freshen -freshened -freshener -fresheners -freshening -freshens -fresher -freshes -freshest -freshet -freshets -freshing -freshly -freshman -freshmen -freshness -freshnesses -freshwater -freshwaters -fresnel -fresnels -fret -fretful -fretfully -fretfulness -fretfulnesses -fretless -frets -fretsaw -fretsaws -fretsome -fretted -fretter -fretters -frettier -frettiest -fretting -fretty -fretwork -fretworks -friabilities -friability -friable -friar -friaries -friarly -friars -friary -fribble -fribbled -fribbler -fribblers -fribbles -fribbling -fricandeau -fricandeaus -fricandeaux -fricando -fricandoes -fricassee -fricasseed -fricasseeing -fricassees -fricative -fricatives -friction -frictional -frictionally -frictionless -frictionlessly -frictions -fridge -fridges -fried -friedcake -friedcakes -friend -friended -friending -friendless -friendlessness -friendlessnesses -friendlier -friendlies -friendliest -friendlily -friendliness -friendlinesses -friendly -friends -friendship -friendships -frier -friers -fries -frieze -friezelike -friezes -frig -frigate -frigates -frigged -frigging -fright -frighted -frighten -frightened -frightening -frighteningly -frightens -frightful -frightfully -frightfulness -frightfulnesses -frighting -frights -frigid -frigidities -frigidity -frigidly -frigidness -frigidnesses -frigorific -frigs -frijol -frijole -frijoles -frill -frilled -friller -frillers -frillier -frilliest -frilling -frillings -frills -frilly -fringe -fringed -fringes -fringier -fringiest -fringing -fringy -fripperies -frippery -frisbee -frisbees -frise -frisee -frisees -frises -frisette -frisettes -friseur -friseurs -frisk -frisked -frisker -friskers -frisket -friskets -friskier -friskiest -friskily -friskiness -friskinesses -frisking -frisks -frisky -frisson -frissons -frit -frith -friths -fritillaria -fritillarias -fritillaries -fritillary -frits -fritt -frittata -frittatas -fritted -fritter -frittered -fritterer -fritterers -frittering -fritters -fritting -fritts -fritz -fritzes -frivol -frivoled -frivoler -frivolers -frivoling -frivolities -frivolity -frivolled -frivoller -frivollers -frivolling -frivolous -frivolously -frivolousness -frivolousnesses -frivols -friz -frized -frizer -frizers -frizes -frizette -frizettes -frizing -frizz -frizzed -frizzer -frizzers -frizzes -frizzier -frizziest -frizzily -frizziness -frizzinesses -frizzing -frizzle -frizzled -frizzler -frizzlers -frizzles -frizzlier -frizzliest -frizzling -frizzly -frizzy -fro -frock -frocked -frocking -frocks -froe -froes -frog -frogeye -frogeyed -frogeyes -frogfish -frogfishes -frogged -froggier -froggiest -frogging -froggy -froghopper -froghoppers -froglike -frogman -frogmen -frogs -frolic -frolicked -frolicking -frolicky -frolics -frolicsome -from -fromage -fromages -fromenties -fromenty -frond -fronded -frondeur -frondeurs -frondose -fronds -frons -front -frontage -frontages -frontal -frontalities -frontality -frontally -frontals -frontcourt -frontcourts -fronted -fronter -frontes -frontier -frontiers -frontiersman -frontiersmen -fronting -frontispiece -frontispieces -frontless -frontlet -frontlets -frontline -frontogeneses -frontogenesis -frontolyses -frontolysis -fronton -frontons -frontrunner -frontrunners -fronts -frontward -frontwards -frore -frosh -frost -frostbit -frostbite -frostbites -frostbiting -frostbitings -frostbitten -frosted -frosteds -frostier -frostiest -frostily -frostiness -frostinesses -frosting -frostings -frosts -frostwork -frostworks -frosty -froth -frothed -frothier -frothiest -frothily -frothiness -frothinesses -frothing -froths -frothy -frottage -frottages -frotteur -frotteurs -froufrou -froufrous -frounce -frounced -frounces -frouncing -frouzier -frouziest -frouzy -frow -froward -frowardly -frowardness -frowardnesses -frown -frowned -frowner -frowners -frowning -frowningly -frowns -frows -frowsier -frowsiest -frowst -frowsted -frowstier -frowstiest -frowsting -frowsts -frowsty -frowsy -frowzier -frowziest -frowzily -frowzy -froze -frozen -frozenly -frozenness -frozennesses -fructification -fructifications -fructified -fructifies -fructify -fructifying -fructose -fructoses -fructuous -frug -frugal -frugalities -frugality -frugally -frugged -frugging -frugivore -frugivores -frugivorous -frugs -fruit -fruitage -fruitages -fruitarian -fruitarians -fruitcake -fruitcakes -fruited -fruiter -fruiterer -fruiterers -fruiters -fruitful -fruitfuller -fruitfullest -fruitfully -fruitfulness -fruitfulnesses -fruitier -fruitiest -fruitily -fruitiness -fruitinesses -fruiting -fruition -fruitions -fruitless -fruitlessly -fruitlessness -fruitlessnesses -fruitlet -fruitlets -fruits -fruitwood -fruitwoods -fruity -frumenties -frumenty -frump -frumpier -frumpiest -frumpily -frumpish -frumps -frumpy -frusta -frustrate -frustrated -frustrates -frustrating -frustratingly -frustration -frustrations -frustule -frustules -frustum -frustums -frutescent -fruticose -fry -fryer -fryers -frying -frypan -frypans -fub -fubbed -fubbing -fubs -fubsier -fubsiest -fubsy -fuchsia -fuchsias -fuchsin -fuchsine -fuchsines -fuchsins -fuci -fuck -fucked -fucker -fuckers -fucking -fucks -fuckup -fuckups -fucoid -fucoidal -fucoids -fucose -fucoses -fucous -fucoxanthin -fucoxanthins -fucus -fucuses -fud -fuddle -fuddled -fuddles -fuddling -fudge -fudged -fudges -fudging -fuds -fuehrer -fuehrers -fuel -fueled -fueler -fuelers -fueling -fuelled -fueller -fuellers -fuelling -fuels -fuelwood -fuelwoods -fug -fugacious -fugacities -fugacity -fugal -fugally -fugato -fugatos -fugged -fuggier -fuggiest -fuggily -fugging -fuggy -fugio -fugios -fugitive -fugitively -fugitiveness -fugitivenesses -fugitives -fugle -fugled -fugleman -fuglemen -fugles -fugling -fugs -fugu -fugue -fugued -fugues -fuguing -fuguist -fuguists -fugus -fuhrer -fuhrers -fuji -fujis -fulcra -fulcrum -fulcrums -fulfil -fulfill -fulfilled -fulfiller -fulfillers -fulfilling -fulfillment -fulfillments -fulfills -fulfils -fulgent -fulgently -fulgid -fulgurant -fulgurate -fulgurated -fulgurates -fulgurating -fulguration -fulgurations -fulgurite -fulgurites -fulgurous -fulham -fulhams -fuliginous -fuliginously -full -fullam -fullams -fullback -fullbacks -fulled -fuller -fullered -fullerene -fullerenes -fulleries -fullering -fullers -fullery -fullest -fullface -fullfaces -fulling -fullmouthed -fullness -fullnesses -fulls -fully -fulmar -fulmars -fulminant -fulminate -fulminated -fulminates -fulminating -fulmination -fulminations -fulmine -fulmined -fulmines -fulminic -fulmining -fulness -fulnesses -fulsome -fulsomely -fulsomeness -fulsomenesses -fulvous -fumarase -fumarases -fumarate -fumarates -fumaric -fumarole -fumaroles -fumarolic -fumatories -fumatory -fumble -fumbled -fumbler -fumblers -fumbles -fumbling -fumblingly -fume -fumed -fumeless -fumelike -fumer -fumers -fumes -fumet -fumets -fumette -fumettes -fumier -fumiest -fumigant -fumigants -fumigate -fumigated -fumigates -fumigating -fumigation -fumigations -fumigator -fumigators -fuming -fumingly -fumitories -fumitory -fumuli -fumulus -fumy -fun -funambulism -funambulisms -funambulist -funambulists -function -functional -functionalism -functionalisms -functionalist -functionalistic -functionalists -functionalities -functionality -functionally -functionaries -functionary -functioned -functioning -functionless -functions -functor -functors -fund -fundament -fundamental -fundamentalism -fundamentalisms -fundamentalist -fundamentalistic -fundamentalists -fundamentally -fundamentals -fundaments -funded -fundi -fundic -funding -fundraiser -fundraisers -fundraising -fundraisings -funds -fundus -funeral -funerals -funerary -funereal -funereally -funest -funfair -funfairs -fungal -fungals -fungi -fungibilities -fungibility -fungible -fungibles -fungic -fungicidal -fungicidally -fungicide -fungicides -fungiform -fungistatic -fungo -fungoes -fungoid -fungoids -fungous -fungus -funguses -funicle -funicles -funicular -funiculars -funiculi -funiculus -funk -funked -funker -funkers -funkia -funkias -funkier -funkiest -funkiness -funkinesses -funking -funks -funky -funned -funnel -funneled -funnelform -funneling -funnelled -funnelling -funnels -funner -funnest -funnier -funnies -funniest -funnily -funniness -funninesses -funning -funny -funnyman -funnymen -funs -fur -furan -furane -furanes -furanose -furanoses -furanoside -furanosides -furans -furazolidone -furazolidones -furbearer -furbearers -furbelow -furbelowed -furbelowing -furbelows -furbish -furbished -furbisher -furbishers -furbishes -furbishing -furcate -furcated -furcates -furcating -furcation -furcations -furcraea -furcraeas -furcula -furculae -furcular -furculum -furfur -furfural -furfurals -furfuran -furfurans -furfures -furibund -furies -furioso -furious -furiously -furl -furlable -furled -furler -furlers -furless -furling -furlong -furlongs -furlough -furloughed -furloughing -furloughs -furls -furmenties -furmenty -furmeties -furmety -furmities -furmity -furnace -furnaced -furnaces -furnacing -furnish -furnished -furnisher -furnishers -furnishes -furnishing -furnishings -furniture -furnitures -furor -furore -furores -furors -furosemide -furosemides -furred -furrier -furrieries -furriers -furriery -furriest -furrily -furriner -furriners -furring -furrings -furrow -furrowed -furrower -furrowers -furrowing -furrows -furrowy -furry -furs -further -furtherance -furtherances -furthered -furtherer -furtherers -furthering -furthermore -furthermost -furthers -furthest -furtive -furtively -furtiveness -furtivenesses -furuncle -furuncles -furunculoses -furunculosis -fury -furze -furzes -furzier -furziest -furzy -fusain -fusains -fuscous -fuse -fused -fusee -fusees -fusel -fuselage -fuselages -fuseless -fusels -fuses -fusibilities -fusibility -fusible -fusibly -fusiform -fusil -fusile -fusileer -fusileers -fusilier -fusiliers -fusillade -fusillades -fusilli -fusillis -fusils -fusing -fusion -fusionist -fusionists -fusions -fuss -fussbudget -fussbudgets -fussbudgety -fussed -fusser -fussers -fusses -fussier -fussiest -fussily -fussiness -fussinesses -fussing -fusspot -fusspots -fussy -fustian -fustians -fustic -fustics -fustier -fustiest -fustigate -fustigated -fustigates -fustigating -fustigation -fustigations -fustily -fustiness -fustinesses -fusty -fusulinid -fusulinids -futharc -futharcs -futhark -futharks -futhorc -futhorcs -futhork -futhorks -futile -futilely -futileness -futilenesses -futilitarian -futilitarianism -futilitarianisms -futilitarians -futilities -futility -futon -futons -futtock -futtocks -futural -future -futureless -futurelessness -futurelessnesses -futures -futurism -futurisms -futurist -futuristic -futuristically -futuristics -futurists -futurities -futurity -futurological -futurologies -futurologist -futurologists -futurology -futz -futzed -futzes -futzing -fuze -fuzed -fuzee -fuzees -fuzes -fuzil -fuzils -fuzing -fuzz -fuzzed -fuzzes -fuzzier -fuzziest -fuzzily -fuzziness -fuzzinesses -fuzzing -fuzzy -fyce -fyces -fyke -fykes -fylfot -fylfots -fytte -fyttes -gab -gabardine -gabardines -gabbard -gabbards -gabbart -gabbarts -gabbed -gabber -gabbers -gabbier -gabbiest -gabbing -gabble -gabbled -gabbler -gabblers -gabbles -gabbling -gabbro -gabbroic -gabbroid -gabbros -gabby -gabelle -gabelled -gabelles -gaberdine -gaberdines -gabfest -gabfests -gabies -gabion -gabions -gable -gabled -gables -gabling -gaboon -gaboons -gabs -gaby -gad -gadabout -gadabouts -gadarene -gadded -gadder -gadders -gaddi -gadding -gaddis -gadflies -gadfly -gadget -gadgeteer -gadgeteers -gadgetries -gadgetry -gadgets -gadgety -gadi -gadid -gadids -gadis -gadoid -gadoids -gadolinite -gadolinites -gadolinium -gadoliniums -gadroon -gadrooned -gadrooning -gadroonings -gadroons -gads -gadwall -gadwalls -gadzookeries -gadzookery -gadzooks -gae -gaed -gaeing -gaen -gaes -gaff -gaffe -gaffed -gaffer -gaffers -gaffes -gaffing -gaffs -gag -gaga -gagaku -gagakus -gage -gaged -gager -gagers -gages -gagged -gagger -gaggers -gagging -gaggle -gaggled -gaggles -gaggling -gaging -gagman -gagmen -gags -gagster -gagsters -gahnite -gahnites -gaieties -gaiety -gaijin -gaillardia -gaillardias -gaily -gain -gainable -gained -gainer -gainers -gainful -gainfully -gainfulness -gainfulnesses -gaingiving -gaingivings -gaining -gainless -gainlier -gainliest -gainly -gains -gainsaid -gainsay -gainsayer -gainsayers -gainsaying -gainsays -gainst -gait -gaited -gaiter -gaiters -gaiting -gaits -gal -gala -galabia -galabias -galabieh -galabiehs -galabiya -galabiyas -galactic -galactorrhea -galactorrheas -galactosamine -galactosamines -galactose -galactosemia -galactosemias -galactosemic -galactoses -galactosidase -galactosidases -galactoside -galactosides -galactosyl -galactosyls -galago -galagos -galah -galahs -galangal -galangals -galantine -galantines -galas -galatea -galateas -galavant -galavanted -galavanting -galavants -galax -galaxes -galaxies -galaxy -galbanum -galbanums -gale -galea -galeae -galeas -galeate -galeated -galena -galenas -galenic -galenical -galenicals -galenite -galenites -galere -galeres -gales -galilee -galilees -galingale -galingales -galiot -galiots -galipot -galipots -galivant -galivanted -galivanting -galivants -gall -gallamine -gallamines -gallant -gallanted -gallanting -gallantly -gallantries -gallantry -gallants -gallate -gallates -gallbladder -gallbladders -galleass -galleasses -galled -gallein -galleins -galleon -galleons -galleria -gallerias -galleried -galleries -gallery -gallerygoer -gallerygoers -gallerying -galleryite -galleryites -gallet -galleta -galletas -galleted -galleting -gallets -galley -galleys -gallflies -gallfly -galliard -galliards -galliass -galliasses -gallic -gallican -gallicism -gallicisms -gallicization -gallicizations -gallicize -gallicized -gallicizes -gallicizing -gallied -gallies -galligaskins -gallimaufries -gallimaufry -gallinaceous -galling -gallingly -gallinipper -gallinippers -gallinule -gallinules -galliot -galliots -gallipot -gallipots -gallium -galliums -gallivant -gallivanted -gallivanting -gallivants -gallnut -gallnuts -gallon -gallonage -gallonages -gallons -galloon -galloons -galloot -galloots -gallop -gallopade -gallopades -galloped -galloper -gallopers -galloping -gallops -gallous -gallowglass -gallowglasses -gallows -gallowses -galls -gallstone -gallstones -gallus -gallused -galluses -gally -gallying -galoot -galoots -galop -galopade -galopades -galoped -galoping -galops -galore -galores -galosh -galoshe -galoshed -galoshes -gals -galumph -galumphed -galumphing -galumphs -galvanic -galvanically -galvanise -galvanised -galvanises -galvanising -galvanism -galvanisms -galvanization -galvanizations -galvanize -galvanized -galvanizer -galvanizers -galvanizes -galvanizing -galvanometer -galvanometers -galvanometric -galvanoscope -galvanoscopes -galyac -galyacs -galyak -galyaks -gam -gama -gamas -gamashes -gamay -gamays -gamb -gamba -gambade -gambades -gambado -gambadoes -gambados -gambas -gambe -gambes -gambeson -gambesons -gambia -gambias -gambier -gambiers -gambir -gambirs -gambit -gambits -gamble -gambled -gambler -gamblers -gambles -gambling -gamboge -gamboges -gambol -gamboled -gamboling -gambolled -gambolling -gambols -gambrel -gambrels -gambs -gambusia -gambusias -game -gamecock -gamecocks -gamed -gamekeeper -gamekeepers -gamelan -gamelans -gamelike -gamely -gameness -gamenesses -gamer -gamers -games -gamesman -gamesmanship -gamesmanships -gamesmen -gamesome -gamesomely -gamesomeness -gamesomenesses -gamest -gamester -gamesters -gametangia -gametangium -gamete -gametes -gametic -gametically -gametocyte -gametocytes -gametogeneses -gametogenesis -gametogenic -gametogenous -gametophore -gametophores -gametophyte -gametophytes -gametophytic -gamey -gamic -gamier -gamiest -gamily -gamin -gamine -gamines -gaminess -gaminesses -gaming -gamings -gamins -gamma -gammadia -gammadion -gammas -gammed -gammer -gammers -gammier -gammiest -gamming -gammon -gammoned -gammoner -gammoners -gammoning -gammons -gammy -gamodeme -gamodemes -gamopetalous -gamp -gamps -gams -gamut -gamuts -gamy -gan -ganache -ganaches -gander -gandered -gandering -ganders -gane -ganef -ganefs -ganev -ganevs -gang -gangbang -gangbanger -gangbangers -gangbangs -gangbuster -gangbusters -ganged -ganger -gangers -ganging -gangland -ganglands -ganglia -ganglial -gangliar -ganglier -gangliest -gangling -ganglion -ganglionated -ganglionic -ganglions -ganglioside -gangliosides -gangly -gangplank -gangplanks -gangplow -gangplows -gangrel -gangrels -gangrene -gangrened -gangrenes -gangrening -gangrenous -gangs -gangster -gangsterdom -gangsterdoms -gangsterish -gangsterism -gangsterisms -gangsters -gangue -gangues -gangway -gangways -ganister -ganisters -ganja -ganjah -ganjahs -ganjas -gannet -gannets -gannister -gannisters -ganof -ganofs -ganoid -ganoids -gantelope -gantelopes -gantlet -gantleted -gantleting -gantlets -gantline -gantlines -gantlope -gantlopes -gantries -gantry -ganymede -ganymedes -gaol -gaoled -gaoler -gaolers -gaoling -gaols -gap -gape -gaped -gaper -gapers -gapes -gapeseed -gapeseeds -gapeworm -gapeworms -gaping -gapingly -gaposis -gaposises -gapped -gappier -gappiest -gapping -gappy -gaps -gapy -gar -garage -garaged -garageman -garagemen -garages -garaging -garb -garbage -garbageman -garbagemen -garbages -garbanzo -garbanzos -garbed -garbing -garble -garbled -garbler -garblers -garbles -garbless -garbling -garboard -garboards -garboil -garboils -garbs -garcon -garcons -gardant -garden -gardened -gardener -gardeners -gardenful -gardenfuls -gardenia -gardenias -gardening -gardens -garderobe -garderobes -gardyloo -garfish -garfishes -garganey -garganeys -gargantuan -garget -gargets -gargety -gargle -gargled -gargler -garglers -gargles -gargling -gargoyle -gargoyled -gargoyles -garibaldi -garibaldis -garigue -garigues -garish -garishly -garishness -garishnesses -garland -garlanded -garlanding -garlands -garlic -garlicked -garlicky -garlics -garment -garmented -garmenting -garments -garner -garnered -garnering -garners -garnet -garnetiferous -garnets -garni -garnierite -garnierites -garnish -garnished -garnishee -garnisheed -garnisheeing -garnishees -garnishes -garnishing -garnishment -garnishments -garniture -garnitures -garote -garoted -garotes -garoting -garotte -garotted -garotter -garotters -garottes -garotting -garpike -garpikes -garred -garret -garrets -garring -garrison -garrisoned -garrisoning -garrisons -garron -garrons -garrote -garroted -garroter -garroters -garrotes -garroting -garrotte -garrotted -garrottes -garrotting -garrulities -garrulity -garrulous -garrulously -garrulousness -garrulousnesses -gars -garter -gartered -gartering -garters -garth -garths -garvey -garveys -gas -gasalier -gasaliers -gasbag -gasbags -gascon -gasconade -gasconaded -gasconader -gasconaders -gasconades -gasconading -gascons -gaselier -gaseliers -gaseous -gaseousness -gaseousnesses -gases -gash -gashed -gasher -gashes -gashest -gashing -gasholder -gasholders -gashouse -gashouses -gasification -gasifications -gasified -gasifier -gasifiers -gasifies -gasiform -gasify -gasifying -gasket -gaskets -gaskin -gasking -gaskings -gaskins -gasless -gaslight -gaslights -gaslit -gasman -gasmen -gasogene -gasogenes -gasohol -gasohols -gasolene -gasolenes -gasolier -gasoliers -gasoline -gasolines -gasolinic -gasometer -gasometers -gasp -gasped -gasper -gaspers -gasping -gasps -gassed -gasser -gassers -gasses -gassier -gassiest -gassily -gassiness -gassinesses -gassing -gassings -gassy -gast -gasted -gaster -gasters -gastight -gastightness -gastightnesses -gasting -gastness -gastnesses -gastraea -gastraeas -gastral -gastrea -gastreas -gastrectomies -gastrectomy -gastric -gastrin -gastrins -gastritides -gastritis -gastritises -gastrocnemii -gastrocnemius -gastroduodenal -gastroenteritides -gastroenteritis -gastroenterological -gastroenterologies -gastroenterologist -gastroenterologists -gastroenterology -gastroesophageal -gastrointestinal -gastrolith -gastroliths -gastronome -gastronomes -gastronomic -gastronomical -gastronomically -gastronomies -gastronomist -gastronomists -gastronomy -gastropod -gastropods -gastroscope -gastroscopes -gastroscopic -gastroscopies -gastroscopist -gastroscopists -gastroscopy -gastrotrich -gastrotrichs -gastrovascular -gastrula -gastrulae -gastrular -gastrulas -gastrulate -gastrulated -gastrulates -gastrulating -gastrulation -gastrulations -gasts -gasworks -gat -gate -gateau -gateaus -gateaux -gated -gatefold -gatefolds -gatehouse -gatehouses -gatekeeper -gatekeepers -gatekeeping -gateless -gatelike -gateman -gatemen -gatepost -gateposts -gates -gateway -gateways -gather -gathered -gatherer -gatherers -gathering -gatherings -gathers -gating -gator -gators -gats -gauche -gauchely -gaucheness -gauchenesses -gaucher -gaucherie -gaucheries -gauchest -gaucho -gauchos -gaud -gauderies -gaudery -gaudier -gaudies -gaudiest -gaudily -gaudiness -gaudinesses -gauds -gaudy -gauffer -gauffered -gauffering -gauffers -gauge -gauged -gauger -gaugers -gauges -gauging -gault -gaults -gaum -gaumed -gauming -gaums -gaun -gaunt -gaunter -gauntest -gauntlet -gauntleted -gauntleting -gauntlets -gauntly -gauntness -gauntnesses -gauntries -gauntry -gaur -gaurs -gauss -gausses -gauze -gauzelike -gauzes -gauzier -gauziest -gauzily -gauzy -gavage -gavages -gave -gavel -gaveled -gaveling -gavelkind -gavelkinds -gavelled -gavelling -gavelock -gavelocks -gavels -gavial -gavials -gavot -gavots -gavotte -gavotted -gavottes -gavotting -gawk -gawked -gawker -gawkers -gawkier -gawkies -gawkiest -gawkily -gawkiness -gawkinesses -gawking -gawkish -gawkishly -gawkishness -gawkishnesses -gawks -gawky -gawp -gawped -gawper -gawpers -gawping -gawps -gawsie -gawsy -gay -gayal -gayals -gayer -gayest -gayeties -gayety -gayly -gayness -gaynesses -gays -gaywings -gazabo -gazaboes -gazabos -gazania -gazanias -gazar -gazars -gaze -gazebo -gazeboes -gazebos -gazed -gazehound -gazehounds -gazelle -gazelles -gazer -gazers -gazes -gazette -gazetted -gazetteer -gazetteers -gazettes -gazetting -gazillion -gazillions -gazing -gazogene -gazogenes -gazoo -gazoos -gazpacho -gazpachos -gazump -gazumped -gazumper -gazumpers -gazumping -gazumps -geanticline -geanticlines -gear -gearbox -gearboxes -gearcase -gearcases -gearchange -gearchanges -geared -gearing -gearings -gearless -gears -gearshift -gearshifts -gearwheel -gearwheels -geck -gecked -gecking -gecko -geckoes -geckos -gecks -ged -gedankenexperiment -gedankenexperiments -geds -gee -geed -geegaw -geegaws -geeing -geek -geekier -geekiest -geeks -geeky -geepound -geepounds -gees -geese -geest -geests -geez -geezer -geezers -gegenschein -gegenscheins -geisha -geishas -gel -gelable -gelada -geladas -gelandesprung -gelandesprungs -gelant -gelants -gelate -gelated -gelates -gelati -gelatin -gelatine -gelatines -gelating -gelatinization -gelatinizations -gelatinize -gelatinized -gelatinizes -gelatinizing -gelatinous -gelatinously -gelatinousness -gelatinousnesses -gelatins -gelation -gelations -gelato -gelatos -geld -gelded -gelder -gelders -gelding -geldings -gelds -gelee -gelees -gelid -gelidities -gelidity -gelidly -gelignite -gelignites -gellant -gellants -gelled -gelling -gels -gelsemia -gelsemium -gelsemiums -gelt -gelts -gem -gemeinschaft -gemeinschaften -gemeinschafts -geminal -geminally -geminate -geminated -geminates -geminating -gemination -geminations -gemlike -gemma -gemmae -gemmate -gemmated -gemmates -gemmating -gemmation -gemmations -gemmed -gemmier -gemmiest -gemmily -gemming -gemmologies -gemmologist -gemmologists -gemmology -gemmule -gemmules -gemmy -gemological -gemologies -gemologist -gemologists -gemology -gemot -gemote -gemotes -gemots -gems -gemsbok -gemsboks -gemsbuck -gemsbucks -gemstone -gemstones -gemutlich -gemutlichkeit -gemutlichkeits -gen -gendarme -gendarmerie -gendarmeries -gendarmery -gendarmes -gender -gendered -gendering -genders -gene -genealogical -genealogically -genealogies -genealogist -genealogists -genealogy -genera -generable -general -generalisation -generalisations -generalise -generalised -generalises -generalising -generalissimo -generalissimos -generalist -generalists -generalities -generality -generalizabilities -generalizability -generalizable -generalization -generalizations -generalize -generalized -generalizer -generalizers -generalizes -generalizing -generally -generals -generalship -generalships -generate -generated -generates -generating -generation -generational -generationally -generations -generative -generator -generators -generatrices -generatrix -generic -generically -genericness -genericnesses -generics -generosities -generosity -generous -generously -generousness -generousnesses -genes -geneses -genesis -genet -genetic -genetical -genetically -geneticist -geneticists -genetics -genets -genette -genettes -geneva -genevas -genial -genialities -geniality -genially -genic -genically -geniculate -geniculated -genie -genies -genii -genip -genipap -genipaps -genips -genital -genitalia -genitalic -genitally -genitals -genitival -genitivally -genitive -genitives -genitor -genitors -genitourinary -geniture -genitures -genius -geniuses -genoa -genoas -genocidal -genocide -genocides -genoise -genoises -genom -genome -genomes -genomic -genoms -genotype -genotypes -genotypic -genotypical -genotypically -genre -genres -genro -genros -gens -genseng -gensengs -gent -gentamicin -gentamicins -genteel -genteeler -genteelest -genteelism -genteelisms -genteelly -genteelness -genteelnesses -gentes -gentian -gentians -gentil -gentile -gentiles -gentilesse -gentilesses -gentilities -gentility -gentle -gentled -gentlefolk -gentlefolks -gentleman -gentlemanlike -gentlemanlikeness -gentlemanlikenesses -gentlemanliness -gentlemanlinesses -gentlemanly -gentlemen -gentleness -gentlenesses -gentleperson -gentlepersons -gentler -gentles -gentlest -gentlewoman -gentlewomen -gentling -gently -gentoo -gentoos -gentrice -gentrices -gentries -gentrification -gentrifications -gentrified -gentrifier -gentrifiers -gentrifies -gentrify -gentrifying -gentry -gents -genu -genua -genuflect -genuflected -genuflecting -genuflection -genuflections -genuflects -genuine -genuinely -genuineness -genuinenesses -genus -genuses -geobotanic -geobotanical -geobotanies -geobotanist -geobotanists -geobotany -geocentric -geocentrically -geochemical -geochemically -geochemist -geochemistries -geochemistry -geochemists -geochronologic -geochronological -geochronologically -geochronologies -geochronologist -geochronologists -geochronology -geode -geodes -geodesic -geodesics -geodesies -geodesist -geodesists -geodesy -geodetic -geodetical -geodic -geoduck -geoducks -geognosies -geognosy -geographer -geographers -geographic -geographical -geographically -geographies -geography -geohydrologic -geohydrologies -geohydrologist -geohydrologists -geohydrology -geoid -geoidal -geoids -geologer -geologers -geologic -geological -geologically -geologies -geologist -geologists -geologize -geologized -geologizes -geologizing -geology -geomagnetic -geomagnetically -geomagnetism -geomagnetisms -geomancer -geomancers -geomancies -geomancy -geomantic -geometer -geometers -geometric -geometrical -geometrically -geometrician -geometricians -geometrics -geometrid -geometrids -geometries -geometrise -geometrised -geometrises -geometrising -geometrization -geometrizations -geometrize -geometrized -geometrizes -geometrizing -geometry -geomorphic -geomorphological -geomorphologies -geomorphologist -geomorphologists -geomorphology -geophagies -geophagy -geophone -geophones -geophysical -geophysically -geophysicist -geophysicists -geophysics -geophyte -geophytes -geopolitical -geopolitically -geopolitician -geopoliticians -geopolitics -geoponic -geopressured -geoprobe -geoprobes -georgette -georgettes -georgic -georgics -geoscience -geosciences -geoscientist -geoscientists -geostationary -geostrategic -geostrategies -geostrategist -geostrategists -geostrategy -geostrophic -geostrophically -geosynchronous -geosynclinal -geosyncline -geosynclines -geotactic -geotaxes -geotaxis -geotechnical -geotectonic -geotectonically -geothermal -geothermally -geotropic -geotropically -geotropism -geotropisms -gerah -gerahs -geranial -geranials -geraniol -geraniols -geranium -geraniums -gerardia -gerardias -gerbera -gerberas -gerbil -gerbille -gerbilles -gerbils -gerent -gerents -gerenuk -gerenuks -gerfalcon -gerfalcons -geriatric -geriatrician -geriatricians -geriatrics -germ -german -germander -germanders -germane -germanely -germanic -germanium -germaniums -germanization -germanizations -germanize -germanized -germanizes -germanizing -germans -germen -germens -germfree -germicidal -germicide -germicides -germier -germiest -germina -germinabilities -germinability -germinal -germinally -germinate -germinated -germinates -germinating -germination -germinations -germinative -germproof -germs -germy -gerontic -gerontocracies -gerontocracy -gerontocrat -gerontocratic -gerontocrats -gerontologic -gerontological -gerontologies -gerontologist -gerontologists -gerontology -gerontomorphic -gerrymander -gerrymandered -gerrymandering -gerrymanders -gerund -gerundive -gerundives -gerunds -gesellschaft -gesellschaften -gesellschafts -gesneria -gesneriad -gesneriads -gesso -gessoed -gessoes -gest -gestalt -gestalten -gestaltist -gestaltists -gestalts -gestapo -gestapos -gestate -gestated -gestates -gestating -gestation -gestational -gestations -geste -gestes -gestic -gestical -gesticulant -gesticulate -gesticulated -gesticulates -gesticulating -gesticulation -gesticulations -gesticulative -gesticulator -gesticulators -gesticulatory -gests -gestural -gesturally -gesture -gestured -gesturer -gesturers -gestures -gesturing -gesundheit -get -geta -getable -getas -getatable -getaway -getaways -gets -gettable -getter -gettered -gettering -getters -getting -getup -getups -geum -geums -gewgaw -gewgaws -gewurztraminer -gewurztraminers -gey -geyser -geyserite -geyserites -geysers -gharial -gharials -gharri -gharries -gharris -gharry -ghast -ghastful -ghastfully -ghastlier -ghastliest -ghastliness -ghastlinesses -ghastly -ghat -ghats -ghaut -ghauts -ghazi -ghazies -ghazis -ghee -ghees -gherao -gheraoed -gheraoes -gheraoing -gherkin -gherkins -ghetto -ghettoed -ghettoes -ghettoing -ghettoization -ghettoizations -ghettoize -ghettoized -ghettoizes -ghettoizing -ghettos -ghi -ghibli -ghiblis -ghillie -ghillies -ghis -ghost -ghosted -ghostier -ghostiest -ghosting -ghostings -ghostlier -ghostliest -ghostlike -ghostliness -ghostlinesses -ghostly -ghosts -ghostwrite -ghostwriter -ghostwriters -ghostwrites -ghostwriting -ghostwritten -ghostwrote -ghosty -ghoul -ghoulie -ghoulies -ghoulish -ghoulishly -ghoulishness -ghoulishnesses -ghouls -ghyll -ghylls -giant -giantess -giantesses -giantism -giantisms -giantlike -giants -giaour -giaours -giardiases -giardiasis -gib -gibbed -gibber -gibbered -gibberellin -gibberellins -gibbering -gibberish -gibberishes -gibbers -gibbet -gibbeted -gibbeting -gibbets -gibbetted -gibbetting -gibbing -gibbon -gibbons -gibbose -gibbosities -gibbosity -gibbous -gibbsite -gibbsites -gibe -gibed -giber -gibers -gibes -gibing -gibingly -giblet -giblets -gibs -gibson -gibsons -gid -giddap -giddied -giddier -giddies -giddiest -giddily -giddiness -giddinesses -giddy -giddyap -giddying -giddyup -gids -gie -gied -gieing -gien -gies -gift -gifted -giftedly -giftedness -giftednesses -gifting -giftless -gifts -giftware -giftwares -giftwrap -giftwrapped -giftwrapping -giftwraps -gig -giga -gigabit -gigabits -gigabyte -gigabytes -gigaflop -gigaflops -gigahertz -gigantesque -gigantic -gigantically -gigantism -gigantisms -gigas -gigaton -gigatons -gigawatt -gigawatts -gigged -gigging -giggle -giggled -giggler -gigglers -giggles -gigglier -giggliest -giggling -gigglingly -giggly -gighe -giglet -giglets -giglot -giglots -gigolo -gigolos -gigot -gigots -gigs -gigue -gigues -gilbert -gilberts -gild -gilded -gilder -gilders -gildhall -gildhalls -gilding -gildings -gilds -gill -gilled -giller -gillers -gillie -gillied -gillies -gilling -gillnet -gillnets -gillnetted -gillnetter -gillnetters -gillnetting -gills -gilly -gillyflower -gillyflowers -gillying -gilt -gilthead -giltheads -gilts -gimbal -gimbaled -gimbaling -gimballed -gimballing -gimbals -gimcrack -gimcrackeries -gimcrackery -gimcracks -gimel -gimels -gimlet -gimleted -gimleting -gimlets -gimmal -gimmals -gimme -gimmes -gimmick -gimmicked -gimmicking -gimmickries -gimmickry -gimmicks -gimmicky -gimmie -gimmies -gimp -gimped -gimpier -gimpiest -gimping -gimps -gimpy -gin -gingal -gingall -gingalls -gingals -gingeley -gingeleys -gingeli -gingelies -gingelis -gingelli -gingellies -gingellis -gingelly -gingely -ginger -gingerbread -gingerbreaded -gingerbreads -gingerbready -gingered -gingering -gingerliness -gingerlinesses -gingerly -gingerroot -gingerroots -gingers -gingersnap -gingersnaps -gingery -gingham -ginghams -gingili -gingilis -gingilli -gingillis -gingiva -gingivae -gingival -gingivectomies -gingivectomy -gingivitis -gingivitises -gingko -gingkoes -gink -ginkgo -ginkgoes -ginkgos -ginks -ginned -ginner -ginners -ginnier -ginniest -ginning -ginnings -ginny -gins -ginseng -ginsengs -gip -gipon -gipons -gipped -gipper -gippers -gipping -gips -gipsied -gipsies -gipsy -gipsying -giraffe -giraffes -giraffish -girandole -girandoles -girasol -girasole -girasoles -girasols -gird -girded -girder -girders -girding -girdle -girdled -girdler -girdlers -girdles -girdling -girds -girl -girlfriend -girlfriends -girlhood -girlhoods -girlie -girlies -girlish -girlishly -girlishness -girlishnesses -girls -girly -girn -girned -girning -girns -giro -giron -girons -giros -girosol -girosols -girsh -girshes -girt -girted -girth -girthed -girthing -girths -girting -girts -gisarme -gisarmes -gismo -gismos -gist -gists -git -gitano -gitanos -gits -gittern -gitterns -gittin -give -giveable -giveaway -giveaways -giveback -givebacks -given -givens -giver -givers -gives -giving -gizmo -gizmos -gizzard -gizzards -gjetost -gjetosts -glabella -glabellae -glabellar -glabrate -glabrescent -glabrous -glace -glaceed -glaceing -glaces -glacial -glacially -glaciate -glaciated -glaciates -glaciating -glaciation -glaciations -glacier -glaciers -glaciological -glaciologies -glaciologist -glaciologists -glaciology -glacis -glacises -glad -gladded -gladden -gladdened -gladdening -gladdens -gladder -gladdest -gladding -glade -glades -gladiate -gladiator -gladiatorial -gladiators -gladier -gladiest -gladiola -gladiolas -gladioli -gladiolus -gladioluses -gladlier -gladliest -gladly -gladness -gladnesses -glads -gladsome -gladsomely -gladsomeness -gladsomenesses -gladsomer -gladsomest -gladstone -gladstones -glady -glaiket -glaikit -glair -glaire -glaired -glaires -glairier -glairiest -glairing -glairs -glairy -glaive -glaived -glaives -glamor -glamorise -glamorised -glamorises -glamorising -glamorization -glamorizations -glamorize -glamorized -glamorizer -glamorizers -glamorizes -glamorizing -glamorous -glamorously -glamorousness -glamorousnesses -glamors -glamour -glamoured -glamouring -glamourize -glamourized -glamourizes -glamourizing -glamourless -glamourous -glamours -glance -glanced -glancer -glancers -glances -glancing -glancingly -gland -glandered -glanders -glandes -glandless -glands -glandular -glandularly -glandule -glandules -glans -glare -glared -glares -glarier -glariest -glaring -glaringly -glaringness -glaringnesses -glary -glasnost -glasnosts -glass -glassblower -glassblowers -glassblowing -glassblowings -glassed -glasses -glassful -glassfuls -glasshouse -glasshouses -glassie -glassier -glassies -glassiest -glassily -glassine -glassines -glassiness -glassinesses -glassing -glassless -glassmaker -glassmakers -glassmaking -glassmakings -glassman -glassmen -glasspaper -glasspapered -glasspapering -glasspapers -glassware -glasswares -glasswork -glassworker -glassworkers -glassworks -glasswort -glassworts -glassy -glaucoma -glaucomas -glauconite -glauconites -glauconitic -glaucous -glaucousness -glaucousnesses -glaze -glazed -glazer -glazers -glazes -glazier -glazieries -glaziers -glaziery -glaziest -glazing -glazings -glazy -gleam -gleamed -gleamer -gleamers -gleamier -gleamiest -gleaming -gleams -gleamy -glean -gleanable -gleaned -gleaner -gleaners -gleaning -gleanings -gleans -gleba -glebae -glebe -glebes -gled -glede -gledes -gleds -glee -gleed -gleeds -gleeful -gleefully -gleefulness -gleefulnesses -gleek -gleeked -gleeking -gleeks -gleeman -gleemen -glees -gleesome -gleet -gleeted -gleetier -gleetiest -gleeting -gleets -gleety -gleg -glegly -glegness -glegnesses -gleization -gleizations -glen -glengarries -glengarry -glenlike -glenoid -glens -gley -gleyed -gleying -gleyings -gleys -glia -gliadin -gliadine -gliadines -gliadins -glial -glias -glib -glibber -glibbest -glibly -glibness -glibnesses -glide -glided -glider -gliders -glides -gliding -gliff -gliffs -glim -glime -glimed -glimes -gliming -glimmer -glimmered -glimmering -glimmerings -glimmers -glimpse -glimpsed -glimpser -glimpsers -glimpses -glimpsing -glims -glint -glinted -glinting -glints -glioblastoma -glioblastomas -glioblastomata -glioma -gliomas -gliomata -glissade -glissaded -glissader -glissaders -glissades -glissading -glissandi -glissando -glissandos -glisten -glistened -glistening -glistens -glister -glistered -glistering -glisters -glitch -glitches -glitchy -glitter -glitterati -glittered -glittering -glitteringly -glitters -glittery -glitz -glitzes -glitzier -glitziest -glitzy -gloam -gloaming -gloamings -gloams -gloat -gloated -gloater -gloaters -gloating -gloatingly -gloats -glob -global -globalise -globalised -globalises -globalising -globalism -globalisms -globalist -globalists -globalization -globalizations -globalize -globalized -globalizes -globalizing -globally -globate -globated -globbier -globbiest -globby -globe -globed -globefish -globefishes -globeflower -globeflowers -globes -globin -globing -globins -globoid -globoids -globose -globous -globs -globular -globule -globules -globulin -globulins -glochid -glochidia -glochidium -glochids -glockenspiel -glockenspiels -glogg -gloggs -glom -glomera -glomerular -glomerule -glomerules -glomeruli -glomerulonephritides -glomerulonephritis -glomerulus -glommed -glomming -gloms -glomus -glonoin -glonoins -gloom -gloomed -gloomful -gloomier -gloomiest -gloomily -gloominess -gloominesses -glooming -gloomings -glooms -gloomy -glop -glopped -glopping -gloppy -glops -gloria -glorias -gloried -glories -glorification -glorifications -glorified -glorifier -glorifiers -glorifies -glorify -glorifying -gloriole -glorioles -glorious -gloriously -gloriousness -gloriousnesses -glory -glorying -gloss -glossa -glossae -glossal -glossarial -glossaries -glossarist -glossarists -glossary -glossas -glossator -glossators -glossed -glosseme -glossemes -glosser -glossers -glosses -glossier -glossies -glossiest -glossily -glossina -glossinas -glossiness -glossinesses -glossing -glossitis -glossitises -glossographer -glossographers -glossolalia -glossolalias -glossolalist -glossolalists -glossopharyngeal -glossopharyngeals -glossy -glost -glosts -glottal -glottic -glottides -glottis -glottises -glottochronological -glottochronologies -glottochronology -glout -glouted -glouting -glouts -glove -gloved -glover -glovers -gloves -gloving -glow -glowed -glower -glowered -glowering -glowers -glowflies -glowfly -glowing -glowingly -glows -glowworm -glowworms -gloxinia -gloxinias -gloze -glozed -glozes -glozing -glucagon -glucagons -glucan -glucans -glucinic -glucinum -glucinums -glucocorticoid -glucocorticoids -glucokinase -glucokinases -gluconate -gluconates -gluconeogeneses -gluconeogenesis -glucosamine -glucosamines -glucose -glucoses -glucosic -glucosidase -glucosidases -glucoside -glucosides -glucosidic -glucuronidase -glucuronidases -glucuronide -glucuronides -glue -glued -glueing -gluelike -gluepot -gluepots -gluer -gluers -glues -gluey -glug -glugged -glugging -glugs -gluier -gluiest -gluily -gluing -glum -glume -glumes -glumly -glummer -glummest -glumness -glumnesses -glumpier -glumpiest -glumpily -glumpy -glunch -glunched -glunches -glunching -gluon -gluons -glut -glutamate -glutamates -glutaminase -glutaminases -glutamine -glutamines -glutaraldehyde -glutaraldehydes -glutathione -glutathiones -gluteal -glutei -glutelin -glutelins -gluten -glutenous -glutens -glutethimide -glutethimides -gluteus -glutinous -glutinously -gluts -glutted -glutting -glutton -gluttonies -gluttonous -gluttonously -gluttonousness -gluttonousnesses -gluttons -gluttony -glycan -glycans -glyceraldehyde -glyceraldehydes -glyceric -glyceride -glycerides -glyceridic -glycerin -glycerinate -glycerinated -glycerinates -glycerinating -glycerine -glycerines -glycerins -glycerol -glycerols -glyceryl -glyceryls -glycin -glycine -glycines -glycins -glycogen -glycogeneses -glycogenesis -glycogenolyses -glycogenolysis -glycogenolytic -glycogens -glycol -glycolic -glycolipid -glycolipids -glycols -glycolyses -glycolysis -glycolytic -glyconic -glyconics -glycopeptide -glycopeptides -glycoprotein -glycoproteins -glycosaminoglycan -glycosaminoglycans -glycosidase -glycosidases -glycoside -glycosides -glycosidic -glycosidically -glycosuria -glycosurias -glycosyl -glycosylate -glycosylated -glycosylates -glycosylating -glycosylation -glycosylations -glycosyls -glycyl -glycyls -glyph -glyphic -glyphs -glyptic -glyptics -gnar -gnarl -gnarled -gnarlier -gnarliest -gnarling -gnarls -gnarly -gnarr -gnarred -gnarring -gnarrs -gnars -gnash -gnashed -gnashes -gnashing -gnat -gnatcatcher -gnatcatchers -gnathal -gnathic -gnathion -gnathions -gnathite -gnathites -gnatlike -gnats -gnattier -gnattiest -gnatty -gnaw -gnawable -gnawed -gnawer -gnawers -gnawing -gnawings -gnawn -gnaws -gneiss -gneisses -gneissic -gneissoid -gneissose -gnocchi -gnome -gnomelike -gnomes -gnomic -gnomical -gnomish -gnomist -gnomists -gnomon -gnomonic -gnomons -gnoses -gnosis -gnostic -gnosticism -gnosticisms -gnostics -gnotobiotic -gnotobiotically -gnu -gnus -go -goa -goad -goaded -goading -goadlike -goads -goal -goaled -goalie -goalies -goaling -goalkeeper -goalkeepers -goalless -goalmouth -goalmouths -goalpost -goalposts -goals -goaltender -goaltenders -goaltending -goaltendings -goalward -goanna -goannas -goas -goat -goatee -goateed -goatees -goatfish -goatfishes -goatherd -goatherds -goatish -goatlike -goats -goatskin -goatskins -goatsucker -goatsuckers -gob -goban -gobang -gobangs -gobans -gobbed -gobbet -gobbets -gobbing -gobble -gobbled -gobbledegook -gobbledegooks -gobbledygook -gobbledygooks -gobbler -gobblers -gobbles -gobbling -gobies -gobioid -gobioids -goblet -goblets -goblin -goblins -gobo -goboes -gobonee -gobony -gobos -gobs -goby -god -godchild -godchildren -goddam -goddammed -goddamming -goddamn -goddamned -goddamning -goddamns -goddams -goddaughter -goddaughters -godded -goddess -goddesses -godding -godet -godets -godfather -godfathered -godfathering -godfathers -godforsaken -godhead -godheads -godhood -godhoods -godless -godlessness -godlessnesses -godlier -godliest -godlike -godlikeness -godlikenesses -godlily -godliness -godlinesses -godling -godlings -godly -godmother -godmothers -godown -godowns -godparent -godparents -godroon -godroons -gods -godsend -godsends -godship -godships -godson -godsons -godwit -godwits -goer -goers -goes -goethite -goethites -gofer -gofers -goffer -goffered -goffering -goffers -goggle -goggled -goggler -gogglers -goggles -gogglier -goggliest -goggling -goggly -goglet -goglets -gogo -gogos -going -goings -goiter -goiters -goitre -goitres -goitrogen -goitrogenic -goitrogenicities -goitrogenicity -goitrogens -goitrous -golconda -golcondas -gold -goldarn -goldarns -goldbrick -goldbricked -goldbricking -goldbricks -goldbug -goldbugs -golden -goldener -goldenest -goldeneye -goldeneyes -goldenly -goldenness -goldennesses -goldenrod -goldenrods -goldenseal -goldenseals -golder -goldest -goldeye -goldeyes -goldfield -goldfields -goldfinch -goldfinches -goldfish -goldfishes -golds -goldsmith -goldsmiths -goldstone -goldstones -goldurn -goldurns -golem -golems -golf -golfed -golfer -golfers -golfing -golfings -golfs -golgotha -golgothas -goliard -goliardic -goliards -golliwog -golliwogg -golliwoggs -golliwogs -golly -gollywog -gollywogs -golosh -goloshe -goloshes -gombo -gombos -gombroon -gombroons -gomeral -gomerals -gomerel -gomerels -gomeril -gomerils -gomuti -gomutis -gonad -gonadal -gonadectomies -gonadectomized -gonadectomy -gonadial -gonadic -gonadotrophic -gonadotrophin -gonadotrophins -gonadotropic -gonadotropin -gonadotropins -gonads -gondola -gondolas -gondolier -gondoliers -gone -gonef -gonefs -goneness -gonenesses -goner -goners -gonfalon -gonfalons -gonfanon -gonfanons -gong -gonged -gonging -gonglike -gongoristic -gongs -gonia -gonidia -gonidial -gonidic -gonidium -gonif -goniff -goniffs -gonifs -goniometer -goniometers -goniometric -goniometries -goniometry -gonion -gonium -gonococcal -gonococci -gonococcus -gonocyte -gonocytes -gonof -gonofs -gonoph -gonophore -gonophores -gonophs -gonopore -gonopores -gonorrhea -gonorrheal -gonorrheas -gonzo -goo -goober -goobers -good -goodby -goodbye -goodbyes -goodbys -goodie -goodies -goodish -goodlier -goodliest -goodly -goodman -goodmen -goodness -goodnesses -goods -goodwife -goodwill -goodwilled -goodwills -goodwives -goody -gooey -gooeyness -gooeynesses -goof -goofball -goofballs -goofed -goofier -goofiest -goofily -goofiness -goofinesses -goofing -goofs -goofy -googlies -googly -googol -googolplex -googolplexes -googols -gooier -gooiest -gook -gooks -gooky -goombah -goombahs -goombay -goombays -goon -gooney -gooneys -goonie -goonies -goons -goony -goop -goopier -goopiest -goops -goopy -gooral -goorals -goos -goosander -goosanders -goose -gooseberries -gooseberry -goosed -goosefish -goosefishes -gooseflesh -goosefleshes -goosefoot -goosefoots -goosegrass -goosegrasses -gooseneck -goosenecked -goosenecks -gooses -goosey -goosier -goosiest -goosing -goosy -gopher -gophers -gopik -gor -goral -gorals -gorbellies -gorbelly -gorblimy -gorcock -gorcocks -gore -gored -gores -gorge -gorged -gorgedly -gorgeous -gorgeously -gorgeousness -gorgeousnesses -gorger -gorgerin -gorgerins -gorgers -gorges -gorget -gorgeted -gorgets -gorging -gorgon -gorgonian -gorgonians -gorgonize -gorgonized -gorgonizes -gorgonizing -gorgons -gorhen -gorhens -gorier -goriest -gorilla -gorillas -gorily -goriness -gorinesses -goring -gormand -gormandise -gormandised -gormandises -gormandising -gormandize -gormandized -gormandizer -gormandizers -gormandizes -gormandizing -gormands -gormless -gorp -gorps -gorse -gorses -gorsier -gorsiest -gorsy -gory -gos -gosh -goshawk -goshawks -gosling -goslings -gospel -gospeler -gospelers -gospeller -gospellers -gospels -gosport -gosports -gossamer -gossamers -gossamery -gossan -gossans -gossip -gossiped -gossiper -gossipers -gossiping -gossipmonger -gossipmongers -gossipped -gossipping -gossipries -gossipry -gossips -gossipy -gossoon -gossoons -gossypol -gossypols -got -gothic -gothically -gothicize -gothicized -gothicizes -gothicizing -gothics -gothite -gothites -gotten -gouache -gouaches -gouge -gouged -gouger -gougers -gouges -gouging -goulash -goulashes -gourami -gouramies -gouramis -gourd -gourde -gourdes -gourds -gourmand -gourmandise -gourmandises -gourmandism -gourmandisms -gourmandize -gourmandized -gourmandizes -gourmandizing -gourmands -gourmet -gourmets -gout -goutier -goutiest -goutily -gouts -gouty -govern -governable -governance -governances -governed -governess -governesses -governessy -governing -government -governmental -governmentalism -governmentalisms -governmentalist -governmentalists -governmentalize -governmentalized -governmentalizes -governmentalizing -governmentally -governmentese -governmenteses -governments -governor -governorate -governorates -governors -governorship -governorships -governs -gowan -gowaned -gowans -gowany -gowd -gowds -gowk -gowks -gown -gowned -gowning -gowns -gownsman -gownsmen -gox -goxes -goy -goyim -goyish -goys -graal -graals -grab -grabbed -grabber -grabbers -grabbier -grabbiest -grabbing -grabble -grabbled -grabbler -grabblers -grabbles -grabbling -grabby -graben -grabens -grabs -grace -graced -graceful -gracefuller -gracefullest -gracefully -gracefulness -gracefulnesses -graceless -gracelessly -gracelessness -gracelessnesses -graces -gracile -gracileness -gracilenesses -graciles -gracilis -gracilities -gracility -gracing -gracioso -graciosos -gracious -graciously -graciousness -graciousnesses -grackle -grackles -grad -gradable -gradate -gradated -gradates -gradating -gradation -gradational -gradationally -gradations -grade -graded -gradeless -grader -graders -grades -gradient -gradients -gradin -gradine -gradines -grading -gradins -gradiometer -gradiometers -grads -gradual -gradualism -gradualisms -gradualist -gradualists -gradually -gradualness -gradualnesses -graduals -graduand -graduands -graduate -graduated -graduates -graduating -graduation -graduations -graduator -graduators -gradus -graduses -graecize -graecized -graecizes -graecizing -graffiti -graffitist -graffitists -graffito -graft -graftage -graftages -grafted -grafter -grafters -grafting -grafts -graham -grahams -grail -grails -grain -grained -grainer -grainers -grainfield -grainfields -grainier -grainiest -graininess -graininesses -graining -grains -grainy -gram -grama -gramaries -gramary -gramarye -gramaryes -gramas -gramercies -gramercy -gramicidin -gramicidins -gramineous -graminivorous -grammar -grammarian -grammarians -grammars -grammatical -grammaticalities -grammaticality -grammatically -grammaticalness -grammaticalnesses -gramme -grammes -gramophone -gramophones -gramp -gramps -grampus -grampuses -grams -gran -grana -granadilla -granadillas -granaries -granary -grand -grandad -grandaddies -grandaddy -grandads -grandam -grandame -grandames -grandams -grandaunt -grandaunts -grandbabies -grandbaby -grandchild -grandchildren -granddad -granddaddies -granddaddy -granddads -granddam -granddams -granddaughter -granddaughters -grandee -grandees -grander -grandest -grandeur -grandeurs -grandfather -grandfathered -grandfathering -grandfatherly -grandfathers -grandiflora -grandiflorae -grandifloras -grandiloquence -grandiloquences -grandiloquent -grandiloquently -grandiose -grandiosely -grandioseness -grandiosenesses -grandiosities -grandiosity -grandioso -grandkid -grandkids -grandly -grandma -grandmas -grandmaster -grandmasters -grandmother -grandmotherly -grandmothers -grandnephew -grandnephews -grandness -grandnesses -grandniece -grandnieces -grandpa -grandparent -grandparental -grandparenthood -grandparenthoods -grandparents -grandpas -grands -grandsir -grandsire -grandsires -grandsirs -grandson -grandsons -grandstand -grandstanded -grandstander -grandstanders -grandstanding -grandstands -granduncle -granduncles -grange -granger -grangerism -grangerisms -grangers -granges -granita -granitas -granite -granitelike -granites -graniteware -granitewares -granitic -granitoid -granivorous -grannie -grannies -granny -granodiorite -granodiorites -granodioritic -granola -granolas -granolithic -granophyre -granophyres -granophyric -grans -grant -grantable -granted -grantee -grantees -granter -granters -granting -grantor -grantors -grants -grantsman -grantsmanship -grantsmanships -grantsmen -granular -granularities -granularity -granulate -granulated -granulates -granulating -granulation -granulations -granulator -granulators -granule -granules -granulite -granulites -granulitic -granulocyte -granulocytes -granulocytic -granulocytopoieses -granulocytopoiesis -granuloma -granulomas -granulomata -granulomatous -granulose -granuloses -granulosis -granum -grape -grapefruit -grapefruits -grapelike -graperies -grapery -grapes -grapeshot -grapevine -grapevines -grapey -graph -graphed -grapheme -graphemes -graphemic -graphemically -graphemics -graphic -graphical -graphically -graphicness -graphicnesses -graphics -graphing -graphite -graphites -graphitic -graphitizable -graphitization -graphitizations -graphitize -graphitized -graphitizes -graphitizing -grapholect -grapholects -graphological -graphologies -graphologist -graphologists -graphology -graphs -grapier -grapiest -grapiness -grapinesses -graplin -grapline -graplines -graplins -grapnel -grapnels -grappa -grappas -grapple -grappled -grappler -grapplers -grapples -grappling -grapplings -graptolite -graptolites -grapy -grasp -graspable -grasped -grasper -graspers -grasping -graspingly -graspingness -graspingnesses -grasps -grass -grassed -grasses -grasshopper -grasshoppers -grassier -grassiest -grassily -grassing -grassland -grasslands -grassless -grasslike -grassroot -grassroots -grassy -grat -grate -grated -grateful -gratefuller -gratefullest -gratefully -gratefulness -gratefulnesses -grater -graters -grates -graticule -graticules -gratification -gratifications -gratified -gratifies -gratify -gratifying -gratifyingly -gratin -gratine -gratinee -gratineed -gratineeing -gratinees -grating -gratingly -gratings -gratins -gratis -gratitude -gratitudes -gratuities -gratuitous -gratuitously -gratuitousness -gratuitousnesses -gratuity -gratulate -gratulated -gratulates -gratulating -gratulation -gratulations -gratulatory -graupel -graupels -gravamen -gravamens -gravamina -grave -graved -gravel -graveled -graveless -graveling -gravelled -gravelling -gravelly -gravels -gravely -graven -graveness -gravenesses -graver -gravers -graves -graveside -gravesides -gravest -gravestone -gravestones -graveyard -graveyards -gravid -gravida -gravidae -gravidas -gravidities -gravidity -gravidly -gravies -gravimeter -gravimeters -gravimetric -gravimetrically -gravimetries -gravimetry -graving -gravitas -gravitases -gravitate -gravitated -gravitates -gravitating -gravitation -gravitational -gravitationally -gravitations -gravitative -gravities -graviton -gravitons -gravity -gravlaks -gravlax -gravure -gravures -gravy -gray -grayback -graybacks -graybeard -graybeards -grayed -grayer -grayest -grayfish -grayfishes -graying -grayish -graylag -graylags -grayling -graylings -grayly -graymail -graymails -grayness -graynesses -grayout -grayouts -grays -graywacke -graywackes -grazable -graze -grazeable -grazed -grazer -grazers -grazes -grazier -graziers -grazing -grazings -grazioso -grease -greaseball -greaseballs -greased -greaseless -greasepaint -greasepaints -greaseproof -greaseproofs -greaser -greasers -greases -greasewood -greasewoods -greasier -greasiest -greasily -greasiness -greasinesses -greasing -greasy -great -greatcoat -greatcoats -greaten -greatened -greatening -greatens -greater -greatest -greathearted -greatheartedly -greatheartedness -greatheartednesses -greatly -greatness -greatnesses -greats -greave -greaved -greaves -grebe -grebes -grecianize -grecianized -grecianizes -grecianizing -grecize -grecized -grecizes -grecizing -gree -greed -greedier -greediest -greedily -greediness -greedinesses -greeds -greedy -greegree -greegrees -greeing -greek -green -greenback -greenbacker -greenbackers -greenbackism -greenbackisms -greenbacks -greenbelt -greenbelts -greenbrier -greenbriers -greenbug -greenbugs -greened -greener -greeneries -greenery -greenest -greenfield -greenfinch -greenfinches -greenflies -greenfly -greengage -greengages -greengrocer -greengroceries -greengrocers -greengrocery -greenhead -greenheads -greenheart -greenhearts -greenhorn -greenhorns -greenhouse -greenhouses -greenie -greenier -greenies -greeniest -greening -greenings -greenish -greenishness -greenishnesses -greenkeeper -greenkeepers -greenlet -greenlets -greenling -greenlings -greenly -greenmail -greenmailed -greenmailer -greenmailers -greenmailing -greenmails -greenness -greennesses -greenockite -greenockites -greenroom -greenrooms -greens -greensand -greensands -greenshank -greenshanks -greensick -greensickness -greensicknesses -greenskeeper -greenskeepers -greenstone -greenstones -greenstuff -greenstuffs -greensward -greenswards -greenth -greenths -greenway -greenways -greenwing -greenwings -greenwood -greenwoods -greeny -grees -greet -greeted -greeter -greeters -greeting -greetings -greets -gregarine -gregarines -gregarious -gregariously -gregariousness -gregariousnesses -grego -gregos -greige -greiges -greisen -greisens -gremial -gremials -gremlin -gremlins -gremmie -gremmies -gremmy -grenade -grenades -grenadier -grenadiers -grenadine -grenadines -grew -grewsome -grewsomer -grewsomest -grey -greyed -greyer -greyest -greyhen -greyhens -greyhound -greyhounds -greying -greyish -greylag -greylags -greyly -greyness -greynesses -greys -gribble -gribbles -grid -gridder -gridders -griddle -griddlecake -griddlecakes -griddled -griddles -griddling -gride -grided -grides -griding -gridiron -gridirons -gridlock -gridlocked -gridlocking -gridlocks -grids -grief -griefs -grievance -grievances -grievant -grievants -grieve -grieved -griever -grievers -grieves -grieving -grievous -grievously -grievousness -grievousnesses -griff -griffe -griffes -griffin -griffins -griffon -griffons -griffs -grift -grifted -grifter -grifters -grifting -grifts -grig -grigri -grigris -grigs -grill -grillade -grillades -grillage -grillages -grille -grilled -griller -grillers -grilles -grilling -grillroom -grillrooms -grills -grillwork -grillworks -grilse -grilses -grim -grimace -grimaced -grimacer -grimacers -grimaces -grimacing -grimalkin -grimalkins -grime -grimed -grimes -grimier -grimiest -grimily -griminess -griminesses -griming -grimly -grimmer -grimmest -grimness -grimnesses -grimy -grin -grinch -grinches -grind -grinded -grinder -grinderies -grinders -grindery -grinding -grindingly -grinds -grindstone -grindstones -gringo -gringos -grinned -grinner -grinners -grinning -grinningly -grins -griot -griots -grip -gripe -griped -griper -gripers -gripes -gripey -gripier -gripiest -griping -gripman -gripmen -grippe -gripped -gripper -grippers -grippes -grippier -grippiest -gripping -grippingly -gripple -grippy -grips -gripsack -gripsacks -gript -gripy -grisaille -grisailles -griseofulvin -griseofulvins -griseous -grisette -grisettes -griskin -griskins -grislier -grisliest -grisliness -grislinesses -grisly -grison -grisons -grist -gristle -gristles -gristlier -gristliest -gristliness -gristlinesses -gristly -gristmill -gristmills -grists -grit -grith -griths -grits -gritted -grittier -grittiest -grittily -grittiness -grittinesses -gritting -gritty -grivet -grivets -grizzle -grizzled -grizzler -grizzlers -grizzles -grizzlier -grizzlies -grizzliest -grizzling -grizzly -groan -groaned -groaner -groaners -groaning -groans -groat -groats -grocer -groceries -grocers -grocery -grodier -grodiest -grody -grog -groggeries -groggery -groggier -groggiest -groggily -grogginess -grogginesses -groggy -grogram -grograms -grogs -grogshop -grogshops -groin -groined -groining -groins -grommet -grommets -gromwell -gromwells -groom -groomed -groomer -groomers -grooming -grooms -groomsman -groomsmen -groove -grooved -groover -groovers -grooves -groovier -grooviest -grooving -groovy -grope -groped -groper -gropers -gropes -groping -grosbeak -grosbeaks -groschen -grosgrain -grosgrains -gross -grossed -grosser -grossers -grosses -grossest -grossing -grossly -grossness -grossnesses -grossular -grossularite -grossularites -grossulars -grosz -grosze -groszy -grot -grotesque -grotesquely -grotesqueness -grotesquenesses -grotesquerie -grotesqueries -grotesquery -grotesques -grots -grottier -grottiest -grotto -grottoes -grottos -grotty -grouch -grouched -grouches -grouchier -grouchiest -grouchily -grouchiness -grouchinesses -grouching -grouchy -ground -groundbreaker -groundbreakers -groundbreaking -groundburst -groundbursts -grounded -grounder -grounders -groundfish -groundfishes -groundhog -groundhogs -grounding -groundings -groundless -groundlessly -groundlessness -groundlessnesses -groundling -groundlings -groundmass -groundmasses -groundnut -groundnuts -groundout -groundouts -grounds -groundsel -groundsels -groundsheet -groundsheets -groundskeeper -groundskeepers -groundsman -groundsmen -groundswell -groundswells -groundwater -groundwaters -groundwood -groundwoods -groundwork -groundworks -group -groupable -grouped -grouper -groupers -groupie -groupies -grouping -groupings -groupoid -groupoids -groups -groupthink -groupthinks -groupuscule -groupuscules -grouse -groused -grouser -grousers -grouses -grousing -grout -grouted -grouter -grouters -groutier -groutiest -grouting -grouts -grouty -grove -groved -grovel -groveled -groveler -grovelers -groveling -grovelingly -grovelled -grovelling -grovels -groves -grow -growable -grower -growers -growing -growingly -growl -growled -growler -growlers -growlier -growliest -growliness -growlinesses -growling -growlingly -growls -growly -grown -grownup -grownups -grows -growth -growthier -growthiest -growthiness -growthinesses -growths -growthy -groyne -groynes -grub -grubbed -grubber -grubbers -grubbier -grubbiest -grubbily -grubbiness -grubbinesses -grubbing -grubby -grubs -grubstake -grubstaked -grubstaker -grubstakers -grubstakes -grubstaking -grubworm -grubworms -grudge -grudged -grudger -grudgers -grudges -grudging -grudgingly -grue -gruel -grueled -grueler -gruelers -grueling -gruelingly -gruelings -gruelled -grueller -gruellers -gruelling -gruellings -gruels -grues -gruesome -gruesomely -gruesomeness -gruesomenesses -gruesomer -gruesomest -gruff -gruffed -gruffer -gruffest -gruffier -gruffiest -gruffily -gruffing -gruffish -gruffly -gruffness -gruffnesses -gruffs -gruffy -grugru -grugrus -gruiform -grum -grumble -grumbled -grumbler -grumblers -grumbles -grumbling -grumblingly -grumbly -grume -grumes -grummer -grummest -grummet -grummets -grumose -grumous -grump -grumped -grumphie -grumphies -grumphy -grumpier -grumpiest -grumpily -grumpiness -grumpinesses -grumping -grumpish -grumps -grumpy -grunge -grunges -grungier -grungiest -grungy -grunion -grunions -grunt -grunted -grunter -grunters -grunting -gruntle -gruntled -gruntles -gruntling -grunts -grushie -grutch -grutched -grutches -grutching -grutten -gruyere -gruyeres -gryphon -gryphons -guacamole -guacamoles -guacharo -guacharoes -guacharos -guaco -guacos -guaiac -guaiacol -guaiacols -guaiacs -guaiacum -guaiacums -guaiocum -guaiocums -guan -guanaco -guanacos -guanase -guanases -guanay -guanays -guanethidine -guanethidines -guanidin -guanidine -guanidines -guanidins -guanin -guanine -guanines -guanins -guano -guanos -guanosine -guanosines -guans -guar -guarani -guaranies -guaranis -guarantee -guaranteed -guaranteeing -guarantees -guarantied -guaranties -guarantor -guarantors -guaranty -guarantying -guard -guardant -guardants -guarded -guardedly -guardedness -guardednesses -guarder -guarders -guardhouse -guardhouses -guardian -guardians -guardianship -guardianships -guarding -guardrail -guardrails -guardroom -guardrooms -guards -guardsman -guardsmen -guars -guava -guavas -guayabera -guayaberas -guayule -guayules -gubernatorial -guck -gucks -gude -gudes -gudgeon -gudgeoned -gudgeoning -gudgeons -guenon -guenons -guerdon -guerdoned -guerdoning -guerdons -gueridon -gueridons -guerilla -guerillas -guernsey -guernseys -guerrilla -guerrillas -guess -guessable -guessed -guesser -guessers -guesses -guessing -guesstimate -guesstimated -guesstimates -guesstimating -guesswork -guessworks -guest -guested -guesthouse -guesthouses -guesting -guestroom -guestrooms -guests -guff -guffaw -guffawed -guffawing -guffaws -guffs -guggle -guggled -guggles -guggling -guglet -guglets -guid -guidable -guidance -guidances -guide -guidebook -guidebooks -guided -guideline -guidelines -guidepost -guideposts -guider -guiders -guides -guideway -guideways -guiding -guidon -guidons -guids -guidwillie -guild -guilder -guilders -guildhall -guildhalls -guilds -guildship -guildships -guildsman -guildsmen -guile -guiled -guileful -guilefully -guilefulness -guilefulnesses -guileless -guilelessly -guilelessness -guilelessnesses -guiles -guiling -guillemet -guillemets -guillemot -guillemots -guilloche -guilloches -guillotine -guillotined -guillotines -guillotining -guilt -guiltier -guiltiest -guiltily -guiltiness -guiltinesses -guiltless -guiltlessly -guiltlessness -guiltlessnesses -guilts -guilty -guimpe -guimpes -guinea -guineas -guipure -guipures -guiro -guiros -guisard -guisards -guise -guised -guises -guising -guitar -guitarfish -guitarfishes -guitarist -guitarists -guitars -guitguit -guitguits -gul -gulag -gulags -gular -gulch -gulches -gulden -guldens -gules -gulf -gulfed -gulfier -gulfiest -gulfing -gulflike -gulfs -gulfweed -gulfweeds -gulfy -gull -gullable -gullably -gulled -gullet -gullets -gulley -gulleys -gullibilities -gullibility -gullible -gullibly -gullied -gullies -gulling -gulls -gully -gullying -gulosities -gulosity -gulp -gulped -gulper -gulpers -gulpier -gulpiest -gulping -gulps -gulpy -guls -gum -gumbo -gumboil -gumboils -gumboot -gumboots -gumbos -gumbotil -gumbotils -gumdrop -gumdrops -gumless -gumlike -gumma -gummas -gummata -gummatous -gummed -gummer -gummers -gummier -gummiest -gumminess -gumminesses -gumming -gummite -gummites -gummose -gummoses -gummosis -gummous -gummy -gumption -gumptions -gums -gumshoe -gumshoed -gumshoeing -gumshoes -gumtree -gumtrees -gumweed -gumweeds -gumwood -gumwoods -gun -gunboat -gunboats -guncotton -guncottons -gundog -gundogs -gunfight -gunfighter -gunfighters -gunfighting -gunfights -gunfire -gunfires -gunflint -gunflints -gunfought -gunite -gunites -gunk -gunkhole -gunkholed -gunkholes -gunkholing -gunks -gunky -gunless -gunlock -gunlocks -gunman -gunmen -gunmetal -gunmetals -gunned -gunnel -gunnels -gunnen -gunner -gunneries -gunners -gunnery -gunnies -gunning -gunnings -gunny -gunnybag -gunnybags -gunnysack -gunnysacks -gunpaper -gunpapers -gunplay -gunplays -gunpoint -gunpoints -gunpowder -gunpowders -gunroom -gunrooms -gunrunner -gunrunners -gunrunning -gunrunnings -guns -gunsel -gunsels -gunship -gunships -gunshot -gunshots -gunslinger -gunslingers -gunslinging -gunslingings -gunsmith -gunsmithing -gunsmithings -gunsmiths -gunstock -gunstocks -gunwale -gunwales -guppies -guppy -gurge -gurged -gurges -gurging -gurgle -gurgled -gurgles -gurglet -gurglets -gurgling -gurnard -gurnards -gurnet -gurnets -gurney -gurneys -gurries -gurry -gursh -gurshes -guru -gurus -guruship -guruships -gush -gushed -gusher -gushers -gushes -gushier -gushiest -gushily -gushiness -gushinesses -gushing -gushingly -gushy -gusset -gusseted -gusseting -gussets -gussie -gussied -gussies -gussy -gussying -gust -gustable -gustables -gustation -gustations -gustatorily -gustatory -gusted -gustier -gustiest -gustily -gustiness -gustinesses -gusting -gustless -gusto -gustoes -gusts -gusty -gut -gutbucket -gutbuckets -gutless -gutlessness -gutlessnesses -gutlike -guts -gutsier -gutsiest -gutsily -gutsiness -gutsinesses -gutsy -gutta -guttae -guttate -guttated -guttation -guttations -gutted -gutter -guttered -guttering -gutterings -gutters -guttersnipe -guttersnipes -guttersnipish -guttery -guttier -guttiest -gutting -guttle -guttled -guttler -guttlers -guttles -guttling -guttural -gutturalism -gutturalisms -gutturals -gutty -guv -guvs -guy -guyed -guying -guyline -guylines -guyot -guyots -guys -guzzle -guzzled -guzzler -guzzlers -guzzles -guzzling -gweduc -gweduck -gweducks -gweducs -gybe -gybed -gybes -gybing -gym -gymkhana -gymkhanas -gymnasia -gymnasium -gymnasiums -gymnast -gymnastic -gymnastically -gymnastics -gymnasts -gymnosophist -gymnosophists -gymnosperm -gymnospermies -gymnospermous -gymnosperms -gymnospermy -gyms -gynaecea -gynaeceum -gynaecia -gynaecium -gynaecologies -gynaecology -gynandries -gynandromorph -gynandromorphic -gynandromorphies -gynandromorphism -gynandromorphisms -gynandromorphs -gynandromorphy -gynandrous -gynandry -gynarchies -gynarchy -gynecia -gynecic -gynecium -gynecocracies -gynecocracy -gynecocratic -gynecoid -gynecologic -gynecological -gynecologies -gynecologist -gynecologists -gynecology -gynecomastia -gynecomastias -gyniatries -gyniatry -gynoecia -gynoecium -gynogeneses -gynogenesis -gynogenetic -gynophore -gynophores -gyp -gyplure -gyplures -gypped -gypper -gyppers -gypping -gyps -gypseian -gypseous -gypsied -gypsies -gypsiferous -gypsophila -gypsophilas -gypster -gypsters -gypsum -gypsums -gypsy -gypsydom -gypsydoms -gypsying -gypsyish -gypsyism -gypsyisms -gyral -gyrally -gyrase -gyrases -gyrate -gyrated -gyrates -gyrating -gyration -gyrational -gyrations -gyrator -gyrators -gyratory -gyre -gyred -gyrene -gyrenes -gyres -gyrfalcon -gyrfalcons -gyri -gyring -gyro -gyrocompass -gyrocompasses -gyrofrequencies -gyrofrequency -gyroidal -gyromagnetic -gyron -gyrons -gyroplane -gyroplanes -gyros -gyroscope -gyroscopes -gyroscopic -gyroscopically -gyrose -gyrostabilizer -gyrostabilizers -gyrostat -gyrostats -gyrus -gyve -gyved -gyves -gyving -ha -haaf -haafs -haar -haars -habanera -habaneras -habdalah -habdalahs -haberdasher -haberdasheries -haberdashers -haberdashery -habergeon -habergeons -habile -habiliment -habiliments -habilitate -habilitated -habilitates -habilitating -habilitation -habilitations -habit -habitabilities -habitability -habitable -habitableness -habitablenesses -habitably -habitan -habitans -habitant -habitants -habitat -habitation -habitations -habitats -habited -habiting -habits -habitual -habitually -habitualness -habitualnesses -habituate -habituated -habituates -habituating -habituation -habituations -habitude -habitudes -habitue -habitues -habitus -haboob -haboobs -habu -habus -hacek -haceks -hacendado -hacendados -hachure -hachured -hachures -hachuring -hacienda -haciendado -haciendados -haciendas -hack -hackamore -hackamores -hackberries -hackberry -hackbut -hackbuts -hacked -hackee -hackees -hacker -hackers -hackie -hackies -hacking -hackle -hackled -hackler -hacklers -hackles -hacklier -hackliest -hackling -hackly -hackman -hackmatack -hackmatacks -hackmen -hackney -hackneyed -hackneying -hackneys -hacks -hacksaw -hacksaws -hackwork -hackworks -had -hadal -hadarim -haddest -haddock -haddocks -hade -haded -hades -hading -hadith -hadiths -hadj -hadjee -hadjees -hadjes -hadji -hadjis -hadron -hadronic -hadrons -hadrosaur -hadrosaurs -hadst -hae -haecceities -haecceity -haed -haeing -haem -haemal -haematal -haematic -haematics -haematin -haematins -haematite -haematites -haemic -haemin -haemins -haemoid -haems -haen -haeredes -haeres -haes -haet -haets -haffet -haffets -haffit -haffits -hafis -hafiz -hafnium -hafniums -haft -haftara -haftarah -haftarahs -haftaras -haftarot -haftaroth -hafted -hafter -hafters -hafting -haftorah -haftorahs -haftorot -haftoroth -hafts -hag -hagadic -hagadist -hagadists -hagberries -hagberry -hagborn -hagbush -hagbushes -hagbut -hagbuts -hagdon -hagdons -hagfish -hagfishes -haggada -haggadah -haggadahs -haggadas -haggadic -haggadist -haggadistic -haggadists -haggadot -haggadoth -haggard -haggardly -haggardness -haggardnesses -haggards -hagged -hagging -haggis -haggises -haggish -haggle -haggled -haggler -hagglers -haggles -haggling -hagiographer -hagiographers -hagiographic -hagiographical -hagiographies -hagiography -hagiologic -hagiological -hagiologies -hagiology -hagioscope -hagioscopes -hagioscopic -hagridden -hagride -hagrides -hagriding -hagrode -hags -hah -haha -hahas -hahnium -hahniums -hahs -haik -haika -haiks -haiku -haikus -hail -hailed -hailer -hailers -hailing -hails -hailstone -hailstones -hailstorm -hailstorms -hair -hairball -hairballs -hairband -hairbands -hairbreadth -hairbreadths -hairbrush -hairbrushes -haircap -haircaps -haircloth -haircloths -haircut -haircuts -haircutter -haircutters -haircutting -haircuttings -hairdo -hairdos -hairdresser -hairdressers -hairdressing -hairdressings -haired -hairier -hairiest -hairiness -hairinesses -hairless -hairlessness -hairlessnesses -hairlike -hairline -hairlines -hairlock -hairlocks -hairnet -hairnets -hairpiece -hairpieces -hairpin -hairpins -hairs -hairsbreadth -hairsbreadths -hairsplitter -hairsplitters -hairsplitting -hairsplittings -hairspring -hairsprings -hairstreak -hairstreaks -hairstyle -hairstyles -hairstyling -hairstylings -hairstylist -hairstylists -hairwork -hairworks -hairworm -hairworms -hairy -haj -hajes -haji -hajis -hajj -hajjes -hajji -hajjis -hake -hakeem -hakeems -hakes -hakim -hakims -halacha -halachas -halachot -halachoth -halakah -halakahs -halakha -halakhas -halakhot -halakic -halakist -halakists -halakoth -halala -halalah -halalahs -halalas -halation -halations -halavah -halavahs -halazone -halazones -halberd -halberds -halbert -halberts -halcyon -halcyons -hale -haled -haleness -halenesses -haler -halers -haleru -hales -halest -half -halfback -halfbacks -halfbeak -halfbeaks -halfhearted -halfheartedly -halfheartedness -halfheartednesses -halflife -halflives -halfness -halfnesses -halfpence -halfpennies -halfpenny -halftime -halftimes -halftone -halftones -halfway -halibut -halibuts -halid -halide -halides -halidom -halidome -halidomes -halidoms -halids -haling -halite -halites -halitoses -halitosis -halitus -halituses -hall -hallah -hallahs -hallel -hallels -hallelujah -hallelujahs -halliard -halliards -hallmark -hallmarked -hallmarking -hallmarks -hallo -halloa -halloaed -halloaing -halloas -halloed -halloes -halloing -halloo -hallooed -hallooing -halloos -hallos -hallot -halloth -hallow -hallowed -hallower -hallowers -hallowing -hallows -halls -halluces -hallucinate -hallucinated -hallucinates -hallucinating -hallucination -hallucinations -hallucinator -hallucinators -hallucinatory -hallucinogen -hallucinogenic -hallucinogenics -hallucinogens -hallucinoses -hallucinosis -hallux -hallway -hallways -halm -halma -halmas -halms -halo -halocarbon -halocarbons -halocline -haloclines -haloed -haloes -halogen -halogenate -halogenated -halogenates -halogenating -halogenation -halogenations -halogenous -halogens -halogeton -halogetons -haloid -haloids -haloing -halolike -halomorphic -haloperidol -haloperidols -halophile -halophiles -halophilic -halophyte -halophytes -halophytic -halos -halothane -halothanes -halt -halted -halter -halterbreak -halterbreaking -halterbreaks -halterbroke -halterbroken -haltere -haltered -halteres -haltering -halters -halting -haltingly -haltless -halts -halutz -halutzim -halva -halvah -halvahs -halvas -halve -halved -halvers -halves -halving -halyard -halyards -ham -hamada -hamadas -hamadryad -hamadryades -hamadryads -hamal -hamals -hamantasch -hamantaschen -hamartia -hamartias -hamate -hamates -hamaul -hamauls -hambone -hamboned -hambones -hamboning -hamburg -hamburger -hamburgers -hamburgs -hame -hames -hamlet -hamlets -hammada -hammadas -hammal -hammals -hammed -hammer -hammered -hammerer -hammerers -hammerhead -hammerheads -hammering -hammerless -hammerlock -hammerlocks -hammers -hammertoe -hammertoes -hammier -hammiest -hammily -hamminess -hamminesses -hamming -hammock -hammocks -hammy -hamper -hampered -hamperer -hamperers -hampering -hampers -hams -hamster -hamsters -hamstring -hamstringing -hamstrings -hamstrung -hamular -hamulate -hamuli -hamulose -hamulous -hamulus -hamza -hamzah -hamzahs -hamzas -hanaper -hanapers -hance -hances -hand -handbag -handbags -handball -handballs -handbarrow -handbarrows -handbasket -handbaskets -handbell -handbells -handbill -handbills -handblown -handbook -handbooks -handbreadth -handbreadths -handcar -handcars -handcart -handcarts -handclasp -handclasps -handcraft -handcrafted -handcrafting -handcrafts -handcraftsman -handcraftsmanship -handcraftsmanships -handcraftsmen -handcuff -handcuffed -handcuffing -handcuffs -handed -handedness -handednesses -handfast -handfasted -handfasting -handfastings -handfasts -handful -handfuls -handgrip -handgrips -handgun -handguns -handheld -handhelds -handhold -handholding -handholdings -handholds -handicap -handicapped -handicapper -handicappers -handicapping -handicaps -handicraft -handicrafter -handicrafters -handicrafts -handicraftsman -handicraftsmen -handier -handiest -handily -handiness -handinesses -handing -handiwork -handiworks -handkerchief -handkerchiefs -handkerchieves -handle -handleable -handlebar -handlebars -handled -handleless -handler -handlers -handles -handless -handlike -handling -handlings -handlist -handlists -handloom -handlooms -handmade -handmaid -handmaiden -handmaidens -handmaids -handoff -handoffs -handout -handouts -handover -handovers -handpick -handpicked -handpicking -handpicks -handpress -handpresses -handprint -handprints -handrail -handrailing -handrailings -handrails -hands -handsaw -handsaws -handsbreadth -handsbreadths -handsel -handseled -handseling -handselled -handselling -handsels -handset -handsets -handsewn -handsful -handshake -handshakes -handshaking -handshakings -handsome -handsomely -handsomeness -handsomenesses -handsomer -handsomest -handspike -handspikes -handspring -handsprings -handstand -handstands -handwheel -handwheels -handwork -handworker -handworkers -handworks -handwoven -handwringer -handwringers -handwringing -handwringings -handwrit -handwrite -handwrites -handwriting -handwritings -handwritten -handwrote -handwrought -handy -handyman -handymen -handyperson -handypersons -hang -hangable -hangar -hangared -hangaring -hangars -hangbird -hangbirds -hangdog -hangdogs -hanged -hanger -hangers -hangfire -hangfires -hanging -hangings -hangman -hangmen -hangnail -hangnails -hangnest -hangnests -hangout -hangouts -hangover -hangovers -hangs -hangtag -hangtags -hangul -hangup -hangups -haniwa -hank -hanked -hanker -hankered -hankerer -hankerers -hankering -hankers -hankie -hankies -hanking -hanks -hanky -hansa -hansas -hanse -hansel -hanseled -hanseling -hanselled -hanselling -hansels -hanses -hansom -hansoms -hant -hantavirus -hantaviruses -hanted -hanting -hantle -hantles -hants -hanuman -hanumans -hao -haole -haoles -hap -hapax -hapaxes -haphazard -haphazardly -haphazardness -haphazardnesses -haphazardries -haphazardry -haphazards -haphtara -haphtaras -haphtarot -haphtaroth -hapless -haplessly -haplessness -haplessnesses -haplite -haplites -haploid -haploidies -haploids -haploidy -haplologies -haplology -haplont -haplontic -haplonts -haplopia -haplopias -haploses -haplosis -haplotype -haplotypes -haply -happed -happen -happenchance -happenchances -happened -happening -happenings -happens -happenstance -happenstances -happier -happiest -happily -happiness -happinesses -happing -happy -haps -hapten -haptene -haptenes -haptenic -haptens -haptic -haptical -haptoglobin -haptoglobins -harangue -harangued -haranguer -haranguers -harangues -haranguing -harass -harassed -harasser -harassers -harasses -harassing -harassment -harassments -harbinger -harbingered -harbingering -harbingers -harbor -harborage -harborages -harbored -harborer -harborers -harborful -harborfuls -harboring -harborless -harbormaster -harbormasters -harbors -harborside -harbour -harboured -harbouring -harbours -hard -hardback -hardbacks -hardball -hardballs -hardboard -hardboards -hardboot -hardboots -hardbound -hardcase -hardcore -hardcores -hardcover -hardcovers -hardedge -hardedges -harden -hardened -hardener -hardeners -hardening -hardenings -hardens -harder -hardest -hardfisted -hardhack -hardhacks -hardhanded -hardhandedness -hardhandednesses -hardhat -hardhats -hardhead -hardheaded -hardheadedly -hardheadedness -hardheadednesses -hardheads -hardhearted -hardheartedly -hardheartedness -hardheartednesses -hardier -hardies -hardiest -hardihood -hardihoods -hardily -hardiment -hardiments -hardiness -hardinesses -hardinggrass -hardinggrasses -hardline -hardly -hardmouthed -hardness -hardnesses -hardnose -hardnoses -hardpan -hardpans -hards -hardscrabble -hardset -hardship -hardships -hardstand -hardstanding -hardstandings -hardstands -hardtack -hardtacks -hardtop -hardtops -hardware -hardwares -hardwire -hardwired -hardwires -hardwiring -hardwood -hardwoods -hardworking -hardy -hare -harebell -harebells -harebrained -hared -hareem -hareems -harelike -harelip -harelips -harem -harems -hares -hariana -harianas -haricot -haricots -harijan -harijans -haring -hark -harked -harken -harkened -harkener -harkeners -harkening -harkens -harking -harks -harl -harlequin -harlequinade -harlequinades -harlequins -harlot -harlotries -harlotry -harlots -harls -harm -harmattan -harmattans -harmed -harmer -harmers -harmful -harmfully -harmfulness -harmfulnesses -harmin -harmine -harmines -harming -harmins -harmless -harmlessly -harmlessness -harmlessnesses -harmonic -harmonica -harmonically -harmonicas -harmonicist -harmonicists -harmonics -harmonies -harmonious -harmoniously -harmoniousness -harmoniousnesses -harmonise -harmonised -harmonises -harmonising -harmonium -harmoniums -harmonization -harmonizations -harmonize -harmonized -harmonizer -harmonizers -harmonizes -harmonizing -harmony -harms -harness -harnessed -harnesses -harnessing -harp -harped -harper -harpers -harpies -harpin -harping -harpings -harpins -harpist -harpists -harpoon -harpooned -harpooner -harpooners -harpooning -harpoons -harps -harpsichord -harpsichordist -harpsichordists -harpsichords -harpy -harquebus -harquebuses -harquebusier -harquebusiers -harridan -harridans -harried -harrier -harriers -harries -harrow -harrowed -harrower -harrowers -harrowing -harrows -harrumph -harrumphed -harrumphing -harrumphs -harry -harrying -harsh -harshen -harshened -harshening -harshens -harsher -harshest -harshly -harshness -harshnesses -harslet -harslets -hart -hartal -hartals -hartebeest -hartebeests -harts -hartshorn -hartshorns -harumph -harumphed -harumphing -harumphs -haruspex -haruspication -haruspications -haruspices -harvest -harvestable -harvested -harvester -harvesters -harvesting -harvestman -harvestmen -harvests -harvesttime -harvesttimes -has -hasenpfeffer -hasenpfeffers -hash -hashed -hasheesh -hasheeshes -hashes -hashhead -hashheads -hashing -hashish -hashishes -haslet -haslets -hasp -hasped -hasping -hasps -hassel -hassels -hassium -hassiums -hassle -hassled -hassles -hassling -hassock -hassocks -hast -hastate -haste -hasted -hasteful -hasten -hastened -hastener -hasteners -hastening -hastens -hastes -hastier -hastiest -hastily -hastiness -hastinesses -hasting -hasty -hat -hatable -hatband -hatbands -hatbox -hatboxes -hatch -hatchabilities -hatchability -hatchable -hatchback -hatchbacks -hatcheck -hatched -hatchel -hatcheled -hatcheling -hatchelled -hatchelling -hatchels -hatcher -hatcheries -hatchers -hatchery -hatches -hatchet -hatchets -hatching -hatchings -hatchling -hatchlings -hatchment -hatchments -hatchway -hatchways -hate -hateable -hated -hateful -hatefully -hatefulness -hatefulnesses -hatemonger -hatemongers -hater -haters -hates -hatful -hatfuls -hath -hating -hatless -hatlike -hatmaker -hatmakers -hatpin -hatpins -hatrack -hatracks -hatred -hatreds -hats -hatsful -hatted -hatter -hatteria -hatterias -hatters -hatting -hauberk -hauberks -haugh -haughs -haughtier -haughtiest -haughtily -haughtiness -haughtinesses -haughty -haul -haulage -haulages -hauled -hauler -haulers -haulier -hauliers -hauling -haulm -haulmier -haulmiest -haulms -haulmy -hauls -haulyard -haulyards -haunch -haunched -haunches -haunt -haunted -haunter -haunters -haunting -hauntingly -haunts -hausen -hausens -hausfrau -hausfrauen -hausfraus -haustella -haustellum -haustoria -haustorial -haustorium -haut -hautbois -hautboy -hautboys -haute -hauteur -hauteurs -havarti -havartis -havdalah -havdalahs -have -havelock -havelocks -haven -havened -havening -havens -haver -havered -haverel -haverels -havering -havers -haversack -haversacks -haves -having -havior -haviors -haviour -haviours -havoc -havocked -havocker -havockers -havocking -havocs -haw -hawed -hawfinch -hawfinches -hawing -hawk -hawkbill -hawkbills -hawked -hawker -hawkers -hawkey -hawkeyed -hawkeys -hawkie -hawkies -hawking -hawkings -hawkish -hawkishly -hawkishness -hawkishnesses -hawklike -hawkmoth -hawkmoths -hawknose -hawknoses -hawks -hawksbill -hawksbills -hawkshaw -hawkshaws -hawkweed -hawkweeds -haws -hawse -hawsehole -hawseholes -hawser -hawsers -hawses -hawthorn -hawthorns -hay -haycock -haycocks -hayed -hayer -hayers -hayfield -hayfields -hayfork -hayforks -haying -hayings -haylage -haylages -hayloft -haylofts -haymaker -haymakers -haymow -haymows -hayrack -hayracks -hayrick -hayricks -hayride -hayrides -hays -hayseed -hayseeds -haystack -haystacks -hayward -haywards -haywire -haywires -hazan -hazanim -hazans -hazard -hazarded -hazarding -hazardous -hazardously -hazardousness -hazardousnesses -hazards -haze -hazed -hazel -hazelhen -hazelhens -hazelly -hazelnut -hazelnuts -hazels -hazer -hazers -hazes -hazier -haziest -hazily -haziness -hazinesses -hazing -hazings -hazy -hazzan -hazzanim -hazzans -he -head -headache -headaches -headachier -headachiest -headachy -headband -headbands -headboard -headboards -headcheese -headcheeses -headcount -headcounts -headdress -headdresses -headed -header -headers -headfirst -headfish -headfishes -headforemost -headgate -headgates -headgear -headgears -headhunt -headhunted -headhunter -headhunters -headhunting -headhunts -headier -headiest -headily -headiness -headinesses -heading -headings -headlamp -headlamps -headland -headlands -headless -headlessness -headlessnesses -headlight -headlights -headline -headlined -headliner -headliners -headlines -headlining -headlock -headlocks -headlong -headman -headmaster -headmasters -headmastership -headmasterships -headmen -headmistress -headmistresses -headmost -headnote -headnotes -headphone -headphones -headpiece -headpieces -headpin -headpins -headquarter -headquartered -headquartering -headquarters -headrace -headraces -headrest -headrests -headroom -headrooms -heads -headsail -headsails -headset -headsets -headship -headships -headshrinker -headshrinkers -headsman -headsmen -headspace -headspaces -headspring -headsprings -headstall -headstalls -headstand -headstands -headstay -headstays -headstock -headstocks -headstone -headstones -headstream -headstreams -headstrong -headwaiter -headwaiters -headwater -headwaters -headway -headways -headwind -headwinds -headword -headwords -headwork -headworks -heady -heal -healable -healed -healer -healers -healing -healings -heals -health -healthful -healthfully -healthfulness -healthfulnesses -healthier -healthiest -healthily -healthiness -healthinesses -healths -healthy -heap -heaped -heaping -heaps -hear -hearable -heard -hearer -hearers -hearing -hearings -hearken -hearkened -hearkening -hearkens -hears -hearsay -hearsays -hearse -hearsed -hearses -hearsing -heart -heartache -heartaches -heartbeat -heartbeats -heartbreak -heartbreaker -heartbreakers -heartbreaking -heartbreakingly -heartbreaks -heartbroken -heartburn -heartburning -heartburnings -heartburns -hearted -hearten -heartened -heartening -hearteningly -heartens -heartfelt -hearth -hearths -hearthstone -hearthstones -heartier -hearties -heartiest -heartily -heartiness -heartinesses -hearting -heartland -heartlands -heartless -heartlessly -heartlessness -heartlessnesses -heartrending -heartrendingly -hearts -heartsease -heartseases -heartsick -heartsickness -heartsicknesses -heartsome -heartsomely -heartsore -heartstring -heartstrings -heartthrob -heartthrobs -heartwarming -heartwood -heartwoods -heartworm -heartworms -hearty -heat -heatable -heated -heatedly -heater -heaters -heath -heathen -heathendom -heathendoms -heathenish -heathenishly -heathenism -heathenisms -heathenize -heathenized -heathenizes -heathenizing -heathens -heather -heathers -heathery -heathier -heathiest -heathland -heathlands -heathless -heathlike -heaths -heathy -heating -heatless -heatproof -heats -heatstroke -heatstrokes -heaume -heaumes -heave -heaved -heaven -heavenlier -heavenliest -heavenliness -heavenlinesses -heavenly -heavens -heavenward -heavenwards -heaver -heavers -heaves -heavier -heavies -heaviest -heavily -heaviness -heavinesses -heaving -heavy -heavyhearted -heavyheartedly -heavyheartedness -heavyheartednesses -heavyset -heavyweight -heavyweights -hebdomad -hebdomadal -hebdomadally -hebdomads -hebe -hebephrenia -hebephrenias -hebephrenic -hebephrenics -hebes -hebetate -hebetated -hebetates -hebetating -hebetation -hebetations -hebetic -hebetude -hebetudes -hebetudinous -hebraization -hebraizations -hebraize -hebraized -hebraizes -hebraizing -hecatomb -hecatombs -heck -heckle -heckled -heckler -hecklers -heckles -heckling -hecks -hectare -hectares -hectic -hectical -hectically -hecticly -hectogram -hectograms -hectograph -hectographed -hectographing -hectographs -hectoliter -hectoliters -hectometer -hectometers -hector -hectored -hectoring -hectoringly -hectors -heddle -heddles -heder -heders -hedge -hedged -hedgehog -hedgehogs -hedgehop -hedgehopped -hedgehopper -hedgehoppers -hedgehopping -hedgehops -hedgepig -hedgepigs -hedger -hedgerow -hedgerows -hedgers -hedges -hedgier -hedgiest -hedging -hedgingly -hedgy -hedonic -hedonically -hedonics -hedonism -hedonisms -hedonist -hedonistic -hedonistically -hedonists -heed -heeded -heeder -heeders -heedful -heedfully -heedfulness -heedfulnesses -heeding -heedless -heedlessly -heedlessness -heedlessnesses -heeds -heehaw -heehawed -heehawing -heehaws -heel -heelball -heelballs -heeled -heeler -heelers -heeling -heelings -heelless -heelpiece -heelpieces -heelpost -heelposts -heels -heeltap -heeltaps -heeze -heezed -heezes -heezing -heft -hefted -hefter -hefters -heftier -heftiest -heftily -heftiness -heftinesses -hefting -hefts -hefty -hegari -hegaris -hegemonic -hegemonies -hegemony -hegira -hegiras -hegumen -hegumene -hegumenes -hegumenies -hegumens -hegumeny -heh -hehs -heifer -heifers -heigh -height -heighten -heightened -heightening -heightens -heighth -heighths -heights -heil -heiled -heiling -heils -heimish -heinie -heinies -heinous -heinously -heinousness -heinousnesses -heir -heirdom -heirdoms -heired -heiress -heiresses -heiring -heirless -heirloom -heirlooms -heirs -heirship -heirships -heishi -heist -heisted -heister -heisters -heisting -heists -hejira -hejiras -hektare -hektares -held -heldentenor -heldentenors -heliac -heliacal -heliacally -heliast -heliasts -helical -helically -helices -helicities -helicity -helicoid -helicoidal -helicoids -helicon -helicons -helicopt -helicopted -helicopter -helicoptered -helicoptering -helicopters -helicopting -helicopts -helilift -helilifted -helilifting -helilifts -helio -heliocentric -heliograph -heliographed -heliographic -heliographing -heliographs -heliolatries -heliolatrous -heliolatry -heliometer -heliometers -heliometric -heliometrically -helios -heliostat -heliostats -heliotrope -heliotropes -heliotropic -heliotropism -heliotropisms -heliozoan -heliozoans -helipad -helipads -heliport -heliports -helistop -helistops -helium -heliums -helix -helixes -hell -hellacious -hellaciously -hellbender -hellbenders -hellbent -hellbox -hellboxes -hellbroth -hellbroths -hellcat -hellcats -hellebore -hellebores -helled -hellenization -hellenizations -hellenize -hellenized -hellenizes -hellenizing -heller -helleri -helleries -helleris -hellers -hellery -hellfire -hellfires -hellgrammite -hellgrammites -hellhole -hellholes -hellhound -hellhounds -helling -hellion -hellions -hellish -hellishly -hellishness -hellishnesses -hellkite -hellkites -hello -helloed -helloes -helloing -hellos -hells -helluva -helm -helmed -helmet -helmeted -helmeting -helmetlike -helmets -helming -helminth -helminthiases -helminthiasis -helminthic -helminthologies -helminthology -helminths -helmless -helms -helmsman -helmsmanship -helmsmanships -helmsmen -helo -helos -helot -helotage -helotages -helotism -helotisms -helotries -helotry -helots -help -helpable -helped -helper -helpers -helpful -helpfully -helpfulness -helpfulnesses -helping -helpings -helpless -helplessly -helplessness -helplessnesses -helpmate -helpmates -helpmeet -helpmeets -helps -helve -helved -helves -helving -hem -hemacytometer -hemacytometers -hemagglutinate -hemagglutinated -hemagglutinates -hemagglutinating -hemagglutination -hemagglutinations -hemagglutinin -hemagglutinins -hemagog -hemagogs -hemal -hemangioma -hemangiomas -hemangiomata -hematal -hematein -hemateins -hematic -hematics -hematin -hematine -hematines -hematinic -hematinics -hematins -hematite -hematites -hematitic -hematocrit -hematocrits -hematogenous -hematoid -hematologic -hematological -hematologies -hematologist -hematologists -hematology -hematoma -hematomas -hematomata -hematophagous -hematopoieses -hematopoiesis -hematopoietic -hematoporphyrin -hematoporphyrins -hematoxylin -hematoxylins -hematuria -hematurias -heme -hemelytra -hemelytron -hemerocallis -hemerocallises -hemerythrin -hemerythrins -hemes -hemiacetal -hemiacetals -hemic -hemicellulose -hemicelluloses -hemichordate -hemichordates -hemicycle -hemicycles -hemidemisemiquaver -hemidemisemiquavers -hemihedral -hemihydrate -hemihydrated -hemihydrates -hemimetabolous -hemimorphic -hemimorphism -hemimorphisms -hemin -hemins -hemiola -hemiolas -hemiolia -hemiolias -hemiplegia -hemiplegias -hemiplegic -hemiplegics -hemipter -hemipteran -hemipterans -hemipterous -hemipters -hemisphere -hemispheres -hemispheric -hemispherical -hemistich -hemistichs -hemizygous -hemline -hemlines -hemlock -hemlocks -hemmed -hemmer -hemmers -hemming -hemochromatoses -hemochromatosis -hemocoel -hemocoels -hemocyanin -hemocyanins -hemocyte -hemocytes -hemocytometer -hemocytometers -hemodialyses -hemodialysis -hemodilution -hemodilutions -hemodynamic -hemodynamically -hemodynamics -hemoflagellate -hemoflagellates -hemoglobin -hemoglobinopathies -hemoglobinopathy -hemoglobins -hemoglobinuria -hemoglobinurias -hemoglobinuric -hemoid -hemolymph -hemolymphs -hemolyses -hemolysin -hemolysins -hemolysis -hemolytic -hemolyze -hemolyzed -hemolyzes -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 -hemostat -hemostatic -hemostatics -hemostats -hemp -hempen -hempie -hempier -hempiest -hemplike -hemps -hempseed -hempseeds -hempweed -hempweeds -hempy -hems -hemstitch -hemstitched -hemstitcher -hemstitchers -hemstitches -hemstitching -hen -henbane -henbanes -henbit -henbits -hence -henceforth -henceforward -henchman -henchmen -hencoop -hencoops -hendecasyllabic -hendecasyllabics -hendecasyllable -hendecasyllables -hendiadys -hendiadyses -henequen -henequens -henequin -henequins -henhouse -henhouses -heniquen -heniquens -henlike -henna -hennaed -hennaing -hennas -henneries -hennery -henotheism -henotheisms -henotheist -henotheistic -henotheists -henpeck -henpecked -henpecking -henpecks -henries -henry -henrys -hens -hent -hented -henting -hents -hep -heparin -heparinized -heparins -hepatectomies -hepatectomized -hepatectomy -hepatic -hepatica -hepaticae -hepaticas -hepatics -hepatitides -hepatitis -hepatize -hepatized -hepatizes -hepatizing -hepatocellular -hepatocyte -hepatocytes -hepatoma -hepatomas -hepatomata -hepatomegalies -hepatomegaly -hepatopancreas -hepatopancreases -hepatotoxic -hepatotoxicities -hepatotoxicity -hepcat -hepcats -heptachlor -heptachlors -heptad -heptads -heptagon -heptagonal -heptagons -heptameter -heptameters -heptane -heptanes -heptarch -heptarchies -heptarchs -heptarchy -heptose -heptoses -her -herald -heralded -heraldic -heraldically -heralding -heraldries -heraldry -heralds -herb -herbaceous -herbage -herbages -herbal -herbalist -herbalists -herbals -herbaria -herbarium -herbariums -herbed -herbicidal -herbicidally -herbicide -herbicides -herbier -herbiest -herbivore -herbivores -herbivories -herbivorous -herbivory -herbless -herblike -herbs -herby -herculean -hercules -herculeses -herd -herded -herder -herders -herdic -herdics -herding -herdlike -herdman -herdmen -herds -herdsman -herdsmen -here -hereabout -hereabouts -hereafter -hereafters -hereat -hereaway -hereaways -hereby -heredes -hereditament -hereditaments -hereditarian -hereditarians -hereditarily -hereditary -heredities -heredity -herein -hereinabove -hereinafter -hereinbefore -hereinbelow -hereinto -hereof -hereon -heres -heresiarch -heresiarchs -heresies -heresy -heretic -heretical -heretically -heretics -hereto -heretofore -heretrices -heretrix -heretrixes -hereunder -hereunto -hereupon -herewith -heriot -heriots -heritabilities -heritability -heritable -heritage -heritages -heritor -heritors -heritrices -heritrix -heritrixes -herl -herls -herm -herma -hermae -hermaean -hermai -hermaphrodite -hermaphrodites -hermaphroditic -hermaphroditism -hermaphroditisms -hermatypic -hermeneutic -hermeneutical -hermeneutically -hermeneutics -hermetic -hermetical -hermetically -hermeticism -hermeticisms -hermetism -hermetisms -hermetist -hermetists -hermit -hermitage -hermitages -hermitic -hermitism -hermitisms -hermitries -hermitry -hermits -herms -hern -hernia -herniae -hernial -hernias -herniate -herniated -herniates -herniating -herniation -herniations -herns -hero -heroes -heroic -heroical -heroically -heroicomic -heroicomical -heroics -heroin -heroine -heroines -heroinism -heroinisms -heroins -heroism -heroisms -heroize -heroized -heroizes -heroizing -heron -heronries -heronry -herons -heros -herpes -herpesvirus -herpesviruses -herpetic -herpetological -herpetologies -herpetologist -herpetologists -herpetology -herrenvolk -herrenvolks -herried -herries -herring -herringbone -herringboned -herringbones -herringboning -herrings -herry -herrying -hers -herself -herstories -herstory -hertz -hertzes -hes -hesitance -hesitances -hesitancies -hesitancy -hesitant -hesitantly -hesitate -hesitated -hesitater -hesitaters -hesitates -hesitating -hesitatingly -hesitation -hesitations -hesperidia -hesperidin -hesperidins -hesperidium -hessian -hessians -hessite -hessites -hessonite -hessonites -hest -hests -het -hetaera -hetaerae -hetaeras -hetaeric -hetaira -hetairai -hetairas -hetero -heteroatom -heteroatoms -heteroauxin -heteroauxins -heterocercal -heterochromatic -heterochromatin -heterochromatins -heteroclite -heteroclites -heterocycle -heterocycles -heterocyclic -heterocyclics -heterocyst -heterocystous -heterocysts -heterodox -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 -heterokarya -heterokaryon -heterokaryons -heterokaryoses -heterokaryosis -heterokaryotic -heterologous -heterologously -heterolyses -heterolysis -heterolytic -heteromorphic -heteromorphism -heteromorphisms -heteronomies -heteronomous -heteronomy -heteronym -heteronyms -heterophil -heterophile -heterophonies -heterophony -heterophyllies -heterophyllous -heterophylly -heteroploid -heteroploidies -heteroploids -heteroploidy -heteropterous -heteros -heteroses -heterosexual -heterosexualities -heterosexuality -heterosexually -heterosexuals -heterosis -heterospories -heterosporous -heterospory -heterothallic -heterothallism -heterothallisms -heterotic -heterotopic -heterotroph -heterotrophic -heterotrophically -heterotrophies -heterotrophs -heterotrophy -heterotypic -heterozygoses -heterozygosis -heterozygosities -heterozygosity -heterozygote -heterozygotes -heterozygous -heth -heths -hetman -hetmans -hets -heuch -heuchs -heugh -heughs -heulandite -heulandites -heuristic -heuristically -heuristics -hew -hewable -hewed -hewer -hewers -hewing -hewn -hews -hex -hexachlorethane -hexachlorethanes -hexachloroethane -hexachloroethanes -hexachlorophene -hexachlorophenes -hexachord -hexachords -hexad -hexade -hexadecimal -hexadecimals -hexades -hexadic -hexads -hexagon -hexagonal -hexagonally -hexagons -hexagram -hexagrams -hexahedra -hexahedron -hexahedrons -hexahydrate -hexahydrates -hexameter -hexameters -hexamethonium -hexamethoniums -hexamethylenetetramine -hexamethylenetetramines -hexamine -hexamines -hexane -hexanes -hexapla -hexaplar -hexaplas -hexaploid -hexaploidies -hexaploids -hexaploidy -hexapod -hexapodies -hexapods -hexapody -hexarchies -hexarchy -hexed -hexer -hexerei -hexereis -hexers -hexes -hexing -hexobarbital -hexobarbitals -hexokinase -hexokinases -hexone -hexones -hexosaminidase -hexosaminidases -hexosan -hexosans -hexose -hexoses -hexyl -hexylresorcinol -hexylresorcinols -hexyls -hey -heyday -heydays -heydey -heydeys -hi -hiatal -hiatus -hiatuses -hibachi -hibachis -hibakusha -hibernacula -hibernaculum -hibernal -hibernate -hibernated -hibernates -hibernating -hibernation -hibernations -hibernator -hibernators -hibiscus -hibiscuses -hic -hiccough -hiccoughed -hiccoughing -hiccoughs -hiccup -hiccuped -hiccuping -hiccupped -hiccupping -hiccups -hick -hickey -hickeys -hickies -hickish -hickories -hickory -hicks -hid -hidable -hidalgo -hidalgos -hidden -hiddenite -hiddenites -hiddenly -hiddenness -hiddennesses -hide -hideaway -hideaways -hidebound -hided -hideless -hideosities -hideosity -hideous -hideously -hideousness -hideousnesses -hideout -hideouts -hider -hiders -hides -hiding -hidings -hidroses -hidrosis -hidrotic -hidrotics -hie -hied -hieing -hiemal -hierarch -hierarchal -hierarchic -hierarchical -hierarchically -hierarchies -hierarchize -hierarchized -hierarchizes -hierarchizing -hierarchs -hierarchy -hieratic -hieratically -hierodule -hierodules -hieroglyph -hieroglyphic -hieroglyphical -hieroglyphically -hieroglyphics -hieroglyphs -hierophant -hierophantic -hierophants -hies -hifalutin -higgle -higgled -higgler -higglers -higgles -higgling -high -highball -highballed -highballing -highballs -highbinder -highbinders -highborn -highboy -highboys -highbred -highbrow -highbrowed -highbrowism -highbrowisms -highbrows -highbush -highchair -highchairs -higher -highest -highfalutin -highflier -highfliers -highflyer -highflyers -highhanded -highhandedly -highhandedness -highhandednesses -highjack -highjacked -highjacking -highjacks -highland -highlander -highlanders -highlands -highlife -highlifes -highlight -highlighted -highlighter -highlighters -highlighting -highlights -highly -highness -highnesses -highroad -highroads -highs -highspot -highspots -hight -hightail -hightailed -hightailing -hightails -highted -highth -highths -highting -hights -highway -highwayman -highwaymen -highways -hijack -hijacked -hijacker -hijackers -hijacking -hijackings -hijacks -hijinks -hike -hiked -hiker -hikers -hikes -hiking -hila -hilar -hilarious -hilariously -hilariousness -hilariousnesses -hilarities -hilarity -hilding -hildings -hili -hill -hillbillies -hillbilly -hillcrest -hillcrests -hilled -hiller -hillers -hillier -hilliest -hilling -hillo -hilloa -hilloaed -hilloaing -hilloas -hillock -hillocks -hillocky -hilloed -hilloes -hilloing -hillos -hills -hillside -hillsides -hilltop -hilltops -hilly -hilt -hilted -hilting -hiltless -hilts -hilum -hilus -him -himatia -himation -himations -himself -hin -hind -hindbrain -hindbrains -hinder -hindered -hinderer -hinderers -hindering -hinders -hindgut -hindguts -hindmost -hindquarter -hindquarters -hindrance -hindrances -hinds -hindsight -hindsights -hinge -hinged -hinger -hingers -hinges -hinging -hinnied -hinnies -hinny -hinnying -hins -hint -hinted -hinter -hinterland -hinterlands -hinters -hinting -hints -hip -hipbone -hipbones -hipless -hiplike -hipline -hiplines -hipness -hipnesses -hipparch -hipparchs -hipped -hipper -hippest -hippie -hippiedom -hippiedoms -hippieness -hippienesses -hippier -hippies -hippiest -hippiness -hippinesses -hipping -hippish -hippo -hippocampal -hippocampi -hippocampus -hippocras -hippocrases -hippodrome -hippodromes -hippogriff -hippogriffs -hippopotami -hippopotamus -hippopotamuses -hippos -hippy -hips -hipshot -hipster -hipsterism -hipsterisms -hipsters -hirable -hiragana -hiraganas -hircine -hire -hireable -hired -hireling -hirelings -hirer -hirers -hires -hiring -hirple -hirpled -hirples -hirpling -hirsel -hirseled -hirseling -hirselled -hirselling -hirsels -hirsle -hirsled -hirsles -hirsling -hirsute -hirsuteness -hirsutenesses -hirsutism -hirsutisms -hirudin -hirudins -his -hisn -hispanidad -hispanidads -hispanism -hispanisms -hispid -hiss -hissed -hisself -hisser -hissers -hisses -hissies -hissing -hissings -hissy -hist -histamin -histaminase -histaminases -histamine -histaminergic -histamines -histamins -histed -histidin -histidine -histidines -histidins -histing -histiocyte -histiocytes -histiocytic -histochemical -histochemically -histochemistries -histochemistry -histocompatibilities -histocompatibility -histogen -histogeneses -histogenesis -histogenetic -histogens -histogram -histograms -histoid -histologic -histological -histologically -histologies -histologist -histologists -histology -histolyses -histolysis -histone -histones -histopathologic -histopathological -histopathologically -histopathologies -histopathologist -histopathologists -histopathology -histophysiologic -histophysiological -histophysiologies -histophysiology -histoplasmoses -histoplasmosis -historian -historians -historic -historical -historically -historicalness -historicalnesses -historicism -historicisms -historicist -historicists -historicities -historicity -historicize -historicized -historicizes -historicizing -histories -historiographer -historiographers -historiographic -historiographical -historiographically -historiographies -historiography -history -histrionic -histrionically -histrionics -hists -hit -hitch -hitched -hitcher -hitchers -hitches -hitchhike -hitchhiked -hitchhiker -hitchhikers -hitchhikes -hitchhiking -hitching -hither -hithermost -hitherto -hitherward -hitless -hits -hitter -hitters -hitting -hive -hived -hiveless -hives -hiving -hizzoner -hizzoners -hm -hmm -ho -hoactzin -hoactzines -hoactzins -hoagie -hoagies -hoagy -hoar -hoard -hoarded -hoarder -hoarders -hoarding -hoardings -hoards -hoarfrost -hoarfrosts -hoarier -hoariest -hoarily -hoariness -hoarinesses -hoars -hoarse -hoarsely -hoarsen -hoarsened -hoarseness -hoarsenesses -hoarsening -hoarsens -hoarser -hoarsest -hoary -hoatzin -hoatzines -hoatzins -hoax -hoaxed -hoaxer -hoaxers -hoaxes -hoaxing -hob -hobbed -hobbies -hobbing -hobbit -hobbits -hobble -hobblebush -hobblebushes -hobbled -hobbledehoy -hobbledehoys -hobbler -hobblers -hobbles -hobbling -hobby -hobbyhorse -hobbyhorses -hobbyist -hobbyists -hobgoblin -hobgoblins -hoblike -hobnail -hobnailed -hobnailing -hobnails -hobnob -hobnobbed -hobnobber -hobnobbers -hobnobbing -hobnobs -hobo -hoboed -hoboes -hoboing -hoboism -hoboisms -hobos -hobs -hock -hocked -hocker -hockers -hockey -hockeys -hocking -hocks -hockshop -hockshops -hocus -hocused -hocuses -hocusing -hocussed -hocusses -hocussing -hod -hodad -hodaddies -hodaddy -hodads -hodden -hoddens -hoddin -hoddins -hodgepodge -hodgepodges -hodoscope -hodoscopes -hods -hoe -hoecake -hoecakes -hoed -hoedown -hoedowns -hoeing -hoelike -hoer -hoers -hoes -hog -hogan -hogans -hogback -hogbacks -hogfish -hogfishes -hogg -hogged -hogger -hoggers -hogget -hoggets -hogging -hoggish -hoggishly -hoggishness -hoggishnesses -hoggs -hoglike -hogmanay -hogmanays -hogmane -hogmanes -hogmenay -hogmenays -hognose -hognoses -hognut -hognuts -hogs -hogshead -hogsheads -hogtie -hogtied -hogtieing -hogties -hogtying -hogwash -hogwashes -hogweed -hogweeds -hoick -hoicked -hoicking -hoicks -hoiden -hoidened -hoidening -hoidens -hoise -hoised -hoises -hoising -hoist -hoisted -hoister -hoisters -hoisting -hoists -hoke -hoked -hokes -hokey -hokeyness -hokeynesses -hokeypokey -hokeypokeys -hokier -hokiest -hokily -hokiness -hokinesses -hoking -hokku -hokum -hokums -hokypokies -hokypoky -holandric -holard -holards -hold -holdable -holdall -holdalls -holdback -holdbacks -holden -holder -holders -holdfast -holdfasts -holding -holdings -holdout -holdouts -holdover -holdovers -holds -holdup -holdups -hole -holed -holeless -holes -holey -holibut -holibuts -holiday -holidayed -holidayer -holidayers -holidaying -holidaymaker -holidaymakers -holidays -holier -holies -holiest -holily -holiness -holinesses -holing -holism -holisms -holist -holistic -holistically -holists -holk -holked -holking -holks -holla -hollaed -hollaing -holland -hollandaise -hollandaises -hollands -hollas -holler -hollered -hollering -hollers -hollies -hollo -holloa -holloaed -holloaing -holloas -holloed -holloes -holloing -holloo -hollooed -hollooing -holloos -hollos -hollow -holloware -hollowares -hollowed -hollower -hollowest -hollowing -hollowly -hollowness -hollownesses -hollows -hollowware -hollowwares -holly -hollyhock -hollyhocks -holm -holmic -holmium -holmiums -holms -holoblastic -holocaust -holocausts -holocrine -holoenzyme -holoenzymes -hologamies -hologamy -hologram -holograms -holograph -holographed -holographer -holographers -holographic -holographically -holographies -holographing -holographs -holography -hologynies -hologyny -holohedral -holometabolism -holometabolisms -holometabolous -holophrastic -holophytic -holothurian -holothurians -holotype -holotypes -holotypic -holozoic -holp -holpen -hols -holstein -holsteins -holster -holstered -holstering -holsters -holt -holts -holy -holyday -holydays -holystone -holystoned -holystones -holystoning -holytide -holytides -homage -homaged -homager -homagers -homages -homaging -hombre -hombres -homburg -homburgs -home -homebodies -homebody -homebound -homeboy -homeboys -homebred -homebreds -homebrew -homebrews -homebuilt -homecoming -homecomings -homed -homegirl -homegirls -homegrown -homeland -homelands -homeless -homelessness -homelessnesses -homelier -homeliest -homelike -homeliness -homelinesses -homely -homemade -homemaker -homemakers -homemaking -homemakings -homeobox -homeoboxes -homeomorphic -homeomorphism -homeomorphisms -homeopath -homeopathic -homeopathically -homeopathies -homeopaths -homeopathy -homeostases -homeostasis -homeostatic -homeotherm -homeothermic -homeothermies -homeotherms -homeothermy -homeotic -homeowner -homeowners -homeport -homeported -homeporting -homeports -homer -homered -homering -homeroom -homerooms -homers -homes -homeschool -homeschooled -homeschooler -homeschoolers -homeschooling -homeschoolings -homeschools -homesick -homesickness -homesicknesses -homesite -homesites -homespun -homespuns -homestay -homestays -homestead -homesteaded -homesteader -homesteaders -homesteading -homesteads -homestretch -homestretches -hometown -hometowns -homeward -homewards -homework -homeworks -homey -homeyness -homeynesses -homicidal -homicidally -homicide -homicides -homier -homiest -homiletic -homiletical -homiletics -homilies -homilist -homilists -homily -homines -hominess -hominesses -homing -hominian -hominians -hominid -hominids -hominies -hominine -hominization -hominizations -hominize -hominized -hominizes -hominizing -hominoid -hominoids -hominy -hommock -hommocks -hommos -hommoses -homo -homocercal -homoerotic -homoeroticism -homoeroticisms -homogametic -homogamies -homogamous -homogamy -homogenate -homogenates -homogeneities -homogeneity -homogeneous -homogeneously -homogeneousness -homogeneousnesses -homogenies -homogenisation -homogenisations -homogenise -homogenised -homogenises -homogenising -homogenization -homogenizations -homogenize -homogenized -homogenizer -homogenizers -homogenizes -homogenizing -homogenous -homogeny -homogonies -homogony -homograft -homografts -homograph -homographic -homographs -homoiotherm -homoiothermic -homoiotherms -homoiousian -homoiousians -homolog -homologate -homologated -homologates -homologating -homologation -homologations -homological -homologically -homologies -homologize -homologized -homologizer -homologizers -homologizes -homologizing -homologous -homologs -homologue -homologues -homology -homolyses -homolysis -homolytic -homomorphic -homomorphism -homomorphisms -homonuclear -homonym -homonymic -homonymies -homonymous -homonymously -homonyms -homonymy -homoousian -homoousians -homophile -homophobe -homophobes -homophobia -homophobias -homophobic -homophone -homophones -homophonic -homophonies -homophonous -homophony -homoplasies -homoplastic -homoplasy -homopolar -homopolymer -homopolymeric -homopolymers -homopteran -homopterans -homopterous -homos -homoscedastic -homoscedasticities -homoscedasticity -homosex -homosexes -homosexual -homosexualities -homosexuality -homosexually -homosexuals -homosocial -homosocialities -homosociality -homospories -homosporous -homospory -homothallic -homothallism -homothallisms -homotransplant -homotransplantation -homotransplantations -homotransplants -homozygoses -homozygosis -homozygosities -homozygosity -homozygote -homozygotes -homozygous -homozygously -homunculi -homunculus -homy -hon -honan -honans -honcho -honchoed -honchoing -honchos -honda -hondas -hondle -hondled -hondles -hondling -hone -honed -honer -honers -hones -honest -honester -honestest -honesties -honestly -honesty -honewort -honeworts -honey -honeybee -honeybees -honeybun -honeybunch -honeybunches -honeybuns -honeycomb -honeycombed -honeycombing -honeycombs -honeycreeper -honeycreepers -honeydew -honeydews -honeyeater -honeyeaters -honeyed -honeyful -honeyguide -honeyguides -honeying -honeymoon -honeymooned -honeymooner -honeymooners -honeymooning -honeymoons -honeys -honeysuckle -honeysuckles -hong -hongs -honied -honing -honk -honked -honker -honkers -honkey -honkeys -honkie -honkies -honking -honks -honky -honor -honorabilities -honorability -honorable -honorableness -honorablenesses -honorably -honorand -honorands -honoraria -honoraries -honorarily -honorarium -honorariums -honorary -honored -honoree -honorees -honorer -honorers -honorific -honorifically -honorifics -honoring -honors -honour -honourable -honoured -honourer -honourers -honouring -honours -hons -hooch -hooches -hood -hooded -hoodedness -hoodednesses -hoodie -hoodier -hoodies -hoodiest -hooding -hoodless -hoodlike -hoodlum -hoodlumish -hoodlumism -hoodlumisms -hoodlums -hoodoo -hoodooed -hoodooing -hoodooism -hoodooisms -hoodoos -hoods -hoodwink -hoodwinked -hoodwinker -hoodwinkers -hoodwinking -hoodwinks -hoody -hooey -hooeys -hoof -hoofbeat -hoofbeats -hoofed -hoofer -hoofers -hoofing -hoofless -hooflike -hoofprint -hoofprints -hoofs -hook -hooka -hookah -hookahs -hookas -hooked -hooker -hookers -hookey -hookeys -hookier -hookies -hookiest -hooking -hookless -hooklet -hooklets -hooklike -hooknose -hooknoses -hooks -hookup -hookups -hookworm -hookworms -hooky -hoolie -hooligan -hooliganism -hooliganisms -hooligans -hooly -hoop -hooped -hooper -hoopers -hooping -hoopla -hooplas -hoopless -hooplike -hoopoe -hoopoes -hoopoo -hoopoos -hoops -hoopskirt -hoopskirts -hoopster -hoopsters -hoorah -hoorahed -hoorahing -hoorahs -hooray -hoorayed -hooraying -hoorays -hoosegow -hoosegows -hoosgow -hoosgows -hoot -hootch -hootches -hooted -hootenannies -hootenanny -hooter -hooters -hootier -hootiest -hooting -hoots -hooty -hooved -hooves -hop -hope -hoped -hopeful -hopefully -hopefulness -hopefulnesses -hopefuls -hopeless -hopelessly -hopelessness -hopelessnesses -hoper -hopers -hopes -hophead -hopheads -hoping -hoplite -hoplites -hoplitic -hopped -hopper -hoppers -hoppier -hoppiest -hopping -hoppings -hopple -hoppled -hopples -hoppling -hoppy -hops -hopsack -hopsacking -hopsackings -hopsacks -hopscotch -hopscotched -hopscotches -hopscotching -hoptoad -hoptoads -hora -horah -horahs -horal -horary -horas -horde -horded -hordein -hordeins -hordes -hording -horehound -horehounds -horizon -horizonal -horizonless -horizons -horizontal -horizontalities -horizontality -horizontally -horizontals -hormogonia -hormogonium -hormonal -hormonally -hormone -hormonelike -hormones -hormonic -horn -hornbeam -hornbeams -hornbill -hornbills -hornblende -hornblendes -hornblendic -hornbook -hornbooks -horned -hornedness -hornednesses -hornet -hornets -hornfels -hornier -horniest -hornily -horniness -horninesses -horning -hornist -hornists -hornito -hornitos -hornless -hornlessness -hornlessnesses -hornlike -hornpipe -hornpipes -hornpout -hornpouts -horns -hornstone -hornstones -hornswoggle -hornswoggled -hornswoggles -hornswoggling -horntail -horntails -hornworm -hornworms -hornwort -hornworts -horny -horologe -horologes -horological -horologies -horologist -horologists -horology -horoscope -horoscopes -horrendous -horrendously -horrent -horrible -horribleness -horriblenesses -horribles -horribly -horrid -horridly -horridness -horridnesses -horrific -horrifically -horrified -horrifies -horrify -horrifying -horrifyingly -horror -horrors -horse -horseback -horsebacks -horsebean -horsebeans -horsecar -horsecars -horsed -horsefeathers -horseflesh -horsefleshes -horseflies -horsefly -horsehair -horsehairs -horsehide -horsehides -horselaugh -horselaughs -horseless -horselike -horseman -horsemanship -horsemanships -horsemen -horsemint -horsemints -horseplay -horseplayer -horseplayers -horseplays -horsepower -horsepowers -horsepox -horsepoxes -horserace -horseraces -horseradish -horseradishes -horses -horseshit -horseshits -horseshod -horseshoe -horseshoed -horseshoeing -horseshoer -horseshoers -horseshoes -horsetail -horsetails -horseweed -horseweeds -horsewhip -horsewhipped -horsewhipper -horsewhippers -horsewhipping -horsewhips -horsewoman -horsewomen -horsey -horsier -horsiest -horsily -horsiness -horsinesses -horsing -horst -horste -horstes -horsts -horsy -hortative -hortatively -hortatory -horticultural -horticulturally -horticulture -horticultures -horticulturist -horticulturists -hosanna -hosannaed -hosannah -hosannahs -hosannaing -hosannas -hose -hosed -hosel -hosels -hosen -hosepipe -hosepipes -hoses -hosier -hosieries -hosiers -hosiery -hosing -hospice -hospices -hospitable -hospitably -hospital -hospitalise -hospitalised -hospitalises -hospitalising -hospitalities -hospitality -hospitalization -hospitalizations -hospitalize -hospitalized -hospitalizes -hospitalizing -hospitals -hospitia -hospitium -hospodar -hospodars -host -hosta -hostage -hostages -hostas -hosted -hostel -hosteled -hosteler -hostelers -hosteling -hostelled -hosteller -hostellers -hostelling -hostelries -hostelry -hostels -hostess -hostessed -hostesses -hostessing -hostile -hostilely -hostiles -hostilities -hostility -hosting -hostler -hostlers -hostly -hosts -hot -hotbed -hotbeds -hotblood -hotbloods -hotbox -hotboxes -hotcake -hotcakes -hotch -hotched -hotches -hotching -hotchpot -hotchpotch -hotchpotches -hotchpots -hotdog -hotdogged -hotdogger -hotdoggers -hotdogging -hotdogs -hotel -hoteldom -hoteldoms -hotelier -hoteliers -hotelman -hotelmen -hotels -hotfoot -hotfooted -hotfooting -hotfoots -hothead -hotheaded -hotheadedly -hotheadedness -hotheadednesses -hotheads -hothouse -hothouses -hotline -hotlines -hotly -hotness -hotnesses -hotpress -hotpressed -hotpresses -hotpressing -hotrod -hotrods -hots -hotshot -hotshots -hotspot -hotspots -hotspur -hotspurs -hotted -hotter -hottest -hotting -hottish -houdah -houdahs -hound -hounded -hounder -hounders -hounding -hounds -hour -hourglass -hourglasses -houri -houris -hourly -hours -house -houseboat -houseboater -houseboaters -houseboats -housebound -houseboy -houseboys -housebreak -housebreaker -housebreakers -housebreaking -housebreakings -housebreaks -housebroke -housebroken -housecarl -housecarls -houseclean -housecleaned -housecleaning -housecleanings -housecleans -housecoat -housecoats -housed -housedress -housedresses -housefather -housefathers -houseflies -housefly -housefront -housefronts -houseful -housefuls -houseguest -houseguests -household -householder -householders -households -househusband -househusbands -housekeep -housekeeper -housekeepers -housekeeping -housekeepings -housekeeps -housekept -housel -houseled -houseleek -houseleeks -houseless -houselessness -houselessnesses -houselights -houseling -houselled -houselling -housels -housemaid -housemaids -houseman -housemaster -housemasters -housemate -housemates -housemen -housemother -housemothers -housepainter -housepainters -houseparent -houseparents -houseperson -housepersons -houseplant -houseplants -houser -houseroom -houserooms -housers -houses -housesat -housesit -housesits -housesitting -housetop -housetops -housetrain -housetrained -housetraining -housetrains -housewares -housewarming -housewarmings -housewife -housewifeliness -housewifelinesses -housewifely -housewiferies -housewifery -housewifey -housewives -housework -houseworks -housing -housings -hove -hovel -hoveled -hoveling -hovelled -hovelling -hovels -hover -hovercraft -hovercrafts -hovered -hoverer -hoverers -hovering -hovers -how -howbeit -howdah -howdahs -howdie -howdied -howdies -howdy -howdying -howe -howes -however -howf -howff -howffs -howfs -howitzer -howitzers -howk -howked -howking -howks -howl -howled -howler -howlers -howlet -howlets -howling -howlingly -howls -hows -howsoever -hoy -hoya -hoyas -hoyden -hoydened -hoydening -hoydenish -hoydens -hoyle -hoyles -hoys -huarache -huaraches -huaracho -huarachos -hub -hubbies -hubbly -hubbub -hubbubs -hubby -hubcap -hubcaps -hubris -hubrises -hubristic -hubs -huck -huckaback -huckabacks -huckle -huckleberries -huckleberry -huckles -hucks -huckster -huckstered -huckstering -hucksterism -hucksterisms -hucksters -huddle -huddled -huddler -huddlers -huddles -huddling -hue -hued -hueless -hues -huff -huffed -huffier -huffiest -huffily -huffiness -huffinesses -huffing -huffish -huffs -huffy -hug -huge -hugely -hugeness -hugenesses -hugeous -hugeously -huger -hugest -huggable -hugged -hugger -huggers -hugging -hugs -huh -huic -huipil -huipiles -huipils -huisache -huisaches -hula -hulas -hulk -hulked -hulkier -hulkiest -hulking -hulks -hulky -hull -hullabaloo -hullabaloos -hulled -huller -hullers -hulling -hullo -hulloa -hulloaed -hulloaing -hulloas -hulloed -hulloes -hulloing -hullos -hulls -hum -human -humane -humanely -humaneness -humanenesses -humaner -humanest -humanise -humanised -humanises -humanising -humanism -humanisms -humanist -humanistic -humanistically -humanists -humanitarian -humanitarianism -humanitarianisms -humanitarians -humanities -humanity -humanization -humanizations -humanize -humanized -humanizer -humanizers -humanizes -humanizing -humankind -humanlike -humanly -humanness -humannesses -humanoid -humanoids -humans -humate -humates -humble -humbled -humbleness -humblenesses -humbler -humblers -humbles -humblest -humbling -humblingly -humbly -humbug -humbugged -humbuggeries -humbuggery -humbugging -humbugs -humdinger -humdingers -humdrum -humdrums -humectant -humectants -humeral -humerals -humeri -humerus -humic -humid -humidification -humidifications -humidified -humidifier -humidifiers -humidifies -humidify -humidifying -humidistat -humidistats -humidities -humidity -humidly -humidor -humidors -humification -humifications -humified -humiliate -humiliated -humiliates -humiliating -humiliatingly -humiliation -humiliations -humilities -humility -hummable -hummed -hummer -hummers -humming -hummingbird -hummingbirds -hummock -hummocked -hummocking -hummocks -hummocky -hummus -hummuses -humongous -humor -humoral -humored -humoresque -humoresques -humorful -humoring -humorist -humoristic -humorists -humorless -humorlessly -humorlessness -humorlessnesses -humorous -humorously -humorousness -humorousnesses -humors -humour -humoured -humouring -humours -hump -humpback -humpbacked -humpbacks -humped -humph -humphed -humphing -humphs -humpier -humpiest -humping -humpless -humps -humpy -hums -humungous -humus -humuses -humvee -humvees -hun -hunch -hunchback -hunchbacked -hunchbacks -hunched -hunches -hunching -hundred -hundredfold -hundreds -hundredth -hundredths -hundredweight -hundredweights -hung -hunger -hungered -hungering -hungers -hungover -hungrier -hungriest -hungrily -hungriness -hungrinesses -hungry -hunh -hunk -hunker -hunkered -hunkering -hunkers -hunkier -hunkies -hunkiest -hunks -hunky -hunnish -huns -hunt -huntable -hunted -huntedly -hunter -hunters -hunting -huntings -huntress -huntresses -hunts -huntsman -huntsmen -hup -hurdies -hurdle -hurdled -hurdler -hurdlers -hurdles -hurdling -hurds -hurl -hurled -hurler -hurlers -hurley -hurleys -hurlies -hurling -hurlings -hurls -hurly -hurrah -hurrahed -hurrahing -hurrahs -hurray -hurrayed -hurraying -hurrays -hurricane -hurricanes -hurried -hurriedly -hurriedness -hurriednesses -hurrier -hurriers -hurries -hurry -hurrying -hurst -hursts -hurt -hurter -hurters -hurtful -hurtfully -hurtfulness -hurtfulnesses -hurting -hurtle -hurtled -hurtles -hurtless -hurtling -hurts -husband -husbanded -husbander -husbanders -husbanding -husbandly -husbandman -husbandmen -husbandries -husbandry -husbands -hush -hushaby -hushed -hushedly -hushes -hushful -hushing -husk -husked -husker -huskers -huskie -huskier -huskies -huskiest -huskily -huskiness -huskinesses -husking -huskings -husklike -husks -husky -hussar -hussars -hussies -hussy -hustings -hustle -hustled -hustler -hustlers -hustles -hustling -huswife -huswifes -huswives -hut -hutch -hutched -hutches -hutching -hutlike -hutment -hutments -huts -hutted -hutting -hutzpa -hutzpah -hutzpahs -hutzpas -huzza -huzzaed -huzzah -huzzahed -huzzahing -huzzahs -huzzaing -huzzas -hwan -hyacinth -hyacinthine -hyacinths -hyaena -hyaenas -hyaenic -hyalin -hyaline -hyalines -hyalins -hyalite -hyalites -hyalogen -hyalogens -hyaloid -hyaloids -hyaloplasm -hyaloplasms -hyaluronidase -hyaluronidases -hybrid -hybridism -hybridisms -hybridities -hybridity -hybridization -hybridizations -hybridize -hybridized -hybridizer -hybridizers -hybridizes -hybridizing -hybridoma -hybridomas -hybrids -hybris -hybrises -hydathode -hydathodes -hydatid -hydatids -hydra -hydracid -hydracids -hydrae -hydragog -hydragogs -hydralazine -hydralazines -hydrangea -hydrangeas -hydrant -hydranth -hydranths -hydrants -hydras -hydrase -hydrases -hydrate -hydrated -hydrates -hydrating -hydration -hydrations -hydrator -hydrators -hydraulic -hydraulically -hydraulics -hydrazide -hydrazides -hydrazine -hydrazines -hydria -hydriae -hydric -hydrid -hydride -hydrides -hydrids -hydro -hydrobiological -hydrobiologies -hydrobiologist -hydrobiologists -hydrobiology -hydrocarbon -hydrocarbons -hydrocele -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 -hydrofoil -hydrofoils -hydrogel -hydrogels -hydrogen -hydrogenase -hydrogenases -hydrogenate -hydrogenated -hydrogenates -hydrogenating -hydrogenation -hydrogenations -hydrogenous -hydrogens -hydrographer -hydrographers -hydrographic -hydrographies -hydrography -hydroid -hydroids -hydrokinetic -hydrolase -hydrolases -hydrologic -hydrological -hydrologically -hydrologies -hydrologist -hydrologists -hydrology -hydrolysate -hydrolysates -hydrolyses -hydrolysis -hydrolytic -hydrolytically -hydrolyzable -hydrolyzate -hydrolyzates -hydrolyze -hydrolyzed -hydrolyzes -hydrolyzing -hydromagnetic -hydromancies -hydromancy -hydromechanical -hydromechanics -hydromedusa -hydromedusae -hydromel -hydromels -hydrometallurgical -hydrometallurgies -hydrometallurgist -hydrometallurgists -hydrometallurgy -hydrometeor -hydrometeorological -hydrometeorologies -hydrometeorologist -hydrometeorologists -hydrometeorology -hydrometeors -hydrometer -hydrometers -hydrometric -hydromorphic -hydronic -hydronically -hydronium -hydroniums -hydropathic -hydropathies -hydropathy -hydroperoxide -hydroperoxides -hydrophane -hydrophanes -hydrophilic -hydrophilicities -hydrophilicity -hydrophobia -hydrophobias -hydrophobic -hydrophobicities -hydrophobicity -hydrophone -hydrophones -hydrophyte -hydrophytes -hydrophytic -hydropic -hydroplane -hydroplaned -hydroplanes -hydroplaning -hydroponic -hydroponically -hydroponics -hydropower -hydropowers -hydrops -hydropses -hydropsies -hydropsy -hydroquinone -hydroquinones -hydros -hydrosere -hydroseres -hydroski -hydroskis -hydrosol -hydrosolic -hydrosols -hydrospace -hydrospaces -hydrosphere -hydrospheres -hydrospheric -hydrostatic -hydrostatically -hydrostatics -hydrotherapies -hydrotherapy -hydrothermal -hydrothermally -hydrothoraces -hydrothorax -hydrothoraxes -hydrotropic -hydrotropism -hydrotropisms -hydrous -hydroxide -hydroxides -hydroxy -hydroxyapatite -hydroxyapatites -hydroxyl -hydroxylamine -hydroxylamines -hydroxylapatite -hydroxylapatites -hydroxylase -hydroxylases -hydroxylate -hydroxylated -hydroxylates -hydroxylating -hydroxylation -hydroxylations -hydroxylic -hydroxyls -hydroxyproline -hydroxyprolines -hydroxytryptamine -hydroxytryptamines -hydroxyurea -hydroxyureas -hydroxyzine -hydroxyzines -hydrozoan -hydrozoans -hyena -hyenas -hyenic -hyenine -hyenoid -hyetal -hygeist -hygeists -hygieist -hygieists -hygiene -hygienes -hygienic -hygienically -hygienics -hygienist -hygienists -hygrograph -hygrographs -hygrometer -hygrometers -hygrometric -hygrophilous -hygrophyte -hygrophytes -hygrophytic -hygroscopic -hygroscopicities -hygroscopicity -hying -hyla -hylas -hylozoic -hylozoism -hylozoisms -hylozoist -hylozoistic -hylozoists -hymen -hymenal -hymeneal -hymeneally -hymeneals -hymenia -hymenial -hymenium -hymeniums -hymenoptera -hymenopteran -hymenopterans -hymenopteron -hymenopterons -hymenopterous -hymens -hymn -hymnal -hymnals -hymnaries -hymnary -hymnbook -hymnbooks -hymned -hymning -hymnist -hymnists -hymnless -hymnlike -hymnodies -hymnody -hymnologies -hymnology -hymns -hyoid -hyoidal -hyoidean -hyoids -hyoscine -hyoscines -hyoscyamine -hyoscyamines -hyp -hypabyssal -hypabyssally -hypaethral -hypallage -hypallages -hypanthia -hypanthium -hype -hyped -hyper -hyperacid -hyperacidities -hyperacidity -hyperactive -hyperactives -hyperactivities -hyperactivity -hyperacuities -hyperacuity -hyperacute -hyperaesthesia -hyperaesthesias -hyperaesthetic -hyperaggressive -hyperalert -hyperalimentation -hyperalimentations -hyperarid -hyperarousal -hyperarousals -hyperaware -hyperawareness -hyperawarenesses -hyperbaric -hyperbarically -hyperbola -hyperbolae -hyperbolas -hyperbole -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 -hypercube -hypercubes -hyperdevelopment -hyperdevelopments -hyperefficient -hyperemia -hyperemias -hyperemic -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 -hyperfine -hyperfunction -hyperfunctional -hyperfunctioning -hyperfunctions -hypergamies -hypergamy -hyperglycemia -hyperglycemias -hyperglycemic -hypergol -hypergolic -hypergolically -hypergols -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 -hyperlink -hyperlinked -hyperlinking -hyperlinks -hyperlipemia -hyperlipemias -hyperlipemic -hyperlipidemia -hyperlipidemias -hypermania -hypermanias -hypermanic -hypermarket -hypermarkets -hypermasculine -hypermedia -hypermedias -hypermetabolic -hypermetabolism -hypermetabolisms -hypermeter -hypermeters -hypermetric -hypermetrical -hypermetropia -hypermetropias -hypermetropic -hypermnesia -hypermnesias -hypermnesic -hypermobilities -hypermobility -hypermodern -hypermodernist -hypermodernists -hypermutabilities -hypermutability -hypermutable -hypernationalistic -hyperon -hyperons -hyperope -hyperopes -hyperopia -hyperopias -hyperopic -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 -hyperpnea -hyperpneas -hyperpneic -hyperpolarization -hyperpolarizations -hyperpolarize -hyperpolarized -hyperpolarizes -hyperpolarizing -hyperproducer -hyperproducers -hyperproduction -hyperproductions -hyperpure -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 -hypertext -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 -hypes -hypha -hyphae -hyphal -hyphemia -hyphemias -hyphen -hyphenate -hyphenated -hyphenates -hyphenating -hyphenation -hyphenations -hyphened -hyphening -hyphenless -hyphens -hyping -hypnagogic -hypnic -hypnogogic -hypnoid -hypnoidal -hypnopompic -hypnoses -hypnosis -hypnotherapies -hypnotherapist -hypnotherapists -hypnotherapy -hypnotic -hypnotically -hypnotics -hypnotism -hypnotisms -hypnotist -hypnotists -hypnotizabilities -hypnotizability -hypnotizable -hypnotize -hypnotized -hypnotizes -hypnotizing -hypo -hypoacid -hypoallergenic -hypoblast -hypoblasts -hypocalcemia -hypocalcemias -hypocalcemic -hypocaust -hypocausts -hypocenter -hypocenters -hypocentral -hypochlorite -hypochlorites -hypochondria -hypochondriac -hypochondriacal -hypochondriacally -hypochondriacs -hypochondrias -hypochondriases -hypochondriasis -hypocorism -hypocorisms -hypocoristic -hypocoristical -hypocoristically -hypocotyl -hypocotyls -hypocrisies -hypocrisy -hypocrite -hypocrites -hypocritical -hypocritically -hypocycloid -hypocycloids -hypoderm -hypodermal -hypodermic -hypodermically -hypodermics -hypodermis -hypodermises -hypoderms -hypodiploid -hypodiploidies -hypodiploidy -hypoed -hypoeutectoid -hypogastric -hypogea -hypogeal -hypogean -hypogene -hypogeous -hypogeum -hypoglossal -hypoglossals -hypoglycemia -hypoglycemias -hypoglycemic -hypoglycemics -hypogynies -hypogynous -hypogyny -hypoing -hypokalemia -hypokalemias -hypokalemic -hypolimnia -hypolimnion -hypolimnions -hypomagnesemia -hypomagnesemias -hypomania -hypomanias -hypomanic -hypomorph -hypomorphic -hypomorphs -hyponea -hyponeas -hyponoia -hyponoias -hypoparathyroidism -hypoparathyroidisms -hypopharynges -hypopharynx -hypopharynxes -hypophyseal -hypophysectomies -hypophysectomize -hypophysectomized -hypophysectomizes -hypophysectomizing -hypophysectomy -hypophyses -hypophysial -hypophysis -hypopituitarism -hypopituitarisms -hypopituitary -hypoplasia -hypoplasias -hypoplastic -hypoploid -hypoploids -hypopnea -hypopneas -hypopyon -hypopyons -hypos -hyposensitization -hyposensitizations -hyposensitize -hyposensitized -hyposensitizes -hyposensitizing -hypospadias -hypospadiases -hypostases -hypostasis -hypostatic -hypostatically -hypostatization -hypostatizations -hypostatize -hypostatized -hypostatizes -hypostatizing -hypostome -hypostomes -hypostyle -hypostyles -hypotactic -hypotaxes -hypotaxis -hypotension -hypotensions -hypotensive -hypotensives -hypotenuse -hypotenuses -hypothalami -hypothalamic -hypothalamus -hypothec -hypothecate -hypothecated -hypothecates -hypothecating -hypothecation -hypothecations -hypothecator -hypothecators -hypothecs -hypothenuse -hypothenuses -hypothermal -hypothermia -hypothermias -hypothermic -hypotheses -hypothesis -hypothesize -hypothesized -hypothesizes -hypothesizing -hypothetical -hypothetically -hypothyroid -hypothyroidism -hypothyroidisms -hypotonia -hypotonias -hypotonic -hypotonicities -hypotonicity -hypoxanthine -hypoxanthines -hypoxemia -hypoxemias -hypoxemic -hypoxia -hypoxias -hypoxic -hyps -hypsometer -hypsometers -hypsometric -hyraces -hyracoid -hyracoids -hyrax -hyraxes -hyson -hysons -hyssop -hyssops -hysterectomies -hysterectomized -hysterectomy -hystereses -hysteresis -hysteretic -hysteria -hysterias -hysteric -hysterical -hysterically -hysterics -hysteroid -hysterotomies -hysterotomy -hyte -iamb -iambi -iambic -iambics -iambs -iambus -iambuses -iatric -iatrical -iatrogenic -iatrogenically -ibex -ibexes -ibices -ibidem -ibis -ibises -ibogaine -ibogaines -ibuprofen -ibuprofens -ice -iceberg -icebergs -iceblink -iceblinks -iceboat -iceboater -iceboaters -iceboating -iceboatings -iceboats -icebound -icebox -iceboxes -icebreaker -icebreakers -icecap -icecaps -iced -icefall -icefalls -icehouse -icehouses -icekhana -icekhanas -iceless -icelike -icemaker -icemakers -iceman -icemen -ices -ich -ichneumon -ichneumons -ichnite -ichnites -ichor -ichorous -ichors -ichs -ichthyic -ichthyofauna -ichthyofaunae -ichthyofaunal -ichthyofaunas -ichthyological -ichthyologically -ichthyologies -ichthyologist -ichthyologists -ichthyology -ichthyophagous -ichthyosaur -ichthyosaurian -ichthyosaurians -ichthyosaurs -icicle -icicled -icicles -icier -iciest -icily -iciness -icinesses -icing -icings -ick -icker -ickers -ickier -ickiest -ickily -ickiness -ickinesses -icky -icon -icones -iconic -iconical -iconically -iconicities -iconicity -iconoclasm -iconoclasms -iconoclast -iconoclastic -iconoclastically -iconoclasts -iconographer -iconographers -iconographic -iconographical -iconographically -iconographies -iconography -iconolatries -iconolatry -iconological -iconologies -iconology -iconoscope -iconoscopes -iconostases -iconostasis -icons -icosahedra -icosahedral -icosahedron -icosahedrons -icteric -icterics -icterus -icteruses -ictic -ictus -ictuses -icy -id -idea -ideal -idealess -idealise -idealised -idealises -idealising -idealism -idealisms -idealist -idealistic -idealistically -idealists -idealities -ideality -idealization -idealizations -idealize -idealized -idealizer -idealizers -idealizes -idealizing -idealless -ideally -idealogies -idealogue -idealogues -idealogy -ideals -ideas -ideate -ideated -ideates -ideating -ideation -ideational -ideationally -ideations -ideative -idem -idempotent -idempotents -identic -identical -identically -identicalness -identicalnesses -identifiable -identifiably -identification -identifications -identified -identifier -identifiers -identifies -identify -identifying -identities -identity -ideogram -ideogramic -ideogrammatic -ideogrammic -ideograms -ideograph -ideographic -ideographically -ideographies -ideographs -ideography -ideologic -ideological -ideologically -ideologies -ideologist -ideologists -ideologize -ideologized -ideologizes -ideologizing -ideologue -ideologues -ideology -ideomotor -ides -idioblast -idioblastic -idioblasts -idiocies -idiocy -idiographic -idiolect -idiolectal -idiolects -idiom -idiomatic -idiomatically -idiomaticness -idiomaticnesses -idiomorphic -idioms -idiopathic -idiopathically -idiosyncrasies -idiosyncrasy -idiosyncratic -idiosyncratically -idiot -idiotic -idiotical -idiotically -idiotism -idiotisms -idiots -idle -idled -idleness -idlenesses -idler -idlers -idles -idlesse -idlesses -idlest -idling -idly -idocrase -idocrases -idol -idolater -idolaters -idolator -idolators -idolatries -idolatrous -idolatrously -idolatrousness -idolatrousnesses -idolatry -idolise -idolised -idoliser -idolisers -idolises -idolising -idolism -idolisms -idolization -idolizations -idolize -idolized -idolizer -idolizers -idolizes -idolizing -idols -idoneities -idoneity -idoneous -ids -idyl -idylist -idylists -idyll -idyllic -idyllically -idyllist -idyllists -idylls -idyls -if -iff -iffier -iffiest -iffiness -iffinesses -iffy -ifs -igloo -igloos -iglu -iglus -ignatia -ignatias -igneous -ignescent -ignified -ignifies -ignify -ignifying -ignimbrite -ignimbrites -ignitabilities -ignitability -ignitable -ignite -ignited -igniter -igniters -ignites -ignitible -igniting -ignition -ignitions -ignitor -ignitors -ignitron -ignitrons -ignobilities -ignobility -ignoble -ignobleness -ignoblenesses -ignobly -ignominies -ignominious -ignominiously -ignominiousness -ignominiousnesses -ignominy -ignorable -ignorami -ignoramus -ignoramuses -ignorance -ignorances -ignorant -ignorantly -ignorantness -ignorantnesses -ignore -ignored -ignorer -ignorers -ignores -ignoring -iguana -iguanas -iguanian -iguanians -iguanodon -iguanodons -ihram -ihrams -ikat -ikats -ikebana -ikebanas -ikon -ikons -ilea -ileac -ileal -ileitides -ileitis -ileum -ileus -ileuses -ilex -ilexes -ilia -iliac -iliad -iliads -ilial -ilium -ilk -ilka -ilks -ill -illation -illations -illative -illatively -illatives -illaudable -illaudably -illegal -illegalities -illegality -illegalization -illegalizations -illegalize -illegalized -illegalizes -illegalizing -illegally -illegals -illegibilities -illegibility -illegible -illegibly -illegitimacies -illegitimacy -illegitimate -illegitimately -iller -illest -illiberal -illiberalism -illiberalisms -illiberalities -illiberality -illiberally -illiberalness -illiberalnesses -illicit -illicitly -illicitness -illicitnesses -illimitabilities -illimitability -illimitable -illimitableness -illimitablenesses -illimitably -illinium -illiniums -illiquid -illiquidities -illiquidity -illite -illiteracies -illiteracy -illiterate -illiterately -illiterateness -illiteratenesses -illiterates -illites -illitic -illness -illnesses -illocutionary -illogic -illogical -illogicalities -illogicality -illogically -illogicalness -illogicalnesses -illogics -ills -illume -illumed -illumes -illuminable -illuminance -illuminances -illuminant -illuminants -illuminate -illuminated -illuminates -illuminati -illuminating -illuminatingly -illumination -illuminations -illuminative -illuminator -illuminators -illumine -illumined -illumines -illuming -illumining -illuminism -illuminisms -illuminist -illuminists -illusion -illusional -illusionary -illusionism -illusionisms -illusionist -illusionistic -illusionistically -illusionists -illusions -illusive -illusively -illusiveness -illusivenesses -illusorily -illusoriness -illusorinesses -illusory -illustrate -illustrated -illustrates -illustrating -illustration -illustrational -illustrations -illustrative -illustratively -illustrator -illustrators -illustrious -illustriously -illustriousness -illustriousnesses -illuvia -illuvial -illuviated -illuviation -illuviations -illuvium -illuviums -illy -ilmenite -ilmenites -image -imaged -imager -imageries -imagers -imagery -images -imaginable -imaginableness -imaginablenesses -imaginably -imaginal -imaginaries -imaginarily -imaginariness -imaginarinesses -imaginary -imagination -imaginations -imaginative -imaginatively -imaginativeness -imaginativenesses -imagine -imagined -imaginer -imaginers -imagines -imaging -imagings -imagining -imagism -imagisms -imagist -imagistic -imagistically -imagists -imago -imagoes -imagos -imam -imamate -imamates -imams -imaret -imarets -imaum -imaums -imbalance -imbalanced -imbalances -imbalm -imbalmed -imbalmer -imbalmers -imbalming -imbalms -imbark -imbarked -imbarking -imbarks -imbecile -imbeciles -imbecilic -imbecilities -imbecility -imbed -imbedded -imbedding -imbeds -imbibe -imbibed -imbiber -imbibers -imbibes -imbibing -imbibition -imbibitional -imbibitions -imbitter -imbittered -imbittering -imbitters -imblaze -imblazed -imblazes -imblazing -imbodied -imbodies -imbody -imbodying -imbolden -imboldened -imboldening -imboldens -imbosom -imbosomed -imbosoming -imbosoms -imbower -imbowered -imbowering -imbowers -imbricate -imbricated -imbricates -imbricating -imbrication -imbrications -imbroglio -imbroglios -imbrown -imbrowned -imbrowning -imbrowns -imbrue -imbrued -imbrues -imbruing -imbrute -imbruted -imbrutes -imbruting -imbue -imbued -imbues -imbuing -imid -imidazole -imidazoles -imide -imides -imidic -imido -imids -imine -imines -imino -imipramine -imipramines -imitable -imitate -imitated -imitates -imitating -imitation -imitations -imitative -imitatively -imitativeness -imitativenesses -imitator -imitators -immaculacies -immaculacy -immaculate -immaculately -immane -immanence -immanences -immanencies -immanency -immanent -immanentism -immanentisms -immanentist -immanentistic -immanentists -immanently -immaterial -immaterialism -immaterialisms -immaterialist -immaterialists -immaterialities -immateriality -immaterialize -immaterialized -immaterializes -immaterializing -immature -immaturely -immatures -immaturities -immaturity -immeasurable -immeasurableness -immeasurablenesses -immeasurably -immediacies -immediacy -immediate -immediately -immediateness -immediatenesses -immedicable -immedicably -immemorial -immemorially -immense -immensely -immenseness -immensenesses -immenser -immensest -immensities -immensity -immensurable -immerge -immerged -immerges -immerging -immerse -immersed -immerses -immersible -immersing -immersion -immersions -immesh -immeshed -immeshes -immeshing -immethodical -immethodically -immies -immigrant -immigrants -immigrate -immigrated -immigrates -immigrating -immigration -immigrational -immigrations -imminence -imminences -imminencies -imminency -imminent -imminently -immingle -immingled -immingles -immingling -immiscibilities -immiscibility -immiscible -immitigable -immitigably -immittance -immittances -immix -immixed -immixes -immixing -immixture -immixtures -immobile -immobilism -immobilisms -immobilities -immobility -immobilization -immobilizations -immobilize -immobilized -immobilizer -immobilizers -immobilizes -immobilizing -immoderacies -immoderacy -immoderate -immoderately -immoderateness -immoderatenesses -immoderation -immoderations -immodest -immodesties -immodestly -immodesty -immolate -immolated -immolates -immolating -immolation -immolations -immolator -immolators -immoral -immoralism -immoralisms -immoralist -immoralists -immoralities -immorality -immorally -immortal -immortalise -immortalised -immortalises -immortalising -immortalities -immortality -immortalization -immortalizations -immortalize -immortalized -immortalizer -immortalizers -immortalizes -immortalizing -immortally -immortals -immortelle -immortelles -immotile -immovabilities -immovability -immovable -immovableness -immovablenesses -immovables -immovably -immune -immunes -immunise -immunised -immunises -immunising -immunities -immunity -immunization -immunizations -immunize -immunized -immunizes -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 -immunogen -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 -immure -immured -immurement -immurements -immures -immuring -immutabilities -immutability -immutable -immutableness -immutablenesses -immutably -immy -imp -impact -impacted -impacter -impacters -impacting -impaction -impactions -impactive -impactor -impactors -impacts -impaint -impainted -impainting -impaints -impair -impaired -impairer -impairers -impairing -impairment -impairments -impairs -impala -impalas -impale -impaled -impalement -impalements -impaler -impalers -impales -impaling -impalpabilities -impalpability -impalpable -impalpably -impanel -impaneled -impaneling -impanelled -impanelling -impanels -imparadise -imparadised -imparadises -imparadising -imparities -imparity -impark -imparked -imparking -imparks -impart -impartation -impartations -imparted -imparter -imparters -impartial -impartialities -impartiality -impartially -impartible -impartibly -imparting -impartment -impartments -imparts -impassabilities -impassability -impassable -impassableness -impassablenesses -impassably -impasse -impasses -impassibilities -impassibility -impassible -impassibly -impassion -impassioned -impassioning -impassions -impassive -impassively -impassiveness -impassivenesses -impassivities -impassivity -impaste -impasted -impastes -impasting -impasto -impastoed -impastos -impatience -impatiences -impatiens -impatienses -impatient -impatiently -impavid -impawn -impawned -impawning -impawns -impeach -impeachable -impeached -impeaches -impeaching -impeachment -impeachments -impearl -impearled -impearling -impearls -impeccabilities -impeccability -impeccable -impeccably -impecuniosities -impecuniosity -impecunious -impecuniously -impecuniousness -impecuniousnesses -imped -impedance -impedances -impede -impeded -impeder -impeders -impedes -impediment -impedimenta -impediments -impeding -impel -impelled -impeller -impellers -impelling -impellor -impellors -impels -impend -impended -impendent -impending -impends -impenetrabilities -impenetrability -impenetrable -impenetrably -impenitence -impenitences -impenitent -impenitently -imperative -imperatively -imperativeness -imperativenesses -imperatives -imperator -imperatorial -imperators -imperceivable -imperceptible -imperceptibly -imperceptive -imperceptiveness -imperceptivenesses -impercipience -impercipiences -impercipient -imperfect -imperfection -imperfections -imperfective -imperfectives -imperfectly -imperfectness -imperfectnesses -imperfects -imperforate -imperia -imperial -imperialism -imperialisms -imperialist -imperialistic -imperialistically -imperialists -imperially -imperials -imperil -imperiled -imperiling -imperilled -imperilling -imperilment -imperilments -imperils -imperious -imperiously -imperiousness -imperiousnesses -imperishabilities -imperishability -imperishable -imperishableness -imperishablenesses -imperishables -imperishably -imperium -imperiums -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 -impetigo -impetigos -impetrate -impetrated -impetrates -impetrating -impetration -impetrations -impetuosities -impetuosity -impetuous -impetuously -impetuousness -impetuousnesses -impetus -impetuses -imphee -imphees -impi -impieties -impiety -imping -impinge -impinged -impingement -impingements -impinger -impingers -impinges -impinging -impings -impious -impiously -impis -impish -impishly -impishness -impishnesses -implacabilities -implacability -implacable -implacably -implant -implantable -implantation -implantations -implanted -implanter -implanters -implanting -implants -implausibilities -implausibility -implausible -implausibly -implead -impleaded -impleading -impleads -impledge -impledged -impledges -impledging -implement -implementation -implementations -implemented -implementer -implementers -implementing -implementor -implementors -implements -implicate -implicated -implicates -implicating -implication -implications -implicative -implicatively -implicativeness -implicativenesses -implicit -implicitly -implicitness -implicitnesses -implied -implies -implode -imploded -implodes -imploding -implore -implored -implorer -implorers -implores -imploring -imploringly -implosion -implosions -implosive -implosives -imply -implying -impolicies -impolicy -impolite -impolitely -impoliteness -impolitenesses -impolitic -impolitical -impolitically -impoliticly -imponderabilities -imponderability -imponderable -imponderables -imponderably -impone -imponed -impones -imponing -imporous -import -importable -importance -importances -importancies -importancy -important -importantly -importation -importations -imported -importer -importers -importing -imports -importunate -importunately -importunateness -importunatenesses -importune -importuned -importunely -importuner -importuners -importunes -importuning -importunities -importunity -impose -imposed -imposer -imposers -imposes -imposing -imposingly -imposition -impositions -impossibilities -impossibility -impossible -impossibleness -impossiblenesses -impossibly -impost -imposted -imposter -imposters -imposthume -imposthumes -imposting -impostor -impostors -imposts -impostume -impostumes -imposture -impostures -impotence -impotences -impotencies -impotency -impotent -impotently -impotents -impound -impounded -impounding -impoundment -impoundments -impounds -impoverish -impoverished -impoverisher -impoverishers -impoverishes -impoverishing -impoverishment -impoverishments -impower -impowered -impowering -impowers -impracticabilities -impracticability -impracticable -impracticably -impractical -impracticalities -impracticality -impractically -imprecate -imprecated -imprecates -imprecating -imprecation -imprecations -imprecatory -imprecise -imprecisely -impreciseness -imprecisenesses -imprecision -imprecisions -impregn -impregnabilities -impregnability -impregnable -impregnableness -impregnablenesses -impregnably -impregnant -impregnants -impregnate -impregnated -impregnates -impregnating -impregnation -impregnations -impregnator -impregnators -impregned -impregning -impregns -impresa -impresario -impresarios -impresas -imprese -impreses -impress -impressed -impresses -impressibilities -impressibility -impressible -impressing -impression -impressionabilities -impressionability -impressionable -impressionism -impressionisms -impressionist -impressionistic -impressionistically -impressionists -impressions -impressive -impressively -impressiveness -impressivenesses -impressment -impressments -impressure -impressures -imprest -imprests -imprimatur -imprimaturs -imprimis -imprint -imprinted -imprinter -imprinters -imprinting -imprintings -imprints -imprison -imprisoned -imprisoning -imprisonment -imprisonments -imprisons -improbabilities -improbability -improbable -improbably -impromptu -impromptus -improper -improperly -improperness -impropernesses -improprieties -impropriety -improv -improvabilities -improvability -improvable -improve -improved -improvement -improvements -improver -improvers -improves -improvidence -improvidences -improvident -improvidently -improving -improvisation -improvisational -improvisationally -improvisations -improvisator -improvisatore -improvisatores -improvisatori -improvisatorial -improvisators -improvisatory -improvise -improvised -improviser -improvisers -improvises -improvising -improvisor -improvisors -improvs -imprudence -imprudences -imprudent -imprudently -imps -impudence -impudences -impudent -impudently -impudicities -impudicity -impugn -impugnable -impugned -impugner -impugners -impugning -impugns -impuissance -impuissances -impuissant -impulse -impulsed -impulses -impulsing -impulsion -impulsions -impulsive -impulsively -impulsiveness -impulsivenesses -impulsivities -impulsivity -impunities -impunity -impure -impurely -impureness -impurenesses -impurities -impurity -imputabilities -imputability -imputable -imputation -imputations -imputative -imputatively -impute -imputed -imputer -imputers -imputes -imputing -in -inabilities -inability -inaccessibilities -inaccessibility -inaccessible -inaccessibly -inaccuracies -inaccuracy -inaccurate -inaccurately -inaction -inactions -inactivate -inactivated -inactivates -inactivating -inactivation -inactivations -inactive -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 -inamorata -inamoratas -inane -inanely -inaneness -inanenesses -inaner -inanes -inanest -inanimate -inanimately -inanimateness -inanimatenesses -inanities -inanition -inanitions -inanity -inapparent -inapparently -inappeasable -inappetence -inappetences -inapplicabilities -inapplicability -inapplicable -inapplicably -inapposite -inappositely -inappositeness -inappositenesses -inappreciable -inappreciably -inappreciative -inappreciatively -inappreciativeness -inappreciativenesses -inapproachable -inappropriate -inappropriately -inappropriateness -inappropriatenesses -inapt -inaptitude -inaptitudes -inaptly -inaptness -inaptnesses -inarable -inarch -inarched -inarches -inarching -inarguable -inarguably -inarm -inarmed -inarming -inarms -inarticulacies -inarticulacy -inarticulate -inarticulately -inarticulateness -inarticulatenesses -inarticulates -inartistic -inartistically -inattention -inattentions -inattentive -inattentively -inattentiveness -inattentivenesses -inaudibilities -inaudibility -inaudible -inaudibly -inaugural -inaugurals -inaugurate -inaugurated -inaugurates -inaugurating -inauguration -inaugurations -inaugurator -inaugurators -inauspicious -inauspiciously -inauspiciousness -inauspiciousnesses -inauthentic -inauthenticities -inauthenticity -inbeing -inbeings -inboard -inboards -inborn -inbound -inbounded -inbounding -inbounds -inbreathe -inbreathed -inbreathes -inbreathing -inbred -inbreds -inbreed -inbreeding -inbreedings -inbreeds -inbuilt -inburst -inbursts -inby -inbye -incage -incaged -incages -incaging -incalculabilities -incalculability -incalculable -incalculably -incalescence -incalescences -incalescent -incandesce -incandesced -incandescence -incandescences -incandescent -incandescently -incandescents -incandesces -incandescing -incant -incantation -incantational -incantations -incantatory -incanted -incanting -incants -incapabilities -incapability -incapable -incapableness -incapablenesses -incapably -incapacitate -incapacitated -incapacitates -incapacitating -incapacitation -incapacitations -incapacities -incapacity -incarcerate -incarcerated -incarcerates -incarcerating -incarceration -incarcerations -incardination -incardinations -incarnadine -incarnadined -incarnadines -incarnadining -incarnate -incarnated -incarnates -incarnating -incarnation -incarnations -incase -incased -incases -incasing -incaution -incautions -incautious -incautiously -incautiousness -incautiousnesses -incendiaries -incendiarism -incendiarisms -incendiary -incense -incensed -incenses -incensing -incenter -incenters -incentive -incentives -incentivize -incentivized -incentivizes -incentivizing -incept -incepted -incepting -inception -inceptions -inceptive -inceptively -inceptives -inceptor -inceptors -incepts -incertitude -incertitudes -incessancies -incessancy -incessant -incessantly -incest -incests -incestuous -incestuously -incestuousness -incestuousnesses -inch -inched -inches -inching -inchmeal -inchoate -inchoately -inchoateness -inchoatenesses -inchoative -inchoatively -inchoatives -inchworm -inchworms -incidence -incidences -incident -incidental -incidentally -incidentals -incidents -incinerate -incinerated -incinerates -incinerating -incineration -incinerations -incinerator -incinerators -incipience -incipiences -incipiencies -incipiency -incipient -incipiently -incipit -incipits -incisal -incise -incised -incises -incising -incision -incisions -incisive -incisively -incisiveness -incisivenesses -incisor -incisors -incisory -incisure -incisures -incitant -incitants -incitation -incitations -incite -incited -incitement -incitements -inciter -inciters -incites -inciting -incivil -incivilities -incivility -inclasp -inclasped -inclasping -inclasps -inclemencies -inclemency -inclement -inclemently -inclinable -inclination -inclinational -inclinations -incline -inclined -incliner -incliners -inclines -inclining -inclinings -inclinometer -inclinometers -inclip -inclipped -inclipping -inclips -inclose -inclosed -incloser -inclosers -incloses -inclosing -inclosure -inclosures -includable -include -included -includes -includible -including -inclusion -inclusions -inclusive -inclusively -inclusiveness -inclusivenesses -incoercible -incog -incogitant -incognita -incognitas -incognito -incognitos -incognizance -incognizances -incognizant -incogs -incoherence -incoherences -incoherent -incoherently -incombustibilities -incombustibility -incombustible -incombustibles -income -incomer -incomers -incomes -incoming -incomings -incommensurabilities -incommensurability -incommensurable -incommensurables -incommensurably -incommensurate -incommode -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 -incondite -inconformities -inconformity -incongruence -incongruences -incongruent -incongruently -incongruities -incongruity -incongruous -incongruously -incongruousness -incongruousnesses -inconnu -inconnus -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 -incony -incoordination -incoordinations -incorporable -incorporate -incorporated -incorporates -incorporating -incorporation -incorporations -incorporative -incorporator -incorporators -incorporeal -incorporeally -incorporeities -incorporeity -incorpse -incorpsed -incorpses -incorpsing -incorrect -incorrectly -incorrectness -incorrectnesses -incorrigibilities -incorrigibility -incorrigible -incorrigibleness -incorrigiblenesses -incorrigibles -incorrigibly -incorrupt -incorrupted -incorruptibilities -incorruptibility -incorruptible -incorruptibles -incorruptibly -incorruption -incorruptions -incorruptly -incorruptness -incorruptnesses -increasable -increase -increased -increaser -increasers -increases -increasing -increasingly -increate -incredibilities -incredibility -incredible -incredibleness -incrediblenesses -incredibly -incredulities -incredulity -incredulous -incredulously -increment -incremental -incrementalism -incrementalisms -incrementalist -incrementalists -incrementally -incremented -incrementing -increments -increscent -incriminate -incriminated -incriminates -incriminating -incrimination -incriminations -incriminatory -incross -incrossed -incrosses -incrossing -incrust -incrustation -incrustations -incrusted -incrusting -incrusts -incubate -incubated -incubates -incubating -incubation -incubations -incubative -incubator -incubators -incubatory -incubi -incubus -incubuses -incudal -incudate -incudes -inculcate -inculcated -inculcates -inculcating -inculcation -inculcations -inculcator -inculcators -inculpable -inculpate -inculpated -inculpates -inculpating -inculpation -inculpations -inculpatory -incult -incumbencies -incumbency -incumbent -incumbents -incumber -incumbered -incumbering -incumbers -incunable -incunables -incunabula -incunabulum -incur -incurable -incurables -incurably -incuriosities -incuriosity -incurious -incuriously -incuriousness -incuriousnesses -incurred -incurrence -incurrences -incurrent -incurring -incurs -incursion -incursions -incurvate -incurvated -incurvates -incurvating -incurvation -incurvations -incurvature -incurvatures -incurve -incurved -incurves -incurving -incus -incuse -incused -incuses -incusing -indaba -indabas -indagate -indagated -indagates -indagating -indagation -indagations -indagator -indagators -indamin -indamine -indamines -indamins -indebted -indebtedness -indebtednesses -indecencies -indecency -indecent -indecenter -indecentest -indecently -indecipherable -indecision -indecisions -indecisive -indecisively -indecisiveness -indecisivenesses -indeclinable -indecomposable -indecorous -indecorously -indecorousness -indecorousnesses -indecorum -indecorums -indeed -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 -indelible -indelibly -indelicacies -indelicacy -indelicate -indelicately -indelicateness -indelicatenesses -indemnification -indemnifications -indemnified -indemnifier -indemnifiers -indemnifies -indemnify -indemnifying -indemnities -indemnity -indemonstrable -indemonstrably -indene -indenes -indent -indentation -indentations -indented -indenter -indenters -indenting -indention -indentions -indentor -indentors -indents -indenture -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 -indevout -index -indexation -indexations -indexed -indexer -indexers -indexes -indexical -indexicals -indexing -indexings -indican -indicans -indicant -indicants -indicate -indicated -indicates -indicating -indication -indicational -indications -indicative -indicatively -indicatives -indicator -indicators -indicatory -indices -indicia -indicias -indicium -indiciums -indict -indictable -indicted -indictee -indictees -indicter -indicters -indicting -indiction -indictions -indictment -indictments -indictor -indictors -indicts -indie -indies -indifference -indifferences -indifferencies -indifferency -indifferent -indifferentism -indifferentisms -indifferentist -indifferentists -indifferently -indigen -indigence -indigences -indigene -indigenes -indigenization -indigenizations -indigenize -indigenized -indigenizes -indigenizing -indigenous -indigenously -indigenousness -indigenousnesses -indigens -indigent -indigents -indigested -indigestibilities -indigestibility -indigestible -indigestibles -indigestion -indigestions -indign -indignant -indignantly -indignation -indignations -indignities -indignity -indignly -indigo -indigoes -indigoid -indigoids -indigos -indigotin -indigotins -indirect -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 -indispose -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 -indite -indited -inditer -inditers -indites -inditing -indium -indiums -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 -indocile -indocilities -indocility -indoctrinate -indoctrinated -indoctrinates -indoctrinating -indoctrination -indoctrinations -indoctrinator -indoctrinators -indol -indole -indolence -indolences -indolent -indolently -indoles -indols -indomethacin -indomethacins -indomitabilities -indomitability -indomitable -indomitableness -indomitablenesses -indomitably -indoor -indoors -indophenol -indophenols -indorse -indorsed -indorsee -indorsees -indorsement -indorsements -indorser -indorsers -indorses -indorsing -indorsor -indorsors -indow -indowed -indowing -indows -indoxyl -indoxyls -indraft -indrafts -indrawn -indri -indris -indubitabilities -indubitability -indubitable -indubitableness -indubitablenesses -indubitably -induce -induced -inducement -inducements -inducer -inducers -induces -inducibilities -inducibility -inducible -inducing -induct -inductance -inductances -inducted -inductee -inductees -inducting -induction -inductions -inductive -inductively -inductor -inductors -inducts -indue -indued -indues -induing -indulge -indulged -indulgence -indulgences -indulgent -indulgently -indulger -indulgers -indulges -indulging -indulin -induline -indulines -indulins -indult -indults -indurate -indurated -indurates -indurating -induration -indurations -indurative -indusia -indusial -indusium -industrial -industrialise -industrialised -industrialises -industrialising -industrialism -industrialisms -industrialist -industrialists -industrialization -industrializations -industrialize -industrialized -industrializes -industrializing -industrially -industrials -industries -industrious -industriously -industriousness -industriousnesses -industry -indwell -indweller -indwellers -indwelling -indwells -indwelt -inearth -inearthed -inearthing -inearths -inebriant -inebriants -inebriate -inebriated -inebriates -inebriating -inebriation -inebriations -inebrieties -inebriety -inedible -inedita -inedited -ineducabilities -ineducability -ineducable -ineffabilities -ineffability -ineffable -ineffableness -ineffablenesses -ineffably -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 -inelastic -inelasticities -inelasticity -inelegance -inelegances -inelegant -inelegantly -ineligibilities -ineligibility -ineligible -ineligibles -ineloquent -ineloquently -ineluctabilities -ineluctability -ineluctable -ineluctably -ineludible -inenarrable -inept -ineptitude -ineptitudes -ineptly -ineptness -ineptnesses -inequalities -inequality -inequitable -inequitably -inequities -inequity -inequivalve -inequivalved -ineradicabilities -ineradicability -ineradicable -ineradicably -inerrancies -inerrancy -inerrant -inert -inertia -inertiae -inertial -inertially -inertias -inertly -inertness -inertnesses -inerts -inescapable -inescapably -inessential -inessentials -inestimable -inestimably -inevitabilities -inevitability -inevitable -inevitableness -inevitablenesses -inevitably -inexact -inexactitude -inexactitudes -inexactly -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 -inexpert -inexpertly -inexpertness -inexpertnesses -inexperts -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 -infall -infallibilities -infallibility -infallible -infallibly -infalling -infalls -infamies -infamous -infamously -infamy -infancies -infancy -infant -infanta -infantas -infante -infantes -infanticidal -infanticide -infanticides -infantile -infantilism -infantilisms -infantilities -infantility -infantilization -infantilizations -infantilize -infantilized -infantilizes -infantilizing -infantine -infantries -infantry -infantryman -infantrymen -infants -infarct -infarcted -infarction -infarctions -infarcts -infare -infares -infatuate -infatuated -infatuates -infatuating -infatuation -infatuations -infauna -infaunae -infaunal -infaunas -infeasibilities -infeasibility -infeasible -infect -infected -infecter -infecters -infecting -infection -infections -infectious -infectiously -infectiousness -infectiousnesses -infective -infectivities -infectivity -infector -infectors -infects -infecund -infelicities -infelicitous -infelicitously -infelicity -infeoff -infeoffed -infeoffing -infeoffs -infer -inferable -inference -inferences -inferential -inferentially -inferior -inferiorities -inferiority -inferiorly -inferiors -infernal -infernally -inferno -infernos -inferred -inferrer -inferrers -inferrible -inferring -infers -infertile -infertilities -infertility -infest -infestant -infestants -infestation -infestations -infested -infester -infesters -infesting -infests -infibulate -infibulated -infibulates -infibulating -infibulation -infibulations -infidel -infidelities -infidelity -infidels -infield -infielder -infielders -infields -infight -infighter -infighters -infighting -infightings -infights -infiltrate -infiltrated -infiltrates -infiltrating -infiltration -infiltrations -infiltrative -infiltrator -infiltrators -infinite -infinitely -infiniteness -infinitenesses -infinites -infinitesimal -infinitesimally -infinitesimals -infinities -infinitival -infinitive -infinitively -infinitives -infinitude -infinitudes -infinity -infirm -infirmaries -infirmary -infirmed -infirming -infirmities -infirmity -infirmly -infirms -infix -infixation -infixations -infixed -infixes -infixing -infixion -infixions -inflame -inflamed -inflamer -inflamers -inflames -inflaming -inflammabilities -inflammability -inflammable -inflammableness -inflammablenesses -inflammables -inflammably -inflammation -inflammations -inflammatorily -inflammatory -inflatable -inflatables -inflate -inflated -inflater -inflaters -inflates -inflating -inflation -inflationary -inflationism -inflationisms -inflationist -inflationists -inflations -inflator -inflators -inflect -inflectable -inflected -inflecting -inflection -inflectional -inflectionally -inflections -inflective -inflects -inflexed -inflexibilities -inflexibility -inflexible -inflexibleness -inflexiblenesses -inflexibly -inflexion -inflexions -inflict -inflicted -inflicter -inflicters -inflicting -infliction -inflictions -inflictive -inflictor -inflictors -inflicts -inflight -inflorescence -inflorescences -inflow -inflows -influence -influenceable -influenced -influences -influencing -influent -influential -influentially -influentials -influents -influenza -influenzal -influenzas -influx -influxes -info -infold -infolded -infolder -infolders -infolding -infolds -infomercial -infomercials -inform -informal -informalities -informality -informally -informant -informants -informatics -information -informational -informationally -informations -informative -informatively -informativeness -informativenesses -informatorily -informatory -informed -informedly -informer -informers -informing -informs -infos -infotainment -infotainments -infought -infra -infract -infracted -infracting -infraction -infractions -infracts -infrahuman -infrahumans -infrangibilities -infrangibility -infrangible -infrangibly -infrared -infrareds -infrasonic -infraspecific -infrastructure -infrastructures -infrequence -infrequences -infrequencies -infrequency -infrequent -infrequently -infringe -infringed -infringement -infringements -infringer -infringers -infringes -infringing -infrugal -infundibula -infundibular -infundibuliform -infundibulum -infuriate -infuriated -infuriates -infuriating -infuriatingly -infuriation -infuriations -infuse -infused -infuser -infusers -infuses -infusibilities -infusibility -infusible -infusibleness -infusiblenesses -infusing -infusion -infusions -infusive -infusorian -infusorians -ingate -ingates -ingather -ingathered -ingathering -ingatherings -ingathers -ingenious -ingeniously -ingeniousness -ingeniousnesses -ingenue -ingenues -ingenuities -ingenuity -ingenuous -ingenuously -ingenuousness -ingenuousnesses -ingest -ingesta -ingested -ingestible -ingesting -ingestion -ingestions -ingestive -ingests -ingle -inglenook -inglenooks -ingles -inglorious -ingloriously -ingloriousness -ingloriousnesses -ingoing -ingot -ingoted -ingoting -ingots -ingraft -ingrafted -ingrafting -ingrafts -ingrain -ingrained -ingrainedly -ingraining -ingrains -ingrate -ingrates -ingratiate -ingratiated -ingratiates -ingratiating -ingratiatingly -ingratiation -ingratiations -ingratiatory -ingratitude -ingratitudes -ingredient -ingredients -ingress -ingresses -ingression -ingressions -ingressive -ingressiveness -ingressivenesses -ingressives -ingroup -ingroups -ingrowing -ingrown -ingrownness -ingrownnesses -ingrowth -ingrowths -inguinal -ingulf -ingulfed -ingulfing -ingulfs -ingurgitate -ingurgitated -ingurgitates -ingurgitating -ingurgitation -ingurgitations -inhabit -inhabitable -inhabitancies -inhabitancy -inhabitant -inhabitants -inhabitation -inhabitations -inhabited -inhabiter -inhabiters -inhabiting -inhabits -inhalant -inhalants -inhalation -inhalational -inhalations -inhalator -inhalators -inhale -inhaled -inhaler -inhalers -inhales -inhaling -inharmonic -inharmonies -inharmonious -inharmoniously -inharmoniousness -inharmoniousnesses -inharmony -inhaul -inhauler -inhaulers -inhauls -inhere -inhered -inherence -inherences -inherent -inherently -inheres -inhering -inherit -inheritabilities -inheritability -inheritable -inheritableness -inheritablenesses -inheritance -inheritances -inherited -inheriting -inheritor -inheritors -inheritress -inheritresses -inheritrices -inheritrix -inheritrixes -inherits -inhesion -inhesions -inhibin -inhibins -inhibit -inhibited -inhibiting -inhibition -inhibitions -inhibitive -inhibitor -inhibitors -inhibitory -inhibits -inholding -inholdings -inhomogeneities -inhomogeneity -inhomogeneous -inhospitable -inhospitableness -inhospitablenesses -inhospitably -inhospitalities -inhospitality -inhuman -inhumane -inhumanely -inhumanities -inhumanity -inhumanly -inhumanness -inhumannesses -inhumation -inhumations -inhume -inhumed -inhumer -inhumers -inhumes -inhuming -inia -inimical -inimically -inimitable -inimitableness -inimitablenesses -inimitably -inion -inions -iniquities -iniquitous -iniquitously -iniquitousness -iniquitousnesses -iniquity -initial -initialed -initialing -initialism -initialisms -initialization -initializations -initialize -initialized -initializes -initializing -initialled -initialling -initially -initialness -initialnesses -initials -initiate -initiated -initiates -initiating -initiation -initiations -initiative -initiatives -initiator -initiators -initiatory -inject -injectable -injectables -injectant -injectants -injected -injecting -injection -injections -injective -injector -injectors -injects -injudicious -injudiciously -injudiciousness -injudiciousnesses -injunction -injunctions -injunctive -injure -injured -injurer -injurers -injures -injuries -injuring -injurious -injuriously -injuriousness -injuriousnesses -injury -injustice -injustices -ink -inkberries -inkberry -inkblot -inkblots -inked -inker -inkers -inkhorn -inkhorns -inkier -inkiest -inkiness -inkinesses -inking -inkjet -inkle -inkles -inkless -inklike -inkling -inklings -inkpot -inkpots -inks -inkstand -inkstands -inkstone -inkstones -inkwell -inkwells -inkwood -inkwoods -inky -inlace -inlaced -inlaces -inlacing -inlaid -inland -inlander -inlanders -inlands -inlay -inlayer -inlayers -inlaying -inlays -inlet -inlets -inletting -inlier -inliers -inly -inmate -inmates -inmesh -inmeshed -inmeshes -inmeshing -inmost -inn -innards -innate -innately -innateness -innatenesses -inned -inner -innerly -innermost -innermosts -inners -innersole -innersoles -innerspring -innervate -innervated -innervates -innervating -innervation -innervations -innerve -innerved -innerves -innerving -inning -innings -innkeeper -innkeepers -innless -innocence -innocences -innocencies -innocency -innocent -innocenter -innocentest -innocently -innocents -innocuous -innocuously -innocuousness -innocuousnesses -innominate -innovate -innovated -innovates -innovating -innovation -innovational -innovations -innovative -innovatively -innovativeness -innovativenesses -innovator -innovators -innovatory -inns -innuendo -innuendoed -innuendoes -innuendoing -innuendos -innumerable -innumerably -innumeracies -innumeracy -innumerate -innumerates -innumerous -inobservance -inobservances -inobservant -inocula -inoculant -inoculants -inoculate -inoculated -inoculates -inoculating -inoculation -inoculations -inoculative -inoculator -inoculators -inoculum -inoculums -inoffensive -inoffensively -inoffensiveness -inoffensivenesses -inoperable -inoperative -inoperativeness -inoperativenesses -inoperculate -inoperculates -inopportune -inopportunely -inopportuneness -inopportunenesses -inordinate -inordinately -inordinateness -inordinatenesses -inorganic -inorganically -inosculate -inosculated -inosculates -inosculating -inosculation -inosculations -inosite -inosites -inositol -inositols -inotropic -inpatient -inpatients -inphase -inpour -inpoured -inpouring -inpourings -inpours -input -inputs -inputted -inputting -inquest -inquests -inquiet -inquieted -inquieting -inquiets -inquietude -inquietudes -inquiline -inquilines -inquire -inquired -inquirer -inquirers -inquires -inquiries -inquiring -inquiringly -inquiry -inquisition -inquisitional -inquisitions -inquisitive -inquisitively -inquisitiveness -inquisitivenesses -inquisitor -inquisitorial -inquisitorially -inquisitors -inro -inroad -inroads -inrush -inrushes -ins -insalubrious -insalubrities -insalubrity -insane -insanely -insaneness -insanenesses -insaner -insanest -insanitary -insanitation -insanitations -insanities -insanity -insatiabilities -insatiability -insatiable -insatiableness -insatiablenesses -insatiably -insatiate -insatiately -insatiateness -insatiatenesses -inscape -inscapes -inscribe -inscribed -inscriber -inscribers -inscribes -inscribing -inscription -inscriptional -inscriptions -inscriptive -inscriptively -inscroll -inscrolled -inscrolling -inscrolls -inscrutabilities -inscrutability -inscrutable -inscrutableness -inscrutablenesses -inscrutably -insculp -insculped -insculping -insculps -inseam -inseams -insect -insectan -insectaries -insectary -insecticidal -insecticidally -insecticide -insecticides -insectile -insectivore -insectivores -insectivorous -insects -insecure -insecurely -insecureness -insecurenesses -insecurities -insecurity -inselberg -inselberge -inselbergs -inseminate -inseminated -inseminates -inseminating -insemination -inseminations -inseminator -inseminators -insensate -insensately -insensibilities -insensibility -insensible -insensibleness -insensiblenesses -insensibly -insensitive -insensitively -insensitiveness -insensitivenesses -insensitivities -insensitivity -insentience -insentiences -insentient -inseparabilities -inseparability -inseparable -inseparableness -inseparablenesses -inseparables -inseparably -insert -inserted -inserter -inserters -inserting -insertion -insertional -insertions -inserts -inset -insets -insetted -insetter -insetters -insetting -insheath -insheathed -insheathing -insheaths -inshore -inshrine -inshrined -inshrines -inshrining -inside -insider -insiders -insides -insidious -insidiously -insidiousness -insidiousnesses -insight -insightful -insightfully -insights -insigne -insignia -insignias -insignificance -insignificances -insignificancies -insignificancy -insignificant -insignificantly -insincere -insincerely -insincerities -insincerity -insinuate -insinuated -insinuates -insinuating -insinuatingly -insinuation -insinuations -insinuative -insinuator -insinuators -insipid -insipidities -insipidity -insipidly -insist -insisted -insistence -insistences -insistencies -insistency -insistent -insistently -insister -insisters -insisting -insists -insnare -insnared -insnarer -insnarers -insnares -insnaring -insobrieties -insobriety -insociabilities -insociability -insociable -insociably -insofar -insolate -insolated -insolates -insolating -insolation -insolations -insole -insolence -insolences -insolent -insolently -insolents -insoles -insolubilities -insolubility -insolubilization -insolubilizations -insolubilize -insolubilized -insolubilizes -insolubilizing -insoluble -insolubleness -insolublenesses -insolubles -insolubly -insolvable -insolvably -insolvencies -insolvency -insolvent -insolvents -insomnia -insomniac -insomniacs -insomnias -insomuch -insouciance -insouciances -insouciant -insouciantly -insoul -insouled -insouling -insouls -inspan -inspanned -inspanning -inspans -inspect -inspected -inspecting -inspection -inspections -inspective -inspector -inspectorate -inspectorates -inspectors -inspectorship -inspectorships -inspects -insphere -insphered -inspheres -insphering -inspiration -inspirational -inspirationally -inspirations -inspirator -inspirators -inspiratory -inspire -inspired -inspirer -inspirers -inspires -inspiring -inspiringly -inspirit -inspirited -inspiriting -inspiritingly -inspirits -inspissate -inspissated -inspissates -inspissating -inspissation -inspissations -inspissator -inspissators -instabilities -instability -instable -instal -install -installation -installations -installed -installer -installers -installing -installment -installments -installs -instalment -instalments -instals -instance -instanced -instances -instancies -instancing -instancy -instant -instantaneities -instantaneity -instantaneous -instantaneously -instantaneousness -instantaneousnesses -instanter -instantiate -instantiated -instantiates -instantiating -instantiation -instantiations -instantly -instantness -instantnesses -instants -instar -instarred -instarring -instars -instate -instated -instates -instating -instauration -instaurations -instead -instep -insteps -instigate -instigated -instigates -instigating -instigation -instigations -instigative -instigator -instigators -instil -instill -instillation -instillations -instilled -instiller -instillers -instilling -instillment -instillments -instills -instils -instinct -instinctive -instinctively -instincts -instinctual -instinctually -institute -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 -instroke -instrokes -instruct -instructed -instructing -instruction -instructional -instructions -instructive -instructively -instructiveness -instructivenesses -instructor -instructors -instructorship -instructorships -instructress -instructresses -instructs -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 -insulant -insulants -insular -insularism -insularisms -insularities -insularity -insularly -insulars -insulate -insulated -insulates -insulating -insulation -insulations -insulator -insulators -insulin -insulins -insult -insulted -insulter -insulters -insulting -insultingly -insults -insuperable -insuperably -insupportable -insupportably -insuppressible -insurabilities -insurability -insurable -insurance -insurances -insurant -insurants -insure -insured -insureds -insurer -insurers -insures -insurgence -insurgences -insurgencies -insurgency -insurgent -insurgently -insurgents -insuring -insurmountable -insurmountably -insurrection -insurrectional -insurrectionaries -insurrectionary -insurrectionist -insurrectionists -insurrections -insusceptibilities -insusceptibility -insusceptible -insusceptibly -inswathe -inswathed -inswathes -inswathing -inswept -intact -intactness -intactnesses -intagli -intaglio -intaglioed -intaglioing -intaglios -intake -intakes -intangibilities -intangibility -intangible -intangibleness -intangiblenesses -intangibles -intangibly -intarsia -intarsias -integer -integers -integrabilities -integrability -integrable -integral -integralities -integrality -integrally -integrals -integrand -integrands -integrate -integrated -integrates -integrating -integration -integrationist -integrationists -integrations -integrative -integrator -integrators -integrities -integrity -integument -integumentary -integuments -intellect -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 -intend -intendance -intendances -intendant -intendants -intended -intendedly -intendeds -intender -intenders -intending -intendment -intendments -intends -intenerate -intenerated -intenerates -intenerating -inteneration -intenerations -intense -intensely -intenseness -intensenesses -intenser -intensest -intensification -intensifications -intensified -intensifier -intensifiers -intensifies -intensify -intensifying -intension -intensional -intensionalities -intensionality -intensionally -intensions -intensities -intensity -intensive -intensively -intensiveness -intensivenesses -intensives -intent -intention -intentional -intentionalities -intentionality -intentionally -intentions -intently -intentness -intentnesses -intents -inter -interabang -interabangs -interact -interactant -interactants -interacted -interacting -interaction -interactional -interactions -interactive -interactively -interacts -interage -interagency -interallelic -interallied -interanimation -interanimations -interannual -interassociation -interassociations -interatomic -interavailabilities -interavailability -interbank -interbasin -interbed -interbedded -interbedding -interbeds -interbehavior -interbehavioral -interbehaviors -interborough -interboroughs -interbranch -interbred -interbreed -interbreeding -interbreeds -intercalary -intercalate -intercalated -intercalates -intercalating -intercalation -intercalations -intercalibration -intercalibrations -intercampus -intercaste -intercede -interceded -interceder -interceders -intercedes -interceding -intercell -intercellular -intercensal -intercept -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 -intercity -interclan -interclass -interclub -intercluster -intercoastal -intercollegiate -intercolonial -intercolumniation -intercolumniations -intercom -intercommunal -intercommunicate -intercommunicated -intercommunicates -intercommunicating -intercommunication -intercommunications -intercommunion -intercommunions -intercommunities -intercommunity -intercompany -intercompare -intercompared -intercompares -intercomparing -intercomparison -intercomparisons -intercomprehensibilities -intercomprehensibility -intercoms -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 -intercrop -intercropped -intercropping -intercrops -intercross -intercrossed -intercrosses -intercrossing -intercrystalline -intercultural -interculturally -interculture -intercultures -intercurrent -intercut -intercuts -intercutting -interdealer -interdealers -interdenominational -interdental -interdentally -interdepartmental -interdepartmentally -interdepend -interdepended -interdependence -interdependences -interdependencies -interdependency -interdependent -interdependently -interdepending -interdepends -interdialectal -interdict -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 -interest -interested -interestedly -interesting -interestingly -interestingness -interestingnesses -interests -interethnic -interface -interfaced -interfaces -interfacial -interfacing -interfacings -interfaculties -interfaculty -interfaith -interfamilial -interfamily -interfere -interfered -interference -interferences -interferential -interferer -interferers -interferes -interfering -interferogram -interferograms -interferometer -interferometers -interferometric -interferometrically -interferometries -interferometry -interferon -interferons -interfertile -interfertilities -interfertility -interfiber -interfile -interfiled -interfiles -interfiling -interfirm -interflow -interfluve -interfluves -interfluvial -interfold -interfolded -interfolding -interfolds -interfraternity -interfuse -interfused -interfuses -interfusing -interfusion -interfusions -intergalactic -intergang -intergeneration -intergenerational -intergenerations -intergeneric -interglacial -interglacials -intergovernmental -intergradation -intergradational -intergradations -intergrade -intergraded -intergrades -intergrading -intergraft -intergrafted -intergrafting -intergrafts -intergranular -intergroup -intergrowth -intergrowths -interhemispheric -interim -interims -interindividual -interindustry -interinfluence -interinfluenced -interinfluences -interinfluencing -interinstitutional -interinvolve -interinvolved -interinvolves -interinvolving -interionic -interior -interiorise -interiorised -interiorises -interiorising -interiorities -interiority -interiorization -interiorizations -interiorize -interiorized -interiorizes -interiorizing -interiorly -interiors -interisland -interject -interjected -interjecting -interjection -interjectional -interjectionally -interjections -interjector -interjectors -interjectory -interjects -interjurisdictional -interknit -interknits -interknitted -interknitting -interlace -interlaced -interlacement -interlacements -interlaces -interlacing -interlacustrine -interlaid -interlaminar -interlap -interlapped -interlapping -interlaps -interlard -interlarded -interlarding -interlards -interlay -interlayer -interlayered -interlayering -interlayers -interlaying -interlays -interleave -interleaved -interleaves -interleaving -interlend -interlending -interlends -interlent -interleukin -interleukins -interlibrary -interline -interlinear -interlinearly -interlinears -interlineation -interlineations -interlined -interliner -interliners -interlines -interlining -interlinings -interlink -interlinked -interlinking -interlinks -interlobular -interlocal -interlock -interlocked -interlocking -interlocks -interlocutor -interlocutors -interlocutory -interlope -interloped -interloper -interlopers -interlopes -interloping -interlude -interludes -interlunar -interlunary -intermale -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 -interment -interments -intermesh -intermeshed -intermeshes -intermeshing -intermetallic -intermetallics -intermezzi -intermezzo -intermezzos -interminable -interminableness -interminablenesses -interminably -intermingle -intermingled -intermingles -intermingling -interministerial -intermission -intermissionless -intermissions -intermit -intermitotic -intermits -intermitted -intermittence -intermittences -intermittencies -intermittency -intermittent -intermittently -intermitter -intermitters -intermitting -intermix -intermixed -intermixes -intermixing -intermixture -intermixtures -intermodal -intermodulation -intermodulations -intermolecular -intermolecularly -intermont -intermontane -intermountain -intermural -intern -internal -internalise -internalised -internalises -internalising -internalities -internality -internalization -internalizations -internalize -internalized -internalizes -internalizing -internally -internals -international -internationalise -internationalised -internationalises -internationalising -internationalism -internationalisms -internationalist -internationalists -internationalities -internationality -internationalization -internationalizations -internationalize -internationalized -internationalizes -internationalizing -internationally -internationals -interne -internecine -interned -internee -internees -internes -interneuron -interneuronal -interneurons -interning -internist -internists -internment -internments -internodal -internode -internodes -interns -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 -interplay -interplayed -interplaying -interplays -interplead -interpleaded -interpleader -interpleaders -interpleading -interpleads -interpled -interpluvial -interpoint -interpoints -interpolate -interpolated -interpolates -interpolating -interpolation -interpolations -interpolative -interpolator -interpolators -interpopulation -interpopulational -interpose -interposed -interposer -interposers -interposes -interposing -interposition -interpositions -interpret -interpretabilities -interpretability -interpretable -interpretation -interpretational -interpretations -interpretative -interpretatively -interpreted -interpreter -interpreters -interpreting -interpretive -interpretively -interprets -interprofessional -interprovincial -interproximal -interpsychic -interpupillary -interracial -interracially -interred -interreges -interregional -interregna -interregnum -interregnums -interrelate -interrelated -interrelatedly -interrelatedness -interrelatednesses -interrelates -interrelating -interrelation -interrelations -interrelationship -interrelationships -interreligious -interrenal -interrex -interring -interrobang -interrobangs -interrogate -interrogated -interrogatee -interrogatees -interrogates -interrogating -interrogation -interrogational -interrogations -interrogative -interrogatively -interrogatives -interrogator -interrogatories -interrogators -interrogatory -interrogee -interrogees -interrow -interrupt -interrupted -interrupter -interrupters -interruptible -interrupting -interruption -interruptions -interruptive -interruptor -interruptors -interrupts -inters -interscholastic -interschool -interschools -intersect -intersected -intersecting -intersection -intersectional -intersections -intersects -intersegment -intersegmental -intersegments -intersensory -interservice -intersession -intersessions -intersex -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 -interterm -interterminal -interterritorial -intertestamental -intertextual -intertextualities -intertextuality -intertextually -intertidal -intertidally -intertie -interties -intertill -intertillage -intertillages -intertilled -intertilling -intertills -intertranslatable -intertrial -intertribal -intertroop -intertropical -intertwine -intertwined -intertwinement -intertwinements -intertwines -intertwining -intertwist -intertwisted -intertwisting -intertwists -interunion -interunions -interunit -interuniversity -interurban -interurbans -interval -intervale -intervales -intervalley -intervalleys -intervallic -intervalometer -intervalometers -intervals -intervene -intervened -intervener -interveners -intervenes -intervening -intervenor -intervenors -intervention -interventionism -interventionisms -interventionist -interventionists -interventions -interventricular -intervertebral -interview -interviewed -interviewee -interviewees -interviewer -interviewers -interviewing -interviews -intervillage -intervisibilities -intervisibility -intervisible -intervisitation -intervisitations -intervocalic -intervocalically -interwar -interweave -interweaved -interweaves -interweaving -interwork -interworked -interworking -interworkings -interworks -interwove -interwoven -interwrought -interzonal -interzone -intestacies -intestacy -intestate -intestates -intestinal -intestinally -intestine -intestines -inthral -inthrall -inthralled -inthralling -inthralls -inthrals -inthrone -inthroned -inthrones -inthroning -inti -intima -intimacies -intimacy -intimae -intimal -intimas -intimate -intimated -intimately -intimateness -intimatenesses -intimater -intimaters -intimates -intimating -intimation -intimations -intime -intimidate -intimidated -intimidates -intimidating -intimidatingly -intimidation -intimidations -intimidator -intimidators -intimidatory -intimist -intimists -intinction -intinctions -intine -intines -intis -intitle -intitled -intitles -intitling -intitule -intituled -intitules -intituling -into -intolerabilities -intolerability -intolerable -intolerableness -intolerablenesses -intolerably -intolerance -intolerances -intolerant -intolerantly -intolerantness -intolerantnesses -intomb -intombed -intombing -intombs -intonate -intonated -intonates -intonating -intonation -intonational -intonations -intone -intoned -intoner -intoners -intones -intoning -intort -intorted -intorting -intorts -intown -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 -intraday -intradermal -intradermally -intrados -intradoses -intragalactic -intragenic -intramolecular -intramolecularly -intramural -intramurally -intramuscular -intramuscularly -intranasal -intranasally -intranet -intranets -intransigeance -intransigeances -intransigeant -intransigeantly -intransigeants -intransigence -intransigences -intransigent -intransigently -intransigents -intransitive -intransitively -intransitiveness -intransitivenesses -intransitivities -intransitivity -intrant -intrants -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 -intreat -intreated -intreating -intreats -intrench -intrenched -intrenches -intrenching -intrepid -intrepidities -intrepidity -intrepidly -intrepidness -intrepidnesses -intricacies -intricacy -intricate -intricately -intricateness -intricatenesses -intrigant -intrigants -intriguant -intriguants -intrigue -intrigued -intriguer -intriguers -intrigues -intriguing -intriguingly -intrinsic -intrinsical -intrinsically -intro -introduce -introduced -introducer -introducers -introduces -introducing -introduction -introductions -introductorily -introductory -introfied -introfies -introfy -introfying -introgressant -introgressants -introgression -introgressions -introgressive -introit -introits -introject -introjected -introjecting -introjection -introjections -introjects -intromission -intromissions -intromit -intromits -intromitted -intromittent -intromitter -intromitters -intromitting -intron -introns -introrse -intros -introspect -introspected -introspecting -introspection -introspectional -introspectionism -introspectionisms -introspectionist -introspectionistic -introspectionists -introspections -introspective -introspectively -introspectiveness -introspectivenesses -introspects -introversion -introversions -introversive -introversively -introvert -introverted -introverting -introverts -intrude -intruded -intruder -intruders -intrudes -intruding -intrusion -intrusions -intrusive -intrusively -intrusiveness -intrusivenesses -intrusives -intrust -intrusted -intrusting -intrusts -intubate -intubated -intubates -intubating -intubation -intubations -intuit -intuitable -intuited -intuiting -intuition -intuitional -intuitionism -intuitionisms -intuitionist -intuitionists -intuitions -intuitive -intuitively -intuitiveness -intuitivenesses -intuits -intumescence -intumescences -intumescent -inturn -inturned -inturns -intussuscept -intussuscepted -intussuscepting -intussusception -intussusceptions -intussusceptive -intussuscepts -intwine -intwined -intwines -intwining -intwist -intwisted -intwisting -intwists -inulase -inulases -inulin -inulins -inunction -inunctions -inundant -inundate -inundated -inundates -inundating -inundation -inundations -inundator -inundators -inundatory -inurbane -inure -inured -inurement -inurements -inures -inuring -inurn -inurned -inurning -inurns -inutile -inutilities -inutility -invade -invaded -invader -invaders -invades -invading -invaginate -invaginated -invaginates -invaginating -invagination -invaginations -invalid -invalidate -invalidated -invalidates -invalidating -invalidation -invalidations -invalidator -invalidators -invalided -invaliding -invalidism -invalidisms -invalidities -invalidity -invalidly -invalids -invaluable -invaluableness -invaluablenesses -invaluably -invar -invariabilities -invariability -invariable -invariables -invariably -invariance -invariances -invariant -invariants -invars -invasion -invasions -invasive -invasively -invasiveness -invasivenesses -invected -invective -invectively -invectiveness -invectivenesses -invectives -inveigh -inveighed -inveigher -inveighers -inveighing -inveighs -inveigle -inveigled -inveiglement -inveiglements -inveigler -inveiglers -inveigles -inveigling -invent -invented -inventer -inventers -inventing -invention -inventions -inventive -inventively -inventiveness -inventivenesses -inventor -inventorial -inventorially -inventoried -inventories -inventors -inventory -inventorying -inventress -inventresses -invents -inverities -inverity -inverness -invernesses -inverse -inversely -inverses -inversion -inversions -inversive -invert -invertase -invertases -invertebrate -invertebrates -inverted -inverter -inverters -invertible -inverting -invertor -invertors -inverts -invest -investable -invested -investigate -investigated -investigates -investigating -investigation -investigational -investigations -investigative -investigator -investigators -investigatory -investing -investiture -investitures -investment -investments -investor -investors -invests -inveteracies -inveteracy -inveterate -inveterately -inviabilities -inviability -inviable -inviably -invidious -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 -inviolacy -inviolate -inviolately -inviolateness -inviolatenesses -invirile -inviscid -invisibilities -invisibility -invisible -invisibleness -invisiblenesses -invisibles -invisibly -invital -invitation -invitational -invitationals -invitations -invitatories -invitatory -invite -invited -invitee -invitees -inviter -inviters -invites -inviting -invitingly -invocate -invocated -invocates -invocating -invocation -invocational -invocations -invocatory -invoice -invoiced -invoices -invoicing -invoke -invoked -invoker -invokers -invokes -invoking -involucra -involucral -involucrate -involucre -involucres -involucrum -involuntarily -involuntariness -involuntarinesses -involuntary -involute -involuted -involutes -involuting -involution -involutional -involutions -involve -involved -involvedly -involvement -involvements -involver -involvers -involves -involving -invulnerabilities -invulnerability -invulnerable -invulnerableness -invulnerablenesses -invulnerably -inwall -inwalled -inwalling -inwalls -inward -inwardly -inwardness -inwardnesses -inwards -inweave -inweaved -inweaves -inweaving -inwind -inwinding -inwinds -inwound -inwove -inwoven -inwrap -inwrapped -inwrapping -inwraps -iodate -iodated -iodates -iodating -iodation -iodations -iodic -iodid -iodide -iodides -iodids -iodin -iodinate -iodinated -iodinates -iodinating -iodination -iodinations -iodine -iodines -iodins -iodise -iodised -iodises -iodising -iodism -iodisms -iodize -iodized -iodizer -iodizers -iodizes -iodizing -iodoform -iodoforms -iodophor -iodophors -iodopsin -iodopsins -iodous -iolite -iolites -ion -ionic -ionicities -ionicity -ionics -ionise -ionised -ionises -ionising -ionium -ioniums -ionizable -ionization -ionizations -ionize -ionized -ionizer -ionizers -ionizes -ionizing -ionogen -ionogens -ionomer -ionomers -ionone -ionones -ionophore -ionophores -ionosphere -ionospheres -ionospheric -ionospherically -ions -iontophoreses -iontophoresis -iontophoretic -iontophoretically -iota -iotacism -iotacisms -iotas -ipecac -ipecacs -ipecacuanha -ipecacuanhas -ipomoea -ipomoeas -iproniazid -iproniazids -ipsilateral -ipsilaterally -iracund -irade -irades -irascibilities -irascibility -irascible -irascibleness -irasciblenesses -irascibly -irate -irately -irateness -iratenesses -irater -iratest -ire -ired -ireful -irefully -ireless -irenic -irenical -irenically -irenics -ires -irid -irides -iridescence -iridescences -iridescent -iridescently -iridic -iridium -iridiums -iridologies -iridologist -iridologists -iridology -iridosmine -iridosmines -irids -iring -iris -irised -irises -irising -iritic -iritis -iritises -irk -irked -irking -irks -irksome -irksomely -irksomeness -irksomenesses -iroko -irokos -iron -ironbark -ironbarks -ironbound -ironclad -ironclads -irone -ironed -ironer -ironers -irones -ironfisted -ironhanded -ironhearted -ironic -ironical -ironically -ironicalness -ironicalnesses -ironies -ironing -ironings -ironist -ironists -ironize -ironized -ironizes -ironizing -ironlike -ironmaster -ironmasters -ironmonger -ironmongeries -ironmongers -ironmongery -ironness -ironnesses -irons -ironside -ironsides -ironstone -ironstones -ironware -ironwares -ironweed -ironweeds -ironwood -ironwoods -ironwork -ironworker -ironworkers -ironworks -irony -irradiance -irradiances -irradiate -irradiated -irradiates -irradiating -irradiation -irradiations -irradiative -irradiator -irradiators -irradicable -irradicably -irrational -irrationalism -irrationalisms -irrationalist -irrationalistic -irrationalists -irrationalities -irrationality -irrationally -irrationals -irreal -irrealities -irreality -irreclaimable -irreclaimably -irreconcilabilities -irreconcilability -irreconcilable -irreconcilableness -irreconcilablenesses -irreconcilables -irreconcilably -irrecoverable -irrecoverableness -irrecoverablenesses -irrecoverably -irrecusable -irrecusably -irredeemable -irredeemably -irredenta -irredentas -irredentism -irredentisms -irredentist -irredentists -irreducibilities -irreducibility -irreducible -irreducibly -irreflexive -irreformabilities -irreformability -irreformable -irrefragabilities -irrefragability -irrefragable -irrefragably -irrefutabilities -irrefutability -irrefutable -irrefutably -irregardless -irregular -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 -irridenta -irridentas -irrigate -irrigated -irrigates -irrigating -irrigation -irrigations -irrigator -irrigators -irritabilities -irritability -irritable -irritableness -irritablenesses -irritably -irritant -irritants -irritate -irritated -irritates -irritating -irritatingly -irritation -irritations -irritative -irrotational -irrupt -irrupted -irrupting -irruption -irruptions -irruptive -irruptively -irrupts -is -isagoge -isagoges -isagogic -isagogics -isallobar -isallobaric -isallobars -isarithm -isarithms -isatin -isatine -isatines -isatinic -isatins -isba -isbas -ischaemia -ischaemias -ischemia -ischemias -ischemic -ischia -ischial -ischium -isentropic -isentropically -isinglass -isinglasses -island -islanded -islander -islanders -islanding -islands -isle -isled -isleless -isles -islet -islets -isling -ism -isms -isoagglutinin -isoagglutinins -isoalloxazine -isoalloxazines -isoantibodies -isoantibody -isoantigen -isoantigenic -isoantigens -isobar -isobare -isobares -isobaric -isobars -isobath -isobaths -isobutane -isobutanes -isobutylene -isobutylenes -isocaloric -isocarboxazid -isocarboxazids -isocheim -isocheims -isochime -isochimes -isochor -isochore -isochores -isochors -isochromosome -isochromosomes -isochron -isochronal -isochronally -isochrone -isochrones -isochronism -isochronisms -isochronous -isochronously -isochrons -isocline -isoclines -isocracies -isocracy -isocyanate -isocyanates -isocyclic -isodiametric -isodose -isoelectric -isoelectronic -isoelectronically -isoenzymatic -isoenzyme -isoenzymes -isoenzymic -isogamete -isogametes -isogametic -isogamies -isogamous -isogamy -isogeneic -isogenic -isogenies -isogeny -isogloss -isoglossal -isoglosses -isoglossic -isogon -isogonal -isogonals -isogone -isogones -isogonic -isogonics -isogonies -isogons -isogony -isograft -isografted -isografting -isografts -isogram -isograms -isograph -isographs -isogriv -isogrivs -isohel -isohels -isohyet -isohyetal -isohyets -isolable -isolatable -isolate -isolated -isolates -isolating -isolation -isolationism -isolationisms -isolationist -isolationists -isolations -isolator -isolators -isolead -isoleads -isoleucine -isoleucines -isoline -isolines -isolog -isologs -isologue -isologues -isomer -isomerase -isomerases -isomeric -isomerism -isomerisms -isomerization -isomerizations -isomerize -isomerized -isomerizes -isomerizing -isomers -isometric -isometrically -isometrics -isometries -isometry -isomorph -isomorphic -isomorphically -isomorphism -isomorphisms -isomorphous -isomorphs -isoniazid -isoniazids -isonomic -isonomies -isonomy -isooctane -isooctanes -isopach -isopachs -isophotal -isophote -isophotes -isopiestic -isopleth -isoplethic -isopleths -isopod -isopodan -isopodans -isopods -isoprenaline -isoprenalines -isoprene -isoprenes -isoprenoid -isopropyl -isopropyls -isoproterenol -isoproterenols -isopycnic -isosceles -isosmotic -isosmotically -isospin -isospins -isospories -isospory -isostasies -isostasy -isostatic -isostatically -isotach -isotachs -isotactic -isothere -isotheres -isotherm -isothermal -isothermally -isotherms -isotone -isotones -isotonic -isotonically -isotonicities -isotonicity -isotope -isotopes -isotopic -isotopically -isotopies -isotopy -isotropic -isotropies -isotropy -isotype -isotypes -isotypic -isozyme -isozymes -isozymic -issei -isseis -issuable -issuably -issuance -issuances -issuant -issue -issued -issueless -issuer -issuers -issues -issuing -isthmi -isthmian -isthmians -isthmic -isthmoid -isthmus -isthmuses -istle -istles -it -italianate -italianated -italianates -italianating -italianise -italianised -italianises -italianising -italianize -italianized -italianizes -italianizing -italic -italicise -italicised -italicises -italicising -italicization -italicizations -italicize -italicized -italicizes -italicizing -italics -itch -itched -itches -itchier -itchiest -itchily -itchiness -itchinesses -itching -itchings -itchy -item -itemed -iteming -itemise -itemised -itemises -itemising -itemization -itemizations -itemize -itemized -itemizer -itemizers -itemizes -itemizing -items -iterance -iterances -iterant -iterate -iterated -iterates -iterating -iteration -iterations -iterative -iteratively -iterum -ither -ithyphallic -itinerancies -itinerancy -itinerant -itinerantly -itinerants -itineraries -itinerary -itinerate -itinerated -itinerates -itinerating -itineration -itinerations -its -itself -ivermectin -ivermectins -ivied -ivies -ivories -ivory -ivorybill -ivorybills -ivy -ivylike -iwis -ixia -ixias -ixodid -ixodids -ixora -ixoras -ixtle -ixtles -izar -izars -izzard -izzards -jab -jabbed -jabber -jabbered -jabberer -jabberers -jabbering -jabbers -jabberwockies -jabberwocky -jabbing -jabiru -jabirus -jaborandi -jaborandis -jabot -jaboticaba -jaboticabas -jabots -jabs -jacal -jacales -jacals -jacamar -jacamars -jacana -jacanas -jacaranda -jacarandas -jacinth -jacinthe -jacinthes -jacinths -jack -jackal -jackals -jackanapes -jackanapeses -jackaroo -jackaroos -jackass -jackasseries -jackassery -jackasses -jackboot -jackbooted -jackboots -jackdaw -jackdaws -jacked -jacker -jackeroo -jackeroos -jackers -jacket -jacketed -jacketing -jacketless -jackets -jackfish -jackfishes -jackfruit -jackfruits -jackhammer -jackhammered -jackhammering -jackhammers -jackies -jacking -jackknife -jackknifed -jackknifes -jackknifing -jackknives -jackleg -jacklegs -jacklight -jacklights -jackpot -jackpots -jackrabbit -jackrabbits -jackroll -jackrolled -jackrolling -jackrolls -jacks -jackscrew -jackscrews -jacksmelt -jacksmelts -jackstay -jackstays -jackstraw -jackstraws -jacky -jacobin -jacobins -jacobus -jacobuses -jaconet -jaconets -jacquard -jacquards -jacquerie -jacqueries -jactitation -jactitations -jaculate -jaculated -jaculates -jaculating -jade -jaded -jadedly -jadedness -jadednesses -jadeite -jadeites -jades -jading -jadish -jadishly -jaditic -jaeger -jaegers -jag -jager -jagers -jagg -jaggaries -jaggary -jagged -jaggeder -jaggedest -jaggedly -jaggedness -jaggednesses -jagger -jaggeries -jaggers -jaggery -jaggheries -jagghery -jaggier -jaggiest -jagging -jaggs -jaggy -jagless -jagra -jagras -jags -jaguar -jaguarondi -jaguarondis -jaguars -jaguarundi -jaguarundis -jail -jailbait -jailbird -jailbirds -jailbreak -jailbreaks -jailed -jailer -jailers -jailhouse -jailhouses -jailing -jailor -jailors -jails -jake -jakes -jalap -jalapeno -jalapenos -jalapic -jalapin -jalapins -jalaps -jalop -jalopies -jaloppies -jaloppy -jalops -jalopy -jalousie -jalousies -jam -jamb -jambalaya -jambalayas -jambe -jambeau -jambeaux -jambed -jambes -jambing -jamboree -jamborees -jambs -jammed -jammer -jammers -jammier -jammies -jammiest -jamming -jammy -jams -jane -janes -jangle -jangled -jangler -janglers -jangles -janglier -jangliest -jangling -jangly -janiform -janisaries -janisary -janissaries -janissary -janitor -janitorial -janitors -janizaries -janizary -janty -japan -japanize -japanized -japanizes -japanizing -japanned -japanner -japanners -japanning -japans -jape -japed -japer -japeries -japers -japery -japes -japing -japingly -japonaiserie -japonaiseries -japonica -japonicas -jar -jardiniere -jardinieres -jarful -jarfuls -jargon -jargoned -jargonel -jargonels -jargoning -jargonish -jargonistic -jargonize -jargonized -jargonizes -jargonizing -jargons -jargoon -jargoons -jarhead -jarheads -jarina -jarinas -jarl -jarldom -jarldoms -jarls -jarosite -jarosites -jarovize -jarovized -jarovizes -jarovizing -jarrah -jarrahs -jarred -jarring -jarringly -jars -jarsful -jarvey -jarveys -jasmin -jasmine -jasmines -jasmins -jasper -jaspers -jasperware -jasperwares -jaspery -jassid -jassids -jato -jatos -jauk -jauked -jauking -jauks -jaunce -jaunced -jaunces -jauncing -jaundice -jaundiced -jaundices -jaundicing -jaunt -jaunted -jauntier -jauntiest -jauntily -jauntiness -jauntinesses -jaunting -jaunts -jaunty -jaup -jauped -jauping -jaups -java -javas -javelin -javelina -javelinas -javelined -javelining -javelins -jaw -jawan -jawans -jawbone -jawboned -jawboner -jawboners -jawbones -jawboning -jawbonings -jawbreaker -jawbreakers -jawed -jawing -jawlike -jawline -jawlines -jaws -jay -jaybird -jaybirds -jaygee -jaygees -jayhawker -jayhawkers -jays -jayvee -jayvees -jaywalk -jaywalked -jaywalker -jaywalkers -jaywalking -jaywalks -jazz -jazzed -jazzer -jazzers -jazzes -jazzier -jazziest -jazzily -jazziness -jazzinesses -jazzing -jazzlike -jazzman -jazzmen -jazzy -jealous -jealousies -jealously -jealousness -jealousnesses -jealousy -jean -jeans -jebel -jebels -jee -jeed -jeeing -jeep -jeeped -jeepers -jeeping -jeepney -jeepneys -jeeps -jeer -jeered -jeerer -jeerers -jeering -jeeringly -jeers -jees -jeez -jefe -jefes -jehad -jehads -jehu -jehus -jejuna -jejunal -jejune -jejunely -jejuneness -jejunenesses -jejunities -jejunity -jejunum -jell -jellaba -jellabas -jelled -jellied -jellies -jellified -jellifies -jellify -jellifying -jelling -jells -jelly -jellybean -jellybeans -jellyfish -jellyfishes -jellying -jellylike -jelutong -jelutongs -jemadar -jemadars -jemidar -jemidars -jemmied -jemmies -jemmy -jemmying -jennet -jennets -jennies -jenny -jeon -jeopard -jeoparded -jeopardies -jeoparding -jeopardise -jeopardised -jeopardises -jeopardising -jeopardize -jeopardized -jeopardizes -jeopardizing -jeopards -jeopardy -jerboa -jerboas -jereed -jereeds -jeremiad -jeremiads -jerid -jerids -jerk -jerked -jerker -jerkers -jerkier -jerkies -jerkiest -jerkily -jerkin -jerkiness -jerkinesses -jerking -jerkins -jerks -jerkwater -jerky -jeroboam -jeroboams -jerreed -jerreeds -jerrican -jerricans -jerrid -jerrids -jerries -jerry -jerrycan -jerrycans -jersey -jerseyed -jerseys -jess -jessamine -jessamines -jessant -jesse -jessed -jesses -jessing -jest -jested -jester -jesters -jestful -jesting -jestings -jests -jesuit -jesuitic -jesuitical -jesuitically -jesuitism -jesuitisms -jesuitries -jesuitry -jesuits -jet -jetbead -jetbeads -jete -jetes -jetlike -jetliner -jetliners -jeton -jetons -jetport -jetports -jets -jetsam -jetsams -jetsom -jetsoms -jetted -jettied -jettier -jetties -jettiest -jetting -jettison -jettisonable -jettisoned -jettisoning -jettisons -jetton -jettons -jetty -jettying -jeu -jeux -jew -jewed -jewel -jeweled -jeweler -jewelers -jeweling -jewelled -jeweller -jewelleries -jewellers -jewellery -jewellike -jewelling -jewelries -jewelry -jewels -jewelweed -jewelweeds -jewfish -jewfishes -jewing -jews -jezail -jezails -jezebel -jezebels -jiao -jib -jibb -jibbed -jibber -jibbers -jibbing -jibboom -jibbooms -jibbs -jibe -jibed -jiber -jibers -jibes -jibing -jibingly -jibs -jicama -jicamas -jiff -jiffies -jiffs -jiffy -jig -jigaboo -jigaboos -jigged -jigger -jiggered -jiggering -jiggers -jigging -jiggle -jiggled -jiggles -jigglier -jiggliest -jiggling -jiggly -jigs -jigsaw -jigsawed -jigsawing -jigsawn -jigsaws -jihad -jihads -jill -jillion -jillions -jills -jilt -jilted -jilter -jilters -jilting -jilts -jiminy -jimjams -jimmied -jimmies -jimminy -jimmy -jimmying -jimp -jimper -jimpest -jimply -jimpy -jimsonweed -jimsonweeds -jin -jingal -jingall -jingalls -jingals -jingko -jingkoes -jingle -jingled -jingler -jinglers -jingles -jinglier -jingliest -jingling -jingly -jingo -jingoes -jingoish -jingoism -jingoisms -jingoist -jingoistic -jingoistically -jingoists -jink -jinked -jinker -jinkers -jinking -jinks -jinn -jinnee -jinni -jinns -jinricksha -jinrickshas -jinrikisha -jinrikishas -jins -jinx -jinxed -jinxes -jinxing -jipijapa -jipijapas -jism -jisms -jitney -jitneys -jitter -jitterbug -jitterbugged -jitterbugging -jitterbugs -jittered -jitterier -jitteriest -jitteriness -jitterinesses -jittering -jitters -jittery -jiujitsu -jiujitsus -jiujutsu -jiujutsus -jive -jiveass -jived -jiver -jivers -jives -jivey -jivier -jiviest -jiving -jnana -jnanas -jo -joannes -job -jobbed -jobber -jobberies -jobbers -jobbery -jobbing -jobholder -jobholders -jobless -joblessness -joblessnesses -jobname -jobnames -jobs -jock -jockette -jockettes -jockey -jockeyed -jockeying -jockeys -jocko -jockos -jocks -jockstrap -jockstraps -jocose -jocosely -jocoseness -jocosenesses -jocosities -jocosity -jocular -jocularities -jocularity -jocularly -jocund -jocundities -jocundity -jocundly -jodhpur -jodhpurs -joe -joes -joey -joeys -jog -jogged -jogger -joggers -jogging -joggings -joggle -joggled -joggler -jogglers -joggles -joggling -jogs -johannes -john -johnboat -johnboats -johnnies -johnny -johnnycake -johnnycakes -johns -johnsongrass -johnsongrasses -join -joinable -joinder -joinders -joined -joiner -joineries -joiners -joinery -joining -joinings -joins -joint -jointed -jointedly -jointedness -jointednesses -jointer -jointers -jointing -jointly -jointress -jointresses -joints -jointure -jointured -jointures -jointuring -jointworm -jointworms -joist -joisted -joisting -joists -jojoba -jojobas -joke -joked -joker -jokers -jokes -jokester -jokesters -jokey -jokier -jokiest -jokily -jokiness -jokinesses -joking -jokingly -joky -jole -joles -jollied -jollier -jollies -jolliest -jollification -jollifications -jollified -jollifies -jollify -jollifying -jollily -jolliness -jollinesses -jollities -jollity -jolly -jollying -jolt -jolted -jolter -jolters -joltier -joltiest -joltily -jolting -jolts -jolty -jones -joneses -jongleur -jongleurs -jonquil -jonquils -joram -jorams -jordan -jordans -jorum -jorums -joseph -josephs -josh -joshed -josher -joshers -joshes -joshing -joss -josses -jostle -jostled -jostler -jostlers -jostles -jostling -jot -jota -jotas -jots -jotted -jotter -jotters -jotting -jottings -jotty -joual -jouals -jouk -jouked -jouking -jouks -joule -joules -jounce -jounced -jounces -jouncier -jounciest -jouncing -jouncy -journal -journalese -journaleses -journalism -journalisms -journalist -journalistic -journalistically -journalists -journalize -journalized -journalizer -journalizers -journalizes -journalizing -journals -journey -journeyed -journeyer -journeyers -journeying -journeyman -journeymen -journeys -journeywork -journeyworks -joust -jousted -jouster -jousters -jousting -jousts -jovial -jovialities -joviality -jovially -jovialties -jovialty -jow -jowar -jowars -jowed -jowing -jowl -jowled -jowlier -jowliest -jowls -jowly -jows -joy -joyance -joyances -joyed -joyful -joyfuller -joyfullest -joyfully -joyfulness -joyfulnesses -joying -joyless -joylessly -joylessness -joylessnesses -joyous -joyously -joyousness -joyousnesses -joypop -joypopped -joypopper -joypoppers -joypopping -joypops -joyridden -joyride -joyrider -joyriders -joyrides -joyriding -joyridings -joyrode -joys -joystick -joysticks -juba -jubas -jubbah -jubbahs -jube -jubes -jubhah -jubhahs -jubilance -jubilances -jubilant -jubilantly -jubilarian -jubilarians -jubilate -jubilated -jubilates -jubilating -jubilation -jubilations -jubile -jubilee -jubilees -jubiles -judas -judases -judder -juddered -juddering -judders -judge -judged -judgement -judgements -judger -judgers -judges -judgeship -judgeships -judging -judgmatic -judgmatical -judgmatically -judgment -judgmental -judgmentally -judgments -judicatories -judicatory -judicature -judicatures -judicial -judicially -judiciaries -judiciary -judicious -judiciously -judiciousness -judiciousnesses -judo -judoist -judoists -judoka -judokas -judos -jug -juga -jugal -jugate -jugful -jugfuls -jugged -juggernaut -juggernauts -jugging -juggle -juggled -juggler -juggleries -jugglers -jugglery -juggles -juggling -jugglings -jughead -jugheads -jugs -jugsful -jugula -jugular -jugulars -jugulate -jugulated -jugulates -jugulating -jugulum -jugum -jugums -juice -juiced -juicehead -juiceheads -juiceless -juicer -juicers -juices -juicier -juiciest -juicily -juiciness -juicinesses -juicing -juicy -jujitsu -jujitsus -juju -jujube -jujubes -jujuism -jujuisms -jujuist -jujuists -jujus -jujutsu -jujutsus -juke -jukebox -jukeboxes -juked -jukes -juking -julep -juleps -julienne -julienned -juliennes -julienning -jumbal -jumbals -jumble -jumbled -jumbler -jumblers -jumbles -jumbling -jumbo -jumbos -jumbuck -jumbucks -jump -jumped -jumper -jumpers -jumpier -jumpiest -jumpily -jumpiness -jumpinesses -jumping -jumpoff -jumpoffs -jumps -jumpsuit -jumpsuits -jumpy -jun -junco -juncoes -juncos -junction -junctional -junctions -junctural -juncture -junctures -jungle -jungled -junglelike -jungles -junglier -jungliest -jungly -junior -juniorate -juniorates -juniors -juniper -junipers -junk -junked -junker -junkers -junket -junketed -junketeer -junketeers -junketer -junketers -junketing -junkets -junkie -junkier -junkies -junkiest -junking -junkman -junkmen -junks -junky -junkyard -junkyards -junta -juntas -junto -juntos -jupe -jupes -jupon -jupons -jura -jural -jurally -jurant -jurants -jurat -juratory -jurats -jurel -jurels -juridic -juridical -juridically -juried -juries -jurisconsult -jurisconsults -jurisdiction -jurisdictional -jurisdictionally -jurisdictions -jurisprudence -jurisprudences -jurisprudent -jurisprudential -jurisprudentially -jurisprudents -jurist -juristic -juristically -jurists -juror -jurors -jury -jurying -juryman -jurymen -jus -jussive -jussives -just -justed -juster -justers -justest -justice -justices -justiciabilities -justiciability -justiciable -justiciar -justiciars -justifiabilities -justifiability -justifiable -justifiably -justification -justifications -justificative -justificatory -justified -justifier -justifiers -justifies -justify -justifying -justing -justle -justled -justles -justling -justly -justness -justnesses -justs -jut -jute -jutes -juts -jutted -juttied -jutties -jutting -jutty -juttying -juvenal -juvenals -juvenescence -juvenescences -juvenescent -juvenile -juveniles -juvenilia -juvenilities -juvenility -juxtapose -juxtaposed -juxtaposes -juxtaposing -juxtaposition -juxtapositional -juxtapositions -ka -kaas -kab -kabab -kababs -kabaka -kabakas -kabala -kabalas -kabar -kabars -kabaya -kabayas -kabbala -kabbalah -kabbalahs -kabbalas -kabeljou -kabeljous -kabiki -kabikis -kabob -kabobs -kabs -kabuki -kabukis -kachina -kachinas -kaddish -kaddishes -kaddishim -kadi -kadis -kae -kaes -kaf -kaffeeklatsch -kaffeeklatsches -kaffir -kaffirs -kaffiyeh -kaffiyehs -kafir -kafirs -kafs -kaftan -kaftans -kagu -kagus -kahuna -kahunas -kaiak -kaiaks -kaif -kaifs -kail -kails -kailyard -kailyards -kain -kainit -kainite -kainites -kainits -kains -kaiser -kaiserdom -kaiserdoms -kaiserin -kaiserins -kaiserism -kaiserisms -kaisers -kajeput -kajeputs -kaka -kakapo -kakapos -kakas -kakemono -kakemonos -kaki -kakiemon -kakiemons -kakis -kalam -kalams -kalanchoe -kalanchoes -kale -kaleidoscope -kaleidoscopes -kaleidoscopic -kaleidoscopically -kalends -kales -kalewife -kalewives -kaleyard -kaleyards -kalian -kalians -kalif -kalifate -kalifates -kalifs -kalimba -kalimbas -kaliph -kaliphs -kalium -kaliums -kallidin -kallidins -kallikrein -kallikreins -kalmia -kalmias -kalong -kalongs -kalpa -kalpak -kalpaks -kalpas -kalyptra -kalyptras -kamaaina -kamaainas -kamacite -kamacites -kamala -kamalas -kame -kames -kami -kamik -kamikaze -kamikazes -kamiks -kampong -kampongs -kamseen -kamseens -kamsin -kamsins -kana -kanamycin -kanamycins -kanas -kanban -kanbans -kane -kanes -kangaroo -kangaroos -kanji -kanjis -kantar -kantars -kantele -kanteles -kaoliang -kaoliangs -kaolin -kaoline -kaolines -kaolinic -kaolinite -kaolinites -kaolinitic -kaolins -kaon -kaons -kapa -kapas -kapellmeister -kapellmeisters -kaph -kaphs -kapok -kapoks -kappa -kappas -kaput -kaputt -karabiner -karabiners -karakul -karakuls -karaoke -karaokes -karat -karate -karateist -karateists -karates -karats -karma -karmas -karmic -karn -karns -karoo -karoos -kaross -karosses -karroo -karroos -karst -karstic -karsts -kart -karting -kartings -karts -karyogamies -karyogamy -karyokineses -karyokinesis -karyokinetic -karyologic -karyological -karyologies -karyology -karyolymph -karyolymphs -karyosome -karyosomes -karyotin -karyotins -karyotype -karyotyped -karyotypes -karyotypic -karyotypically -karyotyping -kas -kasbah -kasbahs -kasha -kashas -kasher -kashered -kashering -kashers -kashmir -kashmirs -kashrut -kashruth -kashruths -kashruts -kat -kata -katabatic -katakana -katakanas -katas -katchina -katchinas -katcina -katcinas -katharses -katharsis -kathodal -kathode -kathodes -kathodic -kation -kations -kats -katydid -katydids -katzenjammer -katzenjammers -kauri -kauries -kauris -kaury -kava -kavakava -kavakavas -kavas -kavass -kavasses -kay -kayak -kayaked -kayaker -kayakers -kayaking -kayakings -kayaks -kayles -kayo -kayoed -kayoes -kayoing -kayos -kays -kazachki -kazachok -kazatski -kazatskies -kazatsky -kazoo -kazoos -kbar -kbars -kea -keas -kebab -kebabs -kebar -kebars -kebbie -kebbies -kebbock -kebbocks -kebbuck -kebbucks -keblah -keblahs -kebob -kebobs -keck -kecked -kecking -keckle -keckled -keckles -keckling -kecks -keddah -keddahs -kedge -kedged -kedgeree -kedgerees -kedges -kedging -keef -keefs -keek -keeked -keeking -keeks -keel -keelage -keelages -keelboat -keelboats -keeled -keelhale -keelhaled -keelhales -keelhaling -keelhaul -keelhauled -keelhauling -keelhauls -keeling -keelless -keels -keelson -keelsons -keen -keened -keener -keeners -keenest -keening -keenly -keenness -keennesses -keens -keep -keepable -keeper -keepers -keeping -keepings -keeps -keepsake -keepsakes -keeshond -keeshonden -keeshonds -keester -keesters -keet -keets -keeve -keeves -kef -keffiyeh -keffiyehs -kefir -kefirs -kefs -keg -kegeler -kegelers -kegler -keglers -kegling -keglings -kegs -keir -keirs -keister -keisters -keitloa -keitloas -kelep -keleps -kelim -kelims -kellies -kelly -keloid -keloidal -keloids -kelp -kelped -kelpie -kelpies -kelping -kelps -kelpy -kelson -kelsons -kelter -kelters -kelvin -kelvins -kemp -kemps -kempt -ken -kenaf -kenafs -kench -kenches -kendo -kendos -kenned -kennel -kenneled -kenneling -kennelled -kennelling -kennels -kenning -kennings -keno -kenos -kenosis -kenosises -kenotic -kenotron -kenotrons -kens -kenspeckle -kent -kentledge -kentledges -kep -kephalin -kephalins -kepi -kepis -kepped -keppen -kepping -keps -kept -keramic -keramics -keratin -keratinization -keratinizations -keratinize -keratinized -keratinizes -keratinizing -keratinophilic -keratinous -keratins -keratitides -keratitis -keratoconjunctivitis -keratoconjunctivitises -keratoid -keratoma -keratomas -keratomata -keratoplasties -keratoplasty -keratose -keratoses -keratosis -keratotic -keratotomies -keratotomy -kerb -kerbed -kerbing -kerbs -kerchief -kerchiefed -kerchiefs -kerchieves -kerchoo -kerf -kerfed -kerfing -kerfs -kerfuffle -kerfuffles -kermes -kermeses -kermess -kermesse -kermesses -kermis -kermises -kern -kerne -kerned -kernel -kerneled -kerneling -kernelled -kernelling -kernels -kernes -kerning -kernite -kernites -kerns -kerogen -kerogens -kerosene -kerosenes -kerosine -kerosines -kerplunk -kerplunked -kerplunking -kerplunks -kerria -kerrias -kerries -kerry -kersey -kerseymere -kerseymeres -kerseys -kerygma -kerygmas -kerygmata -kerygmatic -kestrel -kestrels -ketch -ketches -ketchup -ketchups -ketene -ketenes -keto -ketogeneses -ketogenesis -ketogenic -ketol -ketols -ketone -ketones -ketonic -ketose -ketoses -ketosis -ketosteroid -ketosteroids -ketotic -kettle -kettledrum -kettledrums -kettles -kevel -kevels -kevil -kevils -kex -kexes -key -keyboard -keyboarded -keyboarder -keyboarders -keyboarding -keyboardist -keyboardists -keyboards -keybutton -keybuttons -keycard -keycards -keyed -keyhole -keyholes -keying -keyless -keynote -keynoted -keynoter -keynoters -keynotes -keynoting -keypad -keypads -keypunch -keypunched -keypuncher -keypunchers -keypunches -keypunching -keys -keyset -keysets -keyster -keysters -keystone -keystones -keystroke -keystroked -keystrokes -keystroking -keyway -keyways -keyword -keywords -khaddar -khaddars -khadi -khadis -khaf -khafs -khaki -khakis -khalif -khalifa -khalifas -khalifs -khamseen -khamseens -khamsin -khamsins -khan -khanate -khanates -khans -khaph -khaphs -khat -khats -khazen -khazenim -khazens -kheda -khedah -khedahs -khedas -khedival -khedive -khedives -khedivial -khet -kheth -kheths -khets -khi -khirkah -khirkahs -khis -khoum -khoums -kiang -kiangs -kiaugh -kiaughs -kibbe -kibbeh -kibbehs -kibbes -kibbi -kibbis -kibbitz -kibbitzed -kibbitzer -kibbitzers -kibbitzes -kibbitzing -kibble -kibbled -kibbles -kibbling -kibbutz -kibbutzim -kibbutznik -kibbutzniks -kibe -kibei -kibeis -kibes -kibitz -kibitzed -kibitzer -kibitzers -kibitzes -kibitzing -kibla -kiblah -kiblahs -kiblas -kibosh -kiboshed -kiboshes -kiboshing -kick -kickable -kickback -kickbacks -kickball -kickballs -kickboard -kickboards -kickboxer -kickboxers -kickboxing -kickboxings -kicked -kicker -kickers -kickier -kickiest -kicking -kickoff -kickoffs -kicks -kickshaw -kickshaws -kickstand -kickstands -kickstart -kickstarted -kickstarting -kickstarts -kickup -kickups -kicky -kid -kidded -kidder -kidders -kiddie -kiddies -kidding -kiddingly -kiddish -kiddo -kiddoes -kiddos -kiddush -kiddushes -kiddushim -kiddy -kidlike -kidnap -kidnaped -kidnapee -kidnapees -kidnaper -kidnapers -kidnaping -kidnapped -kidnappee -kidnappees -kidnapper -kidnappers -kidnapping -kidnaps -kidney -kidneys -kids -kidskin -kidskins -kidvid -kidvids -kief -kiefs -kielbasa -kielbasas -kielbasi -kielbasy -kier -kiers -kieselguhr -kieselguhrs -kieserite -kieserites -kiester -kiesters -kif -kifs -kike -kikes -kilderkin -kilderkins -kilim -kilims -kill -killdee -killdeer -killdeers -killdees -killed -killer -killers -killick -killicks -killie -killies -killifish -killifishes -killing -killingly -killings -killjoy -killjoys -killock -killocks -kills -kiln -kilned -kilning -kilns -kilo -kilobar -kilobars -kilobase -kilobases -kilobaud -kilobauds -kilobit -kilobits -kilobyte -kilobytes -kilocalorie -kilocalories -kilocycle -kilocycles -kilogauss -kilogausses -kilogram -kilograms -kilohertz -kilojoule -kilojoules -kiloliter -kiloliters -kilometer -kilometers -kilomole -kilomoles -kiloparsec -kiloparsecs -kilopascal -kilopascals -kilorad -kilorads -kilos -kiloton -kilotons -kilovolt -kilovolts -kilowatt -kilowatts -kilt -kilted -kilter -kilters -kiltie -kilties -kilting -kiltings -kilts -kilty -kimberlite -kimberlites -kimchee -kimchees -kimchi -kimchis -kimono -kimonoed -kimonos -kin -kina -kinas -kinase -kinases -kind -kinder -kindergarten -kindergartener -kindergarteners -kindergartens -kindergartner -kindergartners -kindest -kindhearted -kindheartedly -kindheartedness -kindheartednesses -kindle -kindled -kindler -kindlers -kindles -kindless -kindlessly -kindlier -kindliest -kindliness -kindlinesses -kindling -kindlings -kindly -kindness -kindnesses -kindred -kindreds -kinds -kine -kinema -kinemas -kinematic -kinematical -kinematically -kinematics -kines -kinescope -kinescoped -kinescopes -kinescoping -kineses -kinesic -kinesics -kinesiologies -kinesiology -kinesis -kinestheses -kinesthesia -kinesthesias -kinesthesis -kinesthetic -kinesthetically -kinetic -kinetically -kineticist -kineticists -kinetics -kinetin -kinetins -kinetochore -kinetochores -kinetoplast -kinetoplasts -kinetoscope -kinetoscopes -kinetosome -kinetosomes -kinfolk -kinfolks -king -kingbird -kingbirds -kingbolt -kingbolts -kingcraft -kingcrafts -kingcup -kingcups -kingdom -kingdoms -kinged -kingfish -kingfisher -kingfishers -kingfishes -kinghood -kinghoods -kinging -kingless -kinglet -kinglets -kinglier -kingliest -kinglike -kingliness -kinglinesses -kingly -kingmaker -kingmakers -kingpin -kingpins -kingpost -kingposts -kings -kingship -kingships -kingside -kingsides -kingwood -kingwoods -kinin -kinins -kink -kinkajou -kinkajous -kinked -kinkier -kinkiest -kinkily -kinkiness -kinkinesses -kinking -kinks -kinky -kinnikinnick -kinnikinnicks -kino -kinos -kins -kinsfolk -kinship -kinships -kinsman -kinsmen -kinswoman -kinswomen -kiosk -kiosks -kip -kipped -kippen -kipper -kippered -kipperer -kipperers -kippering -kippers -kipping -kips -kipskin -kipskins -kir -kirigami -kirigamis -kirk -kirkman -kirkmen -kirks -kirmess -kirmesses -kirn -kirned -kirning -kirns -kirs -kirsch -kirsches -kirtle -kirtled -kirtles -kishka -kishkas -kishke -kishkes -kismat -kismats -kismet -kismetic -kismets -kiss -kissable -kissably -kissed -kisser -kissers -kisses -kissing -kissy -kist -kistful -kistfuls -kists -kit -kitchen -kitchenette -kitchenettes -kitchens -kitchenware -kitchenwares -kite -kited -kitelike -kiter -kiters -kites -kith -kithara -kitharas -kithe -kithed -kithes -kithing -kiths -kiting -kitling -kitlings -kits -kitsch -kitsches -kitschy -kitted -kittel -kitten -kittened -kittening -kittenish -kittenishly -kittenishness -kittenishnesses -kittens -kitties -kitting -kittiwake -kittiwakes -kittle -kittled -kittler -kittles -kittlest -kittling -kitty -kiva -kivas -kiwi -kiwifruit -kiwifruits -kiwis -klatch -klatches -klatsch -klatsches -klavern -klaverns -klaxon -klaxons -kleagle -kleagles -klebsiella -klebsiellas -klepht -klephtic -klephts -kleptomania -kleptomaniac -kleptomaniacs -kleptomanias -klezmer -klezmers -klezmorim -klister -klisters -klong -klongs -kloof -kloofs -kludge -kludges -kludgy -kluge -kluges -klutz -klutzes -klutzier -klutziest -klutziness -klutzinesses -klutzy -klystron -klystrons -knack -knacked -knacker -knackered -knackeries -knackers -knackery -knacking -knacks -knackwurst -knackwursts -knap -knapped -knapper -knappers -knapping -knaps -knapsack -knapsacked -knapsacks -knapweed -knapweeds -knar -knarred -knarry -knars -knaur -knaurs -knave -knaveries -knavery -knaves -knavish -knavishly -knawel -knawels -knead -kneadable -kneaded -kneader -kneaders -kneading -kneads -knee -kneecap -kneecapped -kneecapping -kneecappings -kneecaps -kneed -kneehole -kneeholes -kneeing -kneel -kneeled -kneeler -kneelers -kneeling -kneels -kneepad -kneepads -kneepan -kneepans -knees -kneesock -kneesocks -knell -knelled -knelling -knells -knelt -knesset -knessets -knew -knickerbocker -knickerbockers -knickers -knickknack -knickknacks -knife -knifed -knifelike -knifepoint -knifepoints -knifer -knifers -knifes -knifing -knight -knighted -knighthood -knighthoods -knighting -knightliness -knightlinesses -knightly -knights -knish -knishes -knit -knits -knitted -knitter -knitters -knitting -knittings -knitwear -knives -knob -knobbed -knobbier -knobbiest -knobblier -knobbliest -knobbly -knobby -knobkerrie -knobkerries -knoblike -knobs -knock -knockabout -knockabouts -knockdown -knockdowns -knocked -knocker -knockers -knocking -knockoff -knockoffs -knockout -knockouts -knocks -knockwurst -knockwursts -knoll -knolled -knoller -knollers -knolling -knolls -knolly -knop -knopped -knops -knosp -knosps -knot -knotgrass -knotgrasses -knothole -knotholes -knotless -knotlike -knots -knotted -knotter -knotters -knottier -knottiest -knottily -knottiness -knottinesses -knotting -knottings -knotty -knotweed -knotweeds -knout -knouted -knouting -knouts -know -knowable -knower -knowers -knowing -knowinger -knowingest -knowingly -knowingness -knowingnesses -knowings -knowledge -knowledgeabilities -knowledgeability -knowledgeable -knowledgeableness -knowledgeablenesses -knowledgeably -knowledges -known -knowns -knows -knubbier -knubbiest -knubby -knuckle -knuckleball -knuckleballer -knuckleballers -knuckleballs -knucklebone -knucklebones -knuckled -knucklehead -knuckleheaded -knuckleheads -knuckler -knucklers -knuckles -knucklier -knuckliest -knuckling -knuckly -knur -knurl -knurled -knurlier -knurliest -knurling -knurls -knurly -knurs -koa -koala -koalas -koan -koans -koas -kob -kobo -kobold -kobolds -kobos -kobs -koel -koels -kohl -kohlrabi -kohlrabies -kohls -koi -koine -koines -kois -kokanee -kokanees -kola -kolache -kolacky -kolas -kolbasi -kolbasis -kolbassi -kolbassis -kolhoz -kolhozes -kolhozy -kolinski -kolinskies -kolinsky -kolkhos -kolkhoses -kolkhosy -kolkhoz -kolkhozes -kolkhoznik -kolkhozniki -kolkhozniks -kolkhozy -kolkoz -kolkozes -kolkozy -kolo -kolos -komatik -komatiks -komondor -komondorock -komondorok -komondors -konk -konked -konking -konks -koodoo -koodoos -kook -kookaburra -kookaburras -kookie -kookier -kookiest -kookiness -kookinesses -kooks -kooky -kop -kopeck -kopecks -kopek -kopeks -koph -kophs -kopje -kopjes -koppa -koppas -koppie -koppies -kops -kor -korai -korat -korats -kore -kors -korun -koruna -korunas -koruny -kos -kosher -koshered -koshering -koshers -koss -koto -kotos -kotow -kotowed -kotower -kotowers -kotowing -kotows -koumis -koumises -koumiss -koumisses -koumys -koumyses -koumyss -koumysses -kouprey -koupreys -kouroi -kouros -kousso -koussos -kowtow -kowtowed -kowtower -kowtowers -kowtowing -kowtows -kraal -kraaled -kraaling -kraals -kraft -krafts -krait -kraits -kraken -krakens -krater -kraters -kraut -krauts -kreep -kreeps -kremlin -kremlinologies -kremlinologist -kremlinologists -kremlinology -kremlins -kreplach -kreutzer -kreutzers -kreuzer -kreuzers -krill -krills -krimmer -krimmers -kris -krises -krona -krone -kronen -kroner -kronor -kronur -kroon -krooni -kroons -krubi -krubis -krubut -krubuts -krugerrand -krugerrands -kruller -krullers -krumhorn -krumhorns -krummholz -krummhorn -krummhorns -kryolite -kryolites -kryolith -kryoliths -krypton -kryptons -kuchen -kudo -kudos -kudu -kudus -kudzu -kudzus -kue -kues -kugel -kugels -kukri -kukris -kulak -kulaki -kulaks -kultur -kulturs -kumiss -kumisses -kummel -kummels -kumquat -kumquats -kumys -kumyses -kuna -kundalini -kundalinis -kune -kunzite -kunzites -kurbash -kurbashed -kurbashes -kurbashing -kurgan -kurgans -kurrajong -kurrajongs -kurta -kurtas -kurtoses -kurtosis -kurtosises -kuru -kurus -kusso -kussos -kuvasz -kuvaszok -kvas -kvases -kvass -kvasses -kvetch -kvetched -kvetches -kvetchier -kvetchiest -kvetching -kvetchy -kwacha -kwachas -kwanza -kwanzas -kwashiorkor -kwashiorkors -kyack -kyacks -kyak -kyaks -kyanise -kyanised -kyanises -kyanising -kyanite -kyanites -kyanize -kyanized -kyanizes -kyanizing -kyar -kyars -kyat -kyats -kybosh -kyboshed -kyboshes -kyboshing -kylices -kylikes -kylix -kymogram -kymograms -kymograph -kymographic -kymographies -kymographs -kymography -kyphoses -kyphosis -kyphotic -kyrie -kyries -kyte -kytes -kythe -kythed -kythes -kything -la -laager -laagered -laagering -laagers -laari -lab -labanotation -labanotations -labara -labarum -labarums -labdanum -labdanums -label -labelable -labeled -labeler -labelers -labeling -labella -labelled -labeller -labellers -labelling -labellum -labels -labia -labial -labialization -labializations -labialize -labialized -labializes -labializing -labially -labials -labiate -labiated -labiates -labile -labilities -lability -labiodental -labiodentals -labiovelar -labiovelars -labium -labor -laboratories -laboratory -labored -laborer -laborers -laboring -laborious -laboriously -laboriousness -laboriousnesses -laborite -laborites -labors -laborsaving -labour -laboured -labourer -labourers -labouring -labours -labra -labrador -labradorite -labradorites -labradors -labret -labrets -labroid -labroids -labrum -labrums -labrusca -labs -laburnum -laburnums -labyrinth -labyrinthian -labyrinthine -labyrinthodont -labyrinthodonts -labyrinths -lac -laccolith -laccolithic -laccoliths -lace -laced -laceless -lacelike -lacer -lacerate -lacerated -lacerates -lacerating -laceration -lacerations -lacerative -lacers -lacertid -lacertids -laces -lacewing -lacewings -lacewood -lacewoods -lacework -laceworks -lacey -laches -lachrymal -lachrymator -lachrymators -lachrymose -lachrymosely -lachrymosities -lachrymosity -lacier -laciest -lacily -laciness -lacinesses -lacing -lacings -laciniate -laciniation -laciniations -lack -lackadaisical -lackadaisically -lackaday -lacked -lacker -lackered -lackering -lackers -lackey -lackeyed -lackeying -lackeys -lacking -lackluster -lacklusters -lacks -laconic -laconically -laconism -laconisms -lacquer -lacquered -lacquerer -lacquerers -lacquering -lacquers -lacquerware -lacquerwares -lacquerwork -lacquerworks -lacquey -lacqueyed -lacqueying -lacqueys -lacrimal -lacrimals -lacrimation -lacrimations -lacrimator -lacrimators -lacrosse -lacrosses -lacs -lactalbumin -lactalbumins -lactam -lactams -lactary -lactase -lactases -lactate -lactated -lactates -lactating -lactation -lactational -lactations -lacteal -lacteals -lactean -lacteous -lactic -lactiferous -lactobacilli -lactobacillus -lactogenic -lactoglobulin -lactoglobulins -lactone -lactones -lactonic -lactose -lactoses -lacuna -lacunae -lacunal -lacunar -lacunaria -lacunars -lacunary -lacunas -lacunate -lacune -lacunes -lacunose -lacustrine -lacy -lad -ladanum -ladanums -ladder -laddered -laddering -ladderlike -ladders -laddie -laddies -lade -laded -laden -ladened -ladening -ladens -lader -laders -lades -ladies -lading -ladings -ladino -ladinos -ladle -ladled -ladleful -ladlefuls -ladler -ladlers -ladles -ladling -ladron -ladrone -ladrones -ladrons -lads -lady -ladybird -ladybirds -ladybug -ladybugs -ladyfinger -ladyfingers -ladyfish -ladyfishes -ladyhood -ladyhoods -ladyish -ladykin -ladykins -ladylike -ladylove -ladyloves -ladypalm -ladypalms -ladyship -ladyships -laetrile -laetriles -laevo -lag -lagan -lagans -lagend -lagends -lager -lagered -lagering -lagers -laggard -laggardly -laggardness -laggardnesses -laggards -lagged -lagger -laggers -lagging -laggings -lagnappe -lagnappes -lagniappe -lagniappes -lagomorph -lagomorphs -lagoon -lagoonal -lagoons -lags -laguna -lagunas -lagune -lagunes -lahar -lahars -laic -laical -laically -laich -laichs -laicise -laicised -laicises -laicising -laicism -laicisms -laicization -laicizations -laicize -laicized -laicizes -laicizing -laics -laid -laigh -laighs -lain -lair -laird -lairdly -lairds -laired -lairing -lairs -laitance -laitances -laith -laithly -laities -laity -lake -laked -lakefront -lakefronts -lakelike -lakeport -lakeports -laker -lakers -lakes -lakeshore -lakeshores -lakeside -lakesides -lakh -lakhs -lakier -lakiest -laking -lakings -laky -lall -lallan -lalland -lallands -lallans -lalled -lalling -lalls -lallygag -lallygagged -lallygagging -lallygags -lam -lama -lamas -lamaseries -lamasery -lamb -lambast -lambaste -lambasted -lambastes -lambasting -lambasts -lambda -lambdas -lambdoid -lambed -lambencies -lambency -lambent -lambently -lamber -lambers -lambert -lamberts -lambie -lambier -lambies -lambiest -lambing -lambkill -lambkills -lambkin -lambkins -lamblike -lambrequin -lambrequins -lambs -lambskin -lambskins -lamby -lame -lamebrain -lamebrained -lamebrains -lamed -lamedh -lamedhs -lameds -lamella -lamellae -lamellar -lamellas -lamellate -lamellately -lamellibranch -lamellibranchs -lamellicorn -lamellicorns -lamelliform -lamely -lameness -lamenesses -lament -lamentable -lamentableness -lamentablenesses -lamentably -lamentation -lamentations -lamented -lamentedly -lamenter -lamenters -lamenting -laments -lamer -lames -lamest -lamia -lamiae -lamias -lamina -laminae -laminal -laminar -laminaria -laminarian -laminarians -laminarias -laminarin -laminarins -laminary -laminas -laminate -laminated -laminates -laminating -lamination -laminations -laminator -laminators -laming -laminitis -laminitises -laminose -laminous -lamister -lamisters -lammed -lammergeier -lammergeiers -lammergeyer -lammergeyers -lamming -lamp -lampad -lampads -lampas -lampases -lampblack -lampblacks -lamped -lampers -lamperses -lamping -lampion -lampions -lamplight -lamplighter -lamplighters -lamplights -lampoon -lampooned -lampooner -lampooneries -lampooners -lampoonery -lampooning -lampoons -lamppost -lampposts -lamprey -lampreys -lamps -lampshell -lampshells -lampyrid -lampyrids -lams -lamster -lamsters -lanai -lanais -lanate -lanated -lance -lanced -lancelet -lancelets -lanceolate -lancer -lancers -lances -lancet -lanceted -lancets -lancewood -lancewoods -lanciers -lancinating -lancing -land -landau -landaulet -landaulets -landaus -landed -lander -landers -landfall -landfalls -landfill -landfills -landform -landforms -landgrab -landgrabs -landholder -landholders -landholding -landholdings -landing -landings -landladies -landlady -landler -landlers -landless -landlessness -landlessnesses -landline -landlines -landlocked -landlord -landlordism -landlordisms -landlords -landlubber -landlubberliness -landlubberlinesses -landlubberly -landlubbers -landlubbing -landman -landmark -landmarks -landmass -landmasses -landmen -landmine -landmines -landowner -landowners -landownership -landownerships -landowning -landownings -lands -landscape -landscaped -landscaper -landscapers -landscapes -landscaping -landscapist -landscapists -landside -landsides -landskip -landskips -landsleit -landslid -landslide -landslides -landsliding -landslip -landslips -landsman -landsmen -landward -lane -lanely -lanes -laneway -laneways -lang -langbeinite -langbeinites -langlauf -langlaufer -langlaufers -langlaufs -langley -langleys -langostino -langostinos -langouste -langoustes -langoustine -langoustines -langrage -langrages -langrel -langrels -langshan -langshans -langsyne -langsynes -language -languages -langue -langues -languet -languets -languid -languidly -languidness -languidnesses -languish -languished -languisher -languishers -languishes -languishing -languishingly -languishment -languishments -languor -languorous -languorously -languors -langur -langurs -laniard -laniards -laniaries -laniary -lanital -lanitals -lank -lanker -lankest -lankier -lankiest -lankily -lankiness -lankinesses -lankly -lankness -lanknesses -lanky -lanner -lanneret -lannerets -lanners -lanolin -lanoline -lanolines -lanolins -lanose -lanosities -lanosity -lantana -lantanas -lantern -lanterns -lanthanide -lanthanides -lanthanum -lanthanums -lanthorn -lanthorns -lanuginous -lanugo -lanugos -lanyard -lanyards -lap -laparoscope -laparoscopes -laparoscopic -laparoscopies -laparoscopist -laparoscopists -laparoscopy -laparotomies -laparotomy -lapboard -lapboards -lapdog -lapdogs -lapel -lapeled -lapelled -lapels -lapful -lapfuls -lapidarian -lapidaries -lapidary -lapidate -lapidated -lapidates -lapidating -lapides -lapidified -lapidifies -lapidify -lapidifying -lapidist -lapidists -lapilli -lapillus -lapin -lapins -lapis -lapises -lapped -lapper -lappered -lappering -lappers -lappet -lappeted -lappets -lapping -laps -lapsable -lapse -lapsed -lapser -lapsers -lapses -lapsible -lapsing -lapstrake -lapsus -laptop -laptops -lapwing -lapwings -lar -larboard -larboards -larcener -larceners -larcenies -larcenist -larcenists -larcenous -larcenously -larceny -larch -larches -lard -larded -larder -larders -lardier -lardiest -larding -lardlike -lardon -lardons -lardoon -lardoons -lards -lardy -laree -larees -lares -largando -large -largehearted -largeheartedness -largeheartednesses -largely -largemouth -largemouths -largeness -largenesses -larger -larges -largess -largesse -largesses -largest -larghetto -larghettos -largish -largo -largos -lari -lariat -lariated -lariating -lariats -larine -laris -lark -larked -larker -larkers -larkier -larkiest -larkiness -larkinesses -larking -larkish -larks -larksome -larkspur -larkspurs -larky -larrigan -larrigans -larrikin -larrikins -larrup -larruped -larruper -larrupers -larruping -larrups -lars -larum -larums -larva -larvae -larval -larvas -larvicidal -larvicide -larvicides -laryngal -laryngals -laryngeal -laryngeals -laryngectomee -laryngectomees -laryngectomies -laryngectomized -laryngectomy -larynges -laryngitic -laryngitides -laryngitis -laryngologies -laryngology -laryngoscope -laryngoscopes -laryngoscopies -laryngoscopy -larynx -larynxes -las -lasagna -lasagnas -lasagne -lasagnes -lascar -lascars -lascivious -lasciviously -lasciviousness -lasciviousnesses -lase -lased -laser -lasers -lases -lash -lashed -lasher -lashers -lashes -lashing -lashings -lashins -lashkar -lashkars -lasing -lass -lasses -lassie -lassies -lassitude -lassitudes -lasso -lassoed -lassoer -lassoers -lassoes -lassoing -lassos -last -lasted -laster -lasters -lasting -lastingly -lastingness -lastingnesses -lastings -lastly -lasts -lat -latakia -latakias -latch -latched -latches -latchet -latchets -latching -latchkey -latchkeys -latchstring -latchstrings -late -latecomer -latecomers -lated -lateen -lateener -lateeners -lateens -lately -laten -latencies -latency -latened -lateness -latenesses -latening -latens -latensification -latensifications -latent -latently -latents -later -laterad -lateral -lateraled -lateraling -lateralization -lateralizations -lateralize -lateralized -lateralizes -lateralizing -lateralled -lateralling -laterally -laterals -laterite -laterites -lateritic -laterization -laterizations -laterize -laterized -laterizes -laterizing -latest -latests -latewood -latewoods -latex -latexes -lath -lathe -lathed -lather -lathered -latherer -latherers -lathering -lathers -lathery -lathes -lathi -lathier -lathiest -lathing -lathings -lathis -laths -lathwork -lathworks -lathy -lathyrism -lathyrisms -lathyritic -lati -latices -laticifer -laticifers -latifundia -latifundio -latifundios -latifundium -latigo -latigoes -latigos -latinities -latinity -latinization -latinizations -latinize -latinized -latinizes -latinizing -latino -latinos -latish -latitude -latitudes -latitudinal -latitudinally -latitudinarian -latitudinarianism -latitudinarianisms -latitudinarians -latke -latkes -latosol -latosolic -latosols -latria -latrias -latrine -latrines -lats -latte -latten -lattens -latter -latterly -lattes -lattice -latticed -lattices -latticework -latticeworks -latticing -lattin -lattins -lauan -lauans -laud -laudable -laudableness -laudablenesses -laudably -laudanum -laudanums -laudation -laudations -laudative -laudator -laudators -laudatory -lauded -lauder -lauders -lauding -lauds -laugh -laughable -laughableness -laughablenesses -laughably -laughed -laugher -laughers -laughing -laughingly -laughings -laughingstock -laughingstocks -laughs -laughter -laughters -launce -launces -launch -launched -launcher -launchers -launches -launching -launchpad -launchpads -launder -laundered -launderer -launderers -launderette -launderettes -laundering -launders -laundress -laundresses -laundrette -laundrettes -laundries -laundromat -laundromats -laundry -laundryman -laundrymen -laura -laurae -lauras -laureate -laureated -laureates -laureateship -laureateships -laureating -laureation -laureations -laurel -laureled -laureling -laurelled -laurelling -laurels -lauwine -lauwines -lav -lava -lavabo -lavaboes -lavabos -lavage -lavages -lavalava -lavalavas -lavalier -lavaliere -lavalieres -lavaliers -lavalike -lavalliere -lavallieres -lavas -lavation -lavations -lavatories -lavatory -lave -laved -laveer -laveered -laveering -laveers -lavender -lavendered -lavendering -lavenders -laver -laverock -laverocks -lavers -laves -laving -lavish -lavished -lavisher -lavishers -lavishes -lavishest -lavishing -lavishly -lavishness -lavishnesses -lavrock -lavrocks -lavs -law -lawbook -lawbooks -lawbreaker -lawbreakers -lawbreaking -lawbreakings -lawed -lawful -lawfully -lawfulness -lawfulnesses -lawgiver -lawgivers -lawine -lawines -lawing -lawings -lawless -lawlessly -lawlessness -lawlessnesses -lawlike -lawmaker -lawmakers -lawmaking -lawmakings -lawman -lawmen -lawn -lawnmower -lawnmowers -lawns -lawny -lawrencium -lawrenciums -laws -lawsuit -lawsuits -lawyer -lawyered -lawyering -lawyerings -lawyerlike -lawyerly -lawyers -lax -laxation -laxations -laxative -laxatives -laxer -laxest -laxities -laxity -laxly -laxness -laxnesses -lay -layabout -layabouts -layaway -layaways -layed -layer -layerage -layerages -layered -layering -layerings -layers -layette -layettes -laying -layman -laymen -layoff -layoffs -layout -layouts -layover -layovers -laypeople -layperson -laypersons -lays -layup -layups -laywoman -laywomen -lazar -lazaret -lazarets -lazarette -lazarettes -lazaretto -lazarettos -lazars -laze -lazed -lazes -lazied -lazier -lazies -laziest -lazily -laziness -lazinesses -lazing -lazuli -lazulis -lazulite -lazulites -lazurite -lazurites -lazy -lazybones -lazying -lazyish -lea -leach -leachabilities -leachability -leachable -leachate -leachates -leached -leacher -leachers -leaches -leachier -leachiest -leaching -leachy -lead -leaded -leaden -leadenly -leadenness -leadennesses -leader -leaderboard -leaderboards -leaderless -leaders -leadership -leaderships -leadier -leadiest -leading -leadings -leadless -leadman -leadmen -leadoff -leadoffs -leadplant -leadplants -leads -leadscrew -leadscrews -leadsman -leadsmen -leadwork -leadworks -leadwort -leadworts -leady -leaf -leafage -leafages -leafed -leafhopper -leafhoppers -leafier -leafiest -leafing -leafless -leaflet -leafleted -leafleteer -leafleteers -leafleting -leaflets -leafletted -leafletting -leaflike -leafs -leafstalk -leafstalks -leafworm -leafworms -leafy -league -leagued -leaguer -leaguered -leaguering -leaguers -leagues -leaguing -leak -leakage -leakages -leaked -leaker -leakers -leakier -leakiest -leakily -leakiness -leakinesses -leaking -leakless -leakproof -leaks -leaky -leal -leally -lealties -lealty -lean -leaned -leaner -leaners -leanest -leaning -leanings -leanly -leanness -leannesses -leans -leant -leap -leaped -leaper -leapers -leapfrog -leapfrogged -leapfrogging -leapfrogs -leaping -leaps -leapt -lear -learier -leariest -learn -learnable -learned -learnedly -learnedness -learnednesses -learner -learners -learning -learnings -learns -learnt -lears -leary -leas -leasable -lease -leaseback -leasebacks -leased -leasehold -leaseholder -leaseholders -leaseholds -leaser -leasers -leases -leash -leashed -leashes -leashing -leasing -leasings -least -leasts -leastways -leastwise -leather -leatherback -leatherbacks -leathered -leatherette -leatherettes -leathering -leatherleaf -leatherleaves -leatherlike -leathern -leatherneck -leathernecks -leathers -leatherwood -leatherwoods -leathery -leave -leaved -leaven -leavened -leavening -leavenings -leavens -leaver -leavers -leaves -leavier -leaviest -leaving -leavings -leavy -leben -lebens -lebensraum -lebensraums -lech -lechayim -lechayims -leched -lecher -lechered -lecheries -lechering -lecherous -lecherously -lecherousness -lecherousnesses -lechers -lechery -leches -leching -lechwe -lechwes -lecithin -lecithinase -lecithinases -lecithins -lectern -lecterns -lectin -lectins -lection -lectionaries -lectionary -lections -lector -lectors -lectotype -lectotypes -lecture -lectured -lecturer -lecturers -lectures -lectureship -lectureships -lecturing -lecythi -lecythis -lecythus -led -lederhosen -ledge -ledger -ledgers -ledges -ledgier -ledgiest -ledgy -lee -leeboard -leeboards -leech -leeched -leeches -leeching -leechlike -leek -leeks -leer -leered -leerier -leeriest -leerily -leering -leeringly -leers -leery -lees -leet -leets -leeward -leewards -leeway -leeways -left -lefter -leftest -lefties -leftish -leftism -leftisms -leftist -leftists -leftmost -leftover -leftovers -lefts -leftward -leftwards -leftwing -lefty -leg -legacies -legacy -legal -legalese -legaleses -legalise -legalised -legalises -legalising -legalism -legalisms -legalist -legalistic -legalistically -legalists -legalities -legality -legalization -legalizations -legalize -legalized -legalizer -legalizers -legalizes -legalizing -legally -legals -legate -legated -legatee -legatees -legates -legateship -legateships -legatine -legating -legation -legations -legato -legator -legators -legatos -legend -legendarily -legendary -legendries -legendry -legends -leger -legerdemain -legerdemains -legerities -legerity -legers -leges -legged -leggier -leggiero -leggiest -leggin -legginess -legginesses -legging -leggings -leggins -leggy -leghorn -leghorns -legibilities -legibility -legible -legibly -legion -legionaries -legionary -legionnaire -legionnaires -legions -legislate -legislated -legislates -legislating -legislation -legislations -legislative -legislatively -legislatives -legislator -legislatorial -legislators -legislatorship -legislatorships -legislature -legislatures -legist -legists -legit -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 -legits -legless -leglike -legman -legmen -legong -legongs -legroom -legrooms -legs -legume -legumes -legumin -leguminous -legumins -legwork -legworks -lehayim -lehayims -lehr -lehrs -lehua -lehuas -lei -leis -leishmania -leishmanial -leishmanias -leishmaniases -leishmaniasis -leister -leistered -leistering -leisters -leisure -leisured -leisureliness -leisurelinesses -leisurely -leisures -leisurewear -leitmotif -leitmotifs -leitmotiv -leitmotivs -lek -leke -leks -leku -lekvar -lekvars -lekythi -lekythoi -lekythos -lekythus -leman -lemans -lemma -lemmas -lemmata -lemming -lemminglike -lemmings -lemniscal -lemniscate -lemniscates -lemnisci -lemniscus -lemon -lemonade -lemonades -lemongrass -lemongrasses -lemonish -lemons -lemony -lempira -lempiras -lemur -lemures -lemurine -lemuroid -lemuroids -lemurs -lend -lendable -lender -lenders -lending -lends -lenes -length -lengthen -lengthened -lengthener -lengtheners -lengthening -lengthens -lengthier -lengthiest -lengthily -lengthiness -lengthinesses -lengths -lengthways -lengthwise -lengthy -lenience -leniences -leniencies -leniency -lenient -leniently -lenis -lenities -lenition -lenitions -lenitive -lenitively -lenitives -lenity -leno -lenos -lens -lense -lensed -lenses -lensing -lensless -lensman -lensmen -lent -lentamente -lentando -lenten -lentic -lenticel -lenticels -lenticular -lenticule -lenticules -lentigines -lentigo -lentil -lentils -lentisk -lentisks -lentissimo -lentivirus -lentiviruses -lento -lentoid -lentos -leone -leones -leonine -leopard -leopardess -leopardesses -leopards -leotard -leotarded -leotards -leper -lepers -lepidolite -lepidolites -lepidoptera -lepidopteran -lepidopterans -lepidopterist -lepidopterists -lepidopterological -lepidopterologies -lepidopterologist -lepidopterologists -lepidopterology -lepidopterous -lepidote -lepidotes -leporid -leporidae -leporids -leporine -leprechaun -leprechaunish -leprechauns -lepromatous -leprosaria -leprosarium -leprosariums -leprose -leprosies -leprosy -leprotic -leprous -leprously -lept -lepta -leptocephali -leptocephalus -lepton -leptonic -leptons -leptosome -leptosomes -leptospiral -leptospire -leptospires -leptospiroses -leptospirosis -leptotene -leptotenes -lesbian -lesbianism -lesbianisms -lesbians -lesion -lesioned -lesions -lespedeza -lespedezas -less -lessee -lessees -lessen -lessened -lessening -lessens -lesser -lesson -lessoned -lessoning -lessons -lessor -lessors -lest -let -letch -letched -letches -letching -letdown -letdowns -lethal -lethalities -lethality -lethally -lethals -lethargic -lethargically -lethargies -lethargy -lethe -lethean -lethes -lets -letted -letter -letterbomb -letterbombs -letterboxed -letterboxing -letterboxings -lettered -letterer -letterers -letterform -letterforms -letterhead -letterheads -lettering -letterings -letterman -lettermen -letterpress -letterpresses -letters -letterspace -letterspaces -letterspacing -letterspacings -letting -lettuce -lettuces -letup -letups -leu -leucemia -leucemias -leucemic -leucin -leucine -leucines -leucins -leucite -leucites -leucitic -leucocidin -leucocidins -leucoma -leucomas -leucoplast -leucoplasts -leud -leudes -leuds -leukaemia -leukaemias -leukaemogeneses -leukaemogenesis -leukemia -leukemias -leukemic -leukemics -leukemogeneses -leukemogenesis -leukemogenic -leukemoid -leukocyte -leukocytes -leukocytic -leukocytoses -leukocytosis -leukodystrophies -leukodystrophy -leukoma -leukomas -leukon -leukons -leukopenia -leukopenias -leukopenic -leukoplakia -leukoplakias -leukoplakic -leukopoieses -leukopoiesis -leukopoietic -leukorrhea -leukorrheal -leukorrheas -leukoses -leukosis -leukotic -leukotomies -leukotomy -leukotriene -leukotrienes -lev -leva -levant -levanted -levanter -levanters -levanting -levants -levator -levatores -levators -levee -leveed -leveeing -levees -level -leveled -leveler -levelers -levelheaded -levelheadedness -levelheadednesses -leveling -levelled -leveller -levellers -levelling -levelly -levelness -levelnesses -levels -lever -leverage -leveraged -leverages -leveraging -levered -leveret -leverets -levering -levers -leviable -leviathan -leviathans -levied -levier -leviers -levies -levigate -levigated -levigates -levigating -levigation -levigations -levin -levins -levirate -levirates -leviratic -levitate -levitated -levitates -levitating -levitation -levitational -levitations -levities -levity -levo -levodopa -levodopas -levogyre -levorotary -levorotatory -levulin -levulins -levulose -levuloses -levy -levying -lewd -lewder -lewdest -lewdly -lewdness -lewdnesses -lewis -lewises -lewisite -lewisites -lewisson -lewissons -lex -lexeme -lexemes -lexemic -lexes -lexica -lexical -lexicalisation -lexicalisations -lexicalities -lexicality -lexicalization -lexicalizations -lexicalize -lexicalized -lexicalizes -lexicalizing -lexically -lexicographer -lexicographers -lexicographic -lexicographical -lexicographically -lexicographies -lexicography -lexicologies -lexicologist -lexicologists -lexicology -lexicon -lexicons -lexis -lexises -ley -leys -lez -lezzes -lezzie -lezzies -lezzy -li -liabilities -liability -liable -liaise -liaised -liaises -liaising -liaison -liaisons -liana -lianas -liane -lianes -liang -liangs -lianoid -liar -liard -liards -liars -lib -libation -libationary -libations -libber -libbers -libecchio -libecchios -libeccio -libeccios -libel -libelant -libelants -libeled -libelee -libelees -libeler -libelers -libeling -libelist -libelists -libellant -libellants -libelled -libellee -libellees -libeller -libellers -libelling -libellous -libelous -libels -liber -liberal -liberalise -liberalised -liberalises -liberalising -liberalism -liberalisms -liberalist -liberalistic -liberalists -liberalities -liberality -liberalization -liberalizations -liberalize -liberalized -liberalizer -liberalizers -liberalizes -liberalizing -liberally -liberalness -liberalnesses -liberals -liberate -liberated -liberates -liberating -liberation -liberationist -liberationists -liberations -liberator -liberators -libers -libertarian -libertarianism -libertarianisms -libertarians -liberties -libertinage -libertinages -libertine -libertines -libertinism -libertinisms -liberty -libidinal -libidinally -libidinous -libidinously -libidinousness -libidinousnesses -libido -libidos -liblab -liblabs -libra -librae -librarian -librarians -librarianship -librarianships -libraries -library -libras -librate -librated -librates -librating -libration -librational -librations -libratory -libretti -librettist -librettists -libretto -librettos -libri -libriform -libs -lice -licence -licenced -licencee -licencees -licencer -licencers -licences -licencing -licensable -license -licensed -licensee -licensees -licenser -licensers -licenses -licensing -licensor -licensors -licensure -licensures -licente -licentiate -licentiates -licentious -licentiously -licentiousness -licentiousnesses -lich -lichee -lichees -lichen -lichened -lichenin -lichening -lichenins -lichenological -lichenologies -lichenologist -lichenologists -lichenology -lichenous -lichens -liches -lichi -lichis -licht -lichted -lichting -lichtly -lichts -licit -licitly -lick -licked -licker -lickerish -lickerishly -lickerishness -lickerishnesses -lickers -licking -lickings -licks -lickspit -lickspits -lickspittle -lickspittles -licorice -licorices -lictor -lictors -lid -lidar -lidars -lidded -lidding -lidless -lido -lidocaine -lidocaines -lidos -lids -lie -liebfraumilch -liebfraumilchs -lied -lieder -lief -liefer -liefest -liefly -liege -liegeman -liegemen -lieges -lien -lienable -lienal -liens -lienteries -lientery -lier -lierne -liernes -liers -lies -lieu -lieus -lieutenancies -lieutenancy -lieutenant -lieutenants -lieve -liever -lievest -life -lifeblood -lifebloods -lifeboat -lifeboats -lifeful -lifeguard -lifeguarded -lifeguarding -lifeguards -lifeless -lifelessly -lifelessness -lifelessnesses -lifelike -lifelikeness -lifelikenesses -lifeline -lifelines -lifelong -lifemanship -lifemanships -lifer -lifers -lifesaver -lifesavers -lifesaving -lifesavings -lifestyle -lifestyles -lifetime -lifetimes -lifeway -lifeways -lifework -lifeworks -lift -liftable -lifted -lifter -lifters -liftgate -liftgates -lifting -liftman -liftmen -liftoff -liftoffs -lifts -ligament -ligamentous -ligaments -ligan -ligand -ligands -ligans -ligase -ligases -ligate -ligated -ligates -ligating -ligation -ligations -ligative -ligature -ligatured -ligatures -ligaturing -liger -ligers -light -lightbulb -lightbulbs -lighted -lighten -lightened -lightener -lighteners -lightening -lightens -lighter -lighterage -lighterages -lightered -lightering -lighters -lightest -lightface -lightfaced -lightfaces -lightfast -lightfastness -lightfastnesses -lightful -lightheaded -lighthearted -lightheartedly -lightheartedness -lightheartednesses -lighthouse -lighthouses -lighting -lightings -lightish -lightless -lightly -lightness -lightnesses -lightning -lightninged -lightnings -lightplane -lightplanes -lightproof -lights -lightship -lightships -lightsome -lightsomely -lightsomeness -lightsomenesses -lighttight -lightweight -lightweights -lightwood -lightwoods -ligneous -lignification -lignifications -lignified -lignifies -lignify -lignifying -lignin -lignins -lignite -lignites -lignitic -lignocellulose -lignocelluloses -lignocellulosic -lignosulfonate -lignosulfonates -ligroin -ligroine -ligroines -ligroins -ligula -ligulae -ligular -ligulas -ligulate -ligule -ligules -liguloid -ligure -ligures -likabilities -likability -likable -likableness -likablenesses -like -likeable -liked -likelier -likeliest -likelihood -likelihoods -likely -liken -likened -likeness -likenesses -likening -likens -liker -likers -likes -likest -likewise -liking -likings -likuta -lilac -lilacs -lilangeni -lilied -lilies -lilliput -lilliputian -lilliputians -lilliputs -lilt -lilted -lilting -liltingly -liltingness -liltingnesses -lilts -lily -lilylike -lima -limacine -limacon -limacons -liman -limans -limas -limb -limba -limbas -limbate -limbeck -limbecks -limbed -limber -limbered -limberer -limberest -limbering -limberly -limberness -limbernesses -limbers -limbi -limbic -limbier -limbiest -limbing -limbless -limbo -limbos -limbs -limbus -limbuses -limby -lime -limeade -limeades -limed -limekiln -limekilns -limeless -limelight -limelighted -limelighting -limelights -limen -limens -limerick -limericks -limes -limestone -limestones -limewater -limewaters -limey -limeys -limier -limiest -limina -liminal -liminess -liminesses -liming -limit -limitable -limitary -limitation -limitational -limitations -limitative -limited -limitedly -limitedness -limitednesses -limiteds -limiter -limiters -limites -limiting -limitingly -limitless -limitlessly -limitlessness -limitlessnesses -limitrophe -limits -limmer -limmers -limn -limned -limner -limners -limnetic -limnic -limning -limnologic -limnological -limnologies -limnologist -limnologists -limnology -limns -limo -limonene -limonenes -limonite -limonites -limonitic -limos -limousine -limousines -limp -limpa -limpas -limped -limper -limpers -limpest -limpet -limpets -limpid -limpidities -limpidity -limpidly -limpidness -limpidnesses -limping -limpkin -limpkins -limply -limpness -limpnesses -limps -limpsey -limpsier -limpsiest -limpsy -limuli -limuloid -limuloids -limulus -limy -lin -linable -linac -linacs -linage -linages -linalol -linalols -linalool -linalools -linchpin -linchpins -lincomycin -lincomycins -lindane -lindanes -linden -lindens -lindies -lindy -line -lineable -lineage -lineages -lineal -linealities -lineality -lineally -lineament -lineamental -lineaments -linear -linearise -linearised -linearises -linearising -linearities -linearity -linearization -linearizations -linearize -linearized -linearizes -linearizing -linearly -lineate -lineated -lineation -lineations -linebacker -linebackers -linebacking -linebackings -linebred -linebreeding -linebreedings -linecaster -linecasters -linecasting -linecastings -linecut -linecuts -lined -lineless -linelike -lineman -linemen -linen -linens -lineny -liner -linerboard -linerboards -linerless -liners -lines -linesman -linesmen -lineup -lineups -liney -ling -linga -lingam -lingams -lingas -lingcod -lingcods -linger -lingered -lingerer -lingerers -lingerie -lingeries -lingering -lingeringly -lingers -lingier -lingiest -lingo -lingoes -lingonberries -lingonberry -lings -lingua -linguae -lingual -lingually -linguals -linguine -linguines -linguini -linguinis -linguist -linguistic -linguistical -linguistically -linguistician -linguisticians -linguistics -linguists -lingy -linier -liniest -liniment -liniments -linin -lining -linings -linins -link -linkable -linkage -linkages -linkboy -linkboys -linked -linker -linkers -linking -linkman -linkmen -links -linksman -linksmen -linkup -linkups -linkwork -linkworks -linky -linn -linnet -linnets -linns -lino -linocut -linocuts -linoleate -linoleates -linoleum -linoleums -linos -lins -linsang -linsangs -linseed -linseeds -linsey -linseys -linstock -linstocks -lint -lintel -lintels -linter -linters -lintier -lintiest -lintless -lintol -lintols -lints -lintwhite -lintwhites -linty -linum -linums -linuron -linurons -liny -lion -lioness -lionesses -lionfish -lionfishes -lionhearted -lionise -lionised -lioniser -lionisers -lionises -lionising -lionization -lionizations -lionize -lionized -lionizer -lionizers -lionizes -lionizing -lionlike -lions -lip -lipa -lipase -lipases -lipe -lipid -lipide -lipides -lipidic -lipids -lipin -lipins -lipless -liplike -lipocyte -lipocytes -lipogeneses -lipogenesis -lipoid -lipoidal -lipoids -lipolyses -lipolysis -lipolytic -lipoma -lipomas -lipomata -lipomatous -lipophilic -lipopolysaccharide -lipopolysaccharides -lipoprotein -lipoproteins -liposomal -liposome -liposomes -liposuction -liposuctions -lipotropic -lipotropin -lipotropins -lipped -lippen -lippened -lippening -lippens -lipper -lippered -lippering -lippers -lippier -lippiest -lipping -lippings -lippy -lipreading -lipreadings -lips -lipstick -lipsticked -lipsticks -liquate -liquated -liquates -liquating -liquation -liquations -liquefaction -liquefactions -liquefied -liquefier -liquefiers -liquefies -liquefy -liquefying -liquescent -liqueur -liqueurs -liquid -liquidambar -liquidambars -liquidate -liquidated -liquidates -liquidating -liquidation -liquidations -liquidator -liquidators -liquidities -liquidity -liquidize -liquidized -liquidizes -liquidizing -liquidly -liquidness -liquidnesses -liquids -liquified -liquifies -liquify -liquifying -liquor -liquored -liquorice -liquorices -liquoring -liquors -lira -liras -lire -liri -liripipe -liripipes -lirot -liroth -lis -lisente -lisle -lisles -lisp -lisped -lisper -lispers -lisping -lisps -lissom -lissome -lissomely -lissomeness -lissomenesses -lissomly -list -listable -listed -listee -listees -listel -listels -listen -listenable -listened -listener -listeners -listenership -listenerships -listening -listens -lister -listerioses -listeriosis -listers -listing -listings -listless -listlessly -listlessness -listlessnesses -lists -lit -litai -litanies -litany -litas -litchi -litchis -lite -liter -literacies -literacy -literal -literalism -literalisms -literalist -literalistic -literalists -literalities -literality -literalization -literalizations -literalize -literalized -literalizes -literalizing -literally -literalness -literalnesses -literals -literarily -literariness -literarinesses -literary -literate -literately -literateness -literatenesses -literates -literati -literatim -literation -literations -literator -literators -literature -literatures -literatus -liters -litharge -litharges -lithe -lithely -lithemia -lithemias -lithemic -litheness -lithenesses -lither -lithesome -lithest -lithia -lithias -lithiases -lithiasis -lithic -lithification -lithifications -lithified -lithifies -lithify -lithifying -lithium -lithiums -litho -lithoed -lithograph -lithographed -lithographer -lithographers -lithographic -lithographically -lithographies -lithographing -lithographs -lithography -lithoid -lithoing -lithologic -lithological -lithologically -lithologies -lithology -lithophane -lithophanes -lithophyte -lithophytes -lithopone -lithopones -lithos -lithosol -lithosols -lithosphere -lithospheres -lithospheric -lithotomies -lithotomy -lithotripsies -lithotripsy -lithotripter -lithotripters -lithotriptor -lithotriptors -litigable -litigant -litigants -litigate -litigated -litigates -litigating -litigation -litigations -litigator -litigators -litigious -litigiously -litigiousness -litigiousnesses -litmus -litmuses -litoral -litotes -litotic -litre -litres -lits -litten -litter -litterateur -litterateurs -litterbag -litterbags -litterbug -litterbugs -littered -litterer -litterers -littering -littermate -littermates -litters -littery -little -littleneck -littlenecks -littleness -littlenesses -littler -littles -littlest -littlish -littoral -littorals -litu -liturgic -liturgical -liturgically -liturgics -liturgies -liturgiologies -liturgiologist -liturgiologists -liturgiology -liturgist -liturgists -liturgy -livabilities -livability -livable -livableness -livablenesses -live -liveabilities -liveability -liveable -lived -livelier -liveliest -livelihood -livelihoods -livelily -liveliness -livelinesses -livelong -lively -liven -livened -livener -liveners -liveness -livenesses -livening -livens -liver -liveried -liveries -liverish -liverishness -liverishnesses -livers -liverwort -liverworts -liverwurst -liverwursts -livery -liveryman -liverymen -lives -livest -livestock -livestocks -livetrap -livetrapped -livetrapping -livetraps -livid -lividities -lividity -lividly -lividness -lividnesses -livier -liviers -living -livingly -livingness -livingnesses -livings -livre -livres -livyer -livyers -lixivia -lixivial -lixiviate -lixiviated -lixiviates -lixiviating -lixiviation -lixiviations -lixivium -lixiviums -lizard -lizards -llama -llamas -llano -llanos -lo -loach -loaches -load -loaded -loader -loaders -loading -loadings -loadmaster -loadmasters -loads -loadstar -loadstars -loadstone -loadstones -loaf -loafed -loafer -loafers -loafing -loafs -loam -loamed -loamier -loamiest -loaming -loamless -loams -loamy -loan -loanable -loaned -loaner -loaners -loaning -loanings -loans -loanword -loanwords -loath -loathe -loathed -loather -loathers -loathes -loathful -loathing -loathings -loathly -loathness -loathnesses -loathsome -loathsomely -loathsomeness -loathsomenesses -loaves -lob -lobar -lobate -lobated -lobately -lobation -lobations -lobbed -lobber -lobbers -lobbied -lobbies -lobbing -lobby -lobbyer -lobbyers -lobbygow -lobbygows -lobbying -lobbyism -lobbyisms -lobbyist -lobbyists -lobe -lobectomies -lobectomy -lobed -lobefin -lobefins -lobelia -lobelias -lobeline -lobelines -lobes -loblollies -loblolly -lobo -lobos -lobotomies -lobotomise -lobotomised -lobotomises -lobotomising -lobotomize -lobotomized -lobotomizes -lobotomizing -lobotomy -lobs -lobscouse -lobscouses -lobster -lobstered -lobstering -lobsterings -lobsterlike -lobsterman -lobstermen -lobsters -lobstick -lobsticks -lobular -lobulate -lobulated -lobulation -lobulations -lobule -lobules -lobulose -lobworm -lobworms -loca -local -locale -locales -localise -localised -localises -localising -localism -localisms -localist -localists -localite -localites -localities -locality -localizabilities -localizability -localizable -localization -localizations -localize -localized -localizes -localizing -locally -locals -locatable -locate -located -locater -locaters -locates -locating -location -locational -locationally -locations -locative -locatives -locator -locators -loch -lochan -lochans -lochia -lochial -lochs -loci -lock -lockable -lockage -lockages -lockbox -lockboxes -lockdown -lockdowns -locked -locker -lockers -locket -lockets -locking -lockjaw -lockjaws -lockkeeper -lockkeepers -locknut -locknuts -lockout -lockouts -lockram -lockrams -locks -locksmith -locksmithing -locksmithings -locksmiths -lockstep -locksteps -lockstitch -lockstitched -lockstitches -lockstitching -lockup -lockups -loco -locoed -locoes -locofoco -locofocos -locoing -locoism -locoisms -locomote -locomoted -locomotes -locomoting -locomotion -locomotions -locomotive -locomotives -locomotor -locomotory -locos -locoweed -locoweeds -locular -loculate -locule -loculed -locules -loculi -loculicidal -loculus -locum -locums -locus -locust -locusta -locustae -locustal -locusts -locution -locutions -locutories -locutory -lode -loden -lodens -lodes -lodestar -lodestars -lodestone -lodestones -lodge -lodged -lodgement -lodgements -lodger -lodgers -lodges -lodging -lodgings -lodgment -lodgments -lodicule -lodicules -loess -loessal -loesses -loessial -loft -lofted -lofter -lofters -loftier -loftiest -loftily -loftiness -loftinesses -lofting -loftless -loftlike -lofts -lofty -log -logan -loganberries -loganberry -logania -logans -logaoedic -logaoedics -logarithm -logarithmic -logarithmically -logarithms -logbook -logbooks -loge -loges -loggats -logged -logger -loggerhead -loggerheads -loggers -loggets -loggia -loggias -loggie -loggier -loggiest -logging -loggings -loggy -logia -logic -logical -logicalities -logicality -logically -logicalness -logicalnesses -logician -logicians -logicise -logicised -logicises -logicising -logicize -logicized -logicizes -logicizing -logics -logier -logiest -logily -loginess -loginesses -logion -logions -logistic -logistical -logistically -logistician -logisticians -logistics -logjam -logjams -lognormal -lognormalities -lognormality -lognormally -logo -logogram -logogrammatic -logograms -logograph -logographic -logographically -logographs -logogriph -logogriphs -logoi -logomach -logomachies -logomachs -logomachy -logorrhea -logorrheas -logorrheic -logos -logotype -logotypes -logotypies -logotypy -logroll -logrolled -logroller -logrollers -logrolling -logrollings -logrolls -logs -logway -logways -logwood -logwoods -logy -loin -loincloth -loincloths -loins -loiter -loitered -loiterer -loiterers -loitering -loiters -loll -lollapalooza -lollapaloozas -lolled -loller -lollers -lollies -lolling -lollipop -lollipops -lollop -lolloped -lolloping -lollops -lolls -lolly -lollygag -lollygagged -lollygagging -lollygags -lollypop -lollypops -lomein -lomeins -loment -lomenta -loments -lomentum -lomentums -lone -lonelier -loneliest -lonelily -loneliness -lonelinesses -lonely -loneness -lonenesses -loner -loners -lonesome -lonesomely -lonesomeness -lonesomenesses -lonesomes -long -longan -longanimities -longanimity -longans -longboat -longboats -longbow -longbowman -longbowmen -longbows -longe -longed -longeing -longer -longeron -longerons -longers -longes -longest -longevities -longevity -longevous -longhair -longhaired -longhairs -longhand -longhands -longhead -longheaded -longheadedness -longheadednesses -longheads -longhorn -longhorns -longhouse -longhouses -longicorn -longicorns -longies -longing -longingly -longings -longish -longitude -longitudes -longitudinal -longitudinally -longleaf -longleaves -longline -longlines -longly -longness -longnesses -longs -longship -longships -longshoreman -longshoremen -longshoring -longshorings -longsighted -longsightedness -longsightednesses -longsome -longsomely -longsomeness -longsomenesses -longspur -longspurs -longstanding -longtime -longueur -longueurs -longways -longwise -loo -loobies -looby -looed -looey -looeys -loof -loofa -loofah -loofahs -loofas -loofs -looie -looies -looing -look -lookalike -lookalikes -lookdown -lookdowns -looked -looker -lookers -looking -lookout -lookouts -looks -lookup -lookups -loom -loomed -looming -looms -loon -looney -looneys -loonier -loonies -looniest -looniness -looninesses -loons -loony -loop -looped -looper -loopers -loophole -loopholed -loopholes -loopholing -loopier -loopiest -looping -loops -loopy -loos -loose -loosed -loosely -loosen -loosened -loosener -looseners -looseness -loosenesses -loosening -loosens -looser -looses -loosest -loosestrife -loosestrifes -loosing -loot -looted -looter -looters -looting -loots -lop -lope -loped -loper -lopers -lopes -lophophore -lophophores -loping -lopped -lopper -loppered -loppering -loppers -loppier -loppiest -lopping -loppy -lops -lopsided -lopsidedly -lopsidedness -lopsidednesses -lopstick -lopsticks -loquacious -loquaciously -loquaciousness -loquaciousnesses -loquacities -loquacity -loquat -loquats -loral -loran -lorans -lord -lorded -lording -lordings -lordless -lordlier -lordliest -lordlike -lordliness -lordlinesses -lordling -lordlings -lordly -lordoma -lordomas -lordoses -lordosis -lordotic -lords -lordship -lordships -lore -loreal -lores -lorgnette -lorgnettes -lorgnon -lorgnons -lorica -loricae -loricate -loricates -lories -lorikeet -lorikeets -lorimer -lorimers -loriner -loriners -loris -lorises -lorn -lornness -lornnesses -lorries -lorry -lory -losable -losableness -losablenesses -lose -losel -losels -loser -losers -loses -losing -losingly -losings -loss -losses -lossy -lost -lostness -lostnesses -lot -lota -lotah -lotahs -lotas -loth -lothario -lotharios -lothsome -loti -lotic -lotion -lotions -lotos -lotoses -lots -lotte -lotted -lotteries -lottery -lottes -lotting -lotto -lottos -lotus -lotuses -lotusland -lotuslands -louche -loud -louden -loudened -loudening -loudens -louder -loudest -loudish -loudlier -loudliest -loudly -loudmouth -loudmouthed -loudmouths -loudness -loudnesses -loudspeaker -loudspeakers -lough -loughs -louie -louies -louis -lounge -lounged -lounger -loungers -lounges -loungewear -lounging -loungy -loup -loupe -louped -loupen -loupes -louping -loups -lour -loured -louring -lours -loury -louse -loused -louses -lousewort -louseworts -lousier -lousiest -lousily -lousiness -lousinesses -lousing -lousy -lout -louted -louting -loutish -loutishly -loutishness -loutishnesses -louts -louver -louvered -louvers -louvre -louvred -louvres -lovabilities -lovability -lovable -lovableness -lovablenesses -lovably -lovage -lovages -lovastatin -lovastatins -lovat -lovats -love -loveable -loveably -lovebird -lovebirds -lovebug -lovebugs -loved -loveless -lovelessly -lovelessness -lovelessnesses -lovelier -lovelies -loveliest -lovelily -loveliness -lovelinesses -lovelock -lovelocks -lovelorn -lovelornness -lovelornnesses -lovely -lovemaking -lovemakings -lover -loverly -lovers -loves -loveseat -loveseats -lovesick -lovesickness -lovesicknesses -lovesome -lovevine -lovevines -loving -lovingly -lovingness -lovingnesses -low -lowball -lowballed -lowballing -lowballs -lowborn -lowboy -lowboys -lowbred -lowbrow -lowbrows -lowdown -lowdowns -lowe -lowed -lower -lowercase -lowercased -lowercases -lowercasing -lowerclassman -lowerclassmen -lowered -lowering -lowermost -lowers -lowery -lowes -lowest -lowing -lowings -lowish -lowland -lowlander -lowlanders -lowlands -lowlier -lowliest -lowlife -lowlifer -lowlifers -lowlifes -lowlight -lowlights -lowlihead -lowliheads -lowliness -lowlinesses -lowlives -lowly -lown -lowness -lownesses -lowrider -lowriders -lows -lowse -lox -loxed -loxes -loxing -loxodrome -loxodromes -loyal -loyaler -loyalest -loyalism -loyalisms -loyalist -loyalists -loyally -loyalties -loyalty -lozenge -lozenges -luau -luaus -lubber -lubberliness -lubberlinesses -lubberly -lubbers -lube -lubed -lubes -lubing -lubric -lubrical -lubricant -lubricants -lubricate -lubricated -lubricates -lubricating -lubrication -lubrications -lubricative -lubricator -lubricators -lubricious -lubriciously -lubricities -lubricity -lubricous -lucarne -lucarnes -luce -lucence -lucences -lucencies -lucency -lucent -lucently -lucern -lucerne -lucernes -lucerns -luces -lucid -lucidities -lucidity -lucidly -lucidness -lucidnesses -lucifer -luciferase -luciferases -luciferin -luciferins -luciferous -lucifers -luck -lucked -luckie -luckier -luckies -luckiest -luckily -luckiness -luckinesses -lucking -luckless -lucks -lucky -lucrative -lucratively -lucrativeness -lucrativenesses -lucre -lucres -lucubration -lucubrations -luculent -luculently -lude -ludes -ludic -ludicrous -ludicrously -ludicrousness -ludicrousnesses -lues -luetic -luetics -luff -luffa -luffas -luffed -luffing -luffs -luftmensch -luftmenschen -lug -luge -luged -lugeing -luger -lugers -luges -luggage -luggages -lugged -lugger -luggers -luggie -luggies -lugging -luging -lugs -lugsail -lugsails -lugubrious -lugubriously -lugubriousness -lugubriousnesses -lugworm -lugworms -lukewarm -lukewarmly -lukewarmness -lukewarmnesses -lull -lullabied -lullabies -lullaby -lullabying -lulled -lulling -lulls -lulu -lulus -lum -lumbago -lumbagos -lumbar -lumbars -lumber -lumbered -lumberer -lumberers -lumbering -lumberjack -lumberjacks -lumberman -lumbermen -lumbers -lumberyard -lumberyards -lumbosacral -lumen -lumenal -lumens -lumina -luminaire -luminaires -luminal -luminance -luminances -luminaria -luminarias -luminaries -luminary -luminesce -luminesced -luminescence -luminescences -luminescent -luminesces -luminescing -luminiferous -luminism -luminisms -luminist -luminists -luminosities -luminosity -luminous -luminously -luminousness -luminousnesses -lummox -lummoxes -lump -lumpectomies -lumpectomy -lumped -lumpen -lumpenproletariat -lumpenproletariats -lumpens -lumper -lumpers -lumpfish -lumpfishes -lumpier -lumpiest -lumpily -lumpiness -lumpinesses -lumping -lumpish -lumpishly -lumpishness -lumpishnesses -lumps -lumpy -lums -luna -lunacies -lunacy -lunar -lunarian -lunarians -lunars -lunas -lunate -lunated -lunately -lunatic -lunatics -lunation -lunations -lunch -lunched -luncheon -luncheonette -luncheonettes -luncheons -luncher -lunchers -lunches -lunching -lunchmeat -lunchmeats -lunchroom -lunchrooms -lunchtime -lunchtimes -lune -lunes -lunet -lunets -lunette -lunettes -lung -lungan -lungans -lunge -lunged -lungee -lungees -lunger -lungers -lunges -lungfish -lungfishes -lungful -lungfuls -lungi -lunging -lungis -lungs -lungworm -lungworms -lungwort -lungworts -lungyi -lungyis -lunier -lunies -luniest -lunisolar -lunk -lunker -lunkers -lunkhead -lunkheaded -lunkheads -lunks -lunt -lunted -lunting -lunts -lunula -lunulae -lunular -lunulate -lunule -lunules -luny -lupanar -lupanars -lupin -lupine -lupines -lupins -lupous -lupulin -lupulins -lupus -lupuses -lurch -lurched -lurcher -lurchers -lurches -lurching -lurdan -lurdane -lurdanes -lurdans -lure -lured -lurer -lurers -lures -lurid -luridly -luridness -luridnesses -luring -lurk -lurked -lurker -lurkers -lurking -lurks -luscious -lusciously -lusciousness -lusciousnesses -lush -lushed -lusher -lushes -lushest -lushing -lushly -lushness -lushnesses -lust -lusted -luster -lustered -lustering -lusterless -lusters -lusterware -lusterwares -lustful -lustfully -lustfulness -lustfulnesses -lustier -lustiest -lustihood -lustihoods -lustily -lustiness -lustinesses -lusting -lustra -lustral -lustrate -lustrated -lustrates -lustrating -lustration -lustrations -lustre -lustred -lustres -lustring -lustrings -lustrous -lustrously -lustrousness -lustrousnesses -lustrum -lustrums -lusts -lusty -lusus -lususes -lutanist -lutanists -lute -lutea -luteal -lutecium -luteciums -luted -lutefisk -lutefisks -lutein -luteinization -luteinizations -luteinize -luteinized -luteinizes -luteinizing -luteins -lutenist -lutenists -luteolin -luteolins -luteotrophic -luteotrophin -luteotrophins -luteotropic -luteotropin -luteotropins -luteous -lutes -lutestring -lutestrings -lutetium -lutetiums -luteum -luthern -lutherns -luthier -luthiers -luting -lutings -lutist -lutists -lutz -lutzes -luv -luvs -lux -luxate -luxated -luxates -luxating -luxation -luxations -luxe -luxes -luxuriance -luxuriances -luxuriant -luxuriantly -luxuriate -luxuriated -luxuriates -luxuriating -luxuries -luxurious -luxuriously -luxuriousness -luxuriousnesses -luxury -lwei -lweis -lyard -lyart -lyase -lyases -lycanthrope -lycanthropes -lycanthropic -lycanthropies -lycanthropy -lycea -lycee -lycees -lyceum -lyceums -lychee -lychees -lychnis -lychnises -lycopene -lycopenes -lycopod -lycopodium -lycopodiums -lycopods -lyddite -lyddites -lye -lyes -lying -lyingly -lyings -lymph -lymphadenitis -lymphadenitises -lymphadenopathies -lymphadenopathy -lymphangiogram -lymphangiograms -lymphangiographic -lymphangiographies -lymphangiography -lymphatic -lymphatically -lymphatics -lymphoblast -lymphoblastic -lymphoblasts -lymphocyte -lymphocytes -lymphocytic -lymphocytoses -lymphocytosis -lymphogram -lymphograms -lymphogranuloma -lymphogranulomas -lymphogranulomata -lymphogranulomatoses -lymphogranulomatosis -lymphographic -lymphographies -lymphography -lymphoid -lymphokine -lymphokines -lymphoma -lymphomas -lymphomata -lymphomatoses -lymphomatosis -lymphomatous -lymphosarcoma -lymphosarcomas -lymphosarcomata -lymphs -lyncean -lynch -lynched -lyncher -lynchers -lynches -lynching -lynchings -lynchpin -lynchpins -lynx -lynxes -lyonnaise -lyophile -lyophiled -lyophilic -lyophilise -lyophilised -lyophilises -lyophilising -lyophilization -lyophilizations -lyophilize -lyophilized -lyophilizer -lyophilizers -lyophilizes -lyophilizing -lyophobic -lyrate -lyrated -lyrately -lyre -lyrebird -lyrebirds -lyres -lyric -lyrical -lyrically -lyricalness -lyricalnesses -lyricise -lyricised -lyricises -lyricising -lyricism -lyricisms -lyricist -lyricists -lyricize -lyricized -lyricizes -lyricizing -lyrics -lyriform -lyrism -lyrisms -lyrist -lyrists -lysate -lysates -lyse -lysed -lyses -lysimeter -lysimeters -lysimetric -lysin -lysine -lysines -lysing -lysins -lysis -lysogen -lysogenic -lysogenicities -lysogenicity -lysogenies -lysogenise -lysogenised -lysogenises -lysogenising -lysogenization -lysogenizations -lysogenize -lysogenized -lysogenizes -lysogenizing -lysogens -lysogeny -lysolecithin -lysolecithins -lysosomal -lysosome -lysosomes -lysozyme -lysozymes -lyssa -lyssas -lytic -lytically -lytta -lyttae -lyttas -ma -maar -maars -mabe -mabes -mac -macaber -macabre -macaco -macacos -macadam -macadamia -macadamias -macadamize -macadamized -macadamizes -macadamizing -macadams -macaque -macaques -macaroni -macaronic -macaronics -macaronies -macaronis -macaroon -macaroons -macaw -macaws -maccabaw -maccabaws -maccaboy -maccaboys -macchia -macchie -maccoboy -maccoboys -mace -maced -macedoine -macedoines -macer -macerate -macerated -macerates -macerating -maceration -macerations -macerator -macerators -macers -maces -mach -mache -maches -machete -machetes -machicolated -machicolation -machicolations -machinabilities -machinability -machinable -machinate -machinated -machinates -machinating -machination -machinations -machinator -machinators -machine -machineabilities -machineability -machineable -machined -machinelike -machineries -machinery -machines -machining -machinist -machinists -machismo -machismos -macho -machos -machree -machrees -machs -machzor -machzorim -machzors -macing -macintosh -macintoshes -mack -mackerel -mackerels -mackinaw -mackinaws -mackintosh -mackintoshes -mackle -mackled -mackles -mackling -macks -macle -macled -macles -macon -macons -macrame -macrames -macro -macroaggregate -macroaggregated -macroaggregates -macrobiotic -macrocosm -macrocosmic -macrocosmically -macrocosms -macrocyclic -macrocyte -macrocytes -macrocytic -macrocytoses -macrocytosis -macroeconomic -macroeconomics -macroevolution -macroevolutionary -macroevolutions -macrofossil -macrofossils -macrogamete -macrogametes -macroglobulin -macroglobulinemia -macroglobulinemias -macroglobulinemic -macroglobulins -macroinstruction -macroinstructions -macrolepidoptera -macromere -macromeres -macromolecular -macromolecule -macromolecules -macron -macrons -macronuclear -macronuclei -macronucleus -macronucleuses -macronutrient -macronutrients -macrophage -macrophages -macrophagic -macrophotograph -macrophotographies -macrophotographs -macrophotography -macrophyte -macrophytes -macrophytic -macropterous -macros -macroscale -macroscales -macroscopic -macroscopically -macrostructural -macrostructure -macrostructures -macrural -macruran -macrurans -macs -macula -maculae -macular -maculas -maculate -maculated -maculates -maculating -maculation -maculations -macule -maculed -macules -maculing -macumba -macumbas -mad -madam -madame -madames -madams -madcap -madcaps -madded -madden -maddened -maddening -maddeningly -maddens -madder -madders -maddest -madding -maddish -made -madeira -madeiras -madeleine -madeleines -mademoiselle -mademoiselles -madhouse -madhouses -madly -madman -madmen -madness -madnesses -madonna -madonnas -madras -madrases -madre -madrepore -madrepores -madreporian -madreporians -madreporic -madreporite -madreporites -madres -madrigal -madrigalian -madrigalist -madrigalists -madrigals -madrilene -madrilenes -madrona -madronas -madrone -madrones -madrono -madronos -mads -maduro -maduros -madwoman -madwomen -madwort -madworts -madzoon -madzoons -mae -maelstrom -maelstroms -maenad -maenades -maenadic -maenads -maes -maestoso -maestosos -maestri -maestro -maestros -maffia -maffias -maffick -mafficked -mafficking -mafficks -mafia -mafias -mafic -mafiosi -mafioso -mafiosos -maftir -maftirs -mag -magazine -magazines -magazinist -magazinists -magdalen -magdalene -magdalenes -magdalens -mage -magenta -magentas -mages -maggot -maggots -maggoty -magi -magian -magians -magic -magical -magically -magician -magicians -magicked -magicking -magics -magilp -magilps -magister -magisterial -magisterially -magisterium -magisteriums -magisters -magistracies -magistracy -magistral -magistrally -magistrate -magistrates -magistratical -magistratically -magistrature -magistratures -maglev -maglevs -magma -magmas -magmata -magmatic -magnanimities -magnanimity -magnanimous -magnanimously -magnanimousness -magnanimousnesses -magnate -magnates -magnesia -magnesian -magnesias -magnesic -magnesite -magnesites -magnesium -magnesiums -magnet -magnetic -magnetically -magnetics -magnetise -magnetised -magnetises -magnetising -magnetism -magnetisms -magnetite -magnetites -magnetizable -magnetization -magnetizations -magnetize -magnetized -magnetizer -magnetizers -magnetizes -magnetizing -magneto -magnetoelectric -magnetofluiddynamics -magnetograph -magnetographs -magnetohydrodynamic -magnetohydrodynamics -magnetometer -magnetometers -magnetometric -magnetometries -magnetometry -magneton -magnetons -magnetopause -magnetopauses -magnetoresistance -magnetoresistances -magnetos -magnetosphere -magnetospheres -magnetospheric -magnetostatic -magnetostriction -magnetostrictions -magnetostrictive -magnetostrictively -magnetron -magnetrons -magnets -magnific -magnifical -magnifically -magnificat -magnification -magnifications -magnificats -magnificence -magnificences -magnificent -magnificently -magnifico -magnificoes -magnificos -magnified -magnifier -magnifiers -magnifies -magnify -magnifying -magniloquence -magniloquences -magniloquent -magniloquently -magnitude -magnitudes -magnolia -magnolias -magnum -magnums -magot -magots -magpie -magpies -mags -maguey -magueys -magus -maharaja -maharajah -maharajahs -maharajas -maharanee -maharanees -maharani -maharanis -maharishi -maharishis -mahatma -mahatmas -mahimahi -mahimahis -mahjong -mahjongg -mahjonggs -mahjongs -mahlstick -mahlsticks -mahoe -mahoes -mahoganies -mahogany -mahonia -mahonias -mahout -mahouts -mahuang -mahuangs -mahzor -mahzorim -mahzors -maid -maiden -maidenhair -maidenhairs -maidenhead -maidenheads -maidenhood -maidenhoods -maidenliness -maidenlinesses -maidenly -maidens -maidhood -maidhoods -maidish -maids -maidservant -maidservants -maieutic -maigre -maihem -maihems -mail -mailabilities -mailability -mailable -mailbag -mailbags -mailbomb -mailbombed -mailbombing -mailbombs -mailbox -mailboxes -maile -mailed -mailer -mailers -mailes -mailing -mailings -maill -mailless -maillot -maillots -maills -mailman -mailmen -mails -maim -maimed -maimer -maimers -maiming -maims -main -mainframe -mainframes -mainland -mainlander -mainlanders -mainlands -mainline -mainlined -mainlines -mainlining -mainly -mainmast -mainmasts -mains -mainsail -mainsails -mainsheet -mainsheets -mainspring -mainsprings -mainstay -mainstays -mainstream -mainstreamed -mainstreaming -mainstreams -maintain -maintainabilities -maintainability -maintainable -maintained -maintainer -maintainers -maintaining -maintains -maintenance -maintenances -maintop -maintops -maiolica -maiolicas -mair -mairs -maisonette -maisonettes -maist -maists -maize -maizes -majagua -majaguas -majestic -majestically -majesties -majesty -majolica -majolicas -major -majordomo -majordomos -majored -majorette -majorettes -majoring -majoritarian -majoritarianism -majoritarianisms -majoritarians -majorities -majority -majorly -majors -majuscular -majuscule -majuscules -makable -makar -makars -make -makeable -makebate -makebates -makefast -makefasts -makeover -makeovers -maker -makereadies -makeready -makers -makes -makeshift -makeshifts -makeup -makeups -makeweight -makeweights -makimono -makimonos -making -makings -mako -makos -makuta -malabsorption -malabsorptions -malacca -malaccas -malachite -malachites -malacological -malacologies -malacologist -malacologists -malacology -malacostracan -malacostracans -maladaptation -maladaptations -maladapted -maladaptive -maladies -maladjusted -maladjustive -maladjustment -maladjustments -maladminister -maladministered -maladministering -maladministers -maladministration -maladministrations -maladroit -maladroitly -maladroitness -maladroitnesses -malady -malaguena -malaguenas -malaise -malaises -malamute -malamutes -malanga -malangas -malapert -malapertly -malapertness -malapertnesses -malaperts -malapportioned -malapportionment -malapportionments -malaprop -malapropian -malapropism -malapropisms -malapropist -malapropists -malapropos -malaprops -malar -malaria -malarial -malarian -malarias -malariologies -malariologist -malariologists -malariology -malarious -malarkey -malarkeys -malarkies -malarky -malaroma -malaromas -malars -malate -malates -malathion -malathions -malcontent -malcontented -malcontentedly -malcontentedness -malcontentednesses -malcontents -maldistribution -maldistributions -male -maleate -maleates -maledict -maledicted -maledicting -malediction -maledictions -maledictory -maledicts -malefaction -malefactions -malefactor -malefactors -malefic -maleficence -maleficences -maleficent -malemiut -malemiuts -malemute -malemutes -maleness -malenesses -males -malevolence -malevolences -malevolent -malevolently -malfeasance -malfeasances -malfed -malformation -malformations -malformed -malfunction -malfunctioned -malfunctioning -malfunctions -malgre -malic -malice -malices -malicious -maliciously -maliciousness -maliciousnesses -malign -malignance -malignances -malignancies -malignancy -malignant -malignantly -maligned -maligner -maligners -maligning -malignities -malignity -malignly -maligns -malihini -malihinis -maline -malines -malinger -malingered -malingerer -malingerers -malingering -malingers -malison -malisons -malkin -malkins -mall -mallard -mallards -malleabilities -malleability -malleable -malled -mallee -mallees -mallei -malleoli -malleolus -mallet -mallets -malleus -malling -mallow -mallows -malls -malm -malmier -malmiest -malms -malmsey -malmseys -malmy -malnourished -malnutrition -malnutritions -malocclusion -malocclusions -malodor -malodorous -malodorously -malodorousness -malodorousnesses -malodors -malolactic -maloti -malposed -malposition -malpositions -malpractice -malpractices -malpractitioner -malpractitioners -malt -maltase -maltases -malted -malteds -maltha -malthas -maltier -maltiest -malting -maltol -maltols -maltose -maltoses -maltreat -maltreated -maltreater -maltreaters -maltreating -maltreatment -maltreatments -maltreats -malts -maltster -maltsters -malty -malvasia -malvasias -malversation -malversations -mama -mamaliga -mamaligas -mamas -mamba -mambas -mambo -mamboed -mamboes -mamboing -mambos -mameluke -mamelukes -mamey -mameyes -mameys -mamie -mamies -mamluk -mamluks -mamma -mammae -mammal -mammalian -mammalians -mammalogies -mammalogist -mammalogists -mammalogy -mammals -mammary -mammas -mammate -mammati -mammatus -mammee -mammees -mammer -mammered -mammering -mammers -mammet -mammets -mammey -mammeys -mammie -mammies -mammilla -mammillae -mammillary -mammillated -mammitides -mammitis -mammock -mammocked -mammocking -mammocks -mammogram -mammograms -mammographic -mammographies -mammography -mammon -mammonism -mammonisms -mammonist -mammonists -mammons -mammoth -mammoths -mammy -man -mana -manacle -manacled -manacles -manacling -manage -manageabilities -manageability -manageable -manageableness -manageablenesses -manageably -managed -management -managemental -managements -manager -manageress -manageresses -managerial -managerially -managers -managership -managerships -manages -managing -manakin -manakins -manana -mananas -manas -manat -manatee -manatees -manatoid -manats -manche -manches -manchet -manchets -manchineel -manchineels -manciple -manciples -mandala -mandalas -mandalic -mandamus -mandamused -mandamuses -mandamusing -mandarin -mandarinate -mandarinates -mandarinic -mandarinism -mandarinisms -mandarins -mandataries -mandatary -mandate -mandated -mandates -mandating -mandator -mandatories -mandatorily -mandators -mandatory -mandible -mandibles -mandibular -mandibulate -mandioca -mandiocas -mandola -mandolas -mandolin -mandoline -mandolines -mandolinist -mandolinists -mandolins -mandragora -mandragoras -mandrake -mandrakes -mandrel -mandrels -mandril -mandrill -mandrills -mandrils -mane -maned -manege -maneges -maneless -manes -maneuver -maneuverabilities -maneuverability -maneuverable -maneuvered -maneuverer -maneuverers -maneuvering -maneuvers -manful -manfully -manfulness -manfulnesses -mangabey -mangabeys -mangabies -mangaby -manganate -manganates -manganese -manganeses -manganesian -manganic -manganite -manganites -manganous -mange -mangel -mangels -manger -mangers -manges -mangey -mangier -mangiest -mangily -manginess -manginesses -mangle -mangled -mangler -manglers -mangles -mangling -mango -mangoes -mangold -mangolds -mangonel -mangonels -mangos -mangosteen -mangosteens -mangrove -mangroves -mangy -manhandle -manhandled -manhandles -manhandling -manhattan -manhattans -manhole -manholes -manhood -manhoods -manhunt -manhunts -mania -maniac -maniacal -maniacally -maniacs -manias -manic -manically -manicotti -manics -manicure -manicured -manicures -manicuring -manicurist -manicurists -manifest -manifestant -manifestants -manifestation -manifestations -manifested -manifester -manifesters -manifesting -manifestly -manifesto -manifestoed -manifestoes -manifestoing -manifestos -manifests -manifold -manifolded -manifolding -manifoldly -manifoldness -manifoldnesses -manifolds -manihot -manihots -manikin -manikins -manila -manilas -manilla -manillas -manille -manilles -manioc -manioca -maniocas -maniocs -maniple -maniples -manipulabilities -manipulability -manipulable -manipular -manipulatable -manipulate -manipulated -manipulates -manipulating -manipulation -manipulations -manipulative -manipulatively -manipulativeness -manipulativenesses -manipulator -manipulators -manipulatory -manito -manitos -manitou -manitous -manitu -manitus -mankind -manless -manlier -manliest -manlike -manlily -manliness -manlinesses -manly -manmade -manna -mannan -mannans -mannas -manned -mannequin -mannequins -manner -mannered -mannerism -mannerisms -mannerist -manneristic -mannerists -mannerless -mannerliness -mannerlinesses -mannerly -manners -mannikin -mannikins -manning -mannish -mannishly -mannishness -mannishnesses -mannite -mannites -mannitic -mannitol -mannitols -mannose -mannoses -mano -manoeuvre -manoeuvred -manoeuvres -manoeuvring -manometer -manometers -manometric -manometrically -manometries -manometry -manor -manorial -manorialism -manorialisms -manors -manos -manpack -manpower -manpowers -manque -manrope -manropes -mans -mansard -mansarded -mansards -manse -manservant -manses -mansion -mansions -manslaughter -manslaughters -manslayer -manslayers -mansuetude -mansuetudes -manta -mantas -manteau -manteaus -manteaux -mantel -mantelet -mantelets -mantelpiece -mantelpieces -mantels -mantelshelf -mantelshelves -mantes -mantic -manticore -manticores -mantid -mantids -mantilla -mantillas -mantis -mantises -mantissa -mantissas -mantle -mantled -mantles -mantlet -mantlets -mantling -mantlings -mantra -mantrap -mantraps -mantras -mantric -mantua -mantuas -manual -manually -manuals -manuary -manubria -manubrium -manubriums -manufactories -manufactory -manufacture -manufactured -manufacturer -manufacturers -manufactures -manufacturing -manufacturings -manumission -manumissions -manumit -manumits -manumitted -manumitting -manure -manured -manurer -manurers -manures -manurial -manuring -manus -manuscript -manuscripts -manward -manwards -manwise -many -manyfold -manzanita -manzanitas -map -maple -maples -maplike -mapmaker -mapmakers -mapmaking -mapmakings -mappable -mapped -mapper -mappers -mapping -mappings -maps -maquette -maquettes -maqui -maquiladora -maquiladoras -maquillage -maquillages -maquis -mar -marabou -marabous -marabout -marabouts -maraca -maracas -maranta -marantas -marasca -marascas -maraschino -maraschinos -marasmic -marasmus -marasmuses -marathon -marathoner -marathoners -marathoning -marathonings -marathons -maraud -marauded -marauder -marauders -marauding -marauds -maravedi -maravedis -marble -marbled -marbleise -marbleised -marbleises -marbleising -marbleize -marbleized -marbleizes -marbleizing -marbler -marblers -marbles -marblier -marbliest -marbling -marblings -marbly -marc -marcasite -marcasites -marcato -marcel -marcelled -marcelling -marcels -march -marched -marchen -marcher -marchers -marches -marchesa -marchese -marchesi -marching -marchioness -marchionesses -marchlike -marchpane -marchpanes -marcs -mare -maremma -maremme -marengo -mares -margaric -margarin -margarine -margarines -margarins -margarita -margaritas -margarite -margarites -margay -margays -marge -margent -margented -margenting -margents -marges -margin -marginal -marginalia -marginalities -marginality -marginalization -marginalizations -marginalize -marginalized -marginalizes -marginalizing -marginally -marginate -marginated -marginates -marginating -margination -marginations -margined -margining -margins -margravate -margravates -margrave -margraves -margravial -margraviate -margraviates -margravine -margravines -marguerite -marguerites -maria -mariachi -mariachis -mariculture -maricultures -mariculturist -mariculturists -marigold -marigolds -marihuana -marihuanas -marijuana -marijuanas -marimba -marimbas -marimbist -marimbists -marina -marinade -marinaded -marinades -marinading -marinara -marinaras -marinas -marinate -marinated -marinates -marinating -marination -marinations -marine -mariner -mariners -marines -marionette -marionettes -mariposa -mariposas -marish -marishes -marital -maritally -maritime -marjoram -marjorams -mark -markdown -markdowns -marked -markedly -markedness -markednesses -marker -markers -market -marketabilities -marketability -marketable -marketed -marketeer -marketeers -marketer -marketers -marketing -marketings -marketplace -marketplaces -markets -markhoor -markhoors -markhor -markhors -marking -markings -markka -markkaa -markkas -marks -marksman -marksmanship -marksmanships -marksmen -markswoman -markswomen -markup -markups -marl -marled -marlier -marliest -marlin -marline -marlines -marlinespike -marlinespikes -marling -marlings -marlins -marlinspike -marlinspikes -marlite -marlites -marlitic -marls -marlstone -marlstones -marly -marmalade -marmalades -marmite -marmites -marmoreal -marmoreally -marmorean -marmoset -marmosets -marmot -marmots -marocain -marocains -maroon -marooned -marooning -maroons -marplot -marplots -marque -marquee -marquees -marques -marquess -marquessate -marquessates -marquesses -marqueterie -marqueteries -marquetries -marquetry -marquis -marquisate -marquisates -marquise -marquises -marquisette -marquisettes -marram -marrams -marrano -marranos -marred -marrer -marrers -marriage -marriageabilities -marriageability -marriageable -marriages -married -marrieds -marrier -marriers -marries -marring -marron -marrons -marrow -marrowbone -marrowbones -marrowed -marrowfat -marrowfats -marrowing -marrows -marrowy -marry -marrying -mars -marsala -marsalas -marse -marses -marsh -marshal -marshalcies -marshalcy -marshaled -marshaling -marshall -marshalled -marshalling -marshalls -marshals -marshalship -marshalships -marshes -marshier -marshiest -marshiness -marshinesses -marshland -marshlands -marshmallow -marshmallows -marshmallowy -marshy -marsupia -marsupial -marsupials -marsupium -mart -martagon -martagons -marted -martello -martellos -marten -martens -martensite -martensites -martensitic -martensitically -martial -martially -martian -martians -martin -martinet -martinets -marting -martingale -martingales -martini -martinis -martins -martlet -martlets -marts -martyr -martyrdom -martyrdoms -martyred -martyries -martyring -martyrization -martyrizations -martyrize -martyrized -martyrizes -martyrizing -martyrly -martyrologies -martyrologist -martyrologists -martyrology -martyrs -martyry -marvel -marveled -marveling -marvelled -marvelling -marvellous -marvelous -marvelously -marvelousness -marvelousnesses -marvels -marvy -maryjane -maryjanes -marzipan -marzipans -mas -mascara -mascaraed -mascaraing -mascaras -mascarpone -mascarpones -mascon -mascons -mascot -mascots -masculine -masculinely -masculines -masculinise -masculinised -masculinises -masculinising -masculinist -masculinists -masculinities -masculinity -masculinization -masculinizations -masculinize -masculinized -masculinizes -masculinizing -maser -masers -mash -mashed -masher -mashers -mashes -mashie -mashies -mashing -mashy -masjid -masjids -mask -maskable -masked -maskeg -maskegs -masker -maskers -masking -maskings -masklike -masks -masochism -masochisms -masochist -masochistic -masochistically -masochists -mason -masoned -masonic -masoning -masonries -masonry -masons -masque -masquer -masquerade -masqueraded -masquerader -masqueraders -masquerades -masquerading -masquers -masques -mass -massa -massacre -massacred -massacrer -massacrers -massacres -massacring -massage -massaged -massager -massagers -massages -massaging -massas -massasauga -massasaugas -masscult -masscults -masse -massed -massedly -masses -masseter -masseteric -masseters -masseur -masseurs -masseuse -masseuses -massicot -massicots -massier -massiest -massif -massifs -massing -massive -massively -massiveness -massivenesses -massless -massy -mast -mastaba -mastabah -mastabahs -mastabas -mastectomies -mastectomy -masted -master -mastered -masterful -masterfully -masterfulness -masterfulnesses -masteries -mastering -masterliness -masterlinesses -masterly -mastermind -masterminded -masterminding -masterminds -masterpiece -masterpieces -masters -mastership -masterships -mastersinger -mastersingers -masterstroke -masterstrokes -masterwork -masterworks -mastery -masthead -mastheaded -mastheading -mastheads -mastic -masticate -masticated -masticates -masticating -mastication -mastications -masticator -masticatories -masticators -masticatory -mastiche -mastiches -mastics -mastiff -mastiffs -mastigophoran -mastigophorans -masting -mastitic -mastitides -mastitis -mastix -mastixes -mastless -mastlike -mastodon -mastodonic -mastodons -mastodont -mastodonts -mastoid -mastoidectomies -mastoidectomy -mastoiditides -mastoiditis -mastoids -masts -masturbate -masturbated -masturbates -masturbating -masturbation -masturbations -masturbator -masturbators -masturbatory -masurium -masuriums -mat -matador -matadors -matambala -match -matchable -matchboard -matchboards -matchbook -matchbooks -matchbox -matchboxes -matched -matcher -matchers -matches -matching -matchless -matchlessly -matchlock -matchlocks -matchmaker -matchmakers -matchmaking -matchmakings -matchstick -matchsticks -matchup -matchups -matchwood -matchwoods -mate -mated -mateless -matelot -matelote -matelotes -matelots -mater -materfamilias -materfamiliases -material -materialise -materialised -materialises -materialising -materialism -materialisms -materialist -materialistic -materialistically -materialists -materialities -materiality -materialization -materializations -materialize -materialized -materializer -materializers -materializes -materializing -materially -materialness -materialnesses -materials -materiel -materiels -maternal -maternalism -maternalisms -maternally -maternities -maternity -maters -mates -mateship -mateships -matey -mateyness -mateynesses -mateys -math -mathematic -mathematical -mathematically -mathematician -mathematicians -mathematics -mathematization -mathematizations -mathematize -mathematized -mathematizes -mathematizing -maths -matilda -matildas -matin -matinal -matinee -matinees -matiness -matinesses -mating -matings -matins -matless -matrass -matrasses -matres -matriarch -matriarchal -matriarchate -matriarchates -matriarchies -matriarchs -matriarchy -matrices -matricidal -matricide -matricides -matriculant -matriculants -matriculate -matriculated -matriculates -matriculating -matriculation -matriculations -matrilineal -matrilineally -matrimonial -matrimonially -matrimonies -matrimony -matrix -matrixes -matron -matronal -matronly -matrons -matronymic -matronymics -mats -matsah -matsahs -matt -matte -matted -mattedly -matter -mattered -mattering -matters -mattery -mattes -mattin -matting -mattings -mattins -mattock -mattocks -mattoid -mattoids -mattrass -mattrasses -mattress -mattresses -matts -maturate -maturated -maturates -maturating -maturation -maturational -maturations -mature -matured -maturely -maturer -matures -maturest -maturing -maturities -maturity -matutinal -matutinally -matza -matzah -matzahs -matzas -matzo -matzoh -matzohs -matzoon -matzoons -matzos -matzot -matzoth -maud -maudlin -mauds -mauger -maugre -maul -mauled -mauler -maulers -mauling -mauls -maulstick -maulsticks -maumet -maumetries -maumetry -maumets -maun -maund -maunder -maundered -maunderer -maunderers -maundering -maunders -maundies -maunds -maundy -mausolea -mausoleum -mausoleums -maut -mauts -mauve -mauves -maven -mavens -maverick -mavericks -mavie -mavies -mavin -mavins -mavis -mavises -mavourneen -mavourneens -maw -mawed -mawing -mawkish -mawkishly -mawkishness -mawkishnesses -mawn -maws -max -maxes -maxi -maxicoat -maxicoats -maxilla -maxillae -maxillaries -maxillary -maxillas -maxilliped -maxillipeds -maxillofacial -maxim -maxima -maximal -maximalist -maximalists -maximally -maximals -maximin -maximins -maximise -maximised -maximises -maximising -maximite -maximites -maximization -maximizations -maximize -maximized -maximizer -maximizers -maximizes -maximizing -maxims -maximum -maximums -maxis -maxixe -maxixes -maxwell -maxwells -may -maya -mayan -mayapple -mayapples -mayas -maybe -maybes -maybush -maybushes -mayday -maydays -mayed -mayest -mayflies -mayflower -mayflowers -mayfly -mayhap -mayhem -mayhems -maying -mayings -mayo -mayonnaise -mayonnaises -mayor -mayoral -mayoralties -mayoralty -mayoress -mayoresses -mayors -mayos -maypole -maypoles -maypop -maypops -mays -mayst -mayvin -mayvins -mayweed -mayweeds -mazaedia -mazaedium -mazard -mazards -maze -mazed -mazedly -mazelike -mazer -mazers -mazes -mazier -maziest -mazily -maziness -mazinesses -mazing -mazourka -mazourkas -mazuma -mazumas -mazurka -mazurkas -mazy -mazzard -mazzards -mbira -mbiras -me -mead -meadow -meadowland -meadowlands -meadowlark -meadowlarks -meadows -meadowsweet -meadowsweets -meadowy -meads -meager -meagerly -meagerness -meagernesses -meagre -meagrely -meal -mealie -mealier -mealies -mealiest -mealless -meals -mealtime -mealtimes -mealworm -mealworms -mealy -mealybug -mealybugs -mealymouthed -mean -meander -meandered -meandering -meanders -meandrous -meaner -meaners -meanest -meanie -meanies -meaning -meaningful -meaningfully -meaningfulness -meaningfulnesses -meaningless -meaninglessly -meaninglessness -meaninglessnesses -meaningly -meanings -meanly -meanness -meannesses -means -meanspirited -meant -meantime -meantimes -meanwhile -meanwhiles -meany -measle -measled -measles -measlier -measliest -measly -measurabilities -measurability -measurable -measurably -measure -measured -measuredly -measureless -measurement -measurements -measurer -measurers -measures -measuring -meat -meatal -meatball -meatballs -meated -meathead -meatheads -meatier -meatiest -meatily -meatiness -meatinesses -meatless -meatloaf -meatloaves -meatman -meatmen -meatpacking -meatpackings -meats -meatus -meatuses -meaty -mecamylamine -mecamylamines -mecca -meccas -mechanic -mechanical -mechanically -mechanicals -mechanician -mechanicians -mechanics -mechanism -mechanisms -mechanist -mechanistic -mechanistically -mechanists -mechanizable -mechanization -mechanizations -mechanize -mechanized -mechanizer -mechanizers -mechanizes -mechanizing -mechanochemical -mechanochemistries -mechanochemistry -mechanoreception -mechanoreceptions -mechanoreceptive -mechanoreceptor -mechanoreceptors -meclizine -meclizines -meconium -meconiums -med -medaillon -medaillons -medaka -medakas -medal -medaled -medaling -medalist -medalists -medalled -medallic -medalling -medallion -medallions -medallist -medallists -medals -meddle -meddled -meddler -meddlers -meddles -meddlesome -meddlesomeness -meddlesomenesses -meddling -medevac -medevacked -medevacking -medevacs -medflies -medfly -media -mediacies -mediacy -mediad -mediae -mediaeval -mediaevals -mediagenic -medial -medially -medials -median -medianly -medians -mediant -mediants -medias -mediastina -mediastinal -mediastinum -mediate -mediated -mediately -mediates -mediating -mediation -mediational -mediations -mediative -mediator -mediators -mediatory -mediatrices -mediatrix -mediatrixes -medic -medicable -medicaid -medicaids -medical -medically -medicals -medicament -medicamentous -medicaments -medicare -medicares -medicate -medicated -medicates -medicating -medication -medications -medicinable -medicinal -medicinally -medicinals -medicine -medicined -medicines -medicining -medick -medicks -medico -medicolegal -medicos -medics -medieval -medievalism -medievalisms -medievalist -medievalists -medievally -medievals -medigap -medigaps -medii -medina -medinas -mediocre -mediocrities -mediocrity -meditate -meditated -meditates -meditating -meditation -meditations -meditative -meditatively -meditativeness -meditativenesses -meditator -meditators -mediterranean -medium -mediumistic -mediums -mediumship -mediumships -medius -medlar -medlars -medley -medleys -medulla -medullae -medullar -medullary -medullas -medullated -medulloblastoma -medulloblastomas -medulloblastomata -medusa -medusae -medusal -medusan -medusans -medusas -medusoid -medusoids -meed -meeds -meek -meeker -meekest -meekly -meekness -meeknesses -meerkat -meerkats -meerschaum -meerschaums -meet -meeter -meeters -meeting -meetinghouse -meetinghouses -meetings -meetly -meetness -meetnesses -meets -meg -megabar -megabars -megabit -megabits -megabuck -megabucks -megabyte -megabytes -megacities -megacity -megacorporation -megacorporations -megacycle -megacycles -megadeal -megadeals -megadeath -megadeaths -megadose -megadoses -megadyne -megadynes -megafauna -megafaunae -megafaunal -megafaunas -megagamete -megagametes -megagametophyte -megagametophytes -megahertz -megahit -megahits -megakaryocyte -megakaryocytes -megakaryocytic -megalith -megalithic -megaliths -megaloblast -megaloblastic -megaloblasts -megalomania -megalomaniac -megalomaniacal -megalomaniacally -megalomaniacs -megalomanias -megalomanic -megalopolis -megalopolises -megalopolitan -megalopolitans -megalops -megalopses -megaparsec -megaparsecs -megaphone -megaphoned -megaphones -megaphonic -megaphoning -megapod -megapode -megapodes -megapods -megaproject -megaprojects -megascopic -megascopically -megasporangia -megasporangium -megaspore -megaspores -megasporic -megasporogeneses -megasporogenesis -megasporophyll -megasporophylls -megass -megasse -megasses -megastar -megastars -megaton -megatonnage -megatonnages -megatons -megavitamin -megavitamins -megavolt -megavolts -megawatt -megawatts -megillah -megillahs -megilloth -megilp -megilph -megilphs -megilps -megohm -megohms -megrim -megrims -megs -meikle -meinie -meinies -meiny -meioses -meiosis -meiotic -meiotically -meitnerium -meitneriums -mel -melamdim -melamed -melamine -melamines -melancholia -melancholiac -melancholiacs -melancholias -melancholic -melancholics -melancholies -melancholy -melange -melanges -melanian -melanic -melanics -melanin -melanins -melanism -melanisms -melanist -melanistic -melanists -melanite -melanites -melanitic -melanization -melanizations -melanize -melanized -melanizes -melanizing -melanoblast -melanoblasts -melanocyte -melanocytes -melanogeneses -melanogenesis -melanoid -melanoids -melanoma -melanomas -melanomata -melanophore -melanophores -melanosome -melanosomes -melanotic -melanous -melatonin -melatonins -meld -melded -melder -melders -melding -melds -melee -melees -melic -melilite -melilites -melilot -melilots -melinite -melinites -meliorate -meliorated -meliorates -meliorating -melioration -meliorations -meliorative -meliorator -meliorators -meliorism -meliorisms -meliorist -melioristic -meliorists -melisma -melismas -melismata -melismatic -mell -melled -mellific -mellifluent -mellifluently -mellifluous -mellifluously -mellifluousness -mellifluousnesses -melling -mellophone -mellophones -mellotron -mellotrons -mellow -mellowed -mellower -mellowest -mellowing -mellowly -mellowness -mellownesses -mellows -mells -melodeon -melodeons -melodia -melodias -melodic -melodica -melodically -melodicas -melodies -melodious -melodiously -melodiousness -melodiousnesses -melodise -melodised -melodises -melodising -melodist -melodists -melodize -melodized -melodizer -melodizers -melodizes -melodizing -melodrama -melodramas -melodramatic -melodramatically -melodramatics -melodramatise -melodramatised -melodramatises -melodramatising -melodramatist -melodramatists -melodramatization -melodramatizations -melodramatize -melodramatized -melodramatizes -melodramatizing -melody -meloid -meloids -melon -melons -melphalan -melphalans -mels -melt -meltabilities -meltability -meltable -meltage -meltages -meltdown -meltdowns -melted -melter -melters -melting -meltingly -melton -meltons -melts -meltwater -meltwaters -mem -member -membered -members -membership -memberships -membrane -membraned -membranes -membranous -membranously -meme -memento -mementoes -mementos -memes -memo -memoir -memoirist -memoirists -memoirs -memorabilia -memorabilities -memorability -memorable -memorableness -memorablenesses -memorably -memoranda -memorandum -memorandums -memorial -memorialise -memorialised -memorialises -memorialising -memorialist -memorialists -memorialize -memorialized -memorializes -memorializing -memorially -memorials -memories -memorise -memorised -memorises -memorising -memoriter -memorizable -memorization -memorizations -memorize -memorized -memorizer -memorizers -memorizes -memorizing -memory -memos -mems -memsahib -memsahibs -men -menace -menaced -menacer -menacers -menaces -menacing -menacingly -menad -menadione -menadiones -menads -menage -menagerie -menageries -menages -menarche -menarcheal -menarches -menazon -menazons -mend -mendable -mendacious -mendaciously -mendaciousness -mendaciousnesses -mendacities -mendacity -mended -mendelevium -mendeleviums -mender -menders -mendicancies -mendicancy -mendicant -mendicants -mendicities -mendicity -mendigo -mendigos -mending -mendings -mends -menfolk -menfolks -menhaden -menhadens -menhir -menhirs -menial -menially -menials -meningeal -meninges -meningioma -meningiomas -meningiomata -meningitic -meningitides -meningitis -meningococcal -meningococci -meningococcic -meningococcus -meningoencephalitic -meningoencephalitides -meningoencephalitis -meninx -meniscal -menisci -meniscus -meniscuses -meno -menologies -menology -menopausal -menopause -menopauses -menorah -menorahs -menorrhagia -menorrhagias -mensa -mensae -mensal -mensas -mensch -menschen -mensches -mense -mensed -menseful -menseless -menservants -menses -mensing -menstrua -menstrual -menstruate -menstruated -menstruates -menstruating -menstruation -menstruations -menstruum -menstruums -mensurabilities -mensurability -mensurable -mensural -mensuration -mensurations -menswear -menta -mental -mentalism -mentalisms -mentalist -mentalistic -mentalists -mentalities -mentality -mentally -mentation -mentations -menthene -menthenes -menthol -mentholated -menthols -mention -mentionable -mentioned -mentioner -mentioners -mentioning -mentions -mentor -mentored -mentoring -mentors -mentorship -mentorships -mentum -menu -menus -meou -meoued -meouing -meous -meow -meowed -meowing -meows -meperidine -meperidines -mephitic -mephitis -mephitises -meprobamate -meprobamates -merbromin -merbromins -mercantile -mercantilism -mercantilisms -mercantilist -mercantilistic -mercantilists -mercaptan -mercaptans -mercapto -mercaptopurine -mercaptopurines -mercenaries -mercenarily -mercenariness -mercenarinesses -mercenary -mercer -merceries -mercerise -mercerised -mercerises -mercerising -mercerization -mercerizations -mercerize -mercerized -mercerizes -mercerizing -mercers -mercery -merchandise -merchandised -merchandiser -merchandisers -merchandises -merchandising -merchandisings -merchandize -merchandized -merchandizes -merchandizing -merchandizings -merchant -merchantabilities -merchantability -merchantable -merchanted -merchanting -merchantman -merchantmen -merchants -mercies -merciful -mercifully -mercifulness -mercifulnesses -merciless -mercilessly -mercilessness -mercilessnesses -mercurate -mercurated -mercurates -mercurating -mercuration -mercurations -mercurial -mercurially -mercurialness -mercurialnesses -mercurials -mercuric -mercuries -mercurous -mercury -mercy -merde -merdes -mere -merely -merengue -merengues -merer -meres -merest -meretricious -meretriciously -meretriciousness -meretriciousnesses -merganser -mergansers -merge -merged -mergence -mergences -merger -mergers -merges -merging -meridian -meridians -meridional -meridionally -meridionals -meringue -meringues -merino -merinos -merises -merisis -meristem -meristematic -meristematically -meristems -meristic -meristically -merit -merited -meriting -meritocracies -meritocracy -meritocrat -meritocratic -meritocrats -meritorious -meritoriously -meritoriousness -meritoriousnesses -merits -merk -merks -merl -merle -merles -merlin -merlins -merlon -merlons -merlot -merlots -merls -mermaid -mermaids -merman -mermen -meroblastic -meroblastically -merocrine -meromorphic -meromyosin -meromyosins -meropia -meropias -meropic -merozoite -merozoites -merrier -merriest -merrily -merriment -merriments -merriness -merrinesses -merry -merrymaker -merrymakers -merrymaking -merrymakings -merrythought -merrythoughts -mesa -mesalliance -mesalliances -mesally -mesarch -mesas -mescal -mescaline -mescalines -mescals -mesclun -mescluns -mesdames -mesdemoiselles -meseemed -meseemeth -meseems -mesembryanthemum -mesembryanthemums -mesencephala -mesencephalic -mesencephalon -mesenchymal -mesenchyme -mesenchymes -mesentera -mesenteric -mesenteries -mesenteron -mesentery -mesh -meshed -meshes -meshier -meshiest -meshing -meshuga -meshugah -meshugga -meshuggah -meshugge -meshuggener -meshuggeners -meshwork -meshworks -meshy -mesial -mesially -mesian -mesic -mesmeric -mesmerically -mesmerise -mesmerised -mesmerises -mesmerising -mesmerism -mesmerisms -mesmerist -mesmerists -mesmerize -mesmerized -mesmerizer -mesmerizers -mesmerizes -mesmerizing -mesnalties -mesnalty -mesne -mesnes -mesocarp -mesocarps -mesocyclone -mesocyclones -mesoderm -mesodermal -mesoderms -mesoglea -mesogleas -mesogloea -mesogloeas -mesomere -mesomeres -mesomorph -mesomorphic -mesomorphies -mesomorphs -mesomorphy -meson -mesonephric -mesonephroi -mesonephros -mesonic -mesons -mesopause -mesopauses -mesopelagic -mesophyl -mesophyll -mesophyllic -mesophyllous -mesophylls -mesophyls -mesophyte -mesophytes -mesophytic -mesoscale -mesosome -mesosomes -mesosphere -mesospheres -mesospheric -mesothelia -mesothelial -mesothelioma -mesotheliomas -mesotheliomata -mesothelium -mesothoraces -mesothoracic -mesothorax -mesothoraxes -mesotron -mesotrons -mesotrophic -mesquit -mesquite -mesquites -mesquits -mess -message -messaged -messages -messaging -messaline -messalines -messan -messans -messed -messeigneurs -messenger -messengers -messes -messiah -messiahs -messiahship -messiahships -messianic -messianism -messianisms -messier -messiest -messieurs -messily -messiness -messinesses -messing -messman -messmate -messmates -messmen -messuage -messuages -messy -mestee -mestees -mesteso -mestesoes -mestesos -mestino -mestinoes -mestinos -mestiza -mestizas -mestizo -mestizoes -mestizos -mestranol -mestranols -met -meta -metabolic -metabolically -metabolism -metabolisms -metabolite -metabolites -metabolizable -metabolize -metabolized -metabolizes -metabolizing -metacarpal -metacarpals -metacarpi -metacarpus -metacenter -metacenters -metacentric -metacentrics -metacercaria -metacercariae -metacercarial -metachromatic -metaethical -metaethics -metafiction -metafictional -metafictionist -metafictionists -metafictions -metagalactic -metagalaxies -metagalaxy -metage -metageneses -metagenesis -metagenetic -metages -metal -metalanguage -metalanguages -metaled -metaling -metalinguistic -metalinguistics -metalise -metalised -metalises -metalising -metalist -metalists -metalize -metalized -metalizes -metalizing -metalled -metallic -metallically -metallics -metalliferous -metalling -metallization -metallizations -metallize -metallized -metallizes -metallizing -metallographer -metallographers -metallographic -metallographically -metallographies -metallography -metalloid -metalloidal -metalloids -metallophone -metallophones -metallurgical -metallurgically -metallurgies -metallurgist -metallurgists -metallurgy -metalmark -metalmarks -metals -metalsmith -metalsmiths -metalware -metalwares -metalwork -metalworker -metalworkers -metalworking -metalworkings -metalworks -metamathematical -metamathematics -metamer -metamere -metameres -metameric -metamerically -metamerism -metamerisms -metamers -metamorphic -metamorphically -metamorphism -metamorphisms -metamorphose -metamorphosed -metamorphoses -metamorphosing -metamorphosis -metanalyses -metanalysis -metanephric -metanephroi -metanephros -metaphase -metaphases -metaphor -metaphoric -metaphorical -metaphorically -metaphors -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 -metatarsi -metatarsus -metate -metates -metatheses -metathesis -metathetic -metathetical -metathetically -metathoraces -metathoracic -metathorax -metathoraxes -metaxylem -metaxylems -metazoa -metazoal -metazoan -metazoans -metazoic -metazoon -mete -meted -metempsychoses -metempsychosis -metencephala -metencephalic -metencephalon -metencephalons -meteor -meteoric -meteorically -meteorite -meteorites -meteoritic -meteoritical -meteoriticist -meteoriticists -meteoritics -meteoroid -meteoroidal -meteoroids -meteorologic -meteorological -meteorologically -meteorologies -meteorologist -meteorologists -meteorology -meteors -metepa -metepas -meter -meterage -meterages -metered -metering -meters -meterstick -metersticks -metes -metestrus -metestruses -meth -methacrylate -methacrylates -methadon -methadone -methadones -methadons -methamphetamine -methamphetamines -methanation -methanations -methane -methanes -methanol -methanols -methaqualone -methaqualones -methedrine -methedrines -metheglin -metheglins -methemoglobin -methemoglobinemia -methemoglobinemias -methemoglobins -methenamine -methenamines -methicillin -methicillins -methinks -methionine -methionines -method -methodic -methodical -methodically -methodicalness -methodicalnesses -methodise -methodised -methodises -methodising -methodism -methodisms -methodist -methodistic -methodists -methodize -methodized -methodizes -methodizing -methodological -methodologically -methodologies -methodologist -methodologists -methodology -methods -methotrexate -methotrexates -methought -methoxy -methoxychlor -methoxychlors -methoxyflurane -methoxyfluranes -methoxyl -meths -methyl -methylal -methylals -methylamine -methylamines -methylase -methylases -methylate -methylated -methylates -methylating -methylation -methylations -methylator -methylators -methylcellulose -methylcelluloses -methylcholanthrene -methylcholanthrenes -methyldopa -methyldopas -methylene -methylenes -methylic -methylmercuries -methylmercury -methylnaphthalene -methylnaphthalenes -methylphenidate -methylphenidates -methylprednisolone -methylprednisolones -methyls -methylxanthine -methylxanthines -methysergide -methysergides -meticais -metical -meticals -meticulosities -meticulosity -meticulous -meticulously -meticulousness -meticulousnesses -metier -metiers -meting -metis -metisse -metisses -metonym -metonymic -metonymical -metonymies -metonyms -metonymy -metopae -metope -metopes -metopic -metopon -metopons -metre -metred -metres -metric -metrical -metrically -metrication -metrications -metricize -metricized -metricizes -metricizing -metrics -metrified -metrifies -metrify -metrifying -metring -metrist -metrists -metritis -metritises -metro -metrological -metrologies -metrologist -metrologists -metrology -metronidazole -metronidazoles -metronome -metronomes -metronomic -metronomical -metronomically -metroplex -metroplexes -metropolis -metropolises -metropolitan -metropolitans -metrorrhagia -metrorrhagias -metros -mettle -mettled -mettles -mettlesome -metump -metumps -meuniere -mew -mewed -mewing -mewl -mewled -mewler -mewlers -mewling -mewls -mews -mezcal -mezcals -meze -mezereon -mezereons -mezereum -mezereums -mezes -mezquit -mezquite -mezquites -mezquits -mezuza -mezuzah -mezuzahs -mezuzas -mezuzot -mezuzoth -mezzanine -mezzanines -mezzo -mezzos -mezzotint -mezzotints -mho -mhos -mi -miaou -miaoued -miaouing -miaous -miaow -miaowed -miaowing -miaows -miasm -miasma -miasmal -miasmas -miasmata -miasmatic -miasmic -miasmically -miasms -miaul -miauled -miauling -miauls -mib -mibs -mica -micaceous -micas -micawber -micawbers -mice -micell -micella -micellae -micellar -micelle -micelles -micells -miche -miched -miches -miching -mick -mickey -mickeys -mickle -mickler -mickles -micklest -micks -micra -micrified -micrifies -micrify -micrifying -micro -microampere -microamperes -microanalyses -microanalysis -microanalyst -microanalysts -microanalytic -microanalytical -microanatomical -microanatomies -microanatomy -microbalance -microbalances -microbar -microbarograph -microbarographs -microbars -microbe -microbeam -microbeams -microbes -microbial -microbic -microbiologic -microbiological -microbiologically -microbiologies -microbiologist -microbiologists -microbiology -microbrew -microbrewer -microbreweries -microbrewers -microbrewery -microbrewing -microbrewings -microbrews -microburst -microbursts -microbus -microbuses -microbusses -microcalorimeter -microcalorimeters -microcalorimetric -microcalorimetries -microcalorimetry -microcapsule -microcapsules -microcassette -microcassettes -microcephalic -microcephalics -microcephalies -microcephaly -microchip -microchips -microcircuit -microcircuitries -microcircuitry -microcircuits -microcirculation -microcirculations -microcirculatory -microclimate -microclimates -microclimatic -microcline -microclines -micrococcal -micrococci -micrococcus -microcode -microcodes -microcomputer -microcomputers -microcopies -microcopy -microcosm -microcosmic -microcosmically -microcosmos -microcosmoses -microcosms -microcrystal -microcrystalline -microcrystallinities -microcrystallinity -microcrystals -microcultural -microculture -microcultures -microcurie -microcuries -microcyte -microcytes -microcytic -microdensitometer -microdensitometers -microdensitometric -microdensitometries -microdensitometry -microdissection -microdissections -microdot -microdots -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 -microfilm -microfilmable -microfilmed -microfilmer -microfilmers -microfilming -microfilms -microflora -microflorae -microfloral -microfloras -microform -microforms -microfossil -microfossils -microfungi -microfungus -microfunguses -microgamete -microgametes -microgametocyte -microgametocytes -microgram -micrograms -micrograph -micrographed -micrographic -micrographically -micrographics -micrographing -micrographs -microgravities -microgravity -microgroove -microgrooves -microhabitat -microhabitats -microhm -microhms -microimage -microimages -microinch -microinches -microinject -microinjected -microinjecting -microinjection -microinjections -microinjects -microinstruction -microinstructions -microlepidoptera -microlepidopterous -microliter -microliters -microlith -microlithic -microliths -microluces -microlux -microluxes -micromanage -micromanaged -micromanagement -micromanagements -micromanager -micromanagers -micromanages -micromanaging -micromanipulation -micromanipulations -micromanipulator -micromanipulators -micromere -micromeres -micrometeorite -micrometeorites -micrometeoritic -micrometeoroid -micrometeoroids -micrometeorological -micrometeorologies -micrometeorologist -micrometeorologists -micrometeorology -micrometer -micrometers -micromethod -micromethods -micromho -micromhos -micromini -microminiature -microminiaturization -microminiaturizations -microminiaturized -microminis -micromolar -micromole -micromoles -micromorphological -micromorphologies -micromorphology -micron -micronize -micronized -micronizes -micronizing -microns -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 -micropore -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 -micropyle -micropyles -microquake -microquakes -microradiograph -microradiographic -microradiographies -microradiographs -microradiography -microreader -microreaders -microreproduction -microreproductions -micros -microscale -microscales -microscope -microscopes -microscopic -microscopical -microscopically -microscopies -microscopist -microscopists -microscopy -microsecond -microseconds -microseism -microseismic -microseismicities -microseismicity -microseisms -microsomal -microsome -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 -microtome -microtomes -microtonal -microtonalities -microtonality -microtonally -microtone -microtones -microtubular -microtubule -microtubules -microvascular -microvasculature -microvasculatures -microvillar -microvilli -microvillous -microvillus -microvolt -microvolts -microwatt -microwatts -microwavable -microwave -microwaveable -microwaved -microwaves -microwaving -microworld -microworlds -micrurgies -micrurgy -micturate -micturated -micturates -micturating -micturition -micturitions -mid -midafternoon -midafternoons -midair -midairs -midbrain -midbrains -midcourse -midcult -midcults -midday -middays -midden -middens -middies -middle -middlebrow -middlebrows -middled -middleman -middlemen -middler -middlers -middles -middleweight -middleweights -middling -middlingly -middlings -middorsal -middy -midfield -midfielder -midfielders -midfields -midge -midges -midget -midgets -midgut -midguts -midi -midiron -midirons -midis -midland -midlands -midlatitude -midlatitudes -midleg -midlegs -midlife -midline -midlines -midlives -midmonth -midmonths -midmorning -midmornings -midmost -midmosts -midnight -midnightly -midnights -midnoon -midnoons -midpoint -midpoints -midrange -midranges -midrash -midrashic -midrashim -midrashot -midrashoth -midrib -midribs -midriff -midriffs -mids -midsagittal -midsection -midsections -midship -midshipman -midshipmen -midships -midsize -midsized -midsole -midsoles -midspace -midspaces -midst -midstories -midstory -midstream -midstreams -midsts -midsummer -midsummers -midterm -midterms -midtown -midtowns -midwatch -midwatches -midway -midways -midweek -midweekly -midweeks -midwestern -midwife -midwifed -midwiferies -midwifery -midwifes -midwifing -midwinter -midwinters -midwived -midwives -midwiving -midyear -midyears -mien -miens -mifepristone -mifepristones -miff -miffed -miffier -miffiest -miffing -miffs -miffy -mig -migg -miggle -miggles -miggs -might -mightier -mightiest -mightily -mightiness -mightinesses -mights -mighty -mignon -mignonette -mignonettes -mignonne -mignons -migraine -migraines -migrainous -migrant -migrants -migrate -migrated -migrates -migrating -migration -migrational -migrations -migrator -migrators -migratory -migs -mihrab -mihrabs -mijnheer -mijnheers -mikado -mikados -mike -miked -mikes -miking -mikra -mikron -mikrons -mikvah -mikvahs -mikveh -mikvehs -mikvos -mikvot -mikvoth -mil -miladi -miladies -miladis -milady -milage -milages -milch -milchig -mild -milden -mildened -mildening -mildens -milder -mildest -mildew -mildewed -mildewing -mildews -mildewy -mildly -mildness -mildnesses -mile -mileage -mileages -milepost -mileposts -miler -milers -miles -milesimo -milesimos -milestone -milestones -milfoil -milfoils -milia -miliaria -miliarial -miliarias -miliary -milieu -milieus -milieux -militance -militances -militancies -militancy -militant -militantly -militantness -militantnesses -militants -militaria -militaries -militarily -militarise -militarised -militarises -militarising -militarism -militarisms -militarist -militaristic -militaristically -militarists -militarization -militarizations -militarize -militarized -militarizes -militarizing -military -militate -militated -militates -militating -militia -militiaman -militiamen -militias -milium -milk -milked -milker -milkers -milkfish -milkfishes -milkier -milkiest -milkily -milkiness -milkinesses -milking -milkmaid -milkmaids -milkman -milkmen -milks -milkshake -milkshakes -milkshed -milksheds -milksop -milksops -milkweed -milkweeds -milkwood -milkwoods -milkwort -milkworts -milky -mill -millable -millage -millages -millcake -millcakes -milldam -milldams -mille -milled -millefiori -millefioris -millefleur -millefleurs -millenarian -millenarianism -millenarianisms -millenarians -millenaries -millenary -millennia -millennial -millennialism -millennialisms -millennialist -millennialists -millennium -millenniums -milleped -millepeds -miller -millerite -millerites -millers -milles -millesimal -millesimally -millesimals -millet -millets -milliampere -milliamperes -milliard -milliards -milliare -milliares -milliaries -milliary -millibar -millibars -millicurie -millicuries -millidegree -millidegrees -millieme -milliemes -millier -milliers -milligal -milligals -milligram -milligrams -millihenries -millihenry -millihenrys -millilambert -millilamberts -milliliter -milliliters -milliluces -millilux -milliluxes -millime -millimes -millimeter -millimeters -millimho -millimhos -millimicron -millimicrons -millimolar -millimole -millimoles -milline -milliner -millineries -milliners -millinery -millines -milling -millings -milliohm -milliohms -million -millionaire -millionaires -millionairess -millionairesses -millionfold -millions -millionth -millionths -milliosmol -milliosmols -milliped -millipede -millipedes -millipeds -milliradian -milliradians -millirem -millirems -milliroentgen -milliroentgens -millisecond -milliseconds -millivolt -millivolts -milliwatt -milliwatts -millpond -millponds -millrace -millraces -millrun -millruns -mills -millstone -millstones -millstream -millstreams -millwork -millworks -millwright -millwrights -milneb -milnebs -milo -milord -milords -milos -milpa -milpas -milquetoast -milquetoasts -milreis -mils -milt -milted -milter -milters -miltier -miltiest -milting -milts -milty -mim -mimbar -mimbars -mime -mimed -mimeo -mimeoed -mimeograph -mimeographed -mimeographing -mimeographs -mimeoing -mimeos -mimer -mimers -mimes -mimeses -mimesis -mimesises -mimetic -mimetically -mimetite -mimetites -mimic -mimical -mimicked -mimicker -mimickers -mimicking -mimicries -mimicry -mimics -miming -mimosa -mimosas -mina -minable -minacities -minacity -minae -minaret -minarets -minas -minatory -minaudiere -minaudieres -mince -minced -mincemeat -mincemeats -mincer -mincers -minces -mincier -minciest -mincing -mincingly -mincy -mind -mindblower -mindblowers -minded -mindedness -mindednesses -minder -minders -mindful -mindfully -mindfulness -mindfulnesses -minding -mindless -mindlessly -mindlessness -mindlessnesses -minds -mindset -mindsets -mine -mineable -mined -minefield -minefields -minelayer -minelayers -miner -mineral -mineralise -mineralised -mineralises -mineralising -mineralizable -mineralization -mineralizations -mineralize -mineralized -mineralizer -mineralizers -mineralizes -mineralizing -mineralocorticoid -mineralocorticoids -mineralogic -mineralogical -mineralogically -mineralogies -mineralogist -mineralogists -mineralogy -minerals -miners -mines -minestrone -minestrones -minesweeper -minesweepers -minesweeping -minesweepings -mingier -mingiest -mingle -mingled -mingler -minglers -mingles -mingling -mingy -mini -miniature -miniatures -miniaturist -miniaturistic -miniaturists -miniaturization -miniaturizations -miniaturize -miniaturized -miniaturizes -miniaturizing -minibar -minibars -minibike -minibiker -minibikers -minibikes -minibus -minibuses -minibusses -minicab -minicabs -minicam -minicamp -minicamps -minicams -minicar -minicars -minicomputer -minicomputers -minicourse -minicourses -minified -minifies -minify -minifying -minikin -minikins -minilab -minilabs -minim -minima -minimal -minimalism -minimalisms -minimalist -minimalists -minimally -minimals -minimax -minimaxes -minimill -minimills -minimise -minimised -minimises -minimising -minimization -minimizations -minimize -minimized -minimizer -minimizers -minimizes -minimizing -minims -minimum -minimums -mining -minings -minion -minions -minipark -miniparks -minis -minischool -minischools -miniscule -miniscules -miniseries -minish -minished -minishes -minishing -miniski -miniskirt -miniskirted -miniskirts -miniskis -ministate -ministates -minister -ministered -ministerial -ministerially -ministering -ministers -ministrant -ministrants -ministration -ministrations -ministries -ministroke -ministrokes -ministry -minium -miniums -minivan -minivans -miniver -minivers -mink -minke -minkes -minks -minnesinger -minnesingers -minnies -minnow -minnows -minny -minor -minorca -minorcas -minored -minoring -minorities -minority -minors -minoxidil -minoxidils -minster -minsters -minstrel -minstrels -minstrelsies -minstrelsy -mint -mintage -mintages -minted -minter -minters -mintier -mintiest -minting -mints -minty -minuend -minuends -minuet -minuets -minus -minuscule -minuscules -minuses -minute -minuted -minutely -minuteman -minutemen -minuteness -minutenesses -minuter -minutes -minutest -minutia -minutiae -minutial -minuting -minx -minxes -minxish -minyan -minyanim -minyans -mioses -miosis -miotic -miotics -miquelet -miquelets -mir -miracidia -miracidial -miracidium -miracle -miracles -miraculous -miraculously -miraculousness -miraculousnesses -mirador -miradors -mirage -mirages -mire -mired -mires -mirex -mirexes -miri -mirier -miriest -miriness -mirinesses -miring -mirk -mirker -mirkest -mirkier -mirkiest -mirkily -mirks -mirky -mirliton -mirlitons -mirror -mirrored -mirroring -mirrorlike -mirrors -mirs -mirth -mirthful -mirthfully -mirthfulness -mirthfulnesses -mirthless -mirthlessly -mirths -miry -mirza -mirzas -mis -misact -misacted -misacting -misacts -misadapt -misadapted -misadapting -misadapts -misadd -misadded -misadding -misaddress -misaddressed -misaddresses -misaddressing -misadds -misadjust -misadjusted -misadjusting -misadjusts -misadministration -misadministrations -misadventure -misadventures -misadvise -misadvised -misadvises -misadvising -misagent -misagents -misaim -misaimed -misaiming -misaims -misalign -misaligned -misaligning -misalignment -misalignments -misaligns -misalliance -misalliances -misallied -misallies -misallocate -misallocated -misallocates -misallocating -misallocation -misallocations -misally -misallying -misalter -misaltered -misaltering -misalters -misanalyses -misanalysis -misandries -misandry -misanthrope -misanthropes -misanthropic -misanthropically -misanthropies -misanthropy -misapplication -misapplications -misapplied -misapplies -misapply -misapplying -misappraisal -misappraisals -misapprehend -misapprehended -misapprehending -misapprehends -misapprehension -misapprehensions -misappropriate -misappropriated -misappropriates -misappropriating -misappropriation -misappropriations -misarticulate -misarticulated -misarticulates -misarticulating -misassay -misassayed -misassaying -misassays -misassemble -misassembled -misassembles -misassembling -misassumption -misassumptions -misate -misatone -misatoned -misatones -misatoning -misattribute -misattributed -misattributes -misattributing -misattribution -misattributions -misaver -misaverred -misaverring -misavers -misaward -misawarded -misawarding -misawards -misbalance -misbalanced -misbalances -misbalancing -misbecame -misbecome -misbecomes -misbecoming -misbegan -misbegin -misbeginning -misbegins -misbegot -misbegotten -misbegun -misbehave -misbehaved -misbehaver -misbehavers -misbehaves -misbehaving -misbehavior -misbehaviors -misbelief -misbeliefs -misbelieve -misbelieved -misbeliever -misbelievers -misbelieves -misbelieving -misbias -misbiased -misbiases -misbiasing -misbiassed -misbiasses -misbiassing -misbill -misbilled -misbilling -misbills -misbind -misbinding -misbinds -misbound -misbrand -misbranded -misbranding -misbrands -misbuild -misbuilding -misbuilds -misbuilt -misbutton -misbuttoned -misbuttoning -misbuttons -miscalculate -miscalculated -miscalculates -miscalculating -miscalculation -miscalculations -miscall -miscalled -miscalling -miscalls -miscaption -miscaptioned -miscaptioning -miscaptions -miscarriage -miscarriages -miscarried -miscarries -miscarry -miscarrying -miscast -miscasting -miscasts -miscatalog -miscataloged -miscataloging -miscatalogs -miscegenation -miscegenational -miscegenations -miscellanea -miscellaneous -miscellaneously -miscellaneousness -miscellaneousnesses -miscellanies -miscellanist -miscellanists -miscellany -mischance -mischances -mischannel -mischanneled -mischanneling -mischannelled -mischannelling -mischannels -mischaracterization -mischaracterizations -mischaracterize -mischaracterized -mischaracterizes -mischaracterizing -mischarge -mischarged -mischarges -mischarging -mischief -mischiefs -mischievous -mischievously -mischievousness -mischievousnesses -mischoice -mischoices -miscibilities -miscibility -miscible -miscitation -miscitations -miscite -miscited -miscites -misciting -misclaim -misclaimed -misclaiming -misclaims -misclass -misclassed -misclasses -misclassification -misclassifications -misclassified -misclassifies -misclassify -misclassifying -misclassing -miscode -miscoded -miscodes -miscoding -miscoin -miscoined -miscoining -miscoins -miscolor -miscolored -miscoloring -miscolors -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 -miscook -miscooked -miscooking -miscooks -miscopied -miscopies -miscopy -miscopying -miscorrelation -miscorrelations -miscount -miscounted -miscounting -miscounts -miscreant -miscreants -miscreate -miscreated -miscreates -miscreating -miscreation -miscreations -miscue -miscued -miscues -miscuing -miscut -miscuts -miscutting -misdate -misdated -misdates -misdating -misdeal -misdealing -misdeals -misdealt -misdeed -misdeeds -misdeem -misdeemed -misdeeming -misdeems -misdefine -misdefined -misdefines -misdefining -misdemeanant -misdemeanants -misdemeanor -misdemeanors -misdescribe -misdescribed -misdescribes -misdescribing -misdescription -misdescriptions -misdevelop -misdeveloped -misdeveloping -misdevelops -misdiagnose -misdiagnosed -misdiagnoses -misdiagnosing -misdiagnosis -misdial -misdialed -misdialing -misdialled -misdialling -misdials -misdid -misdirect -misdirected -misdirecting -misdirection -misdirections -misdirects -misdistribution -misdistributions -misdivision -misdivisions -misdo -misdoer -misdoers -misdoes -misdoing -misdoings -misdone -misdoubt -misdoubted -misdoubting -misdoubts -misdraw -misdrawing -misdrawn -misdraws -misdrew -misdrive -misdriven -misdrives -misdriving -misdrove -mise -misease -miseases -miseat -miseaten -miseating -miseats -misedit -misedited -misediting -misedits -miseducate -miseducated -miseducates -miseducating -miseducation -miseducations -misemphases -misemphasis -misemphasize -misemphasized -misemphasizes -misemphasizing -misemploy -misemployed -misemploying -misemployment -misemployments -misemploys -misenrol -misenroll -misenrolled -misenrolling -misenrolls -misenrols -misenter -misentered -misentering -misenters -misentries -misentry -miser -miserable -miserableness -miserablenesses -miserables -miserably -miserere -misereres -misericord -misericorde -misericordes -misericords -miseries -miserliness -miserlinesses -miserly -misers -misery -mises -misesteem -misesteemed -misesteeming -misesteems -misestimate -misestimated -misestimates -misestimating -misestimation -misestimations -misevaluate -misevaluated -misevaluates -misevaluating -misevaluation -misevaluations -misevent -misevents -misfaith -misfaiths -misfeasance -misfeasances -misfeasor -misfeasors -misfield -misfielded -misfielding -misfields -misfile -misfiled -misfiles -misfiling -misfire -misfired -misfires -misfiring -misfit -misfits -misfitted -misfitting -misfocus -misfocused -misfocuses -misfocusing -misfocussed -misfocusses -misfocussing -misform -misformed -misforming -misforms -misfortune -misfortunes -misframe -misframed -misframes -misframing -misfunction -misfunctioned -misfunctioning -misfunctions -misgauge -misgauged -misgauges -misgauging -misgave -misgive -misgiven -misgives -misgiving -misgivings -misgovern -misgoverned -misgoverning -misgovernment -misgovernments -misgoverns -misgrade -misgraded -misgrades -misgrading -misgraft -misgrafted -misgrafting -misgrafts -misgrew -misgrow -misgrowing -misgrown -misgrows -misguess -misguessed -misguesses -misguessing -misguidance -misguidances -misguide -misguided -misguidedly -misguidedness -misguidednesses -misguider -misguiders -misguides -misguiding -mishandle -mishandled -mishandles -mishandling -mishanter -mishanters -mishap -mishaps -mishear -misheard -mishearing -mishears -mishit -mishits -mishitting -mishmash -mishmashes -mishmosh -mishmoshes -misidentification -misidentifications -misidentified -misidentifies -misidentify -misidentifying -misimpression -misimpressions -misinfer -misinferred -misinferring -misinfers -misinform -misinformation -misinformations -misinformed -misinforming -misinforms -misinter -misinterpret -misinterpretation -misinterpretations -misinterpreted -misinterpreting -misinterprets -misinterred -misinterring -misinters -misjoin -misjoinder -misjoinders -misjoined -misjoining -misjoins -misjudge -misjudged -misjudges -misjudging -misjudgment -misjudgments -miskal -miskals -miskeep -miskeeping -miskeeps -miskept -miskick -miskicked -miskicking -miskicks -misknew -misknow -misknowing -misknowledge -misknowledges -misknown -misknows -mislabel -mislabeled -mislabeling -mislabelled -mislabelling -mislabels -mislabor -mislabored -mislaboring -mislabors -mislaid -mislain -mislay -mislayer -mislayers -mislaying -mislays -mislead -misleader -misleaders -misleading -misleadingly -misleads -misleared -mislearn -mislearned -mislearning -mislearns -mislearnt -misled -mislie -mislies -mislight -mislighted -mislighting -mislights -mislike -misliked -misliker -mislikers -mislikes -misliking -mislit -mislive -mislived -mislives -misliving -mislocate -mislocated -mislocates -mislocating -mislocation -mislocations -mislodge -mislodged -mislodges -mislodging -mislying -mismade -mismake -mismakes -mismaking -mismanage -mismanaged -mismanagement -mismanagements -mismanages -mismanaging -mismark -mismarked -mismarking -mismarks -mismarriage -mismarriages -mismatch -mismatched -mismatches -mismatching -mismate -mismated -mismates -mismating -mismeasurement -mismeasurements -mismeet -mismeeting -mismeets -mismet -mismove -mismoved -mismoves -mismoving -misname -misnamed -misnames -misnaming -misnomer -misnomered -misnomers -miso -misogamies -misogamist -misogamists -misogamy -misogynic -misogynies -misogynist -misogynistic -misogynists -misogyny -misologies -misology -misoneism -misoneisms -misorder -misordered -misordering -misorders -misorient -misorientation -misorientations -misoriented -misorienting -misorients -misos -mispackage -mispackaged -mispackages -mispackaging -mispage -mispaged -mispages -mispaging -mispaint -mispainted -mispainting -mispaints -misparse -misparsed -misparses -misparsing -mispart -misparted -misparting -misparts -mispatch -mispatched -mispatches -mispatching -mispen -mispenned -mispenning -mispens -misperceive -misperceived -misperceives -misperceiving -misperception -misperceptions -misphrase -misphrased -misphrases -misphrasing -misplace -misplaced -misplacement -misplacements -misplaces -misplacing -misplan -misplanned -misplanning -misplans -misplant -misplanted -misplanting -misplants -misplay -misplayed -misplaying -misplays -misplead -mispleaded -mispleading -mispleads -mispled -mispoint -mispointed -mispointing -mispoints -mispoise -mispoised -mispoises -mispoising -misposition -mispositioned -mispositioning -mispositions -misprice -mispriced -misprices -mispricing -misprint -misprinted -misprinting -misprints -misprision -misprisions -misprize -misprized -misprizes -misprizing -misprogram -misprogramed -misprograming -misprogrammed -misprogramming -misprograms -mispronounce -mispronounced -mispronounces -mispronouncing -mispronunciation -mispronunciations -misquotation -misquotations -misquote -misquoted -misquotes -misquoting -misraise -misraised -misraises -misraising -misrate -misrated -misrates -misrating -misread -misreading -misreads -misreckon -misreckoned -misreckoning -misreckons -misrecollection -misrecollections -misrecord -misrecorded -misrecording -misrecords -misrefer -misreference -misreferences -misreferred -misreferring -misrefers -misregister -misregistered -misregistering -misregisters -misregistration -misregistrations -misrelate -misrelated -misrelates -misrelating -misrelied -misrelies -misrely -misrelying -misremember -misremembered -misremembering -misremembers -misrender -misrendered -misrendering -misrenders -misreport -misreported -misreporting -misreports -misrepresent -misrepresentation -misrepresentations -misrepresentative -misrepresented -misrepresenting -misrepresents -misroute -misrouted -misroutes -misrouting -misrule -misruled -misrules -misruling -miss -missable -missaid -missal -missals -missay -missaying -missays -misseat -misseated -misseating -misseats -missed -missel -missels -missend -missending -missends -missense -missenses -missent -misses -misset -missets -missetting -misshape -misshaped -misshapen -misshapenly -misshapes -misshaping -misshod -missies -missile -missileer -missileers -missileman -missilemen -missileries -missilery -missiles -missilries -missilry -missing -missiologies -missiology -mission -missionaries -missionary -missioned -missioner -missioners -missioning -missionization -missionizations -missionize -missionized -missionizer -missionizers -missionizes -missionizing -missions -missis -missises -missive -missives -missort -missorted -missorting -missorts -missound -missounded -missounding -missounds -missout -missouts -misspace -misspaced -misspaces -misspacing -misspeak -misspeaking -misspeaks -misspell -misspelled -misspelling -misspellings -misspells -misspelt -misspend -misspending -misspends -misspent -misspoke -misspoken -misstart -misstarted -misstarting -misstarts -misstate -misstated -misstatement -misstatements -misstates -misstating -missteer -missteered -missteering -missteers -misstep -missteps -misstop -misstopped -misstopping -misstops -misstricken -misstrike -misstrikes -misstriking -misstruck -misstyle -misstyled -misstyles -misstyling -missuit -missuited -missuiting -missuits -missus -missuses -missy -mist -mistakable -mistake -mistaken -mistakenly -mistaker -mistakers -mistakes -mistaking -mistaught -mistbow -mistbows -misteach -misteaches -misteaching -misted -mistend -mistended -mistending -mistends -mister -misterm -mistermed -misterming -misterms -misters -misteuk -misthink -misthinking -misthinks -misthought -misthrew -misthrow -misthrowing -misthrown -misthrows -mistier -mistiest -mistily -mistime -mistimed -mistimes -mistiming -mistiness -mistinesses -misting -mistitle -mistitled -mistitles -mistitling -mistletoe -mistletoes -mistook -mistouch -mistouched -mistouches -mistouching -mistrace -mistraced -mistraces -mistracing -mistrain -mistrained -mistraining -mistrains -mistral -mistrals -mistranscribe -mistranscribed -mistranscribes -mistranscribing -mistranscription -mistranscriptions -mistranslate -mistranslated -mistranslates -mistranslating -mistranslation -mistranslations -mistreat -mistreated -mistreating -mistreatment -mistreatments -mistreats -mistress -mistresses -mistrial -mistrials -mistrust -mistrusted -mistrustful -mistrustfully -mistrustfulness -mistrustfulnesses -mistrusting -mistrusts -mistruth -mistruths -mistryst -mistrysted -mistrysting -mistrysts -mists -mistune -mistuned -mistunes -mistuning -mistutor -mistutored -mistutoring -mistutors -misty -mistype -mistyped -mistypes -mistyping -misunderstand -misunderstanding -misunderstandings -misunderstands -misunderstood -misunion -misunions -misusage -misusages -misuse -misused -misuser -misusers -misuses -misusing -misutilization -misutilizations -misvalue -misvalued -misvalues -misvaluing -misvocalization -misvocalizations -misword -misworded -miswording -miswords -miswrit -miswrite -miswrites -miswriting -miswritten -miswrote -misyoke -misyoked -misyokes -misyoking -mite -miter -mitered -miterer -miterers -mitering -miters -miterwort -miterworts -mites -mither -mithers -mithridate -mithridates -miticidal -miticide -miticides -mitier -mitiest -mitigate -mitigated -mitigates -mitigating -mitigation -mitigations -mitigative -mitigator -mitigators -mitigatory -mitis -mitises -mitochondria -mitochondrial -mitochondrion -mitogen -mitogenic -mitogenicities -mitogenicity -mitogens -mitomycin -mitomycins -mitoses -mitosis -mitotic -mitotically -mitral -mitre -mitred -mitres -mitrewort -mitreworts -mitring -mitsvah -mitsvahs -mitsvoth -mitt -mitten -mittens -mittimus -mittimuses -mitts -mity -mitzvah -mitzvahs -mitzvoth -mix -mixable -mixed -mixer -mixers -mixes -mixible -mixing -mixologies -mixologist -mixologists -mixology -mixt -mixture -mixtures -mixup -mixups -mizen -mizens -mizzen -mizzenmast -mizzenmasts -mizzens -mizzle -mizzled -mizzles -mizzling -mizzly -mm -mnemonic -mnemonically -mnemonics -mo -moa -moan -moaned -moaner -moaners -moanful -moaning -moans -moas -moat -moated -moating -moatlike -moats -mob -mobbed -mobber -mobbers -mobbing -mobbish -mobcap -mobcaps -mobile -mobiles -mobilise -mobilised -mobilises -mobilising -mobilities -mobility -mobilization -mobilizations -mobilize -mobilized -mobilizes -mobilizing -mobled -mobocracies -mobocracy -mobocrat -mobocratic -mobocrats -mobs -mobster -mobsters -moc -moccasin -moccasins -mocha -mochas -mochila -mochilas -mock -mockable -mocked -mocker -mockeries -mockers -mockery -mocking -mockingbird -mockingbirds -mockingly -mocks -mockup -mockups -mocs -mod -modal -modalities -modality -modally -mode -model -modeled -modeler -modelers -modeling -modelings -modelist -modelists -modelled -modeller -modellers -modelling -models -modem -modems -moderate -moderated -moderately -moderateness -moderatenesses -moderates -moderating -moderation -moderations -moderato -moderator -moderators -moderatorship -moderatorships -moderatos -modern -moderne -moderner -modernes -modernest -modernisation -modernisations -modernise -modernised -modernises -modernising -modernism -modernisms -modernist -modernistic -modernists -modernities -modernity -modernization -modernizations -modernize -modernized -modernizer -modernizers -modernizes -modernizing -modernly -modernness -modernnesses -moderns -modes -modest -modester -modestest -modesties -modestly -modesty -modi -modica -modicum -modicums -modifiabilities -modifiability -modifiable -modification -modifications -modified -modifier -modifiers -modifies -modify -modifying -modillion -modillions -modioli -modiolus -modish -modishly -modishness -modishnesses -modiste -modistes -mods -modulabilities -modulability -modular -modularities -modularity -modularized -modularly -modulate -modulated -modulates -modulating -modulation -modulations -modulator -modulators -modulatory -module -modules -moduli -modulo -modulus -modus -mofette -mofettes -moffette -moffettes -mog -mogged -moggie -moggies -mogging -moggy -mogs -mogul -moguls -mohair -mohairs -mohalim -mohel -mohelim -mohels -mohur -mohurs -moidore -moidores -moieties -moiety -moil -moiled -moiler -moilers -moiling -moilingly -moils -moira -moirai -moire -moires -moist -moisten -moistened -moistener -moisteners -moistening -moistens -moister -moistest -moistful -moistly -moistness -moistnesses -moisture -moistures -moisturise -moisturised -moisturises -moisturising -moisturize -moisturized -moisturizer -moisturizers -moisturizes -moisturizing -mojarra -mojarras -mojo -mojoes -mojos -moke -mokes -mol -mola -molal -molalities -molality -molar -molarities -molarity -molars -molas -molasses -molasseses -mold -moldable -moldboard -moldboards -molded -molder -moldered -moldering -molders -moldier -moldiest -moldiness -moldinesses -molding -moldings -molds -moldwarp -moldwarps -moldy -mole -molecular -molecularly -molecule -molecules -molehill -molehills -moles -moleskin -moleskins -molest -molestation -molestations -molested -molester -molesters -molesting -molests -molies -moline -moll -mollah -mollahs -mollie -mollies -mollification -mollifications -mollified -mollifies -mollify -mollifying -molls -mollusc -molluscan -molluscicidal -molluscicide -molluscicides -molluscs -mollusk -molluskan -mollusks -molly -mollycoddle -mollycoddled -mollycoddler -mollycoddlers -mollycoddles -mollycoddling -moloch -molochs -mols -molt -molted -molten -moltenly -molter -molters -molting -molto -molts -moly -molybdate -molybdates -molybdenite -molybdenites -molybdenum -molybdenums -molybdic -mom -mome -moment -momenta -momentarily -momentariness -momentarinesses -momentary -momently -momento -momentoes -momentos -momentous -momentously -momentousness -momentousnesses -moments -momentum -momentums -momes -momi -momism -momisms -momma -mommas -mommies -mommy -moms -momser -momsers -momus -momuses -momzer -momzers -mon -monachal -monachism -monachisms -monacid -monacids -monad -monadal -monadelphous -monades -monadic -monadism -monadisms -monadnock -monadnocks -monads -monandries -monandry -monarch -monarchal -monarchial -monarchic -monarchical -monarchically -monarchies -monarchism -monarchisms -monarchist -monarchists -monarchs -monarchy -monarda -monardas -monas -monasteries -monastery -monastic -monastically -monasticism -monasticisms -monastics -monatomic -monaural -monaurally -monaxial -monaxon -monaxons -monazite -monazites -monde -mondes -mondo -mondos -monecian -monecious -monellin -monellins -moneran -monerans -monestrous -monetarily -monetarism -monetarisms -monetarist -monetarists -monetary -monetise -monetised -monetises -monetising -monetization -monetizations -monetize -monetized -monetizes -monetizing -money -moneybag -moneybags -moneyed -moneyer -moneyers -moneygrubbing -moneygrubbings -moneylender -moneylenders -moneymaker -moneymakers -moneymaking -moneymakings -moneyman -moneymen -moneys -moneywort -moneyworts -mongeese -monger -mongered -mongering -mongers -mongo -mongoe -mongoes -mongol -mongolism -mongolisms -mongoloid -mongoloids -mongols -mongoose -mongooses -mongos -mongrel -mongrelization -mongrelizations -mongrelize -mongrelized -mongrelizes -mongrelizing -mongrels -mongst -monicker -monickers -monie -monied -monies -moniker -monikers -moniliases -moniliasis -moniliform -monish -monished -monishes -monishing -monism -monisms -monist -monistic -monists -monition -monitions -monitive -monitor -monitored -monitorial -monitories -monitoring -monitors -monitorship -monitorships -monitory -monk -monkeries -monkery -monkey -monkeyed -monkeying -monkeypod -monkeypods -monkeys -monkeyshine -monkeyshines -monkfish -monkfishes -monkhood -monkhoods -monkish -monks -monkshood -monkshoods -mono -monoacid -monoacidic -monoacids -monoamine -monoaminergic -monoamines -monobasic -monocarboxylic -monocarp -monocarpic -monocarps -monochasia -monochasial -monochasium -monochord -monochords -monochromat -monochromatic -monochromatically -monochromaticities -monochromaticity -monochromatism -monochromatisms -monochromator -monochromators -monochromats -monochrome -monochromes -monochromic -monochromist -monochromists -monocle -monocled -monocles -monocline -monoclines -monoclinic -monoclonal -monoclonals -monocoque -monocoques -monocot -monocots -monocotyledon -monocotyledonous -monocotyledons -monocracies -monocracy -monocrat -monocratic -monocrats -monocrystal -monocrystalline -monocrystals -monocular -monocularly -monoculars -monocultural -monoculture -monocultures -monocyclic -monocyte -monocytes -monocytic -monodic -monodical -monodically -monodies -monodisperse -monodist -monodists -monodrama -monodramas -monodramatic -monody -monoecies -monoecious -monoecism -monoecisms -monoecy -monoester -monoesters -monofil -monofilament -monofilaments -monofils -monofuel -monofuels -monogamic -monogamies -monogamist -monogamists -monogamous -monogamously -monogamy -monogastric -monogenean -monogeneans -monogeneses -monogenesis -monogenetic -monogenic -monogenically -monogenies -monogeny -monogerm -monoglot -monoglots -monoglyceride -monoglycerides -monogram -monogramed -monograming -monogrammatic -monogrammed -monogrammer -monogrammers -monogramming -monograms -monograph -monographed -monographic -monographing -monographs -monogynies -monogynous -monogyny -monohull -monohulls -monohybrid -monohybrids -monohydric -monohydroxy -monolayer -monolayers -monolingual -monolinguals -monolith -monolithic -monolithically -monoliths -monolog -monologies -monologist -monologists -monologs -monologue -monologues -monologuist -monologuists -monology -monomania -monomaniac -monomaniacal -monomaniacally -monomaniacs -monomanias -monomer -monomeric -monomers -monometallic -monometallism -monometallisms -monometallist -monometallists -monometer -monometers -monomial -monomials -monomolecular -monomolecularly -monomorphemic -monomorphic -monomorphism -monomorphisms -mononuclear -mononuclears -mononucleate -mononucleated -mononucleoses -mononucleosis -mononucleotide -mononucleotides -monophagies -monophagous -monophagy -monophonic -monophonically -monophonies -monophony -monophthong -monophthongal -monophthongs -monophyletic -monophylies -monophyly -monoplane -monoplanes -monoploid -monoploids -monopode -monopodes -monopodial -monopodially -monopodies -monopody -monopole -monopoles -monopolies -monopolise -monopolised -monopolises -monopolising -monopolist -monopolistic -monopolistically -monopolists -monopolization -monopolizations -monopolize -monopolized -monopolizer -monopolizers -monopolizes -monopolizing -monopoly -monopropellant -monopropellants -monopsonies -monopsonistic -monopsony -monorail -monorails -monorchid -monorchidism -monorchidisms -monorchids -monorhyme -monorhymed -monorhymes -monos -monosaccharide -monosaccharides -monosome -monosomes -monosomic -monosomics -monosomies -monosomy -monospecific -monospecificities -monospecificity -monostele -monosteles -monostelic -monostelies -monostely -monosyllabic -monosyllabically -monosyllabicities -monosyllabicity -monosyllable -monosyllables -monosynaptic -monosynaptically -monoterpene -monoterpenes -monotheism -monotheisms -monotheist -monotheistic -monotheistical -monotheistically -monotheists -monotint -monotints -monotone -monotones -monotonic -monotonically -monotonicities -monotonicity -monotonies -monotonous -monotonously -monotonousness -monotonousnesses -monotony -monotreme -monotremes -monotype -monotypes -monotypic -monounsaturate -monounsaturated -monounsaturates -monovalent -monovular -monoxide -monoxides -monozygotic -mons -monseigneur -monsieur -monsignor -monsignori -monsignorial -monsignors -monsoon -monsoonal -monsoons -monster -monstera -monsteras -monsters -monstrance -monstrances -monstrosities -monstrosity -monstrous -monstrously -monstrousness -monstrousnesses -montadale -montadales -montage -montaged -montages -montaging -montagnard -montagnards -montane -montanes -monte -monteith -monteiths -montero -monteros -montes -month -monthlies -monthlong -monthly -months -montmorillonite -montmorillonites -montmorillonitic -monument -monumental -monumentalities -monumentality -monumentalize -monumentalized -monumentalizes -monumentalizing -monumentally -monuments -monuron -monurons -mony -monzonite -monzonites -moo -mooch -mooched -moocher -moochers -mooches -mooching -mood -moodier -moodiest -moodily -moodiness -moodinesses -moods -moody -mooed -mooing -mool -moola -moolah -moolahs -moolas -mooley -mooleys -mools -moon -moonbeam -moonbeams -moonbow -moonbows -mooncalf -mooncalves -moondust -moondusts -mooned -mooneye -mooneyes -moonfaced -moonfish -moonfishes -moonflower -moonflowers -moonier -mooniest -moonily -mooning -moonish -moonishly -moonless -moonlet -moonlets -moonlight -moonlighted -moonlighter -moonlighters -moonlighting -moonlights -moonlike -moonlit -moonport -moonports -moonquake -moonquakes -moonrise -moonrises -moons -moonsail -moonsails -moonscape -moonscapes -moonseed -moonseeds -moonset -moonsets -moonshine -moonshiner -moonshiners -moonshines -moonshot -moonshots -moonstone -moonstones -moonstruck -moonwalk -moonwalks -moonward -moonwort -moonworts -moony -moor -moorage -moorages -moorcock -moorcocks -moored -moorfowl -moorfowls -moorhen -moorhens -moorier -mooriest -mooring -moorings -moorish -moorland -moorlands -moors -moorwort -moorworts -moory -moos -moose -moot -mooted -mooter -mooters -mooting -moots -mop -mopboard -mopboards -mope -moped -mopeds -moper -moperies -mopers -mopery -mopes -mopey -mopier -mopiest -moping -mopingly -mopish -mopishly -mopoke -mopokes -mopped -mopper -moppers -moppet -moppets -mopping -mops -mopy -moquette -moquettes -mor -mora -morae -morainal -moraine -moraines -morainic -moral -morale -morales -moralise -moralised -moralises -moralising -moralism -moralisms -moralist -moralistic -moralistically -moralists -moralities -morality -moralization -moralizations -moralize -moralized -moralizer -moralizers -moralizes -moralizing -morally -morals -moras -morass -morasses -morassy -moratoria -moratorium -moratoriums -moratory -moray -morays -morbid -morbidities -morbidity -morbidly -morbidness -morbidnesses -morbific -morbilli -morceau -morceaux -mordancies -mordancy -mordant -mordanted -mordanting -mordantly -mordants -mordent -mordents -more -moreen -moreens -morel -morelle -morelles -morello -morellos -morels -moreover -mores -moresque -moresques -morgan -morganatic -morganatically -morganite -morganites -morgans -morgen -morgens -morgue -morgues -moribund -moribundities -moribundity -morion -morions -morn -morning -mornings -morns -morocco -moroccos -moron -moronic -moronically -moronism -moronisms -moronities -moronity -morons -morose -morosely -moroseness -morosenesses -morosities -morosity -morph -morphactin -morphactins -morphallaxes -morphallaxis -morphed -morpheme -morphemes -morphemic -morphemically -morphemics -morphia -morphias -morphic -morphin -morphine -morphines -morphing -morphinism -morphinisms -morphins -morpho -morphogen -morphogeneses -morphogenesis -morphogenetic -morphogenetically -morphogenic -morphogens -morphologic -morphological -morphologically -morphologies -morphologist -morphologists -morphology -morphometric -morphometrically -morphometries -morphometry -morphophonemics -morphos -morphs -morrion -morrions -morris -morrises -morro -morros -morrow -morrows -mors -morse -morsel -morseled -morseling -morselled -morselling -morsels -mort -mortadella -mortadellas -mortal -mortalities -mortality -mortally -mortals -mortar -mortarboard -mortarboards -mortared -mortaring -mortarless -mortars -mortary -mortgage -mortgaged -mortgagee -mortgagees -mortgager -mortgagers -mortgages -mortgaging -mortgagor -mortgagors -mortice -morticed -mortices -mortician -morticians -morticing -mortification -mortifications -mortified -mortifies -mortify -mortifying -mortise -mortised -mortiser -mortisers -mortises -mortising -mortmain -mortmains -morts -mortuaries -mortuary -morula -morulae -morular -morulas -morulation -morulations -mos -mosaic -mosaically -mosaicism -mosaicisms -mosaicist -mosaicists -mosaicked -mosaicking -mosaiclike -mosaics -mosasaur -mosasaurs -moschate -mosey -moseyed -moseying -moseys -mosh -moshav -moshavim -moshed -mosher -moshers -moshes -moshing -mosk -mosks -mosque -mosques -mosquito -mosquitoes -mosquitoey -mosquitos -moss -mossback -mossbacked -mossbacks -mossed -mosser -mossers -mosses -mossier -mossiest -mossing -mosslike -mosso -mossy -most -moste -mostest -mostests -mostly -mosts -mot -mote -motel -motels -motes -motet -motets -motey -moth -mothball -mothballed -mothballing -mothballs -mother -motherboard -motherboards -mothered -motherfucker -motherfuckers -motherfucking -motherhood -motherhoods -motherhouse -motherhouses -mothering -motherland -motherlands -motherless -motherlessness -motherlessnesses -motherliness -motherlinesses -motherly -mothers -mothery -mothier -mothiest -mothlike -mothproof -mothproofed -mothproofer -mothproofers -mothproofing -mothproofs -moths -mothy -motif -motific -motifs -motile -motiles -motilities -motility -motion -motional -motioned -motioner -motioners -motioning -motionless -motionlessly -motionlessness -motionlessnesses -motions -motivate -motivated -motivates -motivating -motivation -motivational -motivationally -motivations -motivative -motivator -motivators -motive -motived -motiveless -motivelessly -motives -motivic -motiving -motivities -motivity -motley -motleyer -motleyest -motleys -motlier -motliest -motmot -motmots -motocross -motocrosses -motoneuron -motoneuronal -motoneurons -motor -motorbike -motorbiked -motorbikes -motorbiking -motorboat -motorboater -motorboaters -motorboating -motorboatings -motorboats -motorbus -motorbuses -motorbusses -motorcade -motorcaded -motorcades -motorcading -motorcar -motorcars -motorcycle -motorcycled -motorcycles -motorcycling -motorcyclist -motorcyclists -motordom -motordoms -motored -motoric -motorically -motoring -motorings -motorise -motorised -motorises -motorising -motorist -motorists -motorization -motorizations -motorize -motorized -motorizes -motorizing -motorless -motorman -motormen -motormouth -motormouths -motors -motortruck -motortrucks -motorway -motorways -mots -mott -motte -mottes -mottle -mottled -mottler -mottlers -mottles -mottling -motto -mottoes -mottos -motts -mouch -mouched -mouches -mouching -mouchoir -mouchoirs -moue -moues -moufflon -moufflons -mouflon -mouflons -mouille -moujik -moujiks -moulage -moulages -mould -moulded -moulder -mouldered -mouldering -moulders -mouldier -mouldiest -moulding -mouldings -moulds -mouldy -moulin -moulins -moult -moulted -moulter -moulters -moulting -moults -mound -mounded -mounding -mounds -mount -mountable -mountain -mountaineer -mountaineering -mountaineerings -mountaineers -mountainous -mountainously -mountainousness -mountainousnesses -mountains -mountainside -mountainsides -mountaintop -mountaintops -mountainy -mountebank -mountebanked -mountebankeries -mountebankery -mountebanking -mountebanks -mounted -mounter -mounters -mounting -mountings -mounts -mourn -mourned -mourner -mourners -mournful -mournfuller -mournfullest -mournfully -mournfulness -mournfulnesses -mourning -mourningly -mournings -mourns -mouse -moused -mouser -mousers -mouses -mousetrap -mousetrapped -mousetrapping -mousetraps -mousey -mousier -mousiest -mousily -mousiness -mousinesses -mousing -mousings -moussaka -moussakas -mousse -moussed -mousseline -mousselines -mousses -moussing -moustache -moustaches -moustachio -moustachios -mousy -mouth -mouthbreeder -mouthbreeders -mouthed -mouther -mouthers -mouthful -mouthfuls -mouthier -mouthiest -mouthily -mouthing -mouthlike -mouthpart -mouthparts -mouthpiece -mouthpieces -mouths -mouthwash -mouthwashes -mouthwatering -mouthwateringly -mouthy -mouton -moutons -movabilities -movability -movable -movableness -movablenesses -movables -movably -move -moveable -moveables -moveably -moved -moveless -movelessly -movelessness -movelessnesses -movement -movements -mover -movers -moves -movie -moviedom -moviedoms -moviegoer -moviegoers -moviegoing -moviegoings -moviemaker -moviemakers -moviemaking -moviemakings -movieola -movieolas -movies -moving -movingly -moviola -moviolas -mow -mowed -mower -mowers -mowing -mowings -mown -mows -moxa -moxas -moxie -moxies -mozetta -mozettas -mozette -mozo -mozos -mozzarella -mozzarellas -mozzetta -mozzettas -mozzette -mridanga -mridangam -mridangams -mridangas -mu -much -muchacho -muchachos -muches -muchly -muchness -muchnesses -mucid -mucidities -mucidity -mucilage -mucilages -mucilaginous -mucilaginously -mucin -mucinoid -mucinous -mucins -muck -muckamuck -muckamucks -mucked -mucker -muckers -muckier -muckiest -muckily -mucking -muckle -muckles -muckluck -mucklucks -muckrake -muckraked -muckraker -muckrakers -muckrakes -muckraking -mucks -muckworm -muckworms -mucky -mucluc -muclucs -mucocutaneous -mucoid -mucoidal -mucoids -mucolytic -mucopeptide -mucopeptides -mucopolysaccharide -mucopolysaccharides -mucoprotein -mucoproteins -mucor -mucors -mucosa -mucosae -mucosal -mucosas -mucose -mucosities -mucosity -mucous -mucro -mucronate -mucrones -mucros -mucus -mucuses -mud -mudcap -mudcapped -mudcapping -mudcaps -mudcat -mudcats -mudded -mudder -mudders -muddied -muddier -muddies -muddiest -muddily -muddiness -muddinesses -mudding -muddle -muddled -muddleheaded -muddleheadedly -muddleheadedness -muddleheadednesses -muddler -muddlers -muddles -muddling -muddly -muddy -muddying -mudfish -mudfishes -mudflap -mudflaps -mudflat -mudflats -mudflow -mudflows -mudguard -mudguards -mudhole -mudholes -mudlark -mudlarks -mudpack -mudpacks -mudpuppies -mudpuppy -mudra -mudras -mudrock -mudrocks -mudroom -mudrooms -muds -mudsill -mudsills -mudskipper -mudskippers -mudslide -mudslides -mudslinger -mudslingers -mudslinging -mudslingings -mudstone -mudstones -mueddin -mueddins -muenster -muensters -muesli -mueslis -muezzin -muezzins -muff -muffed -muffin -muffing -muffins -muffle -muffled -muffler -mufflered -mufflers -muffles -muffling -muffs -mufti -muftis -mug -mugful -mugfuls -mugg -muggar -muggars -mugged -muggee -muggees -mugger -muggers -muggier -muggiest -muggily -mugginess -mugginesses -mugging -muggings -muggins -muggs -muggur -muggurs -muggy -mugs -mugshot -mugshots -mugwort -mugworts -mugwump -mugwumps -muhlies -muhly -mujahedeen -mujahedin -mujahideen -mujik -mujiks -mukluk -mukluks -muktuk -muktuks -mulatto -mulattoes -mulattos -mulberries -mulberry -mulch -mulched -mulches -mulching -mulct -mulcted -mulcting -mulcts -mule -muled -mules -muleta -muletas -muleteer -muleteers -muley -muleys -muliebrities -muliebrity -muling -mulish -mulishly -mulishness -mulishnesses -mull -mulla -mullah -mullahism -mullahisms -mullahs -mullas -mulled -mullein -mulleins -mullen -mullens -muller -mullers -mullet -mullets -mulley -mulleys -mulligan -mulligans -mulligatawnies -mulligatawny -mulling -mullion -mullioned -mullioning -mullions -mullite -mullites -mullock -mullocks -mullocky -mulls -multiage -multiagency -multiarmed -multiatom -multiauthor -multiaxial -multiband -multibank -multibarrel -multibarreled -multibillion -multibillionaire -multibillionaires -multibillions -multibladed -multibranched -multibuilding -multicampus -multicar -multicarbon -multicausal -multicell -multicelled -multicellular -multicellularities -multicellularity -multicenter -multichain -multichambered -multichannel -multichannels -multicharacter -multicity -multiclient -multicoated -multicolor -multicolored -multicolors -multicolumn -multicomponent -multiconductor -multicopy -multicounty -multicourse -multicourses -multicultural -multiculturalism -multiculturalisms -multicurie -multicurrency -multidialectal -multidimensional -multidimensionalities -multidimensionality -multidirectional -multidisciplinary -multidiscipline -multidisciplines -multidivisional -multidomain -multidrug -multielectrode -multielement -multiemployer -multiengine -multiengines -multienzyme -multiethnic -multifaceted -multifactor -multifactorial -multifactorially -multifamily -multifarious -multifariousness -multifariousnesses -multifid -multifilament -multifilaments -multiflash -multifocal -multifold -multiform -multiformities -multiformity -multifrequency -multifunction -multifunctional -multigenerational -multigenic -multigerm -multigrade -multigrain -multigrains -multigrid -multigroup -multihandicapped -multiheaded -multihospital -multihued -multihull -multihulls -multijet -multilane -multilateral -multilateralism -multilateralisms -multilateralist -multilateralists -multilaterally -multilayer -multilayered -multilevel -multileveled -multiline -multilingual -multilingualism -multilingualisms -multilingually -multilobed -multimanned -multimedia -multimedias -multimegaton -multimegatons -multimegawatt -multimegawatts -multimember -multimetallic -multimillennial -multimillion -multimillionaire -multimillionaires -multimillions -multimodal -multimode -multimolecular -multination -multinational -multinationals -multinomial -multinomials -multinuclear -multinucleate -multinucleated -multiorgasmic -multipage -multipaned -multiparameter -multiparous -multipart -multiparticle -multipartite -multiparty -multipath -multiped -multipeds -multiphase -multiphasic -multiphoton -multipicture -multipiece -multipion -multipiston -multiplant -multiplayer -multiple -multiples -multiplet -multiplets -multiplex -multiplexed -multiplexer -multiplexers -multiplexes -multiplexing -multiplexor -multiplexors -multiplicand -multiplicands -multiplication -multiplications -multiplicative -multiplicatively -multiplicities -multiplicity -multiplied -multiplier -multipliers -multiplies -multiply -multiplying -multipolar -multipolarities -multipolarity -multipole -multipotential -multipower -multiproblem -multiprocessing -multiprocessings -multiprocessor -multiprocessors -multiproduct -multiprogramming -multiprogrammings -multipronged -multipurpose -multiracial -multiracialism -multiracialisms -multirange -multiregional -multireligious -multiroom -multiscreen -multisense -multisensory -multiservice -multisided -multisite -multisize -multiskilled -multisource -multispecies -multispectral -multispeed -multisport -multistage -multistate -multistemmed -multistep -multistoried -multistory -multistranded -multisyllabic -multisystem -multitalented -multitask -multitasked -multitasking -multitaskings -multitasks -multiterminal -multitiered -multiton -multitone -multitowered -multitrack -multitracked -multitracking -multitracks -multitrillion -multitrillions -multitude -multitudes -multitudinous -multitudinously -multitudinousness -multitudinousnesses -multiunion -multiunit -multiuse -multiuser -multivalence -multivalences -multivalent -multivalents -multivariable -multivariate -multiversities -multiversity -multivitamin -multivitamins -multivoltine -multivolume -multiwall -multiwarhead -multiwavelength -multiyear -multure -multures -mum -mumble -mumbled -mumbler -mumblers -mumbles -mumbling -mumbly -mumm -mummed -mummer -mummeries -mummers -mummery -mummichog -mummichogs -mummied -mummies -mummification -mummifications -mummified -mummifies -mummify -mummifying -mumming -mumms -mummy -mummying -mump -mumped -mumper -mumpers -mumping -mumps -mums -mumu -mumus -mun -munch -munched -muncher -munchers -munches -munchies -munching -munchkin -munchkins -mundane -mundanely -mundaneness -mundanenesses -mundanes -mundanities -mundanity -mundungo -mundungos -mundungus -mundunguses -mungo -mungoose -mungooses -mungos -muni -municipal -municipalities -municipality -municipalization -municipalizations -municipalize -municipalized -municipalizes -municipalizing -municipally -municipals -munificence -munificences -munificent -munificently -muniment -muniments -munis -munition -munitioned -munitioning -munitions -munnion -munnions -muns -munster -munsters -muntin -munting -muntings -muntins -muntjac -muntjacs -muntjak -muntjaks -muon -muonic -muonium -muoniums -muons -mura -muraenid -muraenids -mural -muralist -muralists -murals -muras -murder -murdered -murderee -murderees -murderer -murderers -murderess -murderesses -murdering -murderous -murderously -murderousness -murderousnesses -murders -mure -mured -murein -mureins -mures -murex -murexes -muriate -muriated -muriates -muricate -murices -murid -murids -murine -murines -muring -murk -murker -murkest -murkier -murkiest -murkily -murkiness -murkinesses -murkly -murks -murky -murmur -murmured -murmurer -murmurers -murmuring -murmurous -murmurously -murmurs -murphies -murphy -murr -murra -murrain -murrains -murras -murre -murrelet -murrelets -murres -murrey -murreys -murrha -murrhas -murrhine -murries -murrine -murrs -murry -murther -murthered -murthering -murthers -mus -musca -muscadel -muscadels -muscadet -muscadets -muscadine -muscadines -muscae -muscarine -muscarines -muscarinic -muscat -muscatel -muscatels -muscats -muscid -muscids -muscle -musclebound -muscled -muscles -muscling -muscly -muscovite -muscovites -muscular -muscularities -muscularity -muscularly -musculature -musculatures -musculoskeletal -muse -mused -museful -museological -museologies -museologist -museologists -museology -muser -musers -muses -musette -musettes -museum -museums -mush -mushed -musher -mushers -mushes -mushier -mushiest -mushily -mushiness -mushinesses -mushing -mushroom -mushroomed -mushrooming -mushrooms -mushy -music -musical -musicale -musicales -musicalise -musicalised -musicalises -musicalising -musicalities -musicality -musicalization -musicalizations -musicalize -musicalized -musicalizes -musicalizing -musically -musicals -musician -musicianly -musicians -musicianship -musicianships -musicological -musicologies -musicologist -musicologists -musicology -musics -musing -musingly -musings -musjid -musjids -musk -muskeg -muskegs -muskellunge -muskellunges -musket -musketeer -musketeers -musketries -musketry -muskets -muskie -muskier -muskies -muskiest -muskily -muskiness -muskinesses -muskit -muskits -muskmelon -muskmelons -muskrat -muskrats -musks -musky -muslin -muslins -muspike -muspikes -musquash -musquashes -muss -mussed -mussel -mussels -musses -mussier -mussiest -mussily -mussiness -mussinesses -mussing -mussy -must -mustache -mustached -mustaches -mustachio -mustachioed -mustachios -mustang -mustangs -mustard -mustards -mustardy -musted -mustee -mustees -muster -mustered -mustering -musters -musth -musths -mustier -mustiest -mustily -mustiness -mustinesses -musting -musts -musty -mut -mutabilities -mutability -mutable -mutably -mutagen -mutageneses -mutagenesis -mutagenic -mutagenically -mutagenicities -mutagenicity -mutagens -mutant -mutants -mutase -mutases -mutate -mutated -mutates -mutating -mutation -mutational -mutationally -mutations -mutative -mutch -mutches -mutchkin -mutchkins -mute -muted -mutedly -mutely -muteness -mutenesses -muter -mutes -mutest -muticous -mutilate -mutilated -mutilates -mutilating -mutilation -mutilations -mutilator -mutilators -mutine -mutined -mutineer -mutineered -mutineering -mutineers -mutines -muting -mutinied -mutinies -mutining -mutinous -mutinously -mutinousness -mutinousnesses -mutiny -mutinying -mutism -mutisms -muton -mutons -muts -mutt -mutter -muttered -mutterer -mutterers -muttering -mutters -mutton -muttonchops -muttonfish -muttonfishes -muttons -muttony -mutts -mutual -mutualism -mutualisms -mutualist -mutualistic -mutualists -mutualities -mutuality -mutualization -mutualizations -mutualize -mutualized -mutualizes -mutualizing -mutually -mutuals -mutuel -mutuels -mutular -mutule -mutules -muumuu -muumuus -muzhik -muzhiks -muzjik -muzjiks -muzzier -muzziest -muzzily -muzziness -muzzinesses -muzzle -muzzled -muzzler -muzzlers -muzzles -muzzling -muzzy -my -myalgia -myalgias -myalgic -myases -myasis -myasthenia -myasthenias -myasthenic -myasthenics -mycele -myceles -mycelia -mycelial -mycelian -mycelium -myceloid -mycetoma -mycetomas -mycetomata -mycetomatous -mycetophagous -mycetozoan -mycetozoans -mycobacteria -mycobacterial -mycobacterium -mycoflora -mycoflorae -mycofloras -mycological -mycologically -mycologies -mycologist -mycologists -mycology -mycophagies -mycophagist -mycophagists -mycophagous -mycophagy -mycophile -mycophiles -mycoplasma -mycoplasmal -mycoplasmas -mycoplasmata -mycorrhiza -mycorrhizae -mycorrhizal -mycorrhizas -mycoses -mycosis -mycotic -mycotoxin -mycotoxins -mydriases -mydriasis -mydriatic -mydriatics -myelencephala -myelencephalic -myelencephalon -myelencephalons -myelin -myelinated -myeline -myelines -myelinic -myelins -myelitides -myelitis -myeloblast -myeloblastic -myeloblasts -myelocyte -myelocytes -myelocytic -myelofibroses -myelofibrosis -myelofibrotic -myelogenous -myeloid -myeloma -myelomas -myelomata -myelomatous -myelopathic -myelopathies -myelopathy -myeloproliferative -myiases -myiasis -mylonite -mylonites -myna -mynah -mynahs -mynas -mynheer -mynheers -myoblast -myoblasts -myocardia -myocardial -myocarditis -myocarditises -myocardium -myoclonic -myoclonus -myoclonuses -myoelectric -myoelectrical -myofibril -myofibrillar -myofibrils -myofilament -myofilaments -myogenic -myoglobin -myoglobins -myograph -myographs -myoid -myoinositol -myoinositols -myologic -myologies -myology -myoma -myomas -myomata -myomatous -myoneural -myopathic -myopathies -myopathy -myope -myopes -myopia -myopias -myopic -myopically -myopies -myopy -myoscope -myoscopes -myoses -myosin -myosins -myosis -myositis -myositises -myosote -myosotes -myosotis -myosotises -myotic -myotics -myotome -myotomes -myotonia -myotonias -myotonic -myriad -myriads -myriapod -myriapods -myrica -myricas -myriopod -myriopods -myrmecological -myrmecologies -myrmecologist -myrmecologists -myrmecology -myrmecophile -myrmecophiles -myrmecophilous -myrmidon -myrmidons -myrobalan -myrobalans -myrrh -myrrhic -myrrhs -myrtle -myrtles -myself -mysid -mysids -mysost -mysosts -mystagog -mystagogies -mystagogs -mystagogue -mystagogues -mystagogy -mysteries -mysterious -mysteriously -mysteriousness -mysteriousnesses -mystery -mystic -mystical -mystically -mysticism -mysticisms -mysticly -mystics -mystification -mystifications -mystified -mystifier -mystifiers -mystifies -mystify -mystifying -mystifyingly -mystique -mystiques -myth -mythic -mythical -mythically -mythicize -mythicized -mythicizer -mythicizers -mythicizes -mythicizing -mythier -mythiest -mythmaker -mythmakers -mythmaking -mythmakings -mythographer -mythographers -mythographies -mythography -mythoi -mythologer -mythologers -mythologic -mythological -mythologically -mythologies -mythologist -mythologists -mythologize -mythologized -mythologizer -mythologizers -mythologizes -mythologizing -mythology -mythomania -mythomaniac -mythomaniacs -mythomanias -mythopoeia -mythopoeias -mythopoeic -mythopoetic -mythopoetical -mythos -myths -mythy -myxedema -myxedemas -myxedematous -myxocyte -myxocytes -myxoid -myxoma -myxomas -myxomata -myxomatoses -myxomatosis -myxomatous -myxomycete -myxomycetes -myxoviral -myxovirus -myxoviruses -na -naan -naans -nab -nabbed -nabber -nabbers -nabbing -nabe -nabes -nabis -nabob -naboberies -nabobery -nabobess -nabobesses -nabobish -nabobism -nabobisms -nabobs -nabs -nacelle -nacelles -nachas -naches -nacho -nachos -nacre -nacred -nacreous -nacres -nada -nadas -nadir -nadiral -nadirs -nae -naething -naethings -naevi -naevoid -naevus -nag -nagana -naganas -nagged -nagger -naggers -naggier -naggiest -nagging -naggingly -naggy -nags -nah -naiad -naiades -naiads -naif -naifs -nail -nailbrush -nailbrushes -nailed -nailer -nailers -nailfold -nailfolds -nailhead -nailheads -nailing -nails -nailset -nailsets -nainsook -nainsooks -naira -nairas -naive -naively -naiveness -naivenesses -naiver -naives -naivest -naivete -naivetes -naiveties -naivety -naked -nakeder -nakedest -nakedly -nakedness -nakednesses -naled -naleds -nalorphine -nalorphines -naloxone -naloxones -naltrexone -naltrexones -nam -namable -name -nameable -named -nameless -namelessly -namelessness -namelessnesses -namely -nameplate -nameplates -namer -namers -names -namesake -namesakes -nametag -nametags -naming -nan -nana -nanas -nance -nances -nancies -nancy -nancys -nandin -nandina -nandinas -nandins -nanism -nanisms -nankeen -nankeens -nankin -nankins -nannie -nannies -nannoplankton -nannoplanktons -nanny -nanogram -nanograms -nanometer -nanometers -nanosecond -nanoseconds -nanotechnologies -nanotechnology -nanotesla -nanoteslas -nanowatt -nanowatts -nans -naoi -naos -nap -napalm -napalmed -napalming -napalms -nape -naperies -napery -napes -naphtha -naphthalene -naphthalenes -naphthas -naphthene -naphthenes -naphthenic -naphthol -naphthols -naphthyl -naphthylamine -naphthylamines -naphthyls -naphtol -naphtols -napiform -napkin -napkins -napless -napoleon -napoleons -nappe -napped -napper -nappers -nappes -nappie -nappier -nappies -nappiest -napping -nappy -naprapathies -naprapathy -naps -narc -narcein -narceine -narceines -narceins -narcism -narcisms -narcissi -narcissism -narcissisms -narcissist -narcissistic -narcissists -narcissus -narcissuses -narcist -narcists -narco -narcolepsies -narcolepsy -narcoleptic -narcoleptics -narcos -narcose -narcoses -narcosis -narcotic -narcotically -narcotics -narcotize -narcotized -narcotizes -narcotizing -narcs -nard -nardine -nards -nares -narghile -narghiles -nargile -nargileh -nargilehs -nargiles -narial -naric -narine -naris -nark -narked -narking -narks -narky -narrate -narrated -narrater -narraters -narrates -narrating -narration -narrational -narrations -narrative -narratively -narratives -narratological -narratologies -narratologist -narratologists -narratology -narrator -narrators -narrow -narrowband -narrowcasting -narrowcastings -narrowed -narrower -narrowest -narrowing -narrowly -narrowness -narrownesses -narrows -narthex -narthexes -narwal -narwals -narwhal -narwhale -narwhales -narwhals -nary -nasal -nasalise -nasalised -nasalises -nasalising -nasalities -nasality -nasalization -nasalizations -nasalize -nasalized -nasalizes -nasalizing -nasally -nasals -nascence -nascences -nascencies -nascency -nascent -nasial -nasion -nasions -nasogastric -nasopharyngeal -nasopharynges -nasopharynx -nasopharynxes -nastic -nastier -nasties -nastiest -nastily -nastiness -nastinesses -nasturtium -nasturtiums -nasty -natal -natalities -natality -natant -natantly -natation -natations -natatoria -natatorial -natatorium -natatoriums -natatory -natch -nates -natheless -nathless -nation -national -nationalise -nationalised -nationalises -nationalising -nationalism -nationalisms -nationalist -nationalistic -nationalistically -nationalists -nationalities -nationality -nationalization -nationalizations -nationalize -nationalized -nationalizer -nationalizers -nationalizes -nationalizing -nationally -nationals -nationhood -nationhoods -nations -nationwide -native -natively -nativeness -nativenesses -natives -nativism -nativisms -nativist -nativistic -nativists -nativities -nativity -natrium -natriums -natriureses -natriuresis -natriuretic -natriuretics -natrolite -natrolites -natron -natrons -natter -nattered -nattering -natters -nattier -nattiest -nattily -nattiness -nattinesses -natty -natural -naturalise -naturalised -naturalises -naturalising -naturalism -naturalisms -naturalist -naturalistic -naturalistically -naturalists -naturalization -naturalizations -naturalize -naturalized -naturalizes -naturalizing -naturally -naturalness -naturalnesses -naturals -nature -natured -natures -naturism -naturisms -naturist -naturists -naturopath -naturopathic -naturopathies -naturopaths -naturopathy -naught -naughtier -naughtiest -naughtily -naughtiness -naughtinesses -naughts -naughty -naumachia -naumachiae -naumachias -naumachies -naumachy -nauplial -nauplii -nauplius -nausea -nauseant -nauseants -nauseas -nauseate -nauseated -nauseates -nauseating -nauseatingly -nauseous -nauseously -nauseousness -nauseousnesses -nautch -nautches -nautical -nautically -nautili -nautiloid -nautiloids -nautilus -nautiluses -navaid -navaids -naval -navally -navar -navars -nave -navel -navels -naves -navette -navettes -navicert -navicerts -navicular -naviculars -navies -navigabilities -navigability -navigable -navigably -navigate -navigated -navigates -navigating -navigation -navigational -navigationally -navigations -navigator -navigators -navvies -navvy -navy -naw -nawab -nawabs -nay -nays -naysayer -naysayers -nazi -nazification -nazifications -nazified -nazifies -nazify -nazifying -nazis -ne -neanderthal -neanderthals -neap -neaps -near -nearby -neared -nearer -nearest -nearing -nearlier -nearliest -nearly -nearness -nearnesses -nears -nearshore -nearside -nearsides -nearsighted -nearsightedly -nearsightedness -nearsightednesses -neat -neaten -neatened -neatening -neatens -neater -neatest -neath -neatherd -neatherds -neatly -neatness -neatnesses -neats -neb -nebbish -nebbishes -nebbishy -nebenkern -nebenkerns -nebs -nebula -nebulae -nebular -nebulas -nebule -nebulise -nebulised -nebulises -nebulising -nebulization -nebulizations -nebulize -nebulized -nebulizer -nebulizers -nebulizes -nebulizing -nebulose -nebulosities -nebulosity -nebulous -nebulously -nebulousness -nebulousnesses -nebuly -necessaries -necessarily -necessary -necessitarian -necessitarianism -necessitarianisms -necessitarians -necessitate -necessitated -necessitates -necessitating -necessitation -necessitations -necessities -necessitous -necessitously -necessitousness -necessitousnesses -necessity -neck -neckband -neckbands -necked -necker -neckerchief -neckerchiefs -neckerchieves -neckers -necking -neckings -necklace -necklaces -neckless -necklike -neckline -necklines -necks -necktie -neckties -neckwear -necrological -necrologies -necrologist -necrologists -necrology -necromancer -necromancers -necromancies -necromancy -necromantic -necromantically -necrophagous -necrophilia -necrophiliac -necrophiliacs -necrophilias -necrophilic -necrophilism -necrophilisms -necropoleis -necropoles -necropoli -necropolis -necropolises -necropsied -necropsies -necropsy -necropsying -necrose -necrosed -necroses -necrosing -necrosis -necrotic -necrotizing -nectar -nectaries -nectarine -nectarines -nectarous -nectars -nectary -nee -need -needed -needer -needers -needful -needfully -needfulness -needfulnesses -needfuls -needier -neediest -needily -neediness -needinesses -needing -needle -needled -needlefish -needlefishes -needlelike -needlepoint -needlepoints -needler -needlers -needles -needless -needlessly -needlessness -needlessnesses -needlewoman -needlewomen -needlework -needleworker -needleworkers -needleworks -needling -needlings -needs -needy -neem -neems -neep -neeps -nefarious -nefariously -negate -negated -negater -negaters -negates -negating -negation -negational -negations -negative -negatived -negatively -negativeness -negativenesses -negatives -negativing -negativism -negativisms -negativist -negativistic -negativists -negativities -negativity -negaton -negatons -negator -negators -negatron -negatrons -neglect -neglected -neglecter -neglecters -neglectful -neglectfully -neglectfulness -neglectfulnesses -neglecting -neglects -neglige -negligee -negligees -negligence -negligences -negligent -negligently -negliges -negligibilities -negligibility -negligible -negligibly -negotiabilities -negotiability -negotiable -negotiant -negotiants -negotiate -negotiated -negotiates -negotiating -negotiation -negotiations -negotiator -negotiators -negotiatory -negritude -negritudes -negroid -negroids -negroni -negronis -negrophobe -negrophobes -negrophobia -negrophobias -negus -neguses -neif -neifs -neigh -neighbor -neighbored -neighborhood -neighborhoods -neighboring -neighborliness -neighborlinesses -neighborly -neighbors -neighbour -neighboured -neighbouring -neighbours -neighed -neighing -neighs -neist -neither -nekton -nektonic -nektons -nellie -nellies -nelly -nelson -nelsons -nelumbo -nelumbos -nema -nemas -nematic -nematicidal -nematicide -nematicides -nematocidal -nematocide -nematocides -nematocyst -nematocysts -nematode -nematodes -nematological -nematologies -nematologist -nematologists -nematology -nemertean -nemerteans -nemertine -nemertines -nemeses -nemesis -nemophila -nemophilas -nene -nenes -neoclassic -neoclassical -neoclassicism -neoclassicisms -neoclassicist -neoclassicists -neocolonial -neocolonialism -neocolonialisms -neocolonialist -neocolonialists -neoconservatism -neoconservatisms -neoconservative -neoconservatives -neocortex -neocortexes -neocortical -neocortices -neodymium -neodymiums -neoliberal -neoliberalism -neoliberalisms -neoliberals -neolith -neolithic -neoliths -neologic -neologies -neologism -neologisms -neologistic -neology -neomorph -neomorphs -neomycin -neomycins -neon -neonatal -neonatally -neonate -neonates -neonatologies -neonatologist -neonatologists -neonatology -neoned -neons -neoorthodox -neoorthodoxies -neoorthodoxy -neophilia -neophiliac -neophiliacs -neophilias -neophyte -neophytes -neoplasia -neoplasias -neoplasm -neoplasms -neoplastic -neoplasticism -neoplasticisms -neoplasticist -neoplasticists -neoprene -neoprenes -neorealism -neorealisms -neorealist -neorealistic -neorealists -neostigmine -neostigmines -neotenic -neotenies -neoteny -neoteric -neoterics -neotropics -neotype -neotypes -nepenthe -nepenthean -nepenthes -nepheline -nephelines -nephelinic -nephelinite -nephelinites -nephelinitic -nephelite -nephelites -nephelometer -nephelometers -nephelometric -nephelometrically -nephelometries -nephelometry -nephew -nephews -nephoscope -nephoscopes -nephrectomies -nephrectomize -nephrectomized -nephrectomizes -nephrectomizing -nephrectomy -nephric -nephridia -nephridial -nephridium -nephrism -nephrisms -nephrite -nephrites -nephritic -nephritides -nephritis -nephrologies -nephrologist -nephrologists -nephrology -nephron -nephrons -nephropathic -nephropathies -nephropathy -nephroses -nephrosis -nephrostome -nephrostomes -nephrotic -nephrotics -nephrotoxic -nephrotoxicities -nephrotoxicity -nepotic -nepotism -nepotisms -nepotist -nepotistic -nepotists -neptunium -neptuniums -nerd -nerdier -nerdiest -nerdish -nerds -nerdy -nereid -nereides -nereids -nereis -nereises -neritic -nerol -neroli -nerolis -nerols -nerts -nertz -nervate -nervation -nervations -nerve -nerved -nerveless -nervelessly -nervelessness -nervelessnesses -nerves -nervier -nerviest -nervily -nervine -nervines -nerviness -nervinesses -nerving -nervings -nervosities -nervosity -nervous -nervously -nervousness -nervousnesses -nervule -nervules -nervure -nervures -nervy -nescience -nesciences -nescient -nescients -ness -nesses -nest -nestable -nested -nester -nesters -nesting -nestle -nestled -nestler -nestlers -nestles -nestlike -nestling -nestlings -nestor -nestors -nests -net -nether -nethermost -netherworld -netherworlds -netiquette -netiquettes -netizen -netizens -netless -netlike -netminder -netminders -netop -netops -nets -netsuke -netsukes -nett -nettable -netted -netter -netters -nettier -nettiest -netting -nettings -nettle -nettled -nettler -nettlers -nettles -nettlesome -nettlier -nettliest -nettling -nettly -netts -netty -network -networked -networking -networkings -networks -neuk -neuks -neum -neumatic -neume -neumes -neumic -neums -neural -neuralgia -neuralgias -neuralgic -neurally -neuraminidase -neuraminidases -neurasthenia -neurasthenias -neurasthenic -neurasthenically -neurasthenics -neuraxon -neuraxons -neurilemma -neurilemmal -neurilemmas -neurine -neurines -neuritic -neuritics -neuritides -neuritis -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 -neurogenic -neurogenically -neuroglia -neuroglial -neuroglias -neurohormonal -neurohormone -neurohormones -neurohumor -neurohumoral -neurohumors -neurohypophyseal -neurohypophyses -neurohypophysial -neurohypophysis -neuroid -neuroleptic -neuroleptics -neurologic -neurological -neurologically -neurologies -neurologist -neurologists -neurology -neuroma -neuromas -neuromata -neuromuscular -neuron -neuronal -neurone -neurones -neuronic -neurons -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 -neurosal -neuroscience -neurosciences -neuroscientific -neuroscientist -neuroscientists -neurosecretion -neurosecretions -neurosecretory -neurosensory -neuroses -neurosis -neurospora -neurosporas -neurosurgeon -neurosurgeons -neurosurgeries -neurosurgery -neurosurgical -neurotic -neurotically -neuroticism -neuroticisms -neurotics -neurotoxic -neurotoxicities -neurotoxicity -neurotoxin -neurotoxins -neurotransmission -neurotransmissions -neurotransmitter -neurotransmitters -neurotropic -neurula -neurulae -neurulas -neurulation -neurulations -neuston -neustons -neuter -neutered -neutering -neuters -neutral -neutralise -neutralised -neutralises -neutralising -neutralism -neutralisms -neutralist -neutralistic -neutralists -neutralities -neutrality -neutralization -neutralizations -neutralize -neutralized -neutralizer -neutralizers -neutralizes -neutralizing -neutrally -neutralness -neutralnesses -neutrals -neutrino -neutrinoless -neutrinos -neutron -neutronic -neutrons -neutrophil -neutrophilic -neutrophils -neve -never -nevermore -nevertheless -neves -nevi -nevoid -nevus -new -newbie -newbies -newborn -newborns -newcomer -newcomers -newel -newels -newer -newest -newfangled -newfangledness -newfanglednesses -newfound -newie -newies -newish -newly -newlywed -newlyweds -newmarket -newmarkets -newmown -newness -newnesses -news -newsagent -newsagents -newsboy -newsboys -newsbreak -newsbreaks -newscast -newscaster -newscasters -newscasts -newsdealer -newsdealers -newsgroup -newsgroups -newshawk -newshawks -newshound -newshounds -newsie -newsier -newsies -newsiest -newsiness -newsinesses -newsless -newsletter -newsletters -newsmagazine -newsmagazines -newsmaker -newsmakers -newsman -newsmen -newsmonger -newsmongers -newspaper -newspapered -newspapering -newspaperman -newspapermen -newspapers -newspaperwoman -newspaperwomen -newspeak -newspeaks -newspeople -newsperson -newspersons -newsprint -newsprints -newsreader -newsreaders -newsreel -newsreels -newsroom -newsrooms -newsstand -newsstands -newsweeklies -newsweekly -newswoman -newswomen -newsworthiness -newsworthinesses -newsworthy -newswriting -newswritings -newsy -newt -newton -newtons -newts -next -nextdoor -nexus -nexuses -ngultrum -ngultrums -ngwee -niacin -niacinamide -niacinamides -niacins -nialamide -nialamides -nib -nibbed -nibbing -nibble -nibbled -nibbler -nibblers -nibbles -nibbling -niblick -niblicks -niblike -nibs -nicad -nicads -niccolite -niccolites -nice -nicely -niceness -nicenesses -nicer -nicest -niceties -nicety -niche -niched -niches -niching -nick -nicked -nickel -nickeled -nickelic -nickeliferous -nickeling -nickelled -nickelling -nickelodeon -nickelodeons -nickels -nicker -nickered -nickering -nickers -nicking -nickle -nickled -nickles -nickling -nicknack -nicknacks -nickname -nicknamed -nicknamer -nicknamers -nicknames -nicknaming -nicks -nicol -nicols -nicotiana -nicotianas -nicotin -nicotinamide -nicotinamides -nicotine -nicotines -nicotinic -nicotins -nictate -nictated -nictates -nictating -nictitate -nictitated -nictitates -nictitating -nidal -nide -nided -nidering -niderings -nides -nidget -nidgets -nidi -nidicolous -nidification -nidifications -nidified -nidifies -nidifugous -nidify -nidifying -niding -nidus -niduses -niece -nieces -nielli -niellist -niellists -niello -nielloed -nielloing -niellos -nieve -nieves -nifedipine -nifedipines -niffer -niffered -niffering -niffers -niftier -nifties -niftiest -niftily -nifty -niggard -niggarded -niggarding -niggardliness -niggardlinesses -niggardly -niggards -nigger -niggers -niggle -niggled -niggler -nigglers -niggles -niggling -nigglingly -nigglings -nigh -nighed -nigher -nighest -nighing -nighness -nighnesses -nighs -night -nightcap -nightcaps -nightclothes -nightclub -nightclubbed -nightclubber -nightclubbers -nightclubbing -nightclubs -nightdress -nightdresses -nightfall -nightfalls -nightglow -nightglows -nightgown -nightgowns -nighthawk -nighthawks -nightie -nighties -nightingale -nightingales -nightjar -nightjars -nightless -nightlife -nightlifes -nightlong -nightly -nightmare -nightmares -nightmarish -nightmarishly -nights -nightscope -nightscopes -nightshade -nightshades -nightshirt -nightshirts -nightside -nightsides -nightspot -nightspots -nightstand -nightstands -nightstick -nightsticks -nighttime -nighttimes -nightwalker -nightwalkers -nightwear -nighty -nigrified -nigrifies -nigrify -nigrifying -nigrosin -nigrosins -nihil -nihilism -nihilisms -nihilist -nihilistic -nihilists -nihilities -nihility -nihils -nil -nilgai -nilgais -nilgau -nilgaus -nilghai -nilghais -nilghau -nilghaus -nill -nilled -nilling -nills -nilpotent -nils -nim -nimbi -nimble -nimbleness -nimblenesses -nimbler -nimblest -nimbly -nimbostrati -nimbostratus -nimbus -nimbused -nimbuses -nimieties -nimiety -nimious -nimmed -nimming -nimrod -nimrods -nims -nincompoop -nincompooperies -nincompoopery -nincompoops -nine -ninebark -ninebarks -ninefold -ninepin -ninepins -nines -nineteen -nineteens -nineteenth -nineteenths -nineties -ninetieth -ninetieths -ninety -ninhydrin -ninhydrins -ninja -ninjas -ninnies -ninny -ninnyhammer -ninnyhammers -ninnyish -ninon -ninons -ninth -ninthly -ninths -niobate -niobates -niobic -niobium -niobiums -niobous -nip -nipa -nipas -nipped -nipper -nippers -nippier -nippiest -nippily -nippiness -nippinesses -nipping -nippingly -nipple -nippled -nipples -nippy -nips -nirvana -nirvanas -nirvanic -nisei -niseis -nisi -nisus -nit -nitchie -nitchies -nite -niter -niterie -niteries -niters -nitery -nites -nitid -nitinol -nitinols -niton -nitons -nitpick -nitpicked -nitpicker -nitpickers -nitpickier -nitpickiest -nitpicking -nitpicks -nitpicky -nitrate -nitrated -nitrates -nitrating -nitration -nitrations -nitrator -nitrators -nitre -nitres -nitric -nitrid -nitride -nitrided -nitrides -nitriding -nitrids -nitrification -nitrifications -nitrified -nitrifier -nitrifiers -nitrifies -nitrify -nitrifying -nitril -nitrile -nitriles -nitrils -nitrite -nitrites -nitro -nitrobenzene -nitrobenzenes -nitrocellulose -nitrocelluloses -nitrofuran -nitrofurans -nitrogen -nitrogenase -nitrogenases -nitrogenous -nitrogens -nitroglycerin -nitroglycerine -nitroglycerines -nitroglycerins -nitrolic -nitromethane -nitromethanes -nitroparaffin -nitroparaffins -nitros -nitrosamine -nitrosamines -nitroso -nitrosyl -nitrosyls -nitrous -nits -nittier -nittiest -nitty -nitwit -nitwits -nival -niveous -nix -nixe -nixed -nixes -nixie -nixies -nixing -nixy -nizam -nizamate -nizamates -nizams -no -nob -nobbier -nobbiest -nobbily -nobble -nobbled -nobbler -nobblers -nobbles -nobbling -nobby -nobelium -nobeliums -nobilities -nobility -noble -nobleman -noblemen -nobleness -noblenesses -nobler -nobles -noblesse -noblesses -noblest -noblewoman -noblewomen -nobly -nobodies -nobody -nobs -nocent -nociceptive -nock -nocked -nocking -nocks -noctambulist -noctambulists -noctuid -noctuids -noctule -noctules -noctuoid -nocturn -nocturnal -nocturnally -nocturne -nocturnes -nocturns -nocuous -nocuously -nod -nodal -nodalities -nodality -nodally -nodded -nodder -nodders -noddies -nodding -noddle -noddled -noddles -noddling -noddy -node -nodes -nodi -nodical -nodose -nodosities -nodosity -nodous -nods -nodular -nodulation -nodulations -nodule -nodules -nodulose -nodulous -nodus -noel -noels -noes -noesis -noesises -noetic -nog -nogg -nogged -noggin -nogging -noggings -noggins -noggs -nogs -noh -nohow -noil -noils -noily -noir -noirish -noirs -noise -noised -noiseless -noiselessly -noisemaker -noisemakers -noisemaking -noisemakings -noises -noisette -noisettes -noisier -noisiest -noisily -noisiness -noisinesses -noising -noisome -noisomely -noisomeness -noisomenesses -noisy -nolo -nolos -nom -noma -nomad -nomadic -nomadism -nomadisms -nomads -nomarch -nomarchies -nomarchs -nomarchy -nomas -nombles -nombril -nombrils -nome -nomen -nomenclator -nomenclatorial -nomenclators -nomenclatural -nomenclature -nomenclatures -nomes -nomina -nominal -nominalism -nominalisms -nominalist -nominalistic -nominalists -nominally -nominals -nominate -nominated -nominates -nominating -nomination -nominations -nominative -nominatives -nominator -nominators -nominee -nominees -nomism -nomisms -nomistic -nomogram -nomograms -nomograph -nomographic -nomographies -nomographs -nomography -nomoi -nomological -nomologies -nomology -nomos -nomothetic -noms -nona -nonabrasive -nonabsorbable -nonabsorbent -nonabsorbents -nonabsorptive -nonabstract -nonabstracts -nonacademic -nonacademics -nonacceptance -nonacceptances -nonaccountable -nonaccredited -nonaccrual -nonachievement -nonachievements -nonacid -nonacidic -nonacids -nonacquisitive -nonacting -nonaction -nonactions -nonactivated -nonactor -nonactors -nonadaptive -nonaddict -nonaddictive -nonaddicts -nonadditive -nonadditivities -nonadditivity -nonadhesive -nonadiabatic -nonadjacent -nonadmirer -nonadmirers -nonadmission -nonadmissions -nonadult -nonadults -nonaesthetic -nonaffiliated -nonaffluent -nonage -nonagenarian -nonagenarians -nonages -nonaggression -nonaggressions -nonaggressive -nonagon -nonagons -nonagricultural -nonalcoholic -nonalcoholics -nonaligned -nonalignment -nonalignments -nonallelic -nonallergenic -nonallergic -nonalphabetic -nonaluminum -nonambiguous -nonanalytic -nonanatomic -nonanimal -nonanswer -nonanswers -nonantagonistic -nonanthropological -nonanthropologist -nonanthropologists -nonantibiotic -nonantibiotics -nonantigenic -nonappearance -nonappearances -nonaquatic -nonaqueous -nonarable -nonarbitrariness -nonarbitrarinesses -nonarbitrary -nonarchitect -nonarchitects -nonarchitecture -nonarchitectures -nonargument -nonarguments -nonaristocratic -nonaromatic -nonart -nonartist -nonartistic -nonartists -nonarts -nonas -nonascetic -nonascetics -nonaspirin -nonaspirins -nonassertive -nonassociated -nonastronomical -nonathlete -nonathletes -nonathletic -nonatomic -nonattached -nonattachment -nonattachments -nonattendance -nonattendances -nonattender -nonattenders -nonauditory -nonauthor -nonauthoritarian -nonauthors -nonautomated -nonautomatic -nonautomotive -nonautonomous -nonavailabilities -nonavailability -nonbacterial -nonbank -nonbanking -nonbanks -nonbarbiturate -nonbarbiturates -nonbasic -nonbearing -nonbehavioral -nonbeing -nonbeings -nonbelief -nonbeliefs -nonbeliever -nonbelievers -nonbelligerencies -nonbelligerency -nonbelligerent -nonbelligerents -nonbetting -nonbibliographic -nonbinary -nonbinding -nonbiodegradable -nonbiodegradables -nonbiographical -nonbiological -nonbiologically -nonbiologist -nonbiologists -nonbiting -nonblack -nonblacks -nonbodies -nonbody -nonbonded -nonbonding -nonbook -nonbooks -nonbotanist -nonbotanists -nonbrand -nonbreakable -nonbreathing -nonbreeder -nonbreeders -nonbreeding -nonbreedings -nonbroadcast -nonbroadcasts -nonbuilding -nonbuildings -nonburnable -nonbusiness -nonbuying -noncabinet -noncabinets -noncaking -noncallable -noncaloric -noncampus -noncancelable -noncancerous -noncandidacies -noncandidacy -noncandidate -noncandidates -noncannibalistic -noncapital -noncapitalist -noncapitalists -noncapitals -noncarcinogen -noncarcinogenic -noncarcinogens -noncardiac -noncareer -noncarrier -noncarriers -noncash -noncasual -noncausal -nonce -noncelebration -noncelebrations -noncelebrities -noncelebrity -noncellular -noncellulosic -noncentral -noncertificated -noncertified -nonces -nonchalance -nonchalances -nonchalant -nonchalantly -noncharacter -noncharacters -noncharismatic -nonchauvinist -nonchauvinists -nonchemical -nonchemicals -nonchromosomal -nonchronological -nonchurch -nonchurchgoer -nonchurchgoers -noncircular -noncirculating -noncitizen -noncitizens -nonclandestine -nonclass -nonclasses -nonclassical -nonclassified -nonclassroom -nonclassrooms -nonclerical -nonclericals -noncling -nonclinical -nonclogging -noncoercive -noncognitive -noncoherent -noncoincidence -noncoincidences -noncoital -noncoking -noncola -noncollector -noncollectors -noncollege -noncolleges -noncollegiate -noncollinear -noncolor -noncolored -noncolorfast -noncolors -noncom -noncombat -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 -noncoms -nonconceptual -nonconcern -nonconcerns -nonconclusion -nonconclusions -nonconcur -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 -noncounty -noncoverage -noncoverages -noncreative -noncreativities -noncreativity -noncredentialed -noncredit -noncrime -noncrimes -noncriminal -noncriminals -noncrises -noncrisis -noncritical -noncrossover -noncrushable -noncrystalline -nonculinary -noncultivated -noncultivation -noncultivations -noncultural -noncumulative -noncurrent -noncustodial -noncustomer -noncustomers -noncyclic -noncyclical -nondairy -nondance -nondancer -nondancers -nondances -nondeceptive -nondecision -nondecisions -nondecreasing -nondeductibilities -nondeductibility -nondeductible -nondeductive -nondefense -nondeferrable -nondeforming -nondegenerate -nondegenerates -nondegradable -nondegradables -nondegree -nondelegate -nondelegates -nondeliberate -nondelinquent -nondeliveries -nondelivery -nondemanding -nondemocratic -nondenominational -nondenominationalism -nondenominationalisms -nondepartmental -nondependent -nondependents -nondepletable -nondepleting -nondeposition -nondepositions -nondepressed -nonderivative -nonderivatives -nondescript -nondescriptive -nondescripts -nondesert -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 -nondoctor -nondoctors -nondoctrinaire -nondocumentaries -nondocumentary -nondogmatic -nondollar -nondomestic -nondomestics -nondominant -nondominants -nondormant -nondramatic -nondrinker -nondrinkers -nondrinking -nondriver -nondrivers -nondrug -nondurable -nondurables -none -nonearning -nonearnings -nonecclesiastical -noneconomic -noneconomist -noneconomists -nonedible -noneditorial -noneducation -noneducational -noneducations -noneffective -noneffectives -nonego -nonegos -nonelastic -nonelect -nonelected -nonelection -nonelections -nonelective -nonelectives -nonelectric -nonelectrical -nonelectrics -nonelectrolyte -nonelectrolytes -nonelectronic -nonelectronics -nonelementary -nonelite -nonemergencies -nonemergency -nonemotional -nonemphatic -nonempirical -nonemployee -nonemployees -nonemployment -nonemployments -nonempty -nonencapsulated -nonending -nonenergy -nonenforceabilities -nonenforceability -nonenforcement -nonenforcements -nonengagement -nonengagements -nonengineering -nonengineerings -nonentertainment -nonentertainments -nonentities -nonentity -nonentries -nonentry -nonenzymatic -nonenzymic -nonequal -nonequals -nonequilibria -nonequilibrium -nonequilibriums -nonequivalence -nonequivalences -nonequivalent -nonequivalents -nonerotic -nones -nonessential -nonessentials -nonestablished -nonestablishment -nonestablishments -nonesterified -nonesuch -nonesuches -nonet -nonetheless -nonethical -nonethnic -nonets -nonevaluative -nonevent -nonevents -nonevidence -nonevidences -nonexclusive -nonexecutive -nonexecutives -nonexempt -nonexistence -nonexistences -nonexistent -nonexistential -nonexotic -nonexpendable -nonexperimental -nonexpert -nonexperts -nonexplanatory -nonexploitation -nonexploitations -nonexploitative -nonexploitive -nonexplosive -nonexplosives -nonexposed -nonextant -nonfact -nonfactor -nonfactors -nonfacts -nonfactual -nonfaculty -nonfading -nonfamilial -nonfamilies -nonfamily -nonfan -nonfans -nonfarm -nonfarmer -nonfarmers -nonfat -nonfatal -nonfattening -nonfatty -nonfeasance -nonfeasances -nonfederal -nonfederated -nonfeminist -nonfeminists -nonferrous -nonfiction -nonfictional -nonfictions -nonfigurative -nonfilamentous -nonfilterable -nonfinal -nonfinancial -nonfinite -nonfissionable -nonflammabilities -nonflammability -nonflammable -nonflowering -nonfluencies -nonfluency -nonfluid -nonfluids -nonfluorescent -nonflying -nonfocal -nonfood -nonforfeitable -nonforfeiture -nonforfeitures -nonformal -nonfossil -nonfraternization -nonfraternizations -nonfreezing -nonfrivolous -nonfrozen -nonfuel -nonfulfillment -nonfulfillments -nonfunctional -nonfunctioning -nongame -nongaseous -nongay -nongays -nongenetic -nongenital -nongeometrical -nonghetto -nonglamorous -nonglare -nongolfer -nongolfers -nongonococcal -nongovernment -nongovernmental -nongovernments -nongraded -nongraduate -nongraduates -nongrammatical -nongranular -nongravitational -nongreasy -nongreen -nongregarious -nongrowing -nongrowth -nonguest -nonguests -nonguilt -nonguilts -nonhalogenated -nonhandicapped -nonhappening -nonhappenings -nonhardy -nonharmonic -nonhazardous -nonheme -nonhemolytic -nonhereditary -nonhero -nonheroes -nonhierarchical -nonhistone -nonhistorical -nonhome -nonhomogeneous -nonhomologous -nonhomosexual -nonhomosexuals -nonhormonal -nonhospital -nonhospitalized -nonhospitals -nonhostile -nonhousing -nonhousings -nonhuman -nonhunter -nonhunters -nonhunting -nonhygroscopic -nonhysterical -nonideal -nonidentical -nonidentities -nonidentity -nonideological -nonillion -nonillions -nonimage -nonimitative -nonimmigrant -nonimmigrants -nonimmune -nonimpact -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 -noninjury -noninsect -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 -nonionic -nonionizing -noniron -nonirradiated -nonirrigated -nonirritant -nonirritating -nonissue -nonissues -nonjoinder -nonjoinders -nonjoiner -nonjoiners -nonjudgmental -nonjudicial -nonjuring -nonjuror -nonjurors -nonjury -nonjusticiable -nonkosher -nonlabor -nonlandowner -nonlandowners -nonlanguage -nonlanguages -nonlawyer -nonlawyers -nonleaded -nonleafy -nonleague -nonlegal -nonlegume -nonlegumes -nonleguminous -nonlethal -nonlexical -nonlibrarian -nonlibrarians -nonlibraries -nonlibrary -nonlife -nonlineal -nonlinear -nonlinearities -nonlinearity -nonlinguistic -nonliquid -nonliquids -nonliteral -nonliterary -nonliterate -nonliterates -nonlives -nonliving -nonlocal -nonlocals -nonlogical -nonluminous -nonmagnetic -nonmainstream -nonmajor -nonmajors -nonmalignant -nonmalleable -nonman -nonmanagement -nonmanagements -nonmanagerial -nonmanual -nonmanufacturing -nonmanufacturings -nonmarital -nonmarket -nonmaterial -nonmaterialistic -nonmathematical -nonmathematician -nonmathematicians -nonmatriculated -nonmeaningful -nonmeasurable -nonmeat -nonmechanical -nonmechanistic -nonmedical -nonmeeting -nonmeetings -nonmember -nonmembers -nonmembership -nonmemberships -nonmen -nonmental -nonmercurial -nonmetal -nonmetallic -nonmetals -nonmetameric -nonmetaphorical -nonmetric -nonmetrical -nonmetro -nonmetropolitan -nonmetropolitans -nonmicrobial -nonmigrant -nonmigrants -nonmigratory -nonmilitant -nonmilitants -nonmilitary -nonmimetic -nonminority -nonmobile -nonmodal -nonmolecular -nonmonetarist -nonmonetarists -nonmonetary -nonmoney -nonmonogamous -nonmoral -nonmotile -nonmotilities -nonmotility -nonmotorized -nonmoving -nonmunicipal -nonmusic -nonmusical -nonmusician -nonmusicians -nonmusics -nonmutant -nonmutants -nonmyelinated -nonmystical -nonnarrative -nonnarratives -nonnational -nonnationals -nonnative -nonnatives -nonnatural -nonnaval -nonnecessities -nonnecessity -nonnegative -nonnegligent -nonnegotiable -nonnetwork -nonnews -nonnitrogenous -nonnormative -nonnovel -nonnovels -nonnuclear -nonnucleated -nonnumerical -nonnumericals -nonnutritious -nonnutritive -nonobese -nonobjective -nonobjectivism -nonobjectivisms -nonobjectivist -nonobjectivists -nonobjectivities -nonobjectivity -nonobligatory -nonobscene -nonobservance -nonobservances -nonobservant -nonobvious -nonoccupational -nonoccurrence -nonoccurrences -nonofficial -nonohmic -nonoily -nonoperatic -nonoperating -nonoperational -nonoperative -nonoptimal -nonorganic -nonorgasmic -nonorthodox -nonoverlapping -nonoverlappings -nonowner -nonowners -nonoxidizing -nonpagan -nonpagans -nonpaid -nonpapal -nonpar -nonparallel -nonparallels -nonparametric -nonparasitic -nonpareil -nonpareils -nonparticipant -nonparticipants -nonparticipating -nonparticipation -nonparticipations -nonparticipatory -nonpartisan -nonpartisans -nonpartisanship -nonpartisanships -nonparty -nonpasserine -nonpassive -nonpast -nonpasts -nonpathogenic -nonpaying -nonpayment -nonpayments -nonpeak -nonperformance -nonperformances -nonperformer -nonperformers -nonperforming -nonperishable -nonperishables -nonpermissive -nonpersistent -nonperson -nonpersonal -nonpersons -nonpetroleum -nonpetroleums -nonphilosopher -nonphilosophers -nonphilosophical -nonphonemic -nonphonetic -nonphosphate -nonphosphates -nonphotographic -nonphysical -nonphysician -nonphysicians -nonplanar -nonplastic -nonplastics -nonplay -nonplaying -nonplays -nonplus -nonplused -nonpluses -nonplusing -nonplussed -nonplusses -nonplussing -nonpoetic -nonpoint -nonpoisonous -nonpolar -nonpolarizable -nonpolice -nonpolitical -nonpolitically -nonpolitician -nonpoliticians -nonpolluting -nonpoor -nonporous -nonpossession -nonpossessions -nonpractical -nonpracticing -nonpreferential -nonpregnant -nonprescription -nonprint -nonproblem -nonproblems -nonproducing -nonproductive -nonproductiveness -nonproductivenesses -nonprofessional -nonprofessionally -nonprofessionals -nonprofessorial -nonprofit -nonprofits -nonprogram -nonprogrammer -nonprogrammers -nonprograms -nonprogressive -nonprogressives -nonproliferation -nonproliferations -nonproprietaries -nonproprietary -nonpros -nonprossed -nonprosses -nonprossing -nonprotein -nonpsychiatric -nonpsychiatrist -nonpsychiatrists -nonpsychological -nonpsychotic -nonpublic -nonpunitive -nonpurposive -nonquantifiable -nonquantitative -nonquota -nonracial -nonracially -nonradioactive -nonrailroad -nonrandom -nonrandomness -nonrandomnesses -nonrated -nonrational -nonreactive -nonreactor -nonreactors -nonreader -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 -nonrigid -nonrioter -nonrioters -nonrioting -nonrival -nonrivals -nonrotating -nonroutine -nonroutines -nonroyal -nonrubber -nonruling -nonruminant -nonruminants -nonrural -nonsalable -nonsaline -nonsaponifiable -nonscheduled -nonschizophrenic -nonschool -nonscience -nonsciences -nonscientific -nonscientist -nonscientists -nonseasonal -nonsecretor -nonsecretories -nonsecretors -nonsecretory -nonsectarian -nonsecure -nonsedimentable -nonsegregated -nonsegregation -nonsegregations -nonselected -nonselective -nonself -nonselves -nonsensational -nonsense -nonsenses -nonsensical -nonsensically -nonsensicalness -nonsensicalnesses -nonsensitive -nonsensuous -nonsentence -nonsentences -nonseptate -nonsequential -nonserious -nonsexist -nonsexual -nonshrink -nonshrinkable -nonsigner -nonsigners -nonsignificant -nonsignificantly -nonsimultaneous -nonsinkable -nonskater -nonskaters -nonsked -nonskeds -nonskeletal -nonskid -nonskier -nonskiers -nonslip -nonsmoker -nonsmokers -nonsmoking -nonsocial -nonsocialist -nonsocialists -nonsolar -nonsolid -nonsolids -nonsolution -nonsolutions -nonspatial -nonspeaker -nonspeakers -nonspeaking -nonspecialist -nonspecialists -nonspecific -nonspecifically -nonspectacular -nonspeculative -nonspeech -nonspherical -nonsporting -nonstandard -nonstarter -nonstarters -nonstationaries -nonstationary -nonstatistical -nonsteady -nonsteroid -nonsteroidal -nonsteroids -nonstick -nonstop -nonstories -nonstory -nonstrategic -nonstructural -nonstructured -nonstudent -nonstudents -nonstyle -nonstyles -nonsubject -nonsubjective -nonsubjects -nonsubsidized -nonsuccess -nonsuccesses -nonsuch -nonsuches -nonsugar -nonsugars -nonsuit -nonsuited -nonsuiting -nonsuits -nonsuperimposable -nonsupervisory -nonsupport -nonsupports -nonsurgical -nonswimmer -nonswimmers -nonsyllabic -nonsymbolic -nonsymmetric -nonsymmetrical -nonsynchronous -nonsystem -nonsystematic -nonsystemic -nonsystems -nontarget -nontariff -nontax -nontaxable -nontaxables -nontaxes -nonteaching -nontechnical -nontemporal -nontemporals -nontenured -nonterminal -nonterminating -nontheatrical -nontheist -nontheistic -nontheists -nontheological -nontheoretical -nontherapeutic -nonthermal -nonthinking -nonthinkings -nonthreatening -nontidal -nontitle -nontobacco -nontobaccos -nontonal -nontotalitarian -nontoxic -nontraditional -nontransferable -nontreatment -nontreatments -nontrivial -nontropical -nontrump -nontruth -nontruths -nonturbulent -nontypical -nonunanimous -nonuniform -nonuniformities -nonuniformity -nonunion -nonunionized -nonunions -nonunique -nonuniqueness -nonuniquenesses -nonuniversal -nonuniversals -nonuniversities -nonuniversity -nonuple -nonuples -nonurban -nonurgent -nonuse -nonuser -nonusers -nonuses -nonusing -nonutilitarian -nonutilitarians -nonutilities -nonutility -nonutopian -nonvalid -nonvalidities -nonvalidity -nonvanishing -nonvascular -nonvector -nonvectors -nonvegetarian -nonvegetarians -nonvenomous -nonverbal -nonverbally -nonveteran -nonveterans -nonviable -nonviewer -nonviewers -nonvintage -nonviolence -nonviolences -nonviolent -nonviolently -nonviral -nonvirgin -nonvirgins -nonviscous -nonvisual -nonvocal -nonvocational -nonvolatile -nonvolcanic -nonvoluntary -nonvoter -nonvoters -nonvoting -nonwar -nonwars -nonwhite -nonwhites -nonwinning -nonwoody -nonword -nonwords -nonwork -nonworker -nonworkers -nonworking -nonwoven -nonwovens -nonwriter -nonwriters -nonyellowing -nonyl -nonyls -nonzero -noo -noodge -noodged -noodges -noodging -noodle -noodled -noodles -noodling -nook -nookies -nooklike -nooks -nooky -noon -noonday -noondays -nooning -noonings -noons -noontide -noontides -noontime -noontimes -noose -noosed -nooser -noosers -nooses -noosing -noosphere -noospheres -nopal -nopals -nope -nor -noradrenalin -noradrenaline -noradrenalines -noradrenalins -noradrenergic -nordic -norepinephrine -norepinephrines -norethindrone -norethindrones -nori -noria -norias -noris -norite -norites -noritic -norland -norlands -norm -normal -normalcies -normalcy -normalise -normalised -normalises -normalising -normalities -normality -normalizable -normalization -normalizations -normalize -normalized -normalizer -normalizers -normalizes -normalizing -normally -normals -normande -normative -normatively -normativeness -normativenesses -normed -normless -normotensive -normotensives -normothermia -normothermias -normothermic -norms -north -northbound -northeast -northeaster -northeasterly -northeastern -northeasternmost -northeasters -northeasts -northeastward -northeastwards -norther -northerlies -northerly -northern -northerner -northerners -northernmost -northerns -northers -northing -northings -northland -northlands -norths -northward -northwards -northwest -northwester -northwesterly -northwestern -northwesternmost -northwesters -northwests -northwestward -northwestwards -nortriptyline -nortriptylines -nos -nose -nosebag -nosebags -noseband -nosebands -nosebleed -nosebleeds -nosed -nosedive -nosedives -nosegay -nosegays -noseguard -noseguards -noseless -noselike -nosepiece -nosepieces -noses -nosewheel -nosewheels -nosey -nosh -noshed -nosher -noshers -noshes -noshing -nosier -nosiest -nosily -nosiness -nosinesses -nosing -nosings -nosocomial -nosologic -nosological -nosologically -nosologies -nosology -nostalgia -nostalgias -nostalgic -nostalgically -nostalgics -nostalgist -nostalgists -nostoc -nostocs -nostril -nostrils -nostrum -nostrums -nosy -not -nota -notabilities -notability -notable -notableness -notablenesses -notables -notably -notal -notarial -notarially -notaries -notarization -notarizations -notarize -notarized -notarizes -notarizing -notary -notate -notated -notates -notating -notation -notational -notations -notch -notchback -notchbacks -notched -notcher -notchers -notches -notching -note -notebook -notebooks -notecase -notecases -noted -notedly -notedness -notednesses -noteless -notepad -notepads -notepaper -notepapers -noter -noters -notes -noteworthily -noteworthiness -noteworthinesses -noteworthy -nother -nothing -nothingness -nothingnesses -nothings -notice -noticeable -noticeably -noticed -noticer -noticers -notices -noticing -notifiable -notification -notifications -notified -notifier -notifiers -notifies -notify -notifying -noting -notion -notional -notionalities -notionality -notionally -notions -notochord -notochordal -notochords -notorieties -notoriety -notorious -notoriously -notornes -notornis -notturni -notturno -notum -notwithstanding -nougat -nougats -nought -noughts -noumena -noumenal -noumenon -noun -nounal -nounally -nounless -nouns -nourish -nourished -nourisher -nourishers -nourishes -nourishing -nourishment -nourishments -nous -nouses -nouveau -nouvelle -nova -novaculite -novaculites -novae -novalike -novas -novation -novations -novel -novelette -novelettes -novelettish -novelise -novelised -novelises -novelising -novelist -novelistic -novelistically -novelists -novelization -novelizations -novelize -novelized -novelizes -novelizing -novella -novellas -novelle -novelly -novels -novelties -novelty -novemdecillion -novemdecillions -novena -novenae -novenas -novercal -novice -novices -novitiate -novitiates -novobiocin -novobiocins -novocaine -novocaines -now -nowadays -noway -noways -nowhere -nowheres -nowhither -nowise -nowness -nownesses -nows -nowt -nowts -noxious -noxiously -noxiousness -noxiousnesses -noyade -noyades -nozzle -nozzles -nth -nu -nuance -nuanced -nuances -nub -nubbier -nubbiest -nubbin -nubbins -nubble -nubbles -nubblier -nubbliest -nubbly -nubby -nubia -nubias -nubile -nubilities -nubility -nubilose -nubilous -nubs -nucellar -nucelli -nucellus -nucha -nuchae -nuchal -nuchals -nucleal -nuclear -nuclease -nucleases -nucleate -nucleated -nucleates -nucleating -nucleation -nucleations -nucleator -nucleators -nuclei -nuclein -nucleins -nucleocapsid -nucleocapsids -nucleoid -nucleoids -nucleolar -nucleole -nucleoles -nucleoli -nucleolus -nucleon -nucleonic -nucleonics -nucleons -nucleophile -nucleophiles -nucleophilic -nucleophilically -nucleophilicities -nucleophilicity -nucleoplasm -nucleoplasmic -nucleoplasms -nucleoprotein -nucleoproteins -nucleoside -nucleosides -nucleosomal -nucleosome -nucleosomes -nucleosyntheses -nucleosynthesis -nucleosynthetic -nucleotidase -nucleotidases -nucleotide -nucleotides -nucleus -nucleuses -nuclide -nuclides -nuclidic -nude -nudely -nudeness -nudenesses -nuder -nudes -nudest -nudge -nudged -nudger -nudgers -nudges -nudging -nudibranch -nudibranchs -nudicaul -nudie -nudies -nudism -nudisms -nudist -nudists -nudities -nudity -nudnick -nudnicks -nudnik -nudniks -nudzh -nudzhed -nudzhes -nudzhing -nugatory -nugget -nuggets -nuggety -nuisance -nuisances -nuke -nuked -nukes -nuking -null -nullah -nullahs -nulled -nullification -nullificationist -nullificationists -nullifications -nullified -nullifier -nullifiers -nullifies -nullify -nullifying -nulling -nulliparous -nullities -nullity -nulls -numb -numbat -numbats -numbed -number -numberable -numbered -numberer -numberers -numbering -numberless -numbers -numbest -numbfish -numbfishes -numbing -numbingly -numbles -numbly -numbness -numbnesses -numbs -numbskull -numbskulls -numen -numerable -numeracies -numeracy -numeral -numerally -numerals -numerary -numerate -numerated -numerates -numerating -numeration -numerations -numerator -numerators -numeric -numerical -numerically -numerics -numerological -numerologies -numerologist -numerologists -numerology -numerous -numerously -numerousness -numerousnesses -numina -numinous -numinouses -numinousness -numinousnesses -numismatic -numismatically -numismatics -numismatist -numismatists -nummary -nummular -numskull -numskulls -nun -nunatak -nunataks -nunchaku -nunchakus -nunciature -nunciatures -nuncio -nuncios -nuncle -nuncles -nuncupative -nunlike -nunneries -nunnery -nunnish -nuns -nuptial -nuptialities -nuptiality -nuptials -nurd -nurds -nurl -nurled -nurling -nurls -nurse -nursed -nursemaid -nursemaids -nurser -nurseries -nursers -nursery -nurseryman -nurserymen -nurses -nursing -nursings -nursling -nurslings -nurtural -nurturance -nurturances -nurturant -nurture -nurtured -nurturer -nurturers -nurtures -nurturing -nus -nut -nutant -nutate -nutated -nutates -nutating -nutation -nutational -nutations -nutbrown -nutcase -nutcases -nutcracker -nutcrackers -nutgall -nutgalls -nutgrass -nutgrasses -nuthatch -nuthatches -nuthouse -nuthouses -nutlet -nutlets -nutlike -nutmeat -nutmeats -nutmeg -nutmegs -nutpick -nutpicks -nutria -nutrias -nutrient -nutrients -nutriment -nutriments -nutrition -nutritional -nutritionally -nutritionist -nutritionists -nutritions -nutritious -nutritiously -nutritiousness -nutritiousnesses -nutritive -nutritively -nuts -nutsedge -nutsedges -nutshell -nutshells -nutsier -nutsiest -nutsy -nutted -nutter -nutters -nuttier -nuttiest -nuttily -nuttiness -nuttinesses -nutting -nuttings -nutty -nutwood -nutwoods -nuzzle -nuzzled -nuzzler -nuzzlers -nuzzles -nuzzling -nyala -nyalas -nyctalopia -nyctalopias -nylghai -nylghais -nylghau -nylghaus -nylon -nylons -nymph -nympha -nymphae -nymphal -nymphalid -nymphalids -nymphean -nymphet -nymphets -nymphette -nymphettes -nympho -nympholepsies -nympholepsy -nympholept -nympholeptic -nympholepts -nymphomania -nymphomaniac -nymphomaniacal -nymphomaniacs -nymphomanias -nymphos -nymphs -nystagmic -nystagmus -nystagmuses -nystatin -nystatins -oaf -oafish -oafishly -oafishness -oafishnesses -oafs -oak -oaken -oaklike -oakmoss -oakmosses -oaks -oakum -oakums -oar -oared -oarfish -oarfishes -oaring -oarless -oarlike -oarlock -oarlocks -oars -oarsman -oarsmanship -oarsmanships -oarsmen -oarswoman -oarswomen -oases -oasis -oast -oasthouse -oasthouses -oasts -oat -oatcake -oatcakes -oaten -oater -oaters -oath -oaths -oatlike -oatmeal -oatmeals -oats -oaves -obbligati -obbligato -obbligatos -obconic -obcordate -obduracies -obduracy -obdurate -obdurately -obdurateness -obduratenesses -obe -obeah -obeahism -obeahisms -obeahs -obedience -obediences -obedient -obediently -obeisance -obeisances -obeisant -obeisantly -obeli -obelia -obelias -obelise -obelised -obelises -obelising -obelisk -obelisks -obelism -obelisms -obelize -obelized -obelizes -obelizing -obelus -obes -obese -obesely -obesities -obesity -obey -obeyable -obeyed -obeyer -obeyers -obeying -obeys -obfuscate -obfuscated -obfuscates -obfuscating -obfuscation -obfuscations -obfuscatory -obi -obia -obias -obiism -obiisms -obis -obit -obits -obituaries -obituarist -obituarists -obituary -object -objected -objectification -objectifications -objectified -objectifies -objectify -objectifying -objecting -objection -objectionable -objectionableness -objectionablenesses -objectionably -objections -objective -objectively -objectiveness -objectivenesses -objectives -objectivism -objectivisms -objectivist -objectivistic -objectivists -objectivities -objectivity -objectless -objectlessness -objectlessnesses -objector -objectors -objects -objet -objets -objurgate -objurgated -objurgates -objurgating -objurgation -objurgations -objurgatory -oblanceolate -oblast -oblasti -oblasts -oblate -oblately -oblateness -oblatenesses -oblates -oblation -oblations -oblatory -obligate -obligated -obligately -obligates -obligati -obligating -obligation -obligations -obligato -obligatorily -obligatory -obligatos -oblige -obliged -obligee -obligees -obliger -obligers -obliges -obliging -obligingly -obligingness -obligingnesses -obligor -obligors -oblique -obliqued -obliquely -obliqueness -obliquenesses -obliques -obliquing -obliquities -obliquity -obliterate -obliterated -obliterates -obliterating -obliteration -obliterations -obliterative -obliterator -obliterators -oblivion -oblivions -oblivious -obliviously -obliviousness -obliviousnesses -oblong -oblongly -oblongs -obloquies -obloquy -obnoxious -obnoxiously -obnoxiousness -obnoxiousnesses -obnubilate -obnubilated -obnubilates -obnubilating -obnubilation -obnubilations -oboe -oboes -oboist -oboists -obol -obole -oboles -oboli -obols -obolus -obovate -obovoid -obscene -obscenely -obscener -obscenest -obscenities -obscenity -obscurant -obscurantic -obscurantism -obscurantisms -obscurantist -obscurantists -obscurants -obscuration -obscurations -obscure -obscured -obscurely -obscureness -obscurenesses -obscurer -obscures -obscurest -obscuring -obscurities -obscurity -obsequies -obsequious -obsequiously -obsequiousness -obsequiousnesses -obsequy -observabilities -observability -observable -observables -observably -observance -observances -observant -observantly -observants -observation -observational -observationally -observations -observatories -observatory -observe -observed -observer -observers -observes -observing -observingly -obsess -obsessed -obsesses -obsessing -obsession -obsessional -obsessionally -obsessions -obsessive -obsessively -obsessiveness -obsessivenesses -obsessives -obsessor -obsessors -obsidian -obsidians -obsolesce -obsolesced -obsolescence -obsolescences -obsolescent -obsolescently -obsolesces -obsolescing -obsolete -obsoleted -obsoletely -obsoleteness -obsoletenesses -obsoletes -obsoleting -obstacle -obstacles -obstetric -obstetrical -obstetrically -obstetrician -obstetricians -obstetrics -obstinacies -obstinacy -obstinate -obstinately -obstinateness -obstinatenesses -obstreperous -obstreperously -obstreperousness -obstreperousnesses -obstruct -obstructed -obstructing -obstruction -obstructionism -obstructionisms -obstructionist -obstructionistic -obstructionists -obstructions -obstructive -obstructively -obstructiveness -obstructivenesses -obstructives -obstructor -obstructors -obstructs -obtain -obtainabilities -obtainability -obtainable -obtained -obtainer -obtainers -obtaining -obtainment -obtainments -obtains -obtect -obtected -obtest -obtested -obtesting -obtests -obtrude -obtruded -obtruder -obtruders -obtrudes -obtruding -obtrusion -obtrusions -obtrusive -obtrusively -obtrusiveness -obtrusivenesses -obtund -obtunded -obtunding -obtunds -obturate -obturated -obturates -obturating -obturation -obturations -obturator -obturators -obtuse -obtusely -obtuseness -obtusenesses -obtuser -obtusest -obtusities -obtusity -obverse -obversely -obverses -obvert -obverted -obverting -obverts -obviable -obviate -obviated -obviates -obviating -obviation -obviations -obviator -obviators -obvious -obviously -obviousness -obviousnesses -obvolute -oca -ocarina -ocarinas -ocas -occasion -occasional -occasionally -occasioned -occasioning -occasions -occident -occidental -occidentalize -occidentalized -occidentalizes -occidentalizing -occidentally -occidents -occipita -occipital -occipitally -occipitals -occiput -occiputs -occlude -occluded -occludes -occluding -occlusal -occlusion -occlusions -occlusive -occult -occultation -occultations -occulted -occulter -occulters -occulting -occultism -occultisms -occultist -occultists -occultly -occults -occupancies -occupancy -occupant -occupants -occupation -occupational -occupationally -occupations -occupied -occupier -occupiers -occupies -occupy -occupying -occur -occurred -occurrence -occurrences -occurrent -occurrents -occurring -occurs -ocean -oceanaria -oceanarium -oceanariums -oceanaut -oceanauts -oceanfront -oceanfronts -oceangoing -oceanic -oceanographer -oceanographers -oceanographic -oceanographical -oceanographically -oceanographies -oceanography -oceanologies -oceanologist -oceanologists -oceanology -oceans -ocellar -ocellate -ocelli -ocellus -oceloid -ocelot -ocelots -ocher -ochered -ochering -ocherous -ochers -ochery -ochlocracies -ochlocracy -ochlocrat -ochlocratic -ochlocratical -ochlocrats -ochone -ochre -ochrea -ochreae -ochred -ochreous -ochres -ochring -ochroid -ochrous -ochry -ocker -ockers -ocotillo -ocotillos -ocrea -ocreae -ocreate -octad -octadic -octads -octagon -octagonal -octagonally -octagons -octahedra -octahedral -octahedrally -octahedron -octahedrons -octal -octameter -octameters -octan -octane -octanes -octangle -octangles -octanol -octanols -octans -octant -octantal -octants -octapeptide -octapeptides -octarchies -octarchy -octaval -octave -octaves -octavo -octavos -octet -octets -octette -octettes -octillion -octillions -octodecillion -octodecillions -octogenarian -octogenarians -octonaries -octonary -octopi -octoploid -octoploids -octopod -octopodes -octopods -octopus -octopuses -octoroon -octoroons -octosyllabic -octosyllabics -octosyllable -octosyllables -octothorp -octothorps -octroi -octrois -octuple -octupled -octuples -octuplet -octuplets -octuplex -octupling -octuply -octyl -octyls -ocular -ocularist -ocularists -ocularly -oculars -oculi -oculist -oculists -oculomotor -oculus -od -odalisk -odalisks -odalisque -odalisques -odd -oddball -oddballs -odder -oddest -oddish -oddities -oddity -oddly -oddment -oddments -oddness -oddnesses -odds -oddsmaker -oddsmakers -ode -odea -odeon -odeons -odes -odeum -odeums -odic -odious -odiously -odiousness -odiousnesses -odist -odists -odium -odiums -odograph -odographs -odometer -odometers -odometries -odometry -odonate -odonates -odontoblast -odontoblastic -odontoblasts -odontoglossum -odontoglossums -odontoid -odontoids -odor -odorant -odorants -odored -odorful -odoriferous -odoriferously -odoriferousness -odoriferousnesses -odorize -odorized -odorizes -odorizing -odorless -odorous -odorously -odorousness -odorousnesses -odors -odour -odourful -odours -ods -odyl -odyle -odyles -odyls -odyssey -odysseys -oe -oecologies -oecology -oecumenical -oedema -oedemas -oedemata -oedipal -oedipally -oedipean -oeillade -oeillades -oenologies -oenology -oenomel -oenomels -oenophile -oenophiles -oersted -oersteds -oes -oesophagi -oesophagus -oestrin -oestrins -oestriol -oestriols -oestrone -oestrones -oestrous -oestrum -oestrums -oestrus -oestruses -oeuvre -oeuvres -of -ofay -ofays -off -offal -offals -offbeat -offbeats -offcast -offcasts -offcut -offcuts -offed -offence -offences -offend -offended -offender -offenders -offending -offends -offense -offenseless -offenses -offensive -offensively -offensiveness -offensivenesses -offensives -offer -offered -offerer -offerers -offering -offerings -offeror -offerors -offers -offertories -offertory -offguard -offhand -offhanded -offhandedly -offhandedness -offhandednesses -office -officeholder -officeholders -officer -officered -officering -officers -offices -official -officialdom -officialdoms -officialese -officialeses -officialism -officialisms -officially -officials -officiant -officiants -officiaries -officiary -officiate -officiated -officiates -officiating -officiation -officiations -officinal -officious -officiously -officiousness -officiousnesses -offing -offings -offish -offishly -offishness -offishnesses -offkey -offline -offload -offloaded -offloading -offloads -offprint -offprinted -offprinting -offprints -offramp -offramps -offs -offscouring -offscourings -offscreen -offset -offsets -offsetting -offshoot -offshoots -offshore -offside -offsides -offspring -offsprings -offstage -offstages -offtrack -oft -often -oftener -oftenest -oftentimes -ofter -oftest -ofttimes -ogam -ogams -ogdoad -ogdoads -ogee -ogees -ogham -oghamic -oghamist -oghamists -oghams -ogival -ogive -ogives -ogle -ogled -ogler -oglers -ogles -ogling -ogre -ogreish -ogreism -ogreisms -ogres -ogress -ogresses -ogrish -ogrishly -ogrism -ogrisms -oh -ohed -ohia -ohias -ohing -ohm -ohmage -ohmages -ohmic -ohmically -ohmmeter -ohmmeters -ohms -oho -ohs -oidia -oidium -oil -oilbird -oilbirds -oilcamp -oilcamps -oilcan -oilcans -oilcloth -oilcloths -oilcup -oilcups -oiled -oiler -oilers -oilhole -oilholes -oilier -oiliest -oilily -oiliness -oilinesses -oiling -oilman -oilmen -oilpaper -oilpapers -oilproof -oils -oilseed -oilseeds -oilskin -oilskins -oilstone -oilstones -oiltight -oilway -oilways -oily -oink -oinked -oinking -oinks -oinologies -oinology -oinomel -oinomels -ointment -ointments -oiticica -oiticicas -oka -okapi -okapis -okas -okay -okayed -okaying -okays -oke -okeh -okehs -okes -okeydoke -okeydokey -okra -okras -old -olden -older -oldest -oldfangled -oldie -oldies -oldish -oldness -oldnesses -olds -oldsquaw -oldsquaws -oldster -oldsters -oldstyle -oldstyles -oldwife -oldwives -oldy -ole -olea -oleaginous -oleaginously -oleaginousness -oleaginousnesses -oleander -oleanders -oleandomycin -oleandomycins -oleaster -oleasters -oleate -oleates -olecranon -olecranons -olefin -olefine -olefines -olefinic -olefins -oleic -olein -oleine -oleines -oleins -oleo -oleograph -oleographs -oleomargarine -oleomargarines -oleoresin -oleoresinous -oleoresins -oleos -oles -oleum -oleums -olfaction -olfactions -olfactometer -olfactometers -olfactory -olibanum -olibanums -oligarch -oligarchic -oligarchical -oligarchies -oligarchs -oligarchy -oligochaete -oligochaetes -oligoclase -oligoclases -oligodendrocyte -oligodendrocytes -oligodendroglia -oligodendroglial -oligodendroglias -oligomer -oligomeric -oligomerization -oligomerizations -oligomers -oligonucleotide -oligonucleotides -oligophagies -oligophagous -oligophagy -oligopolies -oligopolistic -oligopoly -oligopsonies -oligopsonistic -oligopsony -oligosaccharide -oligosaccharides -oligotrophic -oliguria -oligurias -olio -olios -olivaceous -olivary -olive -olivenite -olivenites -olives -olivine -olivines -olivinic -olivinitic -olla -ollas -ologies -ologist -ologists -ology -ololiuqui -ololiuquis -oloroso -olorosos -olympiad -olympiads -om -omasa -omasum -omber -ombers -ombre -ombres -ombudsman -ombudsmanship -ombudsmanships -ombudsmen -omega -omegas -omelet -omelets -omelette -omelettes -omen -omened -omening -omens -omenta -omental -omentum -omentums -omer -omers -omicron -omicrons -omikron -omikrons -ominous -ominously -ominousness -ominousnesses -omissible -omission -omissions -omissive -omit -omits -omitted -omitter -omitters -omitting -ommatidia -ommatidial -ommatidium -omniarch -omniarchs -omnibus -omnibuses -omnibusses -omnicompetence -omnicompetences -omnicompetent -omnidirectional -omnifarious -omnific -omnificent -omniform -omnimode -omnipotence -omnipotences -omnipotent -omnipotently -omnipotents -omnipresence -omnipresences -omnipresent -omnirange -omniranges -omniscience -omnisciences -omniscient -omnisciently -omnivora -omnivore -omnivores -omnivorous -omnivorously -omophagies -omophagy -omphali -omphalos -omphaloses -omphaloskepses -omphaloskepsis -oms -on -onager -onagers -onagri -onanism -onanisms -onanist -onanistic -onanists -onboard -once -onces -onchocerciases -onchocerciasis -oncidium -oncidiums -oncogene -oncogenes -oncogeneses -oncogenesis -oncogenic -oncogenicities -oncogenicity -oncologic -oncological -oncologies -oncologist -oncologists -oncology -oncoming -oncomings -oncornavirus -oncornaviruses -ondogram -ondograms -one -onefold -oneiric -oneirically -oneiromancies -oneiromancy -oneness -onenesses -onerier -oneriest -onerous -onerously -onerousness -onerousnesses -onery -ones -oneself -onetime -ongoing -ongoingness -ongoingnesses -onion -onions -onionskin -onionskins -oniony -onium -online -onlooker -onlookers -onlooking -only -onomastic -onomastically -onomastician -onomasticians -onomastics -onomatologies -onomatologist -onomatologists -onomatology -onomatopoeia -onomatopoeias -onomatopoeic -onomatopoeically -onomatopoetic -onomatopoetically -onrush -onrushes -onrushing -ons -onscreen -onset -onsets -onshore -onside -onslaught -onslaughts -onstage -onstream -ontic -ontically -onto -ontogeneses -ontogenesis -ontogenetic -ontogenetically -ontogenies -ontogeny -ontological -ontologically -ontologies -ontologist -ontologists -ontology -onus -onuses -onward -onwards -onychophoran -onychophorans -onyx -onyxes -oocyst -oocysts -oocyte -oocytes -oodles -oodlins -oogamete -oogametes -oogamies -oogamous -oogamy -oogeneses -oogenesis -oogenetic -oogenies -oogeny -oogonia -oogonial -oogonium -oogoniums -ooh -oohed -oohing -oohs -oolachan -oolachans -oolite -oolites -oolith -ooliths -oolitic -oologic -oologies -oologist -oologists -oology -oolong -oolongs -oomiac -oomiack -oomiacks -oomiacs -oomiak -oomiaks -oompah -oompahed -oompahing -oompahs -oomph -oomphs -oophorectomies -oophorectomy -oophyte -oophytes -oophytic -oops -oorali -ooralis -oorie -oosperm -oosperms -oosphere -oospheres -oospore -oospores -oosporic -oot -ootheca -oothecae -oothecal -ootid -ootids -oots -ooze -oozed -oozes -oozier -ooziest -oozily -ooziness -oozinesses -oozing -oozy -op -opacified -opacifies -opacify -opacifying -opacities -opacity -opah -opahs -opal -opalesce -opalesced -opalescence -opalescences -opalescent -opalescently -opalesces -opalescing -opaline -opalines -opals -opaque -opaqued -opaquely -opaqueness -opaquenesses -opaquer -opaques -opaquest -opaquing -ope -oped -open -openabilities -openability -openable -opencast -opened -opener -openers -openest -openhanded -openhandedly -openhandedness -openhandednesses -openhearted -openheartedly -openheartedness -openheartednesses -opening -openings -openly -openmouthed -openmouthedly -openmouthedness -openmouthednesses -openness -opennesses -opens -openwork -openworks -opera -operabilities -operability -operable -operably -operagoer -operagoers -operagoing -operagoings -operand -operands -operant -operantly -operants -operas -operate -operated -operates -operatic -operatically -operatics -operating -operation -operational -operationalism -operationalisms -operationalist -operationalistic -operationalists -operationally -operationism -operationisms -operationist -operationists -operations -operative -operatively -operativeness -operativenesses -operatives -operator -operatorless -operators -opercele -operceles -opercula -opercular -operculars -operculate -operculated -opercule -opercules -operculum -operculums -operetta -operettas -operettist -operettists -operon -operons -operose -operosely -operoseness -operosenesses -opes -ophidian -ophidians -ophite -ophites -ophitic -ophiuroid -ophiuroids -ophthalmia -ophthalmias -ophthalmic -ophthalmologic -ophthalmological -ophthalmologically -ophthalmologies -ophthalmologist -ophthalmologists -ophthalmology -ophthalmoscope -ophthalmoscopes -ophthalmoscopic -ophthalmoscopies -ophthalmoscopy -opiate -opiated -opiates -opiating -opine -opined -opines -oping -opining -opinion -opinionated -opinionatedly -opinionatedness -opinionatednesses -opinionative -opinionatively -opinionativeness -opinionativenesses -opinioned -opinions -opioid -opioids -opisthobranch -opisthobranchs -opium -opiumism -opiumisms -opiums -opossum -opossums -oppidan -oppidans -oppilant -oppilate -oppilated -oppilates -oppilating -opponent -opponents -opportune -opportunely -opportuneness -opportunenesses -opportunism -opportunisms -opportunist -opportunistic -opportunistically -opportunists -opportunities -opportunity -opposabilities -opposability -opposable -oppose -opposed -opposeless -opposer -opposers -opposes -opposing -opposite -oppositely -oppositeness -oppositenesses -opposites -opposition -oppositional -oppositionist -oppositionists -oppositions -oppress -oppressed -oppresses -oppressing -oppression -oppressions -oppressive -oppressively -oppressiveness -oppressivenesses -oppressor -oppressors -opprobrious -opprobriously -opprobriousness -opprobriousnesses -opprobrium -opprobriums -oppugn -oppugned -oppugner -oppugners -oppugning -oppugns -ops -opsin -opsins -opsonic -opsonified -opsonifies -opsonify -opsonifying -opsonin -opsonins -opsonize -opsonized -opsonizes -opsonizing -opt -optative -optatively -optatives -opted -optic -optical -optically -optician -opticians -opticist -opticists -optics -optima -optimal -optimalities -optimality -optimally -optime -optimes -optimisation -optimisations -optimise -optimised -optimises -optimising -optimism -optimisms -optimist -optimistic -optimistically -optimists -optimization -optimizations -optimize -optimized -optimizer -optimizers -optimizes -optimizing -optimum -optimums -opting -option -optional -optionalities -optionality -optionally -optionals -optioned -optionee -optionees -optioning -options -optoelectronic -optoelectronics -optokinetic -optometric -optometries -optometrist -optometrists -optometry -opts -opulence -opulences -opulencies -opulency -opulent -opulently -opuntia -opuntias -opus -opuscula -opuscule -opuscules -opusculum -opuses -oquassa -oquassas -or -ora -orach -orache -oraches -oracle -oracles -oracular -oracularities -oracularity -oracularly -orad -oral -oralism -oralisms -oralist -oralists -oralities -orality -orally -orals -orang -orange -orangeade -orangeades -orangerie -orangeries -orangery -oranges -orangewood -orangewoods -orangey -orangier -orangiest -orangish -orangs -orangutan -orangutans -orangy -orate -orated -orates -orating -oration -orations -orator -oratorical -oratorically -oratories -oratorio -oratorios -orators -oratory -oratress -oratresses -oratrices -oratrix -orb -orbed -orbicular -orbicularly -orbiculate -orbier -orbiest -orbing -orbit -orbital -orbitals -orbited -orbiter -orbiters -orbiting -orbits -orbs -orby -orc -orca -orcas -orcein -orceins -orchard -orchardist -orchardists -orchards -orchestra -orchestral -orchestrally -orchestras -orchestrate -orchestrated -orchestrater -orchestraters -orchestrates -orchestrating -orchestration -orchestrational -orchestrations -orchestrator -orchestrators -orchid -orchidaceous -orchidlike -orchids -orchil -orchils -orchis -orchises -orchitic -orchitis -orchitises -orcin -orcinol -orcinols -orcins -orcs -ordain -ordained -ordainer -ordainers -ordaining -ordainment -ordainments -ordains -ordeal -ordeals -order -orderable -ordered -orderer -orderers -ordering -orderless -orderlies -orderliness -orderlinesses -orderly -orders -ordinal -ordinals -ordinance -ordinances -ordinand -ordinands -ordinarier -ordinaries -ordinariest -ordinarily -ordinariness -ordinarinesses -ordinary -ordinate -ordinates -ordination -ordinations -ordines -ordnance -ordnances -ordo -ordonnance -ordonnances -ordos -ordure -ordures -ore -oread -oreads -orectic -orective -oregano -oreganos -oreide -oreides -ores -orfray -orfrays -organ -organa -organdie -organdies -organdy -organelle -organelles -organic -organically -organicism -organicisms -organicist -organicists -organicities -organicity -organics -organisation -organisations -organise -organised -organiser -organisers -organises -organising -organism -organismal -organismic -organismically -organisms -organist -organists -organizable -organization -organizational -organizationally -organizations -organize -organized -organizer -organizers -organizes -organizing -organochlorine -organochlorines -organogeneses -organogenesis -organogenetic -organoleptic -organoleptically -organologies -organology -organomercurial -organomercurials -organometallic -organometallics -organon -organons -organophosphate -organophosphates -organophosphorous -organophosphorus -organophosphoruses -organs -organum -organums -organza -organzas -organzine -organzines -orgasm -orgasmic -orgasms -orgastic -orgeat -orgeats -orgiac -orgiastic -orgiastically -orgic -orgies -orgone -orgones -orgulous -orgy -oribatid -oribatids -oribi -oribis -oriel -oriels -orient -oriental -orientalism -orientalisms -orientalist -orientalists -orientalize -orientalized -orientalizes -orientalizing -orientally -orientals -orientate -orientated -orientates -orientating -orientation -orientational -orientationally -orientations -oriented -orienteer -orienteering -orienteerings -orienteers -orienting -orients -orifice -orifices -orificial -oriflamme -oriflammes -origami -origamis -origan -origans -origanum -origanums -origin -original -originalities -originality -originally -originals -originate -originated -originates -originating -origination -originations -originative -originatively -originator -originators -origins -orinasal -orinasals -oriole -orioles -orismological -orismologies -orismology -orison -orisons -orle -orles -orlop -orlops -ormer -ormers -ormolu -ormolus -ornament -ornamental -ornamentally -ornamentals -ornamentation -ornamentations -ornamented -ornamenting -ornaments -ornate -ornately -ornateness -ornatenesses -ornerier -orneriest -orneriness -ornerinesses -ornery -ornis -ornithes -ornithic -ornithine -ornithines -ornithischian -ornithischians -ornithologic -ornithological -ornithologically -ornithologies -ornithologist -ornithologists -ornithology -ornithopod -ornithopods -ornithopter -ornithopters -ornithoses -ornithosis -orogeneses -orogenesis -orogenetic -orogenic -orogenies -orogeny -orographic -orographical -orographies -orography -oroide -oroides -orologies -orology -orometer -orometers -oropharyngeal -oropharynges -oropharynx -oropharynxes -orotund -orotundities -orotundity -orphan -orphanage -orphanages -orphaned -orphanhood -orphanhoods -orphaning -orphans -orphic -orphical -orphically -orphrey -orphreys -orpiment -orpiments -orpin -orpine -orpines -orpins -orra -orreries -orrery -orrice -orrices -orris -orrises -orrisroot -orrisroots -ors -ort -orthicon -orthicons -ortho -orthocenter -orthocenters -orthochromatic -orthoclase -orthoclases -orthodontia -orthodontias -orthodontic -orthodontically -orthodontics -orthodontist -orthodontists -orthodox -orthodoxes -orthodoxies -orthodoxly -orthodoxy -orthoepic -orthoepically -orthoepies -orthoepist -orthoepists -orthoepy -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 -orthoses -orthosis -orthostatic -orthotic -orthotics -orthotist -orthotists -orthotropous -ortolan -ortolans -orts -oryx -oryxes -orzo -orzos -os -osar -oscillate -oscillated -oscillates -oscillating -oscillation -oscillational -oscillations -oscillator -oscillators -oscillatory -oscillogram -oscillograms -oscillograph -oscillographic -oscillographically -oscillographies -oscillographs -oscillography -oscilloscope -oscilloscopes -oscilloscopic -oscine -oscines -oscinine -oscitant -oscula -osculant -oscular -osculate -osculated -osculates -osculating -osculation -osculations -osculatory -oscule -oscules -osculum -ose -oses -osier -osiers -osmatic -osmeteria -osmeterium -osmic -osmics -osmious -osmiridium -osmiridiums -osmium -osmiums -osmol -osmolal -osmolalities -osmolality -osmolar -osmolarities -osmolarity -osmole -osmoles -osmols -osmometer -osmometers -osmometric -osmometries -osmometry -osmoregulation -osmoregulations -osmoregulatory -osmose -osmosed -osmoses -osmosing -osmosis -osmotic -osmotically -osmous -osmund -osmunda -osmundas -osmunds -osnaburg -osnaburgs -osprey -ospreys -ossa -ossein -osseins -osseous -ossia -ossicle -ossicles -ossicular -ossific -ossification -ossifications -ossified -ossifier -ossifiers -ossifies -ossifrage -ossifrages -ossify -ossifying -ossuaries -ossuary -osteal -osteites -osteitic -osteitides -osteitis -ostensible -ostensibly -ostensive -ostensively -ostensoria -ostensorium -ostentation -ostentations -ostentatious -ostentatiously -ostentatiousness -ostentatiousnesses -osteoarthritic -osteoarthritides -osteoarthritis -osteoblast -osteoblastic -osteoblasts -osteoclast -osteoclastic -osteoclasts -osteocyte -osteocytes -osteogeneses -osteogenesis -osteogenic -osteoid -osteoids -osteological -osteologies -osteologist -osteologists -osteology -osteoma -osteomalacia -osteomalacias -osteomas -osteomata -osteomyelitides -osteomyelitis -osteopath -osteopathic -osteopathically -osteopathies -osteopaths -osteopathy -osteoplastic -osteoplasties -osteoplasty -osteoporoses -osteoporosis -osteoporotic -osteosarcoma -osteosarcomas -osteosarcomata -osteoses -osteosis -osteosises -ostia -ostiaries -ostiary -ostinati -ostinato -ostinatos -ostiolar -ostiole -ostioles -ostium -ostler -ostlers -ostmark -ostmarks -ostomies -ostomy -ostoses -ostosis -ostosises -ostraca -ostracise -ostracised -ostracises -ostracising -ostracism -ostracisms -ostracize -ostracized -ostracizes -ostracizing -ostracod -ostracode -ostracoderm -ostracoderms -ostracodes -ostracods -ostracon -ostrich -ostriches -ostrichlike -otalgia -otalgias -otalgic -otalgies -otalgy -other -otherguess -otherness -othernesses -others -otherwhere -otherwhile -otherwhiles -otherwise -otherworld -otherworldliness -otherworldlinesses -otherworldly -otherworlds -otic -otiose -otiosely -otioseness -otiosenesses -otiosities -otiosity -otitic -otitides -otitis -otocyst -otocystic -otocysts -otolaryngological -otolaryngologies -otolaryngologist -otolaryngologists -otolaryngology -otolith -otolithic -otoliths -otologies -otology -otorhinolaryngological -otorhinolaryngologies -otorhinolaryngologist -otorhinolaryngologists -otorhinolaryngology -otoscleroses -otosclerosis -otoscope -otoscopes -otoscopies -otoscopy -ototoxic -ototoxicities -ototoxicity -ottar -ottars -ottava -ottavas -otter -otters -otto -ottoman -ottomans -ottos -ouabain -ouabains -oubliette -oubliettes -ouch -ouched -ouches -ouching -oud -ouds -ought -oughted -oughting -oughts -ouguiya -ouguiyas -ouistiti -ouistitis -ounce -ounces -ouph -ouphe -ouphes -ouphs -our -ourang -ourangs -ourari -ouraris -ourebi -ourebis -ourie -ours -ourself -ourselves -ousel -ousels -oust -ousted -ouster -ousters -ousting -ousts -out -outachieve -outachieved -outachieves -outachieving -outact -outacted -outacting -outacts -outadd -outadded -outadding -outadds -outage -outages -outargue -outargued -outargues -outarguing -outask -outasked -outasking -outasks -outate -outback -outbacks -outbake -outbaked -outbakes -outbaking -outbalance -outbalanced -outbalances -outbalancing -outbargain -outbargained -outbargaining -outbargains -outbark -outbarked -outbarking -outbarks -outbawl -outbawled -outbawling -outbawls -outbeam -outbeamed -outbeaming -outbeams -outbeg -outbegged -outbegging -outbegs -outbid -outbidden -outbidding -outbids -outbitch -outbitched -outbitches -outbitching -outblaze -outblazed -outblazes -outblazing -outbleat -outbleated -outbleating -outbleats -outbless -outblessed -outblesses -outblessing -outbloom -outbloomed -outblooming -outblooms -outbluff -outbluffed -outbluffing -outbluffs -outblush -outblushed -outblushes -outblushing -outboard -outboards -outboast -outboasted -outboasting -outboasts -outbought -outbound -outbox -outboxed -outboxes -outboxing -outbrag -outbragged -outbragging -outbrags -outbrave -outbraved -outbraves -outbraving -outbrawl -outbrawled -outbrawling -outbrawls -outbreak -outbreaks -outbred -outbreed -outbreeding -outbreedings -outbreeds -outbribe -outbribed -outbribes -outbribing -outbuild -outbuilding -outbuildings -outbuilds -outbuilt -outbulk -outbulked -outbulking -outbulks -outbullied -outbullies -outbully -outbullying -outburn -outburned -outburning -outburns -outburnt -outburst -outbursts -outbuy -outbuying -outbuys -outby -outbye -outcaper -outcapered -outcapering -outcapers -outcast -outcaste -outcastes -outcasts -outcatch -outcatches -outcatching -outcaught -outcavil -outcaviled -outcaviling -outcavilled -outcavilling -outcavils -outcharge -outcharged -outcharges -outcharging -outcharm -outcharmed -outcharming -outcharms -outcheat -outcheated -outcheating -outcheats -outchid -outchidden -outchide -outchided -outchides -outchiding -outclass -outclassed -outclasses -outclassing -outclimb -outclimbed -outclimbing -outclimbs -outclomb -outcoach -outcoached -outcoaches -outcoaching -outcome -outcomes -outcompete -outcompeted -outcompetes -outcompeting -outcook -outcooked -outcooking -outcooks -outcount -outcounted -outcounting -outcounts -outcrawl -outcrawled -outcrawling -outcrawls -outcried -outcries -outcrop -outcropped -outcropping -outcroppings -outcrops -outcross -outcrossed -outcrosses -outcrossing -outcrow -outcrowed -outcrowing -outcrows -outcry -outcrying -outcurse -outcursed -outcurses -outcursing -outcurve -outcurves -outdance -outdanced -outdances -outdancing -outdare -outdared -outdares -outdaring -outdate -outdated -outdatedly -outdatedness -outdatednesses -outdates -outdating -outdazzle -outdazzled -outdazzles -outdazzling -outdebate -outdebated -outdebates -outdebating -outdeliver -outdelivered -outdelivering -outdelivers -outdesign -outdesigned -outdesigning -outdesigns -outdid -outdistance -outdistanced -outdistances -outdistancing -outdo -outdodge -outdodged -outdodges -outdodging -outdoer -outdoers -outdoes -outdoing -outdone -outdoor -outdoors -outdoorsman -outdoorsmanship -outdoorsmanships -outdoorsmen -outdoorsy -outdrag -outdragged -outdragging -outdrags -outdrank -outdraw -outdrawing -outdrawn -outdraws -outdream -outdreamed -outdreaming -outdreams -outdreamt -outdress -outdressed -outdresses -outdressing -outdrew -outdrink -outdrinking -outdrinks -outdrive -outdriven -outdrives -outdriving -outdrop -outdropped -outdropping -outdrops -outdrove -outdrunk -outduel -outdueled -outdueling -outduelled -outduelling -outduels -outearn -outearned -outearning -outearns -outeat -outeaten -outeating -outeats -outecho -outechoed -outechoes -outechoing -outed -outer -outercoat -outercoats -outermost -outers -outerwear -outfable -outfabled -outfables -outfabling -outface -outfaced -outfaces -outfacing -outfall -outfalls -outfast -outfasted -outfasting -outfasts -outfawn -outfawned -outfawning -outfawns -outfeast -outfeasted -outfeasting -outfeasts -outfeel -outfeeling -outfeels -outfelt -outfield -outfielder -outfielders -outfields -outfight -outfighting -outfights -outfigure -outfigured -outfigures -outfiguring -outfind -outfinding -outfinds -outfire -outfired -outfires -outfiring -outfish -outfished -outfishes -outfishing -outfit -outfits -outfitted -outfitter -outfitters -outfitting -outflank -outflanked -outflanking -outflanks -outflew -outflies -outflow -outflowed -outflowing -outflown -outflows -outfly -outflying -outfool -outfooled -outfooling -outfools -outfoot -outfooted -outfooting -outfoots -outfought -outfound -outfox -outfoxed -outfoxes -outfoxing -outfrown -outfrowned -outfrowning -outfrowns -outfumble -outfumbled -outfumbles -outfumbling -outgain -outgained -outgaining -outgains -outgas -outgassed -outgasses -outgassing -outgave -outgeneral -outgeneraled -outgeneraling -outgenerals -outgive -outgiven -outgives -outgiving -outgivings -outglare -outglared -outglares -outglaring -outglitter -outglittered -outglittering -outglitters -outglow -outglowed -outglowing -outglows -outgnaw -outgnawed -outgnawing -outgnawn -outgnaws -outgo -outgoes -outgoing -outgoingness -outgoingnesses -outgoings -outgone -outgrew -outgrin -outgrinned -outgrinning -outgrins -outgross -outgrossed -outgrosses -outgrossing -outgroup -outgroups -outgrow -outgrowing -outgrown -outgrows -outgrowth -outgrowths -outguess -outguessed -outguesses -outguessing -outguide -outguided -outguides -outguiding -outgun -outgunned -outgunning -outguns -outgush -outgushes -outhaul -outhauls -outhear -outheard -outhearing -outhears -outhit -outhits -outhitting -outhomer -outhomered -outhomering -outhomers -outhouse -outhouses -outhowl -outhowled -outhowling -outhowls -outhumor -outhumored -outhumoring -outhumors -outhunt -outhunted -outhunting -outhunts -outhustle -outhustled -outhustles -outhustling -outing -outings -outintrigue -outintrigued -outintrigues -outintriguing -outjinx -outjinxed -outjinxes -outjinxing -outjump -outjumped -outjumping -outjumps -outjut -outjuts -outjutted -outjutting -outkeep -outkeeping -outkeeps -outkept -outkick -outkicked -outkicking -outkicks -outkill -outkilled -outkilling -outkills -outkiss -outkissed -outkisses -outkissing -outlaid -outlain -outland -outlander -outlanders -outlandish -outlandishly -outlandishness -outlandishnesses -outlands -outlast -outlasted -outlasting -outlasts -outlaugh -outlaughed -outlaughing -outlaughs -outlaw -outlawed -outlawing -outlawries -outlawry -outlaws -outlay -outlaying -outlays -outleap -outleaped -outleaping -outleaps -outleapt -outlearn -outlearned -outlearning -outlearns -outlearnt -outlet -outlets -outlie -outlier -outliers -outlies -outline -outlined -outliner -outliners -outlines -outlining -outlive -outlived -outliver -outlivers -outlives -outliving -outlook -outlooks -outlove -outloved -outloves -outloving -outlying -outman -outmaneuver -outmaneuvered -outmaneuvering -outmaneuvers -outmanipulate -outmanipulated -outmanipulates -outmanipulating -outmanned -outmanning -outmans -outmarch -outmarched -outmarches -outmarching -outmatch -outmatched -outmatches -outmatching -outmode -outmoded -outmodes -outmoding -outmost -outmove -outmoved -outmoves -outmoving -outmuscle -outmuscled -outmuscles -outmuscling -outnumber -outnumbered -outnumbering -outnumbers -outorganize -outorganized -outorganizes -outorganizing -outpace -outpaced -outpaces -outpacing -outpaint -outpainted -outpainting -outpaints -outpass -outpassed -outpasses -outpassing -outpatient -outpatients -outperform -outperformed -outperforming -outperforms -outpitch -outpitched -outpitches -outpitching -outpitied -outpities -outpity -outpitying -outplacement -outplacements -outplan -outplanned -outplanning -outplans -outplay -outplayed -outplaying -outplays -outplod -outplodded -outplodding -outplods -outplot -outplots -outplotted -outplotting -outpoint -outpointed -outpointing -outpoints -outpolitick -outpoliticked -outpoliticking -outpoliticks -outpoll -outpolled -outpolling -outpolls -outpopulate -outpopulated -outpopulates -outpopulating -outport -outports -outpost -outposts -outpour -outpoured -outpouring -outpourings -outpours -outpower -outpowered -outpowering -outpowers -outpray -outprayed -outpraying -outprays -outpreach -outpreached -outpreaches -outpreaching -outpreen -outpreened -outpreening -outpreens -outpress -outpressed -outpresses -outpressing -outprice -outpriced -outprices -outpricing -outproduce -outproduced -outproduces -outproducing -outpromise -outpromised -outpromises -outpromising -outpull -outpulled -outpulling -outpulls -outpunch -outpunched -outpunches -outpunching -outpush -outpushed -outpushes -outpushing -output -outputs -outputted -outputting -outquote -outquoted -outquotes -outquoting -outrace -outraced -outraces -outracing -outrage -outraged -outrageous -outrageously -outrageousness -outrageousnesses -outrages -outraging -outraise -outraised -outraises -outraising -outran -outrance -outrances -outrang -outrange -outranged -outranges -outranging -outrank -outranked -outranking -outranks -outrate -outrated -outrates -outrating -outrave -outraved -outraves -outraving -outre -outreach -outreached -outreaches -outreaching -outread -outreading -outreads -outrebound -outrebounded -outrebounding -outrebounds -outreproduce -outreproduced -outreproduces -outreproducing -outridden -outride -outrider -outriders -outrides -outriding -outrigger -outriggers -outright -outrightly -outring -outringing -outrings -outrival -outrivaled -outrivaling -outrivalled -outrivalling -outrivals -outroar -outroared -outroaring -outroars -outrock -outrocked -outrocking -outrocks -outrode -outroll -outrolled -outrolling -outrolls -outroot -outrooted -outrooting -outroots -outrow -outrowed -outrowing -outrows -outrun -outrung -outrunning -outruns -outrush -outrushed -outrushes -outrushing -outs -outsail -outsailed -outsailing -outsails -outsang -outsat -outsavor -outsavored -outsavoring -outsavors -outsaw -outscheme -outschemed -outschemes -outscheming -outscold -outscolded -outscolding -outscolds -outscoop -outscooped -outscooping -outscoops -outscore -outscored -outscores -outscoring -outscorn -outscorned -outscorning -outscorns -outsee -outseeing -outseen -outsees -outsell -outselling -outsells -outsert -outserts -outserve -outserved -outserves -outserving -outset -outsets -outshame -outshamed -outshames -outshaming -outshine -outshined -outshines -outshining -outshone -outshoot -outshooting -outshoots -outshot -outshout -outshouted -outshouting -outshouts -outside -outsider -outsiderness -outsidernesses -outsiders -outsides -outsight -outsights -outsin -outsing -outsinging -outsings -outsinned -outsinning -outsins -outsit -outsits -outsitting -outsize -outsized -outsizes -outskate -outskated -outskates -outskating -outskirt -outskirts -outsleep -outsleeping -outsleeps -outslept -outslick -outslicked -outslicking -outslicks -outsmart -outsmarted -outsmarting -outsmarts -outsmile -outsmiled -outsmiles -outsmiling -outsmoke -outsmoked -outsmokes -outsmoking -outsnore -outsnored -outsnores -outsnoring -outsoar -outsoared -outsoaring -outsoars -outsold -outsole -outsoles -outsourcing -outsourcings -outspan -outspanned -outspanning -outspans -outsparkle -outsparkled -outsparkles -outsparkling -outspeak -outspeaking -outspeaks -outsped -outspeed -outspeeded -outspeeding -outspeeds -outspell -outspelled -outspelling -outspells -outspelt -outspend -outspending -outspends -outspent -outspoke -outspoken -outspokenly -outspokenness -outspokennesses -outspread -outspreading -outspreads -outsprint -outsprinted -outsprinting -outsprints -outstand -outstanding -outstandingly -outstands -outstare -outstared -outstares -outstaring -outstart -outstarted -outstarting -outstarts -outstate -outstated -outstates -outstating -outstation -outstations -outstay -outstayed -outstaying -outstays -outsteer -outsteered -outsteering -outsteers -outstood -outstretch -outstretched -outstretches -outstretching -outstridden -outstride -outstrides -outstriding -outstrip -outstripped -outstripping -outstrips -outstrode -outstudied -outstudies -outstudy -outstudying -outstunt -outstunted -outstunting -outstunts -outsulk -outsulked -outsulking -outsulks -outsung -outswam -outsware -outswear -outswearing -outswears -outswim -outswimming -outswims -outswore -outsworn -outswum -outtake -outtakes -outtalk -outtalked -outtalking -outtalks -outtask -outtasked -outtasking -outtasks -outtell -outtelling -outtells -outthank -outthanked -outthanking -outthanks -outthink -outthinking -outthinks -outthought -outthrew -outthrob -outthrobbed -outthrobbing -outthrobs -outthrow -outthrowing -outthrown -outthrows -outthrust -outthrusting -outthrusts -outtold -outtower -outtowered -outtowering -outtowers -outtrade -outtraded -outtrades -outtrading -outtrick -outtricked -outtricking -outtricks -outtrot -outtrots -outtrotted -outtrotting -outtrump -outtrumped -outtrumping -outtrumps -outturn -outturns -outvalue -outvalued -outvalues -outvaluing -outvaunt -outvaunted -outvaunting -outvaunts -outvie -outvied -outvies -outvoice -outvoiced -outvoices -outvoicing -outvote -outvoted -outvotes -outvoting -outvying -outwait -outwaited -outwaiting -outwaits -outwalk -outwalked -outwalking -outwalks -outwar -outward -outwardly -outwardness -outwardnesses -outwards -outwarred -outwarring -outwars -outwash -outwashes -outwaste -outwasted -outwastes -outwasting -outwatch -outwatched -outwatches -outwatching -outwear -outwearied -outwearies -outwearing -outwears -outweary -outwearying -outweep -outweeping -outweeps -outweigh -outweighed -outweighing -outweighs -outwent -outwept -outwhirl -outwhirled -outwhirling -outwhirls -outwile -outwiled -outwiles -outwiling -outwill -outwilled -outwilling -outwills -outwind -outwinded -outwinding -outwinds -outwish -outwished -outwishes -outwishing -outwit -outwits -outwitted -outwitting -outwore -outwork -outworked -outworker -outworkers -outworking -outworks -outworn -outwrestle -outwrestled -outwrestles -outwrestling -outwrit -outwrite -outwrites -outwriting -outwritten -outwrote -outwrought -outyell -outyelled -outyelling -outyells -outyelp -outyelped -outyelping -outyelps -outyield -outyielded -outyielding -outyields -ouzel -ouzels -ouzo -ouzos -ova -oval -ovalbumin -ovalbumins -ovalities -ovality -ovally -ovalness -ovalnesses -ovals -ovarial -ovarian -ovariectomies -ovariectomized -ovariectomy -ovaries -ovariole -ovarioles -ovariotomies -ovariotomy -ovaritides -ovaritis -ovary -ovate -ovately -ovation -ovations -oven -ovenbird -ovenbirds -ovenlike -ovenproof -ovens -ovenware -ovenwares -over -overable -overabstract -overabstracted -overabstracting -overabstracts -overabundance -overabundances -overabundant -overaccentuate -overaccentuated -overaccentuates -overaccentuating -overachieve -overachieved -overachievement -overachievements -overachiever -overachievers -overachieves -overachieving -overact -overacted -overacting -overaction -overactions -overactive -overactivities -overactivity -overacts -overadjustment -overadjustments -overadvertise -overadvertised -overadvertises -overadvertising -overage -overaged -overages -overaggressive -overalert -overall -overalled -overalls -overambitious -overambitiousness -overambitiousnesses -overamplified -overanalyses -overanalysis -overanalytical -overanalyze -overanalyzed -overanalyzes -overanalyzing -overanxieties -overanxiety -overanxious -overapplication -overapplications -overapt -overarch -overarched -overarches -overarching -overarm -overarousal -overarousals -overarrange -overarranged -overarranges -overarranging -overarticulate -overarticulated -overarticulates -overarticulating -overassert -overasserted -overasserting -overassertion -overassertions -overassertive -overasserts -overassessment -overassessments -overate -overattention -overattentions -overawe -overawed -overawes -overawing -overbake -overbaked -overbakes -overbaking -overbalance -overbalanced -overbalances -overbalancing -overbear -overbearing -overbearingly -overbears -overbeat -overbeaten -overbeating -overbeats -overbed -overbejeweled -overbet -overbets -overbetted -overbetting -overbid -overbidden -overbidder -overbidders -overbidding -overbids -overbig -overbill -overbilled -overbilling -overbills -overbite -overbites -overbleach -overbleached -overbleaches -overbleaching -overblew -overblouse -overblouses -overblow -overblowing -overblown -overblows -overboard -overboil -overboiled -overboiling -overboils -overbold -overbook -overbooked -overbooking -overbooks -overbore -overborn -overborne -overborrow -overborrowed -overborrowing -overborrows -overbought -overbreathing -overbreathings -overbred -overbrief -overbright -overbroad -overbrowse -overbrowsed -overbrowses -overbrowsing -overbrutal -overbuild -overbuilding -overbuilds -overbuilt -overburden -overburdened -overburdening -overburdens -overburn -overburned -overburning -overburns -overburnt -overbusy -overbuy -overbuying -overbuys -overcall -overcalled -overcalling -overcalls -overcame -overcapacities -overcapacity -overcapitalization -overcapitalizations -overcapitalize -overcapitalized -overcapitalizes -overcapitalizing -overcareful -overcast -overcasted -overcasting -overcastings -overcasts -overcaution -overcautioned -overcautioning -overcautions -overcautious -overcentralization -overcentralizations -overcentralize -overcentralized -overcentralizes -overcentralizing -overcharge -overcharged -overcharges -overcharging -overchill -overchilled -overchilling -overchills -overcivilized -overclaim -overclaimed -overclaiming -overclaims -overclassification -overclassifications -overclassified -overclassifies -overclassify -overclassifying -overclean -overcleaned -overcleaning -overcleans -overclear -overcleared -overclearing -overclears -overcloud -overclouded -overclouding -overclouds -overcoach -overcoached -overcoaches -overcoaching -overcoat -overcoats -overcold -overcome -overcomer -overcomers -overcomes -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 -overcook -overcooked -overcooking -overcooks -overcool -overcooled -overcooling -overcools -overcorrect -overcorrected -overcorrecting -overcorrection -overcorrections -overcorrects -overcount -overcounted -overcounting -overcounts -overcoy -overcram -overcrammed -overcramming -overcrams -overcredulous -overcritical -overcrop -overcropped -overcropping -overcrops -overcrowd -overcrowded -overcrowding -overcrowds -overcultivation -overcultivations -overcure -overcured -overcures -overcuring -overcut -overcuts -overcutting -overdare -overdared -overdares -overdaring -overdear -overdeck -overdecked -overdecking -overdecks -overdecorate -overdecorated -overdecorates -overdecorating -overdecoration -overdecorations -overdemanding -overdependence -overdependences -overdependent -overdesign -overdesigned -overdesigning -overdesigns -overdetermined -overdevelop -overdeveloped -overdeveloping -overdevelopment -overdevelopments -overdevelops -overdid -overdifferentiation -overdifferentiations -overdirect -overdirected -overdirecting -overdirects -overdiscount -overdiscounted -overdiscounting -overdiscounts -overdiversified -overdiversities -overdiversity -overdo -overdocument -overdocumented -overdocumenting -overdocuments -overdoer -overdoers -overdoes -overdog -overdogs -overdoing -overdominance -overdominances -overdominant -overdone -overdosage -overdosages -overdose -overdosed -overdoses -overdosing -overdraft -overdrafts -overdramatic -overdramatize -overdramatized -overdramatizes -overdramatizing -overdrank -overdraw -overdrawing -overdrawn -overdraws -overdress -overdressed -overdresses -overdressing -overdrew -overdried -overdries -overdrink -overdrinking -overdrinks -overdrive -overdriven -overdrives -overdriving -overdrove -overdrunk -overdry -overdrying -overdub -overdubbed -overdubbing -overdubs -overdue -overdye -overdyed -overdyeing -overdyes -overeager -overeagerness -overeagernesses -overearnest -overeasy -overeat -overeaten -overeater -overeaters -overeating -overeats -overed -overedit -overedited -overediting -overedits -overeducate -overeducated -overeducates -overeducating -overeducation -overeducations -overelaborate -overelaborated -overelaborates -overelaborating -overelaboration -overelaborations -overembellish -overembellished -overembellishes -overembellishing -overembellishment -overembellishments -overemote -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 -overexert -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 -overfar -overfast -overfastidious -overfat -overfatigue -overfatigued -overfatigues -overfavor -overfavored -overfavoring -overfavors -overfear -overfeared -overfearing -overfears -overfed -overfeed -overfeeding -overfeeds -overfertilization -overfertilizations -overfertilize -overfertilized -overfertilizes -overfertilizing -overfill -overfilled -overfilling -overfills -overfish -overfished -overfishes -overfishing -overflew -overflies -overflight -overflights -overflow -overflowed -overflowing -overflown -overflows -overfly -overflying -overfocus -overfocused -overfocuses -overfocusing -overfocussed -overfocusses -overfocussing -overfond -overfoul -overfree -overfulfill -overfulfilled -overfulfilling -overfulfills -overfull -overfund -overfunded -overfunding -overfunds -overfussy -overgarment -overgarments -overgeneralization -overgeneralizations -overgeneralize -overgeneralized -overgeneralizes -overgeneralizing -overgenerosities -overgenerosity -overgenerous -overgenerously -overgild -overgilded -overgilding -overgilds -overgilt -overgird -overgirded -overgirding -overgirds -overgirt -overglad -overglamorize -overglamorized -overglamorizes -overglamorizing -overglaze -overglazes -overgoad -overgoaded -overgoading -overgoads -overgovern -overgoverned -overgoverning -overgoverns -overgraze -overgrazed -overgrazes -overgrazing -overgrew -overgrow -overgrowing -overgrown -overgrows -overgrowth -overgrowths -overhand -overhanded -overhanding -overhandle -overhandled -overhandles -overhandling -overhands -overhang -overhanging -overhangs -overhard -overharvest -overharvested -overharvesting -overharvests -overhasty -overhate -overhated -overhates -overhating -overhaul -overhauled -overhauling -overhauls -overhead -overheads -overheap -overheaped -overheaping -overheaps -overhear -overheard -overhearing -overhears -overheat -overheated -overheating -overheats -overheld -overhigh -overhold -overholding -overholds -overholy -overhomogenize -overhomogenized -overhomogenizes -overhomogenizing -overhope -overhoped -overhopes -overhoping -overhot -overhung -overhunt -overhunted -overhunting -overhuntings -overhunts -overhype -overhyped -overhypes -overhyping -overidealistic -overidealize -overidealized -overidealizes -overidealizing -overidentification -overidentifications -overidentified -overidentifies -overidentify -overidentifying -overidle -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 -overing -overingenious -overingenuities -overingenuity -overinsistent -overinsure -overinsured -overinsures -overinsuring -overintellectualization -overintellectualizations -overintellectualize -overintellectualized -overintellectualizes -overintellectualizing -overintense -overintensities -overintensity -overinterpretation -overinterpretations -overinvestment -overinvestments -overissuance -overissuances -overissue -overissued -overissues -overissuing -overjoy -overjoyed -overjoying -overjoys -overjust -overkeen -overkill -overkilled -overkilling -overkills -overkind -overlabor -overlabored -overlaboring -overlabors -overlade -overladed -overladen -overlades -overlading -overlaid -overlain -overland -overlands -overlap -overlapped -overlapping -overlaps -overlarge -overlate -overlavish -overlax -overlay -overlaying -overlays -overleaf -overleap -overleaped -overleaping -overleaps -overleapt -overlearn -overlearned -overlearning -overlearns -overlend -overlending -overlends -overlength -overlengthen -overlengthened -overlengthening -overlengthens -overlent -overlet -overlets -overletting -overlewd -overlie -overlies -overlight -overlighted -overlighting -overlights -overlit -overliteral -overliterary -overlive -overlived -overlives -overliving -overload -overloaded -overloading -overloads -overlong -overlook -overlooked -overlooking -overlooks -overlord -overlorded -overlording -overlords -overlordship -overlordships -overloud -overlove -overloved -overloves -overloving -overlush -overly -overlying -overman -overmanage -overmanaged -overmanages -overmanaging -overmanned -overmannered -overmanning -overmans -overmantel -overmantels -overmany -overmaster -overmastered -overmastering -overmasters -overmatch -overmatched -overmatches -overmatching -overmature -overmaturities -overmaturity -overmedicate -overmedicated -overmedicates -overmedicating -overmedication -overmedications -overmeek -overmelt -overmelted -overmelting -overmelts -overmen -overmighty -overmild -overmilk -overmilked -overmilking -overmilks -overmine -overmined -overmines -overmining -overmix -overmixed -overmixes -overmixing -overmodest -overmodestly -overmodulated -overmuch -overmuches -overmuscled -overnear -overneat -overnew -overnice -overnight -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 -overpaid -overparticular -overpass -overpassed -overpasses -overpassing -overpast -overpay -overpaying -overpayment -overpayments -overpays -overpedal -overpedaled -overpedaling -overpedalled -overpedalling -overpedals -overpeople -overpeopled -overpeoples -overpeopling -overpersuade -overpersuaded -overpersuades -overpersuading -overpersuasion -overpersuasions -overpert -overplaid -overplaided -overplaids -overplan -overplanned -overplanning -overplans -overplant -overplanted -overplanting -overplants -overplay -overplayed -overplaying -overplays -overplied -overplies -overplot -overplots -overplotted -overplotting -overplus -overpluses -overply -overplying -overpopulate -overpopulated -overpopulates -overpopulating -overpopulation -overpopulations -overpotent -overpower -overpowered -overpowering -overpoweringly -overpowers -overpraise -overpraised -overpraises -overpraising -overprecise -overprescribe -overprescribed -overprescribes -overprescribing -overprescription -overprescriptions -overpressure -overpressures -overprice -overpriced -overprices -overpricing -overprint -overprinted -overprinting -overprints -overprivileged -overprize -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 -overproof -overproportion -overproportionate -overproportionately -overproportioned -overproportioning -overproportions -overprotect -overprotected -overprotecting -overprotection -overprotections -overprotective -overprotectiveness -overprotectivenesses -overprotects -overpump -overpumped -overpumping -overpumps -overqualified -overran -overrank -overrash -overrate -overrated -overrates -overrating -overreach -overreached -overreacher -overreachers -overreaches -overreaching -overreact -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 -overrich -overridden -override -overrides -overriding -overrife -overrigid -overripe -overrode -overrude -overruff -overruffed -overruffing -overruffs -overrule -overruled -overrules -overruling -overrun -overrunning -overruns -overs -oversad -oversale -oversales -oversalt -oversalted -oversalting -oversalts -oversanguine -oversaturate -oversaturated -oversaturates -oversaturating -oversaturation -oversaturations -oversauce -oversauced -oversauces -oversaucing -oversave -oversaved -oversaves -oversaving -oversaw -overscale -overscaled -overscrupulous -oversea -overseas -oversecretion -oversecretions -oversee -overseed -overseeded -overseeding -overseeds -overseeing -overseen -overseer -overseers -oversees -oversell -overselling -oversells -oversensitive -oversensitiveness -oversensitivenesses -oversensitivities -oversensitivity -overserious -overseriously -overservice -overserviced -overservices -overservicing -overset -oversets -oversetting -oversew -oversewed -oversewing -oversewn -oversews -oversexed -overshadow -overshadowed -overshadowing -overshadows -overshirt -overshirts -overshoe -overshoes -overshoot -overshooting -overshoots -overshot -overshots -oversick -overside -oversides -oversight -oversights -oversimple -oversimplification -oversimplifications -oversimplified -oversimplifies -oversimplify -oversimplifying -oversimplistic -oversimply -oversize -oversized -oversizes -overskirt -overskirts -overslaugh -overslaughed -overslaughing -overslaughs -oversleep -oversleeping -oversleeps -overslept -overslip -overslipped -overslipping -overslips -overslipt -overslow -oversmoke -oversmoked -oversmokes -oversmoking -oversoak -oversoaked -oversoaking -oversoaks -oversoft -oversold -oversolicitous -oversoon -oversophisticated -oversoul -oversouls -overspecialization -overspecializations -overspecialize -overspecialized -overspecializes -overspecializing -overspeculate -overspeculated -overspeculates -overspeculating -overspeculation -overspeculations -overspend -overspender -overspenders -overspending -overspends -overspent -overspill -overspills -overspin -overspins -overspread -overspreading -overspreads -overstabilities -overstability -overstaff -overstaffed -overstaffing -overstaffs -overstate -overstated -overstatement -overstatements -overstates -overstating -overstay -overstayed -overstaying -overstays -oversteer -oversteers -overstep -overstepped -overstepping -oversteps -overstimulate -overstimulated -overstimulates -overstimulating -overstimulation -overstimulations -overstir -overstirred -overstirring -overstirs -overstock -overstocked -overstocking -overstocks -overstories -overstory -overstrain -overstrained -overstraining -overstrains -overstress -overstressed -overstresses -overstressing -overstretch -overstretched -overstretches -overstretching -overstrew -overstrewed -overstrewing -overstrewn -overstrews -overstridden -overstride -overstrides -overstriding -overstrike -overstrikes -overstriking -overstrode -overstruck -overstructured -overstrung -overstuff -overstuffed -overstuffing -overstuffs -oversubscribe -oversubscribed -oversubscribes -oversubscribing -oversubscription -oversubscriptions -oversubtle -oversuds -oversudsed -oversudses -oversudsing -oversup -oversupped -oversupping -oversupplied -oversupplies -oversupply -oversupplying -oversups -oversure -oversuspicious -oversweet -oversweeten -oversweetened -oversweetening -oversweetens -oversweetness -oversweetnesses -overswing -overswinging -overswings -overswung -overt -overtake -overtaken -overtakes -overtaking -overtalk -overtalkative -overtalked -overtalking -overtalks -overtame -overtart -overtask -overtasked -overtasking -overtasks -overtax -overtaxation -overtaxations -overtaxed -overtaxes -overtaxing -overthin -overthink -overthinking -overthinks -overthought -overthrew -overthrow -overthrowing -overthrown -overthrows -overtighten -overtightened -overtightening -overtightens -overtime -overtimed -overtimes -overtiming -overtip -overtipped -overtipping -overtips -overtire -overtired -overtires -overtiring -overtly -overtness -overtnesses -overtoil -overtoiled -overtoiling -overtoils -overtone -overtones -overtook -overtop -overtopped -overtopping -overtops -overtrade -overtraded -overtrades -overtrading -overtrain -overtrained -overtraining -overtrains -overtreat -overtreated -overtreating -overtreatment -overtreatments -overtreats -overtrick -overtricks -overtrim -overtrimmed -overtrimming -overtrims -overtrump -overtrumped -overtrumping -overtrumps -overture -overtured -overtures -overturing -overturn -overturned -overturning -overturns -overurge -overurged -overurges -overurging -overuse -overused -overuses -overusing -overutilization -overutilizations -overutilize -overutilized -overutilizes -overutilizing -overvaluation -overvaluations -overvalue -overvalued -overvalues -overvaluing -overview -overviews -overviolent -overvivid -overvoltage -overvoltages -overvote -overvoted -overvotes -overvoting -overwarm -overwarmed -overwarming -overwarms -overwary -overwater -overwatered -overwatering -overwaters -overweak -overwear -overwearing -overwears -overweary -overween -overweened -overweening -overweeningly -overweens -overweigh -overweighed -overweighing -overweighs -overweight -overweighted -overweighting -overweights -overwet -overwets -overwetted -overwetting -overwhelm -overwhelmed -overwhelming -overwhelmingly -overwhelms -overwide -overwily -overwind -overwinding -overwinds -overwinter -overwintered -overwintering -overwinters -overwise -overwithheld -overwithhold -overwithholding -overwithholds -overword -overwords -overwore -overwork -overworked -overworking -overworks -overworn -overwound -overwrite -overwrites -overwriting -overwritten -overwrote -overwrought -overzeal -overzealous -overzealously -overzealousness -overzealousnesses -overzeals -ovibos -ovicidal -ovicide -ovicides -oviducal -oviduct -oviductal -oviducts -oviform -ovine -ovines -ovipara -oviparous -oviposit -oviposited -ovipositing -oviposition -ovipositional -ovipositions -ovipositor -ovipositors -oviposits -ovisac -ovisacs -ovoid -ovoidal -ovoids -ovolactovegetarian -ovolactovegetarians -ovoli -ovolo -ovolos -ovonic -ovonics -ovotestes -ovotestis -ovoviviparous -ovoviviparously -ovoviviparousness -ovoviviparousnesses -ovular -ovulary -ovulate -ovulated -ovulates -ovulating -ovulation -ovulations -ovulatory -ovule -ovules -ovum -ow -owe -owed -owes -owing -owl -owlet -owlets -owlish -owlishly -owlishness -owlishnesses -owllike -owls -own -ownable -owned -owner -owners -ownership -ownerships -owning -owns -owse -owsen -ox -oxacillin -oxacillins -oxalacetate -oxalacetates -oxalate -oxalated -oxalates -oxalating -oxalic -oxalis -oxalises -oxaloacetate -oxaloacetates -oxazepam -oxazepams -oxazine -oxazines -oxblood -oxbloods -oxbow -oxbows -oxcart -oxcarts -oxen -oxes -oxeye -oxeyes -oxford -oxfords -oxheart -oxhearts -oxid -oxidable -oxidant -oxidants -oxidase -oxidases -oxidasic -oxidate -oxidated -oxidates -oxidating -oxidation -oxidations -oxidative -oxidatively -oxide -oxides -oxidic -oxidise -oxidised -oxidiser -oxidisers -oxidises -oxidising -oxidizable -oxidize -oxidized -oxidizer -oxidizers -oxidizes -oxidizing -oxidoreductase -oxidoreductases -oxids -oxim -oxime -oximes -oxims -oxlip -oxlips -oxo -oxpecker -oxpeckers -oxtail -oxtails -oxter -oxters -oxtongue -oxtongues -oxy -oxyacetylene -oxyacid -oxyacids -oxygen -oxygenate -oxygenated -oxygenates -oxygenating -oxygenation -oxygenations -oxygenator -oxygenators -oxygenic -oxygenless -oxygens -oxyhemoglobin -oxyhemoglobins -oxyhydrogen -oxymora -oxymoron -oxymoronic -oxymoronically -oxymorons -oxyphenbutazone -oxyphenbutazones -oxyphil -oxyphile -oxyphiles -oxyphilic -oxyphils -oxysalt -oxysalts -oxysome -oxysomes -oxytetracycline -oxytetracyclines -oxytocic -oxytocics -oxytocin -oxytocins -oxytone -oxytones -oxyuriases -oxyuriasis -oy -oyer -oyers -oyes -oyesses -oyez -oyster -oystercatcher -oystercatchers -oystered -oysterer -oysterers -oystering -oysterings -oysterman -oystermen -oysters -ozocerite -ozocerites -ozokerite -ozokerites -ozonate -ozonated -ozonates -ozonating -ozonation -ozonations -ozone -ozones -ozonic -ozonide -ozonides -ozonise -ozonised -ozonises -ozonising -ozonization -ozonizations -ozonize -ozonized -ozonizer -ozonizers -ozonizes -ozonizing -ozonosphere -ozonospheres -ozonous -pa -pablum -pablums -pabular -pabulum -pabulums -pac -paca -pacas -pace -paced -pacemaker -pacemakers -pacemaking -pacemakings -pacer -pacers -paces -pacesetter -pacesetters -pacesetting -pacha -pachadom -pachadoms -pachalic -pachalics -pachas -pachinko -pachinkos -pachisi -pachisis -pachouli -pachoulis -pachuco -pachucos -pachyderm -pachydermatous -pachyderms -pachysandra -pachysandras -pachytene -pachytenes -pacifiable -pacific -pacifically -pacification -pacifications -pacificator -pacificators -pacificism -pacificisms -pacificist -pacificists -pacified -pacifier -pacifiers -pacifies -pacifism -pacifisms -pacifist -pacifistic -pacifistically -pacifists -pacify -pacifying -pacing -pack -packabilities -packability -packable -package -packaged -packager -packagers -packages -packaging -packboard -packboards -packed -packer -packers -packet -packeted -packeting -packets -packhorse -packhorses -packing -packinghouse -packinghouses -packings -packly -packman -packmen -packness -packnesses -packs -packsack -packsacks -packsaddle -packsaddles -packthread -packthreads -packwax -packwaxes -paclitaxel -paclitaxels -pacs -pact -paction -pactions -pacts -pad -padauk -padauks -padded -padder -padders -paddies -padding -paddings -paddle -paddleball -paddleballs -paddleboard -paddleboards -paddleboat -paddleboats -paddled -paddlefish -paddlefishes -paddler -paddlers -paddles -paddling -paddlings -paddock -paddocked -paddocking -paddocks -paddy -padi -padis -padishah -padishahs -padle -padles -padlock -padlocked -padlocking -padlocks -padnag -padnags -padouk -padouks -padre -padres -padri -padrone -padrones -padroni -pads -padshah -padshahs -paduasoy -paduasoys -paean -paeanism -paeanisms -paeans -paediatric -paediatrician -paediatricians -paediatrics -paedogeneses -paedogenesis -paedogenetic -paedogenetically -paedogenic -paedomorphic -paedomorphism -paedomorphisms -paedomorphoses -paedomorphosis -paella -paellas -paeon -paeons -paesan -paesani -paesano -paesanos -paesans -pagan -pagandom -pagandoms -paganise -paganised -paganises -paganish -paganising -paganism -paganisms -paganist -paganists -paganize -paganized -paganizer -paganizers -paganizes -paganizing -pagans -page -pageant -pageantries -pageantry -pageants -pageboy -pageboys -paged -pager -pagers -pages -paginal -paginate -paginated -paginates -paginating -pagination -paginations -paging -pagings -pagod -pagoda -pagodas -pagods -pagurian -pagurians -pagurid -pagurids -pah -pahlavi -pahlavis -pahoehoe -pahoehoes -paid -paik -paiked -paiking -paiks -pail -pailful -pailfuls -paillard -paillards -paillette -paillettes -pails -pailsful -pain -painch -painches -pained -painful -painfuller -painfullest -painfully -painfulness -painfulnesses -paining -painkiller -painkillers -painkilling -painless -painlessly -painlessness -painlessnesses -pains -painstaking -painstakingly -painstakings -paint -paintbrush -paintbrushes -painted -painter -painterliness -painterlinesses -painterly -painters -paintier -paintiest -painting -paintings -paints -paintwork -paintworks -painty -pair -paired -pairing -pairings -pairs -paisa -paisan -paisana -paisanas -paisano -paisanos -paisans -paisas -paise -paisley -paisleys -pajama -pajamaed -pajamas -pakeha -pakehas -pal -palabra -palabras -palace -palaced -palaces -paladin -paladins -palaestra -palaestrae -palaestras -palais -palanquin -palanquins -palatabilities -palatability -palatable -palatableness -palatablenesses -palatably -palatal -palatalization -palatalizations -palatalize -palatalized -palatalizes -palatalizing -palatally -palatals -palate -palates -palatial -palatially -palatialness -palatialnesses -palatinate -palatinates -palatine -palatines -palaver -palavered -palavering -palavers -palazzi -palazzo -palazzos -pale -palea -paleae -paleal -paled -paleface -palefaces -palely -paleness -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 -paleosol -paleosols -paleozoological -paleozoologies -paleozoologist -paleozoologists -paleozoology -paler -pales -palest -palestra -palestrae -palestras -palet -paletot -paletots -palets -palette -palettes -paleways -palewise -palfrey -palfreys -palier -paliest -palikar -palikars -palimonies -palimony -palimpsest -palimpsests -palindrome -palindromes -palindromic -palindromist -palindromists -paling -palingeneses -palingenesis -palingenetic -palings -palinode -palinodes -palisade -palisaded -palisades -palisading -palish -pall -palladia -palladic -palladium -palladiums -palladous -pallbearer -pallbearers -palled -pallet -palletise -palletised -palletises -palletising -palletization -palletizations -palletize -palletized -palletizer -palletizers -palletizes -palletizing -pallets -pallette -pallettes -pallia -pallial -palliasse -palliasses -palliate -palliated -palliates -palliating -palliation -palliations -palliative -palliatively -palliatives -palliator -palliators -pallid -pallidly -pallidness -pallidnesses -pallier -palliest -palling -pallium -palliums -pallor -pallors -palls -pally -palm -palmar -palmary -palmate -palmated -palmately -palmation -palmations -palmed -palmer -palmers -palmerworm -palmerworms -palmette -palmettes -palmetto -palmettoes -palmettos -palmier -palmiest -palming -palmist -palmistries -palmistry -palmists -palmitate -palmitates -palmitin -palmitins -palmlike -palms -palmy -palmyra -palmyras -palomino -palominos -palooka -palookas -paloverde -paloverdes -palp -palpabilities -palpability -palpable -palpably -palpal -palpate -palpated -palpates -palpating -palpation -palpations -palpator -palpators -palpebra -palpebrae -palpebral -palpebras -palpi -palpitant -palpitate -palpitated -palpitates -palpitating -palpitation -palpitations -palps -palpus -pals -palsgrave -palsgraves -palship -palships -palsied -palsies -palsy -palsying -palter -paltered -palterer -palterers -paltering -palters -paltrier -paltriest -paltrily -paltriness -paltrinesses -paltry -paludal -paludism -paludisms -paly -palynologic -palynological -palynologically -palynologies -palynologist -palynologists -palynology -pam -pampa -pampas -pampean -pampeans -pamper -pampered -pamperer -pamperers -pampering -pampero -pamperos -pampers -pamphlet -pamphleteer -pamphleteered -pamphleteering -pamphleteers -pamphlets -pams -pan -panacea -panacean -panaceas -panache -panaches -panada -panadas -panama -panamas -panatela -panatelas -panbroil -panbroiled -panbroiling -panbroils -pancake -pancaked -pancakes -pancaking -pancetta -pancettas -panchax -panchaxes -panchromatic -pancratia -pancratium -pancratiums -pancreas -pancreases -pancreatectomies -pancreatectomized -pancreatectomy -pancreatic -pancreatin -pancreatins -pancreatitides -pancreatitis -pancreozymin -pancreozymins -pancytopenia -pancytopenias -panda -pandani -pandanus -pandanuses -pandas -pandect -pandects -pandemic -pandemics -pandemonium -pandemoniums -pander -pandered -panderer -panderers -pandering -panders -pandied -pandies -pandit -pandits -pandoor -pandoors -pandora -pandoras -pandore -pandores -pandour -pandours -pandowdies -pandowdy -pandura -panduras -pandy -pandying -pane -paned -panegyric -panegyrical -panegyrically -panegyrics -panegyrist -panegyrists -panel -paneled -paneling -panelings -panelist -panelists -panelled -panelling -panellings -panels -panes -panetela -panetelas -panettone -panettones -panettoni -panfish -panfishes -panfried -panfries -panfry -panfrying -panful -panfuls -pang -panga -pangas -panged -pangen -pangene -pangenes -pangeneses -pangenesis -pangenetic -pangens -panging -pangolin -pangolins -pangram -pangrams -pangs -panhandle -panhandled -panhandler -panhandlers -panhandles -panhandling -panhuman -panic -panicked -panickier -panickiest -panicking -panicky -panicle -panicled -panicles -panics -paniculate -panicum -panicums -panier -paniers -panjandra -panjandrum -panjandrums -panleukopenia -panleukopenias -panmictic -panmixes -panmixia -panmixias -panmixis -panne -panned -pannes -pannier -panniers -pannikin -pannikins -panning -panocha -panochas -panoche -panoches -panoplied -panoplies -panoply -panoptic -panorama -panoramas -panoramic -panoramically -panpipe -panpipes -pans -pansexual -pansexualities -pansexuality -pansies -pansophies -pansophy -pansy -pant -pantalets -pantalettes -pantalone -pantalones -pantaloon -pantaloons -pantdress -pantdresses -pantechnicon -pantechnicons -panted -pantheism -pantheisms -pantheist -pantheistic -pantheistical -pantheistically -pantheists -pantheon -pantheons -panther -panthers -pantie -panties -pantile -pantiled -pantiles -panting -pantisocracies -pantisocracy -pantisocratic -pantisocratical -pantisocratist -pantisocratists -panto -pantofle -pantofles -pantograph -pantographic -pantographs -pantomime -pantomimed -pantomimes -pantomimic -pantomiming -pantomimist -pantomimists -pantos -pantothenate -pantothenates -pantoum -pantoums -pantries -pantropic -pantropical -pantry -pantryman -pantrymen -pants -pantsuit -pantsuited -pantsuits -panty -pantyhose -pantywaist -pantywaists -panzer -panzers -pap -papa -papacies -papacy -papain -papains -papal -papally -paparazzi -paparazzo -papas -papaverine -papaverines -papaw -papaws -papaya -papayan -papayas -paper -paperback -paperbacked -paperbacks -paperboard -paperboards -paperbound -paperbounds -paperboy -paperboys -papered -paperer -paperers -papergirl -papergirls -paperhanger -paperhangers -paperhanging -paperhangings -paperiness -paperinesses -papering -paperless -papermaker -papermakers -papermaking -papermakings -papers -paperweight -paperweights -paperwork -paperworks -papery -papeterie -papeteries -paphian -paphians -papilionaceous -papilla -papillae -papillar -papillary -papillate -papilloma -papillomas -papillomata -papillomatous -papillomavirus -papillomaviruses -papillon -papillons -papillose -papillote -papillotes -papist -papistic -papistries -papistry -papists -papoose -papooses -papovavirus -papovaviruses -pappi -pappier -pappies -pappiest -pappoose -pappooses -pappose -pappous -pappus -pappy -paprica -papricas -paprika -paprikas -paps -papula -papulae -papular -papule -papules -papulose -papyral -papyri -papyrian -papyrine -papyrologies -papyrologist -papyrologists -papyrology -papyrus -papyruses -par -para -parabioses -parabiosis -parabiotic -parabiotically -parable -parables -parabola -parabolas -parabolic -parabolically -paraboloid -paraboloidal -paraboloids -parachor -parachors -parachute -parachuted -parachutes -parachutic -parachuting -parachutist -parachutists -parade -paraded -parader -paraders -parades -paradichlorobenzene -paradichlorobenzenes -paradiddle -paradiddles -paradigm -paradigmatic -paradigmatically -paradigms -parading -paradisaic -paradisaical -paradisaically -paradisal -paradise -paradises -paradisiac -paradisiacal -paradisiacally -paradisial -paradisical -parador -paradores -paradors -parados -paradoses -paradox -paradoxes -paradoxical -paradoxicalities -paradoxicality -paradoxically -paradoxicalness -paradoxicalnesses -paradrop -paradropped -paradropping -paradrops -parae -paraesthesia -paraesthesias -paraffin -paraffined -paraffinic -paraffining -paraffins -paraform -paraformaldehyde -paraformaldehydes -paraforms -parageneses -paragenesis -paragenetic -paragenetically -paragoge -paragoges -paragon -paragoned -paragoning -paragons -paragraph -paragraphed -paragrapher -paragraphers -paragraphic -paragraphing -paragraphs -parainfluenza -parainfluenzas -parajournalism -parajournalisms -parakeet -parakeets -parakite -parakites -paralanguage -paralanguages -paraldehyde -paraldehydes -paralegal -paralegals -paralinguistic -paralinguistics -parallactic -parallax -parallaxes -parallel -paralleled -parallelepiped -parallelepipeds -paralleling -parallelism -parallelisms -parallelled -parallelling -parallelogram -parallelograms -parallels -paralogism -paralogisms -paralyse -paralysed -paralyses -paralysing -paralysis -paralytic -paralytically -paralytics -paralyzation -paralyzations -paralyze -paralyzed -paralyzer -paralyzers -paralyzes -paralyzing -paralyzingly -paramagnet -paramagnetic -paramagnetically -paramagnetism -paramagnetisms -paramagnets -paramecia -paramecium -parameciums -paramedic -paramedical -paramedicals -paramedics -parament -paramenta -paraments -parameter -parameterization -parameterizations -parameterize -parameterized -parameterizes -parameterizing -parameters -parametric -parametrically -parametrization -parametrizations -parametrize -parametrized -parametrizes -parametrizing -paramilitary -paramnesia -paramnesias -paramo -paramos -paramount -paramountcies -paramountcy -paramountly -paramounts -paramour -paramours -paramylum -paramylums -paramyxovirus -paramyxoviruses -parang -parangs -paranoea -paranoeas -paranoia -paranoiac -paranoiacs -paranoias -paranoic -paranoically -paranoics -paranoid -paranoidal -paranoids -paranormal -paranormalities -paranormality -paranormally -paranormals -paranymph -paranymphs -parapet -parapeted -parapets -paraph -paraphernalia -paraphrasable -paraphrase -paraphrased -paraphraser -paraphrasers -paraphrases -paraphrasing -paraphrastic -paraphrastically -paraphs -paraphyses -paraphysis -paraplegia -paraplegias -paraplegic -paraplegics -parapodia -parapodial -parapodium -paraprofessional -paraprofessionals -parapsychological -parapsychologies -parapsychologist -parapsychologists -parapsychology -paraquat -paraquats -paraquet -paraquets -pararosaniline -pararosanilines -paras -parasailing -parasailings -parasang -parasangs -parasexual -parasexualities -parasexuality -parashah -parashahs -parashioth -parashot -parashoth -parasite -parasites -parasitic -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 -parasol -parasols -parasympathetic -parasympathetics -parasympathomimetic -parasyntheses -parasynthesis -parasynthetic -paratactic -paratactical -paratactically -parataxes -parataxis -parathion -parathions -parathormone -parathormones -parathyroid -parathyroidectomies -parathyroidectomized -parathyroidectomy -parathyroids -paratroop -paratrooper -paratroopers -paratroops -paratyphoid -paratyphoids -paravane -paravanes -parawing -parawings -parazoan -parazoans -parboil -parboiled -parboiling -parboils -parbuckle -parbuckled -parbuckles -parbuckling -parcel -parceled -parceling -parcelled -parcelling -parcels -parcenaries -parcenary -parcener -parceners -parch -parched -parches -parchesi -parchesis -parching -parchisi -parchisis -parchment -parchments -pard -pardah -pardahs -pardee -pardi -pardie -pardine -pardner -pardners -pardon -pardonable -pardonableness -pardonablenesses -pardonably -pardoned -pardoner -pardoners -pardoning -pardons -pards -pardy -pare -parecism -parecisms -pared -paregoric -paregorics -pareira -pareiras -parenchyma -parenchymal -parenchymas -parenchymata -parenchymatous -parent -parentage -parentages -parental -parentally -parented -parenteral -parenterally -parentheses -parenthesis -parenthesize -parenthesized -parenthesizes -parenthesizing -parenthetic -parenthetical -parenthetically -parenthood -parenthoods -parenting -parentings -parentless -parents -pareo -pareos -parer -parerga -parergon -parers -pares -pareses -paresis -paresthesia -paresthesias -paresthetic -paretic -paretics -pareu -pareus -pareve -parfait -parfaits -parfleche -parfleches -parflesh -parfleshes -parfocal -parfocalities -parfocality -parfocalize -parfocalized -parfocalizes -parfocalizing -parge -parged -parges -parget -pargeted -pargeting -pargets -pargetted -pargetting -parging -pargings -pargo -pargos -pargyline -pargylines -parhelia -parhelic -parhelion -pariah -pariahs -parian -parians -paries -parietal -parietals -parietes -parimutuel -paring -parings -paris -parises -parish -parishes -parishioner -parishioners -parities -parity -park -parka -parkas -parked -parker -parkers -parking -parkings -parkinsonian -parkinsonism -parkinsonisms -parkland -parklands -parklike -parks -parkway -parkways -parlance -parlances -parlando -parlante -parlay -parlayed -parlaying -parlays -parle -parled -parles -parley -parleyed -parleyer -parleyers -parleying -parleys -parliament -parliamentarian -parliamentarians -parliamentary -parliaments -parling -parlor -parlors -parlour -parlours -parlous -parlously -parmigiana -parmigiano -parochial -parochialism -parochialisms -parochially -parodic -parodied -parodies -parodist -parodistic -parodists -parodoi -parodos -parody -parodying -parol -parole -paroled -parolee -parolees -paroles -paroling -parols -paronomasia -paronomasias -paronomastic -paronym -paronymous -paronyms -paroquet -paroquets -parotic -parotid -parotids -parotitis -parotitises -parotoid -parotoids -parous -paroxysm -paroxysmal -paroxysms -parquet -parqueted -parqueting -parquetries -parquetry -parquets -parr -parrakeet -parrakeets -parral -parrals -parred -parrel -parrels -parricidal -parricide -parricides -parridge -parridges -parried -parries -parring -parritch -parritches -parroket -parrokets -parrot -parroted -parroter -parroters -parroting -parrots -parroty -parrs -parry -parrying -pars -parsable -parse -parsec -parsecs -parsed -parser -parsers -parses -parsimonies -parsimonious -parsimoniously -parsimony -parsing -parsley -parsleyed -parsleys -parslied -parsnip -parsnips -parson -parsonage -parsonages -parsonic -parsons -part -partake -partaken -partaker -partakers -partakes -partaking -partan -partans -parted -parterre -parterres -parthenocarpic -parthenocarpies -parthenocarpy -parthenogeneses -parthenogenesis -parthenogenetic -parthenogenetically -partial -partialities -partiality -partially -partials -partibilities -partibility -partible -participant -participants -participate -participated -participates -participating -participation -participational -participations -participative -participator -participators -participatory -participial -participially -participle -participles -particle -particleboard -particleboards -particles -particular -particularise -particularised -particularises -particularising -particularism -particularisms -particularist -particularistic -particularists -particularities -particularity -particularization -particularizations -particularize -particularized -particularizes -particularizing -particularly -particulars -particulate -particulates -partied -partier -partiers -parties -parting -partings -partisan -partisanly -partisans -partisanship -partisanships -partita -partitas -partite -partition -partitioned -partitioner -partitioners -partitioning -partitionist -partitionists -partitions -partitive -partitively -partizan -partizans -partlet -partlets -partly -partner -partnered -partnering -partnerless -partners -partnership -partnerships -parton -partons -partook -partridge -partridgeberries -partridgeberry -partridges -parts -parturient -parturients -parturition -parturitions -partway -party -partyer -partyers -partying -parura -paruras -parure -parures -parve -parvenu -parvenue -parvenues -parvenus -parvis -parvise -parvises -parvo -parvolin -parvolins -parvos -parvovirus -parvoviruses -pas -pascal -pascals -paschal -paschals -pase -paseo -paseos -pases -pash -pasha -pashadom -pashadoms -pashalic -pashalics -pashalik -pashaliks -pashas -pashed -pashes -pashing -pasqueflower -pasqueflowers -pasquil -pasquils -pasquinade -pasquinaded -pasquinades -pasquinading -pass -passable -passably -passacaglia -passacaglias -passade -passades -passado -passadoes -passados -passage -passaged -passages -passageway -passageways -passagework -passageworks -passaging -passant -passband -passbands -passbook -passbooks -passe -passed -passee -passel -passels -passementerie -passementeries -passenger -passengers -passer -passerby -passerine -passerines -passers -passersby -passes -passible -passim -passing -passings -passion -passional -passionate -passionately -passionateness -passionatenesses -passionflower -passionflowers -passionless -passions -passivate -passivated -passivates -passivating -passivation -passivations -passive -passively -passiveness -passivenesses -passives -passivism -passivisms -passivist -passivists -passivities -passivity -passkey -passkeys -passless -passover -passovers -passport -passports -passus -passuses -password -passwords -past -pasta -pastas -paste -pasteboard -pasteboards -pasted -pastedown -pastedowns -pastel -pastelist -pastelists -pastellist -pastellists -pastels -paster -pastern -pasterns -pasters -pastes -pasteup -pasteups -pasteurise -pasteurised -pasteurises -pasteurising -pasteurization -pasteurizations -pasteurize -pasteurized -pasteurizer -pasteurizers -pasteurizes -pasteurizing -pasticci -pasticcio -pasticcios -pastiche -pastiches -pasticheur -pasticheurs -pastie -pastier -pasties -pastiest -pastil -pastille -pastilles -pastils -pastime -pastimes -pastina -pastinas -pastiness -pastinesses -pasting -pastis -pastises -pastless -pastness -pastnesses -pastor -pastoral -pastorale -pastorales -pastorali -pastoralism -pastoralisms -pastoralist -pastoralists -pastorally -pastoralness -pastoralnesses -pastorals -pastorate -pastorates -pastored -pastoring -pastors -pastorship -pastorships -pastrami -pastramis -pastries -pastromi -pastromis -pastry -pasts -pasturage -pasturages -pastural -pasture -pastured -pastureland -pasturelands -pasturer -pasturers -pastures -pasturing -pasty -pat -pataca -patacas -patagia -patagial -patagium -patamar -patamars -patch -patchboard -patchboards -patched -patcher -patchers -patches -patchier -patchiest -patchily -patchiness -patchinesses -patching -patchouli -patchoulies -patchoulis -patchouly -patchwork -patchworks -patchy -pate -pated -patella -patellae -patellar -patellas -patelliform -paten -patencies -patency -patens -patent -patentabilities -patentability -patentable -patented -patentee -patentees -patenting -patently -patentor -patentors -patents -pater -paterfamilias -paternal -paternalism -paternalisms -paternalist -paternalistic -paternalistically -paternalists -paternally -paternities -paternity -paternoster -paternosters -paters -pates -path -pathbreaking -pathetic -pathetical -pathetically -pathfinder -pathfinders -pathfinding -pathfindings -pathless -pathlessness -pathlessnesses -pathobiologies -pathobiology -pathogen -pathogeneses -pathogenesis -pathogenetic -pathogenic -pathogenicities -pathogenicity -pathogens -pathognomonic -pathologic -pathological -pathologically -pathologies -pathologist -pathologists -pathology -pathophysiologic -pathophysiological -pathophysiologies -pathophysiology -pathos -pathoses -paths -pathway -pathways -patience -patiences -patient -patienter -patientest -patiently -patients -patin -patina -patinae -patinas -patinate -patinated -patinates -patinating -patination -patinations -patine -patined -patines -patining -patinize -patinized -patinizes -patinizing -patins -patio -patios -patisserie -patisseries -patissier -patissiers -patly -patness -patnesses -patois -patootie -patooties -patresfamilias -patriarch -patriarchal -patriarchate -patriarchates -patriarchies -patriarchs -patriarchy -patrician -patricians -patriciate -patriciates -patricidal -patricide -patricides -patrilineal -patrimonial -patrimonies -patrimony -patriot -patriotic -patriotically -patriotism -patriotisms -patriots -patristic -patristical -patristics -patrol -patrolled -patroller -patrollers -patrolling -patrolman -patrolmen -patrols -patron -patronage -patronages -patronal -patroness -patronesses -patronise -patronised -patronises -patronising -patronization -patronizations -patronize -patronized -patronizes -patronizing -patronizingly -patronly -patrons -patronymic -patronymics -patroon -patroons -pats -patsies -patsy -pattamar -pattamars -patted -pattee -patten -pattens -patter -pattered -patterer -patterers -pattering -pattern -patterned -patterning -patternings -patternless -patterns -patters -pattie -patties -patting -patty -pattypan -pattypans -patulent -patulous -paty -patzer -patzers -paucities -paucity -paughty -pauldron -pauldrons -paulin -paulins -paulownia -paulownias -paunch -paunched -paunches -paunchier -paunchiest -paunchiness -paunchinesses -paunchy -pauper -paupered -paupering -pauperism -pauperisms -pauperize -pauperized -pauperizes -pauperizing -paupers -paupiette -paupiettes -pausal -pause -paused -pauser -pausers -pauses -pausing -pavan -pavane -pavanes -pavans -pave -paved -paveed -pavement -pavements -paver -pavers -paves -pavid -pavilion -pavilioned -pavilioning -pavilions -pavillon -pavillons -pavin -paving -pavings -pavins -pavior -paviors -paviour -paviours -pavis -pavise -paviser -pavisers -pavises -pavlova -pavlovas -pavonine -paw -pawed -pawer -pawers -pawing -pawkier -pawkiest -pawkily -pawky -pawl -pawls -pawn -pawnable -pawnage -pawnages -pawnbroker -pawnbrokers -pawnbroking -pawnbrokings -pawned -pawnee -pawnees -pawner -pawners -pawning -pawnor -pawnors -pawns -pawnshop -pawnshops -pawpaw -pawpaws -paws -pax -paxes -paxwax -paxwaxes -pay -payable -payables -payably -payback -paybacks -paycheck -paychecks -payday -paydays -payed -payee -payees -payer -payers -paygrade -paygrades -paying -payload -payloads -paymaster -paymasters -payment -payments -paynim -paynims -payoff -payoffs -payola -payolas -payor -payors -payout -payouts -payroll -payrolls -pays -paystub -paystubs -pazazz -pazazzes -pe -pea -peace -peaceable -peaceableness -peaceablenesses -peaceably -peaced -peaceful -peacefuller -peacefullest -peacefully -peacefulness -peacefulnesses -peacekeeper -peacekeepers -peacekeeping -peacekeepings -peacemaker -peacemakers -peacemaking -peacemakings -peacenik -peaceniks -peaces -peacetime -peacetimes -peach -peached -peacher -peachers -peaches -peachier -peachiest -peaching -peachy -peacing -peacoat -peacoats -peacock -peacocked -peacockier -peacockiest -peacocking -peacockish -peacocks -peacocky -peafowl -peafowls -peag -peage -peages -peags -peahen -peahens -peak -peaked -peakedness -peakednesses -peakier -peakiest -peaking -peakish -peakless -peaklike -peaks -peaky -peal -pealed -pealike -pealing -peals -pean -peans -peanut -peanuts -pear -pearl -pearlash -pearlashes -pearled -pearler -pearlers -pearlescence -pearlescences -pearlescent -pearlier -pearliest -pearling -pearlite -pearlites -pearlitic -pearlized -pearls -pearly -pearmain -pearmains -pears -peart -pearter -peartest -peartly -peas -peasant -peasantries -peasantry -peasants -peascod -peascods -pease -peasecod -peasecods -peasen -peases -peashooter -peashooters -peat -peatier -peatiest -peats -peaty -peavey -peaveys -peavies -peavy -pebble -pebbled -pebbles -pebblier -pebbliest -pebbling -pebbly -pec -pecan -pecans -peccable -peccadillo -peccadilloes -peccadillos -peccancies -peccancy -peccant -peccantly -peccaries -peccary -peccavi -peccavis -pech -pechan -pechans -peched -peching -pechs -peck -pecked -pecker -peckers -peckerwood -peckerwoods -peckier -peckiest -pecking -peckish -pecks -pecky -pecorini -pecorino -pecorinos -pecs -pectase -pectases -pectate -pectates -pecten -pectens -pectic -pectin -pectinaceous -pectinate -pectination -pectinations -pectines -pectinesterase -pectinesterases -pectins -pectize -pectized -pectizes -pectizing -pectoral -pectorals -peculate -peculated -peculates -peculating -peculation -peculations -peculator -peculators -peculia -peculiar -peculiarities -peculiarity -peculiarly -peculiars -peculium -pecuniarily -pecuniary -ped -pedagog -pedagogic -pedagogical -pedagogically -pedagogics -pedagogies -pedagogs -pedagogue -pedagogues -pedagogy -pedal -pedaled -pedalfer -pedalfers -pedalier -pedaliers -pedaling -pedalled -pedalling -pedalo -pedalos -pedals -pedant -pedantic -pedantically -pedantries -pedantry -pedants -pedate -pedately -peddle -peddled -peddler -peddleries -peddlers -peddlery -peddles -peddling -pederast -pederastic -pederasties -pederasts -pederasty -pedes -pedestal -pedestaled -pedestaling -pedestalled -pedestalling -pedestals -pedestrian -pedestrianism -pedestrianisms -pedestrians -pediatric -pediatrician -pediatricians -pediatrics -pediatrist -pediatrists -pedicab -pedicabs -pedicel -pedicellate -pedicels -pedicle -pedicled -pedicles -pediculate -pediculates -pediculoses -pediculosis -pediculous -pedicure -pedicured -pedicures -pedicuring -pedicurist -pedicurists -pediform -pedigree -pedigreed -pedigrees -pediment -pedimental -pedimented -pediments -pedipalp -pedipalps -pedlar -pedlaries -pedlars -pedlary -pedler -pedleries -pedlers -pedlery -pedocal -pedocalic -pedocals -pedogeneses -pedogenesis -pedogenetic -pedogenic -pedologic -pedological -pedologies -pedologist -pedologists -pedology -pedometer -pedometers -pedophile -pedophiles -pedophilia -pedophiliac -pedophilias -pedophilic -pedro -pedros -peds -peduncle -peduncled -peduncles -peduncular -pedunculate -pedunculated -pee -peebeen -peebeens -peed -peeing -peek -peekaboo -peekaboos -peeked -peeking -peeks -peel -peelable -peeled -peeler -peelers -peeling -peelings -peels -peen -peened -peening -peens -peep -peeped -peeper -peepers -peephole -peepholes -peeping -peeps -peepshow -peepshows -peepul -peepuls -peer -peerage -peerages -peered -peeress -peeresses -peerie -peeries -peering -peerless -peerlessly -peers -peery -pees -peesweep -peesweeps -peetweet -peetweets -peeve -peeved -peeves -peeving -peevish -peevishly -peevishness -peevishnesses -peewee -peewees -peewit -peewits -peg -pegboard -pegboards -pegbox -pegboxes -pegged -pegging -pegless -peglike -pegmatite -pegmatites -pegmatitic -pegs -peh -pehs -peignoir -peignoirs -pein -peined -peining -peins -peise -peised -peises -peising -pejorative -pejoratively -pejoratives -pekan -pekans -peke -pekes -pekin -pekins -pekoe -pekoes -pelage -pelages -pelagial -pelagic -pelargonium -pelargoniums -pele -pelecypod -pelecypods -pelerine -pelerines -peles -pelf -pelfs -pelican -pelicans -pelisse -pelisses -pelite -pelites -pelitic -pellagra -pellagras -pellagrin -pellagrins -pellagrous -pellet -pelletal -pelleted -pelleting -pelletise -pelletised -pelletises -pelletising -pelletization -pelletizations -pelletize -pelletized -pelletizer -pelletizers -pelletizes -pelletizing -pellets -pellicle -pellicles -pellitories -pellitory -pellmell -pellmells -pellucid -pellucidly -pelmet -pelmets -pelon -peloria -pelorian -pelorias -peloric -pelorus -peloruses -pelota -pelotas -pelt -peltast -peltasts -peltate -pelted -pelter -peltered -peltering -pelters -pelting -peltries -peltry -pelts -pelves -pelvic -pelvics -pelvis -pelvises -pelycosaur -pelycosaurs -pembina -pembinas -pemican -pemicans -pemmican -pemmicans -pemoline -pemolines -pemphigus -pemphiguses -pemphix -pemphixes -pen -penal -penalise -penalised -penalises -penalising -penalities -penality -penalization -penalizations -penalize -penalized -penalizes -penalizing -penally -penalties -penalty -penance -penanced -penances -penancing -penang -penangs -penates -pence -pencel -pencels -penchant -penchants -pencil -penciled -penciler -pencilers -penciling -pencilings -pencilled -pencilling -pencillings -pencils -pend -pendant -pendants -pended -pendencies -pendency -pendent -pendentive -pendentives -pendents -pending -pends -pendular -pendulous -pendulousness -pendulousnesses -pendulum -pendulums -peneplain -peneplains -peneplane -peneplanes -penes -penetrabilities -penetrability -penetrable -penetralia -penetrance -penetrances -penetrant -penetrants -penetrate -penetrated -penetrates -penetrating -penetratingly -penetration -penetrations -penetrative -penetrometer -penetrometers -pengo -pengos -penguin -penguins -penholder -penholders -penial -penicil -penicillamine -penicillamines -penicillate -penicillia -penicillin -penicillinase -penicillinases -penicillins -penicillium -penicilliums -penicils -penile -peninsula -peninsular -peninsulas -penis -penises -penitence -penitences -penitent -penitential -penitentially -penitentiaries -penitentiary -penitently -penitents -penknife -penknives -penlight -penlights -penlite -penlites -penman -penmanship -penmanships -penmen -penna -pennae -penname -pennames -pennant -pennants -pennate -pennated -penne -penned -penner -penners -penni -pennia -pennies -penniless -pennine -pennines -penning -pennis -pennon -pennoncel -pennoncels -pennoned -pennons -penny -pennycress -pennycresses -pennyroyal -pennyroyals -pennyweight -pennyweights -pennywhistle -pennywhistles -pennywort -pennyworth -pennyworths -pennyworts -penoche -penoches -penological -penologies -penologist -penologists -penology -penoncel -penoncels -penpoint -penpoints -pens -pensee -pensees -pensil -pensile -pensils -pension -pensionable -pensionaries -pensionary -pensione -pensioned -pensioner -pensioners -pensiones -pensioning -pensionless -pensions -pensive -pensively -pensiveness -pensivenesses -penstemon -penstemons -penster -pensters -penstock -penstocks -pent -pentachlorophenol -pentachlorophenols -pentacle -pentacles -pentad -pentads -pentagon -pentagonal -pentagonally -pentagonals -pentagons -pentagram -pentagrams -pentahedra -pentahedral -pentahedron -pentahedrons -pentamerous -pentameter -pentameters -pentamidine -pentamidines -pentane -pentanes -pentangle -pentangles -pentanol -pentanols -pentapeptide -pentapeptides -pentaploid -pentaploidies -pentaploids -pentaploidy -pentarch -pentarchies -pentarchs -pentarchy -pentathlete -pentathletes -pentathlon -pentathlons -pentatonic -pentavalent -pentazocine -pentazocines -pentene -pentenes -penthouse -penthouses -pentlandite -pentlandites -pentobarbital -pentobarbitals -pentobarbitone -pentobarbitones -pentode -pentodes -pentomic -pentosan -pentosans -pentose -pentoses -pentoxide -pentoxides -pentstemon -pentstemons -pentyl -pentylenetetrazol -pentylenetetrazols -pentyls -penuche -penuches -penuchi -penuchis -penuchle -penuchles -penuckle -penuckles -penult -penultima -penultimas -penultimate -penultimately -penults -penumbra -penumbrae -penumbral -penumbras -penuries -penurious -penuriously -penuriousness -penuriousnesses -penury -peon -peonage -peonages -peones -peonies -peonism -peonisms -peons -peony -people -peopled -peoplehood -peoplehoods -peopleless -peopler -peoplers -peoples -peopling -pep -peperomia -peperomias -peperoni -peperonis -pepla -peplos -peploses -peplum -peplumed -peplums -peplus -pepluses -pepo -peponida -peponidas -peponium -peponiums -pepos -pepped -pepper -pepperbox -pepperboxes -peppercorn -peppercorns -peppered -pepperer -pepperers -peppergrass -peppergrasses -pepperiness -pepperinesses -peppering -peppermint -peppermints -pepperminty -pepperoni -pepperonis -peppers -peppertree -peppertrees -peppery -peppier -peppiest -peppily -peppiness -peppinesses -pepping -peppy -peps -pepsin -pepsine -pepsines -pepsinogen -pepsinogens -pepsins -peptic -peptics -peptid -peptidase -peptidases -peptide -peptides -peptidic -peptidoglycan -peptidoglycans -peptids -peptize -peptized -peptizer -peptizers -peptizes -peptizing -peptone -peptones -peptonic -per -peracid -peracids -peradventure -peradventures -perambulate -perambulated -perambulates -perambulating -perambulation -perambulations -perambulator -perambulators -perambulatory -perborate -perborates -percale -percales -percaline -percalines -perceivable -perceivably -perceive -perceived -perceiver -perceivers -perceives -perceiving -percent -percentage -percentages -percentile -percentiles -percents -percept -perceptibilities -perceptibility -perceptible -perceptibly -perception -perceptional -perceptions -perceptive -perceptively -perceptiveness -perceptivenesses -perceptivities -perceptivity -percepts -perceptual -perceptually -perch -perchance -perched -percher -perchers -perches -perching -perchlorate -perchlorates -perchloroethylene -perchloroethylenes -percipience -percipiences -percipient -percipiently -percipients -percoid -percoids -percolate -percolated -percolates -percolating -percolation -percolations -percolator -percolators -percuss -percussed -percusses -percussing -percussion -percussionist -percussionists -percussions -percussive -percussively -percussiveness -percussivenesses -percutaneous -percutaneously -perdie -perdition -perditions -perdu -perdue -perdues -perdurabilities -perdurability -perdurable -perdurably -perdure -perdured -perdures -perduring -perdus -perdy -perea -peregrin -peregrinate -peregrinated -peregrinates -peregrinating -peregrination -peregrinations -peregrine -peregrines -peregrins -pereia -pereion -pereiopod -pereiopods -peremptorily -peremptoriness -peremptorinesses -peremptory -perennate -perennated -perennates -perennating -perennation -perennations -perennial -perennially -perennials -pereon -pereopod -pereopods -perestroika -perestroikas -perfect -perfecta -perfectas -perfected -perfecter -perfecters -perfectest -perfectibilities -perfectibility -perfectible -perfecting -perfection -perfectionism -perfectionisms -perfectionist -perfectionistic -perfectionists -perfections -perfective -perfectively -perfectiveness -perfectivenesses -perfectives -perfectivities -perfectivity -perfectly -perfectness -perfectnesses -perfecto -perfectos -perfects -perfervid -perfidies -perfidious -perfidiously -perfidiousness -perfidiousnesses -perfidy -perfoliate -perforate -perforated -perforates -perforating -perforation -perforations -perforator -perforators -perforce -perform -performabilities -performability -performable -performance -performances -performative -performatives -performatory -performed -performer -performers -performing -performs -perfume -perfumed -perfumer -perfumeries -perfumers -perfumery -perfumes -perfuming -perfunctorily -perfunctoriness -perfunctorinesses -perfunctory -perfusate -perfusates -perfuse -perfused -perfuses -perfusing -perfusion -perfusionist -perfusionists -perfusions -pergola -pergolas -perhaps -perhapses -peri -perianth -perianths -periapt -periapts -periblem -periblems -pericardia -pericardial -pericarditides -pericarditis -pericardium -pericarp -pericarps -perichondral -perichondria -perichondrium -pericopae -pericope -pericopes -pericrania -pericranial -pericranium -pericycle -pericycles -pericyclic -periderm -periderms -peridia -peridial -peridium -peridot -peridotic -peridotite -peridotites -peridotitic -peridots -perigeal -perigean -perigee -perigees -perigon -perigons -perigynies -perigynous -perigyny -perihelia -perihelial -perihelion -perikarya -perikaryal -perikaryon -peril -periled -periling -perilla -perillas -perilled -perilling -perilous -perilously -perilousness -perilousnesses -perils -perilune -perilunes -perilymph -perilymphs -perimeter -perimeters -perimysia -perimysium -perinatal -perinatally -perinea -perineal -perineum -perineuria -perineurium -period -periodic -periodical -periodically -periodicals -periodicities -periodicity -periodid -periodids -periodization -periodizations -periodontal -periodontally -periodontics -periodontist -periodontists -periodontologies -periodontology -periods -perionychia -perionychium -periostea -periosteal -periosteum -periostitis -periostitises -periotic -peripatetic -peripatetically -peripatetics -peripatus -peripatuses -peripeteia -peripeteias -peripeties -peripety -peripheral -peripherally -peripherals -peripheries -periphery -periphrases -periphrasis -periphrastic -periphrastically -periphytic -periphyton -periphytons -periplast -periplasts -peripter -peripters -perique -periques -peris -perisarc -perisarcs -periscope -periscopes -periscopic -perish -perishabilities -perishability -perishable -perishables -perished -perishes -perishing -perissodactyl -perissodactyls -peristalses -peristalsis -peristaltic -peristome -peristomes -peristomial -peristyle -peristyles -perithecia -perithecial -perithecium -peritonea -peritoneal -peritoneally -peritoneum -peritoneums -peritonitis -peritonitises -peritrichous -peritrichously -periwig -periwigged -periwigs -periwinkle -periwinkles -perjure -perjured -perjurer -perjurers -perjures -perjuries -perjuring -perjurious -perjuriously -perjury -perk -perked -perkier -perkiest -perkily -perkiness -perkinesses -perking -perkish -perks -perky -perlite -perlites -perlitic -perm -permafrost -permafrosts -permanence -permanences -permanencies -permanency -permanent -permanently -permanentness -permanentnesses -permanents -permanganate -permanganates -permeabilities -permeability -permeable -permeant -permease -permeases -permeate -permeated -permeates -permeating -permeation -permeations -permeative -permed -permethrin -permethrins -permillage -permillages -perming -permissibilities -permissibility -permissible -permissibleness -permissiblenesses -permissibly -permission -permissions -permissive -permissively -permissiveness -permissivenesses -permit -permits -permitted -permittee -permittees -permitter -permitters -permitting -permittivities -permittivity -perms -permutable -permutation -permutational -permutations -permute -permuted -permutes -permuting -pernicious -perniciously -perniciousness -perniciousnesses -pernickety -peroneal -peroral -perorally -perorate -perorated -perorates -perorating -peroration -perorational -perorations -perovskite -perovskites -peroxid -peroxidase -peroxidases -peroxide -peroxided -peroxides -peroxidic -peroxiding -peroxids -peroxisomal -peroxisome -peroxisomes -peroxy -perp -perpend -perpended -perpendicular -perpendicularities -perpendicularity -perpendicularly -perpendiculars -perpending -perpends -perpent -perpents -perpetrate -perpetrated -perpetrates -perpetrating -perpetration -perpetrations -perpetrator -perpetrators -perpetual -perpetually -perpetuate -perpetuated -perpetuates -perpetuating -perpetuation -perpetuations -perpetuator -perpetuators -perpetuities -perpetuity -perphenazine -perphenazines -perplex -perplexed -perplexedly -perplexes -perplexing -perplexities -perplexity -perps -perquisite -perquisites -perries -perron -perrons -perry -persalt -persalts -perse -persecute -persecuted -persecutee -persecutees -persecutes -persecuting -persecution -persecutions -persecutive -persecutor -persecutors -persecutory -perses -perseverance -perseverances -perseverate -perseverated -perseverates -perseverating -perseveration -perseverations -persevere -persevered -perseveres -persevering -perseveringly -persiflage -persiflages -persimmon -persimmons -persist -persisted -persistence -persistences -persistencies -persistency -persistent -persistently -persister -persisters -persisting -persists -persnicketiness -persnicketinesses -persnickety -person -persona -personable -personableness -personablenesses -personae -personage -personages -personal -personalise -personalised -personalises -personalising -personalism -personalisms -personalist -personalistic -personalists -personalities -personality -personalization -personalizations -personalize -personalized -personalizes -personalizing -personally -personals -personalties -personalty -personas -personate -personated -personates -personating -personation -personations -personative -personator -personators -personhood -personhoods -personification -personifications -personified -personifier -personifiers -personifies -personify -personifying -personnel -personnels -persons -perspectival -perspective -perspectively -perspectives -perspicacious -perspicaciously -perspicaciousness -perspicaciousnesses -perspicacities -perspicacity -perspicuities -perspicuity -perspicuous -perspicuously -perspicuousness -perspicuousnesses -perspiration -perspirations -perspiratory -perspire -perspired -perspires -perspiring -perspiry -persuadable -persuade -persuaded -persuader -persuaders -persuades -persuading -persuasible -persuasion -persuasions -persuasive -persuasively -persuasiveness -persuasivenesses -pert -pertain -pertained -pertaining -pertains -perter -pertest -pertinacious -pertinaciously -pertinaciousness -pertinaciousnesses -pertinacities -pertinacity -pertinence -pertinences -pertinencies -pertinency -pertinent -pertinently -pertly -pertness -pertnesses -perturb -perturbable -perturbation -perturbational -perturbations -perturbed -perturbing -perturbs -pertussis -pertussises -peruke -peruked -perukes -perusal -perusals -peruse -perused -peruser -perusers -peruses -perusing -pervade -pervaded -pervader -pervaders -pervades -pervading -pervasion -pervasions -pervasive -pervasively -pervasiveness -pervasivenesses -perverse -perversely -perverseness -perversenesses -perversion -perversions -perversities -perversity -perversive -pervert -perverted -pervertedly -pervertedness -pervertednesses -perverter -perverters -perverting -perverts -pervious -perviousness -perviousnesses -pes -pesade -pesades -peseta -pesetas -pesewa -pesewas -peskier -peskiest -peskily -pesky -peso -pesos -pessaries -pessary -pessimism -pessimisms -pessimist -pessimistic -pessimistically -pessimists -pest -pester -pestered -pesterer -pesterers -pestering -pesters -pesthole -pestholes -pesthouse -pesthouses -pesticide -pesticides -pestier -pestiest -pestiferous -pestiferously -pestiferousness -pestiferousnesses -pestilence -pestilences -pestilent -pestilential -pestilentially -pestilently -pestle -pestled -pestles -pestling -pesto -pestos -pests -pesty -pet -petal -petaled -petaline -petalled -petallike -petalodies -petalody -petaloid -petalous -petals -petard -petards -petasos -petasoses -petasus -petasuses -petcock -petcocks -petechia -petechiae -petechial -peter -petered -petering -peters -petiolar -petiolate -petiole -petioled -petioles -petiolule -petiolules -petit -petite -petiteness -petitenesses -petites -petition -petitionary -petitioned -petitioner -petitioners -petitioning -petitions -petnap -petnapped -petnapping -petnaps -petrale -petrales -petrel -petrels -petrifaction -petrifactions -petrification -petrifications -petrified -petrifies -petrify -petrifying -petrochemical -petrochemicals -petrochemistries -petrochemistry -petrodollar -petrodollars -petrogeneses -petrogenesis -petrogenetic -petroglyph -petroglyphs -petrographer -petrographers -petrographic -petrographical -petrographically -petrographies -petrography -petrol -petrolatum -petrolatums -petroleum -petroleums -petrolic -petrologic -petrological -petrologically -petrologies -petrologist -petrologists -petrology -petrols -petronel -petronels -petrosal -petrous -pets -petsai -petsais -petted -pettedly -petter -petters -petti -petticoat -petticoated -petticoats -pettier -pettiest -pettifog -pettifogged -pettifogger -pettifoggeries -pettifoggers -pettifoggery -pettifogging -pettifoggings -pettifogs -pettily -pettiness -pettinesses -petting -pettings -pettish -pettishly -pettishness -pettishnesses -pettitoes -pettle -pettled -pettles -pettling -petto -petty -petulance -petulances -petulancies -petulancy -petulant -petulantly -petunia -petunias -petuntse -petuntses -petuntze -petuntzes -pew -pewee -pewees -pewholder -pewholders -pewit -pewits -pews -pewter -pewterer -pewterers -pewters -peyote -peyotes -peyotl -peyotls -peytral -peytrals -peytrel -peytrels -pfennig -pfennige -pfennigs -pfft -pfui -phaeton -phaetons -phage -phages -phagocyte -phagocytes -phagocytic -phagocytize -phagocytized -phagocytizes -phagocytizing -phagocytose -phagocytosed -phagocytoses -phagocytosing -phagocytosis -phagocytotic -phalange -phalangeal -phalanger -phalangers -phalanges -phalansteries -phalanstery -phalanx -phalanxes -phalarope -phalaropes -phalli -phallic -phallically -phallicism -phallicisms -phallism -phallisms -phallist -phallists -phallocentric -phallus -phalluses -phanerogam -phanerogams -phanerophyte -phanerophytes -phantasied -phantasies -phantasm -phantasma -phantasmagoria -phantasmagorias -phantasmagoric -phantasmagorical -phantasmal -phantasmata -phantasmic -phantasms -phantast -phantasts -phantasy -phantasying -phantom -phantomlike -phantoms -pharaoh -pharaohs -pharaonic -pharisaic -pharisaical -pharisaically -pharisaicalness -pharisaicalnesses -pharisaism -pharisaisms -pharisee -pharisees -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 -pharmacy -pharos -pharoses -pharyngeal -pharynges -pharyngitides -pharyngitis -pharynx -pharynxes -phase -phaseal -phased -phasedown -phasedowns -phaseout -phaseouts -phases -phasic -phasing -phasis -phasmid -phasmids -phat -phatic -phatically -pheasant -pheasants -phellem -phellems -phelloderm -phelloderms -phellogen -phellogens -phelonia -phelonion -phelonions -phenacaine -phenacaines -phenacetin -phenacetins -phenacite -phenacites -phenakite -phenakites -phenanthrene -phenanthrenes -phenate -phenates -phenazin -phenazine -phenazines -phenazins -phencyclidine -phencyclidines -phenetic -pheneticist -pheneticists -phenetics -phenetol -phenetols -phenix -phenixes -phenmetrazine -phenmetrazines -phenobarbital -phenobarbitals -phenobarbitone -phenobarbitones -phenocopies -phenocopy -phenocryst -phenocrystic -phenocrysts -phenol -phenolate -phenolated -phenolates -phenolic -phenolics -phenological -phenologically -phenologies -phenology -phenolphthalein -phenolphthaleins -phenols -phenom -phenomena -phenomenal -phenomenalism -phenomenalisms -phenomenalist -phenomenalistic -phenomenalistically -phenomenalists -phenomenally -phenomenas -phenomenological -phenomenologically -phenomenologies -phenomenologist -phenomenologists -phenomenology -phenomenon -phenomenons -phenoms -phenothiazine -phenothiazines -phenotype -phenotypes -phenotypic -phenotypical -phenotypically -phenoxide -phenoxides -phenoxy -phentolamine -phentolamines -phenyl -phenylalanine -phenylalanines -phenylbutazone -phenylbutazones -phenylephrine -phenylephrines -phenylethylamine -phenylethylamines -phenylic -phenylketonuria -phenylketonurias -phenylketonuric -phenylketonurics -phenylpropanolamine -phenylpropanolamines -phenyls -phenylthiocarbamide -phenylthiocarbamides -phenylthiourea -phenylthioureas -phenytoin -phenytoins -pheochromocytoma -pheochromocytomas -pheochromocytomata -pheromonal -pheromone -pheromones -phew -phi -phial -phials -philabeg -philabegs -philadelphus -philadelphuses -philander -philandered -philanderer -philanderers -philandering -philanders -philanthropic -philanthropical -philanthropically -philanthropies -philanthropist -philanthropists -philanthropoid -philanthropoids -philanthropy -philatelic -philatelically -philatelies -philatelist -philatelists -philately -philharmonic -philharmonics -philhellene -philhellenes -philhellenic -philhellenism -philhellenisms -philhellenist -philhellenists -philibeg -philibegs -philippic -philippics -philistia -philistine -philistines -philistinism -philistinisms -phillumenist -phillumenists -philodendra -philodendron -philodendrons -philological -philologically -philologies -philologist -philologists -philology -philomel -philomels -philoprogenitive -philoprogenitiveness -philoprogenitivenesses -philosophe -philosopher -philosophers -philosophes -philosophic -philosophical -philosophically -philosophies -philosophise -philosophised -philosophises -philosophising -philosophize -philosophized -philosophizer -philosophizers -philosophizes -philosophizing -philosophy -philter -philtered -philtering -philters -philtra -philtre -philtred -philtres -philtring -philtrum -phimoses -phimosis -phimotic -phis -phiz -phizes -phlebitides -phlebitis -phlebogram -phlebograms -phlebographic -phlebographies -phlebography -phlebologies -phlebology -phlebotomies -phlebotomist -phlebotomists -phlebotomy -phlegm -phlegmatic -phlegmatically -phlegmier -phlegmiest -phlegms -phlegmy -phloem -phloems -phlogistic -phlogiston -phlogistons -phlogopite -phlogopites -phlox -phloxes -phobia -phobias -phobic -phobics -phocine -phoebe -phoebes -phoebus -phoebuses -phoenix -phoenixes -phoenixlike -phon -phonal -phonate -phonated -phonates -phonating -phonation -phonations -phone -phoned -phonematic -phoneme -phonemes -phonemic -phonemically -phonemicist -phonemicists -phonemics -phones -phonetic -phonetically -phonetician -phoneticians -phonetics -phoney -phoneyed -phoneying -phoneys -phonic -phonically -phonics -phonied -phonier -phonies -phoniest -phonily -phoniness -phoninesses -phoning -phono -phonocardiogram -phonocardiograms -phonocardiograph -phonocardiographic -phonocardiographies -phonocardiographs -phonocardiography -phonogram -phonogramic -phonogramically -phonogrammic -phonogrammically -phonograms -phonograph -phonographer -phonographers -phonographic -phonographically -phonographies -phonographs -phonography -phonolite -phonolites -phonologic -phonological -phonologically -phonologies -phonologist -phonologists -phonology -phonon -phonons -phonos -phonotactic -phonotactics -phons -phony -phonying -phooey -phorate -phorates -phoronid -phoronids -phosgene -phosgenes -phosphatase -phosphatases -phosphate -phosphates -phosphatic -phosphatide -phosphatides -phosphatidic -phosphatidyl -phosphatidylcholine -phosphatidylcholines -phosphatidylethanolamine -phosphatidylethanolamines -phosphatidyls -phosphatization -phosphatizations -phosphatize -phosphatized -phosphatizes -phosphatizing -phosphaturia -phosphaturias -phosphene -phosphenes -phosphid -phosphide -phosphides -phosphids -phosphin -phosphine -phosphines -phosphins -phosphite -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 -phosphor -phosphore -phosphores -phosphoresce -phosphoresced -phosphorescence -phosphorescences -phosphorescent -phosphorescently -phosphoresces -phosphorescing -phosphoric -phosphorite -phosphorites -phosphoritic -phosphorolyses -phosphorolysis -phosphorolytic -phosphorous -phosphors -phosphorus -phosphoruses -phosphoryl -phosphorylase -phosphorylases -phosphorylate -phosphorylated -phosphorylates -phosphorylating -phosphorylation -phosphorylations -phosphorylative -phosphoryls -phot -photic -photically -photics -photo -photoautotroph -photoautotrophic -photoautotrophically -photoautotrophs -photobiologic -photobiological -photobiologies -photobiologist -photobiologists -photobiology -photocathode -photocathodes -photocell -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 -photocopy -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 -photoed -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 -photog -photogenic -photogenically -photogeologic -photogeological -photogeologies -photogeologist -photogeologists -photogeology -photogram -photogrammetric -photogrammetries -photogrammetrist -photogrammetrists -photogrammetry -photograms -photograph -photographed -photographer -photographers -photographic -photographically -photographies -photographing -photographs -photography -photogravure -photogravures -photogs -photoinduced -photoinduction -photoinductions -photoinductive -photoing -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 -photolyze -photolyzed -photolyzes -photolyzing -photomap -photomapped -photomapping -photomaps -photomask -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 -photon -photonegative -photonic -photonics -photons -photonuclear -photooxidation -photooxidations -photooxidative -photooxidize -photooxidized -photooxidizes -photooxidizing -photoperiod -photoperiodic -photoperiodically -photoperiodism -photoperiodisms -photoperiods -photophase -photophases -photophobia -photophobias -photophobic -photophore -photophores -photophosphorylation -photophosphorylations -photopia -photopias -photopic -photoplay -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 -photos -photosensitive -photosensitivities -photosensitivity -photosensitization -photosensitizations -photosensitize -photosensitized -photosensitizer -photosensitizers -photosensitizes -photosensitizing -photoset -photosets -photosetter -photosetters -photosetting -photosphere -photospheres -photospheric -photostat -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 -phototube -phototubes -phototypesetter -phototypesetters -phototypesetting -phototypesettings -photovoltaic -photovoltaics -phots -phpht -phragmoplast -phragmoplasts -phrasal -phrasally -phrase -phrased -phrasemaker -phrasemakers -phrasemaking -phrasemakings -phrasemonger -phrasemongering -phrasemongerings -phrasemongers -phraseological -phraseologies -phraseologist -phraseologists -phraseology -phrases -phrasing -phrasings -phratral -phratric -phratries -phratry -phreatic -phreatophyte -phreatophytes -phreatophytic -phrenetic -phrenic -phrenological -phrenologies -phrenologist -phrenologists -phrenology -phrensied -phrensies -phrensy -phrensying -pht -phthalic -phthalin -phthalins -phthalocyanine -phthalocyanines -phthises -phthisic -phthisical -phthisics -phthisis -phut -phuts -phycocyanin -phycocyanins -phycoerythrin -phycoerythrins -phycological -phycologies -phycologist -phycologists -phycology -phycomycete -phycomycetes -phycomycetous -phyla -phylacteries -phylactery -phylae -phylar -phylaxis -phylaxises -phyle -phyleses -phylesis -phylesises -phyletic -phyletically -phylic -phyllaries -phyllary -phyllite -phyllites -phyllo -phylloclade -phylloclades -phyllode -phyllodes -phyllodia -phyllodium -phylloid -phylloids -phyllome -phyllomes -phyllos -phyllotactic -phyllotaxes -phyllotaxies -phyllotaxis -phyllotaxy -phylloxera -phylloxerae -phylloxeras -phylogenetic -phylogenetically -phylogenies -phylogeny -phylon -phylum -physed -physeds -physes -physiatrist -physiatrists -physic -physical -physicalism -physicalisms -physicalist -physicalistic -physicalists -physicalities -physicality -physically -physicalness -physicalnesses -physicals -physician -physicians -physicist -physicists -physicked -physicking -physicochemical -physicochemically -physics -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 -physique -physiques -physis -physostigmine -physostigmines -phytane -phytanes -phytoalexin -phytoalexins -phytochemical -phytochemically -phytochemist -phytochemistries -phytochemistry -phytochemists -phytochrome -phytochromes -phytoflagellate -phytoflagellates -phytogeographer -phytogeographers -phytogeographic -phytogeographical -phytogeographically -phytogeographies -phytogeography -phytohemagglutinin -phytohemagglutinins -phytohormone -phytohormones -phytoid -phytol -phytols -phyton -phytonic -phytons -phytopathogen -phytopathogenic -phytopathogens -phytopathological -phytopathologies -phytopathology -phytophagous -phytoplankter -phytoplankters -phytoplankton -phytoplanktonic -phytoplanktons -phytosociological -phytosociologies -phytosociology -phytosterol -phytosterols -phytotoxic -phytotoxicities -phytotoxicity -pi -pia -piacular -piaffe -piaffed -piaffer -piaffers -piaffes -piaffing -pial -pian -pianic -pianism -pianisms -pianissimi -pianissimo -pianissimos -pianist -pianistic -pianistically -pianists -piano -pianoforte -pianofortes -pianos -pians -pias -piasaba -piasabas -piasava -piasavas -piassaba -piassabas -piassava -piassavas -piaster -piasters -piastre -piastres -piazza -piazzas -piazze -pibal -pibals -pibroch -pibrochs -pic -pica -picacho -picachos -picador -picadores -picadors -pical -picaninnies -picaninny -picante -picara -picaras -picaresque -picaresques -picaro -picaroon -picarooned -picarooning -picaroons -picaros -picas -picayune -picayunes -picayunish -piccalilli -piccalillis -piccolo -piccoloist -piccoloists -piccolos -pice -piceous -piciform -pick -pickaback -pickabacked -pickabacking -pickabacks -pickadil -pickadils -pickaninnies -pickaninny -pickaroon -pickaroons -pickax -pickaxe -pickaxed -pickaxes -pickaxing -picked -pickeer -pickeered -pickeering -pickeers -picker -pickerel -pickerels -pickerelweed -pickerelweeds -pickers -picket -picketboat -picketboats -picketed -picketer -picketers -picketing -pickets -pickier -pickiest -picking -pickings -pickle -pickled -pickles -pickling -picklock -picklocks -pickoff -pickoffs -pickpocket -pickpockets -pickproof -picks -pickthank -pickthanks -pickup -pickups -pickwick -pickwicks -picky -picloram -piclorams -picnic -picnicked -picnicker -picnickers -picnicking -picnicky -picnics -picofarad -picofarads -picogram -picograms -picolin -picoline -picolines -picolins -picomole -picomoles -picornavirus -picornaviruses -picosecond -picoseconds -picot -picoted -picotee -picotees -picoting -picots -picquet -picquets -picrate -picrated -picrates -picric -picrite -picrites -picritic -picrotoxin -picrotoxins -pics -pictogram -pictograms -pictograph -pictographic -pictographies -pictographs -pictography -pictorial -pictorialism -pictorialisms -pictorialist -pictorialists -pictorialization -pictorializations -pictorialize -pictorialized -pictorializes -pictorializing -pictorially -pictorialness -pictorialnesses -pictorials -picture -pictured -picturephone -picturephones -pictures -picturesque -picturesquely -picturesqueness -picturesquenesses -picturing -picturization -picturizations -picturize -picturized -picturizes -picturizing -picul -piculs -piddle -piddled -piddler -piddlers -piddles -piddling -piddly -piddock -piddocks -pidgin -pidginization -pidginizations -pidginize -pidginized -pidginizes -pidginizing -pidgins -pie -piebald -piebalds -piece -pieced -piecemeal -piecer -piecers -pieces -piecewise -piecework -pieceworker -pieceworkers -pieceworks -piecing -piecings -piecrust -piecrusts -pied -piedfort -piedforts -piedmont -piedmonts -piefort -pieforts -pieing -pieplant -pieplants -pier -pierce -pierced -piercer -piercers -pierces -piercing -piercingly -piercings -pierogi -pierogies -pierrot -pierrots -piers -pies -pieta -pietas -pieties -pietism -pietisms -pietist -pietistic -pietistically -pietists -piety -piezoelectric -piezoelectrically -piezoelectricities -piezoelectricity -piezometer -piezometers -piezometric -piffle -piffled -piffles -piffling -pig -pigboat -pigboats -pigeon -pigeonhole -pigeonholed -pigeonholer -pigeonholers -pigeonholes -pigeonholing -pigeonite -pigeonites -pigeons -pigeonwing -pigeonwings -pigfish -pigfishes -pigged -piggeries -piggery -piggie -piggier -piggies -piggiest -piggin -pigging -piggins -piggish -piggishly -piggishness -piggishnesses -piggy -piggyback -piggybacked -piggybacking -piggybacks -pigheaded -pigheadedly -pigheadedness -pigheadednesses -piglet -piglets -piglike -pigment -pigmentary -pigmentation -pigmentations -pigmented -pigmenting -pigments -pigmies -pigmy -pignoli -pignolia -pignolias -pignolis -pignora -pignus -pignut -pignuts -pigout -pigouts -pigpen -pigpens -pigs -pigskin -pigskins -pigsney -pigsneys -pigstick -pigsticked -pigsticker -pigstickers -pigsticking -pigsticks -pigsties -pigsty -pigtail -pigtailed -pigtails -pigweed -pigweeds -piing -pika -pikake -pikakes -pikas -pike -piked -pikeman -pikemen -piker -pikers -pikes -pikestaff -pikestaffs -pikestaves -piki -piking -pikis -pilaf -pilaff -pilaffs -pilafs -pilar -pilaster -pilasters -pilau -pilaus -pilaw -pilaws -pilchard -pilchards -pile -pilea -pileate -pileated -piled -pilei -pileless -pileous -piles -pileum -pileup -pileups -pileus -pilewort -pileworts -pilfer -pilferable -pilferage -pilferages -pilfered -pilferer -pilferers -pilfering -pilferproof -pilfers -pilgarlic -pilgarlics -pilgrim -pilgrimage -pilgrimaged -pilgrimages -pilgrimaging -pilgrims -pili -piliform -piling -pilings -pilis -pill -pillage -pillaged -pillager -pillagers -pillages -pillaging -pillar -pillared -pillaring -pillarless -pillars -pillbox -pillboxes -pilled -pilling -pillion -pillions -pilloried -pillories -pillory -pillorying -pillow -pillowcase -pillowcases -pillowed -pillowing -pillows -pillowy -pills -pilocarpine -pilocarpines -pilose -pilosities -pilosity -pilot -pilotage -pilotages -piloted -pilothouse -pilothouses -piloting -pilotings -pilotless -pilots -pilous -pilsener -pilseners -pilsner -pilsners -pilular -pilule -pilules -pilus -pily -pima -pimas -pimento -pimentos -pimiento -pimientos -pimp -pimped -pimpernel -pimpernels -pimping -pimple -pimpled -pimples -pimplier -pimpliest -pimply -pimpmobile -pimpmobiles -pimps -pin -pina -pinafore -pinafored -pinafores -pinang -pinangs -pinas -pinaster -pinasters -pinata -pinatas -pinball -pinballs -pinbone -pinbones -pincer -pincerlike -pincers -pinch -pinchbeck -pinchbecks -pinchbug -pinchbugs -pincheck -pinchecks -pinched -pincher -pinchers -pinches -pinching -pinchpenny -pincushion -pincushions -pinder -pinders -pindling -pine -pineal -pinealectomies -pinealectomize -pinealectomized -pinealectomizes -pinealectomizing -pinealectomy -pineals -pineapple -pineapples -pinecone -pinecones -pined -pinedrops -pineland -pinelands -pinelike -pinene -pinenes -pineries -pinery -pines -pinesap -pinesaps -pineta -pinetum -pinewood -pinewoods -piney -pinfeather -pinfeathers -pinfish -pinfishes -pinfold -pinfolded -pinfolding -pinfolds -ping -pinged -pinger -pingers -pinging -pingo -pingoes -pingos -pingrass -pingrasses -pings -pinguid -pinhead -pinheaded -pinheadedness -pinheadednesses -pinheads -pinhole -pinholes -pinier -piniest -pining -pinion -pinioned -pinioning -pinions -pinite -pinites -pinitol -pinitols -pink -pinked -pinken -pinkened -pinkening -pinkens -pinker -pinkers -pinkest -pinkey -pinkeye -pinkeyes -pinkeys -pinkie -pinkies -pinking -pinkings -pinkish -pinkishness -pinkishnesses -pinkly -pinkness -pinknesses -pinko -pinkoes -pinkos -pinkroot -pinkroots -pinks -pinky -pinna -pinnace -pinnaces -pinnacle -pinnacled -pinnacles -pinnacling -pinnae -pinnal -pinnas -pinnate -pinnated -pinnately -pinnatifid -pinned -pinner -pinners -pinnies -pinning -pinniped -pinnipeds -pinnula -pinnulae -pinnular -pinnule -pinnules -pinny -pinochle -pinochles -pinocle -pinocles -pinocytic -pinocytoses -pinocytosis -pinocytotic -pinocytotically -pinole -pinoles -pinon -pinones -pinons -pinot -pinots -pinpoint -pinpointed -pinpointing -pinpoints -pinprick -pinpricked -pinpricking -pinpricks -pins -pinscher -pinschers -pinsetter -pinsetters -pinspotter -pinspotters -pinstripe -pinstriped -pinstripes -pint -pinta -pintada -pintadas -pintado -pintadoes -pintados -pintail -pintails -pintano -pintanos -pintas -pintle -pintles -pinto -pintoes -pintos -pints -pintsize -pinup -pinups -pinwale -pinwales -pinweed -pinweeds -pinwheel -pinwheeled -pinwheeling -pinwheels -pinwork -pinworks -pinworm -pinworms -piny -pinyin -pinyon -pinyons -piolet -piolets -pion -pioneer -pioneered -pioneering -pioneers -pionic -pions -piosities -piosity -pious -piously -piousness -piousnesses -pip -pipage -pipages -pipal -pipals -pipe -pipeage -pipeages -piped -pipefish -pipefishes -pipeful -pipefuls -pipeless -pipelike -pipeline -pipelined -pipelines -pipelining -piper -piperazine -piperazines -piperidine -piperidines -piperine -piperines -piperonal -piperonals -pipers -pipes -pipestem -pipestems -pipestone -pipestones -pipet -pipets -pipette -pipetted -pipettes -pipetting -pipier -pipiest -pipiness -pipinesses -piping -pipingly -pipings -pipit -pipits -pipkin -pipkins -pipped -pippin -pipping -pippins -pips -pipsissewa -pipsissewas -pipsqueak -pipsqueaks -pipy -piquance -piquances -piquancies -piquancy -piquant -piquantly -piquantness -piquantnesses -pique -piqued -piques -piquet -piquets -piquing -piracies -piracy -piragua -piraguas -pirana -piranas -piranha -piranhas -pirarucu -pirarucus -pirate -pirated -pirates -piratic -piratical -piratically -pirating -piraya -pirayas -piriform -pirn -pirns -pirog -pirogen -piroghi -pirogi -pirogies -pirogue -pirogues -pirojki -piroplasm -piroplasma -piroplasmata -piroplasms -piroque -piroques -piroshki -pirouette -pirouetted -pirouettes -pirouetting -pirozhki -pirozhok -pis -piscaries -piscary -piscator -piscatorial -piscators -piscatory -pisciculture -piscicultures -piscina -piscinae -piscinal -piscinas -piscine -piscivorous -pisco -piscos -pish -pished -pishes -pishing -pishoge -pishoges -pishogue -pishogues -pisiform -pisiforms -pismire -pismires -piso -pisolite -pisolites -pisolitic -pisos -piss -pissant -pissants -pissed -pisser -pissers -pisses -pissing -pissoir -pissoirs -pistache -pistaches -pistachio -pistachios -pistareen -pistareens -piste -pistes -pistil -pistillate -pistils -pistol -pistole -pistoled -pistoleer -pistoleers -pistoles -pistoling -pistolled -pistolling -pistols -piston -pistons -pit -pita -pitapat -pitapats -pitapatted -pitapatting -pitas -pitch -pitchblende -pitchblendes -pitched -pitcher -pitcherful -pitcherfuls -pitchers -pitchersful -pitches -pitchfork -pitchforked -pitchforking -pitchforks -pitchier -pitchiest -pitchily -pitching -pitchman -pitchmen -pitchout -pitchouts -pitchpole -pitchpoled -pitchpoles -pitchpoling -pitchwoman -pitchwomen -pitchy -piteous -piteously -piteousness -piteousnesses -pitfall -pitfalls -pith -pithead -pitheads -pithecanthropi -pithecanthropine -pithecanthropines -pithecanthropus -pithed -pithier -pithiest -pithily -pithiness -pithinesses -pithing -pithless -piths -pithy -pitiable -pitiableness -pitiablenesses -pitiably -pitied -pitier -pitiers -pities -pitiful -pitifuller -pitifullest -pitifully -pitifulness -pitifulnesses -pitiless -pitilessly -pitilessness -pitilessnesses -pitman -pitmans -pitmen -piton -pitons -pits -pitsaw -pitsaws -pittance -pittances -pitted -pitting -pittings -pittosporum -pittosporums -pituitaries -pituitary -pity -pitying -pityingly -pityriases -pityriasis -piu -pivot -pivotable -pivotal -pivotally -pivoted -pivoting -pivotman -pivotmen -pivots -pix -pixel -pixels -pixes -pixie -pixieish -pixies -pixilated -pixilation -pixilations -pixillated -pixiness -pixinesses -pixy -pixyish -pizazz -pizazzes -pizazzy -pizza -pizzalike -pizzas -pizzazz -pizzazzes -pizzazzy -pizzeria -pizzerias -pizzicati -pizzicato -pizzle -pizzles -placabilities -placability -placable -placably -placard -placarded -placarding -placards -placate -placated -placater -placaters -placates -placating -placatingly -placation -placations -placative -placatory -place -placeable -placebo -placeboes -placebos -placed -placeholder -placeholders -placekick -placekicked -placekicker -placekickers -placekicking -placekicks -placeless -placelessly -placeman -placemen -placement -placements -placenta -placentae -placental -placentals -placentas -placentation -placentations -placer -placers -places -placet -placets -placid -placidities -placidity -placidly -placidness -placidnesses -placing -plack -placket -plackets -placks -placoid -placoids -plafond -plafonds -plagal -plage -plages -plagiaries -plagiarise -plagiarised -plagiarises -plagiarising -plagiarism -plagiarisms -plagiarist -plagiaristic -plagiarists -plagiarize -plagiarized -plagiarizer -plagiarizers -plagiarizes -plagiarizing -plagiary -plagioclase -plagioclases -plagiotropic -plague -plagued -plaguer -plaguers -plagues -plaguey -plaguily -plaguing -plaguy -plaice -plaices -plaid -plaided -plaids -plain -plainchant -plainchants -plainclothes -plainclothesman -plainclothesmen -plained -plainer -plainest -plaining -plainly -plainness -plainnesses -plains -plainsman -plainsmen -plainsong -plainsongs -plainspoken -plainspokenness -plainspokennesses -plaint -plaintext -plaintexts -plaintful -plaintiff -plaintiffs -plaintive -plaintively -plaintiveness -plaintivenesses -plaints -plaister -plaistered -plaistering -plaisters -plait -plaited -plaiter -plaiters -plaiting -plaitings -plaits -plan -planar -planaria -planarian -planarians -planarias -planarities -planarity -planate -planation -planations -planch -planche -planches -planchet -planchets -planchette -planchettes -plane -planed -planeload -planeloads -planer -planers -planes -planet -planetaria -planetarium -planetariums -planetary -planetesimal -planetesimals -planetlike -planetoid -planetoidal -planetoids -planetological -planetologies -planetologist -planetologists -planetology -planets -planetwide -planform -planforms -plangencies -plangency -plangent -plangently -planimeter -planimeters -planimetric -planimetrically -planing -planish -planished -planisher -planishers -planishes -planishing -planisphere -planispheres -planispheric -plank -planked -planking -plankings -planks -plankter -plankters -plankton -planktonic -planktons -planless -planlessly -planlessness -planlessnesses -planned -planner -planners -planning -plannings -planographic -planographies -planography -planosol -planosols -plans -plant -plantable -plantain -plantains -plantar -plantation -plantations -planted -planter -planters -plantigrade -plantigrades -planting -plantings -plantlet -plantlets -plantlike -plantocracies -plantocracy -plants -plantsman -plantsmen -planula -planulae -planular -plaque -plaques -plash -plashed -plasher -plashers -plashes -plashier -plashiest -plashing -plashy -plasm -plasma -plasmagel -plasmagels -plasmagene -plasmagenes -plasmalemma -plasmalemmas -plasmaphereses -plasmapheresis -plasmas -plasmasol -plasmasols -plasmatic -plasmic -plasmid -plasmids -plasmin -plasminogen -plasminogens -plasmins -plasmodesm -plasmodesma -plasmodesmas -plasmodesmata -plasmodesms -plasmodia -plasmodium -plasmogamies -plasmogamy -plasmoid -plasmoids -plasmolyses -plasmolysis -plasmolytic -plasmolyze -plasmolyzed -plasmolyzes -plasmolyzing -plasmon -plasmons -plasms -plaster -plasterboard -plasterboards -plastered -plasterer -plasterers -plastering -plasterings -plasters -plasterwork -plasterworks -plastery -plastic -plastically -plasticene -plasticenes -plasticine -plasticines -plasticities -plasticity -plasticization -plasticizations -plasticize -plasticized -plasticizer -plasticizers -plasticizes -plasticizing -plasticky -plastics -plastid -plastidial -plastids -plastisol -plastisols -plastocyanin -plastocyanins -plastoquinone -plastoquinones -plastral -plastron -plastrons -plastrum -plastrums -plat -platan -platane -platanes -platans -plate -plateau -plateaued -plateauing -plateaus -plateaux -plated -plateful -platefuls -plateglass -platelet -platelets -platelike -platemaker -platemakers -platemaking -platemakings -platen -platens -plater -plateresque -platers -plates -platesful -platform -platforms -platier -platies -platiest -platina -platinas -plating -platings -platinic -platinize -platinized -platinizes -platinizing -platinocyanide -platinocyanides -platinum -platinums -platitude -platitudes -platitudinal -platitudinarian -platitudinarians -platitudinize -platitudinized -platitudinizes -platitudinizing -platitudinous -platitudinously -platonic -platonically -platoon -platooned -platooning -platoons -plats -platted -platter -platterful -platterfuls -platters -plattersful -platting -platy -platyfish -platyfishes -platyhelminth -platyhelminthic -platyhelminths -platypi -platypus -platypuses -platyrrhine -platyrrhines -platys -plaudit -plaudits -plausibilities -plausibility -plausible -plausibleness -plausiblenesses -plausibly -plausive -play -playa -playabilities -playability -playable -playact -playacted -playacting -playactings -playacts -playas -playback -playbacks -playbill -playbills -playbook -playbooks -playboy -playboys -playdate -playdates -playday -playdays -playdown -playdowns -played -player -players -playfellow -playfellows -playfield -playfields -playful -playfully -playfulness -playfulnesses -playgirl -playgirls -playgoer -playgoers -playground -playgrounds -playhouse -playhouses -playing -playland -playlands -playless -playlet -playlets -playlike -playlist -playlists -playmaker -playmakers -playmaking -playmakings -playmate -playmates -playoff -playoffs -playpen -playpens -playroom -playrooms -plays -playsuit -playsuits -plaything -playthings -playtime -playtimes -playwear -playwright -playwrighting -playwrightings -playwrights -playwriting -playwritings -plaza -plazas -plea -pleach -pleached -pleaches -pleaching -plead -pleadable -pleaded -pleader -pleaders -pleading -pleadingly -pleadings -pleads -pleas -pleasance -pleasances -pleasant -pleasanter -pleasantest -pleasantly -pleasantness -pleasantnesses -pleasantries -pleasantry -please -pleased -pleaser -pleasers -pleases -pleasing -pleasingly -pleasingness -pleasingnesses -pleasurabilities -pleasurability -pleasurable -pleasurableness -pleasurablenesses -pleasurably -pleasure -pleasured -pleasureless -pleasures -pleasuring -pleat -pleated -pleater -pleaters -pleating -pleatless -pleats -pleb -plebe -plebeian -plebeianism -plebeianisms -plebeianly -plebeians -plebes -plebiscitary -plebiscite -plebiscites -plebs -plecopteran -plecopterans -plectra -plectron -plectrons -plectrum -plectrums -pled -pledge -pledged -pledgee -pledgees -pledgeor -pledgeors -pledger -pledgers -pledges -pledget -pledgets -pledging -pledgor -pledgors -pleiad -pleiades -pleiads -pleinairism -pleinairisms -pleinairist -pleinairists -pleiotropic -pleiotropies -pleiotropy -plena -plenary -plench -plenches -plenipotent -plenipotentiaries -plenipotentiary -plenish -plenished -plenishes -plenishing -plenism -plenisms -plenist -plenists -plenitude -plenitudes -plenitudinous -plenteous -plenteously -plenteousness -plenteousnesses -plenties -plentiful -plentifully -plentifulness -plentifulnesses -plentitude -plentitudes -plenty -plenum -plenums -pleochroic -pleochroism -pleochroisms -pleomorphic -pleomorphism -pleomorphisms -pleonasm -pleonasms -pleonastic -pleonastically -pleopod -pleopods -plerocercoid -plerocercoids -plesiosaur -plesiosaurs -plessor -plessors -plethora -plethoras -plethoric -plethysmogram -plethysmograms -plethysmograph -plethysmographic -plethysmographically -plethysmographies -plethysmographs -plethysmography -pleura -pleurae -pleural -pleuras -pleurisies -pleurisy -pleuritic -pleuron -pleuropneumonia -pleuropneumonias -pleuston -pleustonic -pleustons -plew -plews -plexal -plexiform -plexor -plexors -plexus -plexuses -pliabilities -pliability -pliable -pliableness -pliablenesses -pliably -pliancies -pliancy -pliant -pliantly -pliantness -pliantnesses -plica -plicae -plical -plicate -plicated -plication -plications -plie -plied -plier -pliers -plies -plight -plighted -plighter -plighters -plighting -plights -plimsol -plimsole -plimsoles -plimsoll -plimsolls -plimsols -plink -plinked -plinker -plinkers -plinking -plinks -plinth -plinths -pliotron -pliotrons -pliskie -pliskies -plisky -plisse -plisses -plod -plodded -plodder -plodders -plodding -ploddingly -plods -ploidies -ploidy -plonk -plonked -plonking -plonks -plop -plopped -plopping -plops -plosion -plosions -plosive -plosives -plot -plotless -plotlessness -plotlessnesses -plotline -plotlines -plots -plottage -plottages -plotted -plotter -plotters -plottier -plotties -plottiest -plotting -plotty -plotz -plotzed -plotzes -plotzing -plough -ploughed -plougher -ploughers -ploughing -ploughs -plover -plovers -plow -plowable -plowback -plowbacks -plowboy -plowboys -plowed -plower -plowers -plowhead -plowheads -plowing -plowland -plowlands -plowman -plowmen -plows -plowshare -plowshares -ploy -ployed -ploying -ploys -pluck -plucked -plucker -pluckers -pluckier -pluckiest -pluckily -pluckiness -pluckinesses -plucking -plucks -plucky -plug -plugged -plugger -pluggers -plugging -plugless -plugola -plugolas -plugs -pluguglies -plugugly -plum -plumage -plumaged -plumages -plumate -plumb -plumbago -plumbagos -plumbed -plumber -plumberies -plumbers -plumbery -plumbic -plumbing -plumbings -plumbism -plumbisms -plumbous -plumbs -plumbum -plumbums -plume -plumed -plumelet -plumelets -plumeria -plumerias -plumes -plumier -plumiest -pluming -plumiped -plumipeds -plumlike -plummet -plummeted -plummeting -plummets -plummier -plummiest -plummy -plumose -plump -plumped -plumpen -plumpened -plumpening -plumpens -plumper -plumpers -plumpest -plumping -plumpish -plumply -plumpness -plumpnesses -plumps -plums -plumular -plumule -plumules -plumy -plunder -plundered -plunderer -plunderers -plundering -plunderous -plunders -plunge -plunged -plunger -plungers -plunges -plunging -plunk -plunked -plunker -plunkers -plunking -plunks -pluperfect -pluperfects -plural -pluralism -pluralisms -pluralist -pluralistic -pluralistically -pluralists -pluralities -plurality -pluralization -pluralizations -pluralize -pluralized -pluralizes -pluralizing -plurally -plurals -pluripotent -plus -pluses -plush -plusher -plushes -plushest -plushier -plushiest -plushily -plushiness -plushinesses -plushly -plushness -plushnesses -plushy -plussage -plussages -plusses -plutei -pluteus -plutocracies -plutocracy -plutocrat -plutocratic -plutocratically -plutocrats -pluton -plutonian -plutonic -plutonium -plutoniums -plutons -pluvial -pluvials -pluvian -pluviose -pluvious -ply -plyer -plyers -plying -plyingly -plyometric -plyometrics -plywood -plywoods -pneuma -pneumas -pneumatic -pneumatically -pneumaticities -pneumaticity -pneumatologies -pneumatology -pneumatolytic -pneumatophore -pneumatophores -pneumococcal -pneumococci -pneumococcus -pneumoconioses -pneumoconiosis -pneumograph -pneumographs -pneumonectomies -pneumonectomy -pneumonia -pneumonias -pneumonic -pneumonitides -pneumonitis -pneumothoraces -pneumothorax -pneumothoraxes -poaceous -poach -poached -poacher -poachers -poaches -poachier -poachiest -poaching -poachy -pochard -pochards -pock -pocked -pocket -pocketable -pocketbook -pocketbooks -pocketed -pocketer -pocketers -pocketful -pocketfuls -pocketing -pocketknife -pocketknives -pockets -pocketsful -pockier -pockiest -pockily -pocking -pockmark -pockmarked -pockmarking -pockmarks -pocks -pocky -poco -pococurante -pococurantism -pococurantisms -pocosin -pocosins -pod -podagra -podagral -podagras -podagric -podded -podding -podesta -podestas -podgier -podgiest -podgily -podgy -podia -podiatric -podiatries -podiatrist -podiatrists -podiatry -podite -podites -poditic -podium -podiums -podlike -podocarp -podomere -podomeres -podophylli -podophyllin -podophyllins -podophyllum -podophyllums -pods -podsol -podsolic -podsolization -podsolizations -podsols -podzol -podzolic -podzolization -podzolizations -podzolize -podzolized -podzolizes -podzolizing -podzols -poechore -poechores -poem -poems -poesies -poesy -poet -poetaster -poetasters -poetess -poetesses -poetic -poetical -poetically -poeticalness -poeticalnesses -poeticism -poeticisms -poeticize -poeticized -poeticizes -poeticizing -poetics -poetise -poetised -poetiser -poetisers -poetises -poetising -poetize -poetized -poetizer -poetizers -poetizes -poetizing -poetless -poetlike -poetries -poetry -poets -pogey -pogeys -pogies -pogonia -pogonias -pogonip -pogonips -pogonophoran -pogonophorans -pogrom -pogromed -pogroming -pogromist -pogromists -pogroms -pogy -poh -poi -poignance -poignances -poignancies -poignancy -poignant -poignantly -poikilotherm -poikilothermic -poikilotherms -poilu -poilus -poinciana -poincianas -poind -poinded -poinding -poinds -poinsettia -poinsettias -point -pointe -pointed -pointedly -pointedness -pointednesses -pointelle -pointelles -pointer -pointers -pointes -pointier -pointiest -pointillism -pointillisms -pointillist -pointillistic -pointillists -pointing -pointless -pointlessly -pointlessness -pointlessnesses -pointman -pointmen -points -pointtillist -pointy -pois -poise -poised -poiser -poisers -poises -poisha -poising -poison -poisoned -poisoner -poisoners -poisoning -poisonings -poisonous -poisonously -poisons -poisonwood -poisonwoods -poitrel -poitrels -poke -pokeberries -pokeberry -poked -poker -pokeroot -pokeroots -pokers -pokes -pokeweed -pokeweeds -pokey -pokeys -pokier -pokies -pokiest -pokily -pokiness -pokinesses -poking -poky -pol -polar -polarimeter -polarimeters -polarimetric -polarimetries -polarimetry -polariscope -polariscopes -polariscopic -polarise -polarised -polarises -polarising -polarities -polarity -polarizabilities -polarizability -polarizable -polarization -polarizations -polarize -polarized -polarizer -polarizers -polarizes -polarizing -polarographic -polarographically -polarographies -polarography -polaron -polarons -polars -polder -polders -pole -poleax -poleaxe -poleaxed -poleaxes -poleaxing -polecat -polecats -poled -poleis -poleless -polemic -polemical -polemically -polemicist -polemicists -polemicize -polemicized -polemicizes -polemicizing -polemics -polemist -polemists -polemize -polemized -polemizes -polemizing -polemonium -polemoniums -polenta -polentas -poler -polers -poles -polestar -polestars -poleward -poleyn -poleyns -police -policed -policeman -policemen -polices -policewoman -policewomen -policies -policing -policy -policyholder -policyholders -polies -poling -polio -poliomyelitides -poliomyelitis -polios -poliovirus -polioviruses -polis -polish -polished -polisher -polishers -polishes -polishing -politburo -politburos -polite -politely -politeness -politenesses -politer -politesse -politesses -politest -politic -political -politicalization -politicalizations -politicalize -politicalized -politicalizes -politicalizing -politically -politician -politicians -politicise -politicised -politicises -politicising -politicization -politicizations -politicize -politicized -politicizes -politicizing -politick -politicked -politicker -politickers -politicking -politicks -politico -politicoes -politicos -politics -polities -polity -polka -polkaed -polkaing -polkas -poll -pollack -pollacks -pollard -pollarded -pollarding -pollards -polled -pollee -pollees -pollen -pollened -pollening -pollenizer -pollenizers -pollenoses -pollenosis -pollens -poller -pollers -pollex -pollical -pollices -pollinate -pollinated -pollinates -pollinating -pollination -pollinations -pollinator -pollinators -polling -pollinia -pollinic -pollinium -pollinizer -pollinizers -pollinoses -pollinosis -pollist -pollists -polliwog -polliwogs -pollock -pollocks -polls -pollster -pollsters -pollutant -pollutants -pollute -polluted -polluter -polluters -pollutes -polluting -pollution -pollutions -pollutive -pollywog -pollywogs -polo -poloist -poloists -polonaise -polonaises -polonium -poloniums -polos -pols -poltergeist -poltergeists -poltroon -poltrooneries -poltroonery -poltroons -poly -polyacrylamide -polyacrylamides -polyacrylonitrile -polyacrylonitriles -polyalcohol -polyalcohols -polyamide -polyamides -polyamine -polyamines -polyandries -polyandrous -polyandry -polyantha -polyanthas -polyanthi -polyanthus -polyanthuses -polyatomic -polybrid -polybrids -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 -polycot -polycots -polycrystal -polycrystalline -polycrystals -polycyclic -polycystic -polycythemia -polycythemias -polycythemic -polydactyl -polydactylies -polydactyly -polydipsia -polydipsias -polydipsic -polydisperse -polydispersities -polydispersity -polyelectrolyte -polyelectrolytes -polyembryonic -polyembryonies -polyembryony -polyene -polyenes -polyenic -polyester -polyesterification -polyesterifications -polyesters -polyestrous -polyethylene -polyethylenes -polygala -polygalas -polygamic -polygamies -polygamist -polygamists -polygamize -polygamized -polygamizes -polygamizing -polygamous -polygamy -polygene -polygenes -polygeneses -polygenesis -polygenetic -polygenic -polyglot -polyglotism -polyglotisms -polyglots -polyglottism -polyglottisms -polygon -polygonal -polygonally -polygonies -polygons -polygonum -polygonums -polygony -polygraph -polygrapher -polygraphers -polygraphic -polygraphist -polygraphists -polygraphs -polygynies -polygynous -polygyny -polyhedra -polyhedral -polyhedron -polyhedrons -polyhedroses -polyhedrosis -polyhistor -polyhistoric -polyhistors -polyhydroxy -polylysine -polylysines -polymath -polymathic -polymathies -polymaths -polymathy -polymer -polymerase -polymerases -polymeric -polymerisation -polymerisations -polymerise -polymerised -polymerises -polymerising -polymerism -polymerisms -polymerization -polymerizations -polymerize -polymerized -polymerizes -polymerizing -polymers -polymorph -polymorphic -polymorphically -polymorphism -polymorphisms -polymorphonuclear -polymorphonuclears -polymorphous -polymorphously -polymorphs -polymyxin -polymyxins -polyneuritides -polyneuritis -polyneuritises -polynomial -polynomials -polynuclear -polynucleotide -polynucleotides -polynya -polynyas -polynyi -polyolefin -polyolefins -polyoma -polyomas -polyonymous -polyp -polyparies -polypary -polypeptide -polypeptides -polypeptidic -polypetalous -polyphagia -polyphagias -polyphagies -polyphagous -polyphagy -polyphase -polyphasic -polyphenol -polyphenolic -polyphenols -polyphiloprogenitive -polyphone -polyphones -polyphonic -polyphonically -polyphonies -polyphonous -polyphonously -polyphony -polyphyletic -polyphyletically -polypi -polypide -polypides -polyploid -polyploidies -polyploids -polyploidy -polypnea -polypneas -polypod -polypodies -polypods -polypody -polypoid -polypore -polypores -polypous -polypropylene -polypropylenes -polyps -polyptych -polyptychs -polypus -polypuses -polyrhythm -polyrhythmic -polyrhythmically -polyrhythms -polyribonucleotide -polyribonucleotides -polyribosomal -polyribosome -polyribosomes -polys -polysaccharide -polysaccharides -polysemies -polysemous -polysemy -polysome -polysomes -polysorbate -polysorbates -polystichous -polystyrene -polystyrenes -polysulfide -polysulfides -polysyllabic -polysyllabically -polysyllable -polysyllables -polysynaptic -polysynaptically -polysyndeton -polysyndetons -polytechnic -polytechnics -polytene -polytenies -polyteny -polytheism -polytheisms -polytheist -polytheistic -polytheistical -polytheists -polythene -polythenes -polytonal -polytonalities -polytonality -polytonally -polytype -polytypes -polytypic -polyunsaturated -polyurethane -polyurethanes -polyuria -polyurias -polyuric -polyvalence -polyvalences -polyvalent -polyvinyl -polywater -polywaters -polyzoan -polyzoans -polyzoic -pom -pomace -pomaceous -pomaces -pomade -pomaded -pomades -pomading -pomander -pomanders -pomatum -pomatums -pome -pomegranate -pomegranates -pomelo -pomelos -pomes -pomfret -pomfrets -pommee -pommel -pommeled -pommeling -pommelled -pommelling -pommels -pommie -pommies -pommy -pomological -pomologies -pomologist -pomologists -pomology -pomp -pompadour -pompadoured -pompadours -pompano -pompanos -pompom -pompoms -pompon -pompons -pomposities -pomposity -pompous -pompously -pompousness -pompousnesses -pomps -poms -ponce -ponced -ponces -poncho -ponchos -poncing -pond -ponded -ponder -ponderable -pondered -ponderer -ponderers -pondering -ponderosa -ponderosas -ponderous -ponderously -ponderousness -ponderousnesses -ponders -ponding -ponds -pondweed -pondweeds -pone -ponent -pones -pong -ponged -pongee -pongees -pongid -pongids -ponging -pongs -poniard -poniarded -poniarding -poniards -ponied -ponies -pons -pontes -pontifex -pontiff -pontiffs -pontific -pontifical -pontifically -pontificals -pontificate -pontificated -pontificates -pontificating -pontification -pontifications -pontificator -pontificators -pontifices -pontil -pontils -pontine -ponton -pontons -pontoon -pontoons -pony -ponying -ponytail -ponytailed -ponytails -pooch -pooched -pooches -pooching -pood -poodle -poodles -poods -poof -poofs -pooftah -pooftahs -poofter -poofters -poofy -pooh -poohed -poohing -poohs -pooka -pookas -pool -pooled -poolhall -poolhalls -pooling -poolroom -poolrooms -pools -poolside -poolsides -poon -poons -poop -pooped -pooping -poops -poor -poorer -poorest -poorhouse -poorhouses -poori -pooris -poorish -poorly -poorness -poornesses -poortith -poortiths -poove -pooves -pop -popcorn -popcorns -pope -popedom -popedoms -popeless -popelike -poperies -popery -popes -popeyed -popgun -popguns -popinjay -popinjays -popish -popishly -poplar -poplars -poplin -poplins -popliteal -poplitic -popover -popovers -poppa -poppas -popped -popper -poppers -poppet -poppets -poppied -poppies -popping -popple -poppled -popples -poppling -poppy -poppycock -poppycocks -poppyhead -poppyheads -pops -popsicle -popsicles -popsie -popsies -popsy -populace -populaces -popular -popularise -popularised -popularises -popularising -popularities -popularity -popularization -popularizations -popularize -popularized -popularizer -popularizers -popularizes -popularizing -popularly -populate -populated -populates -populating -population -populational -populations -populism -populisms -populist -populistic -populists -populous -populously -populousness -populousnesses -porbeagle -porbeagles -porcelain -porcelainize -porcelainized -porcelainizes -porcelainizing -porcelainlike -porcelains -porcelaneous -porcellaneous -porch -porches -porcine -porcini -porcino -porcupine -porcupines -pore -pored -pores -porgies -porgy -poring -porism -porisms -pork -porker -porkers -porkier -porkies -porkiest -porkpie -porkpies -porks -porkwood -porkwoods -porky -porn -pornier -porniest -porno -pornographer -pornographers -pornographic -pornographically -pornographies -pornography -pornos -porns -porny -porose -porosities -porosity -porous -porously -porousness -porousnesses -porphyria -porphyrias -porphyries -porphyrin -porphyrins -porphyritic -porphyropsin -porphyropsins -porphyry -porpoise -porpoises -porrect -porridge -porridges -porridgy -porringer -porringers -port -portabella -portabellas -portabello -portabellos -portabilities -portability -portable -portables -portably -portage -portaged -portages -portaging -portal -portaled -portals -portamenti -portamento -portamentos -portance -portances -portapack -portapacks -portapak -portapaks -portative -portcullis -portcullises -ported -portend -portended -portending -portends -portent -portentous -portentously -portentousness -portentousnesses -portents -porter -porterage -porterages -portered -porterhouse -porterhouses -portering -porters -portfolio -portfolios -porthole -portholes -portico -porticoes -porticos -portiere -portieres -porting -portion -portioned -portioning -portionless -portions -portless -portlier -portliest -portliness -portlinesses -portly -portmanteau -portmanteaus -portmanteaux -portobello -portobellos -portrait -portraitist -portraitists -portraits -portraiture -portraitures -portray -portrayal -portrayals -portrayed -portrayer -portrayers -portraying -portrays -portress -portresses -ports -portulaca -portulacas -posada -posadas -pose -posed -poser -posers -poses -poseur -poseurs -posh -posher -poshest -poshly -poshness -poshnesses -posies -posing -posingly -posit -posited -positing -position -positional -positionally -positioned -positioning -positions -positive -positively -positiveness -positivenesses -positiver -positives -positivest -positivism -positivisms -positivist -positivistic -positivistically -positivists -positivities -positivity -positron -positronium -positroniums -positrons -posits -posologies -posology -posse -posses -possess -possessed -possessedly -possessedness -possessednesses -possesses -possessing -possession -possessional -possessionless -possessions -possessive -possessively -possessiveness -possessivenesses -possessives -possessor -possessors -possessory -posset -possets -possibilities -possibility -possible -possibler -possiblest -possibly -possum -possums -post -postabortion -postaccident -postadolescent -postadolescents -postage -postages -postal -postally -postals -postamputation -postanal -postapocalyptic -postarrest -postatomic -postattack -postaxial -postbaccalaureate -postbag -postbags -postbase -postbellum -postbiblical -postbourgeois -postbox -postboxes -postboy -postboys -postburn -postcapitalist -postcard -postcardlike -postcards -postcava -postcavae -postcaval -postclassic -postclassical -postcode -postcodes -postcoital -postcollege -postcolleges -postcollegiate -postcolonial -postconception -postconcert -postconquest -postconsonantal -postconvention -postcopulatory -postcoronary -postcoup -postcranial -postcranially -postcrash -postcrises -postcrisis -postdate -postdated -postdates -postdating -postdeadline -postdebate -postdebutante -postdebutantes -postdelivery -postdepositional -postdepression -postdevaluation -postdiluvian -postdiluvians -postdive -postdivestiture -postdivorce -postdoc -postdocs -postdoctoral -postdoctorate -postdrug -posted -postediting -posteditings -posteen -posteens -postelection -postembryonal -postembryonic -postemergence -postemergency -postencephalitic -postepileptic -poster -posterior -posteriorities -posteriority -posteriorly -posteriors -posterities -posterity -postern -posterns -posterolateral -posters -posteruptive -postexercise -postexilic -postexperience -postexperimental -postexposure -postface -postfaces -postfault -postfeminist -postfire -postfix -postfixed -postfixes -postfixing -postflight -postform -postformed -postforming -postforms -postfracture -postfractures -postfreeze -postgame -postganglionic -postglacial -postgrad -postgrads -postgraduate -postgraduates -postgraduation -postharvest -posthaste -posthastes -postheat -postheats -posthemorrhagic -posthole -postholes -postholiday -postholocaust -posthospital -posthumous -posthumously -posthumousness -posthumousnesses -posthypnotic -postiche -postiches -postilion -postilions -postillion -postillions -postimpact -postimperial -postin -postinaugural -postindependence -postindustrial -postinfection -posting -postings -postinjection -postinoculation -postins -postique -postiques -postirradiation -postischemic -postisolation -postlanding -postlapsarian -postlaunch -postliberation -postliterate -postlude -postludes -postman -postmarital -postmark -postmarked -postmarking -postmarks -postmastectomy -postmaster -postmasters -postmastership -postmasterships -postmating -postmedieval -postmen -postmenopausal -postmidnight -postmillenarian -postmillenarianism -postmillenarianisms -postmillenarians -postmillennial -postmillennialism -postmillennialisms -postmillennialist -postmillennialists -postmistress -postmistresses -postmodern -postmodernism -postmodernisms -postmodernist -postmodernists -postmortem -postmortems -postnatal -postnatally -postneonatal -postnuptial -postoperative -postoperatively -postoral -postorbital -postorgasmic -postpaid -postpartum -postpollination -postponable -postpone -postponed -postponement -postponements -postponer -postponers -postpones -postponing -postposition -postpositional -postpositionally -postpositions -postpositive -postpositively -postprandial -postpresidential -postprimary -postprison -postproduction -postproductions -postpsychoanalytic -postpuberty -postpubescent -postpubescents -postrace -postrecession -postresurrection -postresurrections -postretirement -postrevolutionary -postriot -postromantic -posts -postscript -postscripts -postseason -postseasons -postsecondary -postshow -poststimulation -poststimulatory -poststimulus -poststrike -postsurgical -postsynaptic -postsynaptically -postsync -postsynced -postsyncing -postsyncs -posttax -postteen -posttension -posttensioned -posttensioning -posttensions -posttest -posttests -posttranscriptional -posttransfusion -posttranslational -posttraumatic -posttreatment -posttrial -postulancies -postulancy -postulant -postulants -postulate -postulated -postulates -postulating -postulation -postulational -postulations -postulator -postulators -postural -posture -postured -posturer -posturers -postures -posturing -posturings -postvaccinal -postvaccination -postvagotomy -postvasectomy -postvocalic -postwar -postweaning -postworkshop -posy -pot -potabilities -potability -potable -potableness -potablenesses -potables -potage -potages -potamic -potash -potashes -potassic -potassium -potassiums -potation -potations -potato -potatoes -potatory -potbellied -potbellies -potbelly -potboil -potboiled -potboiler -potboilers -potboiling -potboils -potboy -potboys -poteen -poteens -potence -potences -potencies -potency -potent -potentate -potentates -potential -potentialities -potentiality -potentially -potentials -potentiate -potentiated -potentiates -potentiating -potentiation -potentiations -potentiator -potentiators -potentilla -potentillas -potentiometer -potentiometers -potentiometric -potently -potful -potfuls -pothead -potheads -potheen -potheens -pother -potherb -potherbs -pothered -pothering -pothers -potholder -potholders -pothole -potholed -potholes -pothook -pothooks -pothouse -pothouses -pothunter -pothunters -pothunting -pothuntings -potiche -potiches -potion -potions -potlach -potlache -potlaches -potlatch -potlatched -potlatches -potlatching -potlike -potline -potlines -potluck -potlucks -potman -potmen -potometer -potometers -potpie -potpies -potpourri -potpourris -pots -potshard -potshards -potsherd -potsherds -potshot -potshots -potshotting -potsie -potsies -potstone -potstones -potsy -pottage -pottages -potted -potteen -potteens -potter -pottered -potterer -potterers -potteries -pottering -potteringly -potters -pottery -pottier -potties -pottiest -potting -pottle -pottles -potto -pottos -potty -potzer -potzers -pouch -pouched -pouches -pouchier -pouchiest -pouching -pouchy -pouf -poufed -pouff -pouffe -pouffed -pouffes -pouffs -poufs -poulard -poularde -poulardes -poulards -poult -poulter -poulterer -poulterers -poulters -poultice -poulticed -poultices -poulticing -poultries -poultry -poultryman -poultrymen -poults -pounce -pounced -pouncer -pouncers -pounces -pouncing -pound -poundage -poundages -poundal -poundals -pounded -pounder -pounders -pounding -pounds -pour -pourable -pourboire -pourboires -poured -pourer -pourers -pouring -pouringly -pourparler -pourparlers -pourpoint -pourpoints -pours -poussette -poussetted -poussettes -poussetting -poussie -poussies -pout -pouted -pouter -pouters -poutful -poutier -poutiest -pouting -pouts -pouty -poverties -poverty -pow -powder -powdered -powderer -powderers -powdering -powderless -powderlike -powders -powdery -power -powerboat -powerboats -powerbroker -powerbrokers -powered -powerful -powerfully -powerhouse -powerhouses -powering -powerless -powerlessly -powerlessness -powerlessnesses -powers -pows -powter -powters -powwow -powwowed -powwowing -powwows -pox -poxed -poxes -poxing -poxvirus -poxviruses -poyou -poyous -pozzolan -pozzolana -pozzolanas -pozzolanic -pozzolans -praam -praams -practic -practicabilities -practicability -practicable -practicableness -practicablenesses -practicably -practical -practicalities -practicality -practically -practicalness -practicalnesses -practicals -practice -practiced -practicer -practicers -practices -practicing -practicum -practicums -practise -practised -practises -practising -practitioner -practitioners -praecipe -praecipes -praedial -praefect -praefects -praelect -praelected -praelecting -praelects -praemunire -praemunires -praenomen -praenomens -praenomina -praesidia -praesidium -praesidiums -praetor -praetorial -praetorian -praetorians -praetors -praetorship -praetorships -pragmatic -pragmatical -pragmatically -pragmaticism -pragmaticisms -pragmaticist -pragmaticists -pragmatics -pragmatism -pragmatisms -pragmatist -pragmatistic -pragmatists -prahu -prahus -prairie -prairies -praise -praised -praiser -praisers -praises -praiseworthily -praiseworthiness -praiseworthinesses -praiseworthy -praising -praline -pralines -pralltriller -pralltrillers -pram -prams -prance -pranced -prancer -prancers -prances -prancing -prandial -prang -pranged -pranging -prangs -prank -pranked -pranking -prankish -prankishly -prankishness -prankishnesses -pranks -prankster -pranksters -prao -praos -prase -praseodymium -praseodymiums -prases -prat -prate -prated -prater -praters -prates -pratfall -pratfalls -pratincole -pratincoles -prating -pratingly -pratique -pratiques -prats -prattle -prattled -prattler -prattlers -prattles -prattling -prattlingly -prau -praus -prawn -prawned -prawner -prawners -prawning -prawns -praxeological -praxeologies -praxeology -praxes -praxis -praxises -pray -prayed -prayer -prayerful -prayerfully -prayerfulness -prayerfulnesses -prayers -praying -prays -preach -preached -preacher -preachers -preaches -preachier -preachiest -preachified -preachifies -preachify -preachifying -preachily -preachiness -preachinesses -preaching -preachingly -preachment -preachments -preachy -preact -preacted -preacting -preacts -preadapt -preadaptation -preadaptations -preadapted -preadapting -preadaptive -preadapts -preadmission -preadmissions -preadmit -preadmits -preadmitted -preadmitting -preadolescence -preadolescences -preadolescent -preadolescents -preadopt -preadopted -preadopting -preadopts -preadult -preaged -preagricultural -preallot -preallots -preallotted -preallotting -preamble -preambles -preamp -preamplifier -preamplifiers -preamps -preanal -preanesthetic -preanesthetics -preannounce -preannounced -preannounces -preannouncing -preapprove -preapproved -preapproves -preapproving -prearm -prearmed -prearming -prearms -prearrange -prearranged -prearrangement -prearrangements -prearranges -prearranging -preassembled -preassign -preassigned -preassigning -preassigns -preatomic -preaudit -preaudits -preaver -preaverred -preaverring -preavers -preaxial -prebake -prebaked -prebakes -prebaking -prebasal -prebattle -prebend -prebendal -prebendaries -prebendary -prebends -prebiblical -prebill -prebilled -prebilling -prebills -prebind -prebinding -prebinds -prebiologic -prebiological -prebiotic -prebless -preblessed -preblesses -preblessing -preboil -preboiled -preboiling -preboils -prebook -prebooked -prebooking -prebooks -preboom -prebound -prebreakfast -precalculi -precalculus -precalculuses -precancel -precanceled -precanceling -precancellation -precancellations -precancelled -precancelling -precancels -precancerous -precapitalist -precapitalists -precarious -precariously -precariousness -precariousnesses -precast -precasting -precasts -precatory -precaution -precautionary -precautioned -precautioning -precautions -precava -precavae -precaval -precede -preceded -precedence -precedences -precedencies -precedency -precedent -precedents -precedes -preceding -precensor -precensored -precensoring -precensors -precent -precented -precenting -precentor -precentorial -precentors -precentorship -precentorships -precents -precept -preceptive -preceptor -preceptorial -preceptorials -preceptories -preceptors -preceptorship -preceptorships -preceptory -precepts -precertification -precertifications -precertified -precertifies -precertify -precertifying -precess -precessed -precesses -precessing -precession -precessional -precessions -precheck -prechecked -prechecking -prechecks -prechill -prechilled -prechilling -prechills -precieuse -precieux -precinct -precincts -preciosities -preciosity -precious -preciouses -preciously -preciousness -preciousnesses -precipe -precipes -precipice -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 -precis -precise -precised -precisely -preciseness -precisenesses -preciser -precises -precisest -precisian -precisians -precising -precision -precisionist -precisionists -precisions -precited -preclean -precleaned -precleaning -precleans -preclear -preclearance -preclearances -precleared -preclearing -preclears -preclinical -preclude -precluded -precludes -precluding -preclusion -preclusions -preclusive -preclusively -precocial -precocious -precociously -precociousness -precociousnesses -precocities -precocity -precode -precoded -precodes -precoding -precognition -precognitions -precognitive -precoital -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 -precook -precooked -precooking -precooks -precool -precooled -precooling -precools -precopulatory -precoup -precrash -precrease -precreased -precreases -precreasing -precrisis -precritical -precure -precured -precures -precuring -precursor -precursors -precursory -precut -precuts -precutting -predaceous -predaceousness -predaceousnesses -predacious -predacities -predacity -predate -predated -predates -predating -predation -predations -predator -predators -predatory -predawn -predawns -predecease -predeceased -predeceases -predeceasing -predecessor -predecessors -predefine -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 -prediabetic -prediabetics -predial -predicable -predicables -predicament -predicaments -predicate -predicated -predicates -predicating -predication -predications -predicative -predicatively -predicatory -predict -predictabilities -predictability -predictable -predictably -predicted -predicting -prediction -predictions -predictive -predictively -predictor -predictors -predicts -predigest -predigested -predigesting -predigestion -predigestions -predigests -predilection -predilections -predinner -predischarge -predischarged -predischarges -predischarging -prediscoveries -prediscovery -predispose -predisposed -predisposes -predisposing -predisposition -predispositions -predive -prednisolone -prednisolones -prednisone -prednisones -predoctoral -predominance -predominances -predominancies -predominancy -predominant -predominantly -predominate -predominated -predominately -predominates -predominating -predomination -predominations -predrill -predrilled -predrilling -predrills -predusk -predusks -predynastic -pree -preeclampsia -preeclampsias -preeclamptic -preed -preedit -preedited -preediting -preedits -preeing -preelect -preelected -preelecting -preelection -preelections -preelectric -preelects -preembargo -preemergence -preemergent -preemie -preemies -preeminence -preeminences -preeminent -preeminently -preemployment -preemployments -preempt -preempted -preempting -preemption -preemptions -preemptive -preemptively -preemptor -preemptors -preemptory -preempts -preen -preenact -preenacted -preenacting -preenacts -preened -preener -preeners -preening -preenrollment -preenrollments -preens -preerect -preerected -preerecting -preerects -prees -preestablish -preestablished -preestablishes -preestablishing -preethical -preexilic -preexist -preexisted -preexistence -preexistences -preexistent -preexisting -preexists -preexperiment -preexperiments -prefab -prefabbed -prefabbing -prefabricate -prefabricated -prefabricates -prefabricating -prefabrication -prefabrications -prefabs -preface -prefaced -prefacer -prefacers -prefaces -prefacing -prefade -prefaded -prefades -prefading -prefascist -prefascists -prefatory -prefect -prefects -prefectural -prefecture -prefectures -prefer -preferabilities -preferability -preferable -preferably -preference -preferences -preferential -preferentially -preferment -preferments -preferred -preferrer -preferrers -preferring -prefers -prefeudal -prefight -prefiguration -prefigurations -prefigurative -prefiguratively -prefigurativeness -prefigurativenesses -prefigure -prefigured -prefigurement -prefigurements -prefigures -prefiguring -prefile -prefiled -prefiles -prefiling -prefilled -prefinance -prefinanced -prefinances -prefinancing -prefire -prefired -prefires -prefiring -prefix -prefixal -prefixed -prefixes -prefixing -preflame -preflight -prefocus -prefocused -prefocuses -prefocusing -prefocussed -prefocusses -prefocussing -preform -preformat -preformation -preformationist -preformationists -preformations -preformats -preformatted -preformatting -preformed -preforming -preforms -preformulate -preformulated -preformulates -preformulating -prefrank -prefranked -prefranking -prefranks -prefreeze -prefreezes -prefreezing -prefreshman -prefreshmen -prefrontal -prefrontals -prefroze -prefrozen -pregame -preganglionic -pregenital -preggers -pregnabilities -pregnability -pregnable -pregnancies -pregnancy -pregnant -pregnantly -pregnenolone -pregnenolones -preharvest -preharvests -preheadache -prehearing -prehearings -preheat -preheated -preheater -preheaters -preheating -preheats -prehensile -prehensilities -prehensility -prehension -prehensions -prehiring -prehistorian -prehistorians -prehistoric -prehistorical -prehistorically -prehistories -prehistory -preholiday -prehominid -prehominids -prehuman -prehumans -preignition -preignitions -preimplantation -preinaugural -preincorporation -preincorporations -preinduction -preinductions -preindustrial -preinterview -preinterviewed -preinterviewing -preinterviews -preinvasion -prejudge -prejudged -prejudger -prejudgers -prejudges -prejudging -prejudgment -prejudgments -prejudice -prejudiced -prejudices -prejudicial -prejudicially -prejudicialness -prejudicialnesses -prejudicing -prekindergarten -prekindergartens -prelacies -prelacy -prelapsarian -prelate -prelates -prelatic -prelature -prelatures -prelaunch -prelaw -prelect -prelected -prelecting -prelection -prelections -prelects -prelegal -prelibation -prelibations -prelife -prelim -preliminaries -preliminarily -preliminary -prelimit -prelimited -prelimiting -prelimits -prelims -preliterary -preliterate -preliterates -prelives -prelogical -prelude -preluded -preluder -preluders -preludes -preluding -prelunch -preluncheon -prelusion -prelusions -prelusive -prelusively -premade -premalignant -preman -premanufacture -premanufactured -premanufactures -premanufacturing -premarital -premaritally -premarket -premarketing -premarketings -premarriage -premarriages -premature -prematurely -prematureness -prematurenesses -prematures -prematurities -prematurity -premaxilla -premaxillae -premaxillaries -premaxillary -premeal -premeasure -premeasured -premeasures -premeasuring -premed -premedic -premedical -premedics -premedieval -premeditate -premeditated -premeditatedly -premeditates -premeditating -premeditation -premeditations -premeditative -premeditator -premeditators -premeds -premeet -premeiotic -premen -premenopausal -premenstrual -premenstrually -premerger -premie -premier -premiere -premiered -premieres -premiering -premiers -premiership -premierships -premies -premigration -premillenarian -premillenarianism -premillenarianisms -premillenarians -premillennial -premillennialism -premillennialisms -premillennialist -premillennialists -premillennially -premise -premised -premises -premising -premiss -premisses -premium -premiums -premix -premixed -premixes -premixing -premixt -premodern -premodification -premodifications -premodified -premodifies -premodify -premodifying -premoisten -premoistened -premoistening -premoistens -premolar -premolars -premold -premolded -premolding -premolds -premolt -premonish -premonished -premonishes -premonishing -premonition -premonitions -premonitorily -premonitory -premoral -premorse -premune -premunition -premunitions -premycotic -prename -prenames -prenatal -prenatally -prenomen -prenomens -prenomina -prenominate -prenominated -prenominates -prenominating -prenomination -prenominations -prenoon -prenotification -prenotifications -prenotified -prenotifies -prenotify -prenotifying -prenotion -prenotions -prentice -prenticed -prentices -prenticing -prenumber -prenumbered -prenumbering -prenumbers -prenuptial -preoccupancies -preoccupancy -preoccupation -preoccupations -preoccupied -preoccupies -preoccupy -preoccupying -preopening -preoperational -preoperative -preoperatively -preordain -preordained -preordaining -preordainment -preordainments -preordains -preorder -preordered -preordering -preorders -preordination -preordinations -preovulatory -prep -prepack -prepackage -prepackaged -prepackages -prepackaging -prepacked -prepacking -prepacks -prepaid -preparation -preparations -preparative -preparatively -preparatives -preparator -preparatorily -preparators -preparatory -prepare -prepared -preparedly -preparedness -preparednesses -preparer -preparers -prepares -preparing -prepaste -prepasted -prepastes -prepasting -prepay -prepaying -prepayment -prepayments -prepays -prepense -prepensely -preperformance -preperformances -prepill -preplace -preplaced -preplaces -preplacing -preplan -preplanned -preplanning -preplans -preplant -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 -prepotent -prepotently -prepped -preppie -preppier -preppies -preppiest -preppily -preppiness -preppinesses -prepping -preppy -preprandial -prepreg -prepregs -preprepared -prepresidential -preprice -prepriced -preprices -prepricing -preprimary -preprint -preprinted -preprinting -preprints -preprocess -preprocessed -preprocesses -preprocessing -preprocessor -preprocessors -preproduction -preproductions -preprofessional -preprogram -preprogramed -preprograming -preprogrammed -preprogramming -preprograms -preps -prepsychedelic -prepuberal -prepubertal -prepuberties -prepuberty -prepubescence -prepubescences -prepubescent -prepubescents -prepublication -prepublications -prepuce -prepuces -prepunch -prepunched -prepunches -prepunching -prepupal -prepurchase -prepurchased -prepurchases -prepurchasing -preputial -prequalification -prequalifications -prequalified -prequalifies -prequalify -prequalifying -prequel -prequels -prerace -prerecession -prerecord -prerecorded -prerecording -prerecords -preregister -preregistered -preregistering -preregisters -preregistration -preregistrations -prerehearsal -prerelease -prereleases -prerenal -prerequire -prerequired -prerequires -prerequiring -prerequisite -prerequisites -preretirement -preretirements -prereturn -prereview -prerevisionist -prerevisionists -prerevolution -prerevolutionary -prerinse -prerinses -preriot -prerock -prerogative -prerogatived -prerogatives -preromantic -presa -presage -presaged -presageful -presager -presagers -presages -presaging -presale -presanctified -presbyope -presbyopes -presbyopia -presbyopias -presbyopic -presbyopics -presbyter -presbyterate -presbyterates -presbyterial -presbyterially -presbyterials -presbyterian -presbyteries -presbyters -presbytery -preschedule -prescheduled -preschedules -prescheduling -preschool -preschooler -preschoolers -preschools -prescience -presciences -prescient -prescientific -presciently -prescind -prescinded -prescinding -prescinds -prescore -prescored -prescores -prescoring -prescreen -prescreened -prescreening -prescreenings -prescreens -prescribe -prescribed -prescriber -prescribers -prescribes -prescribing -prescript -prescription -prescriptions -prescriptive -prescriptively -prescripts -prese -preseason -preseasons -preselect -preselected -preselecting -preselection -preselections -preselects -presell -preselling -presells -presence -presences -present -presentabilities -presentability -presentable -presentableness -presentablenesses -presentably -presentation -presentational -presentations -presentative -presented -presentee -presentees -presentence -presentenced -presentences -presentencing -presentencings -presenter -presenters -presentient -presentiment -presentimental -presentiments -presenting -presentism -presentisms -presentist -presently -presentment -presentments -presentness -presentnesses -presents -preservabilities -preservability -preservable -preservation -preservationist -preservationists -preservations -preservative -preservatives -preserve -preserved -preserver -preservers -preserves -preservice -preserving -preset -presets -presetting -presettlement -presettlements -preshape -preshaped -preshapes -preshaping -preshow -preshowed -preshowing -preshown -preshows -preshrank -preshrink -preshrinking -preshrinks -preshrunk -preshrunken -preside -presided -presidencies -presidency -president -presidential -presidentially -presidents -presidentship -presidentships -presider -presiders -presides -presidia -presidial -presidiary -presiding -presidio -presidios -presidium -presidiums -presift -presifted -presifting -presifts -presignified -presignifies -presignify -presignifying -preslaughter -presleep -preslice -presliced -preslices -preslicing -presoak -presoaked -presoaking -presoaks -presold -presong -presort -presorted -presorting -presorts -prespecified -prespecifies -prespecify -prespecifying -presplit -press -pressboard -pressboards -pressed -presser -pressers -presses -pressing -pressingly -pressings -pressman -pressmark -pressmarks -pressmen -pressor -pressors -pressroom -pressrooms -pressrun -pressruns -pressure -pressured -pressureless -pressures -pressuring -pressurise -pressurised -pressurises -pressurising -pressurization -pressurizations -pressurize -pressurized -pressurizer -pressurizers -pressurizes -pressurizing -presswork -pressworks -prest -prestamp -prestamped -prestamping -prestamps -prester -presterilize -presterilized -presterilizes -presterilizing -presters -prestidigitation -prestidigitations -prestidigitator -prestidigitators -prestige -prestigeful -prestiges -prestigious -prestigiously -prestigiousness -prestigiousnesses -prestissimo -presto -prestorage -prestorages -prestos -prestress -prestressed -prestresses -prestressing -prestrike -prestructure -prestructured -prestructures -prestructuring -prests -presumable -presumably -presume -presumed -presumedly -presumer -presumers -presumes -presuming -presumingly -presummit -presumption -presumptions -presumptive -presumptively -presumptuous -presumptuously -presumptuousness -presumptuousnesses -presuppose -presupposed -presupposes -presupposing -presupposition -presuppositional -presuppositions -presurgery -presweeten -presweetened -presweetening -presweetens -presymptomatic -presynaptic -presynaptically -pretape -pretaped -pretapes -pretaping -pretaste -pretasted -pretastes -pretasting -pretax -pretechnological -preteen -preteens -pretelevision -pretence -pretences -pretend -pretended -pretendedly -pretender -pretenders -pretending -pretends -pretense -pretenses -pretension -pretensioned -pretensioning -pretensionless -pretensions -pretentious -pretentiously -pretentiousness -pretentiousnesses -preterit -preterite -preterites -preterits -preterm -preterminal -pretermination -preterminations -pretermission -pretermissions -pretermit -pretermits -pretermitted -pretermitting -preternatural -preternaturally -preternaturalness -preternaturalnesses -pretest -pretested -pretesting -pretests -pretext -pretexted -pretexting -pretexts -pretheater -pretor -pretorian -pretorians -pretors -pretournament -pretournaments -pretrain -pretrained -pretraining -pretrains -pretravel -pretreat -pretreated -pretreating -pretreatment -pretreatments -pretreats -pretrial -pretrials -pretrim -pretrimmed -pretrimming -pretrims -prettied -prettier -pretties -prettiest -prettification -prettifications -prettified -prettifier -prettifiers -prettifies -prettify -prettifying -prettily -prettiness -prettinesses -pretty -prettying -prettyish -pretype -pretyped -pretypes -pretyping -pretzel -pretzels -preunification -preunion -preunions -preunite -preunited -preunites -preuniting -preuniversity -prevail -prevailed -prevailing -prevails -prevalence -prevalences -prevalent -prevalently -prevalents -prevaricate -prevaricated -prevaricates -prevaricating -prevarication -prevarications -prevaricator -prevaricators -prevenient -preveniently -prevent -preventabilities -preventability -preventable -preventative -preventatives -prevented -preventer -preventers -preventible -preventing -prevention -preventions -preventive -preventively -preventiveness -preventivenesses -preventives -prevents -preverbal -previable -preview -previewed -previewer -previewers -previewing -previews -previous -previously -previousness -previousnesses -previse -prevised -previses -prevising -prevision -previsional -previsionary -previsioned -previsioning -previsions -previsor -previsors -prevocalic -prevocational -prevue -prevued -prevues -prevuing -prewar -prewarm -prewarmed -prewarming -prewarms -prewarn -prewarned -prewarning -prewarns -prewash -prewashed -prewashes -prewashing -preweaning -prework -prewrap -prewrapped -prewrapping -prewraps -prewriting -prewritings -prex -prexes -prexies -prexy -prey -preyed -preyer -preyers -preying -preys -prez -prezes -priapean -priapi -priapic -priapism -priapisms -priapus -priapuses -price -priced -priceless -pricelessly -pricer -pricers -prices -pricey -pricier -priciest -pricing -prick -pricked -pricker -prickers -pricket -prickets -prickier -prickiest -pricking -prickings -prickle -prickled -prickles -pricklier -prickliest -prickliness -pricklinesses -prickling -prickly -pricks -pricky -pricy -pride -prided -prideful -pridefully -pridefulness -pridefulnesses -prides -priding -pried -priedieu -priedieus -priedieux -prier -priers -pries -priest -priested -priestess -priestesses -priesthood -priesthoods -priesting -priestlier -priestliest -priestliness -priestlinesses -priestly -priests -prig -prigged -priggeries -priggery -prigging -priggish -priggishly -priggishness -priggishnesses -priggism -priggisms -prigs -prill -prilled -prilling -prills -prim -prima -primacies -primacy -primage -primages -primal -primalities -primality -primaries -primarily -primary -primas -primatal -primatals -primate -primates -primateship -primateships -primatial -primatological -primatologies -primatologist -primatologists -primatology -primavera -prime -primed -primely -primeness -primenesses -primer -primero -primeros -primers -primes -primeval -primevally -primi -primine -primines -priming -primings -primipara -primiparae -primiparas -primiparous -primitive -primitively -primitiveness -primitivenesses -primitives -primitivism -primitivisms -primitivist -primitivistic -primitivists -primitivities -primitivity -primly -primmed -primmer -primmest -primming -primness -primnesses -primo -primogenitor -primogenitors -primogeniture -primogenitures -primordia -primordial -primordially -primordium -primos -primp -primped -primping -primps -primrose -primroses -prims -primsie -primula -primulas -primus -primuses -prince -princedom -princedoms -princelet -princelets -princelier -princeliest -princeliness -princelinesses -princeling -princelings -princely -princes -princeship -princeships -princess -princesse -princesses -principal -principalities -principality -principally -principals -principalship -principalships -principe -principi -principia -principium -principle -principled -principles -princock -princocks -princox -princoxes -prink -prinked -prinker -prinkers -prinking -prinks -print -printabilities -printability -printable -printed -printer -printeries -printers -printery -printhead -printheads -printing -printings -printless -printmaker -printmakers -printmaking -printmakings -printout -printouts -prints -prion -prions -prior -priorate -priorates -prioress -prioresses -priories -priorities -prioritization -prioritizations -prioritize -prioritized -prioritizes -prioritizing -priority -priorly -priors -priorship -priorships -priory -prise -prised -prisere -priseres -prises -prising -prism -prismatic -prismatically -prismatoid -prismatoids -prismoid -prismoidal -prismoids -prisms -prison -prisoned -prisoner -prisoners -prisoning -prisons -priss -prissed -prisses -prissier -prissies -prissiest -prissily -prissiness -prissinesses -prissing -prissy -pristane -pristanes -pristine -pristinely -prithee -privacies -privacy -privatdocent -privatdocents -privatdozent -privatdozents -private -privateer -privateered -privateering -privateers -privately -privateness -privatenesses -privater -privates -privatest -privation -privations -privatise -privatised -privatises -privatising -privatism -privatisms -privative -privatively -privatives -privatization -privatizations -privatize -privatized -privatizes -privatizing -privet -privets -privier -privies -priviest -privilege -privileged -privileges -privileging -privily -privities -privity -privy -prize -prized -prizefight -prizefighter -prizefighters -prizefighting -prizefightings -prizefights -prizer -prizers -prizes -prizewinner -prizewinners -prizewinning -prizing -pro -proa -proabortion -proactive -proas -probabilism -probabilisms -probabilist -probabilistic -probabilistically -probabilists -probabilities -probability -probable -probables -probably -proband -probands -probang -probangs -probate -probated -probates -probating -probation -probational -probationally -probationary -probationer -probationers -probations -probative -probatory -probe -probed -probenecid -probenecids -prober -probers -probes -probing -probit -probities -probits -probity -problem -problematic -problematical -problematically -problematics -problems -proboscidean -proboscideans -proboscides -proboscidian -proboscidians -proboscis -proboscises -procaine -procaines -procambia -procambial -procambium -procambiums -procarbazine -procarbazines -procarp -procarps -procaryote -procaryotes -procathedral -procathedrals -procedural -procedurally -procedurals -procedure -procedures -proceed -proceeded -proceeding -proceedings -proceeds -procephalic -procercoid -procercoids -process -processabilities -processability -processable -processed -processes -processibilities -processibility -processible -processing -procession -processional -processionally -processionals -processioned -processioning -processions -processor -processors -prochain -prochein -proclaim -proclaimed -proclaimer -proclaimers -proclaiming -proclaims -proclamation -proclamations -proclitic -proclitics -proclivities -proclivity -proconsul -proconsular -proconsulate -proconsulates -proconsuls -proconsulship -proconsulships -procrastinate -procrastinated -procrastinates -procrastinating -procrastination -procrastinations -procrastinator -procrastinators -procreant -procreate -procreated -procreates -procreating -procreation -procreations -procreative -procreator -procreators -procrustean -procryptic -proctodaea -proctodaeum -proctodaeums -proctologic -proctological -proctologies -proctologist -proctologists -proctology -proctor -proctored -proctorial -proctoring -proctors -proctorship -proctorships -procumbent -procurable -procural -procurals -procuration -procurations -procurator -procuratorial -procurators -procure -procured -procurement -procurements -procurer -procurers -procures -procuring -prod -prodded -prodder -prodders -prodding -prodigal -prodigalities -prodigality -prodigally -prodigals -prodigies -prodigious -prodigiously -prodigiousness -prodigiousnesses -prodigy -prodromal -prodromata -prodrome -prodromes -prods -produce -produced -producer -producers -produces -producible -producing -product -production -productional -productions -productive -productively -productiveness -productivenesses -productivities -productivity -products -proem -proemial -proems -proenzyme -proenzymes -proestrus -proestruses -proette -proettes -prof -profanation -profanations -profanatory -profane -profaned -profanely -profaneness -profanenesses -profaner -profaners -profanes -profaning -profanities -profanity -profess -professed -professedly -professes -professing -profession -professional -professionalism -professionalisms -professionalization -professionalizations -professionalize -professionalized -professionalizes -professionalizing -professionally -professionals -professions -professor -professorate -professorates -professorial -professorially -professoriat -professoriate -professoriates -professoriats -professors -professorship -professorships -proffer -proffered -proffering -proffers -proficiencies -proficiency -proficient -proficiently -proficients -profile -profiled -profiler -profilers -profiles -profiling -profit -profitabilities -profitability -profitable -profitableness -profitablenesses -profitably -profited -profiteer -profiteered -profiteering -profiteers -profiter -profiterole -profiteroles -profiters -profiting -profitless -profits -profitwise -profligacies -profligacy -profligate -profligately -profligates -profluent -profound -profounder -profoundest -profoundly -profoundness -profoundnesses -profounds -profs -profundities -profundity -profuse -profusely -profuseness -profusenesses -profusion -profusions -prog -progenies -progenitor -progenitors -progeny -progeria -progerias -progestational -progesterone -progesterones -progestin -progestins -progestogen -progestogenic -progestogens -progged -progger -proggers -progging -proglottid -proglottides -proglottids -proglottis -prognathism -prognathisms -prognathous -prognose -prognosed -prognoses -prognosing -prognosis -prognostic -prognosticate -prognosticated -prognosticates -prognosticating -prognostication -prognostications -prognosticative -prognosticator -prognosticators -prognostics -prograde -program -programed -programer -programers -programing -programings -programmabilities -programmability -programmable -programmables -programmatic -programmatically -programme -programmed -programmer -programmers -programmes -programming -programmings -programs -progress -progressed -progresses -progressing -progression -progressional -progressions -progressive -progressively -progressiveness -progressivenesses -progressives -progressivism -progressivisms -progressivist -progressivistic -progressivists -progressivities -progressivity -progs -prohibit -prohibited -prohibiting -prohibition -prohibitionist -prohibitionists -prohibitions -prohibitive -prohibitively -prohibitiveness -prohibitivenesses -prohibitory -prohibits -proinsulin -proinsulins -project -projectable -projected -projectile -projectiles -projecting -projection -projectional -projectionist -projectionists -projections -projective -projectively -projector -projectors -projects -projet -projets -prokaryote -prokaryotes -prokaryotic -prolabor -prolactin -prolactins -prolamin -prolamine -prolamines -prolamins -prolan -prolans -prolapse -prolapsed -prolapses -prolapsing -prolate -prole -proleg -prolegomena -prolegomenon -prolegomenous -prolegs -prolepses -prolepsis -proleptic -proleptically -proles -proletarian -proletarianise -proletarianised -proletarianises -proletarianising -proletarianization -proletarianizations -proletarianize -proletarianized -proletarianizes -proletarianizing -proletarians -proletariat -proletariats -proliferate -proliferated -proliferates -proliferating -proliferation -proliferations -proliferative -prolific -prolificacies -prolificacy -prolifically -prolificities -prolificity -prolificness -prolificnesses -proline -prolines -prolix -prolixities -prolixity -prolixly -prolocutor -prolocutors -prolog -prologed -prologing -prologize -prologized -prologizes -prologizing -prologs -prologue -prologued -prologues -prologuing -prologuize -prologuized -prologuizes -prologuizing -prolong -prolongation -prolongations -prolonge -prolonged -prolonger -prolongers -prolonges -prolonging -prolongs -prolusion -prolusions -prolusory -prom -promenade -promenaded -promenader -promenaders -promenades -promenading -promethium -promethiums -promine -prominence -prominences -prominent -prominently -promines -promiscuities -promiscuity -promiscuous -promiscuously -promiscuousness -promiscuousnesses -promise -promised -promisee -promisees -promiser -promisers -promises -promising -promisingly -promisor -promisors -promissory -promo -promontories -promontory -promos -promotabilities -promotability -promotable -promote -promoted -promoter -promoters -promotes -promoting -promotion -promotional -promotions -promotive -promotiveness -promotivenesses -prompt -promptbook -promptbooks -prompted -prompter -prompters -promptest -prompting -promptitude -promptitudes -promptly -promptness -promptnesses -prompts -proms -promulgate -promulgated -promulgates -promulgating -promulgation -promulgations -promulgator -promulgators -promulge -promulged -promulges -promulging -pronate -pronated -pronates -pronating -pronation -pronations -pronator -pronatores -pronators -prone -pronely -proneness -pronenesses -pronephra -pronephric -pronephroi -pronephros -prong -pronged -pronghorn -pronghorns -pronging -prongs -pronominal -pronominally -pronota -pronotum -pronoun -pronounce -pronounceabilities -pronounceability -pronounceable -pronounced -pronouncedly -pronouncement -pronouncements -pronouncer -pronouncers -pronounces -pronouncing -pronouns -pronto -pronuclear -pronuclei -pronucleus -pronucleuses -pronunciamento -pronunciamentoes -pronunciamentos -pronunciation -pronunciational -pronunciations -proof -proofed -proofer -proofers -proofing -proofread -proofreader -proofreaders -proofreading -proofreads -proofroom -proofrooms -proofs -prop -propaedeutic -propaedeutics -propagable -propaganda -propagandas -propagandist -propagandistic -propagandistically -propagandists -propagandize -propagandized -propagandizer -propagandizers -propagandizes -propagandizing -propagate -propagated -propagates -propagating -propagation -propagations -propagative -propagator -propagators -propagule -propagules -propane -propanes -propel -propellant -propellants -propelled -propellent -propellents -propeller -propellers -propelling -propellor -propellors -propels -propend -propended -propending -propends -propene -propenes -propenol -propenols -propense -propensities -propensity -propenyl -proper -properdin -properdins -properer -properest -properly -properness -propernesses -propers -propertied -properties -property -propertyless -propertylessness -propertylessnesses -prophage -prophages -prophase -prophases -prophasic -prophecies -prophecy -prophesied -prophesier -prophesiers -prophesies -prophesy -prophesying -prophet -prophetess -prophetesses -prophethood -prophethoods -prophetic -prophetical -prophetically -prophets -prophylactic -prophylactically -prophylactics -prophylaxes -prophylaxis -propine -propined -propines -propining -propinquities -propinquity -propionate -propionates -propitiate -propitiated -propitiates -propitiating -propitiation -propitiations -propitiator -propitiators -propitiatory -propitious -propitiously -propitiousness -propitiousnesses -propjet -propjets -proplastid -proplastids -propman -propmen -propolis -propolises -propone -proponed -proponent -proponents -propones -proponing -proportion -proportionable -proportionably -proportional -proportionalities -proportionality -proportionally -proportionals -proportionate -proportionated -proportionately -proportionates -proportionating -proportioned -proportioning -proportions -proposal -proposals -propose -proposed -proposer -proposers -proposes -proposing -propositi -proposition -propositional -propositioned -propositioning -propositions -propositus -propound -propounded -propounder -propounders -propounding -propounds -propoxyphene -propoxyphenes -propped -propping -propraetor -propraetors -propranolol -propranolols -propretor -propretors -proprietaries -proprietary -proprieties -proprietor -proprietorial -proprietors -proprietorship -proprietorships -proprietress -proprietresses -propriety -proprioception -proprioceptions -proprioceptive -proprioceptor -proprioceptors -props -proptoses -proptosis -propulsion -propulsions -propulsive -propyl -propyla -propylaea -propylaeum -propylene -propylenes -propylic -propylon -propyls -prorate -prorated -prorates -prorating -proration -prorations -prorogate -prorogated -prorogates -prorogating -prorogation -prorogations -prorogue -prorogued -prorogues -proroguing -pros -prosaic -prosaically -prosaism -prosaisms -prosaist -prosaists -prosateur -prosateurs -prosauropod -prosauropods -proscenia -proscenium -prosceniums -prosciutti -prosciutto -prosciuttos -proscribe -proscribed -proscriber -proscribers -proscribes -proscribing -proscription -proscriptions -proscriptive -proscriptively -prose -prosect -prosected -prosecting -prosector -prosectors -prosects -prosecutable -prosecute -prosecuted -prosecutes -prosecuting -prosecution -prosecutions -prosecutor -prosecutorial -prosecutors -prosed -proselyte -proselyted -proselytes -proselyting -proselytise -proselytised -proselytises -proselytising -proselytism -proselytisms -proselytization -proselytizations -proselytize -proselytized -proselytizer -proselytizers -proselytizes -proselytizing -proseminar -proseminars -prosencephala -prosencephalic -prosencephalon -proser -prosers -proses -prosier -prosiest -prosily -prosimian -prosimians -prosiness -prosinesses -prosing -prosit -proso -prosobranch -prosobranchs -prosodic -prosodical -prosodically -prosodies -prosodist -prosodists -prosody -prosoma -prosomal -prosomas -prosomata -prosopographical -prosopographies -prosopography -prosopopoeia -prosopopoeias -prosos -prospect -prospected -prospecting -prospective -prospectively -prospector -prospectors -prospects -prospectus -prospectuses -prosper -prospered -prospering -prosperities -prosperity -prosperous -prosperously -prosperousness -prosperousnesses -prospers -pross -prosses -prossie -prossies -prost -prostacyclin -prostacyclins -prostaglandin -prostaglandins -prostate -prostatectomies -prostatectomy -prostates -prostatic -prostatism -prostatisms -prostatitis -prostatitises -prostheses -prosthesis -prosthetic -prosthetically -prosthetics -prosthetist -prosthetists -prosthodontics -prosthodontist -prosthodontists -prostie -prosties -prostitute -prostituted -prostitutes -prostituting -prostitution -prostitutions -prostitutor -prostitutors -prostomia -prostomial -prostomium -prostrate -prostrated -prostrates -prostrating -prostration -prostrations -prostyle -prostyles -prosy -protactinium -protactiniums -protagonist -protagonists -protamin -protamine -protamines -protamins -protases -protasis -protatic -protea -protean -proteans -proteas -protease -proteases -protect -protectant -protectants -protected -protecting -protection -protectionism -protectionisms -protectionist -protectionists -protections -protective -protectively -protectiveness -protectivenesses -protector -protectoral -protectorate -protectorates -protectories -protectors -protectorship -protectorships -protectory -protectress -protectresses -protects -protege -protegee -protegees -proteges -protei -proteid -proteide -proteides -proteids -protein -proteinaceous -proteinase -proteinases -proteins -proteinuria -proteinurias -protend -protended -protending -protends -protensive -protensively -proteoglycan -proteoglycans -proteolyses -proteolysis -proteolytic -proteolytically -proteose -proteoses -protest -protestant -protestants -protestation -protestations -protested -protester -protesters -protesting -protestor -protestors -protests -proteus -proteuses -prothalamia -prothalamion -prothalamium -prothalli -prothallia -prothallium -prothallus -prothalluses -protheses -prothesis -prothetic -prothonotarial -prothonotaries -prothonotary -prothoraces -prothoracic -prothorax -prothoraxes -prothrombin -prothrombins -protist -protistan -protistans -protists -protium -protiums -protocol -protocoled -protocoling -protocolled -protocolling -protocols -protoderm -protoderms -protogalaxies -protogalaxy -protohistorian -protohistorians -protohistoric -protohistories -protohistory -protohuman -protohumans -protolanguage -protolanguages -protomartyr -protomartyrs -proton -protonate -protonated -protonates -protonating -protonation -protonations -protonema -protonemal -protonemata -protonematal -protonic -protonotaries -protonotary -protons -protopathic -protophloem -protophloems -protoplanet -protoplanetary -protoplanets -protoplasm -protoplasmic -protoplasms -protoplast -protoplasts -protopod -protopods -protoporphyrin -protoporphyrins -protostar -protostars -protostele -protosteles -protostelic -protostome -protostomes -prototroph -prototrophic -prototrophies -prototrophs -prototrophy -prototypal -prototype -prototyped -prototypes -prototypic -prototypical -prototypically -prototyping -protoxid -protoxids -protoxylem -protoxylems -protozoa -protozoal -protozoan -protozoans -protozoologies -protozoologist -protozoologists -protozoology -protozoon -protozoons -protract -protracted -protractile -protracting -protraction -protractions -protractive -protractor -protractors -protracts -protreptic -protreptics -protrude -protruded -protrudes -protruding -protrusible -protrusion -protrusions -protrusive -protrusively -protrusiveness -protrusivenesses -protuberance -protuberances -protuberant -protuberantly -protyl -protyle -protyles -protyls -proud -prouder -proudest -proudful -proudhearted -proudly -prounion -proustite -proustites -provable -provableness -provablenesses -provably -provascular -prove -proved -proven -provenance -provenances -provender -provenders -provenience -proveniences -provenly -proventriculi -proventriculus -prover -proverb -proverbed -proverbial -proverbially -proverbing -proverbs -provers -proves -provide -provided -providence -providences -provident -providential -providentially -providently -provider -providers -provides -providing -province -provinces -provincial -provincialism -provincialisms -provincialist -provincialists -provincialities -provinciality -provincialization -provincializations -provincialize -provincialized -provincializes -provincializing -provincially -provincials -proving -proviral -provirus -proviruses -provision -provisional -provisionally -provisionals -provisionary -provisioned -provisioner -provisioners -provisioning -provisions -proviso -provisoes -provisory -provisos -provitamin -provitamins -provocateur -provocateurs -provocation -provocations -provocative -provocatively -provocativeness -provocativenesses -provocatives -provoke -provoked -provoker -provokers -provokes -provoking -provokingly -provolone -provolones -provost -provosts -prow -prowar -prower -prowess -prowesses -prowest -prowl -prowled -prowler -prowlers -prowling -prowls -prows -proxemic -proxemics -proxies -proximal -proximally -proximate -proximately -proximateness -proximatenesses -proximities -proximity -proximo -proxy -prude -prudence -prudences -prudent -prudential -prudentially -prudently -pruderies -prudery -prudes -prudish -prudishly -prudishness -prudishnesses -pruinose -prunable -prune -pruned -prunella -prunellas -prunelle -prunelles -prunello -prunellos -pruner -pruners -prunes -pruning -prunus -prunuses -prurience -pruriences -pruriencies -pruriency -prurient -pruriently -prurigo -prurigos -pruritic -pruritus -prurituses -prussianise -prussianised -prussianises -prussianising -prussianization -prussianizations -prussianize -prussianized -prussianizes -prussianizing -prussic -pruta -prutah -prutot -prutoth -pry -pryer -pryers -prying -pryingly -prythee -psalm -psalmbook -psalmbooks -psalmed -psalmic -psalming -psalmist -psalmists -psalmodies -psalmody -psalms -psalter -psalteria -psalteries -psalterium -psalters -psaltery -psaltries -psaltry -psammite -psammites -psammon -psammons -pschent -pschents -psephite -psephites -psephological -psephologies -psephologist -psephologists -psephology -pseud -pseudepigraph -pseudepigrapha -pseudepigraphies -pseudepigraphon -pseudepigraphs -pseudepigraphy -pseudo -pseudoallele -pseudoalleles -pseudocholinesterase -pseudocholinesterases -pseudoclassic -pseudoclassicism -pseudoclassicisms -pseudoclassics -pseudocoel -pseudocoelomate -pseudocoelomates -pseudocoels -pseudocyeses -pseudocyesis -pseudomonad -pseudomonades -pseudomonads -pseudomonas -pseudomorph -pseudomorphic -pseudomorphism -pseudomorphisms -pseudomorphous -pseudomorphs -pseudonym -pseudonymities -pseudonymity -pseudonymous -pseudonymously -pseudonymousness -pseudonymousnesses -pseudonyms -pseudoparenchyma -pseudoparenchymas -pseudoparenchymata -pseudoparenchymatous -pseudopod -pseudopodal -pseudopodia -pseudopodial -pseudopodium -pseudopods -pseudopregnancies -pseudopregnancy -pseudopregnant -pseudorandom -pseudos -pseudoscience -pseudosciences -pseudoscientific -pseudoscientist -pseudoscientists -pseudoscorpion -pseudoscorpions -pseudosophisticated -pseudosophistication -pseudosophistications -pseudotuberculoses -pseudotuberculosis -pseuds -pshaw -pshawed -pshawing -pshaws -psi -psilocin -psilocins -psilocybin -psilocybins -psilophyte -psilophytes -psilophytic -psiloses -psilosis -psilotic -psis -psittacine -psittacines -psittacoses -psittacosis -psittacotic -psoae -psoai -psoas -psoatic -psocid -psocids -psoralea -psoraleas -psoralen -psoralens -psoriases -psoriasis -psoriatic -psoriatics -psst -psych -psychasthenia -psychasthenias -psychasthenic -psychasthenics -psyche -psyched -psychedelia -psychedelias -psychedelic -psychedelically -psychedelics -psyches -psychiatric -psychiatrically -psychiatries -psychiatrist -psychiatrists -psychiatry -psychic -psychical -psychically -psychics -psyching -psycho -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 -psychos -psychoses -psychosexual -psychosexualities -psychosexuality -psychosexually -psychosis -psychosocial -psychosocially -psychosomatic -psychosomatically -psychosomatics -psychosurgeon -psychosurgeons -psychosurgeries -psychosurgery -psychosurgical -psychosyntheses -psychosynthesis -psychotherapeutic -psychotherapeutically -psychotherapies -psychotherapist -psychotherapists -psychotherapy -psychotic -psychotically -psychotics -psychotomimetic -psychotomimetically -psychotomimetics -psychotropic -psychotropics -psychrometer -psychrometers -psychrometric -psychrometries -psychrometry -psychrophilic -psychs -psylla -psyllas -psyllid -psyllids -psyllium -psylliums -psywar -psywars -ptarmigan -ptarmigans -pteranodon -pteranodons -pteridine -pteridines -pteridological -pteridologies -pteridologist -pteridologists -pteridology -pteridophyte -pteridophytes -pteridosperm -pteridosperms -pterin -pterins -pterodactyl -pterodactyls -pteropod -pteropods -pterosaur -pterosaurs -pterygia -pterygium -pterygiums -pterygoid -pterygoids -pteryla -pterylae -ptisan -ptisans -ptomain -ptomaine -ptomaines -ptomains -ptoses -ptosis -ptotic -ptyalin -ptyalins -ptyalism -ptyalisms -pub -puberal -pubertal -puberties -puberty -puberulent -pubes -pubescence -pubescences -pubescent -pubic -pubis -public -publically -publican -publicans -publication -publications -publicise -publicised -publicises -publicising -publicist -publicists -publicities -publicity -publicize -publicized -publicizes -publicizing -publicly -publicness -publicnesses -publics -publish -publishable -published -publisher -publishers -publishes -publishing -publishings -pubs -puccoon -puccoons -puce -puces -puck -pucka -pucker -puckered -puckerer -puckerers -puckerier -puckeriest -puckering -puckers -puckery -puckish -puckishly -puckishness -puckishnesses -pucks -pud -pudding -puddings -puddle -puddled -puddler -puddlers -puddles -puddlier -puddliest -puddling -puddlings -puddly -pudencies -pudency -pudenda -pudendal -pudendum -pudgier -pudgiest -pudgily -pudginess -pudginesses -pudgy -pudibund -pudic -puds -pueblo -pueblos -puerile -puerilely -puerilism -puerilisms -puerilities -puerility -puerperal -puerperia -puerperium -puff -puffball -puffballs -puffed -puffer -pufferies -puffers -puffery -puffier -puffiest -puffily -puffin -puffiness -puffinesses -puffing -puffins -puffs -puffy -pug -pugaree -pugarees -puggaree -puggarees -pugged -puggier -puggiest -pugging -puggish -puggree -puggrees -puggries -puggry -puggy -pugh -pugilism -pugilisms -pugilist -pugilistic -pugilists -pugmark -pugmarks -pugnacious -pugnaciously -pugnaciousness -pugnaciousnesses -pugnacities -pugnacity -pugree -pugrees -pugs -puisne -puisnes -puissance -puissances -puissant -puja -pujah -pujahs -pujas -puke -puked -pukes -puking -pukka -pul -pula -pulchritude -pulchritudes -pulchritudinous -pule -puled -puler -pulers -pules -puli -pulicene -pulicide -pulicides -pulik -puling -pulingly -pulings -pulis -pull -pullback -pullbacks -pulled -puller -pullers -pullet -pullets -pulley -pulleys -pulling -pullman -pullmans -pullout -pullouts -pullover -pullovers -pulls -pullulate -pullulated -pullulates -pullulating -pullulation -pullulations -pullup -pullups -pulmonary -pulmonate -pulmonates -pulmonic -pulmotor -pulmotors -pulp -pulpal -pulpally -pulped -pulper -pulpers -pulpier -pulpiest -pulpily -pulpiness -pulpinesses -pulping -pulpit -pulpital -pulpits -pulpless -pulpous -pulps -pulpwood -pulpwoods -pulpy -pulque -pulques -puls -pulsant -pulsar -pulsars -pulsate -pulsated -pulsates -pulsatile -pulsating -pulsation -pulsations -pulsator -pulsators -pulse -pulsed -pulsejet -pulsejets -pulser -pulsers -pulses -pulsing -pulsion -pulsions -pulsojet -pulsojets -pulverable -pulverise -pulverised -pulverises -pulverising -pulverizable -pulverization -pulverizations -pulverize -pulverized -pulverizer -pulverizers -pulverizes -pulverizing -pulverulent -pulvilli -pulvillus -pulvinar -pulvini -pulvinus -puma -pumas -pumelo -pumelos -pumice -pumiced -pumiceous -pumicer -pumicers -pumices -pumicing -pumicite -pumicites -pummel -pummeled -pummeling -pummelled -pummelling -pummelo -pummelos -pummels -pump -pumped -pumper -pumpernickel -pumpernickels -pumpers -pumping -pumpkin -pumpkins -pumpkinseed -pumpkinseeds -pumpless -pumplike -pumps -pun -puna -punas -punch -punchball -punchballs -punchboard -punchboards -punched -puncheon -puncheons -puncher -punchers -punches -punchier -punchiest -punchily -punchinello -punchinellos -punching -punchless -punchy -punctate -punctation -punctations -punctilio -punctilios -punctilious -punctiliously -punctiliousness -punctiliousnesses -punctual -punctualities -punctuality -punctually -punctuate -punctuated -punctuates -punctuating -punctuation -punctuations -punctuator -punctuators -puncture -punctured -punctures -puncturing -pundit -punditic -punditries -punditry -pundits -pung -pungencies -pungency -pungent -pungently -pungle -pungled -pungles -pungling -pungs -punier -puniest -punily -puniness -puninesses -punish -punishabilities -punishability -punishable -punished -punisher -punishers -punishes -punishing -punishment -punishments -punition -punitions -punitive -punitively -punitiveness -punitivenesses -punitory -punk -punka -punkah -punkahs -punkas -punker -punkers -punkest -punkey -punkeys -punkie -punkier -punkies -punkiest -punkin -punkiness -punkinesses -punkins -punkish -punks -punky -punned -punner -punners -punnet -punnets -punnier -punniest -punning -punny -puns -punster -punsters -punt -punted -punter -punters -punties -punting -punto -puntos -punts -punty -puny -pup -pupa -pupae -pupal -puparia -puparial -puparium -pupas -pupate -pupated -pupates -pupating -pupation -pupations -pupfish -pupfishes -pupil -pupilage -pupilages -pupilar -pupilary -pupillage -pupillages -pupillary -pupils -pupped -puppet -puppeteer -puppeteers -puppetlike -puppetries -puppetry -puppets -puppies -pupping -puppy -puppydom -puppydoms -puppyhood -puppyhoods -puppyish -puppylike -pups -pur -purana -puranas -puranic -purblind -purblindly -purblindness -purblindnesses -purchasable -purchase -purchased -purchaser -purchasers -purchases -purchasing -purda -purdah -purdahs -purdas -pure -pureblood -purebloods -purebred -purebreds -puree -pureed -pureeing -purees -purely -pureness -purenesses -purer -purest -purfle -purfled -purfles -purfling -purflings -purgation -purgations -purgative -purgatives -purgatorial -purgatories -purgatory -purge -purged -purger -purgers -purges -purging -purgings -puri -purification -purifications -purificator -purificators -purificatory -purified -purifier -purifiers -purifies -purify -purifying -purin -purine -purines -purins -puris -purism -purisms -purist -puristic -puristically -purists -puritan -puritanical -puritanically -puritanism -puritanisms -puritans -purities -purity -purl -purled -purlieu -purlieus -purlin -purline -purlines -purling -purlins -purloin -purloined -purloiner -purloiners -purloining -purloins -purls -puromycin -puromycins -purple -purpled -purpleheart -purplehearts -purpler -purples -purplest -purpling -purplish -purply -purport -purported -purportedly -purporting -purports -purpose -purposed -purposeful -purposefully -purposefulness -purposefulnesses -purposeless -purposelessly -purposelessness -purposelessnesses -purposely -purposes -purposing -purposive -purposively -purposiveness -purposivenesses -purpura -purpuras -purpure -purpures -purpuric -purpurin -purpurins -purr -purred -purring -purringly -purrs -purs -purse -pursed -purselike -purser -pursers -purses -pursier -pursiest -pursily -pursiness -pursinesses -pursing -purslane -purslanes -pursuance -pursuances -pursuant -pursue -pursued -pursuer -pursuers -pursues -pursuing -pursuit -pursuits -pursuivant -pursuivants -pursy -purtenance -purtenances -purulence -purulences -purulent -purvey -purveyance -purveyances -purveyed -purveying -purveyor -purveyors -purveys -purview -purviews -pus -puses -push -pushball -pushballs -pushcart -pushcarts -pushchair -pushchairs -pushdown -pushdowns -pushed -pusher -pushers -pushes -pushful -pushfulness -pushfulnesses -pushier -pushiest -pushily -pushiness -pushinesses -pushing -pushover -pushovers -pushpin -pushpins -pushrod -pushrods -pushup -pushups -pushy -pusillanimities -pusillanimity -pusillanimous -pusillanimously -pusley -pusleys -puslike -puss -pusses -pussier -pussies -pussiest -pussley -pussleys -pusslies -pusslike -pussly -pussy -pussycat -pussycats -pussyfoot -pussyfooted -pussyfooter -pussyfooters -pussyfooting -pussyfoots -pussytoes -pustulant -pustulants -pustular -pustulated -pustulation -pustulations -pustule -pustuled -pustules -put -putamen -putamina -putative -putatively -putdown -putdowns -putlog -putlogs -putoff -putoffs -puton -putons -putout -putouts -putrefaction -putrefactions -putrefactive -putrefied -putrefies -putrefy -putrefying -putrescence -putrescences -putrescent -putrescible -putrescine -putrescines -putrid -putridities -putridity -putridly -puts -putsch -putsches -putschist -putschists -putt -putted -puttee -puttees -putter -puttered -putterer -putterers -puttering -putters -putti -puttied -puttier -puttiers -putties -putting -putto -putts -putty -puttying -puttyless -puttylike -puttyroot -puttyroots -putz -putzed -putzes -putzing -puzzle -puzzled -puzzleheaded -puzzleheadedness -puzzleheadednesses -puzzlement -puzzlements -puzzler -puzzlers -puzzles -puzzling -puzzlingly -pya -pyaemia -pyaemias -pyaemic -pyas -pycnidia -pycnidial -pycnidium -pycnogonid -pycnogonids -pycnometer -pycnometers -pycnoses -pycnosis -pycnotic -pye -pyelitic -pyelitis -pyelitises -pyelonephritic -pyelonephritides -pyelonephritis -pyemia -pyemias -pyemic -pyes -pygidia -pygidial -pygidium -pygmaean -pygmean -pygmies -pygmoid -pygmy -pygmyish -pygmyism -pygmyisms -pyic -pyin -pyins -pyjamas -pyknic -pyknics -pyknoses -pyknosis -pyknotic -pylon -pylons -pylori -pyloric -pylorus -pyloruses -pyoderma -pyodermas -pyogenic -pyoid -pyorrhea -pyorrheas -pyoses -pyosis -pyracantha -pyracanthas -pyralid -pyralids -pyramid -pyramidal -pyramidally -pyramided -pyramidical -pyramiding -pyramids -pyran -pyranoid -pyranose -pyranoses -pyranoside -pyranosides -pyrans -pyrargyrite -pyrargyrites -pyre -pyrene -pyrenes -pyrenoid -pyrenoids -pyres -pyrethrin -pyrethrins -pyrethroid -pyrethroids -pyrethrum -pyrethrums -pyretic -pyrexia -pyrexial -pyrexias -pyrexic -pyrheliometer -pyrheliometers -pyrheliometric -pyric -pyridic -pyridine -pyridines -pyridoxal -pyridoxals -pyridoxamine -pyridoxamines -pyridoxine -pyridoxines -pyriform -pyrimethamine -pyrimethamines -pyrimidine -pyrimidines -pyrite -pyrites -pyritic -pyritous -pyrocatechol -pyrocatechols -pyroclastic -pyroelectric -pyroelectricities -pyroelectricity -pyrogallol -pyrogallols -pyrogen -pyrogenic -pyrogenicities -pyrogenicity -pyrogens -pyrola -pyrolas -pyrolize -pyrolized -pyrolizes -pyrolizing -pyrologies -pyrology -pyrolusite -pyrolusites -pyrolysate -pyrolysates -pyrolyses -pyrolysis -pyrolytic -pyrolytically -pyrolyzable -pyrolyzate -pyrolyzates -pyrolyze -pyrolyzed -pyrolyzer -pyrolyzers -pyrolyzes -pyrolyzing -pyromancies -pyromancy -pyromania -pyromaniac -pyromaniacal -pyromaniacs -pyromanias -pyrometallurgical -pyrometallurgies -pyrometallurgy -pyrometer -pyrometers -pyrometric -pyrometrically -pyrometries -pyrometry -pyromorphite -pyromorphites -pyrone -pyrones -pyronine -pyronines -pyroninophilic -pyrope -pyropes -pyrophoric -pyrophosphate -pyrophosphates -pyrophyllite -pyrophyllites -pyrosis -pyrosises -pyrostat -pyrostats -pyrotechnic -pyrotechnical -pyrotechnically -pyrotechnics -pyrotechnist -pyrotechnists -pyroxene -pyroxenes -pyroxenic -pyroxenite -pyroxenites -pyroxenitic -pyroxenoid -pyroxenoids -pyroxylin -pyroxylins -pyrrhic -pyrrhics -pyrrhotite -pyrrhotites -pyrrol -pyrrole -pyrroles -pyrrolic -pyrrols -pyruvate -pyruvates -python -pythoness -pythonesses -pythonic -pythons -pyuria -pyurias -pyx -pyxes -pyxides -pyxidia -pyxidium -pyxie -pyxies -pyxis -qaid -qaids -qanat -qanats -qat -qats -qindar -qindarka -qindarkas -qindars -qintar -qintars -qiviut -qiviuts -qoph -qophs -qua -quaalude -quaaludes -quack -quacked -quackeries -quackery -quacking -quackish -quackism -quackisms -quacks -quacksalver -quacksalvers -quad -quadded -quadding -quadplex -quadplexes -quadrangle -quadrangles -quadrangular -quadrans -quadrant -quadrantal -quadrantes -quadrants -quadraphonic -quadraphonics -quadrat -quadrate -quadrated -quadrates -quadratic -quadratically -quadratics -quadrating -quadrats -quadrature -quadratures -quadrennia -quadrennial -quadrennially -quadrennials -quadrennium -quadrenniums -quadric -quadricentennial -quadricentennials -quadriceps -quadricepses -quadrics -quadriga -quadrigae -quadrilateral -quadrilaterals -quadrille -quadrilles -quadrillion -quadrillions -quadrillionth -quadrillionths -quadripartite -quadriphonic -quadriphonics -quadriplegia -quadriplegias -quadriplegic -quadriplegics -quadrivalent -quadrivalents -quadrivia -quadrivial -quadrivium -quadriviums -quadroon -quadroons -quadrumanous -quadrumvir -quadrumvirate -quadrumvirates -quadrumvirs -quadruped -quadrupedal -quadrupeds -quadruple -quadrupled -quadruples -quadruplet -quadruplets -quadruplicate -quadruplicated -quadruplicates -quadruplicating -quadruplication -quadruplications -quadruplicities -quadruplicity -quadrupling -quadruply -quadrupole -quadrupoles -quads -quaere -quaeres -quaestor -quaestors -quaff -quaffed -quaffer -quaffers -quaffing -quaffs -quag -quagga -quaggas -quaggier -quaggiest -quaggy -quagmire -quagmires -quagmirier -quagmiriest -quagmiry -quags -quahaug -quahaugs -quahog -quahogs -quai -quaich -quaiches -quaichs -quaigh -quaighs -quail -quailed -quailing -quails -quaint -quainter -quaintest -quaintly -quaintness -quaintnesses -quais -quake -quaked -quaker -quakers -quakes -quakier -quakiest -quakily -quaking -quaky -quale -qualia -qualifiable -qualification -qualifications -qualified -qualifiedly -qualifier -qualifiers -qualifies -qualify -qualifying -qualitative -qualitatively -qualities -quality -qualm -qualmier -qualmiest -qualmish -qualmishly -qualmishness -qualmishnesses -qualms -qualmy -quamash -quamashes -quandang -quandangs -quandaries -quandary -quandong -quandongs -quango -quangos -quant -quanta -quantal -quanted -quantic -quantics -quantifiable -quantification -quantificational -quantificationally -quantifications -quantified -quantifier -quantifiers -quantifies -quantify -quantifying -quantile -quantiles -quanting -quantitate -quantitated -quantitates -quantitating -quantitation -quantitations -quantitative -quantitatively -quantitativeness -quantitativenesses -quantities -quantity -quantization -quantizations -quantize -quantized -quantizer -quantizers -quantizes -quantizing -quantong -quantongs -quants -quantum -quarantine -quarantined -quarantines -quarantining -quare -quark -quarks -quarrel -quarreled -quarreler -quarrelers -quarreling -quarrelled -quarreller -quarrellers -quarrelling -quarrels -quarrelsome -quarrelsomely -quarrelsomeness -quarrelsomenesses -quarried -quarrier -quarriers -quarries -quarry -quarrying -quarryings -quarryman -quarrymen -quart -quartan -quartans -quarte -quarter -quarterage -quarterages -quarterback -quarterbacked -quarterbacking -quarterbacks -quarterdeck -quarterdecks -quartered -quarterfinal -quarterfinalist -quarterfinalists -quarterfinals -quartering -quarterings -quarterlies -quarterly -quartermaster -quartermasters -quartern -quarterns -quarters -quartersawed -quartersawn -quarterstaff -quarterstaffs -quarterstaves -quartes -quartet -quartets -quartette -quartettes -quartic -quartics -quartile -quartiles -quarto -quartos -quarts -quartz -quartzes -quartzite -quartzites -quartzitic -quartzose -quasar -quasars -quash -quashed -quasher -quashers -quashes -quashing -quasi -quasicrystal -quasicrystalline -quasicrystals -quasiparticle -quasiparticles -quasiperiodic -quasiperiodicities -quasiperiodicity -quass -quasses -quassia -quassias -quassin -quassins -quate -quatercentenaries -quatercentenary -quaternaries -quaternary -quaternion -quaternions -quaternities -quaternity -quatorze -quatorzes -quatrain -quatrains -quatre -quatrefoil -quatrefoils -quatres -quattrocento -quattrocentos -quattuordecillion -quattuordecillions -quaver -quavered -quaverer -quaverers -quavering -quaveringly -quavers -quavery -quay -quayage -quayages -quaylike -quays -quayside -quaysides -quean -queans -queasier -queasiest -queasily -queasiness -queasinesses -queasy -queazier -queaziest -queazy -quebracho -quebrachos -queen -queendom -queendoms -queened -queening -queenlier -queenliest -queenliness -queenlinesses -queenly -queens -queenship -queenships -queenside -queensides -queer -queered -queerer -queerest -queering -queerish -queerly -queerness -queernesses -queers -quell -quelled -queller -quellers -quelling -quells -quench -quenchable -quenched -quencher -quenchers -quenches -quenching -quenchless -quenelle -quenelles -quercetin -quercetins -quercine -quercitron -quercitrons -querida -queridas -queried -querier -queriers -queries -querist -querists -quern -querns -querulous -querulously -querulousness -querulousnesses -query -querying -quesadilla -quesadillas -quest -quested -quester -questers -questing -question -questionable -questionableness -questionablenesses -questionably -questionaries -questionary -questioned -questioner -questioners -questioning -questionless -questionnaire -questionnaires -questions -questor -questors -quests -quetzal -quetzales -quetzals -queue -queued -queueing -queuer -queuers -queues -queuing -quey -queys -quezal -quezales -quezals -quibble -quibbled -quibbler -quibblers -quibbles -quibbling -quiche -quiches -quick -quicken -quickened -quickener -quickeners -quickening -quickens -quicker -quickest -quickie -quickies -quicklime -quicklimes -quickly -quickness -quicknesses -quicks -quicksand -quicksands -quickset -quicksets -quicksilver -quicksilvers -quickstep -quicksteps -quid -quiddities -quiddity -quidnunc -quidnuncs -quids -quiescence -quiescences -quiescent -quiescently -quiet -quieted -quieten -quietened -quietening -quietens -quieter -quieters -quietest -quieting -quietism -quietisms -quietist -quietistic -quietists -quietly -quietness -quietnesses -quiets -quietude -quietudes -quietus -quietuses -quiff -quiffs -quill -quillai -quillaia -quillaias -quillais -quillaja -quillajas -quillback -quillbacks -quilled -quillet -quillets -quilling -quillings -quills -quillwork -quillworks -quilt -quilted -quilter -quilters -quilting -quiltings -quilts -quin -quinacrine -quinacrines -quinaries -quinary -quinate -quince -quincentenaries -quincentenary -quincentennial -quincentennials -quinces -quincuncial -quincunx -quincunxes -quincunxial -quindecillion -quindecillions -quinela -quinelas -quinella -quinellas -quinic -quinidine -quinidines -quiniela -quinielas -quinin -quinina -quininas -quinine -quinines -quinins -quinnat -quinnats -quinoa -quinoas -quinoid -quinoids -quinol -quinolin -quinoline -quinolines -quinolins -quinols -quinone -quinones -quinonoid -quinquennia -quinquennial -quinquennially -quinquennials -quinquennium -quinquenniums -quins -quinsies -quinsy -quint -quinta -quintain -quintains -quintal -quintals -quintan -quintans -quintar -quintars -quintas -quinte -quintes -quintessence -quintessences -quintessential -quintessentially -quintet -quintets -quintette -quintettes -quintic -quintics -quintile -quintiles -quintillion -quintillions -quintillionth -quintillionths -quintin -quintins -quints -quintuple -quintupled -quintuples -quintuplet -quintuplets -quintuplicate -quintuplicated -quintuplicates -quintuplicating -quintupling -quip -quipped -quipper -quippers -quipping -quippish -quippu -quippus -quips -quipster -quipsters -quipu -quipus -quire -quired -quires -quiring -quirk -quirked -quirkier -quirkiest -quirkily -quirkiness -quirkinesses -quirking -quirkish -quirks -quirky -quirt -quirted -quirting -quirts -quisling -quislingism -quislingisms -quislings -quit -quitch -quitches -quitclaim -quitclaimed -quitclaiming -quitclaims -quite -quitrent -quitrents -quits -quittance -quittances -quitted -quitter -quitters -quitting -quittor -quittors -quiver -quivered -quiverer -quiverers -quivering -quiveringly -quivers -quivery -quixote -quixotes -quixotic -quixotical -quixotically -quixotism -quixotisms -quixotries -quixotry -quiz -quizmaster -quizmasters -quizzed -quizzer -quizzers -quizzes -quizzical -quizzicalities -quizzicality -quizzically -quizzing -quod -quodlibet -quodlibets -quods -quohog -quohogs -quoin -quoined -quoining -quoins -quoit -quoited -quoiting -quoits -quokka -quokkas -quomodo -quomodos -quondam -quorum -quorums -quota -quotabilities -quotability -quotable -quotably -quotas -quotation -quotations -quote -quoted -quoter -quoters -quotes -quoth -quotha -quotidian -quotidians -quotient -quotients -quoting -qursh -qurshes -qurush -qurushes -qwerty -qwertys -rabat -rabato -rabatos -rabats -rabbet -rabbeted -rabbeting -rabbets -rabbi -rabbies -rabbin -rabbinate -rabbinates -rabbinic -rabbinical -rabbinically -rabbinism -rabbinisms -rabbins -rabbis -rabbit -rabbitbrush -rabbitbrushes -rabbited -rabbiter -rabbiters -rabbiting -rabbitries -rabbitry -rabbits -rabbity -rabble -rabbled -rabblement -rabblements -rabbler -rabblers -rabbles -rabbling -rabboni -rabbonis -rabic -rabid -rabidities -rabidity -rabidly -rabidness -rabidnesses -rabies -rabietic -raccoon -raccoons -race -racecourse -racecourses -raced -racehorse -racehorses -racemate -racemates -raceme -racemed -racemes -racemic -racemism -racemisms -racemization -racemizations -racemize -racemized -racemizes -racemizing -racemoid -racemose -racemous -racer -racers -races -racetrack -racetracker -racetrackers -racetracks -racewalker -racewalkers -racewalking -racewalkings -raceway -raceways -rachet -rachets -rachial -rachides -rachilla -rachillae -rachis -rachises -rachitic -rachitides -rachitis -racial -racialism -racialisms -racialist -racialistic -racialists -racially -racier -raciest -racily -raciness -racinesses -racing -racings -racism -racisms -racist -racists -rack -racked -racker -rackers -racket -racketed -racketeer -racketeered -racketeering -racketeers -racketier -racketiest -racketing -rackets -rackety -rackful -rackfuls -racking -rackingly -rackle -racks -rackwork -rackworks -raclette -raclettes -racon -racons -raconteur -raconteurs -racoon -racoons -racquet -racquetball -racquetballs -racquets -racy -rad -radar -radars -radarscope -radarscopes -radded -radding -raddle -raddled -raddles -raddling -radiable -radial -radiale -radialia -radially -radials -radian -radiance -radiances -radiancies -radiancy -radians -radiant -radiantly -radiants -radiate -radiated -radiately -radiates -radiating -radiation -radiational -radiationless -radiations -radiative -radiator -radiators -radical -radicalise -radicalised -radicalises -radicalising -radicalism -radicalisms -radicalization -radicalizations -radicalize -radicalized -radicalizes -radicalizing -radically -radicalness -radicalnesses -radicals -radicand -radicands -radicate -radicated -radicates -radicating -radicchio -radicchios -radicel -radicels -radices -radicle -radicles -radicular -radii -radio -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 -radioed -radioelement -radioelements -radiogenic -radiogram -radiograms -radiograph -radiographed -radiographic -radiographically -radiographies -radiographing -radiographs -radiography -radioimmunoassay -radioimmunoassayable -radioimmunoassays -radioing -radioisotope -radioisotopes -radioisotopic -radioisotopically -radiolabel -radiolabeled -radiolabeling -radiolabelled -radiolabelling -radiolabels -radiolarian -radiolarians -radiologic -radiological -radiologically -radiologies -radiologist -radiologists -radiology -radiolucencies -radiolucency -radiolucent -radiolyses -radiolysis -radiolytic -radioman -radiomen -radiometer -radiometers -radiometric -radiometrically -radiometries -radiometry -radiomimetic -radionuclide -radionuclides -radiopaque -radiopharmaceutical -radiopharmaceuticals -radiophone -radiophones -radiophoto -radiophotos -radioprotection -radioprotections -radioprotective -radios -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 -radish -radishes -radium -radiums -radius -radiuses -radix -radixes -radome -radomes -radon -radons -rads -radula -radulae -radular -radulas -radwaste -radwastes -raff -raffia -raffias -raffinose -raffinoses -raffish -raffishly -raffishness -raffishnesses -raffle -raffled -raffler -rafflers -raffles -rafflesia -rafflesias -raffling -raffs -raft -rafted -rafter -raftered -rafters -rafting -rafts -raftsman -raftsmen -rag -raga -ragamuffin -ragamuffins -ragas -ragbag -ragbags -rage -raged -ragee -ragees -rages -ragged -raggeder -raggedest -raggedly -raggedness -raggednesses -raggedy -raggee -raggees -raggies -ragging -raggle -raggles -raggy -ragi -raging -ragingly -ragis -raglan -raglans -ragman -ragmen -ragout -ragouted -ragouting -ragouts -ragpicker -ragpickers -rags -ragtag -ragtags -ragtime -ragtimes -ragtop -ragtops -ragweed -ragweeds -ragwort -ragworts -rah -raia -raias -raid -raided -raider -raiders -raiding -raids -rail -railbird -railbirds -railbus -railbuses -railbusses -railcar -railcars -railed -railer -railers -railhead -railheads -railing -railings -railleries -raillery -railroad -railroaded -railroader -railroaders -railroading -railroadings -railroads -rails -railway -railways -raiment -raiments -rain -rainband -rainbands -rainbird -rainbirds -rainbow -rainbowlike -rainbows -raincheck -rainchecks -raincoat -raincoats -raindrop -raindrops -rained -rainfall -rainfalls -rainforest -rainforests -rainier -rainiest -rainily -raining -rainless -rainmaker -rainmakers -rainmaking -rainmakings -rainout -rainouts -rainproof -rains -rainspout -rainspouts -rainsquall -rainsqualls -rainstorm -rainstorms -rainwash -rainwashed -rainwashes -rainwashing -rainwater -rainwaters -rainwear -rainy -raisable -raise -raised -raiser -raisers -raises -raisin -raising -raisings -raisins -raisiny -raisonne -raj -raja -rajah -rajahs -rajas -rajes -rake -raked -rakee -rakees -rakehell -rakehells -rakehelly -rakeoff -rakeoffs -raker -rakers -rakes -raki -raking -rakis -rakish -rakishly -rakishness -rakishnesses -rale -rales -rallentando -rallied -rallier -ralliers -rallies -ralline -rally -rallye -rallyes -rallying -rallyings -rallyist -rallyists -ralph -ralphed -ralphing -ralphs -ram -ramate -ramble -rambled -rambler -ramblers -rambles -rambling -ramblingly -ramblings -rambouillet -rambouillets -rambunctious -rambunctiously -rambunctiousness -rambunctiousnesses -rambutan -rambutans -ramee -ramees -ramekin -ramekins -ramen -ramens -ramenta -ramentum -ramequin -ramequins -ramet -ramets -rami -ramie -ramies -ramification -ramifications -ramified -ramifies -ramiform -ramify -ramifying -ramilie -ramilies -ramillie -ramillies -ramjet -ramjets -rammed -rammer -rammers -rammier -rammiest -ramming -rammish -rammy -ramose -ramosely -ramosities -ramosity -ramous -ramp -rampage -rampaged -rampageous -rampageously -rampageousness -rampageousnesses -rampager -rampagers -rampages -rampaging -rampancies -rampancy -rampant -rampantly -rampart -ramparted -ramparting -ramparts -ramped -rampike -rampikes -ramping -rampion -rampions -rampole -rampoles -ramps -ramrod -ramrodded -ramrodding -ramrods -rams -ramshackle -ramshorn -ramshorns -ramson -ramsons -ramtil -ramtils -ramulose -ramulous -ramus -ran -rance -rances -ranch -ranched -rancher -ranchero -rancheros -ranchers -ranches -ranching -ranchman -ranchmen -rancho -ranchos -rancid -rancidities -rancidity -rancidly -rancidness -rancidnesses -rancor -rancored -rancorous -rancorously -rancors -rancour -rancours -rand -randan -randans -randier -randies -randiest -random -randomization -randomizations -randomize -randomized -randomizer -randomizers -randomizes -randomizing -randomly -randomness -randomnesses -randoms -rands -randy -ranee -ranees -rang -range -ranged -rangeland -rangelands -ranger -rangers -ranges -rangier -rangiest -ranginess -ranginesses -ranging -rangy -rani -ranid -ranids -ranis -rank -ranked -ranker -rankers -rankest -ranking -rankings -rankish -rankle -rankled -rankles -rankling -rankly -rankness -ranknesses -ranks -ranpike -ranpikes -ransack -ransacked -ransacker -ransackers -ransacking -ransacks -ransom -ransomed -ransomer -ransomers -ransoming -ransoms -rant -ranted -ranter -ranters -ranting -rantingly -rants -ranula -ranulae -ranulas -ranunculi -ranunculus -ranunculuses -rap -rapacious -rapaciously -rapaciousness -rapaciousnesses -rapacities -rapacity -rape -raped -raper -rapers -rapes -rapeseed -rapeseeds -raphae -raphe -raphes -raphia -raphias -raphide -raphides -raphis -rapid -rapider -rapidest -rapidities -rapidity -rapidly -rapidness -rapidnesses -rapids -rapier -rapiered -rapiers -rapine -rapines -raping -rapini -rapinis -rapist -rapists -rapparee -rapparees -rapped -rappee -rappees -rappel -rappeled -rappeling -rappelled -rappelling -rappels -rappen -rapper -rappers -rapping -rappini -rappinis -rapport -rapporteur -rapporteurs -rapports -rapprochement -rapprochements -raps -rapscallion -rapscallions -rapt -raptly -raptness -raptnesses -raptor -raptorial -raptors -rapture -raptured -raptures -rapturing -rapturous -rapturously -rapturousness -rapturousnesses -rare -rarebit -rarebits -rared -rarefaction -rarefactional -rarefactions -rarefied -rarefier -rarefiers -rarefies -rarefy -rarefying -rarely -rareness -rarenesses -rarer -rareripe -rareripes -rares -rarest -rarified -rarifies -rarify -rarifying -raring -rarities -rarity -ras -rasbora -rasboras -rascal -rascalities -rascality -rascally -rascals -rase -rased -raser -rasers -rases -rash -rasher -rashers -rashes -rashest -rashlike -rashly -rashness -rashnesses -rasing -rasorial -rasp -raspberries -raspberry -rasped -rasper -raspers -raspier -raspiest -rasping -raspingly -raspish -rasps -raspy -rassle -rassled -rassles -rassling -raster -rasters -rasure -rasures -rat -ratable -ratably -ratafee -ratafees -ratafia -ratafias -ratal -ratals -ratan -ratanies -ratans -ratany -rataplan -rataplanned -rataplanning -rataplans -ratatat -ratatats -ratatouille -ratatouilles -ratbag -ratbags -ratch -ratches -ratchet -ratcheted -ratcheting -ratchets -rate -rateable -rateably -rated -ratel -ratels -ratemeter -ratemeters -ratepayer -ratepayers -rater -raters -rates -ratfink -ratfinks -ratfish -ratfishes -rath -rathe -rather -rathole -ratholes -rathskeller -rathskellers -raticide -raticides -ratification -ratifications -ratified -ratifier -ratifiers -ratifies -ratify -ratifying -ratine -ratines -rating -ratings -ratio -ratiocinate -ratiocinated -ratiocinates -ratiocinating -ratiocination -ratiocinations -ratiocinative -ratiocinator -ratiocinators -ration -rational -rationale -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 -rationals -rationed -rationing -rations -ratios -ratite -ratites -ratlike -ratlin -ratline -ratlines -ratlins -rato -ratoon -ratooned -ratooner -ratooners -ratooning -ratoons -ratos -rats -ratsbane -ratsbanes -rattail -rattails -rattan -rattans -ratted -ratteen -ratteens -ratten -rattened -rattener -ratteners -rattening -rattens -ratter -ratters -rattier -rattiest -ratting -rattish -rattle -rattlebrain -rattlebrained -rattlebrains -rattled -rattler -rattlers -rattles -rattlesnake -rattlesnakes -rattletrap -rattletraps -rattling -rattlingly -rattlings -rattly -ratton -rattons -rattoon -rattooned -rattooning -rattoons -rattrap -rattraps -ratty -raucities -raucity -raucous -raucously -raucousness -raucousnesses -raunch -raunches -raunchier -raunchiest -raunchily -raunchiness -raunchinesses -raunchy -rauwolfia -rauwolfias -ravage -ravaged -ravagement -ravagements -ravager -ravagers -ravages -ravaging -rave -raved -ravel -raveled -raveler -ravelers -ravelin -raveling -ravelings -ravelins -ravelled -raveller -ravellers -ravelling -ravellings -ravelly -ravelment -ravelments -ravels -raven -ravened -ravener -raveners -ravening -ravenings -ravenous -ravenously -ravenousness -ravenousnesses -ravens -raver -ravers -raves -ravigote -ravigotes -ravin -ravine -ravined -ravines -raving -ravingly -ravings -ravining -ravins -ravioli -raviolis -ravish -ravished -ravisher -ravishers -ravishes -ravishing -ravishingly -ravishment -ravishments -raw -rawboned -rawer -rawest -rawhide -rawhided -rawhides -rawhiding -rawin -rawins -rawinsonde -rawinsondes -rawish -rawly -rawness -rawnesses -raws -rax -raxed -raxes -raxing -ray -raya -rayah -rayahs -rayas -rayed -raygrass -raygrasses -raying -rayless -raylessness -raylessnesses -raylike -rayon -rayons -rays -raze -razed -razee -razeed -razeeing -razees -razer -razers -razes -razing -razor -razorback -razorbacks -razorbill -razorbills -razored -razoring -razors -razz -razzamatazz -razzamatazzes -razzed -razzes -razzing -razzmatazz -razzmatazzes -re -reabsorb -reabsorbed -reabsorbing -reabsorbs -reaccede -reacceded -reaccedes -reacceding -reaccelerate -reaccelerated -reaccelerates -reaccelerating -reaccent -reaccented -reaccenting -reaccents -reaccept -reaccepted -reaccepting -reaccepts -reaccession -reaccessions -reacclimatize -reacclimatized -reacclimatizes -reacclimatizing -reaccredit -reaccreditation -reaccreditations -reaccredited -reaccrediting -reaccredits -reaccuse -reaccused -reaccuses -reaccusing -reach -reachable -reached -reacher -reachers -reaches -reaching -reacquaint -reacquainted -reacquainting -reacquaints -reacquire -reacquired -reacquires -reacquiring -reacquisition -reacquisitions -react -reactance -reactances -reactant -reactants -reacted -reacting -reaction -reactionaries -reactionary -reactionaryism -reactionaryisms -reactions -reactivate -reactivated -reactivates -reactivating -reactivation -reactivations -reactive -reactively -reactiveness -reactivenesses -reactivities -reactivity -reactor -reactors -reacts -read -readabilities -readability -readable -readableness -readablenesses -readably -readapt -readapted -readapting -readapts -readd -readded -readdict -readdicted -readdicting -readdicts -readding -readdress -readdressed -readdresses -readdressing -readds -reader -readerly -readers -readership -readerships -readied -readier -readies -readiest -readily -readiness -readinesses -reading -readings -readjust -readjustable -readjusted -readjusting -readjustment -readjustments -readjusts -readmission -readmissions -readmit -readmits -readmitted -readmitting -readopt -readopted -readopting -readopts -readorn -readorned -readorning -readorns -readout -readouts -reads -ready -readying -readymade -readymades -reaffirm -reaffirmation -reaffirmations -reaffirmed -reaffirming -reaffirms -reaffix -reaffixed -reaffixes -reaffixing -reafforest -reafforestation -reafforestations -reafforested -reafforesting -reafforests -reagent -reagents -reaggregate -reaggregated -reaggregates -reaggregating -reaggregation -reaggregations -reagin -reaginic -reagins -real -realer -reales -realest -realgar -realgars -realia -realign -realigned -realigning -realignment -realignments -realigns -realise -realised -realiser -realisers -realises -realising -realism -realisms -realist -realistic -realistically -realists -realities -reality -realizable -realization -realizations -realize -realized -realizer -realizers -realizes -realizing -reallocate -reallocated -reallocates -reallocating -reallocation -reallocations -reallot -reallots -reallotted -reallotting -really -realm -realms -realness -realnesses -realpolitik -realpolitiks -reals -realter -realtered -realtering -realters -realties -realtime -realtor -realtors -realty -ream -reamed -reamer -reamers -reaming -reams -reanalyses -reanalysis -reanalyze -reanalyzed -reanalyzes -reanalyzing -reanimate -reanimated -reanimates -reanimating -reanimation -reanimations -reannex -reannexation -reannexations -reannexed -reannexes -reannexing -reanoint -reanointed -reanointing -reanoints -reap -reapable -reaped -reaper -reapers -reaphook -reaphooks -reaping -reappear -reappearance -reappearances -reappeared -reappearing -reappears -reapplication -reapplications -reapplied -reapplies -reapply -reapplying -reappoint -reappointed -reappointing -reappointment -reappointments -reappoints -reapportion -reapportioned -reapportioning -reapportionment -reapportionments -reapportions -reappraisal -reappraisals -reappraise -reappraised -reappraises -reappraising -reappropriate -reappropriated -reappropriates -reappropriating -reapprove -reapproved -reapproves -reapproving -reaps -rear -reared -rearer -rearers -rearguard -reargue -reargued -reargues -rearguing -reargument -rearguments -rearing -rearm -rearmament -rearmaments -rearmed -rearmice -rearming -rearmost -rearmouse -rearms -rearousal -rearousals -rearouse -rearoused -rearouses -rearousing -rearrange -rearranged -rearrangement -rearrangements -rearranges -rearranging -rearrest -rearrested -rearresting -rearrests -rears -rearticulate -rearticulated -rearticulates -rearticulating -rearward -rearwards -reascend -reascended -reascending -reascends -reascent -reascents -reason -reasonabilities -reasonability -reasonable -reasonableness -reasonablenesses -reasonably -reasoned -reasoner -reasoners -reasoning -reasonings -reasonless -reasonlessly -reasons -reassail -reassailed -reassailing -reassails -reassemblage -reassemblages -reassemble -reassembled -reassembles -reassemblies -reassembling -reassembly -reassert -reasserted -reasserting -reassertion -reassertions -reasserts -reassess -reassessed -reassesses -reassessing -reassessment -reassessments -reassign -reassigned -reassigning -reassignment -reassignments -reassigns -reassort -reassorted -reassorting -reassorts -reassume -reassumed -reassumes -reassuming -reassumption -reassumptions -reassurance -reassurances -reassure -reassured -reassures -reassuring -reassuringly -reata -reatas -reattach -reattached -reattaches -reattaching -reattachment -reattachments -reattack -reattacked -reattacking -reattacks -reattain -reattained -reattaining -reattains -reattempt -reattempted -reattempting -reattempts -reattribute -reattributed -reattributes -reattributing -reattribution -reattributions -reauthorization -reauthorizations -reauthorize -reauthorized -reauthorizes -reauthorizing -reavail -reavailed -reavailing -reavails -reave -reaved -reaver -reavers -reaves -reaving -reavow -reavowed -reavowing -reavows -reawake -reawaked -reawaken -reawakened -reawakening -reawakens -reawakes -reawaking -reawoke -reawoken -reb -rebait -rebaited -rebaiting -rebaits -rebalance -rebalanced -rebalances -rebalancing -rebaptism -rebaptisms -rebaptize -rebaptized -rebaptizes -rebaptizing -rebar -rebarbative -rebarbatively -rebars -rebate -rebated -rebater -rebaters -rebates -rebating -rebato -rebatos -rebbe -rebbes -rebec -rebeck -rebecks -rebecs -rebegan -rebegin -rebeginning -rebegins -rebegun -rebel -rebeldom -rebeldoms -rebelled -rebelling -rebellion -rebellions -rebellious -rebelliously -rebelliousness -rebelliousnesses -rebels -rebid -rebidden -rebidding -rebids -rebill -rebilled -rebilling -rebills -rebind -rebinding -rebinds -rebirth -rebirths -reblend -reblended -reblending -reblends -rebloom -rebloomed -reblooming -reblooms -reboant -reboard -reboarded -reboarding -reboards -rebodied -rebodies -rebody -rebodying -reboil -reboiled -reboiling -reboils -rebook -rebooked -rebooking -rebooks -reboot -rebooted -rebooting -reboots -rebop -rebops -rebore -rebored -rebores -reboring -reborn -rebottle -rebottled -rebottles -rebottling -rebought -rebound -rebounded -rebounder -rebounders -rebounding -rebounds -rebozo -rebozos -rebranch -rebranched -rebranches -rebranching -rebred -rebreed -rebreeding -rebreeds -rebroadcast -rebroadcasting -rebroadcasts -rebs -rebuff -rebuffed -rebuffing -rebuffs -rebuild -rebuilded -rebuilding -rebuilds -rebuilt -rebuke -rebuked -rebuker -rebukers -rebukes -rebuking -reburial -reburials -reburied -reburies -rebury -reburying -rebus -rebuses -rebut -rebuts -rebuttable -rebuttal -rebuttals -rebutted -rebutter -rebutters -rebutting -rebutton -rebuttoned -rebuttoning -rebuttons -rebuy -rebuying -rebuys -rec -recalcitrance -recalcitrances -recalcitrancies -recalcitrancy -recalcitrant -recalcitrants -recalculate -recalculated -recalculates -recalculating -recalculation -recalculations -recalibrate -recalibrated -recalibrates -recalibrating -recalibration -recalibrations -recall -recallabilities -recallability -recallable -recalled -recaller -recallers -recalling -recalls -recamier -recamiers -recanalization -recanalizations -recanalize -recanalized -recanalizes -recanalizing -recane -recaned -recanes -recaning -recant -recantation -recantations -recanted -recanter -recanters -recanting -recants -recap -recapitalization -recapitalizations -recapitalize -recapitalized -recapitalizes -recapitalizing -recapitulate -recapitulated -recapitulates -recapitulating -recapitulation -recapitulations -recappable -recapped -recapping -recaps -recapture -recaptured -recaptures -recapturing -recarpet -recarpeted -recarpeting -recarpets -recarried -recarries -recarry -recarrying -recast -recasting -recasts -recce -recces -recede -receded -recedes -receding -receipt -receipted -receipting -receipts -receivable -receivables -receive -received -receiver -receivers -receivership -receiverships -receives -receiving -recencies -recency -recension -recensions -recent -recenter -recentest -recently -recentness -recentnesses -recentralization -recentralizations -recentrifuge -recentrifuged -recentrifuges -recentrifuging -recept -receptacle -receptacles -reception -receptionist -receptionists -receptions -receptive -receptively -receptiveness -receptivenesses -receptivities -receptivity -receptor -receptors -recepts -recertification -recertifications -recertified -recertifies -recertify -recertifying -recess -recessed -recesses -recessing -recession -recessional -recessionals -recessionary -recessions -recessive -recessively -recessiveness -recessivenesses -recessives -rechallenge -rechallenged -rechallenges -rechallenging -rechange -rechanged -rechanges -rechanging -rechannel -rechanneled -rechanneling -rechannelled -rechannelling -rechannels -recharge -rechargeable -recharged -recharger -rechargers -recharges -recharging -rechart -recharted -recharter -rechartered -rechartering -recharters -recharting -recharts -rechauffe -rechauffes -recheat -recheats -recheck -rechecked -rechecking -rechecks -recherche -rechew -rechewed -rechewing -rechews -rechoose -rechooses -rechoosing -rechoreograph -rechoreographed -rechoreographing -rechoreographs -rechose -rechosen -rechristen -rechristened -rechristening -rechristens -rechromatograph -rechromatographed -rechromatographies -rechromatographing -rechromatographs -rechromatography -recidivism -recidivisms -recidivist -recidivistic -recidivists -recipe -recipes -recipient -recipients -reciprocal -reciprocally -reciprocals -reciprocate -reciprocated -reciprocates -reciprocating -reciprocation -reciprocations -reciprocative -reciprocator -reciprocators -reciprocities -reciprocity -recircle -recircled -recircles -recircling -recirculate -recirculated -recirculates -recirculating -recirculation -recirculations -recision -recisions -recital -recitalist -recitalists -recitals -recitation -recitations -recitative -recitatives -recitativi -recitativo -recitativos -recite -recited -reciter -reciters -recites -reciting -reck -recked -recking -reckless -recklessly -recklessness -recklessnesses -reckon -reckoned -reckoner -reckoners -reckoning -reckonings -reckons -recks -reclad -reclaim -reclaimable -reclaimed -reclaiming -reclaims -reclamation -reclamations -reclame -reclames -reclasp -reclasped -reclasping -reclasps -reclassification -reclassifications -reclassified -reclassifies -reclassify -reclassifying -reclean -recleaned -recleaning -recleans -recline -reclined -recliner -recliners -reclines -reclining -reclosable -reclothe -reclothed -reclothes -reclothing -recluse -recluses -reclusion -reclusions -reclusive -reclusively -reclusiveness -reclusivenesses -recoal -recoaled -recoaling -recoals -recock -recocked -recocking -recocks -recode -recoded -recodes -recodification -recodifications -recodified -recodifies -recodify -recodifying -recoding -recognise -recognised -recognises -recognising -recognition -recognitions -recognizabilities -recognizability -recognizable -recognizably -recognizance -recognizances -recognize -recognized -recognizer -recognizers -recognizes -recognizing -recoil -recoiled -recoiler -recoilers -recoiling -recoilless -recoils -recoin -recoinage -recoinages -recoined -recoining -recoins -recollect -recollected -recollecting -recollection -recollections -recollects -recolonization -recolonizations -recolonize -recolonized -recolonizes -recolonizing -recolor -recolored -recoloring -recolors -recomb -recombed -recombinant -recombinants -recombination -recombinational -recombinations -recombine -recombined -recombines -recombing -recombining -recombs -recommence -recommenced -recommencement -recommencements -recommences -recommencing -recommend -recommendable -recommendation -recommendations -recommendatory -recommended -recommending -recommends -recommission -recommissioned -recommissioning -recommissions -recommit -recommitment -recommitments -recommits -recommittal -recommittals -recommitted -recommitting -recompense -recompensed -recompenses -recompensing -recompilation -recompilations -recompile -recompiled -recompiles -recompiling -recompose -recomposed -recomposes -recomposing -recomposition -recompositions -recomputation -recomputations -recompute -recomputed -recomputes -recomputing -recon -reconceive -reconceived -reconceives -reconceiving -reconcentrate -reconcentrated -reconcentrates -reconcentrating -reconcentration -reconcentrations -reconception -reconceptions -reconceptualization -reconceptualizations -reconceptualize -reconceptualized -reconceptualizes -reconceptualizing -reconcilabilities -reconcilability -reconcilable -reconcile -reconciled -reconcilement -reconcilements -reconciler -reconcilers -reconciles -reconciliation -reconciliations -reconciliatory -reconciling -recondense -recondensed -recondenses -recondensing -recondite -reconditely -reconditeness -reconditenesses -recondition -reconditioned -reconditioning -reconditions -reconfigurable -reconfiguration -reconfigurations -reconfigure -reconfigured -reconfigures -reconfiguring -reconfirm -reconfirmation -reconfirmations -reconfirmed -reconfirming -reconfirms -reconnaissance -reconnaissances -reconnect -reconnected -reconnecting -reconnection -reconnections -reconnects -reconnoiter -reconnoitered -reconnoitering -reconnoiters -reconnoitre -reconnoitred -reconnoitres -reconnoitring -reconquer -reconquered -reconquering -reconquers -reconquest -reconquests -recons -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 -recontact -recontacted -recontacting -recontacts -recontaminate -recontaminated -recontaminates -recontaminating -recontamination -recontaminations -recontextualize -recontextualized -recontextualizes -recontextualizing -recontour -recontoured -recontouring -recontours -reconvene -reconvened -reconvenes -reconvening -reconversion -reconversions -reconvert -reconverted -reconverting -reconverts -reconvey -reconveyance -reconveyances -reconveyed -reconveying -reconveys -reconvict -reconvicted -reconvicting -reconviction -reconvictions -reconvicts -reconvince -reconvinced -reconvinces -reconvincing -recook -recooked -recooking -recooks -recopied -recopies -recopy -recopying -record -recordable -recordation -recordations -recorded -recorder -recorders -recording -recordings -recordist -recordists -records -recork -recorked -recorking -recorks -recount -recounted -recounter -recounters -recounting -recounts -recoup -recoupable -recoupe -recouped -recouping -recouple -recoupled -recouples -recoupling -recoupment -recoupments -recoups -recourse -recourses -recover -recoverabilities -recoverability -recoverable -recovered -recoverer -recoverers -recoveries -recovering -recovers -recovery -recrate -recrated -recrates -recrating -recreant -recreants -recreate -recreated -recreates -recreating -recreation -recreational -recreationist -recreationists -recreations -recreative -recriminate -recriminated -recriminates -recriminating -recrimination -recriminations -recriminative -recriminatory -recross -recrossed -recrosses -recrossing -recrown -recrowned -recrowning -recrowns -recrudesce -recrudesced -recrudescence -recrudescences -recrudescent -recrudesces -recrudescing -recruit -recruited -recruiter -recruiters -recruiting -recruitment -recruitments -recruits -recrystallization -recrystallizations -recrystallize -recrystallized -recrystallizes -recrystallizing -recs -recta -rectal -rectally -rectangle -rectangles -rectangular -rectangularities -rectangularity -rectangularly -recti -rectifiabilities -rectifiability -rectifiable -rectification -rectifications -rectified -rectifier -rectifiers -rectifies -rectify -rectifying -rectilinear -rectilinearly -rectitude -rectitudes -rectitudinous -recto -rector -rectorate -rectorates -rectorial -rectories -rectors -rectorship -rectorships -rectory -rectos -rectrices -rectrix -rectum -rectums -rectus -recultivate -recultivated -recultivates -recultivating -recumbencies -recumbency -recumbent -recuperate -recuperated -recuperates -recuperating -recuperation -recuperations -recuperative -recur -recurred -recurrence -recurrences -recurrent -recurrently -recurring -recurs -recursion -recursions -recursive -recursively -recursiveness -recursivenesses -recurve -recurved -recurves -recurving -recusal -recusals -recusancies -recusancy -recusant -recusants -recuse -recused -recuses -recusing -recut -recuts -recutting -recyclable -recyclables -recycle -recycled -recycler -recyclers -recycles -recycling -red -redact -redacted -redacting -redaction -redactional -redactions -redactor -redactors -redacts -redamage -redamaged -redamages -redamaging -redan -redans -redargue -redargued -redargues -redarguing -redate -redated -redates -redating -redbait -redbaited -redbaiting -redbaits -redbay -redbays -redbird -redbirds -redbone -redbones -redbreast -redbreasts -redbrick -redbricks -redbud -redbuds -redbug -redbugs -redcap -redcaps -redcoat -redcoats -redd -redded -redden -reddened -reddening -reddens -redder -redders -reddest -redding -reddish -reddishness -reddishnesses -reddle -reddled -reddles -reddling -redds -rede -redear -redears -redecide -redecided -redecides -redeciding -redecorate -redecorated -redecorates -redecorating -redecoration -redecorations -redecorator -redecorators -reded -rededicate -rededicated -rededicates -rededicating -rededication -rededications -redeem -redeemable -redeemed -redeemer -redeemers -redeeming -redeems -redefeat -redefeated -redefeating -redefeats -redefect -redefected -redefecting -redefects -redefied -redefies -redefine -redefined -redefines -redefining -redefinition -redefinitions -redefy -redefying -redeliver -redelivered -redeliveries -redelivering -redelivers -redelivery -redemand -redemanded -redemanding -redemands -redemption -redemptioner -redemptioners -redemptions -redemptive -redemptory -redenied -redenies -redeny -redenying -redeploy -redeployed -redeploying -redeployment -redeployments -redeploys -redeposit -redeposited -redepositing -redeposits -redes -redescribe -redescribed -redescribes -redescribing -redescription -redescriptions -redesign -redesigned -redesigning -redesigns -redetermination -redeterminations -redetermine -redetermined -redetermines -redetermining -redevelop -redeveloped -redeveloper -redevelopers -redeveloping -redevelopment -redevelopments -redevelops -redeye -redeyes -redfin -redfins -redfish -redfishes -redhead -redheaded -redheads -redhorse -redhorses -redia -rediae -redial -redialed -redialing -redialled -redialling -redials -redias -redid -redigest -redigested -redigesting -redigestion -redigestions -redigests -reding -redingote -redingotes -redintegrate -redintegrated -redintegrates -redintegrating -redintegration -redintegrations -redintegrative -redip -redipped -redipping -redips -redipt -redirect -redirected -redirecting -redirection -redirections -redirects -rediscount -rediscountable -rediscounted -rediscounting -rediscounts -rediscover -rediscovered -rediscoveries -rediscovering -rediscovers -rediscovery -rediscuss -rediscussed -rediscusses -rediscussing -redisplay -redisplayed -redisplaying -redisplays -redispose -redisposed -redisposes -redisposing -redisposition -redispositions -redissolve -redissolved -redissolves -redissolving -redistill -redistillation -redistillations -redistilled -redistilling -redistills -redistribute -redistributed -redistributes -redistributing -redistribution -redistributional -redistributionist -redistributionists -redistributions -redistributive -redistrict -redistricted -redistricting -redistricts -redivide -redivided -redivides -redividing -redivision -redivisions -redivivus -redleg -redlegs -redline -redlined -redlines -redlining -redly -redneck -rednecked -rednecks -redness -rednesses -redo -redock -redocked -redocking -redocks -redoes -redoing -redolence -redolences -redolent -redolently -redon -redone -redonned -redonning -redons -redos -redouble -redoubled -redoubles -redoubling -redoubt -redoubtable -redoubtably -redoubts -redound -redounded -redounding -redounds -redout -redouts -redowa -redowas -redox -redoxes -redpoll -redpolls -redraft -redrafted -redrafting -redrafts -redraw -redrawer -redrawers -redrawing -redrawn -redraws -redream -redreamed -redreaming -redreams -redreamt -redress -redressed -redresser -redressers -redresses -redressing -redrew -redried -redries -redrill -redrilled -redrilling -redrills -redrive -redriven -redrives -redriving -redroot -redroots -redrove -redry -redrying -reds -redshank -redshanks -redshift -redshifted -redshifts -redshirt -redshirted -redshirting -redshirts -redskin -redskins -redstart -redstarts -redtail -redtails -redtop -redtops -redub -redubbed -redubbing -redubs -reduce -reduced -reducer -reducers -reduces -reducibilities -reducibility -reducible -reducibly -reducing -reductant -reductants -reductase -reductases -reduction -reductional -reductionism -reductionisms -reductionist -reductionistic -reductionists -reductions -reductive -reductively -reductiveness -reductivenesses -reductor -reductors -redundancies -redundancy -redundant -redundantly -reduplicate -reduplicated -reduplicates -reduplicating -reduplication -reduplications -reduplicative -reduplicatively -reduviid -reduviids -redux -redware -redwares -redwing -redwings -redwood -redwoods -redye -redyed -redyeing -redyes -ree -reearn -reearned -reearning -reearns -reechier -reechiest -reecho -reechoed -reechoes -reechoing -reechy -reed -reedbird -reedbirds -reedbuck -reedbucks -reeded -reedier -reediest -reedified -reedifies -reedify -reedifying -reedily -reediness -reedinesses -reeding -reedings -reedit -reedited -reediting -reedition -reeditions -reedits -reedlike -reedling -reedlings -reedman -reedmen -reeds -reeducate -reeducated -reeducates -reeducating -reeducation -reeducations -reeducative -reedy -reef -reefable -reefed -reefer -reefers -reefier -reefiest -reefing -reefs -reefy -reeject -reejected -reejecting -reejects -reek -reeked -reeker -reekers -reekier -reekiest -reeking -reeks -reeky -reel -reelable -reelect -reelected -reelecting -reelection -reelections -reelects -reeled -reeler -reelers -reeligibilities -reeligibility -reeligible -reeling -reels -reembark -reembarked -reembarking -reembarks -reembodied -reembodies -reembody -reembodying -reembroider -reembroidered -reembroidering -reembroiders -reemerge -reemerged -reemergence -reemergences -reemerges -reemerging -reemission -reemissions -reemit -reemits -reemitted -reemitting -reemphases -reemphasis -reemphasize -reemphasized -reemphasizes -reemphasizing -reemploy -reemployed -reemploying -reemployment -reemployments -reemploys -reenact -reenacted -reenacting -reenactment -reenactments -reenacts -reencounter -reencountered -reencountering -reencounters -reendow -reendowed -reendowing -reendows -reenergize -reenergized -reenergizes -reenergizing -reenforce -reenforced -reenforces -reenforcing -reengage -reengaged -reengagement -reengagements -reengages -reengaging -reengineer -reengineered -reengineering -reengineers -reengrave -reengraved -reengraves -reengraving -reenjoy -reenjoyed -reenjoying -reenjoys -reenlist -reenlisted -reenlisting -reenlistment -reenlistments -reenlists -reenroll -reenrolled -reenrolling -reenrolls -reenter -reentered -reentering -reenters -reenthrone -reenthroned -reenthrones -reenthroning -reentrance -reentrances -reentrant -reentrants -reentries -reentry -reequip -reequipment -reequipments -reequipped -reequipping -reequips -reerect -reerected -reerecting -reerects -rees -reescalate -reescalated -reescalates -reescalating -reescalation -reescalations -reest -reestablish -reestablished -reestablishes -reestablishing -reestablishment -reestablishments -reested -reestimate -reestimated -reestimates -reestimating -reesting -reests -reevaluate -reevaluated -reevaluates -reevaluating -reevaluation -reevaluations -reeve -reeved -reeves -reeving -reevoke -reevoked -reevokes -reevoking -reexamination -reexaminations -reexamine -reexamined -reexamines -reexamining -reexpel -reexpelled -reexpelling -reexpels -reexperience -reexperienced -reexperiences -reexperiencing -reexplore -reexplored -reexplores -reexploring -reexport -reexportation -reexportations -reexported -reexporting -reexports -reexpose -reexposed -reexposes -reexposing -reexposure -reexposures -reexpress -reexpressed -reexpresses -reexpressing -ref -reface -refaced -refaces -refacing -refall -refallen -refalling -refalls -refashion -refashioned -refashioning -refashions -refasten -refastened -refastening -refastens -refect -refected -refecting -refection -refections -refectories -refectory -refects -refed -refeed -refeeding -refeeds -refeel -refeeling -refeels -refel -refell -refelled -refelling -refels -refelt -refence -refenced -refences -refencing -refer -referable -referee -refereed -refereeing -referees -reference -referenced -references -referencing -referenda -referendum -referendums -referent -referential -referentialities -referentiality -referentially -referents -referral -referrals -referred -referrer -referrers -referring -refers -reffed -reffing -refight -refighting -refights -refigure -refigured -refigures -refiguring -refile -refiled -refiles -refiling -refill -refillable -refilled -refilling -refills -refilm -refilmed -refilming -refilms -refilter -refiltered -refiltering -refilters -refinance -refinanced -refinances -refinancing -refind -refinding -refinds -refine -refined -refinement -refinements -refiner -refineries -refiners -refinery -refines -refining -refinish -refinished -refinisher -refinishers -refinishes -refinishing -refire -refired -refires -refiring -refit -refits -refitted -refitting -refix -refixed -refixes -refixing -reflate -reflated -reflates -reflating -reflation -reflationary -reflations -reflect -reflectance -reflectances -reflected -reflecting -reflection -reflectional -reflections -reflective -reflectively -reflectiveness -reflectivenesses -reflectivities -reflectivity -reflectometer -reflectometers -reflectometries -reflectometry -reflector -reflectorize -reflectorized -reflectorizes -reflectorizing -reflectors -reflects -reflet -reflets -reflew -reflex -reflexed -reflexes -reflexing -reflexion -reflexions -reflexive -reflexively -reflexiveness -reflexivenesses -reflexives -reflexivities -reflexivity -reflexly -reflexologies -reflexology -reflies -refloat -refloated -refloating -refloats -reflood -reflooded -reflooding -refloods -reflow -reflowed -reflower -reflowered -reflowering -reflowers -reflowing -reflown -reflows -refluence -refluences -refluent -reflux -refluxed -refluxes -refluxing -refly -reflying -refocus -refocused -refocuses -refocusing -refocussed -refocusses -refocussing -refold -refolded -refolding -refolds -reforest -reforestation -reforestations -reforested -reforesting -reforests -reforge -reforged -reforges -reforging -reform -reformabilities -reformability -reformable -reformat -reformate -reformates -reformation -reformational -reformations -reformative -reformatories -reformatory -reformats -reformatted -reformatting -reformed -reformer -reformers -reforming -reformism -reformisms -reformist -reformists -reforms -reformulate -reformulated -reformulates -reformulating -reformulation -reformulations -refortification -refortifications -refortified -refortifies -refortify -refortifying -refought -refound -refoundation -refoundations -refounded -refounding -refounds -refract -refracted -refractile -refracting -refraction -refractions -refractive -refractively -refractiveness -refractivenesses -refractivities -refractivity -refractometer -refractometers -refractometric -refractometries -refractometry -refractor -refractories -refractorily -refractoriness -refractorinesses -refractors -refractory -refracts -refrain -refrained -refraining -refrainment -refrainments -refrains -reframe -reframed -reframes -reframing -refrangibilities -refrangibility -refrangible -refrangibleness -refrangiblenesses -refreeze -refreezes -refreezing -refresh -refreshed -refreshen -refreshened -refreshening -refreshens -refresher -refreshers -refreshes -refreshing -refreshingly -refreshment -refreshments -refried -refries -refrigerant -refrigerants -refrigerate -refrigerated -refrigerates -refrigerating -refrigeration -refrigerations -refrigerator -refrigerators -refront -refronted -refronting -refronts -refroze -refrozen -refry -refrying -refs -reft -refuel -refueled -refueling -refuelled -refuelling -refuels -refuge -refuged -refugee -refugeeism -refugeeisms -refugees -refuges -refugia -refuging -refugium -refulgence -refulgences -refulgent -refund -refundabilities -refundability -refundable -refunded -refunder -refunders -refunding -refunds -refurbish -refurbished -refurbisher -refurbishers -refurbishes -refurbishing -refurbishment -refurbishments -refurnish -refurnished -refurnishes -refurnishing -refusal -refusals -refuse -refused -refusenik -refuseniks -refuser -refusers -refuses -refusing -refusnik -refusniks -refutable -refutably -refutal -refutals -refutation -refutations -refute -refuted -refuter -refuters -refutes -refuting -reg -regain -regained -regainer -regainers -regaining -regains -regal -regale -regaled -regaler -regalers -regales -regalia -regaling -regalities -regality -regally -regard -regardant -regarded -regardful -regardfully -regardfulness -regardfulnesses -regarding -regardless -regardlessly -regardlessness -regardlessnesses -regards -regather -regathered -regathering -regathers -regatta -regattas -regauge -regauged -regauges -regauging -regave -regear -regeared -regearing -regears -regelate -regelated -regelates -regelating -regencies -regency -regenerable -regeneracies -regeneracy -regenerate -regenerated -regenerately -regenerateness -regeneratenesses -regenerates -regenerating -regeneration -regenerations -regenerative -regenerator -regenerators -regent -regental -regents -reges -reggae -reggaes -regicidal -regicide -regicides -regild -regilded -regilding -regilds -regilt -regime -regimen -regimens -regiment -regimental -regimentals -regimentation -regimentations -regimented -regimenting -regiments -regimes -regina -reginae -reginal -reginas -region -regional -regionalism -regionalisms -regionalist -regionalistic -regionalists -regionalization -regionalizations -regionalize -regionalized -regionalizes -regionalizing -regionally -regionals -regions -regisseur -regisseurs -register -registerable -registered -registering -registers -registrable -registrant -registrants -registrar -registrars -registration -registrations -registries -registry -regius -regive -regiven -regives -regiving -reglaze -reglazed -reglazes -reglazing -reglet -reglets -regloss -reglossed -reglosses -reglossing -reglow -reglowed -reglowing -reglows -reglue -reglued -reglues -regluing -regma -regmata -regna -regnal -regnancies -regnancy -regnant -regnum -regolith -regoliths -regorge -regorged -regorges -regorging -regosol -regosols -regrade -regraded -regrades -regrading -regraft -regrafted -regrafting -regrafts -regrant -regranted -regranting -regrants -regrate -regrated -regrates -regrating -regreen -regreened -regreening -regreens -regreet -regreeted -regreeting -regreets -regress -regressed -regresses -regressing -regression -regressions -regressive -regressively -regressiveness -regressivenesses -regressivities -regressivity -regressor -regressors -regret -regretful -regretfully -regretfulness -regretfulnesses -regrets -regrettable -regrettably -regretted -regretter -regretters -regretting -regrew -regrind -regrinding -regrinds -regroom -regroomed -regrooming -regrooms -regroove -regrooved -regrooves -regrooving -reground -regroup -regrouped -regrouping -regroups -regrow -regrowing -regrown -regrows -regrowth -regrowths -regs -regular -regularities -regularity -regularization -regularizations -regularize -regularized -regularizes -regularizing -regularly -regulars -regulate -regulated -regulates -regulating -regulation -regulations -regulative -regulator -regulators -regulatory -reguli -reguline -regulus -reguluses -regurgitate -regurgitated -regurgitates -regurgitating -regurgitation -regurgitations -rehab -rehabbed -rehabber -rehabbers -rehabbing -rehabilitant -rehabilitants -rehabilitate -rehabilitated -rehabilitates -rehabilitating -rehabilitation -rehabilitations -rehabilitative -rehabilitator -rehabilitators -rehabs -rehammer -rehammered -rehammering -rehammers -rehandle -rehandled -rehandles -rehandling -rehang -rehanged -rehanging -rehangs -reharden -rehardened -rehardening -rehardens -rehash -rehashed -rehashes -rehashing -rehear -reheard -rehearing -rehearings -rehears -rehearsal -rehearsals -rehearse -rehearsed -rehearser -rehearsers -rehearses -rehearsing -reheat -reheated -reheater -reheaters -reheating -reheats -reheel -reheeled -reheeling -reheels -rehem -rehemmed -rehemming -rehems -rehinge -rehinged -rehinges -rehinging -rehire -rehired -rehires -rehiring -rehoboam -rehoboams -rehospitalization -rehospitalizations -rehospitalize -rehospitalized -rehospitalizes -rehospitalizing -rehouse -rehoused -rehouses -rehousing -rehumanize -rehumanized -rehumanizes -rehumanizing -rehung -rehydratable -rehydrate -rehydrated -rehydrates -rehydrating -rehydration -rehydrations -rehypnotize -rehypnotized -rehypnotizes -rehypnotizing -rei -reichsmark -reichsmarks -reidentified -reidentifies -reidentify -reidentifying -reif -reification -reifications -reified -reifier -reifiers -reifies -reifs -reify -reifying -reign -reigned -reigning -reignite -reignited -reignites -reigniting -reignition -reignitions -reigns -reimage -reimaged -reimages -reimagine -reimagined -reimagines -reimaging -reimagining -reimbursable -reimburse -reimbursed -reimbursement -reimbursements -reimburses -reimbursing -reimmerse -reimmersed -reimmerses -reimmersing -reimplant -reimplantation -reimplantations -reimplanted -reimplanting -reimplants -reimport -reimportation -reimportations -reimported -reimporting -reimports -reimpose -reimposed -reimposes -reimposing -reimposition -reimpositions -reimpression -reimpressions -rein -reincarnate -reincarnated -reincarnates -reincarnating -reincarnation -reincarnations -reincite -reincited -reincites -reinciting -reincorporate -reincorporated -reincorporates -reincorporating -reincorporation -reincorporations -reincur -reincurred -reincurring -reincurs -reindeer -reindeers -reindex -reindexed -reindexes -reindexing -reindict -reindicted -reindicting -reindictment -reindictments -reindicts -reinduce -reinduced -reinduces -reinducing -reinduct -reinducted -reinducting -reinducts -reindustrialization -reindustrializations -reindustrialize -reindustrialized -reindustrializes -reindustrializing -reined -reinfect -reinfected -reinfecting -reinfection -reinfections -reinfects -reinfestation -reinfestations -reinflate -reinflated -reinflates -reinflating -reinflation -reinflations -reinforce -reinforceable -reinforced -reinforcement -reinforcements -reinforcer -reinforcers -reinforces -reinforcing -reinform -reinformed -reinforming -reinforms -reinfuse -reinfused -reinfuses -reinfusing -reinhabit -reinhabited -reinhabiting -reinhabits -reining -reinitiate -reinitiated -reinitiates -reinitiating -reinject -reinjected -reinjecting -reinjection -reinjections -reinjects -reinjure -reinjured -reinjures -reinjuries -reinjuring -reinjury -reink -reinked -reinking -reinks -reinless -reinnervate -reinnervated -reinnervates -reinnervating -reinnervation -reinnervations -reinoculate -reinoculated -reinoculates -reinoculating -reinoculation -reinoculations -reins -reinsert -reinserted -reinserting -reinsertion -reinsertions -reinserts -reinsman -reinsmen -reinspect -reinspected -reinspecting -reinspection -reinspections -reinspects -reinspire -reinspired -reinspires -reinspiring -reinstall -reinstallation -reinstallations -reinstalled -reinstalling -reinstalls -reinstate -reinstated -reinstatement -reinstatements -reinstates -reinstating -reinstitute -reinstituted -reinstitutes -reinstituting -reinstitutionalization -reinstitutionalizations -reinstitutionalize -reinstitutionalized -reinstitutionalizes -reinstitutionalizing -reinsurance -reinsurances -reinsure -reinsured -reinsurer -reinsurers -reinsures -reinsuring -reintegrate -reintegrated -reintegrates -reintegrating -reintegration -reintegrations -reintegrative -reinter -reinterpret -reinterpretation -reinterpretations -reinterpreted -reinterpreting -reinterprets -reinterred -reinterring -reinters -reinterview -reinterviewed -reinterviewing -reinterviews -reintroduce -reintroduced -reintroduces -reintroducing -reintroduction -reintroductions -reinvade -reinvaded -reinvades -reinvading -reinvasion -reinvasions -reinvent -reinvented -reinventing -reinvention -reinventions -reinvents -reinvest -reinvested -reinvestigate -reinvestigated -reinvestigates -reinvestigating -reinvestigation -reinvestigations -reinvesting -reinvestment -reinvestments -reinvests -reinvigorate -reinvigorated -reinvigorates -reinvigorating -reinvigoration -reinvigorations -reinvigorator -reinvigorators -reinvite -reinvited -reinvites -reinviting -reinvoke -reinvoked -reinvokes -reinvoking -reis -reissue -reissued -reissuer -reissuers -reissues -reissuing -reitbok -reitboks -reiterate -reiterated -reiterates -reiterating -reiteration -reiterations -reiterative -reiteratively -reive -reived -reiver -reivers -reives -reiving -rejacket -rejacketed -rejacketing -rejackets -reject -rejected -rejectee -rejectees -rejecter -rejecters -rejecting -rejectingly -rejection -rejections -rejective -rejector -rejectors -rejects -rejigger -rejiggered -rejiggering -rejiggers -rejoice -rejoiced -rejoicer -rejoicers -rejoices -rejoicing -rejoicingly -rejoicings -rejoin -rejoinder -rejoinders -rejoined -rejoining -rejoins -rejudge -rejudged -rejudges -rejudging -rejuggle -rejuggled -rejuggles -rejuggling -rejuvenate -rejuvenated -rejuvenates -rejuvenating -rejuvenation -rejuvenations -rejuvenator -rejuvenators -rejuvenescence -rejuvenescences -rejuvenescent -rekey -rekeyboard -rekeyboarded -rekeyboarding -rekeyboards -rekeyed -rekeying -rekeys -rekindle -rekindled -rekindles -rekindling -reknit -reknits -reknitted -reknitting -relabel -relabeled -relabeling -relabelled -relabelling -relabels -relace -relaced -relaces -relacing -relacquer -relacquered -relacquering -relacquers -relaid -relandscape -relandscaped -relandscapes -relandscaping -relapse -relapsed -relapser -relapsers -relapses -relapsing -relatable -relate -related -relatedly -relatedness -relatednesses -relater -relaters -relates -relating -relation -relational -relationally -relations -relationship -relationships -relative -relatively -relatives -relativism -relativisms -relativist -relativistic -relativistically -relativists -relativities -relativity -relativize -relativized -relativizes -relativizing -relator -relators -relaunch -relaunched -relaunches -relaunching -relax -relaxant -relaxants -relaxation -relaxations -relaxed -relaxedly -relaxedness -relaxednesses -relaxer -relaxers -relaxes -relaxin -relaxing -relaxins -relay -relayed -relaying -relays -relearn -relearned -relearning -relearns -relearnt -releasable -release -released -releaser -releasers -releases -releasing -relegate -relegated -relegates -relegating -relegation -relegations -relend -relending -relends -relent -relented -relenting -relentless -relentlessly -relentlessness -relentlessnesses -relents -relet -relets -reletter -relettered -relettering -reletters -reletting -relevance -relevances -relevancies -relevancy -relevant -relevantly -releve -releves -reliabilities -reliability -reliable -reliableness -reliablenesses -reliables -reliably -reliance -reliances -reliant -reliantly -relic -relicense -relicensed -relicenses -relicensing -relicensure -relicensures -relics -relict -reliction -relictions -relicts -relied -relief -reliefs -relier -reliers -relies -relievable -relieve -relieved -relievedly -reliever -relievers -relieves -relieving -relievo -relievos -relight -relighted -relighting -relights -religion -religionist -religionists -religionless -religions -religiose -religiosities -religiosity -religious -religiously -religiousness -religiousnesses -reline -relined -relines -relining -relink -relinked -relinking -relinks -relinquish -relinquished -relinquishes -relinquishing -relinquishment -relinquishments -reliquaries -reliquary -relique -reliquefied -reliquefies -reliquefy -reliquefying -reliques -reliquiae -relish -relishable -relished -relishes -relishing -relist -relisted -relisting -relists -relit -relive -relived -relives -reliving -reload -reloaded -reloader -reloaders -reloading -reloads -reloan -reloaned -reloaning -reloans -relocatable -relocate -relocated -relocatee -relocatees -relocates -relocating -relocation -relocations -relock -relocked -relocking -relocks -relook -relooked -relooking -relooks -relubricate -relubricated -relubricates -relubricating -relubrication -relubrications -relucent -reluct -reluctance -reluctances -reluctancies -reluctancy -reluctant -reluctantly -reluctate -reluctated -reluctates -reluctating -reluctation -reluctations -relucted -relucting -relucts -relume -relumed -relumes -relumine -relumined -relumines -reluming -relumining -rely -relying -rem -remade -remail -remailed -remailing -remails -remain -remainder -remaindered -remaindering -remainders -remained -remaining -remains -remake -remaker -remakers -remakes -remaking -reman -remand -remanded -remanding -remands -remanence -remanences -remanent -remanned -remanning -remans -remanufacture -remanufactured -remanufacturer -remanufacturers -remanufactures -remanufacturing -remap -remapped -remapping -remaps -remark -remarkable -remarkableness -remarkablenesses -remarkably -remarked -remarker -remarkers -remarket -remarketed -remarketing -remarkets -remarking -remarks -remarque -remarques -remarriage -remarriages -remarried -remarries -remarry -remarrying -remaster -remastered -remastering -remasters -rematch -rematched -rematches -rematching -remate -remated -rematerialize -rematerialized -rematerializes -rematerializing -remates -remating -remeasure -remeasured -remeasurement -remeasurements -remeasures -remeasuring -remediabilities -remediability -remediable -remedial -remedially -remediate -remediated -remediates -remediating -remediation -remediations -remedied -remedies -remediless -remedy -remedying -remeet -remeeting -remeets -remelt -remelted -remelting -remelts -remember -rememberabilities -rememberability -rememberable -remembered -rememberer -rememberers -remembering -remembers -remembrance -remembrancer -remembrancers -remembrances -remend -remended -remending -remends -remerge -remerged -remerges -remerging -remet -remex -remiges -remigial -remigration -remigrations -remilitarization -remilitarizations -remilitarize -remilitarized -remilitarizes -remilitarizing -remind -reminded -reminder -reminders -remindful -reminding -reminds -reminisce -reminisced -reminiscence -reminiscences -reminiscent -reminiscential -reminiscently -reminiscer -reminiscers -reminisces -reminiscing -remint -reminted -reminting -remints -remise -remised -remises -remising -remiss -remissible -remissibly -remission -remissions -remissly -remissness -remissnesses -remit -remitment -remitments -remits -remittable -remittal -remittals -remittance -remittances -remitted -remittent -remitter -remitters -remitting -remittor -remittors -remix -remixed -remixes -remixing -remixt -remnant -remnants -remobilization -remobilizations -remobilize -remobilized -remobilizes -remobilizing -remodel -remodeled -remodeling -remodelled -remodelling -remodels -remodified -remodifies -remodify -remodifying -remoisten -remoistened -remoistening -remoistens -remolade -remolades -remold -remolded -remolding -remolds -remonetization -remonetizations -remonetize -remonetized -remonetizes -remonetizing -remonstrance -remonstrances -remonstrant -remonstrantly -remonstrants -remonstrate -remonstrated -remonstrates -remonstrating -remonstration -remonstrations -remonstrative -remonstratively -remonstrator -remonstrators -remora -remoras -remorid -remorse -remorseful -remorsefully -remorsefulness -remorsefulnesses -remorseless -remorselessly -remorselessness -remorselessnesses -remorses -remortgage -remortgaged -remortgages -remortgaging -remote -remotely -remoteness -remotenesses -remoter -remotes -remotest -remotion -remotions -remotivate -remotivated -remotivates -remotivating -remotivation -remotivations -remount -remounted -remounting -remounts -removabilities -removability -removable -removableness -removablenesses -removably -removal -removals -remove -removeable -removed -remover -removers -removes -removing -rems -remuda -remudas -remunerate -remunerated -remunerates -remunerating -remuneration -remunerations -remunerative -remuneratively -remunerativeness -remunerativenesses -remunerator -remunerators -remuneratory -remythologize -remythologized -remythologizes -remythologizing -renail -renailed -renailing -renails -renaissance -renaissances -renal -rename -renamed -renames -renaming -renascence -renascences -renascent -renationalization -renationalizations -renationalize -renationalized -renationalizes -renationalizing -renaturation -renaturations -renature -renatured -renatures -renaturing -rencontre -rencontres -rencounter -rencountered -rencountering -rencounters -rend -rended -render -renderable -rendered -renderer -renderers -rendering -renders -rendezvous -rendezvoused -rendezvouses -rendezvousing -rendible -rending -rendition -renditions -rends -rendzina -rendzinas -renegade -renegaded -renegades -renegading -renegado -renegadoes -renegados -renege -reneged -reneger -renegers -reneges -reneging -renegotiable -renegotiate -renegotiated -renegotiates -renegotiating -renegotiation -renegotiations -renest -renested -renesting -renests -renew -renewabilities -renewability -renewable -renewably -renewal -renewals -renewed -renewer -renewers -renewing -renews -reniform -renig -renigged -renigging -renigs -renin -renins -renitencies -renitency -renitent -renminbi -rennase -rennases -rennet -rennets -rennin -rennins -renogram -renograms -renographic -renographies -renography -renominate -renominated -renominates -renominating -renomination -renominations -renormalization -renormalizations -renormalize -renormalized -renormalizes -renormalizing -renotified -renotifies -renotify -renotifying -renounce -renounced -renouncement -renouncements -renouncer -renouncers -renounces -renouncing -renovascular -renovate -renovated -renovates -renovating -renovation -renovations -renovative -renovator -renovators -renown -renowned -renowning -renowns -rent -rentabilities -rentability -rentable -rental -rentals -rente -rented -renter -renters -rentes -rentier -rentiers -renting -rents -renumber -renumbered -renumbering -renumbers -renunciate -renunciates -renunciation -renunciations -renunciative -renunciatory -renvoi -renvois -reobject -reobjected -reobjecting -reobjects -reobserve -reobserved -reobserves -reobserving -reobtain -reobtained -reobtaining -reobtains -reoccupation -reoccupations -reoccupied -reoccupies -reoccupy -reoccupying -reoccur -reoccurred -reoccurrence -reoccurrences -reoccurring -reoccurs -reoffer -reoffered -reoffering -reoffers -reoil -reoiled -reoiling -reoils -reopen -reopened -reopening -reopenings -reopens -reoperate -reoperated -reoperates -reoperating -reoperation -reoperations -reoppose -reopposed -reopposes -reopposing -reorchestrate -reorchestrated -reorchestrates -reorchestrating -reorchestration -reorchestrations -reordain -reordained -reordaining -reordains -reorder -reordered -reordering -reorders -reorganization -reorganizational -reorganizations -reorganize -reorganized -reorganizer -reorganizers -reorganizes -reorganizing -reorient -reorientate -reorientated -reorientates -reorientating -reorientation -reorientations -reoriented -reorienting -reorients -reoutfit -reoutfits -reoutfitted -reoutfitting -reovirus -reoviruses -reoxidation -reoxidations -reoxidize -reoxidized -reoxidizes -reoxidizing -rep -repacified -repacifies -repacify -repacifying -repack -repackage -repackaged -repackager -repackagers -repackages -repackaging -repacked -repacking -repacks -repaid -repaint -repainted -repainting -repaints -repair -repairabilities -repairability -repairable -repaired -repairer -repairers -repairing -repairman -repairmen -repairs -repand -repandly -repanel -repaneled -repaneling -repanelled -repanelling -repanels -repaper -repapered -repapering -repapers -reparable -reparation -reparations -reparative -repark -reparked -reparking -reparks -repartee -repartees -repartition -repartitioned -repartitioning -repartitions -repass -repassage -repassages -repassed -repasses -repassing -repast -repasted -repasting -repasts -repatch -repatched -repatches -repatching -repatriate -repatriated -repatriates -repatriating -repatriation -repatriations -repattern -repatterned -repatterning -repatterns -repave -repaved -repaves -repaving -repay -repayable -repaying -repayment -repayments -repays -repeal -repealable -repealed -repealer -repealers -repealing -repeals -repeat -repeatabilities -repeatability -repeatable -repeated -repeatedly -repeater -repeaters -repeating -repeats -repechage -repechages -repeg -repegged -repegging -repegs -repel -repellant -repellants -repelled -repellencies -repellency -repellent -repellently -repellents -repeller -repellers -repelling -repels -repent -repentance -repentances -repentant -repentantly -repented -repenter -repenters -repenting -repents -repeople -repeopled -repeoples -repeopling -repercussion -repercussions -repercussive -reperk -reperked -reperking -reperks -repertoire -repertoires -repertories -repertory -repetend -repetends -repetition -repetitional -repetitions -repetitious -repetitiously -repetitiousness -repetitiousnesses -repetitive -repetitively -repetitiveness -repetitivenesses -rephotograph -rephotographed -rephotographing -rephotographs -rephrase -rephrased -rephrases -rephrasing -repin -repine -repined -repiner -repiners -repines -repining -repinned -repinning -repins -replace -replaceable -replaced -replacement -replacements -replacer -replacers -replaces -replacing -replan -replanned -replanning -replans -replant -replantation -replantations -replanted -replanting -replants -replaster -replastered -replastering -replasters -replate -replated -replates -replating -replay -replayed -replaying -replays -replead -repleaded -repleader -repleaders -repleading -repleads -repled -repledge -repledged -repledges -repledging -replenish -replenishable -replenished -replenisher -replenishers -replenishes -replenishing -replenishment -replenishments -replete -repleteness -repletenesses -repletion -repletions -repleviable -replevied -replevies -replevin -replevined -replevining -replevins -replevy -replevying -replica -replicabilities -replicability -replicable -replicas -replicase -replicases -replicate -replicated -replicates -replicating -replication -replications -replicative -replicator -replicators -replicon -replicons -replied -replier -repliers -replies -replot -replots -replotted -replotting -replumb -replumbed -replumbing -replumbs -replunge -replunged -replunges -replunging -reply -replying -repo -repolarization -repolarizations -repolarize -repolarized -repolarizes -repolarizing -repolish -repolished -repolishes -repolishing -repoll -repolled -repolling -repolls -repopularize -repopularized -repopularizes -repopularizing -repopulate -repopulated -repopulates -repopulating -repopulation -repopulations -report -reportable -reportage -reportages -reported -reportedly -reporter -reporters -reporting -reportorial -reportorially -reports -repos -reposal -reposals -repose -reposed -reposeful -reposefully -reposefulness -reposefulnesses -reposer -reposers -reposes -reposing -reposit -reposited -repositing -reposition -repositioned -repositioning -repositions -repositories -repository -reposits -repossess -repossessed -repossesses -repossessing -repossession -repossessions -repossessor -repossessors -repot -repots -repotted -repotting -repour -repoured -repouring -repours -repousse -repousses -repower -repowered -repowering -repowers -repp -repped -repps -reprehend -reprehended -reprehending -reprehends -reprehensibilities -reprehensibility -reprehensible -reprehensibleness -reprehensiblenesses -reprehensibly -reprehension -reprehensions -reprehensive -represent -representable -representation -representational -representationalism -representationalisms -representationalist -representationalists -representationally -representations -representative -representatively -representativeness -representativenesses -representatives -representativities -representativity -represented -representer -representers -representing -represents -repress -repressed -represses -repressibilities -repressibility -repressible -repressing -repression -repressionist -repressions -repressive -repressively -repressiveness -repressivenesses -repressor -repressors -repressurize -repressurized -repressurizes -repressurizing -reprice -repriced -reprices -repricing -reprieval -reprievals -reprieve -reprieved -reprieves -reprieving -reprimand -reprimanded -reprimanding -reprimands -reprint -reprinted -reprinter -reprinters -reprinting -reprints -reprisal -reprisals -reprise -reprised -reprises -reprising -repristinate -repristinated -repristinates -repristinating -repristination -repristinations -reprivatization -reprivatizations -reprivatize -reprivatized -reprivatizes -reprivatizing -repro -reproach -reproachable -reproached -reproacher -reproachers -reproaches -reproachful -reproachfully -reproachfulness -reproachfulnesses -reproaching -reproachingly -reprobance -reprobances -reprobate -reprobated -reprobates -reprobating -reprobation -reprobations -reprobative -reprobatory -reprobe -reprobed -reprobes -reprobing -reprocess -reprocessed -reprocesses -reprocessing -reproduce -reproduced -reproducer -reproducers -reproduces -reproducibilities -reproducibility -reproducible -reproducibles -reproducibly -reproducing -reproduction -reproductions -reproductive -reproductively -reproductives -reprogram -reprogramed -reprograming -reprogrammable -reprogrammed -reprogramming -reprograms -reprographer -reprographers -reprographic -reprographics -reprographies -reprography -reproof -reproofs -repros -reproval -reprovals -reprove -reproved -reprover -reprovers -reproves -reproving -reprovingly -reprovision -reprovisioned -reprovisioning -reprovisions -reps -reptant -reptile -reptiles -reptilia -reptilian -reptilians -reptilium -republic -republican -republicanism -republicanisms -republicanize -republicanized -republicanizes -republicanizing -republicans -republication -republications -republics -republish -republished -republisher -republishers -republishes -republishing -repudiate -repudiated -repudiates -repudiating -repudiation -repudiationist -repudiationists -repudiations -repudiator -repudiators -repugn -repugnance -repugnances -repugnancies -repugnancy -repugnant -repugnantly -repugned -repugning -repugns -repulse -repulsed -repulser -repulsers -repulses -repulsing -repulsion -repulsions -repulsive -repulsively -repulsiveness -repulsivenesses -repump -repumped -repumping -repumps -repunctuation -repunctuations -repurchase -repurchased -repurchases -repurchasing -repurified -repurifies -repurify -repurifying -repursue -repursued -repursues -repursuing -reputabilities -reputability -reputable -reputably -reputation -reputational -reputations -repute -reputed -reputedly -reputes -reputing -requalification -requalifications -requalified -requalifies -requalify -requalifying -request -requested -requester -requesters -requesting -requestor -requestors -requests -requiem -requiems -requiescat -requiescats -requin -requins -require -required -requirement -requirements -requirer -requirers -requires -requiring -requisite -requisiteness -requisitenesses -requisites -requisition -requisitioned -requisitioning -requisitions -requital -requitals -requite -requited -requiter -requiters -requites -requiting -rerack -reracked -reracking -reracks -reradiate -reradiated -reradiates -reradiating -reradiation -reradiations -reraise -reraised -reraises -reraising -reran -reread -rereading -rereadings -rereads -rerecord -rerecorded -rerecording -rerecords -reredos -reredoses -reregister -reregistered -reregistering -reregisters -reregistration -reregistrations -reregulate -reregulated -reregulates -reregulating -reregulation -reregulations -rerelease -rereleased -rereleases -rereleasing -reremice -reremind -rereminded -rereminding -rereminds -reremouse -rerepeat -rerepeated -rerepeating -rerepeats -rereview -rereviewed -rereviewing -rereviews -rereward -rerewards -rerig -rerigged -rerigging -rerigs -rerise -rerisen -rerises -rerising -reroll -rerolled -reroller -rerollers -rerolling -rerolls -reroof -reroofed -reroofing -reroofs -rerose -reroute -rerouted -reroutes -rerouting -rerun -rerunning -reruns -res -resaddle -resaddled -resaddles -resaddling -resaid -resail -resailed -resailing -resails -resalable -resale -resales -resalute -resaluted -resalutes -resaluting -resample -resampled -resamples -resampling -resaw -resawed -resawing -resawn -resaws -resay -resaying -resays -rescale -rescaled -rescales -rescaling -reschedule -rescheduled -reschedules -rescheduling -reschool -reschooled -reschooling -reschools -rescind -rescinded -rescinder -rescinders -rescinding -rescindment -rescindments -rescinds -rescission -rescissions -rescissory -rescore -rescored -rescores -rescoring -rescreen -rescreened -rescreening -rescreens -rescript -rescripts -rescuable -rescue -rescued -rescuer -rescuers -rescues -rescuing -resculpt -resculpted -resculpting -resculpts -reseal -resealable -resealed -resealing -reseals -research -researchable -researched -researcher -researchers -researches -researching -researchist -researchists -reseason -reseasoned -reseasoning -reseasons -reseat -reseated -reseating -reseats -reseau -reseaus -reseaux -resect -resectabilities -resectability -resectable -resected -resecting -resection -resections -resects -resecure -resecured -resecures -resecuring -reseda -resedas -resee -reseed -reseeded -reseeding -reseeds -reseeing -reseek -reseeking -reseeks -reseen -resees -resegregate -resegregated -resegregates -resegregating -resegregation -resegregations -reseize -reseized -reseizes -reseizing -resell -reseller -resellers -reselling -resells -resemblance -resemblances -resemblant -resemble -resembled -resembles -resembling -resend -resending -resends -resensitize -resensitized -resensitizes -resensitizing -resent -resented -resentence -resentenced -resentences -resentencing -resentful -resentfully -resentfulness -resentfulnesses -resenting -resentment -resentments -resents -reserpine -reserpines -reservable -reservation -reservationist -reservationists -reservations -reserve -reserved -reservedly -reservedness -reservednesses -reserver -reservers -reserves -reservice -reserviced -reservices -reservicing -reserving -reservist -reservists -reservoir -reservoirs -reset -resets -resettable -resetter -resetters -resetting -resettle -resettled -resettlement -resettlements -resettles -resettling -resew -resewed -resewing -resewn -resews -resh -reshape -reshaped -reshaper -reshapers -reshapes -reshaping -reshave -reshaved -reshaven -reshaves -reshaving -reshes -reshine -reshined -reshines -reshingle -reshingled -reshingles -reshingling -reshining -reship -reshipped -reshipping -reships -reshod -reshoe -reshoeing -reshoes -reshone -reshoot -reshooting -reshoots -reshot -reshow -reshowed -reshowing -reshown -reshows -reshuffle -reshuffled -reshuffles -reshuffling -resid -reside -resided -residence -residences -residencies -residency -resident -residential -residentially -residents -resider -residers -resides -residing -resids -residua -residual -residually -residuals -residuary -residue -residues -residuum -residuums -resift -resifted -resifting -resifts -resight -resighted -resighting -resights -resign -resignation -resignations -resigned -resignedly -resignedness -resignednesses -resigner -resigners -resigning -resigns -resile -resiled -resiles -resilience -resiliences -resiliencies -resiliency -resilient -resiliently -resiling -resilver -resilvered -resilvering -resilvers -resin -resinate -resinated -resinates -resinating -resined -resinified -resinifies -resinify -resinifying -resining -resinoid -resinoids -resinous -resins -resiny -resist -resistance -resistances -resistant -resistants -resisted -resister -resisters -resistibilities -resistibility -resistible -resisting -resistive -resistively -resistiveness -resistivenesses -resistivities -resistivity -resistless -resistlessly -resistlessness -resistlessnesses -resistor -resistors -resists -resite -resited -resites -resiting -resitting -resittings -resize -resized -resizes -resizing -resketch -resketched -resketches -resketching -reslate -reslated -reslates -reslating -resmelt -resmelted -resmelting -resmelts -resmooth -resmoothed -resmoothing -resmooths -resoak -resoaked -resoaking -resoaks -resocialization -resocializations -resocialize -resocialized -resocializes -resocializing -resod -resodded -resodding -resods -resojet -resojets -resold -resolder -resoldered -resoldering -resolders -resole -resoled -resoles -resolidification -resolidifications -resolidified -resolidifies -resolidify -resolidifying -resoling -resoluble -resolute -resolutely -resoluteness -resolutenesses -resoluter -resolutes -resolutest -resolution -resolutions -resolvable -resolve -resolved -resolvent -resolvents -resolver -resolvers -resolves -resolving -resonance -resonances -resonant -resonantly -resonants -resonate -resonated -resonates -resonating -resonator -resonators -resorb -resorbed -resorbing -resorbs -resorcin -resorcinol -resorcinols -resorcins -resorption -resorptions -resorptive -resort -resorted -resorter -resorters -resorting -resorts -resought -resound -resounded -resounding -resoundingly -resounds -resource -resourceful -resourcefully -resourcefulness -resourcefulnesses -resources -resow -resowed -resowing -resown -resows -respace -respaced -respaces -respacing -respade -respaded -respades -respading -respeak -respeaking -respeaks -respect -respectabilities -respectability -respectable -respectableness -respectablenesses -respectables -respectably -respected -respecter -respecters -respectful -respectfully -respectfulness -respectfulnesses -respecting -respective -respectively -respectiveness -respectivenesses -respects -respell -respelled -respelling -respellings -respells -respelt -respirable -respiration -respirations -respirator -respirators -respiratory -respire -respired -respires -respiring -respiritualize -respiritualized -respiritualizes -respiritualizing -respirometer -respirometers -respirometric -respirometries -respirometry -respite -respited -respites -respiting -resplendence -resplendences -resplendencies -resplendency -resplendent -resplendently -resplice -respliced -resplices -resplicing -resplit -resplits -resplitting -respoke -respoken -respond -responded -respondent -respondents -responder -responders -responding -responds -responsa -response -responses -responsibilities -responsibility -responsible -responsibleness -responsiblenesses -responsibly -responsions -responsive -responsively -responsiveness -responsivenesses -responsories -responsory -responsum -respot -respots -respotted -respotting -resprang -respray -resprayed -respraying -resprays -respread -respreading -respreads -respring -respringing -resprings -resprout -resprouted -resprouting -resprouts -resprung -ressentiment -ressentiments -rest -restabilize -restabilized -restabilizes -restabilizing -restack -restacked -restacking -restacks -restaff -restaffed -restaffing -restaffs -restage -restaged -restages -restaging -restamp -restamped -restamping -restamps -restart -restartable -restarted -restarting -restarts -restate -restated -restatement -restatements -restates -restating -restaurant -restauranteur -restauranteurs -restaurants -restaurateur -restaurateurs -rested -rester -resters -restful -restfuller -restfullest -restfully -restfulness -restfulnesses -restimulate -restimulated -restimulates -restimulating -restimulation -restimulations -resting -restitch -restitched -restitches -restitching -restitute -restituted -restitutes -restituting -restitution -restitutions -restive -restively -restiveness -restivenesses -restless -restlessly -restlessness -restlessnesses -restock -restocked -restocking -restocks -restoke -restoked -restokes -restoking -restorable -restoral -restorals -restoration -restorations -restorative -restoratives -restore -restored -restorer -restorers -restores -restoring -restrain -restrainable -restrained -restrainedly -restrainer -restrainers -restraining -restrains -restraint -restraints -restrengthen -restrengthened -restrengthening -restrengthens -restress -restressed -restresses -restressing -restricken -restrict -restricted -restrictedly -restricting -restriction -restrictionism -restrictionisms -restrictionist -restrictionists -restrictions -restrictive -restrictively -restrictiveness -restrictivenesses -restrictives -restricts -restrike -restrikes -restriking -restring -restringing -restrings -restrive -restriven -restrives -restriving -restroom -restrooms -restrove -restruck -restructure -restructured -restructures -restructuring -restrung -rests -restudied -restudies -restudy -restudying -restuff -restuffed -restuffing -restuffs -restyle -restyled -restyles -restyling -resubmission -resubmissions -resubmit -resubmits -resubmitted -resubmitting -result -resultant -resultantly -resultants -resulted -resultful -resulting -resultless -results -resume -resumed -resumer -resumers -resumes -resuming -resummon -resummoned -resummoning -resummons -resumption -resumptions -resupinate -resupine -resupplied -resupplies -resupply -resupplying -resurface -resurfaced -resurfacer -resurfacers -resurfaces -resurfacing -resurge -resurged -resurgence -resurgences -resurgent -resurges -resurging -resurrect -resurrected -resurrecting -resurrection -resurrectional -resurrectionist -resurrectionists -resurrections -resurrects -resurvey -resurveyed -resurveying -resurveys -resuscitate -resuscitated -resuscitates -resuscitating -resuscitation -resuscitations -resuscitative -resuscitator -resuscitators -resyntheses -resynthesis -resynthesize -resynthesized -resynthesizes -resynthesizing -resystematize -resystematized -resystematizes -resystematizing -ret -retable -retables -retack -retacked -retacking -retackle -retackled -retackles -retackling -retacks -retag -retagged -retagging -retags -retail -retailed -retailer -retailers -retailing -retailings -retailor -retailored -retailoring -retailors -retails -retain -retained -retainer -retainers -retaining -retains -retake -retaken -retaker -retakers -retakes -retaking -retaliate -retaliated -retaliates -retaliating -retaliation -retaliations -retaliative -retaliatory -retape -retaped -retapes -retaping -retard -retardant -retardants -retardate -retardates -retardation -retardations -retarded -retarder -retarders -retarding -retards -retarget -retargeted -retargeting -retargets -retaste -retasted -retastes -retasting -retaught -retax -retaxed -retaxes -retaxing -retch -retched -retches -retching -rete -reteach -reteaches -reteaching -reteam -reteamed -reteaming -reteams -retear -retearing -retears -retell -retelling -retellings -retells -retem -retemper -retempered -retempering -retempers -retems -retene -retenes -retention -retentions -retentive -retentively -retentiveness -retentivenesses -retentivities -retentivity -retest -retested -retesting -retests -retexture -retextured -retextures -retexturing -rethink -rethinker -rethinkers -rethinking -rethinks -rethought -rethread -rethreaded -rethreading -rethreads -retia -retial -retiarii -retiarius -retiary -reticence -reticences -reticencies -reticency -reticent -reticently -reticle -reticles -reticula -reticular -reticulate -reticulated -reticulately -reticulates -reticulating -reticulation -reticulations -reticule -reticules -reticulocyte -reticulocytes -reticuloendothelial -reticulum -retie -retied -reties -retiform -retighten -retightened -retightening -retightens -retile -retiled -retiles -retiling -retime -retimed -retimes -retiming -retina -retinacula -retinaculum -retinae -retinal -retinals -retinas -retine -retinene -retinenes -retines -retinite -retinites -retinitides -retinitis -retinoblastoma -retinoblastomas -retinoblastomata -retinoid -retinoids -retinol -retinols -retinopathies -retinopathy -retinoscopies -retinoscopy -retinotectal -retint -retinted -retinting -retints -retinue -retinued -retinues -retinula -retinulae -retinular -retinulas -retirant -retirants -retire -retired -retiredly -retiredness -retirednesses -retiree -retirees -retirement -retirements -retirer -retirers -retires -retiring -retiringly -retiringness -retiringnesses -retitle -retitled -retitles -retitling -retold -retook -retool -retooled -retooling -retools -retore -retorn -retort -retorted -retorter -retorters -retorting -retorts -retouch -retouched -retoucher -retouchers -retouches -retouching -retrace -retraced -retraces -retracing -retrack -retracked -retracking -retracks -retract -retractable -retracted -retractile -retractilities -retractility -retracting -retraction -retractions -retractor -retractors -retracts -retrain -retrainable -retrained -retraining -retrains -retral -retrally -retransfer -retransferred -retransferring -retransfers -retransform -retransformation -retransformations -retransformed -retransforming -retransforms -retranslate -retranslated -retranslates -retranslating -retranslation -retranslations -retransmission -retransmissions -retransmit -retransmits -retransmitted -retransmitting -retread -retreaded -retreading -retreads -retreat -retreatant -retreatants -retreated -retreater -retreaters -retreating -retreats -retrench -retrenched -retrenches -retrenching -retrenchment -retrenchments -retrial -retrials -retribution -retributions -retributive -retributively -retributory -retried -retries -retrievabilities -retrievability -retrievable -retrieval -retrievals -retrieve -retrieved -retriever -retrievers -retrieves -retrieving -retrim -retrimmed -retrimming -retrims -retro -retroact -retroacted -retroacting -retroaction -retroactions -retroactive -retroactively -retroactivities -retroactivity -retroacts -retrocede -retroceded -retrocedes -retroceding -retrocession -retrocessions -retrodict -retrodicted -retrodicting -retrodiction -retrodictions -retrodictive -retrodicts -retrofire -retrofired -retrofires -retrofiring -retrofit -retrofits -retrofitted -retrofitting -retroflection -retroflections -retroflex -retroflexion -retroflexions -retrogradation -retrogradations -retrograde -retrograded -retrogradely -retrogrades -retrograding -retrogress -retrogressed -retrogresses -retrogressing -retrogression -retrogressions -retrogressive -retrogressively -retropack -retropacks -retroperitoneal -retroperitoneally -retroreflection -retroreflections -retroreflective -retroreflector -retroreflectors -retrorocket -retrorockets -retrorse -retros -retrospect -retrospected -retrospecting -retrospection -retrospections -retrospective -retrospectively -retrospectives -retrospects -retrousse -retroversion -retroversions -retroviral -retrovirus -retroviruses -retry -retrying -rets -retsina -retsinas -retted -retting -retune -retuned -retunes -retuning -return -returnable -returnables -returned -returnee -returnees -returner -returners -returning -returns -retuse -retwist -retwisted -retwisting -retwists -retying -retype -retyped -retypes -retyping -reunification -reunifications -reunified -reunifies -reunify -reunifying -reunion -reunionist -reunionistic -reunionists -reunions -reunite -reunited -reuniter -reuniters -reunites -reuniting -reupholster -reupholstered -reupholstering -reupholsters -reusabilities -reusability -reusable -reuse -reused -reuses -reusing -reutilization -reutilizations -reutilize -reutilized -reutilizes -reutilizing -reutter -reuttered -reuttering -reutters -rev -revaccinate -revaccinated -revaccinates -revaccinating -revaccination -revaccinations -revalidate -revalidated -revalidates -revalidating -revalidation -revalidations -revalorization -revalorizations -revalorize -revalorized -revalorizes -revalorizing -revaluate -revaluated -revaluates -revaluating -revaluation -revaluations -revalue -revalued -revalues -revaluing -revamp -revamped -revamper -revampers -revamping -revamps -revanche -revanches -revanchism -revanchisms -revanchist -revanchists -revascularization -revascularizations -reveal -revealable -revealed -revealer -revealers -revealing -revealingly -revealment -revealments -reveals -revegetate -revegetated -revegetates -revegetating -revegetation -revegetations -revehent -reveille -reveilles -revel -revelation -revelations -revelator -revelators -revelatory -reveled -reveler -revelers -reveling -revelled -reveller -revellers -revelling -revelries -revelry -revels -revenant -revenants -revenge -revenged -revengeful -revengefully -revengefulness -revengefulnesses -revenger -revengers -revenges -revenging -revenual -revenue -revenued -revenuer -revenuers -revenues -reverb -reverbed -reverberant -reverberantly -reverberate -reverberated -reverberates -reverberating -reverberation -reverberations -reverberative -reverberatory -reverbing -reverbs -revere -revered -reverence -reverenced -reverencer -reverencers -reverences -reverencing -reverend -reverends -reverent -reverential -reverentially -reverently -reverer -reverers -reveres -reverie -reveries -reverified -reverifies -reverify -reverifying -revering -revers -reversal -reversals -reverse -reversed -reversely -reverser -reversers -reverses -reversibilities -reversibility -reversible -reversibles -reversibly -reversing -reversion -reversional -reversionary -reversioner -reversioners -reversions -reverso -reversos -revert -revertant -revertants -reverted -reverter -reverters -revertible -reverting -reverts -revery -revest -revested -revesting -revests -revet -revetment -revetments -revets -revetted -revetting -revictual -revictualed -revictualing -revictualled -revictualling -revictuals -review -reviewable -reviewal -reviewals -reviewed -reviewer -reviewers -reviewing -reviews -revile -reviled -revilement -revilements -reviler -revilers -reviles -reviling -revisable -revisal -revisals -revise -revised -reviser -revisers -revises -revising -revision -revisionary -revisionism -revisionisms -revisionist -revisionists -revisions -revisit -revisited -revisiting -revisits -revisor -revisors -revisory -revisualization -revisualizations -revitalise -revitalised -revitalises -revitalising -revitalization -revitalizations -revitalize -revitalized -revitalizes -revitalizing -revivable -revival -revivalism -revivalisms -revivalist -revivalistic -revivalists -revivals -revive -revived -reviver -revivers -revives -revivification -revivifications -revivified -revivifies -revivify -revivifying -reviving -reviviscence -reviviscences -reviviscent -revocable -revocation -revocations -revoice -revoiced -revoices -revoicing -revokable -revoke -revoked -revoker -revokers -revokes -revoking -revolt -revolted -revolter -revolters -revolting -revoltingly -revolts -revolute -revolution -revolutionaries -revolutionarily -revolutionariness -revolutionarinesses -revolutionary -revolutionise -revolutionised -revolutionises -revolutionising -revolutionist -revolutionists -revolutionize -revolutionized -revolutionizer -revolutionizers -revolutionizes -revolutionizing -revolutions -revolvable -revolve -revolved -revolver -revolvers -revolves -revolving -revote -revoted -revotes -revoting -revs -revue -revues -revuist -revuists -revulsed -revulsion -revulsions -revulsive -revved -revving -rewake -rewaked -rewaken -rewakened -rewakening -rewakens -rewakes -rewaking -rewan -reward -rewardable -rewarded -rewarder -rewarders -rewarding -rewardingly -rewards -rewarm -rewarmed -rewarming -rewarms -rewash -rewashed -rewashes -rewashing -rewax -rewaxed -rewaxes -rewaxing -reweave -reweaved -reweaves -reweaving -rewed -rewedded -rewedding -reweds -reweigh -reweighed -reweighing -reweighs -reweld -rewelded -rewelding -rewelds -rewet -rewets -rewetted -rewetting -rewiden -rewidened -rewidening -rewidens -rewin -rewind -rewinded -rewinder -rewinders -rewinding -rewinds -rewinning -rewins -rewire -rewired -rewires -rewiring -rewoke -rewoken -rewon -reword -reworded -rewording -rewords -rework -reworked -reworking -reworks -rewound -rewove -rewoven -rewrap -rewrapped -rewrapping -rewraps -rewrapt -rewrite -rewriter -rewriters -rewrites -rewriting -rewritten -rewrote -rewrought -rex -rexes -reynard -reynards -rezone -rezoned -rezones -rezoning -rhabdocoele -rhabdocoeles -rhabdom -rhabdomancer -rhabdomancers -rhabdomancies -rhabdomancy -rhabdome -rhabdomere -rhabdomeres -rhabdomes -rhabdoms -rhabdomyosarcoma -rhabdomyosarcomas -rhabdomyosarcomata -rhabdovirus -rhabdoviruses -rhachides -rhachis -rhachises -rhadamanthine -rhamnose -rhamnoses -rhamnus -rhamnuses -rhaphae -rhaphe -rhaphes -rhapsode -rhapsodes -rhapsodic -rhapsodical -rhapsodically -rhapsodies -rhapsodist -rhapsodists -rhapsodize -rhapsodized -rhapsodizes -rhapsodizing -rhapsody -rhatanies -rhatany -rhea -rheas -rhebok -rheboks -rhematic -rhenium -rheniums -rheobase -rheobases -rheological -rheologically -rheologies -rheologist -rheologists -rheology -rheometer -rheometers -rheophil -rheostat -rheostatic -rheostats -rhesus -rhesuses -rhetor -rhetoric -rhetorical -rhetorically -rhetorician -rhetoricians -rhetorics -rhetors -rheum -rheumatic -rheumatically -rheumatics -rheumatism -rheumatisms -rheumatiz -rheumatizes -rheumatoid -rheumatologies -rheumatologist -rheumatologists -rheumatology -rheumic -rheumier -rheumiest -rheums -rheumy -rhinal -rhinencephala -rhinencephalic -rhinencephalon -rhinencephalons -rhinestone -rhinestoned -rhinestones -rhinitides -rhinitis -rhino -rhinoceri -rhinoceros -rhinoceroses -rhinoplasties -rhinoplasty -rhinos -rhinoscopies -rhinoscopy -rhinovirus -rhinoviruses -rhizobia -rhizobial -rhizobium -rhizoctonia -rhizoctonias -rhizoid -rhizoidal -rhizoids -rhizoma -rhizomata -rhizomatous -rhizome -rhizomes -rhizomic -rhizopi -rhizoplane -rhizoplanes -rhizopod -rhizopods -rhizopus -rhizopuses -rhizosphere -rhizospheres -rhizotomies -rhizotomy -rho -rhodamin -rhodamine -rhodamines -rhodamins -rhodic -rhodium -rhodiums -rhodochrosite -rhodochrosites -rhododendron -rhododendrons -rhodolite -rhodolites -rhodomontade -rhodomontades -rhodonite -rhodonites -rhodopsin -rhodopsins -rhodora -rhodoras -rhomb -rhombencephala -rhombencephalon -rhombi -rhombic -rhombohedra -rhombohedral -rhombohedron -rhombohedrons -rhomboid -rhomboidal -rhomboidei -rhomboideus -rhomboids -rhombs -rhombus -rhombuses -rhonchal -rhonchi -rhonchus -rhos -rhubarb -rhubarbs -rhumb -rhumba -rhumbaed -rhumbaing -rhumbas -rhumbs -rhus -rhuses -rhyme -rhymed -rhymeless -rhymer -rhymers -rhymes -rhymester -rhymesters -rhyming -rhynchocephalian -rhynchocephalians -rhyolite -rhyolites -rhyolitic -rhyta -rhythm -rhythmic -rhythmical -rhythmically -rhythmicities -rhythmicity -rhythmics -rhythmist -rhythmists -rhythmization -rhythmizations -rhythmize -rhythmized -rhythmizes -rhythmizing -rhythms -rhytidome -rhytidomes -rhyton -rhytons -ria -rial -rials -rialto -rialtos -riant -riantly -rias -riata -riatas -rib -ribald -ribaldly -ribaldries -ribaldry -ribalds -riband -ribands -ribavirin -ribavirins -ribband -ribbands -ribbed -ribber -ribbers -ribbier -ribbiest -ribbing -ribbings -ribbon -ribboned -ribbonfish -ribbonfishes -ribboning -ribbonlike -ribbons -ribbony -ribby -ribes -ribeye -ribeyes -ribgrass -ribgrasses -ribier -ribiers -ribless -riblet -riblets -riblike -riboflavin -riboflavins -ribonuclease -ribonucleases -ribonucleoprotein -ribonucleoproteins -ribonucleoside -ribonucleosides -ribonucleotide -ribonucleotides -ribose -riboses -ribosomal -ribosome -ribosomes -ribs -ribwort -ribworts -rice -ricebird -ricebirds -riced -ricer -ricercar -ricercare -ricercari -ricercars -ricers -rices -rich -richen -richened -richening -richens -richer -riches -richest -richly -richness -richnesses -richweed -richweeds -ricin -ricing -ricins -ricinus -ricinuses -rick -ricked -ricketier -ricketiest -rickets -rickettsia -rickettsiae -rickettsial -rickettsias -rickety -rickey -rickeys -ricking -rickrack -rickracks -ricks -ricksha -rickshas -rickshaw -rickshaws -ricochet -ricocheted -ricocheting -ricochets -ricochetted -ricochetting -ricotta -ricottas -ricrac -ricracs -rictal -rictus -rictuses -rid -ridable -riddance -riddances -ridded -ridden -ridder -ridders -ridding -riddle -riddled -riddler -riddlers -riddles -riddling -ride -rideable -rident -rider -riderless -riders -ridership -riderships -rides -ridge -ridged -ridgel -ridgeline -ridgelines -ridgeling -ridgelings -ridgels -ridgepole -ridgepoles -ridges -ridgier -ridgiest -ridgil -ridgils -ridging -ridgling -ridglings -ridgy -ridicule -ridiculed -ridiculer -ridiculers -ridicules -ridiculing -ridiculous -ridiculously -ridiculousness -ridiculousnesses -riding -ridings -ridley -ridleys -ridotto -ridottos -rids -riel -riels -riesling -rieslings -riever -rievers -rif -rifampicin -rifampicins -rifampin -rifampins -rife -rifely -rifeness -rifenesses -rifer -rifest -riff -riffed -riffing -riffle -riffled -riffler -rifflers -riffles -riffling -riffraff -riffraffs -riffs -rifle -riflebird -riflebirds -rifled -rifleman -riflemen -rifler -rifleries -riflers -riflery -rifles -rifling -riflings -rifs -rift -rifted -rifting -riftless -rifts -rig -rigadoon -rigadoons -rigamarole -rigamaroles -rigatoni -rigatonis -rigaudon -rigaudons -rigged -rigger -riggers -rigging -riggings -right -righted -righteous -righteously -righteousness -righteousnesses -righter -righters -rightest -rightful -rightfully -rightfulness -rightfulnesses -righties -righting -rightism -rightisms -rightist -rightists -rightly -rightmost -rightness -rightnesses -righto -rights -rightsize -rightsized -rightsizes -rightsizing -rightward -rightwards -righty -rigid -rigidification -rigidifications -rigidified -rigidifies -rigidify -rigidifying -rigidities -rigidity -rigidly -rigidness -rigidnesses -rigmarole -rigmaroles -rigor -rigorism -rigorisms -rigorist -rigoristic -rigorists -rigorous -rigorously -rigorousness -rigorousnesses -rigors -rigour -rigours -rigs -rijsttafel -rijsttafels -rikisha -rikishas -rikshaw -rikshaws -rile -riled -riles -riley -rilievi -rilievo -rilievos -riling -rill -rille -rilled -rilles -rillet -rillets -rillettes -rilling -rills -rim -rime -rimed -rimer -rimers -rimes -rimester -rimesters -rimfire -rimfires -rimier -rimiest -riminess -riminesses -riming -rimland -rimlands -rimless -rimmed -rimmer -rimmers -rimming -rimose -rimosely -rimosities -rimosity -rimous -rimple -rimpled -rimples -rimpling -rimrock -rimrocks -rims -rimy -rin -rind -rinded -rinderpest -rinderpests -rinds -ring -ringbark -ringbarked -ringbarking -ringbarks -ringbolt -ringbolts -ringbone -ringbones -ringdove -ringdoves -ringed -ringent -ringer -ringers -ringgit -ringgits -ringhals -ringhalses -ringing -ringingly -ringleader -ringleaders -ringlet -ringlets -ringlike -ringmaster -ringmasters -ringneck -ringnecks -rings -ringside -ringsides -ringstraked -ringtail -ringtails -ringtaw -ringtaws -ringtoss -ringtosses -ringworm -ringworms -rink -rinks -rinning -rins -rinsable -rinse -rinsed -rinser -rinsers -rinses -rinsible -rinsing -rinsings -rioja -riojas -riot -rioted -rioter -rioters -rioting -riotous -riotously -riotousness -riotousnesses -riots -rip -riparian -ripcord -ripcords -ripe -riped -ripely -ripen -ripened -ripener -ripeners -ripeness -ripenesses -ripening -ripens -riper -ripes -ripest -ripieni -ripieno -ripienos -riping -ripoff -ripoffs -ripost -riposte -riposted -ripostes -riposting -riposts -rippable -ripped -ripper -rippers -ripping -ripple -rippled -rippler -ripplers -ripples -ripplet -ripplets -ripplier -rippliest -rippling -ripply -riprap -riprapped -riprapping -ripraps -rips -ripsaw -ripsaws -ripsnorter -ripsnorters -ripsnorting -ripstop -ripstops -riptide -riptides -rise -risen -riser -risers -rises -rishi -rishis -risibilities -risibility -risible -risibles -risibly -rising -risings -risk -risked -risker -riskers -riskier -riskiest -riskily -riskiness -riskinesses -risking -riskless -risks -risky -risorgimento -risorgimentos -risotto -risottos -risque -rissole -rissoles -risus -risuses -ritard -ritardando -ritardandos -ritards -rite -rites -ritornelli -ritornello -ritornellos -ritter -ritters -ritual -ritualism -ritualisms -ritualist -ritualistic -ritualistically -ritualists -ritualization -ritualizations -ritualize -ritualized -ritualizes -ritualizing -ritually -rituals -ritz -ritzes -ritzier -ritziest -ritzily -ritziness -ritzinesses -ritzy -rivage -rivages -rival -rivaled -rivaling -rivalled -rivalling -rivalries -rivalrous -rivalry -rivals -rive -rived -riven -river -riverbank -riverbanks -riverbed -riverbeds -riverboat -riverboats -riverfront -riverfronts -riverine -rivers -riverside -riversides -riverward -riverwards -rives -rivet -riveted -riveter -riveters -riveting -rivetingly -rivets -rivetted -rivetting -riviera -rivieras -riviere -rivieres -riving -rivulet -rivulets -rivulose -riyal -riyals -roach -roached -roaches -roaching -road -roadabilities -roadability -roadbed -roadbeds -roadblock -roadblocked -roadblocking -roadblocks -roadeo -roadeos -roadholding -roadholdings -roadhouse -roadhouses -roadie -roadies -roadkill -roadkills -roadless -roadmap -roadmaps -roadrunner -roadrunners -roads -roadshow -roadshows -roadside -roadsides -roadstead -roadsteads -roadster -roadsters -roadway -roadways -roadwork -roadworks -roadworthiness -roadworthinesses -roadworthy -roam -roamed -roamer -roamers -roaming -roams -roan -roans -roar -roared -roarer -roarers -roaring -roaringly -roarings -roars -roast -roasted -roaster -roasters -roasting -roasts -rob -robalo -robalos -roband -robands -robbed -robber -robberies -robbers -robbery -robbin -robbing -robbins -robe -robed -robes -robin -robing -robins -roble -robles -roborant -roborants -robot -robotic -robotically -robotics -robotism -robotisms -robotization -robotizations -robotize -robotized -robotizes -robotizing -robotries -robotry -robots -robs -robust -robusta -robustas -robuster -robustest -robustious -robustiously -robustiousness -robustiousnesses -robustly -robustness -robustnesses -roc -rocaille -rocailles -rochet -rochets -rock -rockabies -rockabillies -rockabilly -rockaby -rockabye -rockabyes -rockaway -rockaways -rockbound -rocked -rocker -rockeries -rockers -rockery -rocket -rocketed -rocketeer -rocketeers -rocketer -rocketers -rocketing -rocketries -rocketry -rockets -rockfall -rockfalls -rockfish -rockfishes -rockhopper -rockhoppers -rockhound -rockhounding -rockhoundings -rockhounds -rockier -rockiest -rockiness -rockinesses -rocking -rockless -rocklike -rockling -rocklings -rockoon -rockoons -rockrose -rockroses -rocks -rockshaft -rockshafts -rockslide -rockslides -rockweed -rockweeds -rockwork -rockworks -rocky -rococo -rococos -rocs -rod -rodded -rodding -rode -rodent -rodenticide -rodenticides -rodents -rodeo -rodeoed -rodeoing -rodeos -rodless -rodlike -rodman -rodmen -rodomontade -rodomontades -rods -rodsman -rodsmen -roe -roebuck -roebucks -roentgen -roentgenogram -roentgenograms -roentgenographic -roentgenographically -roentgenographies -roentgenography -roentgenologic -roentgenological -roentgenologically -roentgenologies -roentgenologist -roentgenologists -roentgenology -roentgens -roes -rogation -rogations -rogatory -roger -rogers -rogue -rogued -rogueing -rogueries -roguery -rogues -roguing -roguish -roguishly -roguishness -roguishnesses -roil -roiled -roilier -roiliest -roiling -roils -roily -roister -roistered -roisterer -roisterers -roistering -roisterous -roisterously -roisters -rolamite -rolamites -role -roles -rolf -rolfed -rolfer -rolfers -rolfing -rolfs -roll -rollaway -rollback -rollbacks -rolled -roller -rollers -rollick -rollicked -rollicking -rollicks -rollicky -rolling -rollings -rollmop -rollmops -rollout -rollouts -rollover -rollovers -rolls -rolltop -rollway -rollways -rom -romaine -romaines -roman -romance -romanced -romancer -romancers -romances -romancing -romanise -romanised -romanises -romanising -romanization -romanizations -romanize -romanized -romanizes -romanizing -romano -romanos -romans -romantic -romantically -romanticise -romanticised -romanticises -romanticising -romanticism -romanticisms -romanticist -romanticists -romanticization -romanticizations -romanticize -romanticized -romanticizes -romanticizing -romantics -romaunt -romaunts -romeldale -romeldales -romeo -romeos -romp -romped -romper -rompers -romping -rompish -romps -roms -rondeau -rondeaux -rondel -rondelet -rondelets -rondelle -rondelles -rondels -rondo -rondos -rondure -rondures -ronion -ronions -ronnel -ronnels -rontgen -rontgens -ronyon -ronyons -rood -roods -roof -roofed -roofer -roofers -roofing -roofings -roofless -rooflike -roofline -rooflines -roofs -rooftop -rooftops -rooftree -rooftrees -rook -rooked -rookeries -rookery -rookie -rookier -rookies -rookiest -rooking -rooks -rooky -room -roomed -roomer -roomers -roomette -roomettes -roomful -roomfuls -roomie -roomier -roomies -roomiest -roomily -roominess -roominesses -rooming -roommate -roommates -rooms -roomy -roorbach -roorbachs -roorback -roorbacks -roose -roosed -rooser -roosers -rooses -roosing -roost -roosted -rooster -roosters -roosting -roosts -root -rootage -rootages -rooted -rootedness -rootednesses -rooter -rooters -roothold -rootholds -rootier -rootiest -rooting -rootless -rootlessness -rootlessnesses -rootlet -rootlets -rootlike -roots -rootstock -rootstocks -rooty -ropable -rope -roped -ropedancer -ropedancers -ropedancing -ropedancings -ropelike -roper -roperies -ropers -ropery -ropes -ropewalk -ropewalker -ropewalkers -ropewalks -ropeway -ropeways -ropey -ropier -ropiest -ropily -ropiness -ropinesses -roping -ropy -roque -roquelaure -roquelaures -roques -roquet -roqueted -roqueting -roquets -rorqual -rorquals -rosaceous -rosaria -rosarian -rosarians -rosaries -rosarium -rosariums -rosary -roscoe -roscoes -rose -roseate -roseately -rosebay -rosebays -rosebud -rosebuds -rosebush -rosebushes -rosed -rosefish -rosefishes -roselike -roselle -roselles -rosemaling -rosemalings -rosemaries -rosemary -roseola -roseolar -roseolas -roseries -roseroot -roseroots -rosery -roses -roseslug -roseslugs -roset -rosets -rosette -rosettes -rosewater -rosewood -rosewoods -rosier -rosiest -rosily -rosin -rosined -rosiness -rosinesses -rosing -rosining -rosinol -rosinols -rosinous -rosins -rosinweed -rosinweeds -rosiny -rosolio -rosolios -rostella -rostellar -rostellum -rostellums -roster -rosters -rostra -rostral -rostrally -rostrate -rostrum -rostrums -rosulate -rosy -rot -rota -rotameter -rotameters -rotaries -rotary -rotas -rotatable -rotate -rotated -rotates -rotating -rotation -rotational -rotations -rotative -rotatively -rotator -rotatores -rotators -rotatory -rotavirus -rotaviruses -rotch -rotche -rotches -rote -rotenone -rotenones -rotes -rotgut -rotguts -roti -rotifer -rotifers -rotiform -rotis -rotisserie -rotisseries -rotl -rotls -roto -rotogravure -rotogravures -rotor -rotorcraft -rotors -rotos -rototill -rototilled -rototiller -rototillers -rototilling -rototills -rots -rotte -rotted -rotten -rottener -rottenest -rottenly -rottenness -rottennesses -rottenstone -rottenstones -rotter -rotters -rottes -rotting -rottweiler -rottweilers -rotund -rotunda -rotundas -rotundities -rotundity -rotundly -rotundness -rotundnesses -roturier -roturiers -rouble -roubles -rouche -rouches -roue -rouen -rouens -roues -rouge -rouged -rouges -rough -roughage -roughages -roughcast -roughcasting -roughcasts -roughdried -roughdries -roughdry -roughdrying -roughed -roughen -roughened -roughening -roughens -rougher -roughers -roughest -roughhew -roughhewed -roughhewing -roughhewn -roughhews -roughhouse -roughhoused -roughhouses -roughhousing -roughing -roughish -roughleg -roughlegs -roughly -roughneck -roughnecks -roughness -roughnesses -roughrider -roughriders -roughs -roughshod -rouging -rouille -rouilles -roulade -roulades -rouleau -rouleaus -rouleaux -roulette -rouletted -roulettes -rouletting -round -roundabout -roundaboutness -roundaboutnesses -roundabouts -rounded -roundedness -roundednesses -roundel -roundelay -roundelays -roundels -rounder -rounders -roundest -roundheaded -roundheadedness -roundheadednesses -roundhouse -roundhouses -rounding -roundish -roundlet -roundlets -roundly -roundness -roundnesses -rounds -roundsman -roundsmen -roundtable -roundtables -roundup -roundups -roundwood -roundwoods -roundworm -roundworms -roup -rouped -roupet -roupier -roupiest -roupily -rouping -roups -roupy -rouse -rouseabout -rouseabouts -roused -rousement -rousements -rouser -rousers -rouses -rousing -rousingly -rousseau -rousseaus -roust -roustabout -roustabouts -rousted -rouster -rousters -rousting -rousts -rout -route -routed -routeman -routemen -router -routers -routes -routeway -routeways -routh -rouths -routine -routinely -routines -routing -routinization -routinizations -routinize -routinized -routinizes -routinizing -routs -roux -rove -roved -roven -rover -rovers -roves -roving -rovingly -rovings -row -rowable -rowan -rowanberries -rowanberry -rowans -rowboat -rowboats -rowdier -rowdies -rowdiest -rowdily -rowdiness -rowdinesses -rowdy -rowdyish -rowdyism -rowdyisms -rowed -rowel -roweled -roweling -rowelled -rowelling -rowels -rowen -rowens -rower -rowers -rowing -rowings -rowlock -rowlocks -rows -rowth -rowths -royal -royalism -royalisms -royalist -royalists -royally -royals -royalties -royalty -royster -roystered -roystering -roysters -rozzer -rozzers -ruana -ruanas -rub -rubaboo -rubaboos -rubace -rubaces -rubaiyat -rubasse -rubasses -rubati -rubato -rubatos -rubbaboo -rubbaboos -rubbed -rubber -rubbered -rubbering -rubberize -rubberized -rubberizes -rubberizing -rubberlike -rubberneck -rubbernecked -rubbernecker -rubberneckers -rubbernecking -rubbernecks -rubbers -rubbery -rubbing -rubbings -rubbish -rubbishes -rubbishy -rubble -rubbled -rubbles -rubblier -rubbliest -rubbling -rubbly -rubdown -rubdowns -rube -rubefacient -rubefacients -rubella -rubellas -rubellite -rubellites -rubeola -rubeolar -rubeolas -rubes -rubicund -rubicundities -rubicundity -rubidic -rubidium -rubidiums -rubied -rubier -rubies -rubiest -rubigo -rubigos -rubious -ruble -rubles -ruboff -ruboffs -rubout -rubouts -rubric -rubrical -rubrically -rubricate -rubricated -rubricates -rubricating -rubrication -rubrications -rubricator -rubricators -rubrics -rubs -rubus -ruby -rubying -rubylike -rubythroat -rubythroats -ruche -ruched -ruches -ruching -ruchings -ruck -rucked -rucking -ruckle -ruckled -ruckles -ruckling -rucks -rucksack -rucksacks -ruckus -ruckuses -ruction -ructions -ructious -rudbeckia -rudbeckias -rudd -rudder -rudderless -rudderpost -rudderposts -rudders -ruddier -ruddiest -ruddily -ruddiness -ruddinesses -ruddle -ruddled -ruddles -ruddling -ruddock -ruddocks -rudds -ruddy -rude -rudely -rudeness -rudenesses -ruder -ruderal -ruderals -rudesbies -rudesby -rudest -rudiment -rudimental -rudimentarily -rudimentariness -rudimentarinesses -rudimentary -rudiments -rue -rued -rueful -ruefully -ruefulness -ruefulnesses -ruer -ruers -rues -rufescent -ruff -ruffe -ruffed -ruffes -ruffian -ruffianism -ruffianisms -ruffianly -ruffians -ruffing -ruffle -ruffled -ruffler -rufflers -ruffles -rufflier -ruffliest -rufflike -ruffling -ruffly -ruffs -rufiyaa -rufous -rug -ruga -rugae -rugal -rugate -rugbies -rugby -rugged -ruggeder -ruggedest -ruggedization -ruggedizations -ruggedize -ruggedized -ruggedizes -ruggedizing -ruggedly -ruggedness -ruggednesses -rugger -ruggers -rugging -ruglike -rugola -rugolas -rugosa -rugosas -rugose -rugosely -rugosities -rugosity -rugous -rugs -rugulose -ruin -ruinable -ruinate -ruinated -ruinates -ruinating -ruination -ruinations -ruined -ruiner -ruiners -ruing -ruining -ruinous -ruinously -ruinousness -ruinousnesses -ruins -rulable -rule -ruled -ruleless -ruler -rulers -rulership -rulerships -rules -rulier -ruliest -ruling -rulings -ruly -rum -rumaki -rumakis -rumba -rumbaed -rumbaing -rumbas -rumble -rumbled -rumbler -rumblers -rumbles -rumbling -rumblings -rumbly -rumbustious -rumbustiously -rumbustiousness -rumbustiousnesses -rumen -rumens -rumina -ruminal -ruminant -ruminantly -ruminants -ruminate -ruminated -ruminates -ruminating -rumination -ruminations -ruminative -ruminatively -ruminator -ruminators -rummage -rummaged -rummager -rummagers -rummages -rummaging -rummer -rummers -rummest -rummier -rummies -rummiest -rummy -rumor -rumored -rumoring -rumormonger -rumormongering -rumormongerings -rumormongers -rumors -rumour -rumoured -rumouring -rumours -rump -rumple -rumpled -rumples -rumpless -rumplier -rumpliest -rumpling -rumply -rumps -rumpus -rumpuses -rumrunner -rumrunners -rums -run -runabout -runabouts -runagate -runagates -runaround -runarounds -runaway -runaways -runback -runbacks -runcinate -rundle -rundles -rundlet -rundlets -rundown -rundowns -rune -runelike -runes -rung -rungless -rungs -runic -runkle -runkled -runkles -runkling -runless -runlet -runlets -runnel -runnels -runner -runners -runnier -runniest -running -runnings -runny -runoff -runoffs -runout -runouts -runover -runovers -runround -runrounds -runs -runt -runtier -runtiest -runtiness -runtinesses -runtish -runts -runty -runway -runways -rupee -rupees -rupiah -rupiahs -rupture -ruptured -ruptures -rupturing -rural -ruralise -ruralised -ruralises -ruralising -ruralism -ruralisms -ruralist -ruralists -ruralite -ruralites -ruralities -rurality -ruralize -ruralized -ruralizes -ruralizing -rurally -rurban -ruse -ruses -rush -rushed -rushee -rushees -rusher -rushers -rushes -rushier -rushiest -rushing -rushings -rushlight -rushlights -rushlike -rushy -rusine -rusk -rusks -russet -russeting -russetings -russets -russetting -russettings -russety -russified -russifies -russify -russifying -rust -rustable -rusted -rustic -rustical -rustically -rusticals -rusticate -rusticated -rusticates -rusticating -rustication -rustications -rusticator -rusticators -rusticities -rusticity -rusticly -rustics -rustier -rustiest -rustily -rustiness -rustinesses -rusting -rustle -rustled -rustler -rustlers -rustles -rustless -rustling -rustproof -rustproofed -rustproofing -rustproofs -rusts -rusty -rut -rutabaga -rutabagas -ruth -ruthenic -ruthenium -rutheniums -rutherfordium -rutherfordiums -ruthful -ruthfully -ruthfulness -ruthfulnesses -ruthless -ruthlessly -ruthlessness -ruthlessnesses -ruths -rutilant -rutile -rutiles -rutin -rutins -ruts -rutted -ruttier -ruttiest -ruttily -rutting -ruttish -ruttishly -ruttishness -ruttishnesses -rutty -rya -ryas -rye -ryegrass -ryegrasses -ryes -ryke -ryked -rykes -ryking -rynd -rynds -ryokan -ryokans -ryot -ryots -sab -sabadilla -sabadillas -sabaton -sabatons -sabayon -sabayons -sabbat -sabbath -sabbaths -sabbatic -sabbatical -sabbaticals -sabbatics -sabbats -sabbed -sabbing -sabe -sabed -sabeing -saber -sabered -sabering -sabermetrician -sabermetricians -sabermetrics -sabers -sabes -sabin -sabine -sabines -sabins -sabir -sabirs -sable -sablefish -sablefishes -sables -sabot -sabotage -sabotaged -sabotages -sabotaging -saboteur -saboteurs -sabots -sabra -sabras -sabre -sabred -sabres -sabring -sabs -sabulose -sabulous -sac -sacahuista -sacahuistas -sacahuiste -sacahuistes -sacaton -sacatons -sacbut -sacbuts -saccade -saccades -saccadic -saccate -saccharase -saccharases -saccharide -saccharides -saccharification -saccharifications -saccharified -saccharifies -saccharify -saccharifying -saccharimeter -saccharimeters -saccharin -saccharine -saccharinities -saccharinity -saccharins -saccharoidal -saccharometer -saccharometers -saccharomyces -saccular -sacculate -sacculated -sacculation -sacculations -saccule -saccules -sacculi -sacculus -sacerdotal -sacerdotalism -sacerdotalisms -sacerdotalist -sacerdotalists -sacerdotally -sachem -sachemic -sachems -sachet -sacheted -sachets -sack -sackbut -sackbuts -sackcloth -sackcloths -sacked -sacker -sackers -sackful -sackfuls -sacking -sackings -sacklike -sacks -sacksful -saclike -sacque -sacques -sacra -sacral -sacrals -sacrament -sacramental -sacramentalism -sacramentalisms -sacramentalist -sacramentalists -sacramentally -sacramentals -sacraments -sacraria -sacrarium -sacred -sacredly -sacredness -sacrednesses -sacrifice -sacrificed -sacrificer -sacrificers -sacrifices -sacrificial -sacrificially -sacrificing -sacrilege -sacrileges -sacrilegious -sacrilegiously -sacrilegiousness -sacrilegiousnesses -sacring -sacrings -sacrist -sacristan -sacristans -sacristies -sacrists -sacristy -sacroiliac -sacroiliacs -sacrosanct -sacrosanctities -sacrosanctity -sacrum -sacrums -sacs -sad -sadden -saddened -saddening -saddens -sadder -saddest -saddhu -saddhus -saddle -saddlebag -saddlebags -saddlebow -saddlebows -saddlebred -saddlebreds -saddlecloth -saddlecloths -saddled -saddleless -saddler -saddleries -saddlers -saddlery -saddles -saddlesore -saddletree -saddletrees -saddling -sade -sades -sadhe -sadhes -sadhu -sadhus -sadi -sadiron -sadirons -sadis -sadism -sadisms -sadist -sadistic -sadistically -sadists -sadly -sadness -sadnesses -sadomasochism -sadomasochisms -sadomasochist -sadomasochistic -sadomasochists -sae -safari -safaried -safariing -safaris -safe -safecracker -safecrackers -safecracking -safecrackings -safeguard -safeguarded -safeguarding -safeguards -safekeeping -safekeepings -safelight -safelights -safely -safeness -safenesses -safer -safes -safest -safetied -safeties -safety -safetying -safetyman -safetymen -safflower -safflowers -saffron -saffrons -safranin -safranine -safranines -safranins -safrol -safrole -safroles -safrols -sag -saga -sagacious -sagaciously -sagaciousness -sagaciousnesses -sagacities -sagacity -sagaman -sagamen -sagamore -sagamores -saganash -saganashes -sagas -sagbut -sagbuts -sage -sagebrush -sagebrushes -sagely -sageness -sagenesses -sager -sages -sagest -saggar -saggard -saggards -saggared -saggaring -saggars -sagged -sagger -saggered -saggering -saggers -saggier -saggiest -sagging -saggy -sagier -sagiest -sagittal -sagittally -sagittate -sago -sagos -sags -saguaro -saguaros -sagum -sagy -sahib -sahibs -sahiwal -sahiwals -sahuaro -sahuaros -saice -saices -said -saids -saiga -saigas -sail -sailable -sailboard -sailboarding -sailboardings -sailboards -sailboat -sailboater -sailboaters -sailboating -sailboatings -sailboats -sailcloth -sailcloths -sailed -sailer -sailers -sailfish -sailfishes -sailing -sailings -sailor -sailorly -sailors -sailplane -sailplaned -sailplaner -sailplaners -sailplanes -sailplaning -sails -saimin -saimins -sain -sained -sainfoin -sainfoins -saining -sains -saint -saintdom -saintdoms -sainted -sainthood -sainthoods -sainting -saintlier -saintliest -saintlike -saintliness -saintlinesses -saintly -saints -saintship -saintships -saith -saithe -saiyid -saiyids -sajou -sajous -sake -saker -sakers -sakes -saki -sakis -sal -salaam -salaamed -salaaming -salaams -salabilities -salability -salable -salably -salacious -salaciously -salaciousness -salaciousnesses -salacities -salacity -salad -saladang -saladangs -salads -salal -salals -salamander -salamanders -salamandrine -salami -salamis -salariat -salariats -salaried -salaries -salary -salarying -salaryman -salarymen -salchow -salchows -sale -saleable -saleably -salep -saleps -saleratus -saleratuses -saleroom -salerooms -sales -salesclerk -salesclerks -salesgirl -salesgirls -salesladies -saleslady -salesman -salesmanship -salesmanships -salesmen -salespeople -salesperson -salespersons -salesroom -salesrooms -saleswoman -saleswomen -salic -salicin -salicine -salicines -salicins -salicylate -salicylates -salience -saliences -saliencies -saliency -salient -saliently -salients -salified -salifies -salify -salifying -salina -salinas -saline -salines -salinities -salinity -salinization -salinizations -salinize -salinized -salinizes -salinizing -salinometer -salinometers -saliva -salivary -salivas -salivate -salivated -salivates -salivating -salivation -salivations -salivator -salivators -sall -sallet -sallets -sallied -sallier -salliers -sallies -sallow -sallowed -sallower -sallowest -sallowing -sallowish -sallowly -sallowness -sallownesses -sallows -sallowy -sally -sallying -salmagundi -salmagundis -salmi -salmis -salmon -salmonberries -salmonberry -salmonella -salmonellae -salmonellas -salmonelloses -salmonellosis -salmonid -salmonids -salmonoid -salmonoids -salmons -salol -salols -salometer -salometers -salon -salons -saloon -saloons -saloop -saloops -salp -salpa -salpae -salpas -salpian -salpians -salpid -salpids -salpiglossis -salpiglossises -salpinges -salpingitis -salpingitises -salpinx -salps -sals -salsa -salsas -salsifies -salsify -salsilla -salsillas -salt -saltant -saltarelli -saltarello -saltarellos -saltation -saltations -saltatorial -saltatory -saltbox -saltboxes -saltbush -saltbushes -saltcellar -saltcellars -salted -salter -saltern -salterns -salters -saltest -saltie -saltier -saltiers -salties -saltiest -saltily -saltimbocca -saltimboccas -saltine -saltines -saltiness -saltinesses -salting -saltings -saltire -saltires -saltish -saltless -saltlike -saltness -saltnesses -saltpan -saltpans -saltpeter -saltpeters -salts -saltshaker -saltshakers -saltwater -saltwork -saltworks -saltwort -saltworts -salty -salubrious -salubriously -salubriousness -salubriousnesses -salubrities -salubrity -saluki -salukis -salutarily -salutariness -salutarinesses -salutary -salutation -salutational -salutations -salutatorian -salutatorians -salutatories -salutatory -salute -saluted -saluter -saluters -salutes -salutiferous -saluting -salvable -salvably -salvage -salvageabilities -salvageability -salvageable -salvaged -salvagee -salvagees -salvager -salvagers -salvages -salvaging -salvarsan -salvarsans -salvation -salvational -salvationism -salvationisms -salvationist -salvations -salve -salved -salver -salverform -salvers -salves -salvia -salvias -salvific -salving -salvo -salvoed -salvoes -salvoing -salvor -salvors -salvos -samara -samaras -samaritan -samaritans -samarium -samariums -samarskite -samarskites -samba -sambaed -sambaing -sambar -sambars -sambas -sambhar -sambhars -sambhur -sambhurs -sambo -sambos -sambuca -sambucas -sambuke -sambukes -sambur -samburs -same -samech -samechs -samek -samekh -samekhs -sameks -sameness -samenesses -samiel -samiels -samisen -samisens -samite -samites -samizdat -samizdats -samlet -samlets -samosa -samosas -samovar -samovars -samoyed -samoyeds -samp -sampan -sampans -samphire -samphires -sample -sampled -sampler -samplers -samples -sampling -samplings -samps -samsara -samsaras -samshu -samshus -samurai -samurais -sanative -sanatoria -sanatorium -sanatoriums -sanbenito -sanbenitos -sancta -sanctification -sanctifications -sanctified -sanctifier -sanctifiers -sanctifies -sanctify -sanctifying -sanctimonies -sanctimonious -sanctimoniously -sanctimoniousness -sanctimoniousnesses -sanctimony -sanction -sanctionable -sanctioned -sanctioning -sanctions -sanctities -sanctity -sanctuaries -sanctuary -sanctum -sanctums -sand -sandal -sandaled -sandaling -sandalled -sandalling -sandals -sandalwood -sandalwoods -sandarac -sandaracs -sandbag -sandbagged -sandbagger -sandbaggers -sandbagging -sandbags -sandbank -sandbanks -sandbar -sandbars -sandblast -sandblasted -sandblaster -sandblasters -sandblasting -sandblasts -sandbox -sandboxes -sandbur -sandburr -sandburrs -sandburs -sanddab -sanddabs -sanded -sander -sanderling -sanderlings -sanders -sandfish -sandfishes -sandflies -sandfly -sandglass -sandglasses -sandgrouse -sandgrouses -sandhi -sandhis -sandhog -sandhogs -sandier -sandiest -sandiness -sandinesses -sanding -sandlike -sandling -sandlings -sandlot -sandlots -sandlotter -sandlotters -sandman -sandmen -sandpainting -sandpaintings -sandpaper -sandpapered -sandpapering -sandpapers -sandpapery -sandpeep -sandpeeps -sandpile -sandpiles -sandpiper -sandpipers -sandpit -sandpits -sands -sandshoe -sandshoes -sandsoap -sandsoaps -sandspur -sandspurs -sandstone -sandstones -sandstorm -sandstorms -sandwich -sandwiched -sandwiches -sandwiching -sandworm -sandworms -sandwort -sandworts -sandy -sane -saned -sanely -saneness -sanenesses -saner -sanes -sanest -sang -sanga -sangar -sangaree -sangarees -sangars -sangas -sanger -sangers -sangfroid -sangfroids -sangh -sanghs -sangria -sangrias -sanguinaria -sanguinarias -sanguinarily -sanguinary -sanguine -sanguinely -sanguineness -sanguinenesses -sanguineous -sanguines -sanguinities -sanguinity -sanicle -sanicles -sanies -saning -sanious -sanitaria -sanitarian -sanitarians -sanitaries -sanitarily -sanitarium -sanitariums -sanitary -sanitate -sanitated -sanitates -sanitating -sanitation -sanitations -sanities -sanitise -sanitised -sanitises -sanitising -sanitization -sanitizations -sanitize -sanitized -sanitizes -sanitizing -sanitoria -sanitorium -sanitoriums -sanity -sanjak -sanjaks -sank -sannop -sannops -sannup -sannups -sannyasi -sannyasin -sannyasins -sannyasis -sans -sansar -sansars -sansculotte -sansculottes -sansculottic -sansculottish -sansculottism -sansculottisms -sansei -sanseis -sanserif -sanserifs -sansevieria -sansevierias -santalic -santalol -santalols -santimi -santims -santir -santirs -santo -santol -santolina -santolinas -santols -santonin -santonins -santos -santour -santours -santur -santurs -sap -sapajou -sapajous -saphead -sapheaded -sapheads -saphena -saphenae -saphenous -sapid -sapidities -sapidity -sapience -sapiences -sapiencies -sapiency -sapiens -sapient -sapiently -sapless -saplessness -saplessnesses -sapling -saplings -sapodilla -sapodillas -sapogenin -sapogenins -saponaceous -saponaceousness -saponaceousnesses -saponifiable -saponification -saponifications -saponified -saponifier -saponifiers -saponifies -saponify -saponifying -saponin -saponine -saponines -saponins -saponite -saponites -sapor -saporous -sapors -sapota -sapotas -sapote -sapotes -sapour -sapours -sapped -sapper -sappers -sapphic -sapphics -sapphire -sapphires -sapphirine -sapphism -sapphisms -sapphist -sapphists -sappier -sappiest -sappily -sappiness -sappinesses -sapping -sappy -sapremia -sapremias -sapremic -saprobe -saprobes -saprobic -saprogenic -saprogenicities -saprogenicity -saprolite -saprolites -sapropel -sapropels -saprophagous -saprophyte -saprophytes -saprophytic -saprophytically -saprozoic -saps -sapsago -sapsagos -sapsucker -sapsuckers -sapwood -sapwoods -saraband -sarabande -sarabandes -sarabands -saran -sarans -sarape -sarapes -sarcasm -sarcasms -sarcastic -sarcastically -sarcenet -sarcenets -sarcoid -sarcoidoses -sarcoidosis -sarcoids -sarcolemma -sarcolemmal -sarcolemmas -sarcoma -sarcomas -sarcomata -sarcomatoses -sarcomatosis -sarcomatous -sarcomere -sarcomeres -sarcophagi -sarcophagus -sarcophaguses -sarcoplasm -sarcoplasmic -sarcoplasms -sarcosomal -sarcosome -sarcosomes -sarcous -sard -sardana -sardanas -sardar -sardars -sardine -sardines -sardius -sardiuses -sardonic -sardonically -sardonicism -sardonicisms -sardonyx -sardonyxes -sards -saree -sarees -sargasso -sargassos -sargassum -sargassums -sarge -sarges -sari -sarin -sarins -saris -sark -sarkier -sarkiest -sarks -sarky -sarment -sarmenta -sarments -sarmentum -sarod -sarode -sarodes -sarodist -sarodists -sarods -sarong -sarongs -saros -saroses -sarracenia -sarracenias -sarsaparilla -sarsaparillas -sarsar -sarsars -sarsen -sarsenet -sarsenets -sarsens -sartor -sartorial -sartorially -sartorii -sartorius -sartors -sash -sashay -sashayed -sashaying -sashays -sashed -sashes -sashimi -sashimis -sashing -sasin -sasins -saskatoon -saskatoons -sasquatch -sasquatches -sass -sassabies -sassaby -sassafras -sassafrases -sassed -sasses -sassier -sassies -sassiest -sassily -sassing -sasswood -sasswoods -sassy -sastruga -sastrugi -sat -satang -satangs -satanic -satanically -satanism -satanisms -satanist -satanists -satara -sataras -satay -satays -satchel -satchelful -satchelfuls -satchels -satchelsful -sate -sated -sateen -sateens -satellite -satellites -satem -sates -sati -satiable -satiably -satiate -satiated -satiates -satiating -satiation -satiations -satieties -satiety -satin -satinet -satinets -sating -satinpod -satinpods -satins -satinwood -satinwoods -satiny -satire -satires -satiric -satirical -satirically -satirise -satirised -satirises -satirising -satirist -satirists -satirizable -satirize -satirized -satirizes -satirizing -satis -satisfaction -satisfactions -satisfactorily -satisfactoriness -satisfactorinesses -satisfactory -satisfiable -satisfied -satisfies -satisfy -satisfying -satisfyingly -satori -satoris -satrap -satrapies -satraps -satrapy -satsuma -satsumas -saturable -saturant -saturants -saturate -saturated -saturates -saturating -saturation -saturations -saturator -saturators -saturnalia -saturnalian -saturnalianly -saturnalias -saturniid -saturniids -saturnine -saturnism -saturnisms -satyagraha -satyagrahas -satyr -satyriases -satyriasis -satyric -satyrid -satyrids -satyrs -sau -sauce -sauceboat -sauceboats -saucebox -sauceboxes -sauced -saucepan -saucepans -saucer -saucerlike -saucers -sauces -sauch -sauchs -saucier -sauciest -saucily -sauciness -saucinesses -saucing -saucy -sauerbraten -sauerbratens -sauerkraut -sauerkrauts -sauger -saugers -saugh -saughs -saughy -saul -sauls -sault -saults -sauna -saunas -saunter -sauntered -saunterer -saunterers -sauntering -saunters -saurel -saurels -saurian -saurians -sauries -saurischian -saurischians -sauropod -sauropods -saury -sausage -sausages -saute -sauted -sauteed -sauteing -sauterne -sauternes -sautes -sautoir -sautoire -sautoires -sautoirs -savable -savage -savaged -savagely -savageness -savagenesses -savager -savageries -savagery -savages -savagest -savaging -savagism -savagisms -savanna -savannah -savannahs -savannas -savant -savants -savarin -savarins -savate -savates -save -saveable -saved -saveloy -saveloys -saver -savers -saves -savin -savine -savines -saving -savingly -savings -savins -savior -saviors -saviour -saviours -savor -savored -savorer -savorers -savorier -savories -savoriest -savorily -savoriness -savorinesses -savoring -savorless -savorous -savors -savory -savour -savoured -savourer -savourers -savourier -savouries -savouriest -savouring -savours -savoury -savoy -savoys -savvied -savvier -savvies -savviest -savvy -savvying -saw -sawbill -sawbills -sawbones -sawboneses -sawbuck -sawbucks -sawdust -sawdusts -sawed -sawer -sawers -sawfish -sawfishes -sawflies -sawfly -sawhorse -sawhorses -sawing -sawlike -sawlog -sawlogs -sawmill -sawmills -sawn -sawney -sawneys -saws -sawteeth -sawtimber -sawtimbers -sawtooth -sawyer -sawyers -sax -saxatile -saxes -saxhorn -saxhorns -saxicolous -saxifrage -saxifrages -saxitoxin -saxitoxins -saxonies -saxony -saxophone -saxophones -saxophonic -saxophonist -saxophonists -saxtuba -saxtubas -say -sayable -sayer -sayers -sayest -sayid -sayids -saying -sayings -sayonara -sayonaras -says -sayst -sayyid -sayyids -scab -scabbard -scabbarded -scabbarding -scabbards -scabbed -scabbier -scabbiest -scabbily -scabbing -scabble -scabbled -scabbles -scabbling -scabby -scabies -scabietic -scabiosa -scabiosas -scabious -scabiouses -scabland -scablands -scablike -scabrous -scabrously -scabrousness -scabrousnesses -scabs -scad -scads -scaffold -scaffolded -scaffolding -scaffoldings -scaffolds -scag -scagliola -scagliolas -scags -scalable -scalably -scalade -scalades -scalado -scalados -scalage -scalages -scalar -scalare -scalares -scalariform -scalariformly -scalars -scalawag -scalawags -scald -scalded -scaldic -scalding -scalds -scale -scaled -scaleless -scalelike -scalene -scaleni -scalenus -scalepan -scalepans -scaler -scalers -scales -scaleup -scaleups -scalier -scaliest -scaliness -scalinesses -scaling -scall -scallion -scallions -scallop -scalloped -scalloper -scallopers -scalloping -scallopini -scallopinis -scallops -scalls -scallywag -scallywags -scalogram -scalograms -scaloppine -scaloppines -scalp -scalped -scalpel -scalpels -scalper -scalpers -scalping -scalps -scaly -scam -scammed -scamming -scammonies -scammony -scamp -scamped -scamper -scampered -scampering -scampers -scampi -scampies -scamping -scampish -scamps -scams -scan -scandal -scandaled -scandaling -scandalise -scandalised -scandalises -scandalising -scandalize -scandalized -scandalizes -scandalizing -scandalled -scandalling -scandalmonger -scandalmongering -scandalmongerings -scandalmongers -scandalous -scandalously -scandalousness -scandalousnesses -scandals -scandent -scandia -scandias -scandic -scandium -scandiums -scannable -scanned -scanner -scanners -scanning -scannings -scans -scansion -scansions -scant -scanted -scanter -scantest -scantier -scanties -scantiest -scantily -scantiness -scantinesses -scanting -scantling -scantlings -scantly -scantness -scantnesses -scants -scanty -scape -scaped -scapegoat -scapegoated -scapegoating -scapegoatings -scapegoatism -scapegoatisms -scapegoats -scapegrace -scapegraces -scapes -scaphoid -scaphoids -scaping -scapolite -scapolites -scapose -scapula -scapulae -scapular -scapulars -scapulas -scar -scarab -scarabaei -scarabaeus -scarabaeuses -scarabs -scaramouch -scaramouche -scaramouches -scarce -scarcely -scarceness -scarcenesses -scarcer -scarcest -scarcities -scarcity -scare -scarecrow -scarecrows -scared -scarehead -scareheads -scaremonger -scaremongers -scarer -scarers -scares -scarey -scarf -scarfed -scarfing -scarfpin -scarfpins -scarfs -scarfskin -scarfskins -scarier -scariest -scarification -scarifications -scarified -scarifier -scarifiers -scarifies -scarify -scarifying -scarifyingly -scarily -scaring -scariose -scarious -scarlatina -scarlatinal -scarlatinas -scarless -scarlet -scarlets -scarp -scarped -scarper -scarpered -scarpering -scarpers -scarph -scarphed -scarphing -scarphs -scarping -scarps -scarred -scarrier -scarriest -scarring -scarry -scars -scart -scarted -scarting -scarts -scarves -scary -scat -scatback -scatbacks -scathe -scathed -scatheless -scathes -scathing -scathingly -scatological -scatologies -scatology -scats -scatt -scatted -scatter -scatteration -scatterations -scatterbrain -scatterbrained -scatterbrains -scattered -scatterer -scatterers -scattergood -scattergoods -scattergram -scattergrams -scattergun -scatterguns -scattering -scatteringly -scatterings -scatters -scattershot -scattier -scattiest -scatting -scatts -scatty -scaup -scauper -scaupers -scaups -scaur -scaurs -scavenge -scavenged -scavenger -scavengers -scavenges -scavenging -scena -scenario -scenarios -scenarist -scenarists -scenas -scend -scended -scending -scends -scene -sceneries -scenery -scenes -sceneshifter -sceneshifters -scenic -scenical -scenically -scenographer -scenographers -scenographic -scenographies -scenography -scent -scented -scenting -scentless -scents -scepter -sceptered -sceptering -scepters -sceptic -sceptical -scepticism -scepticisms -sceptics -sceptral -sceptre -sceptred -sceptres -sceptring -schadenfreude -schadenfreudes -schappe -schappes -schav -schavs -schedule -scheduled -scheduler -schedulers -schedules -scheduling -scheelite -scheelites -schema -schemas -schemata -schematic -schematically -schematics -schematism -schematisms -schematization -schematizations -schematize -schematized -schematizes -schematizing -scheme -schemed -schemer -schemers -schemes -scheming -scherzando -scherzandos -scherzi -scherzo -scherzos -schiller -schillers -schilling -schillings -schipperke -schipperkes -schism -schismatic -schismatical -schismatically -schismatics -schismatize -schismatized -schismatizes -schismatizing -schisms -schist -schistose -schistosities -schistosity -schistosomal -schistosome -schistosomes -schistosomiases -schistosomiasis -schists -schizier -schiziest -schizo -schizocarp -schizocarps -schizogonic -schizogonies -schizogonous -schizogony -schizoid -schizoids -schizont -schizonts -schizophrene -schizophrenes -schizophrenia -schizophrenias -schizophrenic -schizophrenically -schizophrenics -schizos -schizy -schizzier -schizziest -schizzy -schlemiel -schlemiels -schlep -schlepp -schlepped -schlepping -schlepps -schleps -schliere -schlieren -schlieric -schlock -schlockmeister -schlockmeisters -schlocks -schlocky -schlump -schlumped -schlumping -schlumps -schmaltz -schmaltzes -schmaltzier -schmaltziest -schmaltzy -schmalz -schmalzes -schmalzier -schmalziest -schmalzy -schmear -schmears -schmeer -schmeered -schmeering -schmeers -schmelze -schmelzes -schmo -schmoe -schmoes -schmoos -schmoose -schmoosed -schmooses -schmoosing -schmooze -schmoozed -schmoozes -schmoozing -schmos -schmuck -schmucks -schnapps -schnaps -schnauzer -schnauzers -schnecke -schnecken -schnitzel -schnitzels -schnook -schnooks -schnorkel -schnorkeled -schnorkeling -schnorkels -schnorrer -schnorrers -schnoz -schnozes -schnozz -schnozzes -schnozzle -schnozzles -scholar -scholarly -scholars -scholarship -scholarships -scholastic -scholastically -scholasticate -scholasticates -scholasticism -scholasticisms -scholastics -scholia -scholiast -scholiastic -scholiasts -scholium -scholiums -school -schoolbag -schoolbags -schoolbook -schoolbooks -schoolboy -schoolboyish -schoolboys -schoolchild -schoolchildren -schooled -schoolfellow -schoolfellows -schoolgirl -schoolgirls -schoolhouse -schoolhouses -schooling -schoolings -schoolkid -schoolkids -schoolman -schoolmarm -schoolmarmish -schoolmarms -schoolmaster -schoolmasterish -schoolmasterly -schoolmasters -schoolmate -schoolmates -schoolmen -schoolmistress -schoolmistresses -schoolroom -schoolrooms -schools -schoolteacher -schoolteachers -schooltime -schooltimes -schoolwork -schoolworks -schoolyard -schoolyards -schooner -schooners -schorl -schorls -schottische -schottisches -schrik -schriks -schrod -schrods -schtick -schticks -schtik -schtiks -schuit -schuits -schul -schuln -schuss -schussboomer -schussboomers -schussed -schusser -schussers -schusses -schussing -schwa -schwarmerei -schwarmereis -schwas -sciaenid -sciaenids -sciatic -sciatica -sciaticas -sciatics -science -sciences -sciential -scientific -scientifically -scientism -scientisms -scientist -scientists -scientize -scientized -scientizes -scientizing -scilicet -scilla -scillas -scimetar -scimetars -scimitar -scimitars -scimiter -scimiters -scincoid -scincoids -scintigraphic -scintigraphies -scintigraphy -scintilla -scintillant -scintillantly -scintillas -scintillate -scintillated -scintillates -scintillating -scintillation -scintillations -scintillator -scintillators -scintillometer -scintillometers -sciolism -sciolisms -sciolist -sciolistic -sciolists -scion -scions -scirocco -sciroccos -scirrhi -scirrhous -scirrhus -scirrhuses -scissile -scission -scissions -scissor -scissored -scissoring -scissors -scissortail -scissortails -scissure -scissures -sciurid -sciurids -sciurine -sciurines -sciuroid -sclaff -sclaffed -sclaffer -sclaffers -sclaffing -sclaffs -sclera -sclerae -scleral -scleras -sclereid -sclereids -sclerenchyma -sclerenchymas -sclerenchymata -sclerenchymatous -sclerite -sclerites -scleroderma -sclerodermas -sclerodermata -scleroid -scleroma -scleromas -scleromata -sclerometer -sclerometers -scleroprotein -scleroproteins -sclerose -sclerosed -scleroses -sclerosing -sclerosis -sclerotia -sclerotial -sclerotic -sclerotics -sclerotin -sclerotins -sclerotium -sclerotization -sclerotizations -sclerotized -sclerous -scoff -scoffed -scoffer -scoffers -scoffing -scofflaw -scofflaws -scoffs -scold -scolded -scolder -scolders -scolding -scoldings -scolds -scoleces -scolecite -scolecites -scolex -scolices -scolioma -scoliomas -scolioses -scoliosis -scoliotic -scollop -scolloped -scolloping -scollops -scolopendra -scolopendras -scombroid -scombroids -sconce -sconced -sconces -sconcing -scone -scones -scoop -scooped -scooper -scoopers -scoopful -scoopfuls -scooping -scoops -scoopsful -scoot -scooted -scooter -scooters -scooting -scoots -scop -scope -scoped -scopes -scoping -scopolamine -scopolamines -scops -scopula -scopulae -scopulas -scorbutic -scorch -scorched -scorcher -scorchers -scorches -scorching -scorchingly -score -scoreboard -scoreboards -scorecard -scorecards -scored -scorekeeper -scorekeepers -scoreless -scorepad -scorepads -scorer -scorers -scores -scoria -scoriaceous -scoriae -scorified -scorifies -scorify -scorifying -scoring -scorn -scorned -scorner -scorners -scornful -scornfully -scornfulness -scornfulnesses -scorning -scorns -scorpaenid -scorpaenids -scorpion -scorpions -scot -scotch -scotched -scotches -scotching -scoter -scoters -scotia -scotias -scotoma -scotomas -scotomata -scotopia -scotopias -scotopic -scots -scottie -scotties -scoundrel -scoundrelly -scoundrels -scour -scoured -scourer -scourers -scourge -scourged -scourger -scourgers -scourges -scourging -scouring -scourings -scours -scouse -scouses -scout -scoutcraft -scoutcrafts -scouted -scouter -scouters -scouth -scouther -scouthered -scouthering -scouthers -scouths -scouting -scoutings -scoutmaster -scoutmasters -scouts -scow -scowder -scowdered -scowdering -scowders -scowed -scowing -scowl -scowled -scowler -scowlers -scowling -scowlingly -scowls -scows -scrabble -scrabbled -scrabbler -scrabblers -scrabbles -scrabblier -scrabbliest -scrabbling -scrabbly -scrag -scragged -scraggier -scraggiest -scragging -scragglier -scraggliest -scraggly -scraggy -scrags -scraich -scraiched -scraiching -scraichs -scraigh -scraighed -scraighing -scraighs -scram -scramble -scrambled -scrambler -scramblers -scrambles -scrambling -scramjet -scramjets -scrammed -scramming -scrams -scrannel -scrannels -scrap -scrapbook -scrapbooks -scrape -scraped -scraper -scrapers -scrapes -scrapheap -scrapheaps -scrapie -scrapies -scraping -scrapings -scrappage -scrappages -scrapped -scrapper -scrappers -scrappier -scrappiest -scrappily -scrappiness -scrappinesses -scrapping -scrapple -scrapples -scrappy -scraps -scratch -scratchboard -scratchboards -scratched -scratcher -scratchers -scratches -scratchier -scratchiest -scratchily -scratchiness -scratchinesses -scratching -scratchy -scrawl -scrawled -scrawler -scrawlers -scrawlier -scrawliest -scrawling -scrawls -scrawly -scrawnier -scrawniest -scrawniness -scrawninesses -scrawny -screak -screaked -screaking -screaks -screaky -scream -screamed -screamer -screamers -screaming -screamingly -screams -scree -screech -screeched -screecher -screechers -screeches -screechier -screechiest -screeching -screechy -screed -screeded -screeding -screeds -screen -screenable -screened -screener -screeners -screening -screenings -screenland -screenlands -screenplay -screenplays -screens -screenwriter -screenwriters -screes -screw -screwball -screwballs -screwbean -screwbeans -screwdriver -screwdrivers -screwed -screwer -screwers -screwier -screwiest -screwiness -screwinesses -screwing -screwlike -screws -screwup -screwups -screwworm -screwworms -screwy -scribal -scribble -scribbled -scribbler -scribblers -scribbles -scribbling -scribblings -scribe -scribed -scriber -scribers -scribes -scribing -scried -scries -scrieve -scrieved -scrieves -scrieving -scrim -scrimmage -scrimmaged -scrimmager -scrimmagers -scrimmages -scrimmaging -scrimp -scrimped -scrimper -scrimpers -scrimpier -scrimpiest -scrimping -scrimpit -scrimps -scrimpy -scrims -scrimshander -scrimshanders -scrimshaw -scrimshawed -scrimshawing -scrimshaws -scrip -scrips -script -scripted -scripter -scripters -scripting -scriptoria -scriptorium -scriptoriums -scripts -scriptural -scripturally -scripture -scriptures -scriptwriter -scriptwriters -scrive -scrived -scrivener -scriveners -scrives -scriving -scrod -scrods -scrofula -scrofulas -scrofulous -scroggier -scroggiest -scroggy -scroll -scrolled -scrolling -scrolls -scrollwork -scrollworks -scrooch -scrooched -scrooches -scrooching -scrooge -scrooges -scroop -scrooped -scrooping -scroops -scrootch -scrootched -scrootches -scrootching -scrota -scrotal -scrotum -scrotums -scrouge -scrouged -scrouges -scrouging -scrounge -scrounged -scrounger -scroungers -scrounges -scroungier -scroungiest -scrounging -scroungy -scrub -scrubbable -scrubbed -scrubber -scrubbers -scrubbier -scrubbiest -scrubbing -scrubby -scrubland -scrublands -scrubs -scrubwoman -scrubwomen -scruff -scruffier -scruffiest -scruffily -scruffiness -scruffinesses -scruffs -scruffy -scrum -scrummage -scrummaged -scrummages -scrummaging -scrummed -scrumming -scrumptious -scrumptiously -scrums -scrunch -scrunched -scrunches -scrunching -scruple -scrupled -scruples -scrupling -scrupulosities -scrupulosity -scrupulous -scrupulously -scrupulousness -scrupulousnesses -scrutable -scrutineer -scrutineers -scrutinies -scrutinise -scrutinised -scrutinises -scrutinising -scrutinize -scrutinized -scrutinizer -scrutinizers -scrutinizes -scrutinizing -scrutiny -scry -scrying -scuba -scubas -scud -scudded -scudding -scudi -scudo -scuds -scuff -scuffed -scuffing -scuffle -scuffled -scuffler -scufflers -scuffles -scuffling -scuffs -sculk -sculked -sculker -sculkers -sculking -sculks -scull -sculled -sculler -sculleries -scullers -scullery -sculling -scullion -scullions -sculls -sculp -sculped -sculpin -sculping -sculpins -sculps -sculpt -sculpted -sculpting -sculptor -sculptors -sculptress -sculptresses -sculpts -sculptural -sculpturally -sculpture -sculptured -sculptures -sculpturesque -sculpturesquely -sculpturing -scum -scumbag -scumbags -scumble -scumbled -scumbles -scumbling -scumlike -scummed -scummer -scummers -scummier -scummiest -scumming -scummy -scums -scungilli -scungillis -scunner -scunnered -scunnering -scunners -scup -scuppaug -scuppaugs -scupper -scuppered -scuppering -scuppernong -scuppernongs -scuppers -scups -scurf -scurfier -scurfiest -scurfs -scurfy -scurried -scurries -scurril -scurrile -scurrilities -scurrility -scurrilous -scurrilously -scurrilousness -scurrilousnesses -scurry -scurrying -scurvier -scurvies -scurviest -scurvily -scurviness -scurvinesses -scurvy -scut -scuta -scutage -scutages -scutate -scutch -scutched -scutcheon -scutcheons -scutcher -scutchers -scutches -scutching -scute -scutella -scutellar -scutellate -scutellated -scutellum -scutes -scuts -scutter -scuttered -scuttering -scutters -scuttle -scuttlebutt -scuttlebutts -scuttled -scuttles -scuttling -scutum -scuzzier -scuzziest -scuzzy -scyphate -scyphi -scyphistoma -scyphistomae -scyphistomas -scyphozoan -scyphozoans -scyphus -scythe -scythed -scythes -scything -sea -seabag -seabags -seabeach -seabeaches -seabed -seabeds -seabird -seabirds -seaboard -seaboards -seaboot -seaboots -seaborgium -seaborgiums -seaborne -seacoast -seacoasts -seacock -seacocks -seacraft -seacrafts -seadog -seadogs -seadrome -seadromes -seafarer -seafarers -seafaring -seafarings -seafloor -seafloors -seafood -seafoods -seafowl -seafowls -seafront -seafronts -seagirt -seagoing -seagull -seagulls -seal -sealable -sealant -sealants -sealed -sealer -sealeries -sealers -sealery -sealing -seallike -seals -sealskin -sealskins -seam -seaman -seamanlike -seamanly -seamanship -seamanships -seamark -seamarks -seamed -seamen -seamer -seamers -seamier -seamiest -seaminess -seaminesses -seaming -seamless -seamlessly -seamlessness -seamlessnesses -seamlike -seamount -seamounts -seams -seamster -seamsters -seamstress -seamstresses -seamy -seance -seances -seapiece -seapieces -seaplane -seaplanes -seaport -seaports -seaquake -seaquakes -sear -search -searchable -searched -searcher -searchers -searches -searching -searchingly -searchless -searchlight -searchlights -seared -searer -searest -searing -searingly -searobin -searobins -sears -seas -seascape -seascapes -seascout -seascouts -seashell -seashells -seashore -seashores -seasick -seasickness -seasicknesses -seaside -seasides -season -seasonable -seasonableness -seasonablenesses -seasonably -seasonal -seasonalities -seasonality -seasonally -seasoned -seasoner -seasoners -seasoning -seasonings -seasonless -seasons -seastrand -seastrands -seat -seatbelt -seatbelts -seated -seater -seaters -seating -seatings -seatless -seatmate -seatmates -seatrain -seatrains -seats -seatwork -seatworks -seawall -seawalls -seawan -seawans -seawant -seawants -seaward -seawards -seaware -seawares -seawater -seawaters -seaway -seaways -seaweed -seaweeds -seaworthiness -seaworthinesses -seaworthy -sebaceous -sebacic -sebasic -seborrhea -seborrheas -seborrheic -sebum -sebums -sec -secalose -secaloses -secant -secantly -secants -secateur -secateurs -secco -seccos -secede -seceded -seceder -seceders -secedes -seceding -secern -secerned -secerning -secerns -secession -secessionism -secessionisms -secessionist -secessionists -secessions -seclude -secluded -secludedly -secludedness -secludednesses -secludes -secluding -seclusion -seclusions -seclusive -seclusively -seclusiveness -seclusivenesses -secobarbital -secobarbitals -second -secondaries -secondarily -secondariness -secondarinesses -secondary -seconde -seconded -seconder -seconders -secondes -secondhand -secondi -seconding -secondly -secondo -seconds -secpar -secpars -secrecies -secrecy -secret -secretagogue -secretagogues -secretarial -secretariat -secretariats -secretaries -secretary -secretaryship -secretaryships -secrete -secreted -secreter -secretes -secretest -secretin -secreting -secretins -secretion -secretionary -secretions -secretive -secretively -secretiveness -secretivenesses -secretly -secretor -secretors -secretory -secrets -secs -sect -sectarian -sectarianism -sectarianisms -sectarianize -sectarianized -sectarianizes -sectarianizing -sectarians -sectaries -sectary -sectile -sectilities -sectility -section -sectional -sectionalism -sectionalisms -sectionally -sectionals -sectioned -sectioning -sections -sector -sectoral -sectored -sectorial -sectoring -sectors -sects -secular -secularise -secularised -secularises -secularising -secularism -secularisms -secularist -secularistic -secularists -secularities -secularity -secularization -secularizations -secularize -secularized -secularizer -secularizers -secularizes -secularizing -secularly -seculars -secund -secundly -secundum -secure -secured -securely -securement -securements -secureness -securenesses -securer -securers -secures -securest -securing -securities -securitization -securitizations -securitize -securitized -securitizes -securitizing -security -sedan -sedans -sedarim -sedate -sedated -sedately -sedateness -sedatenesses -sedater -sedates -sedatest -sedating -sedation -sedations -sedative -sedatives -sedentary -seder -seders -sederunt -sederunts -sedge -sedges -sedgier -sedgiest -sedgy -sedile -sedilia -sedilium -sediment -sedimentable -sedimentary -sedimentation -sedimentations -sedimented -sedimenting -sedimentologic -sedimentological -sedimentologically -sedimentologies -sedimentologist -sedimentologists -sedimentology -sediments -sedition -seditions -seditious -seditiously -seditiousness -seditiousnesses -seduce -seduced -seducement -seducements -seducer -seducers -seduces -seducing -seducive -seduction -seductions -seductive -seductively -seductiveness -seductivenesses -seductress -seductresses -sedulities -sedulity -sedulous -sedulously -sedulousness -sedulousnesses -sedum -sedums -see -seeable -seecatch -seecatchie -seed -seedbed -seedbeds -seedcake -seedcakes -seedcase -seedcases -seedeater -seedeaters -seeded -seeder -seeders -seedier -seediest -seedily -seediness -seedinesses -seeding -seedless -seedlike -seedling -seedlings -seedman -seedmen -seedpod -seedpods -seeds -seedsman -seedsmen -seedtime -seedtimes -seedy -seeing -seeings -seek -seeker -seekers -seeking -seeks -seel -seeled -seeling -seels -seely -seem -seemed -seemer -seemers -seeming -seemingly -seemings -seemlier -seemliest -seemliness -seemlinesses -seemly -seems -seen -seep -seepage -seepages -seeped -seepier -seepiest -seeping -seeps -seepy -seer -seeress -seeresses -seers -seersucker -seersuckers -sees -seesaw -seesawed -seesawing -seesaws -seethe -seethed -seethes -seething -seg -segetal -seggar -seggars -segment -segmental -segmentally -segmentary -segmentation -segmentations -segmented -segmenting -segments -segni -segno -segnos -sego -segos -segregant -segregants -segregate -segregated -segregates -segregating -segregation -segregationist -segregationists -segregations -segregative -segs -segue -segued -segueing -segues -seguidilla -seguidillas -sei -seicento -seicentos -seiche -seiches -seidel -seidels -seif -seifs -seigneur -seigneurial -seigneuries -seigneurs -seigneury -seignior -seigniorage -seigniorages -seigniories -seigniors -seigniory -seignorage -seignorages -seignorial -seignories -seignory -seine -seined -seiner -seiners -seines -seining -seis -seisable -seise -seised -seiser -seisers -seises -seisin -seising -seisings -seisins -seism -seismal -seismic -seismically -seismicities -seismicity -seismism -seismisms -seismogram -seismograms -seismograph -seismographer -seismographers -seismographic -seismographies -seismographs -seismography -seismological -seismologies -seismologist -seismologists -seismology -seismometer -seismometers -seismometric -seismometries -seismometry -seisms -seisor -seisors -seisure -seisures -seizable -seize -seized -seizer -seizers -seizes -seizin -seizing -seizings -seizins -seizor -seizors -seizure -seizures -sejant -sejeant -sel -selachian -selachians -seladang -seladangs -selaginella -selaginellas -selah -selahs -selamlik -selamliks -selcouth -seldom -seldomly -select -selectable -selected -selectee -selectees -selecting -selection -selectionist -selectionists -selections -selective -selectively -selectiveness -selectivenesses -selectivities -selectivity -selectly -selectman -selectmen -selectness -selectnesses -selector -selectors -selects -selenate -selenates -selenic -selenide -selenides -seleniferous -selenite -selenites -selenium -seleniums -selenocentric -selenological -selenologies -selenologist -selenologists -selenology -selenous -self -selfdom -selfdoms -selfed -selfheal -selfheals -selfhood -selfhoods -selfing -selfish -selfishly -selfishness -selfishnesses -selfless -selflessly -selflessness -selflessnesses -selfness -selfnesses -selfs -selfsame -selfsameness -selfsamenesses -selfward -sell -sellable -selle -seller -sellers -selles -selling -sellout -sellouts -sells -sels -selsyn -selsyns -seltzer -seltzers -selva -selvage -selvaged -selvages -selvas -selvedge -selvedged -selvedges -selves -semantic -semantical -semantically -semanticist -semanticists -semantics -semaphore -semaphored -semaphores -semaphoring -semasiological -semasiologies -semasiology -sematic -semblable -semblables -semblably -semblance -semblances -seme -semeiologies -semeiology -semeiotic -semeiotics -sememe -sememes -sememic -semen -semens -semes -semester -semesters -semestral -semestrial -semi -semiabstract -semiabstraction -semiabstractions -semiannual -semiannually -semiaquatic -semiarboreal -semiarid -semiaridities -semiaridity -semiautobiographical -semiautomatic -semiautomatically -semiautomatics -semiautonomous -semibald -semibreve -semibreves -semicentennial -semicentennials -semicircle -semicircles -semicircular -semicivilized -semiclassic -semiclassical -semiclassics -semicolon -semicolonial -semicolonialism -semicolonialisms -semicolonies -semicolons -semicolony -semicoma -semicomas -semicommercial -semiconducting -semiconductor -semiconductors -semiconscious -semiconsciousness -semiconsciousnesses -semiconservative -semiconservatively -semicrystalline -semicylindrical -semidarkness -semidarknesses -semideaf -semideified -semideifies -semideify -semideifying -semidesert -semideserts -semidetached -semidiameter -semidiameters -semidiurnal -semidivine -semidocumentaries -semidocumentary -semidome -semidomed -semidomes -semidomesticated -semidomestication -semidomestications -semidominant -semidry -semidrying -semidwarf -semidwarfs -semidwarves -semiempirical -semierect -semievergreen -semifeudal -semifinal -semifinalist -semifinalists -semifinals -semifinished -semifit -semifitted -semiflexible -semifluid -semifluids -semiformal -semifunctional -semigala -semigloss -semigovernmental -semigroup -semigroups -semihard -semihigh -semihobo -semihoboes -semihobos -semilegendary -semilethal -semilethals -semiliquid -semiliquids -semiliterate -semiliterates -semilog -semilogarithmic -semilunar -semilustrous -semimat -semimatt -semimatte -semimetal -semimetallic -semimetals -semimicro -semimoist -semimonastic -semimonthlies -semimonthly -semimute -semimystical -semina -seminal -seminally -seminar -seminarian -seminarians -seminaries -seminarist -seminarists -seminars -seminary -seminatural -seminiferous -seminomad -seminomadic -seminomads -seminude -seminudities -seminudity -semiofficial -semiofficially -semiological -semiologically -semiologies -semiologist -semiologists -semiology -semiopaque -semioses -semiosis -semiotic -semiotician -semioticians -semioticist -semioticists -semiotics -semipalmated -semiparasite -semiparasites -semiparasitic -semipermanent -semipermeabilities -semipermeability -semipermeable -semipolitical -semipopular -semiporcelain -semiporcelains -semipornographic -semipornographies -semipornography -semipostal -semipostals -semiprecious -semiprivate -semipro -semiprofessional -semiprofessionally -semiprofessionals -semipros -semipublic -semiquantitative -semiquantitatively -semiquaver -semiquavers -semiraw -semireligious -semiretired -semiretirement -semiretirements -semirigid -semirural -semis -semisacred -semisecret -semisedentary -semises -semishrubby -semiskilled -semisoft -semisolid -semisolids -semisubmersible -semisubmersibles -semisweet -semisynthetic -semiterrestrial -semitist -semitists -semitonal -semitonally -semitone -semitones -semitonic -semitonically -semitrailer -semitrailers -semitranslucent -semitransparent -semitropic -semitropical -semitropics -semivowel -semivowels -semiweeklies -semiweekly -semiwild -semiworks -semiyearly -semolina -semolinas -sempervivum -sempervivums -sempiternal -sempiternally -sempiternities -sempiternity -semple -semplice -sempre -sempstress -sempstresses -sen -senarii -senarius -senary -senate -senates -senator -senatorial -senatorian -senators -senatorship -senatorships -send -sendable -sendal -sendals -sended -sender -senders -sending -sendoff -sendoffs -sends -sendup -sendups -sene -seneca -senecas -senecio -senecios -senectitude -senectitudes -senega -senegas -senescence -senescences -senescent -seneschal -seneschals -sengi -senhor -senhora -senhoras -senhores -senhorita -senhoritas -senhors -senile -senilely -seniles -senilities -senility -senior -seniorities -seniority -seniors -seniti -senna -sennas -sennet -sennets -sennight -sennights -sennit -sennits -senopia -senopias -senor -senora -senoras -senores -senorita -senoritas -senors -senryu -sensa -sensate -sensated -sensately -sensates -sensating -sensation -sensational -sensationalise -sensationalised -sensationalises -sensationalising -sensationalism -sensationalisms -sensationalist -sensationalistic -sensationalists -sensationalize -sensationalized -sensationalizes -sensationalizing -sensationally -sensations -sense -sensed -senseful -senseless -senselessly -senselessness -senselessnesses -senses -sensibilia -sensibilities -sensibility -sensible -sensibleness -sensiblenesses -sensibler -sensibles -sensiblest -sensibly -sensilla -sensillae -sensillum -sensing -sensitisation -sensitisations -sensitise -sensitised -sensitises -sensitising -sensitive -sensitively -sensitiveness -sensitivenesses -sensitives -sensitivities -sensitivity -sensitization -sensitizations -sensitize -sensitized -sensitizer -sensitizers -sensitizes -sensitizing -sensitometer -sensitometers -sensitometric -sensitometries -sensitometry -sensor -sensoria -sensorial -sensorially -sensorimotor -sensorineural -sensorium -sensoriums -sensors -sensory -sensual -sensualism -sensualisms -sensualist -sensualistic -sensualists -sensualities -sensuality -sensualization -sensualizations -sensualize -sensualized -sensualizes -sensualizing -sensually -sensum -sensuosities -sensuosity -sensuous -sensuously -sensuousness -sensuousnesses -sent -sente -sentence -sentenced -sentences -sentencing -sententia -sententiae -sentential -sententious -sententiously -sententiousness -sententiousnesses -senti -sentience -sentiences -sentient -sentiently -sentients -sentiment -sentimental -sentimentalise -sentimentalised -sentimentalises -sentimentalising -sentimentalism -sentimentalisms -sentimentalist -sentimentalists -sentimentalities -sentimentality -sentimentalization -sentimentalizations -sentimentalize -sentimentalized -sentimentalizes -sentimentalizing -sentimentally -sentiments -sentimo -sentimos -sentinel -sentineled -sentineling -sentinelled -sentinelling -sentinels -sentries -sentry -sepal -sepaled -sepaline -sepalled -sepaloid -sepalous -sepals -separabilities -separability -separable -separableness -separablenesses -separate -separated -separately -separateness -separatenesses -separates -separating -separation -separationist -separationists -separations -separatism -separatisms -separatist -separatistic -separatists -separative -separator -separators -sepia -sepias -sepic -sepiolite -sepiolites -sepoy -sepoys -seppuku -seppukus -sepses -sepsis -sept -septa -septal -septaria -septarium -septate -septenarii -septenarius -septendecillion -septendecillions -septennial -septennially -septentrion -septentrional -septentrions -septet -septets -septette -septettes -septic -septical -septicemia -septicemias -septicemic -septicidal -septics -septillion -septillions -septime -septimes -septs -septuagenarian -septuagenarians -septum -septums -septuple -septupled -septuples -septupling -sepulcher -sepulchered -sepulchering -sepulchers -sepulchral -sepulchrally -sepulchre -sepulchred -sepulchres -sepulchring -sepulture -sepultures -sequacious -sequaciously -sequacities -sequacity -sequel -sequela -sequelae -sequels -sequence -sequenced -sequencer -sequencers -sequences -sequencies -sequencing -sequency -sequent -sequential -sequentially -sequents -sequester -sequestered -sequestering -sequesters -sequestra -sequestrate -sequestrated -sequestrates -sequestrating -sequestration -sequestrations -sequestrum -sequestrums -sequin -sequined -sequinned -sequins -sequitur -sequiturs -sequoia -sequoias -ser -sera -serac -seracs -seraglio -seraglios -serai -serail -serails -serais -seral -serape -serapes -seraph -seraphic -seraphically -seraphim -seraphims -seraphin -seraphs -serdab -serdabs -sere -sered -serein -sereins -serenade -serenaded -serenader -serenaders -serenades -serenading -serenata -serenatas -serenate -serendipities -serendipitous -serendipitously -serendipity -serene -serenely -sereneness -serenenesses -serener -serenes -serenest -serenities -serenity -serer -seres -serest -serf -serfage -serfages -serfdom -serfdoms -serfhood -serfhoods -serfish -serflike -serfs -serge -sergeancies -sergeancy -sergeant -sergeanties -sergeants -sergeanty -serges -serging -sergings -serial -serialise -serialised -serialises -serialising -serialism -serialisms -serialist -serialists -serialization -serializations -serialize -serialized -serializes -serializing -serially -serials -seriate -seriated -seriately -seriates -seriatim -seriating -sericeous -sericin -sericins -sericultural -sericulture -sericultures -sericulturist -sericulturists -seriema -seriemas -series -serif -serifed -seriffed -serifs -serigraph -serigrapher -serigraphers -serigraphies -serigraphs -serigraphy -serin -serine -serines -sering -seringa -seringas -serins -seriocomic -seriocomically -serious -seriously -seriousness -seriousnesses -serjeant -serjeanties -serjeants -serjeanty -sermon -sermonette -sermonettes -sermonic -sermonize -sermonized -sermonizer -sermonizers -sermonizes -sermonizing -sermons -seroconversion -seroconversions -serodiagnoses -serodiagnosis -serodiagnostic -serologic -serological -serologically -serologies -serologist -serologists -serology -seronegative -seronegativities -seronegativity -seropositive -seropositivities -seropositivity -seropurulent -serosa -serosae -serosal -serosas -serosities -serosity -serotinal -serotine -serotines -serotinous -serotonergic -serotonin -serotoninergic -serotonins -serotype -serotypes -serous -serow -serows -serpent -serpentine -serpentinely -serpentines -serpents -serpigines -serpiginous -serpiginously -serpigo -serpigoes -serranid -serranids -serrano -serranos -serrate -serrated -serrates -serrating -serration -serrations -serried -serriedly -serriedness -serriednesses -serries -serry -serrying -sers -serum -serumal -serums -servable -serval -servals -servant -servanthood -servanthoods -servantless -servants -serve -served -server -servers -serves -service -serviceabilities -serviceability -serviceable -serviceableness -serviceablenesses -serviceably -serviceberries -serviceberry -serviced -serviceman -servicemen -servicer -servicers -services -servicewoman -servicewomen -servicing -serviette -serviettes -servile -servilely -servileness -servilenesses -servilities -servility -serving -servings -servitor -servitors -servitude -servitudes -servo -servomechanism -servomechanisms -servomotor -servomotors -servos -sesame -sesames -sesamoid -sesamoids -sesquicarbonate -sesquicarbonates -sesquicentenaries -sesquicentenary -sesquicentennial -sesquicentennials -sesquipedalian -sesquiterpene -sesquiterpenes -sessile -session -sessional -sessions -sesspool -sesspools -sesterce -sesterces -sestertia -sestertium -sestet -sestets -sestina -sestinas -sestine -sestines -set -seta -setaceous -setae -setal -setback -setbacks -setenant -setenants -setiform -setline -setlines -setoff -setoffs -seton -setons -setose -setous -setout -setouts -sets -setscrew -setscrews -sett -settee -settees -setter -setters -setting -settings -settle -settleable -settled -settlement -settlements -settler -settlers -settles -settling -settlings -settlor -settlors -setts -setulose -setulous -setup -setups -seven -sevenfold -sevens -seventeen -seventeens -seventeenth -seventeenths -seventh -sevenths -seventies -seventieth -seventieths -seventy -sever -severabilities -severability -severable -several -severalfold -severally -severals -severalties -severalty -severance -severances -severe -severed -severely -severeness -severenesses -severer -severest -severing -severities -severity -severs -seviche -seviches -sevruga -sevrugas -sew -sewabilities -sewability -sewable -sewage -sewages -sewan -sewans -sewar -sewars -sewed -sewer -sewerage -sewerages -sewered -sewering -sewers -sewing -sewings -sewn -sews -sex -sexagenarian -sexagenarians -sexagesimal -sexagesimals -sexdecillion -sexdecillions -sexed -sexes -sexier -sexiest -sexily -sexiness -sexinesses -sexing -sexism -sexisms -sexist -sexists -sexless -sexlessly -sexlessness -sexlessnesses -sexologies -sexologist -sexologists -sexology -sexploitation -sexploitations -sexpot -sexpots -sext -sextain -sextains -sextan -sextans -sextant -sextants -sextarii -sextarius -sextet -sextets -sextette -sextettes -sextile -sextiles -sextillion -sextillions -sexto -sextodecimo -sextodecimos -sexton -sextons -sextos -sexts -sextuple -sextupled -sextuples -sextuplet -sextuplets -sextuplicate -sextuplicated -sextuplicates -sextuplicating -sextupling -sextuply -sexual -sexualities -sexuality -sexualization -sexualizations -sexualize -sexualized -sexualizes -sexualizing -sexually -sexy -sferics -sforzandi -sforzando -sforzandos -sforzato -sforzatos -sfumato -sfumatos -sgraffiti -sgraffito -sh -sha -shabbier -shabbiest -shabbily -shabbiness -shabbinesses -shabby -shack -shackle -shacklebone -shacklebones -shackled -shackler -shacklers -shackles -shackling -shacko -shackoes -shackos -shacks -shad -shadberries -shadberry -shadblow -shadblows -shadbush -shadbushes -shadchan -shadchanim -shadchans -shaddock -shaddocks -shade -shaded -shadeless -shader -shaders -shades -shadflies -shadfly -shadier -shadiest -shadily -shadiness -shadinesses -shading -shadings -shadoof -shadoofs -shadow -shadowbox -shadowboxed -shadowboxes -shadowboxing -shadowed -shadower -shadowers -shadowgraph -shadowgraphies -shadowgraphs -shadowgraphy -shadowier -shadowiest -shadowily -shadowiness -shadowinesses -shadowing -shadowless -shadowlike -shadows -shadowy -shadrach -shadrachs -shads -shaduf -shadufs -shady -shaft -shafted -shafting -shaftings -shafts -shag -shagbark -shagbarks -shagged -shaggier -shaggiest -shaggily -shagginess -shagginesses -shagging -shaggy -shaggymane -shaggymanes -shagreen -shagreens -shags -shah -shahdom -shahdoms -shahs -shaird -shairds -shairn -shairns -shaitan -shaitans -shakable -shake -shakeable -shakedown -shakedowns -shaken -shakeout -shakeouts -shaker -shakers -shakes -shakeup -shakeups -shakier -shakiest -shakily -shakiness -shakinesses -shaking -shako -shakoes -shakos -shaky -shale -shaled -shales -shaley -shalier -shaliest -shall -shalloon -shalloons -shallop -shallops -shallot -shallots -shallow -shallowed -shallower -shallowest -shallowing -shallowly -shallowness -shallownesses -shallows -shalom -shaloms -shalt -shaly -sham -shamable -shaman -shamanic -shamanism -shamanisms -shamanist -shamanistic -shamanists -shamans -shamas -shamble -shambled -shambles -shambling -shambolic -shame -shamed -shamefaced -shamefacedly -shamefacedness -shamefacednesses -shamefast -shameful -shamefully -shamefulness -shamefulnesses -shameless -shamelessly -shamelessness -shamelessnesses -shames -shaming -shammas -shammash -shammashim -shammasim -shammed -shammer -shammers -shammes -shammied -shammies -shamming -shammos -shammosim -shammy -shammying -shamois -shamos -shamosim -shamoy -shamoyed -shamoying -shamoys -shampoo -shampooed -shampooer -shampooers -shampooing -shampoos -shamrock -shamrocks -shams -shamus -shamuses -shandies -shandy -shandygaff -shandygaffs -shanghai -shanghaied -shanghaier -shanghaiers -shanghaiing -shanghais -shank -shanked -shanking -shankpiece -shankpieces -shanks -shannies -shanny -shantey -shanteys -shanti -shanties -shantih -shantihs -shantis -shantung -shantungs -shanty -shantyman -shantymen -shantytown -shantytowns -shapable -shape -shapeable -shaped -shapeless -shapelessly -shapelessness -shapelessnesses -shapelier -shapeliest -shapeliness -shapelinesses -shapely -shapen -shaper -shapers -shapes -shapeup -shapeups -shaping -sharable -shard -shards -share -shareabilities -shareability -shareable -sharecrop -sharecropped -sharecropper -sharecroppers -sharecropping -sharecrops -shared -shareholder -shareholders -sharer -sharers -shares -shareware -sharewares -sharif -sharifian -sharifs -sharing -shark -sharked -sharker -sharkers -sharking -sharklike -sharks -sharkskin -sharkskins -sharn -sharns -sharny -sharp -sharped -sharpen -sharpened -sharpener -sharpeners -sharpening -sharpens -sharper -sharpers -sharpest -sharpie -sharpies -sharping -sharply -sharpness -sharpnesses -sharps -sharpshooter -sharpshooters -sharpshooting -sharpshootings -sharpy -shashlick -shashlicks -shashlik -shashliks -shaslik -shasliks -shat -shatter -shattered -shattering -shatteringly -shatterproof -shatters -shaugh -shaughs -shaul -shauled -shauling -shauls -shavable -shave -shaved -shaveling -shavelings -shaven -shaver -shavers -shaves -shavetail -shavetails -shavie -shavies -shaving -shavings -shaw -shawed -shawing -shawl -shawled -shawling -shawls -shawm -shawms -shawn -shaws -shay -shays -shazam -she -shea -sheaf -sheafed -sheafing -sheaflike -sheafs -sheal -shealing -shealings -sheals -shear -sheared -shearer -shearers -shearing -shearings -shearling -shearlings -shears -shearwater -shearwaters -sheas -sheath -sheathbill -sheathbills -sheathe -sheathed -sheather -sheathers -sheathes -sheathing -sheathings -sheaths -sheave -sheaved -sheaves -sheaving -shebang -shebangs -shebean -shebeans -shebeen -shebeens -shed -shedable -shedded -shedder -shedders -shedding -shedlike -sheds -sheen -sheened -sheeney -sheeneys -sheenful -sheenie -sheenier -sheenies -sheeniest -sheening -sheens -sheeny -sheep -sheepberries -sheepberry -sheepcot -sheepcote -sheepcotes -sheepcots -sheepdog -sheepdogs -sheepfold -sheepfolds -sheepherder -sheepherders -sheepherding -sheepherdings -sheepish -sheepishly -sheepishness -sheepishnesses -sheeplike -sheepman -sheepmen -sheepshank -sheepshanks -sheepshead -sheepsheads -sheepshearer -sheepshearers -sheepshearing -sheepshearings -sheepskin -sheepskins -sheer -sheered -sheerer -sheerest -sheering -sheerlegs -sheerly -sheerness -sheernesses -sheers -sheesh -sheet -sheeted -sheeter -sheeters -sheetfed -sheeting -sheetings -sheetlike -sheets -sheeve -sheeves -shegetz -sheik -sheikdom -sheikdoms -sheikh -sheikhdom -sheikhdoms -sheikhs -sheiks -sheila -sheilas -sheitan -sheitans -shekel -shekels -sheldrake -sheldrakes -shelduck -shelducks -shelf -shelfful -shelffuls -shelflike -shell -shellac -shellack -shellacked -shellacking -shellackings -shellacks -shellacs -shellback -shellbacks -shellcracker -shellcrackers -shelled -sheller -shellers -shellfire -shellfires -shellfish -shellfisheries -shellfishery -shellfishes -shellier -shelliest -shelling -shellproof -shells -shellshocked -shellwork -shellworks -shelly -shelta -sheltas -shelter -shelterbelt -shelterbelts -sheltered -shelterer -shelterers -sheltering -shelterless -shelters -sheltie -shelties -shelty -shelve -shelved -shelver -shelvers -shelves -shelvier -shelviest -shelving -shelvings -shelvy -shenanigan -shenanigans -shend -shending -shends -shent -sheol -sheols -shepherd -shepherded -shepherdess -shepherdesses -shepherding -shepherds -sheqalim -sheqel -sherbert -sherberts -sherbet -sherbets -sherd -sherds -shereef -shereefs -shergottite -shergottites -sherif -sheriff -sheriffdom -sheriffdoms -sheriffs -sherifs -sherlock -sherlocks -sheroot -sheroots -sherpa -sherpas -sherries -sherris -sherrises -sherry -shes -shetland -shetlands -sheuch -sheuchs -sheugh -sheughs -shew -shewbread -shewbreads -shewed -shewer -shewers -shewing -shewn -shews -shh -shiatsu -shiatsus -shiatzu -shiatzus -shibah -shibahs -shibboleth -shibboleths -shicker -shickers -shicksa -shicksas -shied -shiel -shield -shielded -shielder -shielders -shielding -shields -shieling -shielings -shiels -shier -shiers -shies -shiest -shift -shiftable -shifted -shifter -shifters -shiftier -shiftiest -shiftily -shiftiness -shiftinesses -shifting -shiftless -shiftlessly -shiftlessness -shiftlessnesses -shifts -shifty -shigella -shigellae -shigellas -shigelloses -shigellosis -shiitake -shiitakes -shikar -shikaree -shikarees -shikari -shikaris -shikarred -shikarring -shikars -shikker -shikkers -shiksa -shiksas -shikse -shikses -shilingi -shill -shillala -shillalah -shillalahs -shillalas -shilled -shillelagh -shillelaghs -shilling -shillings -shills -shilpit -shily -shim -shimmed -shimmer -shimmered -shimmering -shimmers -shimmery -shimmied -shimmies -shimming -shimmy -shimmying -shims -shin -shinbone -shinbones -shindies -shindig -shindigs -shindy -shindys -shine -shined -shiner -shiners -shines -shingle -shingled -shingler -shinglers -shingles -shingling -shingly -shinier -shiniest -shinily -shininess -shininesses -shining -shinleaf -shinleafs -shinleaves -shinned -shinneries -shinnery -shinney -shinneyed -shinneying -shinneys -shinnied -shinnies -shinning -shinny -shinnying -shinplaster -shinplasters -shins -shinsplints -shiny -ship -shipboard -shipboards -shipborne -shipbuilder -shipbuilders -shipbuilding -shipbuildings -shipfitter -shipfitters -shiplap -shiplaps -shipload -shiploads -shipman -shipmaster -shipmasters -shipmate -shipmates -shipmen -shipment -shipments -shipowner -shipowners -shippable -shipped -shippen -shippens -shipper -shippers -shipping -shippings -shippon -shippons -ships -shipshape -shipside -shipsides -shipway -shipways -shipworm -shipworms -shipwreck -shipwrecked -shipwrecking -shipwrecks -shipwright -shipwrights -shipyard -shipyards -shire -shires -shirk -shirked -shirker -shirkers -shirking -shirks -shirr -shirred -shirring -shirrings -shirrs -shirt -shirtdress -shirtdresses -shirtfront -shirtfronts -shirtier -shirtiest -shirting -shirtings -shirtless -shirtmaker -shirtmakers -shirts -shirtsleeve -shirtsleeved -shirtsleeves -shirttail -shirttails -shirtwaist -shirtwaists -shirty -shist -shists -shit -shitake -shitakes -shithead -shitheads -shits -shittah -shittahs -shitted -shittier -shittiest -shittim -shittims -shittimwood -shittimwoods -shitting -shitty -shiv -shiva -shivah -shivahs -shivaree -shivareed -shivareeing -shivarees -shivas -shive -shiver -shivered -shiverer -shiverers -shivering -shivers -shivery -shives -shivs -shkotzim -shlemiehl -shlemiehls -shlemiel -shlemiels -shlep -shlepp -shlepped -shlepping -shlepps -shleps -shlock -shlocks -shlump -shlumped -shlumping -shlumps -shlumpy -shmaltz -shmaltzes -shmaltzier -shmaltziest -shmaltzy -shmear -shmears -shmo -shmoes -shmooze -shmoozed -shmoozes -shmoozing -shmuck -shmucks -shnaps -shnook -shnooks -shoal -shoaled -shoaler -shoalest -shoalier -shoaliest -shoaling -shoals -shoaly -shoat -shoats -shock -shockable -shocked -shocker -shockers -shocking -shockingly -shockproof -shocks -shod -shodden -shoddier -shoddies -shoddiest -shoddily -shoddiness -shoddinesses -shoddy -shoe -shoebill -shoebills -shoeblack -shoeblacks -shoed -shoehorn -shoehorned -shoehorning -shoehorns -shoeing -shoelace -shoelaces -shoeless -shoemaker -shoemakers -shoepac -shoepack -shoepacks -shoepacs -shoer -shoers -shoes -shoeshine -shoeshines -shoestring -shoestrings -shoetree -shoetrees -shofar -shofars -shofroth -shog -shogged -shogging -shogs -shogun -shogunal -shogunate -shogunates -shoguns -shoji -shojis -sholom -sholoms -shone -shoo -shooed -shooflies -shoofly -shooing -shook -shooks -shool -shooled -shooling -shools -shoon -shoos -shoot -shooter -shooters -shooting -shootings -shootout -shootouts -shoots -shop -shopboy -shopboys -shopgirl -shopgirls -shophar -shophars -shophroth -shopkeeper -shopkeepers -shoplift -shoplifted -shoplifter -shoplifters -shoplifting -shoplifts -shopman -shopmen -shoppe -shopped -shopper -shoppers -shoppes -shopping -shoppings -shops -shoptalk -shoptalks -shopwindow -shopwindows -shopworn -shoran -shorans -shore -shorebird -shorebirds -shored -shorefront -shorefronts -shoreline -shorelines -shores -shoreside -shoreward -shorewards -shoring -shorings -shorl -shorls -shorn -short -shortage -shortages -shortbread -shortbreads -shortcake -shortcakes -shortchange -shortchanged -shortchanger -shortchangers -shortchanges -shortchanging -shortcoming -shortcomings -shortcut -shortcuts -shortcutting -shorted -shorten -shortened -shortener -shorteners -shortening -shortenings -shortens -shorter -shortest -shortfall -shortfalls -shorthair -shorthaired -shorthairs -shorthand -shorthanded -shorthands -shorthorn -shorthorns -shortia -shortias -shortie -shorties -shorting -shortish -shortlist -shortlists -shortly -shortness -shortnesses -shorts -shortsighted -shortsightedly -shortsightedness -shortsightednesses -shortstop -shortstops -shortwave -shortwaves -shorty -shot -shote -shotes -shotgun -shotgunned -shotgunner -shotgunners -shotgunning -shotguns -shots -shott -shotted -shotten -shotting -shotts -should -shoulder -shouldered -shouldering -shoulders -shouldest -shouldst -shout -shouted -shouter -shouters -shouting -shouts -shove -shoved -shovel -shoveled -shoveler -shovelers -shovelful -shovelfuls -shoveling -shovelled -shoveller -shovellers -shovelling -shovelnose -shovelnoses -shovels -shovelsful -shover -shovers -shoves -shoving -show -showable -showbiz -showbizzes -showbizzy -showboat -showboated -showboating -showboats -showbread -showbreads -showcase -showcased -showcases -showcasing -showdown -showdowns -showed -shower -showered -showerer -showerers -showerhead -showerheads -showering -showerless -showers -showery -showgirl -showgirls -showier -showiest -showily -showiness -showinesses -showing -showings -showman -showmanship -showmanships -showmen -shown -showoff -showoffs -showpiece -showpieces -showplace -showplaces -showring -showrings -showroom -showrooms -shows -showstopper -showstoppers -showstopping -showtime -showtimes -showy -shoyu -shoyus -shrank -shrapnel -shred -shredded -shredder -shredders -shredding -shreds -shrew -shrewd -shrewder -shrewdest -shrewdie -shrewdies -shrewdly -shrewdness -shrewdnesses -shrewed -shrewing -shrewish -shrewishly -shrewishness -shrewishnesses -shrewlike -shrews -shri -shriek -shrieked -shrieker -shriekers -shriekier -shriekiest -shrieking -shrieks -shrieky -shrieval -shrievalties -shrievalty -shrieve -shrieved -shrieves -shrieving -shrift -shrifts -shrike -shrikes -shrill -shrilled -shriller -shrillest -shrilling -shrillness -shrillnesses -shrills -shrilly -shrimp -shrimped -shrimper -shrimpers -shrimpier -shrimpiest -shrimping -shrimplike -shrimps -shrimpy -shrine -shrined -shrines -shrining -shrink -shrinkable -shrinkage -shrinkages -shrinker -shrinkers -shrinking -shrinks -shris -shrive -shrived -shrivel -shriveled -shriveling -shrivelled -shrivelling -shrivels -shriven -shriver -shrivers -shrives -shriving -shroff -shroffed -shroffing -shroffs -shroud -shrouded -shrouding -shrouds -shrove -shrub -shrubberies -shrubbery -shrubbier -shrubbiest -shrubby -shrubs -shrug -shrugged -shrugging -shrugs -shrunk -shrunken -shtetel -shtetels -shtetl -shtetlach -shtetls -shtick -shticks -shtik -shtiks -shuck -shucked -shucker -shuckers -shucking -shuckings -shucks -shudder -shuddered -shuddering -shudders -shuddery -shuffle -shuffleboard -shuffleboards -shuffled -shuffler -shufflers -shuffles -shuffling -shul -shuln -shuls -shun -shunned -shunner -shunners -shunning -shunpike -shunpiked -shunpiker -shunpikers -shunpikes -shunpiking -shunpikings -shuns -shunt -shunted -shunter -shunters -shunting -shunts -shush -shushed -shushes -shushing -shut -shutdown -shutdowns -shute -shuted -shutes -shuteye -shuteyes -shuting -shutoff -shutoffs -shutout -shutouts -shuts -shutter -shutterbug -shutterbugs -shuttered -shuttering -shutterless -shutters -shutting -shuttle -shuttlecock -shuttlecocked -shuttlecocking -shuttlecocks -shuttled -shuttleless -shuttles -shuttling -shwanpan -shwanpans -shy -shyer -shyers -shyest -shying -shylock -shylocked -shylocking -shylocks -shyly -shyness -shynesses -shyster -shysters -si -sial -sialagogue -sialagogues -sialic -sialid -sialidan -sialidans -sialids -sialoid -sials -siamang -siamangs -siamese -siameses -sib -sibb -sibbs -sibilance -sibilances -sibilant -sibilantly -sibilants -sibilate -sibilated -sibilates -sibilating -sibilation -sibilations -sibling -siblings -sibs -sibyl -sibylic -sibyllic -sibylline -sibyls -sic -siccan -sicced -siccing -sice -sices -sick -sickbay -sickbays -sickbed -sickbeds -sicked -sickee -sickees -sicken -sickened -sickener -sickeners -sickening -sickeningly -sickens -sicker -sickerly -sickest -sickie -sickies -sicking -sickish -sickishly -sickishness -sickishnesses -sickle -sickled -sicklemia -sicklemias -sickles -sicklied -sicklier -sicklies -sickliest -sicklily -sickliness -sicklinesses -sickling -sickly -sicklying -sickness -sicknesses -sicko -sickos -sickout -sickouts -sickroom -sickrooms -sicks -sics -siddur -siddurim -siddurs -side -sidearm -sideband -sidebands -sidebar -sidebars -sideboard -sideboards -sideburned -sideburns -sidecar -sidecars -sided -sidedness -sidednesses -sidedress -sidedresses -sidehill -sidehills -sidekick -sidekicks -sidelight -sidelights -sideline -sidelined -sideliner -sideliners -sidelines -sideling -sidelining -sidelong -sideman -sidemen -sidepiece -sidepieces -sidereal -siderite -siderites -siderolite -siderolites -sides -sidesaddle -sidesaddles -sideshow -sideshows -sideslip -sideslipped -sideslipping -sideslips -sidespin -sidespins -sidesplitting -sidesplittingly -sidestep -sidestepped -sidestepper -sidesteppers -sidestepping -sidesteps -sidestream -sidestroke -sidestrokes -sideswipe -sideswiped -sideswipes -sideswiping -sidetrack -sidetracked -sidetracking -sidetracks -sidewalk -sidewalks -sidewall -sidewalls -sideward -sidewards -sideway -sideways -sidewinder -sidewinders -sidewise -siding -sidings -sidle -sidled -sidler -sidlers -sidles -sidling -siege -sieged -sieges -sieging -siemens -sienite -sienites -sienna -siennas -sierozem -sierozems -sierra -sierran -sierras -siesta -siestas -sieur -sieurs -sieve -sieved -sieves -sieving -sifaka -sifakas -siffleur -siffleurs -sift -sifted -sifter -sifters -sifting -siftings -sifts -siganid -siganids -sigh -sighed -sigher -sighers -sighing -sighless -sighlike -sighs -sight -sighted -sighter -sighters -sighting -sightings -sightless -sightlessly -sightlessness -sightlessnesses -sightlier -sightliest -sightliness -sightlinesses -sightly -sights -sightsaw -sightsee -sightseeing -sightseen -sightseer -sightseers -sightsees -sigil -sigils -sigloi -siglos -sigma -sigmas -sigmate -sigmoid -sigmoidal -sigmoidally -sigmoidoscopies -sigmoidoscopy -sigmoids -sign -signage -signages -signal -signaled -signaler -signalers -signaling -signalise -signalised -signalises -signalising -signalization -signalizations -signalize -signalized -signalizes -signalizing -signalled -signaller -signallers -signalling -signally -signalman -signalmen -signalment -signalments -signals -signatories -signatory -signature -signatures -signboard -signboards -signed -signee -signees -signer -signers -signet -signeted -signeting -signets -significance -significances -significancies -significancy -significant -significantly -signification -significations -significative -significs -signified -signifieds -signifier -signifiers -signifies -signify -signifying -signifyings -signing -signior -signiori -signiories -signiors -signiory -signor -signora -signoras -signore -signori -signories -signorina -signorinas -signorine -signors -signory -signpost -signposted -signposting -signposts -signs -sike -siker -sikes -silage -silages -silane -silanes -sild -silds -silence -silenced -silencer -silencers -silences -silencing -sileni -silent -silenter -silentest -silently -silentness -silentnesses -silents -silenus -silesia -silesias -silex -silexes -silhouette -silhouetted -silhouettes -silhouetting -silhouettist -silhouettists -silica -silicas -silicate -silicates -siliceous -silicic -silicide -silicides -silicification -silicifications -silicified -silicifies -silicify -silicifying -silicious -silicium -siliciums -silicle -silicles -silicon -silicone -silicones -siliconized -silicons -silicoses -silicosis -silicotic -silicotics -silicula -siliculae -siliculas -siliqua -siliquae -siliquas -silique -siliques -silk -silkaline -silkalines -silked -silken -silkier -silkies -silkiest -silkily -silkiness -silkinesses -silking -silklike -silkoline -silkolines -silks -silkscreen -silkscreens -silkweed -silkweeds -silkworm -silkworms -silky -sill -sillabub -sillabubs -siller -sillers -sillibub -sillibubs -sillier -sillies -silliest -sillily -sillimanite -sillimanites -silliness -sillinesses -sills -silly -silo -siloed -siloing -silos -siloxane -siloxanes -silt -siltation -siltations -silted -siltier -siltiest -silting -silts -siltstone -siltstones -silty -silurid -silurids -siluroid -siluroids -silva -silvae -silvan -silvans -silvas -silver -silverback -silverbacks -silverberries -silverberry -silvered -silverer -silverers -silverfish -silverfishes -silveriness -silverinesses -silvering -silverly -silvern -silverpoint -silverpoints -silvers -silverside -silversides -silversmith -silversmithing -silversmithings -silversmiths -silverware -silverwares -silverweed -silverweeds -silvery -silvex -silvexes -silvical -silvics -silvicultural -silviculturally -silviculture -silvicultures -silviculturist -silviculturists -sim -sima -simar -simars -simaruba -simarubas -simas -simazine -simazines -simian -simians -similar -similarities -similarity -similarly -simile -similes -similitude -similitudes -simioid -simious -simitar -simitars -simlin -simlins -simmer -simmered -simmering -simmers -simnel -simnels -simoleon -simoleons -simoniac -simoniacal -simoniacally -simoniacs -simonies -simonist -simonists -simonize -simonized -simonizes -simonizing -simony -simoom -simooms -simoon -simoons -simp -simpatico -simper -simpered -simperer -simperers -simpering -simpers -simple -simpleminded -simplemindedly -simplemindedness -simplemindednesses -simpleness -simplenesses -simpler -simples -simplest -simpleton -simpletons -simplex -simplexes -simplices -simplicia -simplicial -simplicially -simplicities -simplicity -simplification -simplifications -simplified -simplifier -simplifiers -simplifies -simplify -simplifying -simplism -simplisms -simplist -simplistic -simplistically -simplists -simply -simps -sims -simulacra -simulacre -simulacres -simulacrum -simulacrums -simulant -simulants -simular -simulars -simulate -simulated -simulates -simulating -simulation -simulations -simulative -simulator -simulators -simulcast -simulcasted -simulcasting -simulcasts -simultaneities -simultaneity -simultaneous -simultaneously -simultaneousness -simultaneousnesses -sin -sinapism -sinapisms -since -sincere -sincerely -sincereness -sincerenesses -sincerer -sincerest -sincerities -sincerity -sincipita -sincipital -sinciput -sinciputs -sine -sinecure -sinecures -sines -sinew -sinewed -sinewing -sinews -sinewy -sinfonia -sinfonias -sinfonie -sinfonietta -sinfoniettas -sinful -sinfully -sinfulness -sinfulnesses -sing -singable -singe -singed -singeing -singer -singers -singes -singing -single -singled -singleness -singlenesses -singles -singlestick -singlesticks -singlet -singleton -singletons -singletree -singletrees -singlets -singling -singly -sings -singsong -singsongs -singsongy -singspiel -singspiels -singular -singularities -singularity -singularize -singularized -singularizes -singularizing -singularly -singulars -sinh -sinhs -sinicize -sinicized -sinicizes -sinicizing -sinister -sinisterly -sinisterness -sinisternesses -sinistral -sinistrous -sink -sinkable -sinkage -sinkages -sinker -sinkers -sinkhole -sinkholes -sinking -sinks -sinless -sinlessly -sinlessness -sinlessnesses -sinned -sinner -sinners -sinning -sinoatrial -sinological -sinologies -sinologist -sinologists -sinologue -sinologues -sinology -sinopia -sinopias -sinopie -sins -sinsemilla -sinsemillas -sinsyne -sinter -sinterabilities -sinterability -sintered -sintering -sinters -sinuate -sinuated -sinuates -sinuating -sinuosities -sinuosity -sinuous -sinuously -sinuousness -sinuousnesses -sinus -sinuses -sinusitis -sinusitises -sinusoid -sinusoidal -sinusoidally -sinusoids -sip -sipe -siped -sipes -siphon -siphonal -siphoned -siphonic -siphoning -siphonophore -siphonophores -siphonostele -siphonosteles -siphons -siping -sipped -sipper -sippers -sippet -sippets -sipping -sips -sir -sirdar -sirdars -sire -sired -siree -sirees -siren -sirenian -sirenians -sirens -sires -siring -sirloin -sirloins -sirocco -siroccos -sirra -sirrah -sirrahs -sirras -sirree -sirrees -sirs -sirup -sirups -sirupy -sirvente -sirventes -sis -sisal -sisals -sises -siskin -siskins -sissier -sissies -sissiest -sissified -sissy -sissyish -sister -sistered -sisterhood -sisterhoods -sistering -sisterly -sisters -sistra -sistroid -sistrum -sistrums -sit -sitar -sitarist -sitarists -sitars -sitcom -sitcoms -site -sited -sites -sith -sithence -sithens -siting -sitologies -sitology -sitosterol -sitosterols -sits -sitten -sitter -sitters -sitting -sittings -situate -situated -situates -situating -situation -situational -situationally -situations -situp -situps -situs -situses -sitzmark -sitzmarks -siver -sivers -six -sixes -sixfold -sixmo -sixmos -sixpence -sixpences -sixpenny -sixte -sixteen -sixteenmo -sixteenmos -sixteens -sixteenth -sixteenths -sixtes -sixth -sixthly -sixths -sixties -sixtieth -sixtieths -sixty -sixtyish -sizable -sizableness -sizablenesses -sizably -sizar -sizars -size -sizeable -sizeably -sized -sizer -sizers -sizes -sizier -siziest -siziness -sizinesses -sizing -sizings -sizy -sizzle -sizzled -sizzler -sizzlers -sizzles -sizzling -sjambok -sjamboked -sjamboking -sjamboks -ska -skag -skags -skald -skaldic -skalds -skas -skat -skate -skateboard -skateboarder -skateboarders -skateboarding -skateboardings -skateboards -skated -skater -skaters -skates -skating -skatings -skatol -skatole -skatoles -skatols -skats -skean -skeane -skeanes -skeans -skedaddle -skedaddled -skedaddler -skedaddlers -skedaddles -skedaddling -skee -skeed -skeeing -skeen -skeens -skees -skeet -skeeter -skeeters -skeets -skeg -skegs -skeigh -skein -skeined -skeining -skeins -skeletal -skeletally -skeleton -skeletonic -skeletonise -skeletonised -skeletonises -skeletonising -skeletonize -skeletonized -skeletonizer -skeletonizers -skeletonizes -skeletonizing -skeletons -skellum -skellums -skelm -skelms -skelp -skelped -skelping -skelpit -skelps -skelter -skeltered -skeltering -skelters -skene -skenes -skep -skeps -skepsis -skepsises -skeptic -skeptical -skeptically -skepticism -skepticisms -skeptics -skerries -skerry -sketch -sketchbook -sketchbooks -sketched -sketcher -sketchers -sketches -sketchier -sketchiest -sketchily -sketchiness -sketchinesses -sketching -sketchy -skew -skewback -skewbacks -skewbald -skewbalds -skewed -skewer -skewered -skewering -skewers -skewing -skewness -skewnesses -skews -ski -skiable -skiagram -skiagrams -skibob -skibobber -skibobbers -skibobbing -skibobbings -skibobs -skid -skidded -skidder -skidders -skiddier -skiddiest -skidding -skiddoo -skiddooed -skiddooing -skiddoos -skiddy -skidoo -skidooed -skidooing -skidoos -skidproof -skids -skidway -skidways -skied -skier -skiers -skies -skiey -skiff -skiffle -skiffled -skiffles -skiffling -skiffs -skiing -skiings -skijorer -skijorers -skijoring -skijorings -skilful -skill -skilled -skilless -skillessness -skillessnesses -skillet -skillets -skillful -skillfully -skillfulness -skillfulnesses -skilling -skillings -skills -skim -skimmed -skimmer -skimmers -skimming -skimmings -skimo -skimobile -skimobiles -skimos -skimp -skimped -skimpier -skimpiest -skimpily -skimpiness -skimpinesses -skimping -skimps -skimpy -skims -skin -skinflint -skinflints -skinful -skinfuls -skinhead -skinheads -skink -skinked -skinker -skinkers -skinking -skinks -skinless -skinlike -skinned -skinner -skinners -skinnier -skinniest -skinniness -skinninesses -skinning -skinny -skins -skint -skintight -skioring -skiorings -skip -skipjack -skipjacks -skiplane -skiplanes -skippable -skipped -skipper -skippered -skippering -skippers -skippet -skippets -skipping -skips -skirl -skirled -skirling -skirls -skirmish -skirmished -skirmisher -skirmishers -skirmishes -skirmishing -skirr -skirred -skirret -skirrets -skirring -skirrs -skirt -skirted -skirter -skirters -skirting -skirtings -skirts -skis -skit -skite -skited -skites -skiting -skits -skitter -skittered -skitterier -skitteriest -skittering -skitters -skittery -skittish -skittishly -skittishness -skittishnesses -skittle -skittles -skive -skived -skiver -skivers -skives -skiving -skivvied -skivvies -skivvy -skivvying -skiwear -sklent -sklented -sklenting -sklents -skoal -skoaled -skoaling -skoals -skookum -skosh -skoshes -skreegh -skreeghed -skreeghing -skreeghs -skreigh -skreighed -skreighing -skreighs -skua -skuas -skulduggeries -skulduggery -skulk -skulked -skulker -skulkers -skulking -skulks -skull -skullcap -skullcaps -skullduggeries -skullduggery -skulled -skulls -skunk -skunked -skunking -skunks -sky -skyborne -skybox -skyboxes -skycap -skycaps -skydive -skydived -skydiver -skydivers -skydives -skydiving -skydivings -skydove -skyed -skyey -skyhook -skyhooks -skying -skyjack -skyjacked -skyjacker -skyjackers -skyjacking -skyjackings -skyjacks -skylark -skylarked -skylarker -skylarkers -skylarking -skylarks -skylight -skylighted -skylights -skyline -skylines -skylit -skyman -skymen -skyphoi -skyphos -skyrocket -skyrocketed -skyrocketing -skyrockets -skysail -skysails -skyscraper -skyscrapers -skywalk -skywalks -skyward -skywards -skyway -skyways -skywrite -skywriter -skywriters -skywrites -skywriting -skywritings -skywritten -skywrote -slab -slabbed -slabber -slabbered -slabbering -slabbers -slabbery -slabbing -slablike -slabs -slack -slacked -slacken -slackened -slackening -slackens -slacker -slackers -slackest -slacking -slackly -slackness -slacknesses -slacks -slag -slagged -slaggier -slaggiest -slagging -slaggy -slags -slain -slainte -slakable -slake -slaked -slaker -slakers -slakes -slaking -slalom -slalomed -slaloming -slaloms -slam -slammed -slammer -slammers -slamming -slams -slander -slandered -slanderer -slanderers -slandering -slanderous -slanderously -slanderousness -slanderousnesses -slanders -slang -slanged -slangier -slangiest -slangily -slanginess -slanginesses -slanging -slangs -slanguage -slanguages -slangy -slank -slant -slanted -slanting -slantingly -slants -slantways -slantwise -slanty -slap -slapdash -slapdashes -slaphappier -slaphappiest -slaphappy -slapjack -slapjacks -slapped -slapper -slappers -slapping -slaps -slapstick -slapsticks -slash -slashed -slasher -slashers -slashes -slashing -slashingly -slashings -slat -slatch -slatches -slate -slated -slatelike -slater -slaters -slates -slatey -slather -slathered -slathering -slathers -slatier -slatiest -slating -slatings -slats -slatted -slattern -slatternliness -slatternlinesses -slatternly -slatterns -slatting -slattings -slaty -slaughter -slaughtered -slaughterer -slaughterers -slaughterhouse -slaughterhouses -slaughtering -slaughterous -slaughterously -slaughters -slave -slaved -slaveholder -slaveholders -slaveholding -slaveholdings -slaver -slavered -slaverer -slaverers -slaveries -slavering -slavers -slavery -slaves -slavey -slaveys -slaving -slavish -slavishly -slavishness -slavishnesses -slavocracies -slavocracy -slaw -slaws -slay -slayed -slayer -slayers -slaying -slayings -slays -sleave -sleaved -sleaves -sleaving -sleaze -sleazebag -sleazebags -sleazeball -sleazeballs -sleazes -sleazier -sleaziest -sleazily -sleaziness -sleazinesses -sleazo -sleazy -sled -sledded -sledder -sledders -sledding -sleddings -sledge -sledged -sledgehammer -sledgehammered -sledgehammering -sledgehammers -sledges -sledging -sleds -sleek -sleeked -sleeken -sleekened -sleekening -sleekens -sleeker -sleekest -sleekier -sleekiest -sleeking -sleekit -sleekly -sleekness -sleeknesses -sleeks -sleeky -sleep -sleeper -sleepers -sleepier -sleepiest -sleepily -sleepiness -sleepinesses -sleeping -sleepings -sleepless -sleeplessly -sleeplessness -sleeplessnesses -sleeplike -sleepover -sleepovers -sleeps -sleepwalk -sleepwalked -sleepwalker -sleepwalkers -sleepwalking -sleepwalks -sleepwear -sleepy -sleepyhead -sleepyheads -sleet -sleeted -sleetier -sleetiest -sleeting -sleets -sleety -sleeve -sleeved -sleeveless -sleevelet -sleevelets -sleeves -sleeving -sleigh -sleighed -sleigher -sleighers -sleighing -sleighs -sleight -sleights -slender -slenderer -slenderest -slenderize -slenderized -slenderizes -slenderizing -slenderly -slenderness -slendernesses -slept -sleuth -sleuthed -sleuthhound -sleuthhounds -sleuthing -sleuths -slew -slewed -slewing -slews -slice -sliceable -sliced -slicer -slicers -slices -slicing -slick -slicked -slickenside -slickensides -slicker -slickers -slickest -slicking -slickly -slickness -slicknesses -slickrock -slickrocks -slicks -slid -slidable -slidden -slide -slider -sliders -slides -slideway -slideways -sliding -slier -sliest -slight -slighted -slighter -slightest -slighting -slightingly -slightly -slightness -slightnesses -slights -slily -slim -slime -slimeball -slimeballs -slimed -slimes -slimier -slimiest -slimily -sliminess -sliminesses -sliming -slimly -slimmed -slimmer -slimmers -slimmest -slimming -slimnastics -slimness -slimnesses -slimpsier -slimpsiest -slimpsy -slims -slimsier -slimsiest -slimsy -slimy -sling -slinger -slingers -slinging -slings -slingshot -slingshots -slink -slinked -slinkier -slinkiest -slinkily -slinkiness -slinkinesses -slinking -slinks -slinky -slip -slipcase -slipcased -slipcases -slipcover -slipcovers -slipe -sliped -slipes -slipform -slipformed -slipforming -slipforms -sliping -slipknot -slipknots -slipless -slipout -slipouts -slipover -slipovers -slippage -slippages -slipped -slipper -slippered -slipperier -slipperiest -slipperiness -slipperinesses -slippers -slippery -slippier -slippiest -slipping -slippy -slips -slipshod -slipslop -slipslops -slipsole -slipsoles -slipstream -slipstreamed -slipstreaming -slipstreams -slipt -slipup -slipups -slipware -slipwares -slipway -slipways -slit -slither -slithered -slithering -slithers -slithery -slitless -slits -slitted -slitter -slitters -slitting -sliver -slivered -sliverer -sliverers -slivering -slivers -slivovic -slivovices -slivovitz -slivovitzes -slob -slobber -slobbered -slobberer -slobberers -slobbering -slobbers -slobbery -slobbier -slobbiest -slobbish -slobby -slobs -sloe -sloes -slog -slogan -sloganeer -sloganeered -sloganeering -sloganeers -sloganize -sloganized -sloganizes -sloganizing -slogans -slogged -slogger -sloggers -slogging -slogs -sloid -sloids -slojd -slojds -sloop -sloops -slop -slope -sloped -sloper -slopers -slopes -sloping -slopped -sloppier -sloppiest -sloppily -sloppiness -sloppinesses -slopping -sloppy -slops -slopwork -slopworks -slosh -sloshed -sloshes -sloshier -sloshiest -sloshing -sloshy -slot -slotback -slotbacks -sloth -slothful -slothfully -slothfulness -slothfulnesses -sloths -slots -slotted -slotting -slouch -slouched -sloucher -slouchers -slouches -slouchier -slouchiest -slouchily -slouchiness -slouchinesses -slouching -slouchy -slough -sloughed -sloughier -sloughiest -sloughing -sloughs -sloughy -sloven -slovenlier -slovenliest -slovenliness -slovenlinesses -slovenly -slovens -slow -slowdown -slowdowns -slowed -slower -slowest -slowing -slowish -slowly -slowness -slownesses -slowpoke -slowpokes -slows -slowworm -slowworms -sloyd -sloyds -slub -slubbed -slubber -slubbered -slubbering -slubbers -slubbing -slubbings -slubs -sludge -sludges -sludgier -sludgiest -sludgy -slue -slued -slues -sluff -sluffed -sluffing -sluffs -slug -slugabed -slugabeds -slugfest -slugfests -sluggard -sluggardly -sluggardness -sluggardnesses -sluggards -slugged -slugger -sluggers -slugging -sluggish -sluggishly -sluggishness -sluggishnesses -slugs -sluice -sluiced -sluices -sluiceway -sluiceways -sluicing -sluicy -sluing -slum -slumber -slumbered -slumberer -slumberers -slumbering -slumberous -slumbers -slumbery -slumbrous -slumgullion -slumgullions -slumgum -slumgums -slumism -slumisms -slumlord -slumlords -slummed -slummer -slummers -slummier -slummiest -slumming -slummy -slump -slumped -slumpflation -slumpflations -slumping -slumps -slums -slung -slungshot -slungshots -slunk -slur -slurb -slurban -slurbs -slurp -slurped -slurping -slurps -slurred -slurried -slurries -slurring -slurry -slurrying -slurs -slush -slushed -slushes -slushier -slushiest -slushily -slushiness -slushinesses -slushing -slushy -slut -sluts -sluttier -sluttiest -sluttish -sluttishly -sluttishness -sluttishnesses -slutty -sly -slyboots -slyer -slyest -slyly -slyness -slynesses -slype -slypes -smack -smacked -smacker -smackers -smacking -smacks -small -smallage -smallages -smallclothes -smaller -smallest -smallholder -smallholders -smallholding -smallholdings -smallish -smallmouth -smallmouths -smallness -smallnesses -smallpox -smallpoxes -smalls -smallsword -smallswords -smalt -smalti -smaltine -smaltines -smaltite -smaltites -smalto -smaltos -smalts -smaragd -smaragde -smaragdes -smaragdine -smaragdite -smaragdites -smaragds -smarm -smarmier -smarmiest -smarmily -smarminess -smarminesses -smarms -smarmy -smart -smartass -smartasses -smarted -smarten -smartened -smartening -smartens -smarter -smartest -smartie -smarties -smarting -smartly -smartness -smartnesses -smarts -smartweed -smartweeds -smarty -smash -smashed -smasher -smashers -smashes -smashing -smashingly -smashup -smashups -smatter -smattered -smatterer -smatterers -smattering -smatterings -smatters -smaze -smazes -smear -smearcase -smearcases -smeared -smearer -smearers -smearier -smeariest -smearing -smears -smeary -smectic -smectite -smectites -smectitic -smeddum -smeddums -smeek -smeeked -smeeking -smeeks -smegma -smegmas -smell -smelled -smeller -smellers -smellier -smelliest -smelling -smells -smelly -smelt -smelted -smelter -smelteries -smelters -smeltery -smelting -smelts -smerk -smerked -smerking -smerks -smew -smews -smidge -smidgen -smidgens -smidgeon -smidgeons -smidges -smidgin -smidgins -smiercase -smiercases -smilax -smilaxes -smile -smiled -smileless -smiler -smilers -smiles -smiley -smileys -smiling -smilingly -smirch -smirched -smirches -smirching -smirk -smirked -smirker -smirkers -smirkier -smirkiest -smirking -smirks -smirky -smit -smite -smiter -smiters -smites -smith -smithereens -smitheries -smithers -smithery -smithies -smiths -smithsonite -smithsonites -smithy -smiting -smitten -smock -smocked -smocking -smockings -smocks -smog -smoggier -smoggiest -smoggy -smogless -smogs -smokable -smoke -smokeable -smoked -smokehouse -smokehouses -smokejack -smokejacks -smokeless -smokelike -smokepot -smokepots -smoker -smokers -smokes -smokescreen -smokescreens -smokestack -smokestacks -smokey -smokier -smokiest -smokily -smokiness -smokinesses -smoking -smoky -smolder -smoldered -smoldering -smolders -smolt -smolts -smooch -smooched -smooches -smooching -smoochy -smooth -smoothbore -smoothbores -smoothed -smoothen -smoothened -smoothening -smoothens -smoother -smoothers -smoothes -smoothest -smoothie -smoothies -smoothing -smoothly -smoothness -smoothnesses -smooths -smoothy -smorgasbord -smorgasbords -smote -smother -smothered -smothering -smothers -smothery -smoulder -smouldered -smouldering -smoulders -smudge -smudged -smudges -smudgier -smudgiest -smudgily -smudginess -smudginesses -smudging -smudgy -smug -smugger -smuggest -smuggle -smuggled -smuggler -smugglers -smuggles -smuggling -smugly -smugness -smugnesses -smut -smutch -smutched -smutches -smutchier -smutchiest -smutching -smutchy -smuts -smutted -smuttier -smuttiest -smuttily -smuttiness -smuttinesses -smutting -smutty -snack -snacked -snacking -snacks -snaffle -snaffled -snaffles -snaffling -snafu -snafued -snafuing -snafus -snag -snagged -snaggier -snaggiest -snagging -snaggleteeth -snaggletooth -snaggletoothed -snaggy -snaglike -snags -snail -snailed -snailing -snaillike -snails -snake -snakebird -snakebirds -snakebit -snakebite -snakebites -snakebitten -snaked -snakelike -snakeroot -snakeroots -snakes -snakeskin -snakeskins -snakeweed -snakeweeds -snakey -snakier -snakiest -snakily -snaking -snaky -snap -snapback -snapbacks -snapdragon -snapdragons -snapless -snapped -snapper -snappers -snappier -snappiest -snappily -snappiness -snappinesses -snapping -snappish -snappishly -snappishness -snappishnesses -snappy -snaps -snapshooter -snapshooters -snapshot -snapshots -snapshotted -snapshotting -snapweed -snapweeds -snare -snared -snarer -snarers -snares -snaring -snark -snarkier -snarkiest -snarks -snarky -snarl -snarled -snarler -snarlers -snarlier -snarliest -snarling -snarls -snarly -snash -snashes -snatch -snatched -snatcher -snatchers -snatches -snatchier -snatchiest -snatching -snatchy -snath -snathe -snathes -snaths -snaw -snawed -snawing -snaws -snazzier -snazziest -snazzy -sneak -sneaked -sneaker -sneakered -sneakers -sneakier -sneakiest -sneakily -sneakiness -sneakinesses -sneaking -sneakingly -sneaks -sneaky -sneap -sneaped -sneaping -sneaps -sneck -snecks -sned -snedded -snedding -sneds -sneer -sneered -sneerer -sneerers -sneerful -sneering -sneers -sneesh -sneeshes -sneeze -sneezed -sneezer -sneezers -sneezes -sneezeweed -sneezeweeds -sneezier -sneeziest -sneezing -sneezy -snell -snelled -sneller -snellest -snelling -snells -snib -snibbed -snibbing -snibs -snick -snicked -snicker -snickered -snickerer -snickerers -snickering -snickers -snickersnee -snickersnees -snickery -snicking -snicks -snide -snidely -snideness -snidenesses -snider -snidest -sniff -sniffed -sniffer -sniffers -sniffier -sniffiest -sniffily -sniffiness -sniffinesses -sniffing -sniffish -sniffishly -sniffishness -sniffishnesses -sniffle -sniffled -sniffler -snifflers -sniffles -sniffling -sniffs -sniffy -snifter -snifters -snigger -sniggered -sniggerer -sniggerers -sniggering -sniggers -sniggle -sniggled -sniggler -snigglers -sniggles -sniggling -snip -snipe -sniped -sniper -snipers -sniperscope -sniperscopes -snipes -sniping -snipped -snipper -snippers -snippersnapper -snippersnappers -snippet -snippetier -snippetiest -snippets -snippety -snippier -snippiest -snippily -snipping -snippy -snips -snit -snitch -snitched -snitcher -snitchers -snitches -snitching -snits -snivel -sniveled -sniveler -snivelers -sniveling -snivelled -snivelling -snivels -snob -snobberies -snobbery -snobbier -snobbiest -snobbily -snobbish -snobbishly -snobbishness -snobbishnesses -snobbism -snobbisms -snobby -snobs -snog -snogged -snogging -snogs -snollygoster -snollygosters -snood -snooded -snooding -snoods -snook -snooked -snooker -snookered -snookering -snookers -snooking -snooks -snool -snooled -snooling -snools -snoop -snooped -snooper -snoopers -snoopier -snoopiest -snoopily -snooping -snoops -snoopy -snoot -snooted -snootier -snootiest -snootily -snootiness -snootinesses -snooting -snoots -snooty -snooze -snoozed -snoozer -snoozers -snoozes -snoozier -snooziest -snoozing -snoozle -snoozled -snoozles -snoozling -snoozy -snore -snored -snorer -snorers -snores -snoring -snorkel -snorkeled -snorkeler -snorkelers -snorkeling -snorkels -snort -snorted -snorter -snorters -snorting -snorts -snot -snots -snottier -snottiest -snottily -snottiness -snottinesses -snotty -snout -snouted -snoutier -snoutiest -snouting -snoutish -snouts -snouty -snow -snowball -snowballed -snowballing -snowballs -snowbank -snowbanks -snowbell -snowbells -snowbelt -snowbelts -snowberries -snowberry -snowbird -snowbirds -snowblower -snowblowers -snowboard -snowboarder -snowboarders -snowboarding -snowboardings -snowboards -snowbound -snowbrush -snowbrushes -snowbush -snowbushes -snowcap -snowcapped -snowcaps -snowdrift -snowdrifts -snowdrop -snowdrops -snowed -snowfall -snowfalls -snowfield -snowfields -snowflake -snowflakes -snowier -snowiest -snowily -snowiness -snowinesses -snowing -snowland -snowlands -snowless -snowlike -snowmaker -snowmakers -snowmaking -snowman -snowmelt -snowmelts -snowmen -snowmobile -snowmobiler -snowmobilers -snowmobiles -snowmobiling -snowmobilings -snowmobilist -snowmobilists -snowmold -snowmolds -snowpack -snowpacks -snowplow -snowplowed -snowplowing -snowplows -snows -snowscape -snowscapes -snowshed -snowsheds -snowshoe -snowshoed -snowshoeing -snowshoer -snowshoers -snowshoes -snowslide -snowslides -snowstorm -snowstorms -snowsuit -snowsuits -snowy -snub -snubbed -snubber -snubbers -snubbier -snubbiest -snubbiness -snubbinesses -snubbing -snubby -snubness -snubnesses -snubs -snuck -snuff -snuffbox -snuffboxes -snuffed -snuffer -snuffers -snuffier -snuffiest -snuffily -snuffing -snuffle -snuffled -snuffler -snufflers -snuffles -snufflier -snuffliest -snuffling -snuffly -snuffs -snuffy -snug -snugged -snugger -snuggeries -snuggery -snuggest -snuggies -snugging -snuggle -snuggled -snuggles -snuggling -snugly -snugness -snugnesses -snugs -snye -snyes -so -soak -soakage -soakages -soaked -soaker -soakers -soaking -soaks -soap -soapbark -soapbarks -soapberries -soapberry -soapbox -soapboxes -soaped -soaper -soapers -soapier -soapiest -soapily -soapiness -soapinesses -soaping -soapless -soaplike -soaps -soapstone -soapstones -soapsuds -soapwort -soapworts -soapy -soar -soared -soarer -soarers -soaring -soarings -soars -soave -soaves -sob -sobbed -sobber -sobbers -sobbing -sobeit -sober -sobered -soberer -soberest -sobering -soberize -soberized -soberizes -soberizing -soberly -soberness -sobernesses -sobers -sobersided -sobersidedness -sobersidednesses -sobersides -sobful -sobrieties -sobriety -sobriquet -sobriquets -sobs -socage -socager -socagers -socages -soccage -soccages -soccer -soccers -sociabilities -sociability -sociable -sociableness -sociablenesses -sociables -sociably -social -socialise -socialised -socialises -socialising -socialism -socialisms -socialist -socialistic -socialistically -socialists -socialite -socialites -socialities -sociality -socialization -socializations -socialize -socialized -socializer -socializers -socializes -socializing -socially -socials -societal -societally -societies -society -sociobiological -sociobiologies -sociobiologist -sociobiologists -sociobiology -sociocultural -socioculturally -socioeconomic -socioeconomically -sociogram -sociograms -sociohistorical -sociolinguist -sociolinguistic -sociolinguistics -sociolinguists -sociologese -sociologeses -sociologic -sociological -sociologically -sociologies -sociologist -sociologists -sociology -sociometric -sociometries -sociometry -sociopath -sociopathic -sociopathies -sociopaths -sociopathy -sociopolitical -sociopsychological -socioreligious -sociosexual -sock -sockdolager -sockdolagers -sockdologer -sockdologers -socked -socket -socketed -socketing -sockets -sockeye -sockeyes -socking -sockless -sockman -sockmen -socko -socks -socle -socles -socman -socmen -sod -soda -sodaless -sodalist -sodalists -sodalite -sodalites -sodalities -sodality -sodamide -sodamides -sodas -sodbuster -sodbusters -sodded -sodden -soddened -soddening -soddenly -soddenness -soddennesses -soddens -soddies -sodding -soddy -sodic -sodium -sodiums -sodom -sodomies -sodomist -sodomists -sodomite -sodomites -sodomitic -sodomitical -sodomize -sodomized -sodomizes -sodomizing -sodoms -sodomy -sods -soever -sofa -sofar -sofars -sofas -soffit -soffits -soft -softa -softas -softback -softbacks -softball -softballer -softballers -softballs -softbound -softcover -softcovers -soften -softened -softener -softeners -softening -softens -softer -softest -softhead -softheaded -softheadedly -softheadedness -softheadednesses -softheads -softhearted -softheartedly -softheartedness -softheartednesses -softie -softies -softish -softly -softness -softnesses -softs -softshell -softshells -software -softwares -softwood -softwoods -softy -sogged -soggier -soggiest -soggily -sogginess -sogginesses -soggy -soigne -soignee -soil -soilage -soilages -soilborne -soiled -soiling -soilless -soils -soilure -soilures -soiree -soirees -soja -sojas -sojourn -sojourned -sojourner -sojourners -sojourning -sojourns -soke -sokeman -sokemen -sokes -sokol -sokols -sol -sola -solace -solaced -solacement -solacements -solacer -solacers -solaces -solacing -solan -solanaceous -soland -solander -solanders -solands -solanin -solanine -solanines -solanins -solano -solanos -solans -solanum -solanums -solar -solaria -solarise -solarised -solarises -solarising -solarism -solarisms -solarium -solariums -solarization -solarizations -solarize -solarized -solarizes -solarizing -solate -solated -solates -solatia -solating -solation -solations -solatium -sold -soldan -soldans -solder -solderabilities -solderability -soldered -solderer -solderers -soldering -solders -soldi -soldier -soldiered -soldieries -soldiering -soldierings -soldierly -soldiers -soldiership -soldierships -soldiery -soldo -sole -solecise -solecised -solecises -solecising -solecism -solecisms -solecist -solecistic -solecists -solecize -solecized -solecizes -solecizing -soled -solei -soleless -solely -solemn -solemner -solemnest -solemnified -solemnifies -solemnify -solemnifying -solemnities -solemnity -solemnization -solemnizations -solemnize -solemnized -solemnizes -solemnizing -solemnly -solemnness -solemnnesses -soleness -solenesses -solenoid -solenoidal -solenoids -soleplate -soleplates -soleret -solerets -soles -soleus -soleuses -solfatara -solfataras -solfege -solfeges -solfeggi -solfeggio -solfeggios -solgel -soli -solicit -solicitant -solicitants -solicitation -solicitations -solicited -soliciting -solicitor -solicitors -solicitorship -solicitorships -solicitous -solicitously -solicitousness -solicitousnesses -solicits -solicitude -solicitudes -solid -solidago -solidagos -solidarism -solidarisms -solidarist -solidaristic -solidarists -solidarities -solidarity -solidary -solider -solidest -solidi -solidification -solidifications -solidified -solidifies -solidify -solidifying -solidities -solidity -solidly -solidness -solidnesses -solids -solidus -solifluction -solifluctions -soliloquies -soliloquise -soliloquised -soliloquises -soliloquising -soliloquist -soliloquists -soliloquize -soliloquized -soliloquizer -soliloquizers -soliloquizes -soliloquizing -soliloquy -soling -solion -solions -solipsism -solipsisms -solipsist -solipsistic -solipsistically -solipsists -soliquid -soliquids -solitaire -solitaires -solitaries -solitarily -solitariness -solitarinesses -solitary -soliton -solitons -solitude -solitudes -solitudinarian -solitudinarians -solleret -sollerets -solmization -solmizations -solo -soloed -soloing -soloist -soloists -solon -solonchak -solonchaks -solonets -solonetses -solonetz -solonetzes -solonetzic -solons -solos -sols -solstice -solstices -solstitial -solubilise -solubilised -solubilises -solubilising -solubilities -solubility -solubilization -solubilizations -solubilize -solubilized -solubilizes -solubilizing -soluble -solubles -solubly -solum -solums -solus -solute -solutes -solution -solutions -solvabilities -solvability -solvable -solvate -solvated -solvates -solvating -solvation -solvations -solve -solved -solvencies -solvency -solvent -solventless -solvently -solvents -solver -solvers -solves -solving -solvolyses -solvolysis -solvolytic -som -soma -somas -somata -somatic -somatically -somatological -somatologies -somatology -somatomedin -somatomedins -somatopleure -somatopleures -somatosensory -somatostatin -somatostatins -somatotrophin -somatotrophins -somatotropin -somatotropins -somatotype -somatotypes -somber -somberly -somberness -sombernesses -sombre -sombrely -sombrero -sombreros -sombrous -some -somebodies -somebody -someday -somedeal -somehow -someone -someones -someplace -somersault -somersaulted -somersaulting -somersaults -somerset -somerseted -somerseting -somersets -somersetted -somersetting -something -sometime -sometimes -someway -someways -somewhat -somewhats -somewhen -somewhere -somewheres -somewhither -somewise -somital -somite -somites -somitic -sommelier -sommeliers -somnambulant -somnambulate -somnambulated -somnambulates -somnambulating -somnambulation -somnambulations -somnambulism -somnambulisms -somnambulist -somnambulistic -somnambulistically -somnambulists -somnifacient -somnifacients -somniferous -somnolence -somnolences -somnolent -somnolently -son -sonance -sonances -sonant -sonantal -sonantic -sonants -sonar -sonarman -sonarmen -sonars -sonata -sonatas -sonatina -sonatinas -sonatine -sonde -sonder -sonders -sondes -sone -sones -song -songbird -songbirds -songbook -songbooks -songfest -songfests -songful -songfully -songfulness -songfulnesses -songless -songlessly -songlike -songs -songsmith -songsmiths -songster -songsters -songstress -songstresses -songwriter -songwriters -songwriting -songwritings -sonhood -sonhoods -sonic -sonically -sonicate -sonicated -sonicates -sonicating -sonication -sonications -sonics -sonless -sonlike -sonly -sonnet -sonneted -sonneteer -sonneteering -sonneteerings -sonneteers -sonneting -sonnets -sonnetted -sonnetting -sonnies -sonny -sonobuoy -sonobuoys -sonogram -sonograms -sonographer -sonographers -sonographies -sonography -sonorant -sonorants -sonorities -sonority -sonorous -sonorously -sonorousness -sonorousnesses -sonovox -sonovoxes -sons -sonship -sonships -sonsie -sonsier -sonsiest -sonsy -soochong -soochongs -sooey -sook -sooks -soon -sooner -sooners -soonest -soot -sooted -sooth -soothe -soothed -soother -soothers -soothes -soothest -soothfast -soothing -soothingly -soothingness -soothingnesses -soothly -sooths -soothsaid -soothsay -soothsayer -soothsayers -soothsaying -soothsayings -soothsays -sootier -sootiest -sootily -sootiness -sootinesses -sooting -soots -sooty -sop -sopaipilla -sopaipillas -sopapilla -sopapillas -soph -sophies -sophism -sophisms -sophist -sophistic -sophistical -sophistically -sophisticate -sophisticated -sophisticatedly -sophisticates -sophisticating -sophistication -sophistications -sophistries -sophistry -sophists -sophomore -sophomores -sophomoric -sophs -sophy -sopite -sopited -sopites -sopiting -sopor -soporiferous -soporiferousness -soporiferousnesses -soporific -soporifics -sopors -sopped -soppier -soppiest -soppiness -soppinesses -sopping -soppy -soprani -sopranino -sopraninos -soprano -sopranos -sops -sora -soras -sorb -sorbabilities -sorbability -sorbable -sorbate -sorbates -sorbed -sorbent -sorbents -sorbet -sorbets -sorbic -sorbing -sorbitol -sorbitols -sorbose -sorboses -sorbs -sorcerer -sorcerers -sorceress -sorceresses -sorceries -sorcerous -sorcery -sord -sordid -sordidly -sordidness -sordidnesses -sordine -sordines -sordini -sordino -sordor -sordors -sords -sore -sorehead -soreheaded -soreheads -sorel -sorels -sorely -soreness -sorenesses -sorer -sores -sorest -sorgho -sorghos -sorghum -sorghums -sorgo -sorgos -sori -soricine -soring -sorings -sorites -soritic -sorn -sorned -sorner -sorners -sorning -sorns -soroche -soroches -sororal -sororate -sororates -sororities -sorority -soroses -sorosis -sorosises -sorption -sorptions -sorptive -sorrel -sorrels -sorrier -sorriest -sorrily -sorriness -sorrinesses -sorrow -sorrowed -sorrower -sorrowers -sorrowful -sorrowfully -sorrowfulness -sorrowfulnesses -sorrowing -sorrows -sorry -sort -sortable -sortably -sorted -sorter -sorters -sortie -sortied -sortieing -sorties -sortilege -sortileges -sorting -sortition -sortitions -sorts -sorus -sos -sostenuti -sostenuto -sostenutos -sot -soteriological -soteriologies -soteriology -soth -soths -sotol -sotols -sots -sotted -sottish -sottishly -sottishness -sottishnesses -sou -souari -souaris -soubise -soubises -soubrette -soubrettes -soubriquet -soubriquets -soucar -soucars -souchong -souchongs -soudan -soudans -souffle -souffled -souffleed -souffles -sough -soughed -soughing -soughs -sought -souk -souks -soul -souled -soulful -soulfully -soulfulness -soulfulnesses -soulless -soullessly -soullessness -soullessnesses -soullike -souls -sound -soundable -soundalike -soundalikes -soundboard -soundboards -soundbox -soundboxes -sounded -sounder -sounders -soundest -sounding -soundingly -soundings -soundless -soundlessly -soundly -soundman -soundmen -soundness -soundnesses -soundproof -soundproofed -soundproofing -soundproofs -sounds -soundstage -soundstages -soundtrack -soundtracks -soup -soupcon -soupcons -souped -soupier -soupiest -souping -soups -soupspoon -soupspoons -soupy -sour -sourball -sourballs -source -sourcebook -sourcebooks -sourced -sourceless -sources -sourcing -sourdine -sourdines -sourdough -sourdoughs -soured -sourer -sourest -souring -sourish -sourly -sourness -sournesses -sourpuss -sourpusses -sours -soursop -soursops -sourwood -sourwoods -sous -sousaphone -sousaphones -souse -soused -souses -sousing -soutache -soutaches -soutane -soutanes -souter -souters -south -southbound -southeast -southeaster -southeasterly -southeastern -southeasternmost -southeasters -southeasts -southeastward -southeastwards -southed -souther -southerlies -southerly -southern -southerner -southerners -southernmost -southernness -southernnesses -southerns -southernwood -southernwoods -southers -southing -southings -southland -southlands -southpaw -southpaws -southron -southrons -souths -southward -southwards -southwest -southwester -southwesterly -southwestern -southwesternmost -southwesters -southwests -southwestward -southwestwards -souvenir -souvenirs -souvlaki -souvlakia -souvlakias -souvlakis -sovereign -sovereignly -sovereigns -sovereignties -sovereignty -soviet -sovietism -sovietisms -sovietization -sovietizations -sovietize -sovietized -sovietizes -sovietizing -soviets -sovkhoz -sovkhozes -sovkhozy -sovran -sovranly -sovrans -sovranties -sovranty -sow -sowable -sowans -sowar -sowars -sowbellies -sowbelly -sowbread -sowbreads -sowcar -sowcars -sowed -sowens -sower -sowers -sowing -sown -sows -sox -soy -soya -soyas -soybean -soybeans -soymilk -soymilks -soys -soyuz -soyuzes -sozin -sozine -sozines -sozins -sozzled -spa -space -spaceband -spacebands -spacecraft -spacecrafts -spaced -spaceflight -spaceflights -spaceless -spaceman -spacemen -spaceport -spaceports -spacer -spacers -spaces -spaceship -spaceships -spacesuit -spacesuits -spacewalk -spacewalked -spacewalker -spacewalkers -spacewalking -spacewalks -spaceward -spacey -spacial -spacier -spaciest -spacing -spacings -spacious -spaciously -spaciousness -spaciousnesses -spackle -spackled -spackles -spackling -spacy -spade -spaded -spadefish -spadefishes -spadeful -spadefuls -spader -spaders -spades -spadework -spadeworks -spadices -spadille -spadilles -spading -spadix -spadixes -spado -spadones -spae -spaed -spaeing -spaeings -spaes -spaetzle -spaetzles -spaghetti -spaghettilike -spaghettini -spaghettinis -spaghettis -spagyric -spagyrics -spahee -spahees -spahi -spahis -spail -spails -spait -spaits -spake -spale -spales -spall -spallable -spallation -spallations -spalled -spaller -spallers -spalling -spalls -spalpeen -spalpeens -spam -spammed -spammer -spammers -spamming -spams -span -spanakopita -spanakopitas -spancel -spanceled -spanceling -spancelled -spancelling -spancels -spandex -spandexes -spandrel -spandrels -spandril -spandrils -spang -spangle -spangled -spangles -spanglier -spangliest -spangling -spangly -spaniel -spaniels -spank -spanked -spanker -spankers -spanking -spankings -spanks -spanless -spanned -spanner -spanners -spanning -spanokopita -spanokopitas -spans -spanworm -spanworms -spar -sparable -sparables -spare -spareable -spared -sparely -spareness -sparenesses -sparer -sparerib -spareribs -sparers -spares -sparest -sparge -sparged -sparger -spargers -sparges -sparging -sparid -sparids -sparing -sparingly -spark -sparked -sparker -sparkers -sparkier -sparkiest -sparkily -sparking -sparkish -sparkle -sparkled -sparkler -sparklers -sparkles -sparklier -sparkliest -sparkling -sparkly -sparkplug -sparkplugged -sparkplugging -sparkplugs -sparks -sparky -sparlike -sparling -sparlings -sparoid -sparoids -sparred -sparrier -sparriest -sparring -sparrow -sparrowlike -sparrows -sparry -spars -sparse -sparsely -sparseness -sparsenesses -sparser -sparsest -sparsities -sparsity -spartan -sparteine -sparteines -spas -spasm -spasmodic -spasmodically -spasmolytic -spasmolytics -spasms -spastic -spastically -spasticities -spasticity -spastics -spat -spate -spates -spathal -spathe -spathed -spathes -spathic -spathose -spathulate -spatial -spatialities -spatiality -spatially -spatiotemporal -spatiotemporally -spats -spatted -spatter -spatterdock -spatterdocks -spattered -spattering -spatters -spatting -spatula -spatular -spatulas -spatulate -spatzle -spatzles -spavie -spavies -spaviet -spavin -spavined -spavins -spawn -spawned -spawner -spawners -spawning -spawns -spay -spayed -spaying -spays -spaz -spazzes -speak -speakable -speakeasies -speakeasy -speaker -speakerphone -speakerphones -speakers -speakership -speakerships -speaking -speakings -speaks -spean -speaned -speaning -speans -spear -speared -spearer -spearers -spearfish -spearfished -spearfishes -spearfishing -speargun -spearguns -spearhead -spearheaded -spearheading -spearheads -spearing -spearman -spearmen -spearmint -spearmints -spears -spearwort -spearworts -spec -specced -speccing -special -specialer -specialest -specialisation -specialisations -specialise -specialised -specialises -specialising -specialism -specialisms -specialist -specialistic -specialists -specialities -speciality -specialization -specializations -specialize -specialized -specializes -specializing -specially -specialness -specialnesses -specials -specialties -specialty -speciate -speciated -speciates -speciating -speciation -speciational -speciations -specie -species -speciesism -speciesisms -specifiable -specific -specifically -specification -specifications -specificities -specificity -specifics -specified -specifier -specifiers -specifies -specify -specifying -specimen -specimens -speciosities -speciosity -specious -speciously -speciousness -speciousnesses -speck -specked -specking -speckle -speckled -speckles -speckling -specks -specs -spectacle -spectacled -spectacles -spectacular -spectacularly -spectaculars -spectate -spectated -spectates -spectating -spectator -spectatorial -spectators -spectatorship -spectatorships -specter -specters -spectinomycin -spectinomycins -spectra -spectral -spectrally -spectre -spectres -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 -spectrum -spectrums -specula -specular -specularities -specularity -specularly -speculate -speculated -speculates -speculating -speculation -speculations -speculative -speculatively -speculator -speculators -speculum -speculums -sped -speech -speeches -speechified -speechifies -speechify -speechifying -speechless -speechlessly -speechlessness -speechlessnesses -speechwriter -speechwriters -speed -speedball -speedballed -speedballing -speedballs -speedboat -speedboating -speedboatings -speedboats -speeded -speeder -speeders -speedier -speediest -speedily -speediness -speedinesses -speeding -speedings -speedo -speedometer -speedometers -speedos -speeds -speedster -speedsters -speedup -speedups -speedway -speedways -speedwell -speedwells -speedy -speel -speeled -speeling -speels -speer -speered -speering -speerings -speers -speil -speiled -speiling -speils -speir -speired -speiring -speirs -speise -speises -speiss -speisses -spelaean -spelean -speleological -speleologies -speleologist -speleologists -speleology -spell -spellbind -spellbinder -spellbinders -spellbinding -spellbindingly -spellbinds -spellbound -spelled -speller -spellers -spelling -spellings -spells -spelt -spelter -spelters -spelts -speltz -speltzes -spelunk -spelunked -spelunker -spelunkers -spelunking -spelunkings -spelunks -spence -spencer -spencers -spences -spend -spendable -spender -spenders -spending -spends -spendthrift -spendthrifts -spense -spenses -spent -sperm -spermaceti -spermacetis -spermagonia -spermagonium -spermaries -spermary -spermatheca -spermathecae -spermatia -spermatial -spermatic -spermatid -spermatids -spermatium -spermatocyte -spermatocytes -spermatogeneses -spermatogenesis -spermatogenic -spermatogonia -spermatogonial -spermatogonium -spermatophore -spermatophores -spermatophyte -spermatophytes -spermatophytic -spermatozoa -spermatozoal -spermatozoan -spermatozoans -spermatozoid -spermatozoids -spermatozoon -spermic -spermicidal -spermicide -spermicides -spermine -spermines -spermiogeneses -spermiogenesis -spermophile -spermophiles -spermous -sperms -sperrylite -sperrylites -spessartine -spessartines -spessartite -spessartites -spew -spewed -spewer -spewers -spewing -spews -sphagnous -sphagnum -sphagnums -sphalerite -sphalerites -sphene -sphenes -sphenic -sphenodon -sphenodons -sphenodont -sphenoid -sphenoidal -sphenoids -sphenopsid -sphenopsids -spheral -sphere -sphered -spheres -spheric -spherical -spherically -sphericities -sphericity -spherics -spherier -spheriest -sphering -spheroid -spheroidal -spheroidally -spheroids -spherometer -spherometers -spheroplast -spheroplasts -spherule -spherules -spherulite -spherulites -spherulitic -sphery -sphincter -sphincteric -sphincters -sphinges -sphingid -sphingids -sphingosine -sphingosines -sphinx -sphinxes -sphinxlike -sphygmic -sphygmograph -sphygmographs -sphygmomanometer -sphygmomanometers -sphygmomanometries -sphygmomanometry -sphygmus -sphygmuses -spic -spica -spicae -spicas -spicate -spicated -spiccato -spiccatos -spice -spicebush -spicebushes -spiced -spiceless -spicer -spiceries -spicers -spicery -spices -spicey -spicier -spiciest -spicily -spiciness -spicinesses -spicing -spick -spicks -spics -spicula -spiculae -spicular -spiculation -spiculations -spicule -spicules -spiculum -spicy -spider -spiderier -spideriest -spiderish -spiderlike -spiders -spiderweb -spiderwebs -spiderwort -spiderworts -spidery -spied -spiegel -spiegeleisen -spiegeleisens -spiegels -spiel -spieled -spieler -spielers -spieling -spiels -spier -spiered -spiering -spiers -spies -spiff -spiffed -spiffier -spiffiest -spiffily -spiffiness -spiffinesses -spiffing -spiffs -spiffy -spigot -spigots -spik -spike -spiked -spikelet -spikelets -spikelike -spikenard -spikenards -spiker -spikers -spikes -spikey -spikier -spikiest -spikily -spikiness -spikinesses -spiking -spiks -spiky -spile -spiled -spiles -spilikin -spilikins -spiling -spilings -spill -spillable -spillage -spillages -spilled -spiller -spillers -spillikin -spillikins -spilling -spillover -spillovers -spills -spillway -spillways -spilt -spilth -spilths -spin -spinach -spinaches -spinachlike -spinachy -spinage -spinages -spinal -spinally -spinals -spinate -spindle -spindled -spindler -spindlers -spindles -spindlier -spindliest -spindling -spindly -spindrift -spindrifts -spine -spined -spinel -spineless -spinelessly -spinelessness -spinelessnesses -spinelike -spinelle -spinelles -spinels -spines -spinet -spinets -spinier -spiniest -spinifex -spinifexes -spininess -spininesses -spinless -spinnaker -spinnakers -spinner -spinneret -spinnerets -spinnerette -spinnerettes -spinneries -spinners -spinnery -spinney -spinneys -spinnies -spinning -spinnings -spinny -spinoff -spinoffs -spinor -spinors -spinose -spinosities -spinosity -spinous -spinout -spinouts -spins -spinster -spinsterhood -spinsterhoods -spinsterish -spinsterly -spinsters -spinthariscope -spinthariscopes -spinto -spintos -spinula -spinulae -spinule -spinules -spinulose -spiny -spiracle -spiracles -spiracular -spiraea -spiraeas -spiral -spiraled -spiraling -spiralled -spiralling -spirally -spirals -spirant -spirants -spire -spirea -spireas -spired -spirem -spireme -spiremes -spirems -spires -spirier -spiriest -spirilla -spirillum -spiring -spirit -spirited -spiritedly -spiritedness -spiritednesses -spiriting -spiritism -spiritisms -spiritist -spiritistic -spiritists -spiritless -spiritlessly -spiritlessness -spiritlessnesses -spiritoso -spiritous -spirits -spiritual -spiritualism -spiritualisms -spiritualist -spiritualistic -spiritualists -spiritualities -spirituality -spiritualization -spiritualizations -spiritualize -spiritualized -spiritualizes -spiritualizing -spiritually -spiritualness -spiritualnesses -spirituals -spiritualties -spiritualty -spirituel -spirituelle -spirituous -spirochaete -spirochaetes -spirochetal -spirochete -spirochetes -spirochetoses -spirochetosis -spirogyra -spirogyras -spiroid -spirometer -spirometers -spirometric -spirometries -spirometry -spirt -spirted -spirting -spirts -spirula -spirulae -spirulas -spiry -spit -spital -spitals -spitball -spitballs -spite -spited -spiteful -spitefuller -spitefullest -spitefully -spitefulness -spitefulnesses -spites -spitfire -spitfires -spiting -spits -spitted -spitter -spitters -spitting -spittle -spittlebug -spittlebugs -spittles -spittoon -spittoons -spitz -spitzes -spiv -spivs -splake -splakes -splanchnic -splash -splashboard -splashboards -splashdown -splashdowns -splashed -splasher -splashers -splashes -splashier -splashiest -splashily -splashiness -splashinesses -splashing -splashy -splat -splats -splatted -splatter -splattered -splattering -splatters -splatting -splay -splayed -splayfeet -splayfoot -splayfooted -splaying -splays -spleen -spleenful -spleenier -spleeniest -spleens -spleenwort -spleenworts -spleeny -splendent -splendid -splendider -splendidest -splendidly -splendidness -splendidnesses -splendiferous -splendiferously -splendiferousness -splendiferousnesses -splendor -splendorous -splendors -splendour -splendours -splendrous -splenectomies -splenectomize -splenectomized -splenectomizes -splenectomizing -splenectomy -splenetic -splenetically -splenetics -splenia -splenial -splenic -splenii -splenium -splenius -splenomegalies -splenomegaly -splent -splents -spleuchan -spleuchans -splice -spliced -splicer -splicers -splices -splicing -spliff -spliffs -spline -splined -splines -splining -splint -splinted -splinter -splintered -splintering -splinters -splintery -splinting -splints -split -splits -splitter -splitters -splitting -splodge -splodged -splodges -splodging -splore -splores -splosh -sploshed -sploshes -sploshing -splotch -splotched -splotches -splotchier -splotchiest -splotching -splotchy -splurge -splurged -splurger -splurgers -splurges -splurgier -splurgiest -splurging -splurgy -splutter -spluttered -splutterer -splutterers -spluttering -splutters -spluttery -spode -spodes -spodumene -spodumenes -spoil -spoilable -spoilage -spoilages -spoiled -spoiler -spoilers -spoiling -spoils -spoilsman -spoilsmen -spoilsport -spoilsports -spoilt -spoke -spoked -spoken -spokes -spokeshave -spokeshaves -spokesman -spokesmanship -spokesmanships -spokesmen -spokespeople -spokesperson -spokespersons -spokeswoman -spokeswomen -spoking -spoliate -spoliated -spoliates -spoliating -spoliation -spoliations -spoliator -spoliators -spondaic -spondaics -spondee -spondees -spondylitis -spondylitises -sponge -sponged -sponger -spongers -sponges -spongeware -spongewares -spongier -spongiest -spongily -spongin -sponginess -sponginesses -sponging -spongins -spongy -sponsal -sponsion -sponsions -sponson -sponsons -sponsor -sponsored -sponsorial -sponsoring -sponsors -sponsorship -sponsorships -spontaneities -spontaneity -spontaneous -spontaneously -spontaneousness -spontaneousnesses -spontoon -spontoons -spoof -spoofed -spoofer -spooferies -spoofers -spoofery -spoofing -spoofs -spoofy -spook -spooked -spookeries -spookery -spookier -spookiest -spookily -spookiness -spookinesses -spooking -spookish -spooks -spooky -spool -spooled -spooling -spoolings -spools -spoon -spoonbill -spoonbills -spooned -spoonerism -spoonerisms -spooney -spooneys -spoonful -spoonfuls -spoonier -spoonies -spooniest -spoonily -spooning -spoons -spoonsful -spoony -spoor -spoored -spooring -spoors -sporadic -sporadically -sporal -sporangia -sporangial -sporangiophore -sporangiophores -sporangium -spore -spored -spores -sporicidal -sporicide -sporicides -sporing -sporocarp -sporocarps -sporocyst -sporocysts -sporogeneses -sporogenesis -sporogenic -sporogenous -sporogonia -sporogonic -sporogonies -sporogonium -sporogony -sporoid -sporophore -sporophores -sporophyll -sporophylls -sporophyte -sporophytes -sporophytic -sporopollenin -sporopollenins -sporotrichoses -sporotrichosis -sporozoa -sporozoan -sporozoans -sporozoite -sporozoites -sporozoon -sporran -sporrans -sport -sported -sporter -sporters -sportfisherman -sportfishermen -sportfishing -sportfishings -sportful -sportfully -sportfulness -sportfulnesses -sportier -sportiest -sportif -sportily -sportiness -sportinesses -sporting -sportingly -sportive -sportively -sportiveness -sportivenesses -sports -sportscast -sportscaster -sportscasters -sportscasting -sportscastings -sportscasts -sportsman -sportsmanlike -sportsmanly -sportsmanship -sportsmanships -sportsmen -sportswear -sportswoman -sportswomen -sportswriter -sportswriters -sportswriting -sportswritings -sporty -sporular -sporulate -sporulated -sporulates -sporulating -sporulation -sporulations -sporulative -sporule -sporules -spot -spotless -spotlessly -spotlessness -spotlessnesses -spotlight -spotlighted -spotlighting -spotlights -spotlit -spots -spottable -spotted -spotter -spotters -spottier -spottiest -spottily -spottiness -spottinesses -spotting -spotty -spousal -spousals -spouse -spoused -spouses -spousing -spout -spouted -spouter -spouters -spouting -spouts -sprachgefuhl -sprachgefuhls -spraddle -spraddled -spraddles -spraddling -sprag -sprags -sprain -sprained -spraining -sprains -sprang -sprangs -sprat -sprats -sprattle -sprattled -sprattles -sprattling -sprawl -sprawled -sprawler -sprawlers -sprawlier -sprawliest -sprawling -sprawls -sprawly -spray -sprayed -sprayer -sprayers -spraying -sprays -spread -spreadabilities -spreadability -spreadable -spreader -spreaders -spreading -spreads -spreadsheet -spreadsheets -spree -sprees -sprent -sprier -spriest -sprig -sprigged -sprigger -spriggers -spriggier -spriggiest -sprigging -spriggy -spright -sprightful -sprightfully -sprightfulness -sprightfulnesses -sprightlier -sprightliest -sprightliness -sprightlinesses -sprightly -sprights -sprigs -spring -springal -springald -springalds -springals -springboard -springboards -springbok -springboks -springe -springed -springeing -springer -springers -springes -springhead -springheads -springhouse -springhouses -springier -springiest -springily -springiness -springinesses -springing -springings -springlike -springs -springtail -springtails -springtide -springtides -springtime -springtimes -springwater -springwaters -springwood -springwoods -springy -sprinkle -sprinkled -sprinkler -sprinklered -sprinklers -sprinkles -sprinkling -sprinklings -sprint -sprinted -sprinter -sprinters -sprinting -sprints -sprit -sprite -sprites -sprits -spritsail -spritsails -spritz -spritzed -spritzer -spritzers -spritzes -spritzing -sprocket -sprockets -sprout -sprouted -sprouting -sprouts -spruce -spruced -sprucely -spruceness -sprucenesses -sprucer -spruces -sprucest -sprucier -spruciest -sprucing -sprucy -sprue -sprues -sprug -sprugs -sprung -spry -spryer -spryest -spryly -spryness -sprynesses -spud -spudded -spudder -spudders -spudding -spuds -spue -spued -spues -spuing -spume -spumed -spumes -spumier -spumiest -spuming -spumone -spumones -spumoni -spumonis -spumous -spumy -spun -spunbonded -spunk -spunked -spunkie -spunkier -spunkies -spunkiest -spunkily -spunkiness -spunkinesses -spunking -spunks -spunky -spur -spurgall -spurgalled -spurgalling -spurgalls -spurge -spurges -spurious -spuriously -spuriousness -spuriousnesses -spurn -spurned -spurner -spurners -spurning -spurns -spurred -spurrer -spurrers -spurrey -spurreys -spurrier -spurriers -spurries -spurring -spurry -spurs -spurt -spurted -spurting -spurtle -spurtles -spurts -sputa -sputnik -sputniks -sputter -sputtered -sputterer -sputterers -sputtering -sputters -sputum -spy -spyglass -spyglasses -spying -spymaster -spymasters -squab -squabbier -squabbiest -squabble -squabbled -squabbler -squabblers -squabbles -squabbling -squabby -squabs -squad -squadded -squadding -squadron -squadroned -squadroning -squadrons -squads -squalene -squalenes -squalid -squalider -squalidest -squalidly -squalidness -squalidnesses -squall -squalled -squaller -squallers -squallier -squalliest -squalling -squalls -squally -squalor -squalors -squama -squamae -squamate -squamation -squamations -squamosal -squamosals -squamose -squamous -squamulose -squander -squandered -squanderer -squanderers -squandering -squanders -square -squared -squarely -squareness -squarenesses -squarer -squarers -squares -squarest -squaring -squarish -squarishly -squarishness -squarishnesses -squash -squashed -squasher -squashers -squashes -squashier -squashiest -squashily -squashiness -squashinesses -squashing -squashy -squat -squatly -squatness -squatnesses -squats -squatted -squatter -squattered -squattering -squatters -squattest -squattier -squattiest -squatting -squatty -squaw -squawfish -squawfishes -squawk -squawked -squawker -squawkers -squawking -squawks -squawroot -squawroots -squaws -squeak -squeaked -squeaker -squeakers -squeakier -squeakiest -squeaking -squeaks -squeaky -squeal -squealed -squealer -squealers -squealing -squeals -squeamish -squeamishly -squeamishness -squeamishnesses -squeegee -squeegeed -squeegeeing -squeegees -squeezabilities -squeezability -squeezable -squeeze -squeezed -squeezer -squeezers -squeezes -squeezing -squeg -squegged -squegging -squegs -squelch -squelched -squelcher -squelchers -squelches -squelchier -squelchiest -squelching -squelchy -squeteague -squeteagues -squib -squibbed -squibbing -squibs -squid -squidded -squidding -squids -squiffed -squiffier -squiffiest -squiffy -squiggle -squiggled -squiggles -squigglier -squiggliest -squiggling -squiggly -squilgee -squilgeed -squilgeeing -squilgees -squill -squilla -squillae -squillas -squills -squinch -squinched -squinches -squinching -squinnied -squinnier -squinnies -squinniest -squinny -squinnying -squint -squinted -squinter -squinters -squintest -squintier -squintiest -squinting -squintingly -squints -squinty -squirarchies -squirarchy -squire -squirearchies -squirearchy -squired -squireen -squireens -squires -squiring -squirish -squirm -squirmed -squirmer -squirmers -squirmier -squirmiest -squirming -squirms -squirmy -squirrel -squirreled -squirreling -squirrelled -squirrelling -squirrelly -squirrels -squirt -squirted -squirter -squirters -squirting -squirts -squish -squished -squishes -squishier -squishiest -squishiness -squishinesses -squishing -squishy -squoosh -squooshed -squooshes -squooshier -squooshiest -squooshing -squooshy -squush -squushed -squushes -squushier -squushiest -squushing -squushy -sraddha -sraddhas -sradha -sradhas -sri -sris -stab -stabbed -stabber -stabbers -stabbing -stabbings -stabile -stabiles -stabilities -stability -stabilization -stabilizations -stabilize -stabilized -stabilizer -stabilizers -stabilizes -stabilizing -stable -stabled -stableman -stablemate -stablemates -stablemen -stableness -stablenesses -stabler -stablers -stables -stablest -stabling -stablings -stablish -stablished -stablishes -stablishing -stablishment -stablishments -stably -stabs -staccati -staccato -staccatos -stack -stackable -stacked -stacker -stackers -stacking -stacks -stackup -stackups -stacte -stactes -staddle -staddles -stade -stades -stadia -stadias -stadium -stadiums -stadtholder -stadtholderate -stadtholderates -stadtholders -stadtholdership -stadtholderships -staff -staffed -staffer -staffers -staffing -staffs -stag -stage -stageable -stagecoach -stagecoaches -stagecraft -stagecrafts -staged -stageful -stagefuls -stagehand -stagehands -stagelike -stager -stagers -stages -stagestruck -stagey -stagflation -stagflationary -stagflations -staggard -staggards -staggart -staggarts -stagged -stagger -staggerbush -staggerbushes -staggered -staggerer -staggerers -staggering -staggeringly -staggers -staggery -staggie -staggier -staggies -staggiest -stagging -staggy -staghound -staghounds -stagier -stagiest -stagily -staginess -staginesses -staging -stagings -stagnancies -stagnancy -stagnant -stagnantly -stagnate -stagnated -stagnates -stagnating -stagnation -stagnations -stags -stagy -staid -staider -staidest -staidly -staidness -staidnesses -staig -staigs -stain -stainabilities -stainability -stainable -stained -stainer -stainers -staining -stainless -stainlesses -stainlessly -stainproof -stains -stair -staircase -staircases -stairs -stairway -stairways -stairwell -stairwells -staithe -staithes -stake -staked -stakeholder -stakeholders -stakeout -stakeouts -stakes -staking -stalactite -stalactites -stalactitic -stalag -stalagmite -stalagmites -stalagmitic -stalags -stale -staled -stalely -stalemate -stalemated -stalemates -stalemating -staleness -stalenesses -staler -stales -stalest -staling -stalk -stalked -stalker -stalkers -stalkier -stalkiest -stalkily -stalking -stalkless -stalks -stalky -stall -stalled -stallholder -stallholders -stalling -stallion -stallions -stalls -stalwart -stalwartly -stalwartness -stalwartnesses -stalwarts -stalworth -stalworths -stamen -stamens -stamina -staminal -staminas -staminate -staminodia -staminodium -stammel -stammels -stammer -stammered -stammerer -stammerers -stammering -stammers -stamp -stamped -stampede -stampeded -stampeder -stampeders -stampedes -stampeding -stamper -stampers -stamping -stampless -stamps -stance -stances -stanch -stanched -stancher -stanchers -stanches -stanchest -stanching -stanchion -stanchioned -stanchions -stanchly -stand -standard -standardbred -standardbreds -standardise -standardised -standardises -standardising -standardization -standardizations -standardize -standardized -standardizes -standardizing -standardless -standardly -standards -standaway -standby -standbys -standee -standees -stander -standers -standing -standings -standish -standishes -standoff -standoffish -standoffishly -standoffishness -standoffishnesses -standoffs -standout -standouts -standpat -standpatter -standpatters -standpattism -standpattisms -standpipe -standpipes -standpoint -standpoints -stands -standstill -standstills -standup -stane -staned -stanes -stang -stanged -stanging -stangs -stanhope -stanhopes -stanine -stanines -staning -stank -stanks -stannaries -stannary -stannic -stannite -stannites -stannous -stannum -stannums -stanza -stanzaed -stanzaic -stanzas -stapedectomies -stapedectomy -stapedes -stapedial -stapelia -stapelias -stapes -staph -staphs -staphylinid -staphylinids -staphylococcal -staphylococci -staphylococcic -staphylococcus -staple -stapled -stapler -staplers -staples -stapling -star -starboard -starboarded -starboarding -starboards -starburst -starbursts -starch -starched -starches -starchier -starchiest -starchily -starchiness -starchinesses -starching -starchy -stardom -stardoms -stardust -stardusts -stare -stared -starer -starers -stares -starets -starfish -starfishes -starflower -starflowers -starfruit -starfruits -stargaze -stargazed -stargazer -stargazers -stargazes -stargazing -stargazings -staring -stark -starker -starkers -starkest -starkly -starkness -starknesses -starless -starlet -starlets -starlight -starlights -starlike -starling -starlings -starlit -starnose -starnoses -starred -starrier -starriest -starring -starry -stars -starship -starships -starstruck -start -started -starter -starters -starting -startle -startled -startlement -startlements -startler -startlers -startles -startling -startlingly -starts -startsy -startup -startups -starvation -starvations -starve -starved -starveling -starvelings -starver -starvers -starves -starving -starwort -starworts -stases -stash -stashed -stashes -stashing -stasima -stasimon -stasis -stat -statable -statal -statant -state -stateable -statecraft -statecrafts -stated -statedly -statehood -statehoods -statehouse -statehouses -stateless -statelessness -statelessnesses -statelier -stateliest -stateliness -statelinesses -stately -statement -statements -stater -stateroom -staterooms -staters -states -stateside -statesman -statesmanlike -statesmanly -statesmanship -statesmanships -statesmen -statewide -static -statical -statically -statice -statices -staticky -statics -stating -station -stational -stationary -stationed -stationer -stationeries -stationers -stationery -stationing -stationmaster -stationmasters -stations -statism -statisms -statist -statistic -statistical -statistically -statistician -statisticians -statistics -statists -stative -statives -statoblast -statoblasts -statocyst -statocysts -statolith -statoliths -stator -stators -statoscope -statoscopes -stats -statuaries -statuary -statue -statued -statues -statuesque -statuesquely -statuette -statuettes -stature -statures -status -statuses -statusy -statutable -statute -statutes -statutorily -statutory -staumrel -staumrels -staunch -staunched -stauncher -staunches -staunchest -staunching -staunchly -staunchness -staunchnesses -staurolite -staurolites -staurolitic -stave -staved -staves -stavesacre -stavesacres -staving -staw -stay -stayed -stayer -stayers -staying -stays -staysail -staysails -stead -steaded -steadfast -steadfastly -steadfastness -steadfastnesses -steadied -steadier -steadiers -steadies -steadiest -steadily -steadiness -steadinesses -steading -steadings -steads -steady -steadying -steak -steakhouse -steakhouses -steaks -steal -stealable -stealage -stealages -stealer -stealers -stealing -stealings -steals -stealth -stealthier -stealthiest -stealthily -stealthiness -stealthinesses -stealths -stealthy -steam -steamboat -steamboats -steamed -steamer -steamered -steamering -steamers -steamfitter -steamfitters -steamier -steamiest -steamily -steaminess -steaminesses -steaming -steamroll -steamrolled -steamroller -steamrollered -steamrollering -steamrollers -steamrolling -steamrolls -steams -steamship -steamships -steamy -steapsin -steapsins -stearate -stearates -stearic -stearin -stearine -stearines -stearins -steatite -steatites -steatitic -steatopygia -steatopygias -steatopygic -steatopygous -steatorrhea -steatorrheas -stedfast -steed -steeds -steek -steeked -steeking -steeks -steel -steeled -steelhead -steelheads -steelie -steelier -steelies -steeliest -steeliness -steelinesses -steeling -steelmaker -steelmakers -steelmaking -steelmakings -steels -steelwork -steelworker -steelworkers -steelworks -steely -steelyard -steelyards -steenbok -steenboks -steep -steeped -steepen -steepened -steepening -steepens -steeper -steepers -steepest -steeping -steepish -steeple -steeplebush -steeplebushes -steeplechase -steeplechaser -steeplechasers -steeplechases -steeplechasing -steeplechasings -steepled -steeplejack -steeplejacks -steeples -steeply -steepness -steepnesses -steeps -steer -steerable -steerage -steerages -steerageway -steerageways -steered -steerer -steerers -steering -steers -steersman -steersmen -steeve -steeved -steeves -steeving -steevings -stegodon -stegodons -stegosaur -stegosaurs -stegosaurus -stegosauruses -stein -steinbok -steinboks -steins -stela -stelae -stelai -stelar -stele -stelene -steles -stelic -stella -stellar -stellas -stellate -stellified -stellifies -stellify -stellifying -stem -stemless -stemlike -stemma -stemmas -stemmata -stemmatic -stemmed -stemmer -stemmeries -stemmers -stemmery -stemmier -stemmiest -stemming -stemmy -stems -stemson -stemsons -stemware -stemwares -stench -stenches -stenchful -stenchier -stenchiest -stenchy -stencil -stenciled -stenciler -stencilers -stenciling -stencilled -stenciller -stencillers -stencilling -stencils -stengah -stengahs -steno -stenobathic -stenographer -stenographers -stenographic -stenographically -stenographies -stenography -stenohaline -stenokies -stenoky -stenos -stenosed -stenoses -stenosis -stenotherm -stenothermal -stenotherms -stenotic -stenotopic -stenotype -stenotyped -stenotypes -stenotypies -stenotyping -stenotypist -stenotypists -stenotypy -stentor -stentorian -stentors -step -stepbrother -stepbrothers -stepchild -stepchildren -stepdame -stepdames -stepdaughter -stepdaughters -stepfamilies -stepfamily -stepfather -stepfathers -stephanotis -stephanotises -stepladder -stepladders -steplike -stepmother -stepmothers -stepparent -stepparenting -stepparentings -stepparents -steppe -stepped -stepper -steppers -steppes -stepping -steppingstone -steppingstones -steps -stepsister -stepsisters -stepson -stepsons -stepwise -stercoraceous -stere -stereo -stereochemical -stereochemistries -stereochemistry -stereoed -stereogram -stereograms -stereograph -stereographed -stereographic -stereographies -stereographing -stereographs -stereography -stereoing -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 -stereos -stereoscope -stereoscopes -stereoscopic -stereoscopically -stereoscopies -stereoscopy -stereospecific -stereospecifically -stereospecificities -stereospecificity -stereotactic -stereotaxic -stereotaxically -stereotype -stereotyped -stereotyper -stereotypers -stereotypes -stereotypic -stereotypical -stereotypically -stereotypies -stereotyping -stereotypy -steres -steric -sterical -sterically -sterigma -sterigmas -sterigmata -sterilant -sterilants -sterile -sterilely -sterilities -sterility -sterilization -sterilizations -sterilize -sterilized -sterilizer -sterilizers -sterilizes -sterilizing -sterlet -sterlets -sterling -sterlingly -sterlingness -sterlingnesses -sterlings -stern -sterna -sternal -sterner -sternest -sternforemost -sternite -sternites -sternly -sternmost -sternness -sternnesses -sternocostal -sternpost -sternposts -sterns -sternson -sternsons -sternum -sternums -sternutation -sternutations -sternutator -sternutators -sternward -sternwards -sternway -sternways -steroid -steroidal -steroidogeneses -steroidogenesis -steroidogenic -steroids -sterol -sterols -stertor -stertorous -stertorously -stertors -stet -stethoscope -stethoscopes -stethoscopic -stets -stetted -stetting -stevedore -stevedored -stevedores -stevedoring -stew -steward -stewarded -stewardess -stewardesses -stewarding -stewards -stewardship -stewardships -stewbum -stewbums -stewed -stewing -stewpan -stewpans -stews -stey -sthenia -sthenias -sthenic -stibial -stibine -stibines -stibium -stibiums -stibnite -stibnites -stich -stichic -stichomythia -stichomythias -stichomythic -stichomythies -stichomythy -stichs -stick -stickball -stickballs -sticked -sticker -stickers -stickful -stickfuls -stickhandle -stickhandled -stickhandler -stickhandlers -stickhandles -stickhandling -stickier -stickiest -stickily -stickiness -stickinesses -sticking -stickit -stickle -stickleback -sticklebacks -stickled -stickler -sticklers -stickles -sticklike -stickling -stickman -stickmen -stickout -stickouts -stickpin -stickpins -sticks -stickseed -stickseeds -sticktight -sticktights -stickum -stickums -stickup -stickups -stickweed -stickweeds -stickwork -stickworks -sticky -stiction -stictions -stied -sties -stiff -stiffed -stiffen -stiffened -stiffener -stiffeners -stiffening -stiffens -stiffer -stiffest -stiffing -stiffish -stiffly -stiffness -stiffnesses -stiffs -stifle -stifled -stifler -stiflers -stifles -stifling -stiflingly -stigma -stigmal -stigmas -stigmasterol -stigmasterols -stigmata -stigmatic -stigmatically -stigmatics -stigmatist -stigmatists -stigmatization -stigmatizations -stigmatize -stigmatized -stigmatizes -stigmatizing -stilbene -stilbenes -stilbestrol -stilbestrols -stilbite -stilbites -stile -stiles -stiletto -stilettoed -stilettoes -stilettoing -stilettos -still -stillbirth -stillbirths -stillborn -stillborns -stilled -stiller -stillest -stillier -stilliest -stilling -stillman -stillmen -stillness -stillnesses -stillroom -stillrooms -stills -stilly -stilt -stilted -stiltedly -stiltedness -stiltednesses -stilting -stilts -stime -stimes -stimied -stimies -stimulant -stimulants -stimulate -stimulated -stimulates -stimulating -stimulation -stimulations -stimulative -stimulator -stimulators -stimulatory -stimuli -stimulus -stimy -stimying -sting -stingaree -stingarees -stinger -stingers -stingier -stingiest -stingily -stinginess -stinginesses -stinging -stingingly -stingless -stingo -stingos -stingray -stingrays -stings -stingy -stink -stinkard -stinkards -stinkbug -stinkbugs -stinker -stinkers -stinkhorn -stinkhorns -stinkier -stinkiest -stinking -stinkingly -stinko -stinkpot -stinkpots -stinks -stinkweed -stinkweeds -stinkwood -stinkwoods -stinky -stint -stinted -stinter -stinters -stinting -stints -stipe -stiped -stipel -stipels -stipend -stipendiaries -stipendiary -stipends -stipes -stipites -stipple -stippled -stippler -stipplers -stipples -stippling -stipular -stipulate -stipulated -stipulates -stipulating -stipulation -stipulations -stipulator -stipulators -stipulatory -stipule -stipuled -stipules -stir -stirabout -stirabouts -stirk -stirks -stirp -stirpes -stirps -stirred -stirrer -stirrers -stirring -stirringly -stirrup -stirrups -stirs -stitch -stitched -stitcher -stitcheries -stitchers -stitchery -stitches -stitching -stitchwort -stitchworts -stithied -stithies -stithy -stithying -stiver -stivers -stoa -stoae -stoai -stoas -stoat -stoats -stob -stobbed -stobbing -stobs -stoccado -stoccados -stoccata -stoccatas -stochastic -stochastically -stock -stockade -stockaded -stockades -stockading -stockbreeder -stockbreeders -stockbroker -stockbrokerage -stockbrokerages -stockbrokers -stockbroking -stockbrokings -stockcar -stockcars -stocked -stocker -stockers -stockfish -stockfishes -stockholder -stockholders -stockier -stockiest -stockily -stockiness -stockinesses -stockinet -stockinets -stockinette -stockinettes -stocking -stockinged -stockings -stockish -stockist -stockists -stockjobber -stockjobbers -stockjobbing -stockjobbings -stockkeeper -stockkeepers -stockman -stockmen -stockpile -stockpiled -stockpiler -stockpilers -stockpiles -stockpiling -stockpot -stockpots -stockroom -stockrooms -stocks -stocktaking -stocktakings -stocky -stockyard -stockyards -stodge -stodged -stodges -stodgier -stodgiest -stodgily -stodginess -stodginesses -stodging -stodgy -stogey -stogeys -stogie -stogies -stogy -stoic -stoical -stoically -stoichiometric -stoichiometrically -stoichiometries -stoichiometry -stoicism -stoicisms -stoics -stoke -stoked -stokehold -stokeholds -stoker -stokers -stokes -stokesia -stokesias -stoking -stole -stoled -stolen -stoles -stolid -stolider -stolidest -stolidities -stolidity -stolidly -stollen -stollens -stolon -stolonic -stoloniferous -stolons -stolport -stolports -stoma -stomach -stomachache -stomachaches -stomached -stomacher -stomachers -stomachic -stomachics -stomaching -stomachs -stomachy -stomal -stomas -stomata -stomatal -stomate -stomates -stomatic -stomatitides -stomatitis -stomatitises -stomatopod -stomatopods -stomodaea -stomodaeal -stomodaeum -stomodaeums -stomodea -stomodeal -stomodeum -stomodeums -stomp -stomped -stomper -stompers -stomping -stomps -stonable -stone -stoneboat -stoneboats -stonechat -stonechats -stonecrop -stonecrops -stonecutter -stonecutters -stonecutting -stonecuttings -stoned -stonefish -stonefishes -stoneflies -stonefly -stonemason -stonemasonries -stonemasonry -stonemasons -stoner -stoners -stones -stonewall -stonewalled -stonewaller -stonewallers -stonewalling -stonewalls -stoneware -stonewares -stonewashed -stonework -stoneworks -stonewort -stoneworts -stoney -stonier -stoniest -stonily -stoniness -stoninesses -stoning -stonish -stonished -stonishes -stonishing -stony -stonyhearted -stood -stooge -stooged -stooges -stooging -stook -stooked -stooker -stookers -stooking -stooks -stool -stooled -stoolie -stoolies -stooling -stools -stoop -stoopball -stoopballs -stooped -stooper -stoopers -stooping -stoops -stop -stopbank -stopbanks -stopcock -stopcocks -stope -stoped -stoper -stopers -stopes -stopgap -stopgaps -stoping -stoplight -stoplights -stopover -stopovers -stoppable -stoppage -stoppages -stopped -stopper -stoppered -stoppering -stoppers -stopping -stopple -stoppled -stopples -stoppling -stops -stopt -stopwatch -stopwatches -storable -storables -storage -storages -storax -storaxes -store -stored -storefront -storefronts -storehouse -storehouses -storekeeper -storekeepers -storeroom -storerooms -stores -storeship -storeships -storewide -storey -storeyed -storeys -storied -stories -storing -stork -storks -storksbill -storksbills -storm -stormbound -stormed -stormier -stormiest -stormily -storminess -storminesses -storming -storms -stormy -story -storyboard -storyboarded -storyboarding -storyboards -storybook -storybooks -storying -storyteller -storytellers -storytelling -storytellings -stoss -stotin -stotinka -stotinki -stotinov -stound -stounded -stounding -stounds -stoup -stoups -stour -stoure -stoures -stourie -stours -stoury -stout -stouten -stoutened -stoutening -stoutens -stouter -stoutest -stouthearted -stoutheartedly -stoutheartedness -stoutheartednesses -stoutish -stoutly -stoutness -stoutnesses -stouts -stove -stovepipe -stovepipes -stover -stovers -stoves -stow -stowable -stowage -stowages -stowaway -stowaways -stowed -stowing -stowp -stowps -stows -strabismic -strabismus -strabismuses -straddle -straddled -straddler -straddlers -straddles -straddling -strafe -strafed -strafer -strafers -strafes -strafing -straggle -straggled -straggler -stragglers -straggles -stragglier -straggliest -straggling -straggly -straight -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 -straights -straightway -strain -strained -strainer -strainers -straining -strains -strait -straiten -straitened -straitening -straitens -straiter -straitest -straitjacket -straitjacketed -straitjacketing -straitjackets -straitlaced -straitlacedly -straitlacedness -straitlacednesses -straitly -straitness -straitnesses -straits -strake -straked -strakes -stramash -stramashes -stramonies -stramonium -stramoniums -stramony -strand -stranded -strandedness -strandednesses -strander -stranders -stranding -strandline -strandlines -strands -strang -strange -strangely -strangeness -strangenesses -stranger -strangered -strangering -strangers -strangest -strangle -strangled -stranglehold -strangleholds -strangler -stranglers -strangles -strangling -strangulate -strangulated -strangulates -strangulating -strangulation -strangulations -stranguries -strangury -strap -straphang -straphanger -straphangers -straphanging -straphangs -straphung -strapless -straplesses -strappado -strappadoes -strappados -strapped -strapper -strappers -strapping -strappings -straps -strass -strasses -strata -stratagem -stratagems -stratal -stratas -strategic -strategical -strategically -strategies -strategist -strategists -strategize -strategized -strategizes -strategizing -strategy -strath -straths -strathspey -strathspeys -strati -stratification -stratifications -stratified -stratifies -stratiform -stratify -stratifying -stratigraphic -stratigraphies -stratigraphy -stratocracies -stratocracy -stratocumuli -stratocumulus -stratosphere -stratospheres -stratospheric -stratous -stratovolcano -stratovolcanoes -stratovolcanos -stratum -stratums -stratus -stravage -stravaged -stravages -stravaging -stravaig -stravaiged -stravaiging -stravaigs -straw -strawberries -strawberry -strawed -strawflower -strawflowers -strawhat -strawier -strawiest -strawing -straws -strawy -stray -strayed -strayer -strayers -straying -strays -streak -streaked -streaker -streakers -streakier -streakiest -streakiness -streakinesses -streaking -streakings -streaks -streaky -stream -streambed -streambeds -streamed -streamer -streamers -streamier -streamiest -streaming -streamings -streamlet -streamlets -streamline -streamlined -streamliner -streamliners -streamlines -streamlining -streams -streamside -streamsides -streamy -streek -streeked -streeker -streekers -streeking -streeks -streel -streeled -streeling -streels -street -streetcar -streetcars -streetlamp -streetlamps -streetlight -streetlights -streets -streetscape -streetscapes -streetwalker -streetwalkers -streetwalking -streetwalkings -streetwise -strength -strengthen -strengthened -strengthener -strengtheners -strengthening -strengthens -strengths -strenuosities -strenuosity -strenuous -strenuously -strenuousness -strenuousnesses -strep -streps -streptobacilli -streptobacillus -streptococcal -streptococci -streptococcic -streptococcus -streptokinase -streptokinases -streptolysin -streptolysins -streptomyces -streptomycete -streptomycetes -streptomycin -streptomycins -streptothricin -streptothricins -stress -stressed -stresses -stressful -stressfully -stressing -stressless -stresslessness -stresslessnesses -stressor -stressors -stretch -stretchabilities -stretchability -stretchable -stretched -stretcher -stretchers -stretches -stretchier -stretchiest -stretching -stretchy -stretta -strettas -strette -stretti -stretto -strettos -streusel -streusels -strew -strewed -strewer -strewers -strewing -strewment -strewments -strewn -strews -stria -striae -striate -striated -striates -striating -striation -striations -strick -stricken -strickle -strickled -strickles -strickling -stricks -strict -stricter -strictest -strictly -strictness -strictnesses -stricture -strictures -stridden -stride -stridence -stridences -stridencies -stridency -strident -stridently -strider -striders -strides -striding -stridor -stridors -stridulate -stridulated -stridulates -stridulating -stridulation -stridulations -stridulatory -stridulous -stridulously -strife -strifeless -strifes -strigil -strigils -strigose -strike -strikebound -strikebreaker -strikebreakers -strikebreaking -strikebreakings -strikeout -strikeouts -strikeover -strikeovers -striker -strikers -strikes -striking -strikingly -string -stringcourse -stringcourses -stringed -stringencies -stringency -stringendo -stringent -stringently -stringer -stringers -stringhalt -stringhalted -stringhalts -stringier -stringiest -stringiness -stringinesses -stringing -stringings -stringless -stringpiece -stringpieces -strings -stringy -stringybark -stringybarks -strip -stripe -striped -stripeless -striper -stripers -stripes -stripier -stripiest -striping -stripings -stripling -striplings -strippable -stripped -stripper -strippers -stripping -strips -stript -striptease -stripteaser -stripteasers -stripteases -stripy -strive -strived -striven -striver -strivers -strives -striving -strobe -strobes -strobic -strobil -strobila -strobilae -strobilation -strobilations -strobile -strobiles -strobili -strobils -strobilus -stroboscope -stroboscopes -stroboscopic -stroboscopically -strobotron -strobotrons -strode -stroganoff -stroke -stroked -stroker -strokers -strokes -stroking -stroll -strolled -stroller -strollers -strolling -strolls -stroma -stromal -stromata -stromatolite -stromatolites -stromatolitic -strong -strongbox -strongboxes -stronger -strongest -stronghold -strongholds -strongish -strongly -strongman -strongmen -strongyl -strongyle -strongyles -strongyloidiases -strongyloidiasis -strongyloidoses -strongyloidosis -strongyls -strontia -strontianite -strontianites -strontias -strontic -strontium -strontiums -strook -strop -strophanthin -strophanthins -strophe -strophes -strophic -stropped -stropper -stroppers -stroppier -stroppiest -stropping -stroppy -strops -stroud -strouding -stroudings -strouds -strove -strow -strowed -strowing -strown -strows -stroy -stroyed -stroyer -stroyers -stroying -stroys -struck -strucken -structural -structuralism -structuralisms -structuralist -structuralists -structuralization -structuralizations -structuralize -structuralized -structuralizes -structuralizing -structurally -structuration -structurations -structure -structured -structureless -structurelessness -structurelessnesses -structures -structuring -strudel -strudels -struggle -struggled -struggler -strugglers -struggles -struggling -strum -struma -strumae -strumas -strummed -strummer -strummers -strumming -strumose -strumous -strumpet -strumpets -strums -strung -strunt -strunted -strunting -strunts -strut -struthious -struts -strutted -strutter -strutters -strutting -strychnine -strychnines -stub -stubbed -stubbier -stubbiest -stubbily -stubbing -stubble -stubbled -stubbles -stubblier -stubbliest -stubbly -stubborn -stubborner -stubbornest -stubbornly -stubbornness -stubbornnesses -stubby -stubs -stucco -stuccoed -stuccoer -stuccoers -stuccoes -stuccoing -stuccos -stuccowork -stuccoworks -stuck -stud -studbook -studbooks -studded -studdie -studdies -studding -studdings -student -students -studentship -studentships -studfish -studfishes -studhorse -studhorses -studied -studiedly -studiedness -studiednesses -studier -studiers -studies -studio -studios -studious -studiously -studiousness -studiousnesses -studlier -studliest -studly -studs -studwork -studworks -study -studying -stuff -stuffed -stuffer -stuffers -stuffier -stuffiest -stuffily -stuffiness -stuffinesses -stuffing -stuffings -stuffless -stuffs -stuffy -stuiver -stuivers -stull -stulls -stultification -stultifications -stultified -stultifies -stultify -stultifying -stum -stumble -stumblebum -stumblebums -stumbled -stumbler -stumblers -stumbles -stumbling -stumblingly -stummed -stumming -stump -stumpage -stumpages -stumped -stumper -stumpers -stumpier -stumpiest -stumping -stumps -stumpy -stums -stun -stung -stunk -stunned -stunner -stunners -stunning -stunningly -stuns -stunsail -stunsails -stunt -stunted -stuntedness -stuntednesses -stunting -stuntman -stuntmen -stunts -stuntwoman -stuntwomen -stupa -stupas -stupe -stupefaction -stupefactions -stupefied -stupefies -stupefy -stupefying -stupefyingly -stupendous -stupendously -stupendousness -stupendousnesses -stupes -stupid -stupider -stupidest -stupidities -stupidity -stupidly -stupidness -stupidnesses -stupids -stupor -stuporous -stupors -sturdied -sturdier -sturdies -sturdiest -sturdily -sturdiness -sturdinesses -sturdy -sturgeon -sturgeons -sturt -sturts -stutter -stuttered -stutterer -stutterers -stuttering -stutters -sty -stye -styed -styes -stygian -stying -stylar -stylate -style -stylebook -stylebooks -styled -styleless -stylelessness -stylelessnesses -styler -stylers -styles -stylet -stylets -styli -styliform -styling -stylings -stylise -stylised -styliser -stylisers -stylises -stylish -stylishly -stylishness -stylishnesses -stylising -stylist -stylistic -stylistically -stylistics -stylists -stylite -stylites -stylitic -stylization -stylizations -stylize -stylized -stylizer -stylizers -stylizes -stylizing -stylobate -stylobates -stylographies -stylography -styloid -stylopodia -stylopodium -stylus -styluses -stymie -stymied -stymieing -stymies -stymy -stymying -stypsis -stypsises -styptic -styptics -styrax -styraxes -styrene -styrenes -suabilities -suability -suable -suably -suasion -suasions -suasive -suasively -suasiveness -suasivenesses -suasory -suave -suavely -suaveness -suavenesses -suaver -suavest -suavities -suavity -sub -suba -subabbot -subabbots -subacid -subacidly -subacidness -subacidnesses -subacrid -subacute -subacutely -subadar -subadars -subadolescent -subadolescents -subadult -subadults -subaerial -subaerially -subagencies -subagency -subagent -subagents -subah -subahdar -subahdars -subahs -subalar -suballocation -suballocations -subalpine -subaltern -subalterns -subantarctic -subapical -subaquatic -subaqueous -subarachnoid -subarachnoidal -subarctic -subarctics -subarea -subareas -subarid -subas -subassemblies -subassembly -subatmospheric -subatom -subatomic -subatoms -subaudible -subaudibly -subaudition -subauditions -subaverage -subaxial -subbase -subbasement -subbasements -subbases -subbasin -subbasins -subbass -subbasses -subbed -subbing -subbings -subbituminous -subblock -subblocks -subbranch -subbranches -subbreed -subbreeds -subcabinet -subcapsular -subcaste -subcastes -subcategories -subcategorization -subcategorizations -subcategorize -subcategorized -subcategorizes -subcategorizing -subcategory -subcause -subcauses -subceiling -subceilings -subcell -subcellar -subcellars -subcells -subcellular -subcenter -subcenters -subcentral -subcentrally -subchapter -subchapters -subchaser -subchasers -subchief -subchiefs -subclan -subclans -subclass -subclassed -subclasses -subclassification -subclassifications -subclassified -subclassifies -subclassify -subclassifying -subclassing -subclavian -subclavians -subclerk -subclerks -subclimax -subclimaxes -subclinical -subclinically -subcluster -subclusters -subcode -subcodes -subcollection -subcollections -subcollege -subcolleges -subcollegiate -subcolonies -subcolony -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 -subcool -subcooled -subcooling -subcools -subcordate -subcoriaceous -subcortical -subcounties -subcounty -subcritical -subcrustal -subcult -subcults -subcultural -subculturally -subculture -subcultured -subcultures -subculturing -subcurative -subcuratives -subcutaneous -subcutaneously -subcutes -subcutis -subcutises -subdeacon -subdeacons -subdean -subdeans -subdeb -subdebs -subdebutante -subdebutantes -subdecision -subdecisions -subdepartment -subdepartments -subdepot -subdepots -subdermal -subdermally -subdevelopment -subdevelopments -subdialect -subdialects -subdirector -subdirectors -subdiscipline -subdisciplines -subdistrict -subdistricted -subdistricting -subdistricts -subdividable -subdivide -subdivided -subdivider -subdividers -subdivides -subdividing -subdivision -subdivisions -subdominant -subdominants -subdual -subduals -subduce -subduced -subduces -subducing -subduct -subducted -subducting -subduction -subductions -subducts -subdue -subdued -subduedly -subduer -subduers -subdues -subduing -subdural -subecho -subechoes -subeconomies -subeconomy -subedit -subedited -subediting -subeditor -subeditorial -subeditors -subedits -subemployed -subemployment -subemployments -subentries -subentry -subepidermal -subepoch -subepochs -suber -suberect -suberic -suberin -suberins -suberise -suberised -suberises -suberising -suberization -suberizations -suberize -suberized -suberizes -suberizing -suberose -suberous -subers -subfamilies -subfamily -subfield -subfields -subfile -subfiles -subfix -subfixes -subfloor -subfloors -subfluid -subfossil -subfossils -subframe -subframes -subfreezing -subfusc -subgenera -subgeneration -subgenerations -subgenre -subgenres -subgenus -subgenuses -subglacial -subglacially -subgoal -subgoals -subgovernment -subgovernments -subgrade -subgrades -subgraph -subgraphs -subgroup -subgroups -subgum -subgums -subhead -subheading -subheadings -subheads -subhuman -subhumans -subhumid -subidea -subideas -subindex -subindexes -subindices -subindustries -subindustry -subinfeudate -subinfeudated -subinfeudates -subinfeudating -subinfeudation -subinfeudations -subinhibitory -subinterval -subintervals -subirrigate -subirrigated -subirrigates -subirrigating -subirrigation -subirrigations -subitem -subitems -subito -subjacencies -subjacency -subjacent -subjacently -subject -subjected -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 -subjects -subjoin -subjoined -subjoining -subjoins -subjugate -subjugated -subjugates -subjugating -subjugation -subjugations -subjugator -subjugators -subjunction -subjunctions -subjunctive -subjunctives -subkingdom -subkingdoms -sublanguage -sublanguages -sublate -sublated -sublates -sublating -sublation -sublations -sublease -subleased -subleases -subleasing -sublet -sublethal -sublethally -sublets -subletting -sublevel -sublevels -sublibrarian -sublibrarians -sublicense -sublicensed -sublicenses -sublicensing -sublieutenant -sublieutenants -sublimable -sublimate -sublimated -sublimates -sublimating -sublimation -sublimations -sublime -sublimed -sublimely -sublimeness -sublimenesses -sublimer -sublimers -sublimes -sublimest -subliminal -subliminally -subliming -sublimities -sublimity -subline -sublines -sublingual -subliteracies -subliteracy -subliterary -subliterate -subliterature -subliteratures -sublittoral -sublittorals -sublot -sublots -sublunar -sublunary -subluxation -subluxations -submanager -submanagers -submandibular -submandibulars -submarginal -submarine -submarined -submariner -submariners -submarines -submarining -submarket -submarkets -submaxillaries -submaxillary -submaximal -submediant -submediants -submenu -submenus -submerge -submerged -submergence -submergences -submerges -submergible -submerging -submerse -submersed -submerses -submersible -submersibles -submersing -submersion -submersions -submetacentric -submetacentrics -submicrogram -submicron -submicroscopic -submicroscopically -submillimeter -subminiature -subminimal -subminister -subministers -submiss -submission -submissions -submissive -submissively -submissiveness -submissivenesses -submit -submitochondrial -submits -submittal -submittals -submitted -submitting -submucosa -submucosae -submucosal -submucosas -submultiple -submultiples -submunition -submunitions -subnasal -subnational -subnet -subnets -subnetwork -subnetworks -subniche -subniches -subnodal -subnormal -subnormalities -subnormality -subnormally -subnuclear -suboceanic -suboptic -suboptimal -suboptimization -suboptimizations -suboptimize -suboptimized -suboptimizes -suboptimizing -suboptimum -suboral -suborbicular -suborbital -suborder -suborders -subordinate -subordinated -subordinately -subordinateness -subordinatenesses -subordinates -subordinating -subordination -subordinations -subordinative -subordinator -subordinators -suborganization -suborganizations -suborn -subornation -subornations -suborned -suborner -suborners -suborning -suborns -suboval -subovate -suboxide -suboxides -subpanel -subpanels -subpar -subparagraph -subparagraphs -subparallel -subpart -subparts -subpena -subpenaed -subpenaing -subpenas -subperiod -subperiods -subphase -subphases -subphyla -subphylum -subplot -subplots -subpoena -subpoenaed -subpoenaing -subpoenas -subpolar -subpopulation -subpopulations -subpotencies -subpotency -subpotent -subprimate -subprimates -subprincipal -subprincipals -subproblem -subproblems -subprocess -subprocesses -subproduct -subproducts -subprofessional -subprofessionals -subprogram -subprograms -subproject -subprojects -subproletariat -subproletariats -subpubic -subrace -subraces -subrational -subregion -subregional -subregions -subrent -subrents -subreption -subreptions -subreptitious -subreptitiously -subring -subrings -subrogate -subrogated -subrogates -subrogating -subrogation -subrogations -subroutine -subroutines -subrule -subrules -subs -subsale -subsales -subsample -subsampled -subsamples -subsampling -subsatellite -subsatellites -subsaturated -subsaturation -subsaturations -subscale -subscales -subscience -subsciences -subscribe -subscribed -subscriber -subscribers -subscribes -subscribing -subscript -subscription -subscriptions -subscripts -subsea -subsecretaries -subsecretary -subsect -subsection -subsections -subsector -subsectors -subsects -subsegment -subsegments -subseizure -subseizures -subsense -subsenses -subsentence -subsentences -subsequence -subsequences -subsequent -subsequently -subsequents -subsere -subseres -subseries -subserve -subserved -subserves -subservience -subserviences -subserviencies -subserviency -subservient -subserviently -subserving -subset -subsets -subshaft -subshafts -subshell -subshells -subshrub -subshrubs -subside -subsided -subsidence -subsidences -subsider -subsiders -subsides -subsidiaries -subsidiarily -subsidiarities -subsidiarity -subsidiary -subsidies -subsiding -subsidise -subsidised -subsidises -subsidising -subsidization -subsidizations -subsidize -subsidized -subsidizer -subsidizers -subsidizes -subsidizing -subsidy -subsist -subsisted -subsistence -subsistences -subsistent -subsisting -subsists -subsite -subsites -subskill -subskills -subsocial -subsocieties -subsociety -subsoil -subsoiled -subsoiler -subsoilers -subsoiling -subsoils -subsolar -subsonic -subsonically -subspace -subspaces -subspecialist -subspecialists -subspecialize -subspecialized -subspecializes -subspecializing -subspecialties -subspecialty -subspecies -subspecific -substage -substages -substance -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 -substate -substates -substation -substations -substituent -substituents -substitutabilities -substitutability -substitutable -substitute -substituted -substitutes -substituting -substitution -substitutional -substitutionally -substitutionary -substitutions -substitutive -substitutively -substrata -substrate -substrates -substratum -substratums -substructural -substructure -substructures -subsumable -subsume -subsumed -subsumes -subsuming -subsumption -subsumptions -subsurface -subsurfaces -subsystem -subsystems -subtask -subtasks -subtaxa -subtaxon -subtaxons -subteen -subteens -subtemperate -subtenancies -subtenancy -subtenant -subtenants -subtend -subtended -subtending -subtends -subterfuge -subterfuges -subterminal -subterranean -subterraneanly -subterraneous -subterraneously -subtest -subtests -subtext -subtexts -subtextual -subtheme -subthemes -subtherapeutic -subthreshold -subtile -subtilely -subtileness -subtilenesses -subtiler -subtilest -subtilin -subtilins -subtilisin -subtilisins -subtilization -subtilizations -subtilize -subtilized -subtilizes -subtilizing -subtilties -subtilty -subtitle -subtitled -subtitles -subtitling -subtle -subtleness -subtlenesses -subtler -subtlest -subtleties -subtlety -subtly -subtone -subtones -subtonic -subtonics -subtopia -subtopias -subtopic -subtopics -subtotal -subtotaled -subtotaling -subtotalled -subtotalling -subtotally -subtotals -subtract -subtracted -subtracter -subtracters -subtracting -subtraction -subtractions -subtractive -subtracts -subtrahend -subtrahends -subtreasuries -subtreasury -subtrend -subtrends -subtribe -subtribes -subtropic -subtropical -subtropics -subtunic -subtunics -subtype -subtypes -subulate -subumbrella -subumbrellas -subunit -subunits -suburb -suburban -suburbanise -suburbanised -suburbanises -suburbanising -suburbanite -suburbanites -suburbanization -suburbanizations -suburbanize -suburbanized -suburbanizes -suburbanizing -suburbans -suburbed -suburbia -suburbias -suburbs -subvarieties -subvariety -subvassal -subvassals -subvene -subvened -subvenes -subvening -subvention -subventionary -subventions -subversion -subversionary -subversions -subversive -subversively -subversiveness -subversivenesses -subversives -subvert -subverted -subverter -subverters -subverting -subverts -subvicar -subvicars -subviral -subvisible -subvisual -subvocal -subvocalization -subvocalizations -subvocalize -subvocalized -subvocalizes -subvocalizing -subvocally -subway -subwayed -subwaying -subways -subworld -subworlds -subwriter -subwriters -subzero -subzone -subzones -succah -succahs -succedanea -succedaneous -succedaneum -succedaneums -succedent -succeed -succeeded -succeeder -succeeders -succeeding -succeeds -success -successes -successful -successfully -successfulness -successfulnesses -succession -successional -successionally -successions -successive -successively -successiveness -successivenesses -successor -successors -succinate -succinates -succinct -succincter -succinctest -succinctly -succinctness -succinctnesses -succinic -succinyl -succinylcholine -succinylcholines -succinyls -succor -succored -succorer -succorers -succories -succoring -succors -succory -succotash -succotashes -succoth -succour -succoured -succouring -succours -succuba -succubae -succubas -succubi -succubus -succubuses -succulence -succulences -succulent -succulently -succulents -succumb -succumbed -succumbing -succumbs -succuss -succussed -succusses -succussing -such -suchlike -suchness -suchnesses -suck -sucked -sucker -suckered -suckering -suckers -suckfish -suckfishes -sucking -suckle -suckled -suckler -sucklers -suckles -suckless -suckling -sucklings -sucks -sucrase -sucrases -sucre -sucres -sucrose -sucroses -suction -suctional -suctioned -suctioning -suctions -suctorial -suctorian -suctorians -sudaria -sudaries -sudarium -sudary -sudation -sudations -sudatoria -sudatories -sudatorium -sudatoriums -sudatory -sudd -sudden -suddenly -suddenness -suddennesses -suddens -sudds -sudor -sudoral -sudoriferous -sudorific -sudorifics -sudors -suds -sudsed -sudser -sudsers -sudses -sudsier -sudsiest -sudsing -sudsless -sudsy -sue -sued -suede -sueded -suedes -sueding -suer -suers -sues -suet -suets -suety -suffari -suffaris -suffer -sufferable -sufferableness -sufferablenesses -sufferably -sufferance -sufferances -suffered -sufferer -sufferers -suffering -sufferings -suffers -suffice -sufficed -sufficer -sufficers -suffices -sufficiencies -sufficiency -sufficient -sufficiently -sufficing -suffix -suffixal -suffixation -suffixations -suffixed -suffixes -suffixing -sufflate -sufflated -sufflates -sufflating -suffocate -suffocated -suffocates -suffocating -suffocatingly -suffocation -suffocations -suffocative -suffragan -suffragans -suffrage -suffrages -suffragette -suffragettes -suffragist -suffragists -suffuse -suffused -suffuses -suffusing -suffusion -suffusions -suffusive -sugar -sugarberries -sugarberry -sugarcane -sugarcanes -sugarcoat -sugarcoated -sugarcoating -sugarcoats -sugared -sugarhouse -sugarhouses -sugarier -sugariest -sugaring -sugarless -sugarloaf -sugarloaves -sugarplum -sugarplums -sugars -sugary -suggest -suggested -suggester -suggesters -suggestibilities -suggestibility -suggestible -suggesting -suggestion -suggestions -suggestive -suggestively -suggestiveness -suggestivenesses -suggests -sugh -sughed -sughing -sughs -suicidal -suicidally -suicide -suicided -suicides -suiciding -suing -suint -suints -suit -suitabilities -suitability -suitable -suitableness -suitablenesses -suitably -suitcase -suitcases -suite -suited -suiter -suiters -suites -suiting -suitings -suitlike -suitor -suitors -suits -sukiyaki -sukiyakis -sukkah -sukkahs -sukkot -sukkoth -sulcal -sulcate -sulcated -sulci -sulcus -suldan -suldans -sulfa -sulfadiazine -sulfadiazines -sulfanilamide -sulfanilamides -sulfas -sulfatase -sulfatases -sulfate -sulfated -sulfates -sulfating -sulfhydryl -sulfhydryls -sulfid -sulfide -sulfides -sulfids -sulfinpyrazone -sulfinpyrazones -sulfinyl -sulfinyls -sulfite -sulfites -sulfitic -sulfo -sulfonamide -sulfonamides -sulfonate -sulfonated -sulfonates -sulfonating -sulfonation -sulfonations -sulfone -sulfones -sulfonic -sulfonium -sulfoniums -sulfonyl -sulfonyls -sulfonylurea -sulfonylureas -sulfoxide -sulfoxides -sulfur -sulfured -sulfuret -sulfureted -sulfureting -sulfurets -sulfuretted -sulfuretting -sulfuric -sulfuring -sulfurize -sulfurized -sulfurizes -sulfurizing -sulfurous -sulfurously -sulfurousness -sulfurousnesses -sulfurs -sulfury -sulfuryl -sulfuryls -sulk -sulked -sulker -sulkers -sulkier -sulkies -sulkiest -sulkily -sulkiness -sulkinesses -sulking -sulks -sulky -sullage -sullages -sullen -sullener -sullenest -sullenly -sullenness -sullennesses -sullied -sullies -sully -sullying -sulpha -sulphas -sulphate -sulphated -sulphates -sulphating -sulphid -sulphide -sulphides -sulphids -sulphite -sulphites -sulphone -sulphones -sulphur -sulphured -sulphureous -sulphuring -sulphurise -sulphurised -sulphurises -sulphurising -sulphurous -sulphurs -sulphury -sultan -sultana -sultanas -sultanate -sultanates -sultaness -sultanesses -sultanic -sultans -sultrier -sultriest -sultrily -sultriness -sultrinesses -sultry -sulu -sulus -sum -sumac -sumach -sumachs -sumacs -sumless -summa -summabilities -summability -summable -summae -summand -summands -summaries -summarily -summarise -summarised -summarises -summarising -summarizable -summarization -summarizations -summarize -summarized -summarizer -summarizers -summarizes -summarizing -summary -summas -summate -summated -summates -summating -summation -summational -summations -summative -summed -summer -summered -summerhouse -summerhouses -summerier -summeriest -summering -summerlike -summerlong -summerly -summers -summersault -summersaulted -summersaulting -summersaults -summertime -summertimes -summerwood -summerwoods -summery -summing -summit -summital -summited -summiteer -summiteers -summiting -summitries -summitry -summits -summon -summonable -summoned -summoner -summoners -summoning -summons -summonsed -summonses -summonsing -sumo -sumos -sump -sumps -sumpter -sumpters -sumptuary -sumptuous -sumptuously -sumptuousness -sumptuousnesses -sumpweed -sumpweeds -sums -sun -sunback -sunbaked -sunbath -sunbathe -sunbathed -sunbather -sunbathers -sunbathes -sunbathing -sunbaths -sunbeam -sunbeams -sunbeamy -sunbelt -sunbelts -sunbird -sunbirds -sunblock -sunblocks -sunbonnet -sunbonnets -sunbow -sunbows -sunburn -sunburned -sunburning -sunburns -sunburnt -sunburst -sunbursts -sunchoke -sunchokes -sundae -sundaes -sundeck -sundecks -sunder -sundered -sunderer -sunderers -sundering -sunders -sundew -sundews -sundial -sundials -sundog -sundogs -sundown -sundowner -sundowners -sundowns -sundress -sundresses -sundries -sundrops -sundry -sunfast -sunfish -sunfishes -sunflower -sunflowers -sung -sunglass -sunglasses -sunglow -sunglows -sunk -sunken -sunket -sunkets -sunlamp -sunlamps -sunland -sunlands -sunless -sunlight -sunlights -sunlike -sunlit -sunn -sunna -sunnah -sunnahs -sunnas -sunned -sunnier -sunniest -sunnily -sunniness -sunninesses -sunning -sunns -sunny -sunporch -sunporches -sunproof -sunrise -sunrises -sunroof -sunroofs -sunroom -sunrooms -suns -sunscald -sunscalds -sunscreen -sunscreening -sunscreens -sunseeker -sunseekers -sunset -sunsets -sunshade -sunshades -sunshine -sunshines -sunshiny -sunspot -sunspots -sunstone -sunstones -sunstroke -sunstrokes -sunstruck -sunsuit -sunsuits -suntan -suntanned -suntans -sunup -sunups -sunward -sunwards -sunwise -sup -supe -super -superable -superableness -superablenesses -superably -superabound -superabounded -superabounding -superabounds -superabsorbent -superabsorbents -superabundance -superabundances -superabundant -superabundantly -superachiever -superachievers -superactivities -superactivity -superadd -superadded -superadding -superaddition -superadditions -superadds -superadministrator -superadministrators -superagencies -superagency -superagent -superagents -superalloy -superalloys -superaltern -superalterns -superambitious -superannuate -superannuated -superannuates -superannuating -superannuation -superannuations -superathlete -superathletes -superb -superbad -superbank -superbanks -superber -superbest -superbillionaire -superbillionaires -superbitch -superbitches -superblock -superblocks -superbly -superbness -superbnesses -superboard -superboards -superbomb -superbomber -superbombers -superbombs -superbright -superbureaucrat -superbureaucrats -supercabinet -supercabinets -supercalender -supercalendered -supercalendering -supercalenders -supercar -supercargo -supercargoes -supercargos -supercarrier -supercarriers -supercars -supercautious -supercede -superceded -supercedes -superceding -supercenter -supercenters -supercharge -supercharged -supercharger -superchargers -supercharges -supercharging -superchic -superchurch -superchurches -superciliary -supercilious -superciliously -superciliousness -superciliousnesses -supercities -supercity -supercivilization -supercivilizations -supercivilized -superclass -superclasses -superclean -superclub -superclubs -supercluster -superclusters -supercoil -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 -supercool -supercooled -supercooling -supercools -supercop -supercops -supercorporation -supercorporations -supercriminal -supercriminals -supercritical -supercurrent -supercurrents -supercute -superdeluxe -superdiplomat -superdiplomats -supered -supereffective -superefficiencies -superefficiency -superefficient -superego -superegoist -superegoists -superegos -superelevate -superelevated -superelevates -superelevating -superelevation -superelevations -superelite -superelites -supereminence -supereminences -supereminent -supereminently -superencipher -superenciphered -superenciphering -superenciphers -supererogation -supererogations -supererogatory -superette -superettes -superexpensive -superexpress -superexpresses -superfamilies -superfamily -superfan -superfans -superfarm -superfarms -superfast -superfatted -superfecundation -superfecundations -superfetation -superfetations -superficial -superficialities -superficiality -superficially -superficies -superfine -superfirm -superfirms -superfix -superfixes -superflack -superflacks -superfluid -superfluidities -superfluidity -superfluids -superfluities -superfluity -superfluous -superfluously -superfluousness -superfluousnesses -superfund -superfunds -supergene -supergenes -supergiant -supergiants -superglue -superglues -supergood -supergovernment -supergovernments -supergraphics -supergravities -supergravity -supergroup -supergroups -supergrowth -supergrowths -superharden -superhardened -superhardening -superhardens -superheat -superheated -superheater -superheaters -superheating -superheats -superheavy -superheavyweight -superheavyweights -superhelical -superhelices -superhelix -superhelixes -superhero -superheroes -superheroine -superheroines -superheterodyne -superheterodynes -superhighway -superhighways -superhit -superhits -superhot -superhuman -superhumanities -superhumanity -superhumanly -superhumanness -superhumannesses -superhype -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 -supering -superinsulated -superintellectual -superintellectuals -superintelligence -superintelligences -superintelligent -superintend -superintended -superintendence -superintendences -superintendencies -superintendency -superintendent -superintendents -superintending -superintends -superintensities -superintensity -superior -superiorities -superiority -superiorly -superiors -superjacent -superjet -superjets -superjock -superjocks -superjumbo -superlain -superlarge -superlative -superlatively -superlativeness -superlativenesses -superlatives -superlawyer -superlawyers -superlay -superlie -superlies -superlight -superliner -superliners -superlobbyist -superlobbyists -superloyalist -superloyalists -superlunar -superlunary -superluxuries -superluxurious -superluxury -superlying -supermacho -supermachos -supermajorities -supermajority -supermale -supermales -superman -supermarket -supermarkets -supermasculine -supermassive -supermen -supermicro -supermicros -supermilitant -supermillionaire -supermillionaires -supermind -superminds -supermini -superminicomputer -superminicomputers -superminis -superminister -superministers -supermodel -supermodels -supermodern -supermom -supermoms -supernal -supernally -supernatant -supernatants -supernation -supernational -supernations -supernatural -supernaturalism -supernaturalisms -supernaturalist -supernaturalistic -supernaturalists -supernaturally -supernaturalness -supernaturalnesses -supernaturals -supernature -supernatures -supernormal -supernormalities -supernormality -supernormally -supernova -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 -superphenomenons -superphosphate -superphosphates -superphysical -superpimp -superpimps -superplane -superplanes -superplastic -superplasticities -superplasticity -superplayer -superplayers -superpolite -superport -superports -superposable -superpose -superposed -superposes -superposing -superposition -superpositions -superpower -superpowered -superpowerful -superpowers -superpremium -superpremiums -superpro -superprofit -superprofits -superpros -superqualities -superquality -superrace -superraces -superreal -superrealism -superrealisms -superregenerative -superregional -superrich -superroad -superroads -superromantic -superromanticism -superromanticisms -supers -supersafe -supersale -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 -supersede -supersedeas -superseded -superseder -superseders -supersedes -superseding -supersedure -supersedures -supersell -superseller -supersellers -supersells -supersensible -supersensitive -supersensitively -supersensitivities -supersensitivity -supersensory -superserviceable -supersession -supersessions -superset -supersets -supersex -supersexes -supersexualities -supersexuality -supersharp -supershow -supershows -supersinger -supersingers -supersize -supersized -supersleuth -supersleuths -superslick -supersmart -supersmooth -supersoft -supersonic -supersonically -supersonics -supersophisticated -superspecial -superspecialist -superspecialists -superspecialization -superspecializations -superspecialized -superspecials -superspectacle -superspectacles -superspectacular -superspectaculars -superspeculation -superspeculations -superspies -superspy -superstar -superstardom -superstardoms -superstars -superstate -superstates -superstation -superstations -superstimulate -superstimulated -superstimulates -superstimulating -superstition -superstitions -superstitious -superstitiously -superstock -superstocks -superstore -superstores -superstrata -superstratum -superstratums -superstrength -superstrengths -superstrike -superstrikes -superstring -superstrings -superstrong -superstructural -superstructure -superstructures -superstud -superstuds -supersubstantial -supersubtle -supersubtleties -supersubtlety -supersurgeon -supersurgeons -supersweet -supersymmetric -supersymmetries -supersymmetry -supersystem -supersystems -supertanker -supertankers -supertax -supertaxes -superterrific -superthick -superthin -superthriller -superthrillers -supertight -supertonic -supertonics -supervene -supervened -supervenes -supervenient -supervening -supervention -superventions -supervirile -supervirtuosi -supervirtuoso -supervirtuosos -supervise -supervised -supervises -supervising -supervision -supervisions -supervisor -supervisors -supervisory -superwave -superwaves -superweapon -superweapons -superwide -superwife -superwives -superwoman -superwomen -supes -supinate -supinated -supinates -supinating -supination -supinations -supinator -supinators -supine -supinely -supineness -supinenesses -supines -supped -supper -suppers -suppertime -suppertimes -supping -supplant -supplantation -supplantations -supplanted -supplanter -supplanters -supplanting -supplants -supple -suppled -supplejack -supplejacks -supplely -supplement -supplemental -supplementals -supplementary -supplementation -supplementations -supplemented -supplementer -supplementers -supplementing -supplements -suppleness -supplenesses -suppler -supples -supplest -suppletion -suppletions -suppletive -suppletory -suppliance -suppliances -suppliant -suppliantly -suppliants -supplicant -supplicants -supplicate -supplicated -supplicates -supplicating -supplication -supplications -supplicatory -supplied -supplier -suppliers -supplies -suppling -supply -supplying -support -supportabilities -supportability -supportable -supported -supporter -supporters -supporting -supportive -supportiveness -supportivenesses -supports -supposable -supposably -supposal -supposals -suppose -supposed -supposedly -supposer -supposers -supposes -supposing -supposition -suppositional -suppositions -suppositious -supposititious -supposititiously -suppositories -suppository -suppress -suppressant -suppressants -suppressed -suppresses -suppressibilities -suppressibility -suppressible -suppressing -suppression -suppressions -suppressive -suppressiveness -suppressivenesses -suppressor -suppressors -suppurate -suppurated -suppurates -suppurating -suppuration -suppurations -suppurative -supra -supraliminal -supramolecular -supranational -supranationalism -supranationalisms -supranationalist -supranationalists -supranationalities -supranationality -supraoptic -supraorbital -suprarational -suprarenal -suprarenals -suprasegmental -supraventricular -supravital -supravitally -supremacies -supremacist -supremacists -supremacy -suprematism -suprematisms -suprematist -suprematists -supreme -supremely -supremeness -supremenesses -supremer -supremest -supremo -supremos -sups -suq -suqs -sura -surah -surahs -sural -suras -surbase -surbased -surbases -surcease -surceased -surceases -surceasing -surcharge -surcharged -surcharges -surcharging -surcingle -surcingles -surcoat -surcoats -surd -surds -sure -surefire -surefooted -surefootedly -surefootedness -surefootednesses -surely -sureness -surenesses -surer -surest -sureties -surety -suretyship -suretyships -surf -surfable -surface -surfaced -surfacer -surfacers -surfaces -surfacing -surfacings -surfactant -surfactants -surfbird -surfbirds -surfboard -surfboarded -surfboarder -surfboarders -surfboarding -surfboards -surfboat -surfboats -surfed -surfeit -surfeited -surfeiter -surfeiters -surfeiting -surfeits -surfer -surfers -surffish -surffishes -surficial -surfier -surfiest -surfing -surfings -surflike -surfperch -surfperches -surfs -surfy -surge -surged -surgeon -surgeonfish -surgeonfishes -surgeons -surger -surgeries -surgers -surgery -surges -surgical -surgically -surging -surgy -suricate -suricates -surimi -surjection -surjections -surjective -surlier -surliest -surlily -surliness -surlinesses -surly -surmise -surmised -surmiser -surmisers -surmises -surmising -surmount -surmountable -surmounted -surmounting -surmounts -surname -surnamed -surnamer -surnamers -surnames -surnaming -surpass -surpassable -surpassed -surpasses -surpassing -surpassingly -surplice -surplices -surplus -surplusage -surplusages -surpluses -surprint -surprinted -surprinting -surprints -surprisal -surprisals -surprise -surprised -surpriser -surprisers -surprises -surprising -surprisingly -surprize -surprized -surprizes -surprizing -surra -surras -surreal -surrealism -surrealisms -surrealist -surrealistic -surrealistically -surrealists -surreally -surrebutter -surrebutters -surrejoinder -surrejoinders -surrender -surrendered -surrendering -surrenders -surreptitious -surreptitiously -surrey -surreys -surrogacies -surrogacy -surrogate -surrogated -surrogates -surrogating -surround -surrounded -surrounding -surroundings -surrounds -surroyal -surroyals -surtax -surtaxed -surtaxes -surtaxing -surtout -surtouts -surveil -surveillance -surveillances -surveillant -surveillants -surveilled -surveilling -surveils -survey -surveyed -surveying -surveyings -surveyor -surveyors -surveys -survivabilities -survivability -survivable -survival -survivalism -survivalisms -survivalist -survivalists -survivals -survivance -survivances -survive -survived -surviver -survivers -survives -surviving -survivor -survivors -survivorship -survivorships -susceptibilities -susceptibility -susceptible -susceptibleness -susceptiblenesses -susceptibly -susceptive -susceptiveness -susceptivenesses -susceptivities -susceptivity -sushi -sushis -suslik -susliks -suspect -suspected -suspecting -suspects -suspend -suspended -suspender -suspendered -suspenders -suspending -suspends -suspense -suspenseful -suspensefully -suspensefulness -suspensefulnesses -suspenseless -suspenser -suspensers -suspenses -suspension -suspensions -suspensive -suspensively -suspensor -suspensories -suspensors -suspensory -suspicion -suspicioned -suspicioning -suspicions -suspicious -suspiciously -suspiciousness -suspiciousnesses -suspiration -suspirations -suspire -suspired -suspires -suspiring -suss -sussed -susses -sussing -sustain -sustainabilities -sustainability -sustainable -sustained -sustainedly -sustainer -sustainers -sustaining -sustains -sustenance -sustenances -sustentation -sustentations -sustentative -susurrant -susurration -susurrations -susurrous -susurrus -susurruses -sutler -sutlers -sutra -sutras -sutta -suttas -suttee -suttees -sutural -suturally -suture -sutured -sutures -suturing -suzerain -suzerains -suzerainties -suzerainty -svaraj -svarajes -svedberg -svedbergs -svelte -sveltely -svelteness -sveltenesses -svelter -sveltest -swab -swabbed -swabber -swabbers -swabbie -swabbies -swabbing -swabby -swabs -swacked -swaddle -swaddled -swaddles -swaddling -swag -swage -swaged -swager -swagers -swages -swagged -swagger -swaggered -swaggerer -swaggerers -swaggering -swaggeringly -swaggers -swaggie -swaggies -swagging -swaging -swagman -swagmen -swags -swail -swails -swain -swainish -swainishness -swainishnesses -swains -swale -swales -swallow -swallowable -swallowed -swallower -swallowers -swallowing -swallows -swallowtail -swallowtails -swam -swami -swamies -swamis -swamp -swamped -swamper -swampers -swampier -swampiest -swampiness -swampinesses -swamping -swampish -swampland -swamplands -swamps -swampy -swamy -swan -swang -swanherd -swanherds -swank -swanked -swanker -swankest -swankier -swankiest -swankily -swankiness -swankinesses -swanking -swanks -swanky -swanlike -swanned -swanneries -swannery -swanning -swanpan -swanpans -swans -swansdown -swansdowns -swanskin -swanskins -swap -swapped -swapper -swappers -swapping -swaps -swaraj -swarajes -swarajist -swarajists -sward -swarded -swarding -swards -sware -swarf -swarfs -swarm -swarmed -swarmer -swarmers -swarming -swarms -swart -swarth -swarthier -swarthiest -swarthiness -swarthinesses -swarths -swarthy -swartness -swartnesses -swarty -swash -swashbuckle -swashbuckled -swashbuckler -swashbucklers -swashbuckles -swashbuckling -swashed -swasher -swashers -swashes -swashing -swastica -swasticas -swastika -swastikas -swat -swatch -swatches -swath -swathe -swathed -swather -swathers -swathes -swathing -swaths -swats -swatted -swatter -swatters -swatting -sway -swayable -swayback -swaybacked -swaybacks -swayed -swayer -swayers -swayful -swaying -sways -swear -swearer -swearers -swearing -swears -swearword -swearwords -sweat -sweatband -sweatbands -sweatbox -sweatboxes -sweated -sweater -sweaterdress -sweaterdresses -sweaters -sweatier -sweatiest -sweatily -sweatiness -sweatinesses -sweating -sweatpants -sweats -sweatshirt -sweatshirts -sweatshop -sweatshops -sweaty -swede -swedes -sweenies -sweeny -sweep -sweepback -sweepbacks -sweeper -sweepers -sweepier -sweepiest -sweeping -sweepingly -sweepingness -sweepingnesses -sweepings -sweeps -sweepstake -sweepstakes -sweepy -sweer -sweet -sweetbread -sweetbreads -sweetbriar -sweetbriars -sweetbrier -sweetbriers -sweeten -sweetened -sweetener -sweeteners -sweetening -sweetenings -sweetens -sweeter -sweetest -sweetheart -sweethearts -sweetie -sweeties -sweeting -sweetings -sweetish -sweetishly -sweetly -sweetmeat -sweetmeats -sweetness -sweetnesses -sweets -sweetshop -sweetshops -sweetsop -sweetsops -swell -swelled -sweller -swellest -swellfish -swellfishes -swellhead -swellheaded -swellheadedness -swellheadednesses -swellheads -swelling -swellings -swells -swelter -sweltered -sweltering -swelteringly -swelters -sweltrier -sweltriest -sweltry -swept -swerve -swerved -swerver -swervers -swerves -swerving -sweven -swevens -swidden -swiddens -swift -swifter -swifters -swiftest -swiftlet -swiftlets -swiftly -swiftness -swiftnesses -swifts -swig -swigged -swigger -swiggers -swigging -swigs -swill -swilled -swiller -swillers -swilling -swills -swim -swimmable -swimmer -swimmeret -swimmerets -swimmers -swimmier -swimmiest -swimmily -swimming -swimmingly -swimmings -swimmy -swims -swimsuit -swimsuits -swimwear -swindle -swindled -swindler -swindlers -swindles -swindling -swine -swineherd -swineherds -swinepox -swinepoxes -swing -swingby -swingbys -swinge -swinged -swingeing -swinger -swingers -swinges -swingier -swingiest -swinging -swingingest -swingingly -swingings -swingle -swingled -swingles -swingletree -swingletrees -swingling -swingman -swingmen -swings -swingy -swinish -swinishly -swinishness -swinishnesses -swink -swinked -swinking -swinks -swinney -swinneys -swipe -swiped -swipes -swiping -swiple -swiples -swipple -swipples -swirl -swirled -swirlier -swirliest -swirling -swirlingly -swirls -swirly -swish -swished -swisher -swishers -swishes -swishier -swishiest -swishing -swishingly -swishy -swiss -swisses -switch -switchable -switchback -switchbacked -switchbacking -switchbacks -switchblade -switchblades -switchboard -switchboards -switched -switcher -switcheroo -switcheroos -switchers -switches -switchgrass -switchgrasses -switching -switchman -switchmen -switchyard -switchyards -swith -swithe -swither -swithered -swithering -swithers -swithly -swive -swived -swivel -swiveled -swiveling -swivelled -swivelling -swivels -swives -swivet -swivets -swiving -swizzle -swizzled -swizzler -swizzlers -swizzles -swizzling -swob -swobbed -swobber -swobbers -swobbing -swobs -swollen -swoon -swooned -swooner -swooners -swooning -swooningly -swoons -swoop -swooped -swooper -swoopers -swooping -swoops -swoopstake -swoosh -swooshed -swooshes -swooshing -swop -swopped -swopping -swops -sword -swordfish -swordfishes -swordlike -swordman -swordmen -swordplay -swordplayer -swordplayers -swordplays -swords -swordsman -swordsmanship -swordsmanships -swordsmen -swordtail -swordtails -swore -sworn -swot -swots -swotted -swotter -swotters -swotting -swoun -swound -swounded -swounding -swounds -swouned -swouning -swouns -swum -swung -sybarite -sybarites -sybaritic -sybaritically -sybaritism -sybaritisms -sybo -syboes -sycamine -sycamines -sycamore -sycamores -syce -sycee -sycees -syces -sycomore -sycomores -syconia -syconium -sycophancies -sycophancy -sycophant -sycophantic -sycophantically -sycophantish -sycophantishly -sycophantism -sycophantisms -sycophantly -sycophants -sycoses -sycosis -syenite -syenites -syenitic -syke -sykes -syli -sylis -syllabaries -syllabary -syllabi -syllabic -syllabically -syllabicate -syllabicated -syllabicates -syllabicating -syllabication -syllabications -syllabicities -syllabicity -syllabics -syllabification -syllabifications -syllabified -syllabifies -syllabify -syllabifying -syllable -syllabled -syllables -syllabling -syllabub -syllabubs -syllabus -syllabuses -syllepses -syllepsis -sylleptic -syllogism -syllogisms -syllogist -syllogistic -syllogistically -syllogists -syllogize -syllogized -syllogizes -syllogizing -sylph -sylphic -sylphid -sylphids -sylphish -sylphlike -sylphs -sylphy -sylva -sylvae -sylvan -sylvanite -sylvanites -sylvans -sylvas -sylvatic -sylviculture -sylvicultures -sylvin -sylvine -sylvines -sylvins -sylvite -sylvites -symbion -symbions -symbiont -symbionts -symbioses -symbiosis -symbiot -symbiote -symbiotes -symbiotic -symbiotically -symbiots -symbol -symboled -symbolic -symbolical -symbolically -symboling -symbolise -symbolised -symbolises -symbolising -symbolism -symbolisms -symbolist -symbolistic -symbolists -symbolization -symbolizations -symbolize -symbolized -symbolizer -symbolizers -symbolizes -symbolizing -symbolled -symbolling -symbologies -symbology -symbols -symmetallism -symmetallisms -symmetric -symmetrical -symmetrically -symmetricalness -symmetricalnesses -symmetries -symmetrization -symmetrizations -symmetrize -symmetrized -symmetrizes -symmetrizing -symmetry -sympathectomies -sympathectomized -sympathectomy -sympathetic -sympathetically -sympathetics -sympathies -sympathin -sympathins -sympathise -sympathised -sympathises -sympathising -sympathize -sympathized -sympathizer -sympathizers -sympathizes -sympathizing -sympatholytic -sympatholytics -sympathomimetic -sympathomimetics -sympathy -sympatric -sympatrically -sympatries -sympatry -sympetalies -sympetalous -sympetaly -symphonic -symphonically -symphonies -symphonious -symphoniously -symphonist -symphonists -symphony -symphyseal -symphyses -symphysial -symphysis -sympodia -sympodial -sympodium -symposia -symposiarch -symposiarchs -symposiast -symposiasts -symposium -symposiums -symptom -symptomatic -symptomatically -symptomatologic -symptomatological -symptomatologically -symptomatologies -symptomatology -symptomless -symptoms -syn -synaereses -synaeresis -synaestheses -synaesthesia -synaesthesias -synaesthesis -synagog -synagogal -synagogs -synagogue -synagogues -synalepha -synalephas -synaloepha -synaloephas -synanon -synanons -synapse -synapsed -synapses -synapsid -synapsids -synapsing -synapsis -synaptic -synaptically -synaptosomal -synaptosome -synaptosomes -synarthrodial -synarthroses -synarthrosis -sync -syncarp -syncarpies -syncarpous -syncarps -syncarpy -syncategorematic -syncategorematically -synced -synch -synched -synching -synchro -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 -synchrony -synchros -synchroscope -synchroscopes -synchrotron -synchrotrons -synchs -syncing -synclinal -syncline -synclines -syncom -syncoms -syncopal -syncopate -syncopated -syncopates -syncopating -syncopation -syncopations -syncopative -syncopator -syncopators -syncope -syncopes -syncopic -syncretic -syncretise -syncretised -syncretises -syncretising -syncretism -syncretisms -syncretist -syncretistic -syncretists -syncretize -syncretized -syncretizes -syncretizing -syncs -syncytia -syncytial -syncytium -syndactylies -syndactylism -syndactylisms -syndactyly -syndeses -syndesis -syndesises -syndesmoses -syndesmosis -syndet -syndetic -syndetically -syndets -syndic -syndical -syndicalism -syndicalisms -syndicalist -syndicalists -syndicate -syndicated -syndicates -syndicating -syndication -syndications -syndicator -syndicators -syndics -syndrome -syndromes -syne -synecdoche -synecdoches -synecdochic -synecdochical -synecdochically -synecological -synecologies -synecology -synectic -synereses -syneresis -synergetic -synergia -synergias -synergic -synergically -synergid -synergids -synergies -synergism -synergisms -synergist -synergistic -synergistically -synergists -synergy -synesis -synesises -synesthesia -synesthesias -synesthetic -synfuel -synfuels -syngamic -syngamies -syngamy -syngas -syngases -syngasses -syngeneic -synizeses -synizesis -synkarya -synkaryon -synkaryons -synod -synodal -synodic -synodical -synods -synonym -synonyme -synonymes -synonymic -synonymical -synonymies -synonymist -synonymists -synonymities -synonymity -synonymize -synonymized -synonymizes -synonymizing -synonymous -synonymously -synonyms -synonymy -synopses -synopsis -synopsize -synopsized -synopsizes -synopsizing -synoptic -synoptical -synoptically -synostoses -synostosis -synovia -synovial -synovias -synovitis -synovitises -syntactic -syntactical -syntactically -syntactics -syntagma -syntagmas -syntagmata -syntagmatic -syntax -syntaxes -synth -syntheses -synthesis -synthesist -synthesists -synthesize -synthesized -synthesizer -synthesizers -synthesizes -synthesizing -synthetase -synthetases -synthetic -synthetically -synthetics -synths -syntonic -syntonies -syntony -synura -synurae -syph -sypher -syphered -syphering -syphers -syphilis -syphilises -syphilitic -syphilitics -syphon -syphoned -syphoning -syphons -syphs -syren -syrens -syringa -syringas -syringe -syringed -syringes -syringing -syringomyelia -syringomyelias -syringomyelic -syrinx -syrinxes -syrphian -syrphians -syrphid -syrphids -syrup -syrups -syrupy -sysop -sysops -systaltic -system -systematic -systematically -systematicness -systematicnesses -systematics -systematise -systematised -systematises -systematising -systematism -systematisms -systematist -systematists -systematization -systematizations -systematize -systematized -systematizer -systematizers -systematizes -systematizing -systemic -systemically -systemics -systemization -systemizations -systemize -systemized -systemizes -systemizing -systemless -systems -systole -systoles -systolic -syzygal -syzygial -syzygies -syzygy -ta -tab -tabanid -tabanids -tabard -tabarded -tabards -tabaret -tabarets -tabbed -tabbied -tabbies -tabbing -tabbis -tabbises -tabbouleh -tabboulehs -tabby -tabbying -taber -tabered -tabering -tabernacle -tabernacled -tabernacles -tabernacling -tabernacular -tabers -tabes -tabetic -tabetics -tabid -tabla -tablas -tablature -tablatures -table -tableau -tableaus -tableaux -tablecloth -tablecloths -tabled -tableful -tablefuls -tableland -tablelands -tablemate -tablemates -tables -tablesful -tablespoon -tablespoonful -tablespoonfuls -tablespoons -tablespoonsful -tablet -tableted -tableting -tabletop -tabletops -tablets -tabletted -tabletting -tableware -tablewares -tabling -tabloid -tabloids -taboo -tabooed -tabooing -tabooley -tabooleys -taboos -tabor -tabored -taborer -taborers -taboret -taborets -taborin -taborine -taborines -taboring -taborins -tabors -tabouli -taboulis -tabour -taboured -tabourer -tabourers -tabouret -tabourets -tabouring -tabours -tabs -tabu -tabued -tabuing -tabular -tabulate -tabulated -tabulates -tabulating -tabulation -tabulations -tabulator -tabulators -tabuli -tabulis -tabun -tabuns -tabus -tacamahac -tacamahacs -tace -taces -tacet -tach -tache -taches -tachinid -tachinids -tachism -tachisme -tachismes -tachisms -tachist -tachiste -tachistes -tachistoscope -tachistoscopes -tachistoscopic -tachistoscopically -tachists -tachometer -tachometers -tachs -tachyarrhythmia -tachyarrhythmias -tachycardia -tachycardias -tachyon -tachyons -tacit -tacitly -tacitness -tacitnesses -taciturn -taciturnities -taciturnity -tack -tackboard -tackboards -tacked -tacker -tackers -tacket -tackets -tackey -tackier -tackiest -tackified -tackifier -tackifiers -tackifies -tackify -tackifying -tackily -tackiness -tackinesses -tacking -tackle -tackled -tackler -tacklers -tackles -tackless -tackling -tacklings -tacks -tacky -tacnode -tacnodes -taco -taconite -taconites -tacos -tacrine -tacrines -tact -tactful -tactfully -tactfulness -tactfulnesses -tactic -tactical -tactically -tactician -tacticians -tactics -tactile -tactilely -tactilities -tactility -taction -tactions -tactless -tactlessly -tactlessness -tactlessnesses -tacts -tactual -tactually -tad -tadpole -tadpoles -tads -tae -tael -taels -taenia -taeniae -taenias -taeniases -taeniasis -taffarel -taffarels -tafferel -tafferels -taffeta -taffetas -taffetized -taffia -taffias -taffies -taffrail -taffrails -taffy -tafia -tafias -tag -tagalong -tagalongs -tagboard -tagboards -tagged -tagger -taggers -tagging -tagliatelle -tagliatelles -taglike -tagmeme -tagmemes -tagmemic -tagrag -tagrags -tags -tahini -tahinis -tahr -tahrs -tahsil -tahsils -taiga -taigas -taiglach -tail -tailback -tailbacks -tailboard -tailboards -tailbone -tailbones -tailcoat -tailcoated -tailcoats -tailed -tailender -tailenders -tailer -tailers -tailfan -tailfans -tailgate -tailgated -tailgater -tailgaters -tailgates -tailgating -tailing -tailings -taillamp -taillamps -taille -tailles -tailless -tailleur -tailleurs -taillight -taillights -taillike -tailor -tailorbird -tailorbirds -tailored -tailoring -tailorings -tailors -tailpiece -tailpieces -tailpipe -tailpipes -tailplane -tailplanes -tailrace -tailraces -tails -tailskid -tailskids -tailslide -tailslides -tailspin -tailspins -tailwater -tailwaters -tailwind -tailwinds -tain -tains -taint -tainted -tainting -taintless -taints -taipan -taipans -taj -tajes -taka -takable -takahe -takahes -takas -take -takeable -takeaway -takedown -takedowns -taken -takeoff -takeoffs -takeout -takeouts -takeover -takeovers -taker -takers -takes -takeup -takeups -takin -taking -takingly -takings -takins -tala -talapoin -talapoins -talar -talaria -talars -talas -talc -talced -talcing -talcked -talcking -talcky -talcose -talcous -talcs -talcum -talcums -tale -talebearer -talebearers -talebearing -talebearings -talent -talented -talentless -talents -taler -talers -tales -talesman -talesmen -taleysim -tali -talion -talions -taliped -talipeds -talipes -talipot -talipots -talisman -talismanic -talismanically -talismans -talk -talkable -talkathon -talkathons -talkative -talkatively -talkativeness -talkativenesses -talked -talker -talkers -talkfest -talkfests -talkie -talkier -talkies -talkiest -talkiness -talkinesses -talking -talkings -talks -talky -tall -tallage -tallaged -tallages -tallaging -tallaisim -tallboy -tallboys -taller -tallest -tallied -tallier -talliers -tallies -tallis -tallises -tallish -tallisim -tallit -tallith -tallithes -tallithim -talliths -tallitim -tallitoth -tallness -tallnesses -tallol -tallols -tallow -tallowed -tallowing -tallows -tallowy -tally -tallyho -tallyhoed -tallyhoing -tallyhos -tallying -tallyman -tallymen -talmudic -talmudism -talmudisms -talon -taloned -talons -talooka -talookas -taluk -taluka -talukas -taluks -talus -taluses -tam -tamable -tamal -tamale -tamales -tamals -tamandu -tamandua -tamanduas -tamandus -tamarack -tamaracks -tamarao -tamaraos -tamarau -tamaraus -tamari -tamarillo -tamarillos -tamarin -tamarind -tamarinds -tamarins -tamaris -tamarisk -tamarisks -tamasha -tamashas -tambac -tambacs -tambak -tambaks -tambala -tambalas -tambour -tamboura -tambouras -tamboured -tambourer -tambourers -tambourine -tambourines -tambouring -tambours -tambur -tambura -tamburas -tamburs -tame -tameable -tamed -tamein -tameins -tameless -tamely -tameness -tamenesses -tamer -tamers -tames -tamest -taming -tamis -tamises -tammie -tammies -tammy -tamoxifen -tamoxifens -tamp -tampala -tampalas -tampan -tampans -tamped -tamper -tampered -tamperer -tamperers -tampering -tamperproof -tampers -tamping -tampion -tampions -tampon -tamponed -tamponing -tampons -tamps -tams -tan -tanager -tanagers -tanbark -tanbarks -tandem -tandems -tandoor -tandoori -tandooris -tandoors -tang -tanged -tangelo -tangelos -tangence -tangences -tangencies -tangency -tangent -tangential -tangentially -tangents -tangerine -tangerines -tangibilities -tangibility -tangible -tangibleness -tangiblenesses -tangibles -tangibly -tangier -tangiest -tanging -tangle -tangled -tanglement -tanglements -tangler -tanglers -tangles -tanglier -tangliest -tangling -tangly -tango -tangoed -tangoing -tangos -tangram -tangrams -tangs -tangy -tanist -tanistries -tanistry -tanists -tank -tanka -tankage -tankages -tankard -tankards -tankas -tanked -tanker -tankers -tankful -tankfuls -tanking -tanklike -tanks -tankship -tankships -tannable -tannage -tannages -tannate -tannates -tanned -tanner -tanneries -tanners -tannery -tannest -tannic -tannin -tanning -tannings -tannins -tannish -tanrec -tanrecs -tans -tansies -tansy -tantalate -tantalates -tantalic -tantalise -tantalised -tantalises -tantalising -tantalite -tantalites -tantalize -tantalized -tantalizer -tantalizers -tantalizes -tantalizing -tantalizingly -tantalum -tantalums -tantalus -tantaluses -tantamount -tantara -tantaras -tantivies -tantivy -tanto -tantra -tantras -tantric -tantrum -tantrums -tanuki -tanukis -tanyard -tanyards -tanzanite -tanzanites -tao -taos -tap -tapa -tapadera -tapaderas -tapadero -tapaderos -tapalo -tapalos -tapas -tape -taped -tapeless -tapelike -tapeline -tapelines -tapenade -tapenades -taper -tapered -taperer -taperers -tapering -tapers -taperstick -tapersticks -tapes -tapestried -tapestries -tapestry -tapestrying -tapeta -tapetal -tapetum -tapeworm -tapeworms -taphole -tapholes -taphonomic -taphonomies -taphonomist -taphonomists -taphonomy -taphouse -taphouses -taping -tapioca -tapiocas -tapir -tapirs -tapis -tapises -tapped -tapper -tappers -tappet -tappets -tapping -tappings -taproom -taprooms -taproot -taproots -taps -tapster -tapsters -tar -taradiddle -taradiddles -tarama -taramas -tarantas -tarantases -tarantella -tarantellas -tarantism -tarantisms -tarantula -tarantulae -tarantulas -tarboosh -tarbooshes -tarbush -tarbushes -tardier -tardies -tardiest -tardigrade -tardigrades -tardily -tardiness -tardinesses -tardo -tardy -tardyon -tardyons -tare -tared -tares -targe -targes -target -targetable -targeted -targeting -targets -tariff -tariffed -tariffing -tariffs -taring -tarlatan -tarlatans -tarletan -tarletans -tarmac -tarmacadam -tarmacadams -tarmacs -tarn -tarnal -tarnally -tarnation -tarnations -tarnish -tarnishable -tarnished -tarnishes -tarnishing -tarns -taro -taroc -tarocs -tarok -taroks -taros -tarot -tarots -tarp -tarpan -tarpans -tarpaper -tarpapers -tarpaulin -tarpaulins -tarpon -tarpons -tarps -tarradiddle -tarradiddles -tarragon -tarragons -tarre -tarred -tarres -tarriance -tarriances -tarried -tarrier -tarriers -tarries -tarriest -tarring -tarry -tarrying -tars -tarsal -tarsals -tarsi -tarsia -tarsias -tarsier -tarsiers -tarsometatarsi -tarsometatarsus -tarsus -tart -tartan -tartana -tartanas -tartans -tartar -tartaric -tartars -tarted -tarter -tartest -tarting -tartish -tartlet -tartlets -tartly -tartness -tartnesses -tartrate -tartrates -tarts -tartufe -tartufes -tartuffe -tartuffes -tarty -tarweed -tarweeds -tarzan -tarzans -tas -task -tasked -tasking -taskmaster -taskmasters -taskmistress -taskmistresses -tasks -taskwork -taskworks -tass -tasse -tassel -tasseled -tasseling -tasselled -tasselling -tassels -tasses -tasset -tassets -tassie -tassies -tastable -taste -tasted -tasteful -tastefully -tastefulness -tastefulnesses -tasteless -tastelessly -tastelessness -tastelessnesses -tastemaker -tastemakers -taster -tasters -tastes -tastier -tastiest -tastily -tastiness -tastinesses -tasting -tasty -tat -tatami -tatamis -tatar -tatars -tate -tater -taters -tates -tatouay -tatouays -tats -tatted -tatter -tatterdemalion -tatterdemalions -tattered -tattering -tatters -tattersall -tattersalls -tattie -tattier -tatties -tattiest -tattily -tattiness -tattinesses -tatting -tattings -tattle -tattled -tattler -tattlers -tattles -tattletale -tattletales -tattling -tattoo -tattooed -tattooer -tattooers -tattooing -tattooist -tattooists -tattoos -tatty -tau -taught -taunt -taunted -taunter -taunters -taunting -tauntingly -taunts -taupe -taupes -taurine -taurines -taus -taut -tautaug -tautaugs -tauted -tauten -tautened -tautening -tautens -tauter -tautest -tauting -tautly -tautness -tautnesses -tautog -tautogs -tautological -tautologically -tautologies -tautologous -tautologously -tautology -tautomer -tautomeric -tautomerism -tautomerisms -tautomers -tautonym -tautonymies -tautonyms -tautonymy -tauts -tav -tavern -taverna -tavernas -taverner -taverners -taverns -tavs -taw -tawdrier -tawdries -tawdriest -tawdrily -tawdriness -tawdrinesses -tawdry -tawed -tawer -tawers -tawie -tawing -tawney -tawneys -tawnier -tawnies -tawniest -tawnily -tawniness -tawninesses -tawny -tawpie -tawpies -taws -tawse -tawsed -tawses -tawsing -tax -taxa -taxable -taxables -taxably -taxation -taxations -taxed -taxeme -taxemes -taxemic -taxer -taxers -taxes -taxi -taxicab -taxicabs -taxidermic -taxidermies -taxidermist -taxidermists -taxidermy -taxied -taxies -taxiing -taximan -taximen -taximeter -taximeters -taxing -taxingly -taxis -taxite -taxites -taxitic -taxiway -taxiways -taxless -taxman -taxmen -taxon -taxonomic -taxonomically -taxonomies -taxonomist -taxonomists -taxonomy -taxons -taxpaid -taxpayer -taxpayers -taxpaying -taxus -taxwise -taxying -tazza -tazzas -tazze -tchotchke -tchotchkes -tea -teaberries -teaberry -teaboard -teaboards -teabowl -teabowls -teabox -teaboxes -teacake -teacakes -teacart -teacarts -teach -teachable -teachableness -teachablenesses -teachably -teacher -teacherly -teachers -teaches -teaching -teachings -teacup -teacupful -teacupfuls -teacups -teacupsful -teahouse -teahouses -teak -teakettle -teakettles -teaks -teakwood -teakwoods -teal -tealike -teals -team -teamaker -teamakers -teamed -teaming -teammate -teammates -teams -teamster -teamsters -teamwork -teamworks -teapot -teapots -teapoy -teapoys -tear -tearable -tearaway -tearaways -teardown -teardowns -teardrop -teardrops -teared -tearer -tearers -tearful -tearfully -tearfulness -tearfulnesses -teargas -teargases -teargassed -teargasses -teargassing -tearier -teariest -tearily -tearing -tearjerker -tearjerkers -tearless -tearoom -tearooms -tears -tearstain -tearstained -tearstains -teary -teas -tease -teased -teasel -teaseled -teaseler -teaselers -teaseling -teaselled -teaselling -teasels -teaser -teasers -teases -teashop -teashops -teasing -teasingly -teaspoon -teaspoonful -teaspoonfuls -teaspoons -teaspoonsful -teat -teated -teatime -teatimes -teats -teaware -teawares -teazel -teazeled -teazeling -teazelled -teazelling -teazels -teazle -teazled -teazles -teazling -teched -techie -techier -techies -techiest -techily -technetium -technetiums -technetronic -technic -technical -technicalities -technicality -technicalization -technicalizations -technicalize -technicalized -technicalizes -technicalizing -technically -technicals -technician -technicians -technics -technique -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 -techy -tecta -tectal -tectite -tectites -tectonic -tectonically -tectonics -tectonism -tectonisms -tectrices -tectrix -tectum -tectums -ted -tedded -tedder -tedders -teddies -tedding -teddy -tedious -tediously -tediousness -tediousnesses -tedium -tediums -teds -tee -teed -teeing -teel -teels -teem -teemed -teemer -teemers -teeming -teemingly -teemingness -teemingnesses -teems -teen -teenage -teenaged -teenager -teenagers -teener -teeners -teenful -teenier -teeniest -teens -teensier -teensiest -teensy -teentsier -teentsiest -teentsy -teeny -teenybop -teenybopper -teenyboppers -teepee -teepees -tees -teeter -teeterboard -teeterboards -teetered -teetering -teeters -teeth -teethe -teethed -teether -teethers -teethes -teething -teethings -teethridge -teethridges -teetotal -teetotaled -teetotaler -teetotalers -teetotaling -teetotalism -teetotalisms -teetotalist -teetotalists -teetotalled -teetotaller -teetotallers -teetotalling -teetotally -teetotals -teetotum -teetotums -teff -teffs -tefillin -teg -tegmen -tegmenta -tegmental -tegmentum -tegmina -tegminal -tegs -tegua -teguas -tegular -tegumen -tegument -teguments -tegumina -teiglach -teiid -teiids -teind -teinds -tektite -tektites -tektitic -tel -tela -telae -telamon -telamones -telangiectases -telangiectasia -telangiectasias -telangiectasis -telangiectatic -tele -telecast -telecasted -telecaster -telecasters -telecasting -telecasts -telecommunication -telecommunications -telecommute -telecommuted -telecommuter -telecommuters -telecommutes -telecommuting -teleconference -teleconferenced -teleconferences -teleconferencing -teleconferencings -telecourse -telecourses -teledu -teledus -telefacsimile -telefacsimiles -telefilm -telefilms -telega -telegas -telegenic -telegonies -telegony -telegram -telegrammed -telegramming -telegrams -telegraph -telegraphed -telegrapher -telegraphers -telegraphese -telegrapheses -telegraphic -telegraphically -telegraphies -telegraphing -telegraphist -telegraphists -telegraphs -telegraphy -telekineses -telekinesis -telekinetic -telekinetically -teleman -telemark -telemarketer -telemarketers -telemarketing -telemarketings -telemarks -telemen -telemeter -telemetered -telemetering -telemeters -telemetric -telemetrically -telemetries -telemetry -telencephala -telencephalic -telencephalon -telencephalons -teleologic -teleological -teleologically -teleologies -teleologist -teleologists -teleology -teleonomic -teleonomies -teleonomy -teleost -teleostean -teleosts -telepath -telepathic -telepathically -telepathies -telepaths -telepathy -telephone -telephoned -telephoner -telephoners -telephones -telephonic -telephonically -telephonies -telephoning -telephonist -telephonists -telephony -telephoto -telephotographies -telephotography -telephotos -teleplay -teleplays -teleport -teleportation -teleportations -teleported -teleporting -teleports -teleprinter -teleprinters -teleprocessing -teleprocessings -teleran -telerans -teles -telescope -telescoped -telescopes -telescopic -telescopically -telescoping -teleses -telesis -telestic -telestics -teletext -teletexts -telethon -telethons -teletypewriter -teletypewriters -teleutospore -teleutospores -televangelism -televangelisms -televangelist -televangelists -teleview -televiewed -televiewer -televiewers -televiewing -televiews -televise -televised -televises -televising -television -televisions -televisual -telex -telexed -telexes -telexing -telfer -telfered -telfering -telfers -telford -telfords -telia -telial -telic -telically -teliospore -teliospores -telium -tell -tellable -teller -tellers -tellies -telling -tellingly -tells -telltale -telltales -tellurian -telluric -telluride -tellurides -tellurium -telluriums -tellurometer -tellurometers -telly -tellys -telnet -telneted -telneting -telnets -telnetted -telnetting -telocentric -telocentrics -teloi -telome -telomere -telomeres -telomes -telomic -telophase -telophases -telos -teloses -telotaxes -telotaxis -telpher -telphered -telphering -telphers -tels -telson -telsonic -telsons -temblor -temblores -temblors -temerarious -temerariously -temerariousness -temerariousnesses -temerities -temerity -temp -temped -tempeh -tempehs -temper -tempera -temperable -temperament -temperamental -temperamentally -temperaments -temperance -temperances -temperas -temperate -temperately -temperateness -temperatenesses -temperature -temperatures -tempered -temperer -temperers -tempering -tempers -tempest -tempested -tempesting -tempests -tempestuous -tempestuously -tempestuousness -tempestuousnesses -tempi -temping -templar -templars -template -templates -temple -templed -temples -templet -templets -tempo -temporal -temporalities -temporality -temporalize -temporalized -temporalizes -temporalizing -temporally -temporals -temporaries -temporarily -temporariness -temporarinesses -temporary -temporise -temporised -temporises -temporising -temporization -temporizations -temporize -temporized -temporizer -temporizers -temporizes -temporizing -temporomandibular -tempos -temps -tempt -temptable -temptation -temptations -tempted -tempter -tempters -tempting -temptingly -temptress -temptresses -tempts -tempura -tempuras -ten -tenabilities -tenability -tenable -tenableness -tenablenesses -tenably -tenace -tenaces -tenacious -tenaciously -tenaciousness -tenaciousnesses -tenacities -tenacity -tenacula -tenaculum -tenaculums -tenail -tenaille -tenailles -tenails -tenancies -tenancy -tenant -tenantable -tenanted -tenanting -tenantless -tenantries -tenantry -tenants -tench -tenches -tend -tendance -tendances -tended -tendence -tendences -tendencies -tendencious -tendency -tendentious -tendentiously -tendentiousness -tendentiousnesses -tender -tendered -tenderer -tenderers -tenderest -tenderfeet -tenderfoot -tenderfoots -tenderhearted -tenderheartedly -tenderheartedness -tenderheartednesses -tendering -tenderization -tenderizations -tenderize -tenderized -tenderizer -tenderizers -tenderizes -tenderizing -tenderloin -tenderloins -tenderly -tenderness -tendernesses -tenderometer -tenderometers -tenders -tending -tendinitis -tendinitises -tendinous -tendon -tendonitis -tendonitises -tendons -tendresse -tendresses -tendril -tendriled -tendrilled -tendrilous -tendrils -tends -tenebrae -tenebrific -tenebrionid -tenebrionids -tenebrious -tenebrism -tenebrisms -tenebrist -tenebrists -tenebrous -tenement -tenements -tenesmic -tenesmus -tenesmuses -tenet -tenets -tenfold -tenfolds -tenge -tenia -teniae -tenias -teniases -teniasis -tenner -tenners -tennies -tennis -tennises -tennist -tennists -tenon -tenoned -tenoner -tenoners -tenoning -tenons -tenor -tenorist -tenorists -tenorite -tenorites -tenors -tenosynovitis -tenosynovitises -tenotomies -tenotomy -tenour -tenours -tenpence -tenpences -tenpenny -tenpin -tenpins -tenpounder -tenpounders -tenrec -tenrecs -tens -tense -tensed -tensely -tenseness -tensenesses -tenser -tenses -tensest -tensible -tensibly -tensile -tensilities -tensility -tensing -tensiometer -tensiometers -tensiometric -tensiometries -tensiometry -tension -tensional -tensioned -tensioner -tensioners -tensioning -tensionless -tensions -tensities -tensity -tensive -tensor -tensors -tent -tentacle -tentacled -tentacles -tentacular -tentage -tentages -tentative -tentatively -tentativeness -tentativenesses -tentatives -tented -tenter -tentered -tenterhook -tenterhooks -tentering -tenters -tenth -tenthly -tenths -tentie -tentier -tentiest -tenting -tentless -tentlike -tents -tenty -tenues -tenuis -tenuities -tenuity -tenuous -tenuously -tenuousness -tenuousnesses -tenurable -tenure -tenured -tenures -tenurial -tenurially -tenuti -tenuto -tenutos -teocalli -teocallis -teopan -teopans -teosinte -teosintes -tepa -tepal -tepals -tepas -tepee -tepees -tepefied -tepefies -tepefy -tepefying -tephra -tephras -tephrite -tephrites -tepid -tepidities -tepidity -tepidly -tepidness -tepidnesses -tepoy -tepoys -tequila -tequilas -terabyte -terabytes -terai -terais -teraohm -teraohms -teraph -teraphim -teratism -teratisms -teratocarcinoma -teratocarcinomas -teratocarcinomata -teratogen -teratogeneses -teratogenesis -teratogenic -teratogenicities -teratogenicity -teratogens -teratoid -teratologic -teratological -teratologies -teratologist -teratologists -teratology -teratoma -teratomas -teratomata -terawatt -terawatts -terbia -terbias -terbic -terbium -terbiums -terce -tercel -tercelet -tercelets -tercels -tercentenaries -tercentenary -tercentennial -tercentennials -terces -tercet -tercets -terebene -terebenes -terebic -terebinth -terebinths -teredines -teredo -teredos -terefah -terephthalate -terephthalates -terete -terga -tergal -tergite -tergites -tergiversate -tergiversated -tergiversates -tergiversating -tergiversation -tergiversations -tergiversator -tergiversators -tergum -teriyaki -teriyakis -term -termagant -termagants -termed -termer -termers -terminable -terminableness -terminablenesses -terminably -terminal -terminally -terminals -terminate -terminated -terminates -terminating -termination -terminational -terminations -terminative -terminatively -terminator -terminators -terming -termini -terminological -terminologically -terminologies -terminology -terminus -terminuses -termitaria -termitaries -termitarium -termitary -termite -termites -termitic -termless -termly -termor -termors -terms -termtime -termtimes -tern -ternaries -ternary -ternate -ternately -terne -terneplate -terneplates -ternes -ternion -ternions -terns -terpene -terpeneless -terpenes -terpenic -terpenoid -terpenoids -terpineol -terpineols -terpinol -terpinols -terpolymer -terpolymers -terpsichorean -terra -terrace -terraced -terraces -terracing -terrae -terraform -terraformed -terraforming -terraforms -terrain -terrains -terrane -terranes -terrapin -terrapins -terraqueous -terraria -terrarium -terrariums -terras -terrases -terrazzo -terrazzos -terreen -terreens -terrella -terrellas -terrene -terrenes -terreplein -terrepleins -terrestrial -terrestrially -terrestrials -terret -terrets -terrible -terribleness -terriblenesses -terribly -terricolous -terrier -terriers -terries -terrific -terrifically -terrified -terrifies -terrify -terrifying -terrifyingly -terrigenous -terrine -terrines -territ -territorial -territorialism -territorialisms -territorialist -territorialists -territorialities -territoriality -territorialization -territorializations -territorialize -territorialized -territorializes -territorializing -territorially -territorials -territories -territory -territs -terror -terrorise -terrorised -terrorises -terrorising -terrorism -terrorisms -terrorist -terroristic -terrorists -terrorization -terrorizations -terrorize -terrorized -terrorizes -terrorizing -terrorless -terrors -terry -terse -tersely -terseness -tersenesses -terser -tersest -tertial -tertials -tertian -tertians -tertiaries -tertiary -tervalent -tesla -teslas -tessellate -tessellated -tessellates -tessellating -tessellation -tessellations -tessera -tesseract -tesseracts -tesserae -tessitura -tessituras -tessiture -test -testa -testabilities -testability -testable -testaceous -testacies -testacy -testae -testament -testamentary -testaments -testate -testates -testator -testators -testatrices -testatrix -testatrixes -testcross -testcrossed -testcrosses -testcrossing -tested -testee -testees -tester -testers -testes -testicle -testicles -testicular -testier -testiest -testified -testifier -testifiers -testifies -testify -testifying -testily -testimonial -testimonials -testimonies -testimony -testiness -testinesses -testing -testis -teston -testons -testoon -testoons -testosterone -testosterones -tests -testudines -testudo -testudos -testy -tet -tetanal -tetanic -tetanically -tetanics -tetanies -tetanise -tetanised -tetanises -tetanising -tetanization -tetanizations -tetanize -tetanized -tetanizes -tetanizing -tetanoid -tetanus -tetanuses -tetany -tetartohedral -tetched -tetchier -tetchiest -tetchily -tetchiness -tetchinesses -tetchy -teth -tether -tetherball -tetherballs -tethered -tethering -tethers -teths -tetotum -tetotums -tetra -tetracaine -tetracaines -tetrachloride -tetrachlorides -tetrachord -tetrachords -tetracid -tetracids -tetracycline -tetracyclines -tetrad -tetradic -tetradrachm -tetradrachms -tetrads -tetradynamous -tetrafluoride -tetrafluorides -tetragon -tetragonal -tetragonally -tetragons -tetragrammaton -tetragrammatons -tetrahedra -tetrahedral -tetrahedrally -tetrahedrite -tetrahedrites -tetrahedron -tetrahedrons -tetrahydrocannabinol -tetrahydrocannabinols -tetrahydrofuran -tetrahydrofurans -tetrahymena -tetrahymenas -tetralogies -tetralogy -tetramer -tetrameric -tetramerous -tetramers -tetrameter -tetrameters -tetramethyllead -tetramethylleads -tetraploid -tetraploidies -tetraploids -tetraploidy -tetrapod -tetrapods -tetrapyrrole -tetrapyrroles -tetrarch -tetrarchic -tetrarchies -tetrarchs -tetrarchy -tetras -tetraspore -tetraspores -tetrasporic -tetravalent -tetrazolium -tetrazoliums -tetrazzini -tetrode -tetrodes -tetrodotoxin -tetrodotoxins -tetroxid -tetroxide -tetroxides -tetroxids -tetryl -tetryls -tets -tetter -tetters -teuch -teugh -teughly -teutonize -teutonized -teutonizes -teutonizing -tew -tewed -tewing -tews -texas -texases -text -textbook -textbookish -textbooks -textile -textiles -textless -texts -textual -textually -textuaries -textuary -textural -texturally -texture -textured -textureless -textures -texturing -texturize -texturized -texturizes -texturizing -thack -thacked -thacking -thacks -thae -thairm -thairms -thalami -thalamic -thalamus -thalassaemia -thalassaemias -thalassemia -thalassemias -thalassemic -thalassemics -thalassic -thalassocracies -thalassocracy -thalassocrat -thalassocrats -thaler -thalers -thalidomide -thalidomides -thalli -thallic -thallium -thalliums -thalloid -thallophyte -thallophytes -thallophytic -thallous -thallus -thalluses -than -thanage -thanages -thanatological -thanatologies -thanatologist -thanatologists -thanatology -thanatos -thanatoses -thane -thanes -thaneship -thaneships -thank -thanked -thanker -thankers -thankful -thankfuller -thankfullest -thankfully -thankfulness -thankfulnesses -thanking -thankless -thanklessly -thanklessness -thanklessnesses -thanks -thanksgiving -thanksgivings -thankworthy -tharm -tharms -that -thataway -thatch -thatched -thatcher -thatchers -thatches -thatchier -thatchiest -thatching -thatchy -thaumaturge -thaumaturges -thaumaturgic -thaumaturgies -thaumaturgist -thaumaturgists -thaumaturgy -thaw -thawed -thawer -thawers -thawing -thawless -thaws -the -thearchies -thearchy -theater -theatergoer -theatergoers -theatergoing -theatergoings -theaters -theatre -theatres -theatric -theatrical -theatricalism -theatricalisms -theatricalities -theatricality -theatricalization -theatricalizations -theatricalize -theatricalized -theatricalizes -theatricalizing -theatrically -theatricals -theatrics -thebaine -thebaines -thebe -thebes -theca -thecae -thecal -thecate -thecodont -thecodonts -thee -theelin -theelins -theelol -theelols -theft -thefts -thegn -thegnly -thegns -thein -theine -theines -theins -their -theirs -theirselves -theism -theisms -theist -theistic -theistical -theistically -theists -thelitis -thelitises -them -thematic -thematically -thematics -theme -themed -themes -theming -themselves -then -thenage -thenages -thenal -thenar -thenars -thence -thenceforth -thenceforward -thenceforwards -thens -theobromine -theobromines -theocentric -theocentricities -theocentricity -theocentrism -theocentrisms -theocracies -theocracy -theocrat -theocratic -theocratical -theocratically -theocrats -theodicies -theodicy -theodolite -theodolites -theogonic -theogonies -theogony -theolog -theologian -theologians -theologic -theological -theologically -theologies -theologise -theologised -theologises -theologising -theologize -theologized -theologizer -theologizers -theologizes -theologizing -theologs -theologue -theologues -theology -theonomies -theonomous -theonomy -theophanic -theophanies -theophany -theophylline -theophyllines -theorbo -theorbos -theorem -theorematic -theorems -theoretic -theoretical -theoretically -theoretician -theoreticians -theories -theorise -theorised -theorises -theorising -theorist -theorists -theorization -theorizations -theorize -theorized -theorizer -theorizers -theorizes -theorizing -theory -theosophical -theosophically -theosophies -theosophist -theosophists -theosophy -therapeuses -therapeusis -therapeutic -therapeutically -therapeutics -therapies -therapist -therapists -therapsid -therapsids -therapy -there -thereabout -thereabouts -thereafter -thereat -thereby -therefor -therefore -therefrom -therein -thereinafter -thereinto -theremin -theremins -thereof -thereon -theres -thereto -theretofore -thereunder -thereunto -thereupon -therewith -therewithal -theriac -theriaca -theriacal -theriacas -theriacs -theriomorphic -therm -thermae -thermal -thermalization -thermalizations -thermalize -thermalized -thermalizes -thermalizing -thermally -thermals -therme -thermel -thermels -thermes -thermic -thermically -thermion -thermionic -thermionics -thermions -thermistor -thermistors -thermite -thermites -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 -thermos -thermoscope -thermoscopes -thermoses -thermoset -thermosets -thermosetting -thermosphere -thermospheres -thermospheric -thermostabilities -thermostability -thermostable -thermostat -thermostated -thermostatic -thermostatically -thermostating -thermostats -thermostatted -thermostatting -thermotactic -thermotaxes -thermotaxis -thermotropic -thermotropism -thermotropisms -therms -theroid -theropod -theropods -thesaural -thesauri -thesaurus -thesauruses -these -theses -thesis -thespian -thespians -theta -thetas -thetic -thetical -thetically -theurgic -theurgical -theurgies -theurgist -theurgists -theurgy -thew -thewier -thewiest -thewless -thews -thewy -they -thiabendazole -thiabendazoles -thiamin -thiaminase -thiaminases -thiamine -thiamines -thiamins -thiazide -thiazides -thiazin -thiazine -thiazines -thiazins -thiazol -thiazole -thiazoles -thiazols -thick -thicken -thickened -thickener -thickeners -thickening -thickenings -thickens -thicker -thickest -thicket -thicketed -thickets -thickety -thickhead -thickheaded -thickheads -thickish -thickly -thickness -thicknesses -thicks -thickset -thicksets -thief -thieve -thieved -thieveries -thievery -thieves -thieving -thievish -thievishly -thievishness -thievishnesses -thigh -thighbone -thighbones -thighed -thighs -thigmotaxes -thigmotaxis -thigmotropism -thigmotropisms -thill -thills -thimble -thimbleberries -thimbleberry -thimbleful -thimblefuls -thimblerig -thimblerigged -thimblerigger -thimbleriggers -thimblerigging -thimblerigs -thimbles -thimbleweed -thimbleweeds -thimerosal -thimerosals -thin -thinclad -thinclads -thindown -thindowns -thine -thing -thingamabob -thingamabobs -thingamajig -thingamajigs -thingness -thingnesses -things -thingumajig -thingumajigs -thingummies -thingummy -think -thinkable -thinkableness -thinkablenesses -thinkably -thinker -thinkers -thinking -thinkingly -thinkingness -thinkingnesses -thinkings -thinks -thinly -thinned -thinner -thinners -thinness -thinnesses -thinnest -thinning -thinnish -thins -thio -thiocyanate -thiocyanates -thiol -thiolic -thiols -thionate -thionates -thionic -thionin -thionine -thionines -thionins -thionyl -thionyls -thiopental -thiopentals -thiophen -thiophene -thiophenes -thiophens -thioridazine -thioridazines -thiosulfate -thiosulfates -thiotepa -thiotepas -thiouracil -thiouracils -thiourea -thioureas -thir -thiram -thirams -third -thirdhand -thirdly -thirds -thirl -thirlage -thirlages -thirled -thirling -thirls -thirst -thirsted -thirster -thirsters -thirstier -thirstiest -thirstily -thirstiness -thirstinesses -thirsting -thirsts -thirsty -thirteen -thirteens -thirteenth -thirteenths -thirties -thirtieth -thirtieths -thirty -thirtyish -this -thistle -thistledown -thistledowns -thistles -thistlier -thistliest -thistly -thither -thitherto -thitherward -thitherwards -thixotropic -thixotropies -thixotropy -tho -thole -tholed -tholeiite -tholeiites -tholeiitic -tholepin -tholepins -tholes -tholing -tholoi -tholos -thong -thonged -thongs -thoracal -thoraces -thoracic -thoracically -thoracotomies -thoracotomy -thorax -thoraxes -thoria -thorianite -thorianites -thorias -thoric -thorite -thorites -thorium -thoriums -thorn -thornback -thornbacks -thornbush -thornbushes -thorned -thornier -thorniest -thornily -thorniness -thorninesses -thorning -thornless -thornlike -thorns -thorny -thoro -thoron -thorons -thorough -thoroughbass -thoroughbasses -thoroughbrace -thoroughbraces -thoroughbred -thoroughbreds -thorougher -thoroughest -thoroughfare -thoroughfares -thoroughgoing -thoroughly -thoroughness -thoroughnesses -thoroughpin -thoroughpins -thoroughwort -thoroughworts -thorp -thorpe -thorpes -thorps -those -thou -thoued -though -thought -thoughtful -thoughtfully -thoughtfulness -thoughtfulnesses -thoughtless -thoughtlessly -thoughtlessness -thoughtlessnesses -thoughts -thoughtway -thoughtways -thouing -thous -thousand -thousandfold -thousands -thousandth -thousandths -thowless -thraldom -thraldoms -thrall -thralldom -thralldoms -thralled -thralling -thralls -thrash -thrashed -thrasher -thrashers -thrashes -thrashing -thrashings -thrasonical -thrasonically -thrave -thraves -thraw -thrawart -thrawed -thrawing -thrawn -thrawnly -thraws -thread -threadbare -threadbareness -threadbarenesses -threaded -threader -threaders -threadfin -threadfins -threadier -threadiest -threadiness -threadinesses -threading -threadless -threadlike -threads -threadworm -threadworms -thready -threap -threaped -threaper -threapers -threaping -threaps -threat -threated -threaten -threatened -threatener -threateners -threatening -threateningly -threatens -threating -threats -three -threefold -threep -threeped -threepence -threepences -threepenny -threeping -threeps -threes -threescore -threesome -threesomes -threnode -threnodes -threnodic -threnodies -threnodist -threnodists -threnody -threonine -threonines -thresh -threshed -thresher -threshers -threshes -threshing -threshold -thresholds -threw -thrice -thrift -thriftier -thriftiest -thriftily -thriftiness -thriftinesses -thriftless -thriftlessly -thriftlessness -thriftlessnesses -thrifts -thrifty -thrill -thrilled -thriller -thrillers -thrilling -thrillingly -thrills -thrip -thrips -thrive -thrived -thriven -thriver -thrivers -thrives -thriving -thrivingly -thro -throat -throated -throatier -throatiest -throatily -throatiness -throatinesses -throating -throatlatch -throatlatches -throats -throaty -throb -throbbed -throbber -throbbers -throbbing -throbs -throe -throes -thrombi -thrombin -thrombins -thrombocyte -thrombocytes -thrombocytic -thrombocytopenia -thrombocytopenias -thrombocytopenic -thromboembolic -thromboembolism -thromboembolisms -thrombokinase -thrombokinases -thrombolytic -thrombophlebitides -thrombophlebitis -thromboplastic -thromboplastin -thromboplastins -thromboses -thrombosis -thrombotic -thromboxane -thromboxanes -thrombus -throne -throned -thrones -throng -thronged -thronging -throngs -throning -throstle -throstles -throttle -throttleable -throttled -throttlehold -throttleholds -throttler -throttlers -throttles -throttling -through -throughither -throughly -throughother -throughout -throughput -throughputs -throughway -throughways -throve -throw -throwaway -throwaways -throwback -throwbacks -thrower -throwers -throwing -thrown -throws -throwster -throwsters -thru -thrum -thrummed -thrummer -thrummers -thrummier -thrummiest -thrumming -thrummy -thrums -thruput -thruputs -thrush -thrushes -thrust -thrusted -thruster -thrusters -thrustful -thrusting -thrustor -thrustors -thrusts -thruway -thruways -thud -thudded -thudding -thuds -thug -thuggee -thuggees -thuggeries -thuggery -thuggish -thugs -thuja -thujas -thulia -thulias -thulium -thuliums -thumb -thumbed -thumbhole -thumbholes -thumbing -thumbkin -thumbkins -thumbnail -thumbnails -thumbnut -thumbnuts -thumbprint -thumbprints -thumbs -thumbscrew -thumbscrews -thumbsucker -thumbsuckers -thumbtack -thumbtacked -thumbtacking -thumbtacks -thumbwheel -thumbwheels -thump -thumped -thumper -thumpers -thumping -thumps -thunder -thunderbird -thunderbirds -thunderbolt -thunderbolts -thunderclap -thunderclaps -thundercloud -thunderclouds -thundered -thunderer -thunderers -thunderhead -thunderheads -thundering -thunderingly -thunderous -thunderously -thunders -thundershower -thundershowers -thunderstone -thunderstones -thunderstorm -thunderstorms -thunderstricken -thunderstrike -thunderstrikes -thunderstriking -thunderstroke -thunderstrokes -thunderstruck -thundery -thunk -thunked -thunking -thunks -thurible -thuribles -thurifer -thurifers -thurl -thurls -thus -thusly -thuya -thuyas -thwack -thwacked -thwacker -thwackers -thwacking -thwacks -thwart -thwarted -thwarter -thwarters -thwarting -thwartly -thwarts -thwartwise -thy -thylacine -thylacines -thylakoid -thylakoids -thyme -thymectomies -thymectomize -thymectomized -thymectomizes -thymectomizing -thymectomy -thymes -thymey -thymi -thymic -thymidine -thymidines -thymier -thymiest -thymine -thymines -thymocyte -thymocytes -thymol -thymols -thymosin -thymosins -thymus -thymuses -thymy -thyratron -thyratrons -thyreoid -thyristor -thyristors -thyrocalcitonin -thyrocalcitonins -thyroglobulin -thyroglobulins -thyroid -thyroidal -thyroidectomies -thyroidectomized -thyroidectomy -thyroiditis -thyroiditises -thyroids -thyrotoxicoses -thyrotoxicosis -thyrotrophic -thyrotrophin -thyrotrophins -thyrotropic -thyrotropin -thyrotropins -thyroxin -thyroxine -thyroxines -thyroxins -thyrse -thyrses -thyrsi -thyrsoid -thyrsus -thysanuran -thysanurans -thyself -ti -tiara -tiaraed -tiaras -tibia -tibiae -tibial -tibias -tibiofibula -tibiofibulae -tibiofibulas -tic -tical -ticals -tick -ticked -ticker -tickers -ticket -ticketed -ticketing -ticketless -tickets -ticking -tickings -tickle -tickled -tickler -ticklers -tickles -tickling -ticklish -ticklishly -ticklishness -ticklishnesses -ticks -tickseed -tickseeds -ticktack -ticktacked -ticktacking -ticktacks -ticktacktoe -ticktacktoes -ticktock -ticktocked -ticktocking -ticktocks -tics -tictac -tictacked -tictacking -tictacs -tictoc -tictocked -tictocking -tictocs -tidal -tidally -tidbit -tidbits -tiddledywinks -tiddler -tiddlers -tiddly -tiddlywinks -tide -tided -tideland -tidelands -tideless -tidelike -tidemark -tidemarks -tiderip -tiderips -tides -tidewater -tidewaters -tideway -tideways -tidied -tidier -tidiers -tidies -tidiest -tidily -tidiness -tidinesses -tiding -tidings -tidy -tidying -tidytips -tie -tieback -tiebacks -tiebreaker -tiebreakers -tiebreaking -tieclasp -tieclasps -tied -tieing -tieless -tiemannite -tiemannites -tiepin -tiepins -tier -tierce -tierced -tiercel -tiercels -tierces -tiered -tiering -tiers -ties -tiff -tiffanies -tiffany -tiffed -tiffin -tiffined -tiffing -tiffining -tiffins -tiffs -tiger -tigereye -tigereyes -tigerish -tigerishly -tigerishness -tigerishnesses -tigerlike -tigers -tight -tighten -tightened -tightener -tighteners -tightening -tightens -tighter -tightest -tightfisted -tightfistedness -tightfistednesses -tightly -tightness -tightnesses -tightrope -tightropes -tights -tightwad -tightwads -tightwire -tightwires -tiglon -tiglons -tigon -tigons -tigress -tigresses -tigrish -tike -tikes -tiki -tikis -til -tilak -tilaks -tilapia -tilapias -tilburies -tilbury -tilde -tildes -tile -tiled -tilefish -tilefishes -tilelike -tiler -tilers -tiles -tiling -tilings -till -tillable -tillage -tillages -tillandsia -tillandsias -tilled -tiller -tillered -tillering -tillerman -tillermen -tillers -tilling -tillite -tillites -tills -tils -tilt -tiltable -tilted -tilter -tilters -tilth -tilths -tilting -tiltmeter -tiltmeters -tilts -tiltyard -tiltyards -timarau -timaraus -timbal -timbale -timbales -timbals -timber -timberdoodle -timberdoodles -timbered -timberhead -timberheads -timbering -timberings -timberland -timberlands -timberline -timberlines -timberman -timbermen -timbers -timberwork -timberworks -timbral -timbre -timbrel -timbrelled -timbrels -timbres -time -timecard -timecards -timed -timekeeper -timekeepers -timekeeping -timekeepings -timeless -timelessly -timelessness -timelessnesses -timelier -timeliest -timeline -timelines -timeliness -timelinesses -timely -timeous -timeously -timeout -timeouts -timepiece -timepieces -timepleaser -timepleasers -timer -timers -times -timesaver -timesavers -timesaving -timescale -timescales -timeserver -timeservers -timeserving -timeservings -timetable -timetables -timework -timeworker -timeworkers -timeworks -timeworn -timid -timider -timidest -timidities -timidity -timidly -timidness -timidnesses -timing -timings -timocracies -timocracy -timocratic -timocratical -timolol -timolols -timorous -timorously -timorousness -timorousnesses -timothies -timothy -timpana -timpani -timpanist -timpanists -timpano -timpanum -timpanums -tin -tinamou -tinamous -tincal -tincals -tinct -tincted -tincting -tinctorial -tinctorially -tincts -tincture -tinctured -tinctures -tincturing -tinder -tinderbox -tinderboxes -tinders -tindery -tine -tinea -tineal -tineas -tined -tineid -tineids -tines -tinfoil -tinfoils -tinful -tinfuls -ting -tinge -tinged -tingeing -tinges -tinging -tingle -tingled -tingler -tinglers -tingles -tinglier -tingliest -tingling -tinglingly -tingly -tings -tinhorn -tinhorns -tinier -tiniest -tinily -tininess -tininesses -tining -tinker -tinkered -tinkerer -tinkerers -tinkering -tinkers -tinkle -tinkled -tinkler -tinklers -tinkles -tinklier -tinkliest -tinkling -tinklings -tinkly -tinlike -tinman -tinmen -tinned -tinner -tinners -tinnier -tinniest -tinnily -tinniness -tinninesses -tinning -tinnitus -tinnituses -tinny -tinplate -tinplates -tins -tinsel -tinseled -tinseling -tinselled -tinselling -tinselly -tinsels -tinsmith -tinsmithing -tinsmithings -tinsmiths -tinstone -tinstones -tint -tinted -tinter -tinters -tinting -tintings -tintinnabulary -tintinnabulation -tintinnabulations -tintless -tints -tintype -tintypes -tinware -tinwares -tinwork -tinworks -tiny -tip -tipcart -tipcarts -tipcat -tipcats -tipi -tipis -tipless -tipoff -tipoffs -tippable -tipped -tipper -tippers -tippet -tippets -tippier -tippiest -tipping -tipple -tippled -tippler -tipplers -tipples -tippling -tippy -tippytoe -tippytoed -tippytoeing -tippytoes -tips -tipsier -tipsiest -tipsily -tipsiness -tipsinesses -tipstaff -tipstaffs -tipstaves -tipster -tipsters -tipstock -tipstocks -tipsy -tiptoe -tiptoed -tiptoeing -tiptoes -tiptop -tiptops -tirade -tirades -tiramisu -tiramisus -tire -tired -tireder -tiredest -tiredly -tiredness -tirednesses -tireless -tirelessly -tirelessness -tirelessnesses -tires -tiresome -tiresomely -tiresomeness -tiresomenesses -tiring -tirl -tirled -tirling -tirls -tiro -tiros -tirrivee -tirrivees -tis -tisane -tisanes -tissual -tissue -tissued -tissues -tissuey -tissuing -tissular -tit -titan -titanate -titanates -titaness -titanesses -titania -titanias -titanic -titanically -titaniferous -titanism -titanisms -titanite -titanites -titanium -titaniums -titanous -titans -titbit -titbits -titer -titers -titfer -titfers -tithable -tithe -tithed -tither -tithers -tithes -tithing -tithings -tithonia -tithonias -titi -titian -titians -titillate -titillated -titillates -titillating -titillatingly -titillation -titillations -titillative -titis -titivate -titivated -titivates -titivating -titivation -titivations -titlark -titlarks -title -titled -titleholder -titleholders -titles -titling -titlist -titlists -titman -titmen -titmice -titmouse -titrable -titrant -titrants -titratable -titrate -titrated -titrates -titrating -titration -titrations -titrator -titrators -titre -titres -titrimetric -tits -titter -tittered -titterer -titterers -tittering -titters -tittie -titties -tittivate -tittivated -tittivates -tittivating -tittle -tittles -tittup -tittuped -tittuping -tittupped -tittupping -tittuppy -tittups -titty -titular -titularies -titularly -titulars -titulary -tivy -tizzies -tizzy -tmeses -tmesis -to -toad -toadeater -toadeaters -toadfish -toadfishes -toadflax -toadflaxes -toadied -toadies -toadish -toadless -toadlike -toads -toadstone -toadstones -toadstool -toadstools -toady -toadying -toadyish -toadyism -toadyisms -toast -toasted -toaster -toasters -toastier -toastiest -toasting -toastmaster -toastmasters -toastmistress -toastmistresses -toasts -toasty -tobacco -tobaccoes -tobacconist -tobacconists -tobaccos -tobies -toboggan -tobogganed -tobogganer -tobogganers -tobogganing -tobogganings -tobogganist -tobogganists -toboggans -toby -toccata -toccatas -toccate -tocher -tochered -tochering -tochers -tocologies -tocology -tocopherol -tocopherols -tocsin -tocsins -tod -today -todays -toddies -toddle -toddled -toddler -toddlerhood -toddlerhoods -toddlers -toddles -toddling -toddy -todies -tods -tody -toe -toea -toeas -toecap -toecaps -toed -toehold -toeholds -toeing -toeless -toelike -toenail -toenailed -toenailing -toenails -toepiece -toepieces -toeplate -toeplates -toes -toeshoe -toeshoes -toff -toffee -toffees -toffies -toffs -toffy -toft -tofts -tofu -tofus -tog -toga -togae -togaed -togas -togate -togated -together -togetherness -togethernesses -togged -toggeries -toggery -togging -toggle -toggled -toggler -togglers -toggles -toggling -togs -togue -togues -toil -toile -toiled -toiler -toilers -toiles -toilet -toileted -toileting -toiletries -toiletry -toilets -toilette -toilettes -toilful -toilfully -toiling -toils -toilsome -toilsomely -toilsomeness -toilsomenesses -toilworn -toit -toited -toiting -toits -tokamak -tokamaks -tokay -tokays -toke -toked -token -tokened -tokening -tokenism -tokenisms -tokens -toker -tokers -tokes -toking -tokologies -tokology -tokomak -tokomaks -tokonoma -tokonomas -tola -tolan -tolane -tolanes -tolans -tolar -tolarjev -tolars -tolas -tolbooth -tolbooths -tolbutamide -tolbutamides -told -tole -toled -toledo -toledos -tolerabilities -tolerability -tolerable -tolerably -tolerance -tolerances -tolerant -tolerantly -tolerate -tolerated -tolerates -tolerating -toleration -tolerations -tolerative -tolerator -tolerators -toles -tolidin -tolidine -tolidines -tolidins -toling -toll -tollage -tollages -tollbar -tollbars -tollbooth -tollbooths -tolled -toller -tollers -tollgate -tollgates -tollhouse -tollhouses -tolling -tollman -tollmen -tolls -tollway -tollways -tolu -toluate -toluates -toluene -toluenes -toluic -toluid -toluide -toluides -toluidin -toluidine -toluidines -toluidins -toluids -toluol -toluole -toluoles -toluols -tolus -toluyl -toluyls -tolyl -tolyls -tom -tomahawk -tomahawked -tomahawking -tomahawks -tomalley -tomalleys -toman -tomans -tomatillo -tomatillos -tomato -tomatoes -tomatoey -tomb -tombac -tomback -tombacks -tombacs -tombak -tombaks -tombal -tombed -tombing -tombless -tomblike -tombola -tombolas -tombolo -tombolos -tomboy -tomboyish -tomboyishness -tomboyishnesses -tomboys -tombs -tombstone -tombstones -tomcat -tomcats -tomcatted -tomcatting -tomcod -tomcods -tome -tomenta -tomentose -tomentum -tomes -tomfool -tomfooleries -tomfoolery -tomfools -tommed -tommies -tomming -tommy -tommyrot -tommyrots -tomogram -tomograms -tomographic -tomographies -tomography -tomorrow -tomorrows -tompion -tompions -toms -tomtit -tomtits -ton -tonal -tonalities -tonality -tonally -tondi -tondo -tondos -tone -tonearm -tonearms -toned -toneless -tonelessly -tonelessness -tonelessnesses -toneme -tonemes -tonemic -toner -toners -tones -tonetic -tonetically -tonetics -tonette -tonettes -toney -tong -tonga -tongas -tonged -tonger -tongers -tonging -tongman -tongmen -tongs -tongue -tongued -tongueless -tonguelike -tongues -tonguing -tonguings -tonic -tonically -tonicities -tonicity -tonics -tonier -toniest -tonight -tonights -toning -tonish -tonishly -tonlet -tonlets -tonnage -tonnages -tonne -tonneau -tonneaus -tonneaux -tonner -tonners -tonnes -tonnish -tonometer -tonometers -tonometries -tonometry -tonoplast -tonoplasts -tons -tonsil -tonsilar -tonsillar -tonsillectomies -tonsillectomy -tonsillitis -tonsillitises -tonsils -tonsorial -tonsure -tonsured -tonsures -tonsuring -tontine -tontines -tonus -tonuses -tony -too -took -tool -toolbox -toolboxes -tooled -tooler -toolers -toolhead -toolheads -toolholder -toolholders -toolhouse -toolhouses -tooling -toolings -toolless -toolmaker -toolmakers -toolmaking -toolmakings -toolroom -toolrooms -tools -toolshed -toolsheds -toom -toon -toons -toot -tooted -tooter -tooters -tooth -toothache -toothaches -toothbrush -toothbrushes -toothbrushing -toothbrushings -toothed -toothier -toothiest -toothily -toothing -toothless -toothlike -toothpaste -toothpastes -toothpick -toothpicks -tooths -toothsome -toothsomely -toothsomeness -toothsomenesses -toothwort -toothworts -toothy -tooting -tootle -tootled -tootler -tootlers -tootles -tootling -toots -tootses -tootsie -tootsies -tootsy -top -topaz -topazes -topazine -topcoat -topcoats -topcross -topcrosses -topdressing -topdressings -tope -toped -topee -topees -toper -topers -topes -topflight -topful -topfull -topgallant -topgallants -toph -tophe -tophes -tophi -tophs -tophus -topi -topiaries -topiary -topic -topical -topicalities -topicality -topically -topics -toping -topis -topkick -topkicks -topknot -topknots -topless -toplessness -toplessnesses -topline -toplines -toploftical -toploftier -toploftiest -toploftily -toploftiness -toploftinesses -toplofty -topmast -topmasts -topminnow -topminnows -topmost -topnotch -topnotcher -topnotchers -topocentric -topographer -topographers -topographic -topographical -topographically -topographies -topography -topoi -topological -topologically -topologies -topologist -topologists -topology -toponym -toponymic -toponymical -toponymies -toponymist -toponymists -toponyms -toponymy -topos -topotype -topotypes -topped -topper -toppers -topping -toppings -topple -toppled -topples -toppling -tops -topsail -topsails -topside -topsider -topsiders -topsides -topsoil -topsoiled -topsoiling -topsoils -topspin -topspins -topstitch -topstitched -topstitches -topstitching -topstone -topstones -topwork -topworked -topworking -topworks -toque -toques -toquet -toquets -tor -tora -torah -torahs -toras -torc -torch -torchbearer -torchbearers -torched -torchere -torcheres -torches -torchier -torchiers -torchiest -torching -torchlight -torchlights -torchon -torchons -torchwood -torchwoods -torchy -torcs -tore -toreador -toreadors -torero -toreros -tores -toreutic -toreutics -tori -toric -tories -torii -torment -tormented -tormenter -tormenters -tormentil -tormentils -tormenting -tormentor -tormentors -torments -torn -tornadic -tornado -tornadoes -tornados -tornillo -tornillos -toro -toroid -toroidal -toroidally -toroids -toros -torose -torosities -torosity -torot -toroth -torous -torpedo -torpedoed -torpedoes -torpedoing -torpedos -torpid -torpidities -torpidity -torpidly -torpids -torpor -torpors -torquate -torque -torqued -torquer -torquers -torques -torqueses -torquing -torr -torrefied -torrefies -torrefy -torrefying -torrent -torrential -torrentially -torrents -torrid -torrider -torridest -torridities -torridity -torridly -torridness -torridnesses -torrified -torrifies -torrify -torrifying -tors -torsade -torsades -torse -torses -torsi -torsion -torsional -torsionally -torsions -torsk -torsks -torso -torsos -tort -torte -tortellini -tortellinis -torten -tortes -torticollis -torticollises -tortile -tortilla -tortillas -tortious -tortiously -tortoise -tortoises -tortoiseshell -tortoiseshells -tortoni -tortonis -tortricid -tortricids -tortrix -tortrixes -torts -tortuosities -tortuosity -tortuous -tortuously -tortuousness -tortuousnesses -torture -tortured -torturer -torturers -tortures -torturing -torturous -torturously -torula -torulae -torulas -torus -tory -tosh -toshes -toss -tossed -tosser -tossers -tosses -tossing -tosspot -tosspots -tossup -tossups -tost -tostada -tostadas -tostado -tostados -tot -totable -total -totaled -totaling -totalisator -totalisators -totalise -totalised -totalises -totalising -totalism -totalisms -totalist -totalistic -totalists -totalitarian -totalitarianism -totalitarianisms -totalitarianize -totalitarianized -totalitarianizes -totalitarianizing -totalitarians -totalities -totality -totalizator -totalizators -totalize -totalized -totalizer -totalizers -totalizes -totalizing -totalled -totalling -totally -totals -tote -toted -totem -totemic -totemism -totemisms -totemist -totemistic -totemists -totemite -totemites -totems -toter -toters -totes -tother -toting -totipotencies -totipotency -totipotent -tots -totted -totter -tottered -totterer -totterers -tottering -totteringly -totters -tottery -totting -toucan -toucans -touch -touchable -touchback -touchbacks -touchdown -touchdowns -touche -touched -toucher -touchers -touches -touchhole -touchholes -touchier -touchiest -touchily -touchiness -touchinesses -touching -touchingly -touchline -touchlines -touchmark -touchmarks -touchstone -touchstones -touchup -touchups -touchwood -touchwoods -touchy -tough -toughed -toughen -toughened -toughening -toughens -tougher -toughest -toughie -toughies -toughing -toughish -toughly -toughness -toughnesses -toughs -toughy -toupee -toupees -tour -touraco -touracos -tourbillion -tourbillions -tourbillon -tourbillons -toured -tourer -tourers -touring -tourings -tourism -tourisms -tourist -touristic -touristically -tourists -touristy -tourmaline -tourmalines -tournament -tournaments -tournedos -tourney -tourneyed -tourneying -tourneys -tourniquet -tourniquets -tours -touse -toused -touses -tousing -tousle -tousled -tousles -tousling -tout -touted -touter -touters -touting -touts -touzle -touzled -touzles -touzling -tovarich -tovariches -tovarish -tovarishes -tow -towage -towages -toward -towardliness -towardlinesses -towardly -towards -towaway -towaways -towboat -towboats -towed -towel -toweled -towelette -towelettes -toweling -towelings -towelled -towelling -towellings -towels -tower -towered -towerier -toweriest -towering -toweringly -towerlike -towers -towery -towhead -towheaded -towheads -towhee -towhees -towie -towies -towing -towline -towlines -towmond -towmonds -towmont -towmonts -town -townee -townees -townfolk -townhome -townhomes -townhouse -townhouses -townie -townies -townish -townless -townlet -townlets -towns -townscape -townscapes -townsfolk -township -townships -townsman -townsmen -townspeople -townswoman -townswomen -townwear -towny -towpath -towpaths -towrope -towropes -tows -towy -toxaemia -toxaemias -toxaemic -toxaphene -toxaphenes -toxemia -toxemias -toxemic -toxic -toxical -toxicant -toxicants -toxicities -toxicity -toxicologic -toxicological -toxicologically -toxicologies -toxicologist -toxicologists -toxicology -toxicoses -toxicosis -toxics -toxigenic -toxigenicities -toxigenicity -toxin -toxine -toxines -toxins -toxoid -toxoids -toxophilies -toxophilite -toxophilites -toxophily -toxoplasma -toxoplasmas -toxoplasmic -toxoplasmoses -toxoplasmosis -toy -toyed -toyer -toyers -toying -toyish -toyless -toylike -toyo -toyon -toyons -toyos -toys -toyshop -toyshops -trabeate -trabeated -trabeation -trabeations -trabecula -trabeculae -trabecular -trabeculas -trabeculate -trace -traceabilities -traceability -traceable -traced -traceless -tracer -traceried -traceries -tracers -tracery -traces -trachea -tracheae -tracheal -tracheary -tracheas -tracheate -tracheated -tracheid -tracheids -tracheitis -tracheitises -tracheobronchial -tracheolar -tracheole -tracheoles -tracheophyte -tracheophytes -tracheostomies -tracheostomy -tracheotomies -tracheotomy -trachle -trachled -trachles -trachling -trachoma -trachomas -trachyte -trachytes -trachytic -tracing -tracings -track -trackage -trackages -trackball -trackballs -tracked -tracker -trackers -tracking -trackings -tracklayer -tracklayers -tracklaying -tracklayings -trackless -trackman -trackmen -tracks -trackside -tracksides -tracksuit -tracksuits -trackwalker -trackwalkers -trackway -trackways -tract -tractabilities -tractability -tractable -tractableness -tractablenesses -tractably -tractate -tractates -tractile -traction -tractional -tractions -tractive -tractor -tractors -tracts -trad -tradable -trade -tradeable -tradecraft -tradecrafts -traded -trademark -trademarked -trademarking -trademarks -tradeoff -tradeoffs -trader -traders -trades -tradescantia -tradescantias -tradesman -tradesmen -tradespeople -trading -tradition -traditional -traditionalism -traditionalisms -traditionalist -traditionalistic -traditionalists -traditionalize -traditionalized -traditionalizes -traditionalizing -traditionally -traditionary -traditionless -traditions -traditor -traditores -traduce -traduced -traducement -traducements -traducer -traducers -traduces -traducing -traffic -trafficabilities -trafficability -trafficable -trafficked -trafficker -traffickers -trafficking -traffics -tragacanth -tragacanths -tragedian -tragedians -tragedienne -tragediennes -tragedies -tragedy -tragi -tragic -tragical -tragically -tragicomedies -tragicomedy -tragicomic -tragicomical -tragics -tragopan -tragopans -tragus -traik -traiked -traiking -traiks -trail -trailblazer -trailblazers -trailblazing -trailbreaker -trailbreakers -trailed -trailer -trailerable -trailered -trailering -trailerings -trailerist -trailerists -trailerite -trailerites -trailers -trailhead -trailheads -trailing -trailless -trails -trailside -train -trainabilities -trainability -trainable -trainband -trainbands -trainbearer -trainbearers -trained -trainee -trainees -traineeship -traineeships -trainer -trainers -trainful -trainfuls -training -trainings -trainload -trainloads -trainman -trainmen -trains -trainway -trainways -traipse -traipsed -traipses -traipsing -trait -traitor -traitoress -traitoresses -traitorous -traitorously -traitors -traitress -traitresses -traits -traject -trajected -trajecting -trajection -trajections -trajectories -trajectory -trajects -tram -tramcar -tramcars -tramel -trameled -trameling -tramell -tramelled -tramelling -tramells -tramels -tramless -tramline -tramlines -trammed -trammel -trammeled -trammeling -trammelled -trammelling -trammels -tramming -tramontane -tramontanes -tramp -tramped -tramper -trampers -tramping -trampish -trample -trampled -trampler -tramplers -tramples -trampling -trampoline -trampoliner -trampoliners -trampolines -trampolining -trampolinings -trampolinist -trampolinists -tramps -tramroad -tramroads -trams -tramway -tramways -trance -tranced -trancelike -trances -tranche -tranches -trancing -trangam -trangams -trank -tranks -tranq -tranqs -tranquil -tranquiler -tranquilest -tranquilities -tranquility -tranquilize -tranquilized -tranquilizer -tranquilizers -tranquilizes -tranquilizing -tranquiller -tranquillest -tranquillities -tranquillity -tranquillize -tranquillized -tranquillizer -tranquillizers -tranquillizes -tranquillizing -tranquilly -tranquilness -tranquilnesses -trans -transact -transacted -transacting -transactinide -transaction -transactional -transactions -transactor -transactors -transacts -transalpine -transaminase -transaminases -transamination -transaminations -transatlantic -transaxle -transaxles -transceiver -transceivers -transcend -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 -transduce -transduced -transducer -transducers -transduces -transducing -transductant -transductants -transduction -transductional -transductions -transect -transected -transecting -transection -transections -transects -transept -transeptal -transepts -transfect -transfected -transfecting -transfection -transfections -transfects -transfer -transferabilities -transferability -transferable -transferal -transferals -transferase -transferases -transferee -transferees -transference -transferences -transferential -transferor -transferors -transferrable -transferred -transferrer -transferrers -transferrin -transferring -transferrins -transfers -transfiguration -transfigurations -transfigure -transfigured -transfigures -transfiguring -transfinite -transfix -transfixed -transfixes -transfixing -transfixion -transfixions -transfixt -transform -transformable -transformation -transformational -transformationalist -transformationalists -transformationally -transformations -transformative -transformed -transformer -transformers -transforming -transforms -transfusable -transfuse -transfused -transfuses -transfusible -transfusing -transfusion -transfusional -transfusions -transgender -transgendered -transgenerational -transgenic -transgress -transgressed -transgresses -transgressing -transgression -transgressions -transgressive -transgressor -transgressors -tranship -transhipped -transhipping -tranships -transhistorical -transhumance -transhumances -transhumant -transhumants -transience -transiences -transiencies -transiency -transient -transiently -transients -transilluminate -transilluminated -transilluminates -transilluminating -transillumination -transilluminations -transilluminator -transilluminators -transistor -transistorise -transistorised -transistorises -transistorising -transistorization -transistorizations -transistorize -transistorized -transistorizes -transistorizing -transistors -transit -transited -transiting -transition -transitional -transitionally -transitions -transitive -transitively -transitiveness -transitivenesses -transitivities -transitivity -transitorily -transitoriness -transitorinesses -transitory -transits -translatabilities -translatability -translatable -translate -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 -transmit -transmits -transmittable -transmittal -transmittals -transmittance -transmittances -transmitted -transmitter -transmitters -transmitting -transmogrification -transmogrifications -transmogrified -transmogrifies -transmogrify -transmogrifying -transmontane -transmountain -transmutable -transmutation -transmutations -transmutative -transmute -transmuted -transmutes -transmuting -transnational -transnationalism -transnationalisms -transnatural -transoceanic -transom -transoms -transonic -transpacific -transparence -transparences -transparencies -transparency -transparent -transparentize -transparentized -transparentizes -transparentizing -transparently -transparentness -transparentnesses -transpersonal -transpicuous -transpierce -transpierced -transpierces -transpiercing -transpiration -transpirational -transpirations -transpire -transpired -transpires -transpiring -transplacental -transplacentally -transplant -transplantabilities -transplantability -transplantable -transplantation -transplantations -transplanted -transplanter -transplanters -transplanting -transplants -transpolar -transponder -transponders -transpontine -transport -transportabilities -transportability -transportable -transportation -transportational -transportations -transported -transportee -transportees -transporter -transporters -transporting -transports -transposable -transpose -transposed -transposes -transposing -transposition -transpositional -transpositions -transposon -transposons -transsexual -transsexualism -transsexualisms -transsexualities -transsexuality -transsexuals -transshape -transshaped -transshapes -transshaping -transship -transshipment -transshipments -transshipped -transshipping -transships -transsonic -transthoracic -transthoracically -transubstantial -transubstantiate -transubstantiated -transubstantiates -transubstantiating -transubstantiation -transubstantiations -transudate -transudates -transudation -transudations -transude -transuded -transudes -transuding -transuranic -transuranics -transuranium -transvaluate -transvaluated -transvaluates -transvaluating -transvaluation -transvaluations -transvalue -transvalued -transvalues -transvaluing -transversal -transversals -transverse -transversely -transverses -transvestism -transvestisms -transvestite -transvestites -trap -trapan -trapanned -trapanning -trapans -trapball -trapballs -trapdoor -trapdoors -trapes -trapesed -trapeses -trapesing -trapeze -trapezes -trapezia -trapezii -trapezist -trapezists -trapezium -trapeziums -trapezius -trapeziuses -trapezohedra -trapezohedron -trapezohedrons -trapezoid -trapezoidal -trapezoids -traplike -trapline -traplines -trapnest -trapnested -trapnesting -trapnests -trappean -trapped -trapper -trappers -trapping -trappings -trappose -trappous -traprock -traprocks -traps -trapshooter -trapshooters -trapshooting -trapshootings -trapt -trapunto -trapuntos -trash -trashed -trashes -trashier -trashiest -trashily -trashiness -trashinesses -trashing -trashman -trashmen -trashy -trass -trasses -trattoria -trattorias -trattorie -trauchle -trauchled -trauchles -trauchling -trauma -traumas -traumata -traumatic -traumatically -traumatise -traumatised -traumatises -traumatising -traumatism -traumatisms -traumatization -traumatizations -traumatize -traumatized -traumatizes -traumatizing -travail -travailed -travailing -travails -trave -travel -traveled -traveler -travelers -traveling -travelled -traveller -travellers -travelling -travelog -travelogs -travelogue -travelogues -travels -traversable -traversal -traversals -traverse -traversed -traverser -traversers -traverses -traversing -travertine -travertines -traves -travestied -travesties -travesty -travestying -travois -travoise -travoises -trawl -trawled -trawler -trawlerman -trawlermen -trawlers -trawley -trawleys -trawling -trawlnet -trawlnets -trawls -tray -trayful -trayfuls -trays -treacheries -treacherous -treacherously -treacherousness -treacherousnesses -treachery -treacle -treacles -treacly -tread -treaded -treader -treaders -treading -treadle -treadled -treadler -treadlers -treadles -treadless -treadling -treadmill -treadmills -treads -treason -treasonable -treasonably -treasonous -treasons -treasurable -treasure -treasured -treasurer -treasurers -treasurership -treasurerships -treasures -treasuries -treasuring -treasury -treat -treatabilities -treatability -treatable -treated -treater -treaters -treaties -treating -treatise -treatises -treatment -treatments -treats -treaty -treble -trebled -trebles -trebling -trebly -trebuchet -trebuchets -trebucket -trebuckets -trecento -trecentos -treddle -treddled -treddles -treddling -tredecillion -tredecillions -tree -treed -treehopper -treehoppers -treeing -treelawn -treelawns -treeless -treelike -treen -treenail -treenails -treens -treenware -treenwares -trees -treetop -treetops -tref -trefah -trefoil -trefoils -trehala -trehalas -trehalose -trehaloses -treillage -treillages -trek -trekked -trekker -trekkers -trekking -treks -trellis -trellised -trellises -trellising -trelliswork -trellisworks -trematode -trematodes -tremble -trembled -trembler -tremblers -trembles -tremblier -trembliest -trembling -trembly -tremendous -tremendously -tremendousness -tremendousnesses -tremolite -tremolites -tremolitic -tremolo -tremolos -tremor -tremors -tremulant -tremulous -tremulously -tremulousness -tremulousnesses -trenail -trenails -trench -trenchancies -trenchancy -trenchant -trenchantly -trenched -trencher -trencherman -trenchermen -trenchers -trenches -trenching -trend -trended -trendier -trendies -trendiest -trendily -trendiness -trendinesses -trending -trends -trendsetter -trendsetters -trendsetting -trendy -trepan -trepanation -trepanations -trepang -trepangs -trepanned -trepanning -trepans -trephination -trephinations -trephine -trephined -trephines -trephining -trepid -trepidant -trepidation -trepidations -treponema -treponemal -treponemas -treponemata -treponematoses -treponematosis -treponeme -treponemes -trespass -trespassed -trespasser -trespassers -trespasses -trespassing -tress -tressed -tressel -tressels -tresses -tressier -tressiest -tressour -tressours -tressure -tressures -tressy -trestle -trestles -trestlework -trestleworks -tret -tretinoin -tretinoins -trets -trevet -trevets -trews -trey -treys -triable -triac -triacetate -triacetates -triacid -triacids -triacs -triad -triadic -triadically -triadics -triadism -triadisms -triads -triage -triaged -triages -triaging -trial -trialogue -trialogues -trials -triamcinolone -triamcinolones -triangle -triangles -triangular -triangularities -triangularity -triangularly -triangulate -triangulated -triangulates -triangulating -triangulation -triangulations -triarchies -triarchy -triathlete -triathletes -triathlon -triathlons -triatomic -triaxial -triaxialities -triaxiality -triazin -triazine -triazines -triazins -triazole -triazoles -tribade -tribades -tribadic -tribal -tribalism -tribalisms -tribally -tribasic -tribe -tribes -tribesman -tribesmen -tribespeople -triboelectric -triboelectricities -triboelectricity -tribological -tribologies -tribologist -tribologists -tribology -triboluminescence -triboluminescences -triboluminescent -tribrach -tribrachic -tribrachs -tribulate -tribulated -tribulates -tribulating -tribulation -tribulations -tribunal -tribunals -tribunate -tribunates -tribune -tribunes -tribuneship -tribuneships -tributaries -tributary -tribute -tributes -tricarboxylic -trice -triced -triceps -tricepses -triceratops -triceratopses -trices -trichiases -trichiasis -trichina -trichinae -trichinal -trichinas -trichinize -trichinized -trichinizes -trichinizing -trichinoses -trichinosis -trichinous -trichite -trichites -trichlorfon -trichlorfons -trichloroethylene -trichloroethylenes -trichlorphon -trichlorphons -trichocyst -trichocysts -trichogyne -trichogynes -trichoid -trichologies -trichologist -trichologists -trichology -trichome -trichomes -trichomonacidal -trichomonacide -trichomonacides -trichomonad -trichomonads -trichomonal -trichomoniases -trichomoniasis -trichopteran -trichopterans -trichothecene -trichothecenes -trichotomies -trichotomous -trichotomously -trichotomy -trichromat -trichromatic -trichromatism -trichromatisms -trichromats -tricing -trick -tricked -tricker -trickeries -trickers -trickery -trickie -trickier -trickiest -trickily -trickiness -trickinesses -tricking -trickish -trickishly -trickishness -trickishnesses -trickle -trickled -trickledown -trickles -tricklier -trickliest -trickling -trickly -tricks -tricksier -tricksiest -tricksiness -tricksinesses -trickster -tricksters -tricksy -tricky -triclad -triclads -triclinia -triclinic -triclinium -tricolette -tricolettes -tricolor -tricolored -tricolors -tricorn -tricorne -tricornered -tricornes -tricorns -tricot -tricotine -tricotines -tricots -trictrac -trictracs -tricuspid -tricuspids -tricycle -tricycles -tricyclic -tricyclics -trident -tridents -tridimensional -tridimensionalities -tridimensionality -triduum -triduums -tried -triene -trienes -triennia -triennial -triennially -triennials -triennium -trienniums -triens -trientes -trier -trierarch -trierarchies -trierarchs -trierarchy -triers -tries -triethyl -trifecta -trifectas -trifid -trifle -trifled -trifler -triflers -trifles -trifling -triflings -trifluoperazine -trifluoperazines -trifluralin -trifluralins -trifocal -trifocals -trifold -trifoliate -trifoliolate -trifolium -trifoliums -triforia -triforium -triform -trifurcate -trifurcated -trifurcates -trifurcating -trifurcation -trifurcations -trig -trigeminal -trigeminals -trigged -trigger -triggered -triggerfish -triggerfishes -triggering -triggerman -triggermen -triggers -triggest -trigging -trigly -triglyceride -triglycerides -triglyph -triglyphic -triglyphical -triglyphs -trigness -trignesses -trigo -trigon -trigonal -trigonally -trigonometric -trigonometrical -trigonometrically -trigonometries -trigonometry -trigons -trigos -trigram -trigrams -trigraph -trigraphic -trigraphs -trigs -trihalomethane -trihalomethanes -trihedra -trihedral -trihedrals -trihedron -trihedrons -trihybrid -trihybrids -trihydroxy -triiodothyronine -triiodothyronines -trijet -trijets -trike -trikes -trilateral -trilbies -trilby -trilinear -trilingual -trilingually -triliteral -triliteralism -triliteralisms -triliterals -trill -trilled -triller -trillers -trilling -trillion -trillions -trillionth -trillionths -trillium -trilliums -trills -trilobal -trilobate -trilobed -trilobite -trilobites -trilogies -trilogy -trim -trimaran -trimarans -trimer -trimeric -trimerous -trimers -trimester -trimesters -trimeter -trimeters -trimethoprim -trimethoprims -trimetrogon -trimetrogons -trimly -trimmed -trimmer -trimmers -trimmest -trimming -trimmings -trimness -trimnesses -trimonthly -trimorph -trimorphic -trimorphs -trimotor -trimotors -trims -trinal -trinary -trindle -trindled -trindles -trindling -trine -trined -trines -trining -trinitarian -trinities -trinitrotoluene -trinitrotoluenes -trinity -trinket -trinketed -trinketer -trinketers -trinketing -trinketries -trinketry -trinkets -trinkums -trinocular -trinodal -trinomial -trinomials -trinucleotide -trinucleotides -trio -triode -triodes -triol -triolet -triolets -triols -trios -triose -trioses -trioxid -trioxide -trioxides -trioxids -trip -tripack -tripacks -tripart -tripartite -tripe -tripedal -tripes -triphase -triphenylmethane -triphenylmethanes -triphosphate -triphosphates -triphthong -triphthongal -triphthongs -tripinnate -tripinnately -triplane -triplanes -triple -tripled -triples -triplet -tripletail -tripletails -triplets -triplex -triplexes -triplicate -triplicated -triplicates -triplicating -triplication -triplications -triplicities -triplicity -tripling -triplite -triplites -triploblastic -triploid -triploidies -triploids -triploidy -triply -tripod -tripodal -tripodic -tripodies -tripods -tripody -tripoli -tripolis -tripos -triposes -tripped -tripper -trippers -trippet -trippets -trippier -trippiest -tripping -trippingly -trippings -trippy -trips -triptane -triptanes -triptyca -triptycas -triptych -triptychs -tripwire -tripwires -triquetrous -triradiate -trireme -triremes -trisaccharide -trisaccharides -triscele -trisceles -trisect -trisected -trisecting -trisection -trisections -trisector -trisectors -trisects -triseme -trisemes -trisemic -trishaw -trishaws -triskaidekaphobia -triskaidekaphobias -triskele -triskeles -triskelia -triskelion -triskelions -trismic -trismus -trismuses -trisoctahedra -trisoctahedron -trisoctahedrons -trisome -trisomes -trisomic -trisomics -trisomies -trisomy -tristate -triste -tristearin -tristearins -tristeza -tristezas -tristful -tristfully -tristfulness -tristfulnesses -tristich -tristichs -tristimulus -trisubstituted -trisulfide -trisulfides -trisyllabic -trisyllable -trisyllables -trite -tritely -triteness -tritenesses -triter -tritest -tritheism -tritheisms -tritheist -tritheistic -tritheistical -tritheists -trithing -trithings -tritiated -triticale -triticales -triticum -triticums -tritium -tritiums -tritoma -tritomas -triton -tritone -tritones -tritons -triturable -triturate -triturated -triturates -triturating -trituration -triturations -triturator -triturators -triumph -triumphal -triumphalism -triumphalisms -triumphalist -triumphalists -triumphant -triumphantly -triumphed -triumphing -triumphs -triumvir -triumvirate -triumvirates -triumviri -triumvirs -triune -triunes -triunities -triunity -trivalent -trivalve -trivalves -trivet -trivets -trivia -trivial -trivialise -trivialised -trivialises -trivialising -trivialist -trivialists -trivialities -triviality -trivialization -trivializations -trivialize -trivialized -trivializes -trivializing -trivially -trivium -triweeklies -triweekly -troak -troaked -troaking -troaks -trocar -trocars -trochaic -trochaics -trochal -trochanter -trochanteral -trochanteric -trochanters -trochar -trochars -troche -trochee -trochees -troches -trochil -trochili -trochils -trochilus -trochlea -trochleae -trochlear -trochlears -trochleas -trochoid -trochoidal -trochoids -trochophore -trochophores -trock -trocked -trocking -trocks -trod -trodden -trode -troffer -troffers -troglodyte -troglodytes -troglodytic -trogon -trogons -troika -troikas -troilism -troilisms -troilite -troilites -troilus -troiluses -trois -troke -troked -trokes -troking -troland -trolands -troll -trolled -troller -trollers -trolley -trolleybus -trolleybuses -trolleybusses -trolleyed -trolleying -trolleys -trollied -trollies -trolling -trollings -trollop -trollops -trollopy -trolls -trolly -trollying -trombone -trombones -trombonist -trombonists -trommel -trommels -tromp -trompe -tromped -trompes -tromping -tromps -trona -tronas -trone -trones -troop -trooped -trooper -troopers -troopial -troopials -trooping -troops -troopship -troopships -trooz -trop -trope -tropes -trophallaxes -trophallaxis -trophic -trophically -trophied -trophies -trophoblast -trophoblastic -trophoblasts -trophozoite -trophozoites -trophy -trophying -tropic -tropical -tropicalize -tropicalized -tropicalizes -tropicalizing -tropically -tropics -tropin -tropine -tropines -tropins -tropism -tropisms -tropistic -tropocollagen -tropocollagens -tropologic -tropological -tropologically -tropomyosin -tropomyosins -troponin -troponins -tropopause -tropopauses -troposphere -tropospheres -tropospheric -tropotaxes -tropotaxis -trot -troth -trothed -trothing -trothplight -trothplighted -trothplighting -trothplights -troths -trotline -trotlines -trots -trotted -trotter -trotters -trotting -trotyl -trotyls -troubadour -troubadours -trouble -troubled -troublemaker -troublemakers -troublemaking -troublemakings -troubler -troublers -troubles -troubleshoot -troubleshooter -troubleshooters -troubleshooting -troubleshoots -troubleshot -troublesome -troublesomely -troublesomeness -troublesomenesses -troubling -troublous -troublously -troublousness -troublousnesses -trough -troughs -trounce -trounced -trouncer -trouncers -trounces -trouncing -troupe -trouped -trouper -troupers -troupes -troupial -troupials -trouping -trouser -trousers -trousseau -trousseaus -trousseaux -trout -troutier -troutiest -trouts -trouty -trouvere -trouveres -trouveur -trouveurs -trove -trover -trovers -troves -trow -trowed -trowel -troweled -troweler -trowelers -troweling -trowelled -trowelling -trowels -trowing -trows -trowsers -trowth -trowths -troy -troys -truancies -truancy -truant -truanted -truanting -truantries -truantry -truants -truce -truced -truces -trucing -truck -truckage -truckages -trucked -trucker -truckers -truckful -truckfuls -trucking -truckings -truckle -truckled -truckler -trucklers -truckles -truckline -trucklines -truckling -truckload -truckloads -truckman -truckmaster -truckmasters -truckmen -trucks -truculence -truculences -truculencies -truculency -truculent -truculently -trudge -trudged -trudgen -trudgens -trudgeon -trudgeons -trudger -trudgers -trudges -trudging -true -trueblue -trueblues -trueborn -truebred -trued -truehearted -trueheartedness -trueheartednesses -trueing -truelove -trueloves -trueness -truenesses -truepennies -truepenny -truer -trues -truest -truffe -truffes -truffle -truffled -truffles -trug -trugs -truing -truism -truisms -truistic -trull -trulls -truly -trumeau -trumeaux -trump -trumped -trumperies -trumpery -trumpet -trumpeted -trumpeter -trumpeters -trumpeting -trumpetlike -trumpets -trumping -trumps -truncate -truncated -truncates -truncating -truncation -truncations -truncheon -truncheoned -truncheoning -truncheons -trundle -trundled -trundler -trundlers -trundles -trundling -trunk -trunked -trunkfish -trunkfishes -trunkful -trunkfuls -trunks -trunksful -trunnel -trunnels -trunnion -trunnions -truss -trussed -trusser -trussers -trusses -trussing -trussings -trust -trustabilities -trustability -trustable -trustbuster -trustbusters -trusted -trustee -trusteed -trusteeing -trustees -trusteeship -trusteeships -truster -trusters -trustful -trustfully -trustfulness -trustfulnesses -trustier -trusties -trustiest -trustily -trustiness -trustinesses -trusting -trustingly -trustingness -trustingnesses -trustless -trustor -trustors -trusts -trustworthily -trustworthiness -trustworthinesses -trustworthy -trusty -truth -truthful -truthfully -truthfulness -truthfulnesses -truths -try -trying -tryingly -tryma -trymata -tryout -tryouts -trypanosome -trypanosomes -trypanosomiases -trypanosomiasis -trypsin -trypsinogen -trypsinogens -trypsins -tryptamine -tryptamines -tryptic -tryptophan -tryptophane -tryptophanes -tryptophans -trysail -trysails -tryst -tryste -trysted -tryster -trysters -trystes -trysting -trysts -tryworks -tsade -tsades -tsadi -tsadis -tsar -tsardom -tsardoms -tsarevna -tsarevnas -tsarina -tsarinas -tsarism -tsarisms -tsarist -tsarists -tsaritza -tsaritzas -tsars -tsatske -tsatskes -tsetse -tsetses -tsimmes -tsimmeses -tsk -tsked -tsking -tsks -tsktsk -tsktsked -tsktsking -tsktsks -tsooris -tsores -tsoris -tsorriss -tsouris -tsuba -tsunami -tsunamic -tsunamis -tsuris -tsutsugamushi -tsutsugamushis -tuatara -tuataras -tuatera -tuateras -tub -tuba -tubae -tubaist -tubaists -tubal -tubas -tubate -tubbable -tubbed -tubber -tubbers -tubbier -tubbiest -tubbing -tubby -tube -tubed -tubeless -tubelike -tubenose -tubenoses -tuber -tubercle -tubercles -tubercular -tuberculars -tuberculate -tuberculated -tuberculin -tuberculins -tuberculoid -tuberculoses -tuberculosis -tuberculous -tuberoid -tuberose -tuberoses -tuberosities -tuberosity -tuberous -tubers -tubes -tubework -tubeworks -tubful -tubfuls -tubifex -tubifexes -tubificid -tubificids -tubiform -tubing -tubings -tubist -tubists -tublike -tubocurarine -tubocurarines -tubs -tubular -tubulate -tubulated -tubulates -tubulating -tubule -tubules -tubulin -tubulins -tubulose -tubulous -tubulure -tubulures -tuchun -tuchuns -tuck -tuckahoe -tuckahoes -tucked -tucker -tuckered -tuckering -tuckers -tucket -tuckets -tucking -tucks -tuckshop -tuckshops -tufa -tufaceous -tufas -tuff -tuffaceous -tuffet -tuffets -tuffs -tufoli -tuft -tufted -tufter -tufters -tuftier -tuftiest -tuftily -tufting -tufts -tufty -tug -tugboat -tugboats -tugged -tugger -tuggers -tugging -tughrik -tughriks -tugless -tugrik -tugriks -tugs -tui -tuille -tuilles -tuis -tuition -tuitional -tuitions -tuladi -tuladis -tularemia -tularemias -tularemic -tule -tules -tulip -tulips -tulipwood -tulipwoods -tulle -tulles -tullibee -tullibees -tumble -tumblebug -tumblebugs -tumbled -tumbledown -tumbler -tumblerful -tumblerfuls -tumblers -tumbles -tumbleweed -tumbleweeds -tumbling -tumblings -tumbrel -tumbrels -tumbril -tumbrils -tumefaction -tumefactions -tumefied -tumefies -tumefy -tumefying -tumescence -tumescences -tumescent -tumid -tumidities -tumidity -tumidly -tummies -tummler -tummlers -tummy -tumor -tumoral -tumorigeneses -tumorigenesis -tumorigenic -tumorigenicities -tumorigenicity -tumorlike -tumorous -tumors -tumour -tumours -tump -tumped -tumping -tumpline -tumplines -tumps -tumular -tumuli -tumulose -tumulous -tumult -tumults -tumultuary -tumultuous -tumultuously -tumultuousness -tumultuousnesses -tumulus -tumuluses -tun -tuna -tunabilities -tunability -tunable -tunableness -tunablenesses -tunably -tunas -tundish -tundishes -tundra -tundras -tune -tuneable -tuneably -tuned -tuneful -tunefully -tunefulness -tunefulnesses -tuneless -tunelessly -tuner -tuners -tunes -tunesmith -tunesmiths -tuneup -tuneups -tung -tungs -tungstate -tungstates -tungsten -tungstens -tungstic -tunic -tunica -tunicae -tunicate -tunicated -tunicates -tunicle -tunicles -tunics -tuning -tunings -tunnage -tunnages -tunned -tunnel -tunneled -tunneler -tunnelers -tunneling -tunnelled -tunnellike -tunnelling -tunnels -tunnies -tunning -tunny -tuns -tup -tupelo -tupelos -tupik -tupiks -tupped -tuppence -tuppences -tuppenny -tupping -tups -tuque -tuques -turaco -turacos -turacou -turacous -turban -turbaned -turbanned -turbans -turbaries -turbary -turbellarian -turbellarians -turbeth -turbeths -turbid -turbidimeter -turbidimeters -turbidimetric -turbidimetrically -turbidimetries -turbidimetry -turbidite -turbidites -turbidities -turbidity -turbidly -turbidness -turbidnesses -turbinal -turbinals -turbinate -turbinated -turbinates -turbine -turbines -turbit -turbith -turbiths -turbits -turbo -turbocar -turbocars -turbocharged -turbocharger -turbochargers -turboelectric -turbofan -turbofans -turbogenerator -turbogenerators -turbojet -turbojets -turbomachineries -turbomachinery -turboprop -turboprops -turbos -turboshaft -turboshafts -turbot -turbots -turbulence -turbulences -turbulencies -turbulency -turbulent -turbulently -turd -turdine -turds -tureen -tureens -turf -turfed -turfier -turfiest -turfing -turfless -turflike -turfman -turfmen -turfs -turfski -turfskiing -turfskiings -turfskis -turfy -turgencies -turgency -turgent -turgescence -turgescences -turgescent -turgid -turgidities -turgidity -turgidly -turgidness -turgidnesses -turgite -turgites -turgor -turgors -turista -turistas -turk -turkey -turkeys -turkois -turkoises -turks -turmeric -turmerics -turmoil -turmoiled -turmoiling -turmoils -turn -turnable -turnabout -turnabouts -turnaround -turnarounds -turnbuckle -turnbuckles -turncoat -turncoats -turndown -turndowns -turned -turner -turneries -turners -turnery -turnhall -turnhalls -turning -turnings -turnip -turnips -turnkey -turnkeys -turnoff -turnoffs -turnon -turnons -turnout -turnouts -turnover -turnovers -turnpike -turnpikes -turns -turnsole -turnsoles -turnspit -turnspits -turnstile -turnstiles -turnstone -turnstones -turntable -turntables -turnup -turnups -turnverein -turnvereins -turophile -turophiles -turpentine -turpentined -turpentines -turpentining -turpeth -turpeths -turpitude -turpitudes -turps -turquois -turquoise -turquoises -turret -turreted -turrets -turrical -turtle -turtleback -turtlebacks -turtled -turtledove -turtledoves -turtlehead -turtleheads -turtleneck -turtlenecked -turtlenecks -turtler -turtlers -turtles -turtling -turtlings -turves -tusche -tusches -tush -tushed -tushes -tushie -tushies -tushing -tushy -tusk -tusked -tusker -tuskers -tusking -tuskless -tusklike -tusks -tussah -tussahs -tussal -tussar -tussars -tusseh -tussehs -tusser -tussers -tusses -tussis -tussises -tussive -tussle -tussled -tussles -tussling -tussock -tussocks -tussocky -tussor -tussore -tussores -tussors -tussuck -tussucks -tussur -tussurs -tut -tutee -tutees -tutelage -tutelages -tutelar -tutelaries -tutelars -tutelary -tutor -tutorage -tutorages -tutored -tutoress -tutoresses -tutorial -tutorials -tutoring -tutors -tutorship -tutorships -tutoyed -tutoyer -tutoyered -tutoyering -tutoyers -tuts -tutted -tutti -tutties -tutting -tuttis -tutty -tutu -tutus -tux -tuxedo -tuxedoed -tuxedoes -tuxedos -tuxes -tuyer -tuyere -tuyeres -tuyers -twa -twaddle -twaddled -twaddler -twaddlers -twaddles -twaddling -twae -twaes -twain -twains -twang -twanged -twanger -twangers -twangier -twangiest -twanging -twangle -twangled -twangler -twanglers -twangles -twangling -twangs -twangy -twankies -twanky -twas -twasome -twasomes -twat -twats -twattle -twattled -twattles -twattling -twayblade -twayblades -tweak -tweaked -tweakier -tweakiest -tweaking -tweaks -tweaky -twee -tweed -tweedier -tweediest -tweediness -tweedinesses -tweedle -tweedled -tweedles -tweedling -tweeds -tweedy -tween -tweenies -tweeny -tweet -tweeted -tweeter -tweeters -tweeting -tweets -tweeze -tweezed -tweezer -tweezers -tweezes -tweezing -twelfth -twelfths -twelve -twelvemo -twelvemonth -twelvemonths -twelvemos -twelves -twenties -twentieth -twentieths -twenty -twerp -twerps -twibil -twibill -twibills -twibils -twice -twiddle -twiddled -twiddler -twiddlers -twiddles -twiddlier -twiddliest -twiddling -twiddly -twier -twiers -twig -twigged -twiggen -twiggier -twiggiest -twigging -twiggy -twigless -twiglike -twigs -twilight -twilights -twilit -twill -twilled -twilling -twillings -twills -twin -twinberries -twinberry -twinborn -twine -twined -twiner -twiners -twines -twinflower -twinflowers -twinge -twinged -twingeing -twinges -twinging -twinier -twiniest -twinight -twining -twinjet -twinjets -twinkle -twinkled -twinkler -twinklers -twinkles -twinkling -twinklings -twinkly -twinned -twinning -twinnings -twins -twinset -twinsets -twinship -twinships -twiny -twirl -twirled -twirler -twirlers -twirlier -twirliest -twirling -twirls -twirly -twirp -twirps -twist -twisted -twister -twisters -twistier -twistiest -twisting -twistings -twists -twisty -twit -twitch -twitched -twitcher -twitchers -twitches -twitchier -twitchiest -twitchily -twitching -twitchy -twits -twitted -twitter -twittered -twittering -twitters -twittery -twitting -twixt -two -twofer -twofers -twofold -twofolds -twopence -twopences -twopenny -twos -twosome -twosomes -twyer -twyers -tycoon -tycoons -tye -tyee -tyees -tyer -tyers -tyes -tyin -tying -tyiyn -tyke -tykes -tylosin -tylosins -tymbal -tymbals -tympan -tympana -tympanal -tympani -tympanic -tympanies -tympanist -tympanists -tympanites -tympanitic -tympano -tympans -tympanum -tympanums -tympany -tyne -tyned -tynes -tyning -typable -typal -type -typeable -typebar -typebars -typecase -typecases -typecast -typecasting -typecasts -typed -typeface -typefaces -typefounder -typefounders -typefounding -typefoundings -types -typescript -typescripts -typeset -typesets -typesetter -typesetters -typesetting -typesettings -typestyle -typestyles -typewrite -typewriter -typewriters -typewrites -typewriting -typewritings -typewritten -typewrote -typey -typhlosole -typhlosoles -typhoid -typhoids -typhon -typhonic -typhons -typhoon -typhoons -typhose -typhous -typhus -typhuses -typic -typical -typicalities -typicality -typically -typicalness -typicalnesses -typier -typiest -typification -typifications -typified -typifier -typifiers -typifies -typify -typifying -typing -typist -typists -typo -typograph -typographed -typographer -typographers -typographic -typographical -typographically -typographies -typographing -typographs -typography -typological -typologically -typologies -typologist -typologists -typology -typos -typp -typps -typy -tyramine -tyramines -tyrannic -tyrannical -tyrannically -tyrannicalness -tyrannicalnesses -tyrannicide -tyrannicides -tyrannies -tyrannise -tyrannised -tyrannises -tyrannising -tyrannize -tyrannized -tyrannizer -tyrannizers -tyrannizes -tyrannizing -tyrannosaur -tyrannosaurs -tyrannosaurus -tyrannosauruses -tyrannous -tyrannously -tyranny -tyrant -tyrants -tyre -tyred -tyres -tyring -tyro -tyrocidin -tyrocidine -tyrocidines -tyrocidins -tyronic -tyros -tyrosinase -tyrosinases -tyrosine -tyrosines -tyrothricin -tyrothricins -tythe -tythed -tythes -tything -tzaddik -tzaddikim -tzar -tzardom -tzardoms -tzarevna -tzarevnas -tzarina -tzarinas -tzarism -tzarisms -tzarist -tzarists -tzaritza -tzaritzas -tzars -tzetze -tzetzes -tzigane -tziganes -tzimmes -tzimmeses -tzitzis -tzitzit -tzitzith -tzuris -ubieties -ubiety -ubique -ubiquinone -ubiquinones -ubiquities -ubiquitous -ubiquitously -ubiquitousness -ubiquitousnesses -ubiquity -udder -udders -udo -udometer -udometers -udometries -udometry -udos -ufological -ufologies -ufologist -ufologists -ufology -ugh -ughs -uglier -uglies -ugliest -uglification -uglifications -uglified -uglifier -uglifiers -uglifies -uglify -uglifying -uglily -ugliness -uglinesses -ugly -ugsome -uh -uhlan -uhlans -uintahite -uintahites -uintaite -uintaites -ukase -ukases -uke -ukelele -ukeleles -ukes -ukulele -ukuleles -ulama -ulamas -ulan -ulans -ulcer -ulcerate -ulcerated -ulcerates -ulcerating -ulceration -ulcerations -ulcerative -ulcered -ulcering -ulcerogenic -ulcerous -ulcers -ulema -ulemas -ulexite -ulexites -ullage -ullaged -ullages -ulna -ulnad -ulnae -ulnar -ulnas -ulpan -ulpanim -ulpans -ulster -ulsters -ulterior -ulteriorly -ultima -ultimacies -ultimacy -ultimas -ultimata -ultimate -ultimated -ultimately -ultimateness -ultimatenesses -ultimates -ultimating -ultimatum -ultimatums -ultimo -ultimogeniture -ultimogenitures -ultra -ultrabasic -ultrabasics -ultracareful -ultracasual -ultracautious -ultracentrifugal -ultracentrifugally -ultracentrifugation -ultracentrifugations -ultracentrifuge -ultracentrifuged -ultracentrifuges -ultracentrifuging -ultrachic -ultracivilized -ultraclean -ultracold -ultracommercial -ultracompact -ultracompetent -ultraconservatism -ultraconservatisms -ultraconservative -ultraconservatives -ultracontemporaries -ultracontemporary -ultraconvenient -ultracool -ultracritical -ultrademocratic -ultradense -ultradistance -ultradistances -ultradistant -ultradry -ultraefficient -ultraenergetic -ultraexclusive -ultrafamiliar -ultrafast -ultrafastidious -ultrafeminine -ultrafiche -ultrafiches -ultrafiltrate -ultrafiltrates -ultrafiltration -ultrafiltrations -ultrafine -ultraglamorous -ultrahazardous -ultraheat -ultraheated -ultraheating -ultraheats -ultraheavy -ultrahigh -ultrahip -ultrahot -ultrahuman -ultraism -ultraisms -ultraist -ultraistic -ultraists -ultraleft -ultraleftism -ultraleftisms -ultraleftist -ultraleftists -ultraliberal -ultraliberalism -ultraliberalisms -ultraliberals -ultralight -ultralights -ultralightweight -ultralow -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 -ultrapure -ultraquiet -ultraradical -ultraradicals -ultrarapid -ultrarare -ultrararefied -ultrarational -ultrarealism -ultrarealisms -ultrarealist -ultrarealistic -ultrarealists -ultrared -ultrareds -ultrarefined -ultrareliable -ultrarespectable -ultrarevolutionaries -ultrarevolutionary -ultrarich -ultraright -ultrarightist -ultrarightists -ultraromantic -ultraroyalist -ultraroyalists -ultras -ultrasafe -ultrasecret -ultrasegregationist -ultrasegregationists -ultrasensitive -ultraserious -ultrasharp -ultrashort -ultrasimple -ultraslick -ultraslow -ultrasmall -ultrasmart -ultrasmooth -ultrasoft -ultrasonic -ultrasonically -ultrasonics -ultrasonographer -ultrasonographers -ultrasonographic -ultrasonographies -ultrasonography -ultrasophisticated -ultrasound -ultrasounds -ultrastructural -ultrastructurally -ultrastructure -ultrastructures -ultrathin -ultravacua -ultravacuum -ultravacuums -ultraviolence -ultraviolences -ultraviolent -ultraviolet -ultraviolets -ultravirile -ultravirilities -ultravirility -ultrawide -ulu -ululant -ululate -ululated -ululates -ululating -ululation -ululations -ulus -ulva -ulvas -um -umangite -umangites -umbel -umbeled -umbellar -umbellate -umbelled -umbellet -umbellets -umbellifer -umbelliferous -umbellifers -umbels -umber -umbered -umbering -umbers -umbilical -umbilicals -umbilicate -umbilicated -umbilication -umbilications -umbilici -umbilicus -umbilicuses -umbles -umbo -umbonal -umbonate -umbones -umbonic -umbos -umbra -umbrae -umbrage -umbrageous -umbrageously -umbrageousness -umbrageousnesses -umbrages -umbral -umbras -umbrella -umbrellaed -umbrellaing -umbrellas -umbrette -umbrettes -umiac -umiack -umiacks -umiacs -umiak -umiaks -umiaq -umiaqs -umlaut -umlauted -umlauting -umlauts -umm -ump -umped -umping -umpirage -umpirages -umpire -umpired -umpires -umpiring -umps -umpteen -umpteenth -umteenth -un -unabashed -unabashedly -unabated -unabatedly -unabbreviated -unable -unabraded -unabridged -unabsorbed -unabsorbent -unabused -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 -unactable -unacted -unactorish -unadaptable -unadapted -unaddressed -unadjudicated -unadjusted -unadmired -unadmitted -unadoptable -unadorned -unadult -unadulterated -unadulteratedly -unadventurous -unadvertised -unadvised -unadvisedly -unaesthetic -unaffected -unaffectedly -unaffectedness -unaffectednesses -unaffecting -unaffectionate -unaffectionately -unaffiliated -unaffluent -unaffordable -unafraid -unaged -unageing -unaggressive -unagile -unaging -unai -unaided -unaimed -unaired -unais -unakin -unakite -unakites -unalienable -unalienated -unaligned -unalike -unalleviated -unallied -unallocated -unalloyed -unalluring -unalterabilities -unalterability -unalterable -unalterableness -unalterablenesses -unalterably -unaltered -unambiguous -unambiguously -unambitious -unambivalent -unambivalently -unamenable -unamended -unamiable -unamortized -unamplified -unamused -unamusing -unanalyzable -unanalyzed -unanchor -unanchored -unanchoring -unanchors -unaneled -unanesthetized -unanimities -unanimity -unanimous -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 -unapt -unaptly -unaptness -unaptnesses -unarguable -unarguably -unargued -unarm -unarmed -unarming -unarmored -unarms -unarrogant -unartful -unarticulated -unartistic -unary -unashamed -unashamedly -unasked -unaspirated -unassailabilities -unassailability -unassailable -unassailableness -unassailablenesses -unassailably -unassailed -unassembled -unassertive -unassertively -unassigned -unassimilable -unassimilated -unassisted -unassociated -unassuageable -unassuaged -unassuming -unassumingness -unassumingnesses -unathletic -unatoned -unattached -unattainable -unattended -unattenuated -unattested -unattractive -unattractively -unattractiveness -unattractivenesses -unattributable -unattributed -unattuned -unau -unaudited -unaus -unauthentic -unauthorized -unautomated -unavailabilities -unavailability -unavailable -unavailing -unavailingly -unavailingness -unavailingnesses -unavenged -unaverage -unavoidable -unavoidably -unavowed -unawaked -unawakened -unawarded -unaware -unawarely -unawareness -unawarenesses -unawares -unawed -unawesome -unbacked -unbaked -unbalance -unbalanced -unbalances -unbalancing -unballasted -unban -unbandage -unbandaged -unbandages -unbandaging -unbanned -unbanning -unbans -unbaptized -unbar -unbarbed -unbarbered -unbarred -unbarricaded -unbarring -unbars -unbased -unbated -unbathed -unbe -unbear -unbearable -unbearably -unbeared -unbearing -unbears -unbeatable -unbeatably -unbeaten -unbeautiful -unbeautifully -unbecoming -unbecomingly -unbecomingness -unbecomingnesses -unbefitting -unbeholden -unbeknown -unbeknownst -unbelief -unbeliefs -unbelievable -unbelievably -unbeliever -unbelievers -unbelieving -unbelievingly -unbelligerent -unbeloved -unbelt -unbelted -unbelting -unbelts -unbemused -unbend -unbendable -unbended -unbending -unbends -unbenign -unbent -unbeseeming -unbiased -unbiasedness -unbiasednesses -unbiblical -unbid -unbidden -unbilled -unbind -unbinding -unbinds -unbitted -unbitten -unbitter -unblamed -unbleached -unblemished -unblenched -unblended -unblessed -unblest -unblinded -unblinking -unblinkingly -unblock -unblocked -unblocking -unblocks -unblooded -unbloodied -unbloody -unblushing -unblushingly -unbodied -unbolt -unbolted -unbolting -unbolts -unboned -unbonnet -unbonneted -unbonneting -unbonnets -unbookish -unborn -unbosom -unbosomed -unbosoming -unbosoms -unbought -unbouncy -unbound -unbounded -unboundedness -unboundednesses -unbowdlerized -unbowed -unbox -unboxed -unboxes -unboxing -unbrace -unbraced -unbraces -unbracing -unbracketed -unbraid -unbraided -unbraiding -unbraids -unbrake -unbraked -unbrakes -unbraking -unbranched -unbranded -unbreachable -unbreakable -unbreathable -unbred -unbreech -unbreeched -unbreeches -unbreeching -unbridgeable -unbridged -unbridle -unbridled -unbridles -unbridling -unbriefed -unbright -unbrilliant -unbroke -unbroken -unbruised -unbrushed -unbuckle -unbuckled -unbuckles -unbuckling -unbudgeable -unbudgeably -unbudgeted -unbudging -unbudgingly -unbuffered -unbuild -unbuildable -unbuilding -unbuilds -unbuilt -unbulky -unbundle -unbundled -unbundles -unbundling -unburden -unburdened -unburdening -unburdens -unbureaucratic -unburied -unburnable -unburned -unburnt -unbusinesslike -unbusted -unbusy -unbuttered -unbutton -unbuttoned -unbuttoning -unbuttons -uncage -uncaged -uncages -uncaging -uncake -uncaked -uncakes -uncaking -uncalcified -uncalcined -uncalculated -uncalculating -uncalibrated -uncalled -uncalloused -uncanceled -uncandid -uncandidly -uncannier -uncanniest -uncannily -uncanniness -uncanninesses -uncanny -uncanonical -uncap -uncapitalized -uncapped -uncapping -uncaps -uncaptioned -uncapturable -uncaring -uncarpeted -uncase -uncased -uncases -uncashed -uncasing -uncasked -uncastrated -uncataloged -uncatchable -uncatchy -uncategorizable -uncaught -uncaused -unceasing -unceasingly -uncelebrated -uncensored -uncensorious -uncensured -unceremonious -unceremoniously -unceremoniousness -unceremoniousnesses -uncertain -uncertainly -uncertainness -uncertainnesses -uncertainties -uncertainty -uncertified -unchain -unchained -unchaining -unchains -unchallengeable -unchallenged -unchallenging -unchancy -unchangeabilities -unchangeability -unchangeable -unchangeableness -unchangeablenesses -unchangeably -unchanged -unchanging -unchangingly -unchangingness -unchangingnesses -unchanneled -unchaperoned -uncharacteristic -uncharacteristically -uncharge -uncharged -uncharges -uncharging -uncharismatic -uncharitable -uncharitableness -uncharitablenesses -uncharitably -uncharming -uncharted -unchartered -unchary -unchaste -unchastely -unchasteness -unchastenesses -unchastities -unchastity -unchauvinistic -uncheckable -unchecked -unchewable -unchewed -unchic -unchicly -unchildlike -unchivalrous -unchivalrously -unchlorinated -unchoke -unchoked -unchokes -unchoking -unchoreographed -unchosen -unchristened -unchristian -unchronicled -unchronological -unchurch -unchurched -unchurches -unchurching -unchurchly -unci -uncia -unciae -uncial -uncially -uncials -unciform -unciforms -unciliated -uncinal -uncinariases -uncinariasis -uncinate -uncinematic -uncini -uncinus -uncirculated -uncircumcised -uncircumcision -uncircumcisions -uncivil -uncivilized -uncivilly -unclad -unclaimed -unclamp -unclamped -unclamping -unclamps -unclarified -unclarities -unclarity -unclasp -unclasped -unclasping -unclasps -unclassical -unclassifiable -unclassified -uncle -unclean -uncleaned -uncleaner -uncleanest -uncleanliness -uncleanlinesses -uncleanly -uncleanness -uncleannesses -unclear -unclearer -unclearest -unclench -unclenched -unclenches -unclenching -uncles -uncliched -unclimbable -unclimbableness -unclimbablenesses -unclinch -unclinched -unclinches -unclinching -unclip -unclipped -unclipping -unclips -uncloak -uncloaked -uncloaking -uncloaks -unclog -unclogged -unclogging -unclogs -unclose -unclosed -uncloses -unclosing -unclothe -unclothed -unclothes -unclothing -uncloud -unclouded -uncloudedly -unclouding -unclouds -uncloyed -uncloying -unclubbable -unclutter -uncluttered -uncluttering -unclutters -unco -uncoalesce -uncoalesced -uncoalesces -uncoalescing -uncoated -uncoating -uncock -uncocked -uncocking -uncocks -uncoded -uncodified -uncoerced -uncoercive -uncoercively -uncoffin -uncoffined -uncoffining -uncoffins -uncoil -uncoiled -uncoiling -uncoils -uncoined -uncollected -uncollectible -uncollectibles -uncolored -uncombative -uncombed -uncombined -uncomely -uncomfortable -uncomfortably -uncomic -uncommercial -uncommercialized -uncommitted -uncommon -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 -unconcern -unconcerned -unconcernedly -unconcernedness -unconcernednesses -unconcerns -unconditional -unconditionally -unconditioned -unconfessed -unconfined -unconfirmed -unconformable -unconformably -unconformities -unconformity -unconfounded -unconfuse -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 -uncooked -uncool -uncooled -uncooperative -uncoordinated -uncopyrightable -uncork -uncorked -uncorking -uncorks -uncorrectable -uncorrected -uncorrelated -uncorroborated -uncorrupt -uncorseted -uncos -uncountable -uncounted -uncouple -uncoupled -uncoupler -uncouplers -uncouples -uncoupling -uncourageous -uncouth -uncouthly -uncouthness -uncouthnesses -uncovenanted -uncover -uncovered -uncovering -uncovers -uncoy -uncracked -uncrate -uncrated -uncrates -uncrating -uncrazy -uncreate -uncreated -uncreates -uncreating -uncreative -uncredentialed -uncredited -uncrippled -uncritical -uncritically -uncropped -uncross -uncrossable -uncrossed -uncrosses -uncrossing -uncrowded -uncrown -uncrowned -uncrowning -uncrowns -uncrumple -uncrumpled -uncrumples -uncrumpling -uncrushable -uncrystallized -unction -unctions -unctuous -unctuously -unctuousness -unctuousnesses -uncuff -uncuffed -uncuffing -uncuffs -uncultivable -uncultivated -uncultured -uncurb -uncurbed -uncurbing -uncurbs -uncured -uncurious -uncurl -uncurled -uncurling -uncurls -uncurrent -uncursed -uncurtained -uncus -uncustomarily -uncustomary -uncut -uncute -uncynical -uncynically -undamaged -undamped -undanceable -undaring -undated -undauntable -undaunted -undauntedly -unde -undead -undebatable -undebatably -undecadent -undeceive -undeceived -undeceives -undeceiving -undecidabilities -undecidability -undecidable -undecided -undecideds -undecillion -undecillions -undecipherable -undeciphered -undecked -undeclared -undecomposed -undecorated -undedicated -undee -undefeated -undefended -undefiled -undefinable -undefined -undefoliated -undeformed -undelegated -undeliverable -undelivered -undeluded -undemanding -undemocratic -undemocratically -undemonstrative -undemonstratively -undemonstrativeness -undemonstrativenesses -undeniable -undeniableness -undeniablenesses -undeniably -undenied -undenominational -undependable -under -underachieve -underachieved -underachievement -underachievements -underachiever -underachievers -underachieves -underachieving -underact -underacted -underacting -underactive -underactivities -underactivity -underacts -underage -underages -underappreciated -underarm -underarms -underate -underbellies -underbelly -underbid -underbidder -underbidders -underbidding -underbids -underbodies -underbody -underboss -underbosses -underbought -underbred -underbrim -underbrims -underbrush -underbrushes -underbud -underbudded -underbudding -underbudgeted -underbuds -underbuy -underbuying -underbuys -undercapitalized -undercard -undercards -undercarriage -undercarriages -undercharge -undercharged -undercharges -undercharging -underclass -underclasses -underclassman -underclassmen -underclothes -underclothing -underclothings -undercoat -undercoating -undercoatings -undercoats -undercool -undercooled -undercooling -undercools -undercount -undercounted -undercounting -undercounts -undercover -undercroft -undercrofts -undercurrent -undercurrents -undercut -undercuts -undercutting -underdeveloped -underdevelopment -underdevelopments -underdid -underdo -underdoes -underdog -underdogs -underdoing -underdone -underdrawers -undereat -undereaten -undereating -undereats -undereducated -underemphases -underemphasis -underemphasize -underemphasized -underemphasizes -underemphasizing -underemployed -underemployment -underemployments -underestimate -underestimated -underestimates -underestimating -underestimation -underestimations -underexpose -underexposed -underexposes -underexposing -underexposure -underexposures -underfed -underfeed -underfeeding -underfeeds -underfinanced -underflow -underflows -underfoot -underfund -underfunded -underfunding -underfunds -underfur -underfurs -undergarment -undergarments -undergird -undergirded -undergirding -undergirds -undergirt -underglaze -underglazes -undergo -undergod -undergods -undergoes -undergoing -undergone -undergrad -undergrads -undergraduate -undergraduates -underground -undergrounder -undergrounders -undergrounds -undergrowth -undergrowths -underhand -underhanded -underhandedly -underhandedness -underhandednesses -underinflated -underinflation -underinflations -underinsured -underinvestment -underinvestments -underjaw -underjaws -underlaid -underlain -underlap -underlapped -underlapping -underlaps -underlay -underlaying -underlayment -underlayments -underlays -underlet -underlets -underletting -underlie -underlies -underline -underlined -underlines -underling -underlings -underlining -underlip -underlips -underlit -underlying -underlyingly -undermanned -undermine -undermined -undermines -undermining -undermost -underneath -undernourished -undernourishment -undernourishments -undernutrition -undernutritions -underpaid -underpainting -underpaintings -underpants -underpart -underparts -underpass -underpasses -underpay -underpaying -underpayment -underpayments -underpays -underpin -underpinned -underpinning -underpinnings -underpins -underplay -underplayed -underplaying -underplays -underplot -underplots -underpopulated -underpowered -underprepared -underprice -underpriced -underprices -underpricing -underprivileged -underproduction -underproductions -underproof -underpublicized -underqualified -underran -underrate -underrated -underrates -underrating -underreact -underreacted -underreacting -underreacts -underreport -underreported -underreporting -underreports -underrepresentation -underrepresentations -underrepresented -underrun -underrunning -underruns -undersaturated -underscore -underscored -underscores -underscoring -undersea -underseas -undersecretaries -undersecretary -undersell -underselling -undersells -underserved -underset -undersets -undersexed -undersheriff -undersheriffs -undershirt -undershirted -undershirts -undershoot -undershooting -undershoots -undershorts -undershot -undershrub -undershrubs -underside -undersides -undersigned -undersize -undersized -underskirt -underskirts -underslung -undersold -underspin -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 -undertake -undertaken -undertaker -undertakers -undertakes -undertaking -undertakings -undertax -undertaxed -undertaxes -undertaxing -undertenant -undertenants -underthrust -underthrusting -underthrusts -undertone -undertones -undertook -undertow -undertows -undertrick -undertricks -underused -underutilization -underutilizations -underutilize -underutilized -underutilizes -underutilizing -undervaluation -undervaluations -undervalue -undervalued -undervalues -undervaluing -underwater -underway -underwear -underweight -underweights -underwent -underwhelm -underwhelmed -underwhelming -underwhelms -underwing -underwings -underwire -underwires -underwood -underwoods -underwool -underwools -underworld -underworlds -underwrite -underwriter -underwriters -underwrites -underwriting -underwritten -underwrote -undescended -undescribable -undeserved -undeserving -undesignated -undesigning -undesirabilities -undesirability -undesirable -undesirableness -undesirablenesses -undesirables -undesirably -undesired -undetectable -undetected -undeterminable -undetermined -undeterred -undeveloped -undeviating -undeviatingly -undevout -undiagnosable -undiagnosed -undialectical -undid -undidactic -undies -undifferentiated -undigested -undigestible -undignified -undiluted -undiminished -undimmed -undine -undines -undiplomatic -undiplomatically -undirected -undischarged -undisciplined -undisclosed -undiscouraged -undiscoverable -undiscovered -undiscriminating -undiscussed -undisguised -undisguisedly -undismayed -undisputable -undisputed -undissociated -undissolved -undistinguished -undistorted -undistracted -undistributed -undisturbed -undivided -undo -undoable -undocile -undock -undocked -undocking -undocks -undoctored -undoctrinaire -undocumented -undoer -undoers -undoes -undogmatic -undogmatically -undoing -undoings -undomestic -undomesticated -undone -undotted -undouble -undoubled -undoubles -undoubling -undoubtable -undoubted -undoubtedly -undoubting -undrained -undramatic -undramatically -undramatized -undrape -undraped -undrapes -undraping -undraw -undrawing -undrawn -undraws -undreamed -undreamt -undress -undressed -undresses -undressing -undrest -undrew -undried -undrilled -undrinkable -undrunk -undubbed -undue -undulant -undular -undulate -undulated -undulates -undulating -undulation -undulations -undulatory -undulled -unduly -unduplicated -undutiful -undutifully -undutifulness -undutifulnesses -undy -undyed -undying -undynamic -uneager -unearmarked -unearned -unearth -unearthed -unearthing -unearthliness -unearthlinesses -unearthly -unearths -unease -uneases -uneasier -uneasiest -uneasily -uneasiness -uneasinesses -uneasy -uneatable -uneaten -uneccentric -unecological -uneconomic -uneconomical -unedible -unedifying -unedited -uneducable -uneducated -unelaborate -unelectable -unelected -unelectrified -unembarrassed -unembellished -unembittered -unemotional -unemotionally -unemphatic -unemphatically -unempirical -unemployabilities -unemployability -unemployable -unemployables -unemployed -unemployeds -unemployment -unemployments -unenchanted -unenclosed -unencouraging -unencumbered -unendearing -unended -unending -unendingly -unendurable -unendurableness -unendurablenesses -unendurably -unenforceable -unenforced -unenlarged -unenlightened -unenlightening -unenriched -unenterprising -unenthusiastic -unenthusiastically -unenviable -unenvied -unenvious -unequal -unequaled -unequalled -unequally -unequals -unequipped -unequivocably -unequivocal -unequivocally -unerased -unerotic -unerring -unerringly -unescapable -unescorted -unessential -unestablished -unesthetic -unethical -unevaded -unevaluated -uneven -unevener -unevenest -unevenly -unevenness -unevennesses -uneventful -uneventfully -uneventfulness -uneventfulnesses -unevolved -unexamined -unexampled -unexcelled -unexceptionable -unexceptionableness -unexceptionablenesses -unexceptionably -unexceptional -unexcitable -unexcited -unexciting -unexcused -unexercised -unexotic -unexpected -unexpectedly -unexpectedness -unexpectednesses -unexpended -unexpert -unexpired -unexplainable -unexplained -unexploded -unexploited -unexplored -unexposed -unexpressed -unexpressive -unexpurgated -unextraordinary -unfaded -unfading -unfadingly -unfailing -unfailingly -unfair -unfairer -unfairest -unfairly -unfairness -unfairnesses -unfaith -unfaithful -unfaithfully -unfaithfulness -unfaithfulnesses -unfaiths -unfaked -unfallen -unfalsifiable -unfaltering -unfalteringly -unfamiliar -unfamiliarities -unfamiliarity -unfamiliarly -unfamous -unfancy -unfashionable -unfashionableness -unfashionablenesses -unfashionably -unfasten -unfastened -unfastening -unfastens -unfastidious -unfathered -unfathomable -unfavorable -unfavorableness -unfavorablenesses -unfavorably -unfavorite -unfazed -unfeared -unfeasible -unfed -unfeeling -unfeelingly -unfeelingness -unfeelingnesses -unfeigned -unfeignedly -unfelt -unfeminine -unfence -unfenced -unfences -unfencing -unfermented -unfertile -unfertilized -unfetter -unfettered -unfettering -unfetters -unfilial -unfilially -unfilled -unfilmed -unfiltered -unfindable -unfinished -unfired -unfished -unfit -unfitly -unfitness -unfitnesses -unfits -unfitted -unfitting -unfix -unfixed -unfixes -unfixing -unfixt -unflagging -unflaggingly -unflamboyant -unflappabilities -unflappability -unflappable -unflappably -unflashy -unflattering -unflatteringly -unfledged -unflexed -unflinching -unflinchingly -unflyable -unfocused -unfocussed -unfoiled -unfold -unfolded -unfolder -unfolders -unfolding -unfoldment -unfoldments -unfolds -unfond -unforced -unforeseeable -unforeseen -unforested -unforged -unforgettable -unforgettably -unforgivable -unforgiven -unforgiving -unforgivingness -unforgivingnesses -unforgot -unforked -unformed -unformulated -unforthcoming -unfortified -unfortunate -unfortunately -unfortunates -unfossiliferous -unfought -unfound -unfounded -unframed -unfree -unfreed -unfreedom -unfreedoms -unfreeing -unfrees -unfreeze -unfreezes -unfreezing -unfrequented -unfriended -unfriendlier -unfriendliest -unfriendliness -unfriendlinesses -unfriendly -unfrivolous -unfrock -unfrocked -unfrocking -unfrocks -unfroze -unfrozen -unfruitful -unfruitfully -unfruitfulness -unfruitfulnesses -unfulfillable -unfulfilled -unfunded -unfunny -unfurl -unfurled -unfurling -unfurls -unfurnished -unfused -unfussily -unfussy -ungainlier -ungainliest -ungainliness -ungainlinesses -ungainly -ungallant -ungallantly -ungalled -ungarnished -ungenerosities -ungenerosity -ungenerous -ungenerously -ungenial -ungenteel -ungentle -ungentlemanly -ungently -ungentrified -ungerminated -ungifted -ungimmicky -ungird -ungirded -ungirding -ungirds -ungirt -unglamorized -unglamorous -unglazed -unglove -ungloved -ungloves -ungloving -unglue -unglued -unglues -ungluing -ungodlier -ungodliest -ungodliness -ungodlinesses -ungodly -ungot -ungotten -ungovernable -ungowned -ungraced -ungraceful -ungracefully -ungracious -ungraciously -ungraciousness -ungraciousnesses -ungraded -ungrammatical -ungrammaticalities -ungrammaticality -ungraspable -ungrateful -ungratefully -ungratefulness -ungratefulnesses -ungreedy -unground -ungrounded -ungrouped -ungrudging -ungual -unguard -unguarded -unguardedly -unguardedness -unguardednesses -unguarding -unguards -unguent -unguenta -unguents -unguentum -ungues -unguessable -unguided -unguis -ungula -ungulae -ungular -ungulate -ungulates -unhackneyed -unhailed -unhair -unhaired -unhairing -unhairs -unhallow -unhallowed -unhallowing -unhallows -unhalved -unhampered -unhand -unhanded -unhandicapped -unhandier -unhandiest -unhandily -unhandiness -unhandinesses -unhanding -unhands -unhandsome -unhandsomely -unhandy -unhang -unhanged -unhanging -unhangs -unhappier -unhappiest -unhappily -unhappiness -unhappinesses -unhappy -unharmed -unharness -unharnessed -unharnesses -unharnessing -unharvested -unhasty -unhat -unhatched -unhats -unhatted -unhatting -unhealed -unhealthful -unhealthier -unhealthiest -unhealthily -unhealthiness -unhealthinesses -unhealthy -unheard -unheated -unhedged -unheeded -unheeding -unhelm -unhelmed -unhelming -unhelms -unhelped -unhelpful -unhelpfully -unheralded -unheroic -unhesitating -unhesitatingly -unhewn -unhindered -unhinge -unhinged -unhinges -unhinging -unhip -unhired -unhistorical -unhitch -unhitched -unhitches -unhitching -unholier -unholiest -unholily -unholiness -unholinesses -unholy -unhomogenized -unhonored -unhood -unhooded -unhooding -unhoods -unhook -unhooked -unhooking -unhooks -unhoped -unhopeful -unhorse -unhorsed -unhorses -unhorsing -unhouse -unhoused -unhouseled -unhouses -unhousing -unhuman -unhumorous -unhung -unhurried -unhurriedly -unhurt -unhusk -unhusked -unhusking -unhusks -unhydrolyzed -unhygienic -unhyphenated -unhysterical -unhysterically -unialgal -uniaxial -unicameral -unicamerally -unicellular -unicolor -unicorn -unicorns -unicycle -unicycles -unicyclist -unicyclists -unideaed -unideal -unidentifiable -unidentified -unideological -unidimensional -unidimensionalities -unidimensionality -unidiomatic -unidirectional -unidirectionally -uniface -unifaces -unifiable -unific -unification -unifications -unified -unifier -unifiers -unifies -unifilar -unifoliate -unifoliolate -uniform -uniformed -uniformer -uniformest -uniforming -uniformitarian -uniformitarianism -uniformitarianisms -uniformitarians -uniformities -uniformity -uniformly -uniformness -uniformnesses -uniforms -unify -unifying -unignorable -unilateral -unilaterally -unilineal -unilinear -unilingual -unilluminating -unillusioned -unilobed -unilocular -unimaginable -unimaginably -unimaginative -unimaginatively -unimbued -unimmunized -unimpaired -unimpassioned -unimpeachable -unimpeachably -unimpeded -unimplemented -unimportance -unimportances -unimportant -unimposing -unimpressed -unimpressive -unimproved -unincorporated -unindexed -unindicted -unindustrialized -uninfected -uninflated -uninflected -uninfluenced -uninformative -uninformatively -uninformed -uningratiating -uninhabitable -uninhabited -uninhibited -uninhibitedly -uninhibitedness -uninhibitednesses -uninitiate -uninitiated -uninitiates -uninjured -uninoculated -uninspected -uninspired -uninspiring -uninstructed -uninstructive -uninsulated -uninsurable -uninsured -unintegrated -unintellectual -unintelligent -unintelligently -unintelligibilities -unintelligibility -unintelligible -unintelligibleness -unintelligiblenesses -unintelligibly -unintended -unintentional -unintentionally -uninterest -uninterested -uninteresting -uninterests -uninterrupted -uninterruptedly -unintimidated -uninucleate -uninventive -uninvited -uninviting -uninvolved -union -unionisation -unionisations -unionise -unionised -unionises -unionising -unionism -unionisms -unionist -unionists -unionization -unionizations -unionize -unionized -unionizes -unionizing -unions -uniparental -uniparentally -unipod -unipods -unipolar -unique -uniquely -uniqueness -uniquenesses -uniquer -uniques -uniquest -unironed -unironically -unirradiated -unirrigated -unisex -unisexes -unisexual -unisexualities -unisexuality -unison -unisonal -unisons -unissued -unit -unitage -unitages -unitard -unitards -unitarian -unitarianism -unitarianisms -unitarians -unitarily -unitary -unite -united -unitedly -uniter -uniters -unites -unities -uniting -unitive -unitization -unitizations -unitize -unitized -unitizer -unitizers -unitizes -unitizing -unitrust -unitrusts -units -unity -univalent -univalents -univalve -univalves -univariate -universal -universalism -universalisms -universalist -universalistic -universalists -universalities -universality -universalization -universalizations -universalize -universalized -universalizes -universalizing -universally -universalness -universalnesses -universals -universe -universes -universities -university -univocal -univocally -univocals -unjaded -unjam -unjammed -unjamming -unjams -unjoined -unjoint -unjointed -unjointing -unjoints -unjoyful -unjudged -unjust -unjustifiable -unjustifiably -unjustified -unjustly -unjustness -unjustnesses -unkempt -unkend -unkenned -unkennel -unkenneled -unkenneling -unkennelled -unkennelling -unkennels -unkent -unkept -unkind -unkinder -unkindest -unkindlier -unkindliest -unkindliness -unkindlinesses -unkindly -unkindness -unkindnesses -unkingly -unkink -unkinked -unkinking -unkinks -unkissed -unknit -unknits -unknitted -unknitting -unknot -unknots -unknotted -unknotting -unknowabilities -unknowability -unknowable -unknowing -unknowingly -unknowings -unknowledgeable -unknown -unknowns -unkosher -unlabeled -unlace -unlaced -unlaces -unlacing -unlade -unladed -unladen -unlades -unlading -unladylike -unlaid -unlamented -unlash -unlashed -unlashes -unlashing -unlatch -unlatched -unlatches -unlatching -unlaundered -unlawful -unlawfully -unlawfulness -unlawfulnesses -unlay -unlaying -unlays -unlead -unleaded -unleading -unleads -unlearn -unlearnable -unlearned -unlearning -unlearns -unlearnt -unleased -unleash -unleashed -unleashes -unleashing -unleavened -unled -unless -unlet -unlethal -unletted -unlettered -unlevel -unleveled -unleveling -unlevelled -unlevelling -unlevels -unlevied -unliberated -unlicensed -unlicked -unlikable -unlike -unlikelier -unlikeliest -unlikelihood -unlikelihoods -unlikeliness -unlikelinesses -unlikely -unlikeness -unlikenesses -unlimber -unlimbered -unlimbering -unlimbers -unlimited -unlimitedly -unlined -unlink -unlinked -unlinking -unlinks -unlisted -unlistenable -unlit -unliterary -unlivable -unlive -unlived -unlively -unlives -unliving -unload -unloaded -unloader -unloaders -unloading -unloads -unlobed -unlocalized -unlock -unlocked -unlocking -unlocks -unloose -unloosed -unloosen -unloosened -unloosening -unloosens -unlooses -unloosing -unlovable -unloved -unlovelier -unloveliest -unloveliness -unlovelinesses -unlovely -unloving -unluckier -unluckiest -unluckily -unluckiness -unluckinesses -unlucky -unlyrical -unmacho -unmade -unmagnified -unmake -unmaker -unmakers -unmakes -unmaking -unmalicious -unmaliciously -unman -unmanageable -unmanageably -unmanaged -unmanful -unmanipulated -unmanlier -unmanliest -unmanliness -unmanlinesses -unmanly -unmanned -unmannered -unmanneredly -unmannerliness -unmannerlinesses -unmannerly -unmanning -unmans -unmapped -unmarked -unmarketable -unmarred -unmarried -unmarrieds -unmasculine -unmask -unmasked -unmasker -unmaskers -unmasking -unmasks -unmatchable -unmatched -unmated -unmatted -unmeaning -unmeant -unmeasurable -unmeasured -unmechanized -unmediated -unmedicated -unmeet -unmeetly -unmellow -unmelodious -unmelodiousness -unmelodiousnesses -unmelted -unmemorable -unmemorably -unmended -unmentionable -unmentionables -unmentioned -unmerciful -unmercifully -unmerited -unmerry -unmesh -unmeshed -unmeshes -unmeshing -unmet -unmetabolized -unmew -unmewed -unmewing -unmews -unmilitary -unmilled -unmindful -unmined -unmingle -unmingled -unmingles -unmingling -unmistakable -unmistakably -unmiter -unmitered -unmitering -unmiters -unmitigated -unmitigatedly -unmitigatedness -unmitigatednesses -unmitre -unmitred -unmitres -unmitring -unmix -unmixable -unmixed -unmixes -unmixing -unmixt -unmodernized -unmodifiable -unmodified -unmodish -unmold -unmolded -unmolding -unmolds -unmolested -unmolten -unmonitored -unmoor -unmoored -unmooring -unmoors -unmoral -unmoralities -unmorality -unmotivated -unmounted -unmourned -unmovable -unmoved -unmoving -unmown -unmuffle -unmuffled -unmuffles -unmuffling -unmusical -unmuzzle -unmuzzled -unmuzzles -unmuzzling -unmyelinated -unnail -unnailed -unnailing -unnails -unnameable -unnamed -unnatural -unnaturally -unnaturalness -unnaturalnesses -unnecessarily -unnecessary -unneeded -unnegotiable -unnerve -unnerved -unnerves -unnerving -unnervingly -unneurotic -unnewsworthy -unnilhexium -unnilhexiums -unnilpentium -unnilpentiums -unnilquadium -unnilquadiums -unnoisy -unnoted -unnoticeable -unnoticed -unnourishing -unnumbered -unobjectionable -unobservable -unobservant -unobserved -unobstructed -unobtainable -unobtrusive -unobtrusively -unobtrusiveness -unobtrusivenesses -unoccupied -unofficial -unofficially -unoiled -unopen -unopenable -unopened -unopposed -unordered -unorganized -unoriginal -unornamented -unornate -unorthodox -unorthodoxies -unorthodoxly -unorthodoxy -unostentatious -unostentatiously -unowned -unoxygenated -unpack -unpacked -unpacker -unpackers -unpacking -unpacks -unpaged -unpaid -unpainted -unpaired -unpalatabilities -unpalatability -unpalatable -unparalleled -unparasitized -unpardonable -unparented -unparliamentary -unparted -unpassable -unpasteurized -unpastoral -unpatentable -unpatriotic -unpaved -unpaying -unpedantic -unpeeled -unpeg -unpegged -unpegging -unpegs -unpen -unpenned -unpenning -unpens -unpent -unpeople -unpeopled -unpeoples -unpeopling -unperceived -unperceptive -unperfect -unperformable -unperformed -unperson -unpersons -unpersuaded -unpersuasive -unperturbed -unpick -unpicked -unpicking -unpicks -unpicturesque -unpile -unpiled -unpiles -unpiling -unpin -unpinned -unpinning -unpins -unpitied -unplaced -unplait -unplaited -unplaiting -unplaits -unplanned -unplausible -unplayable -unplayed -unpleasant -unpleasantly -unpleasantness -unpleasantnesses -unpleased -unpleasing -unpliant -unplowed -unplug -unplugged -unplugging -unplugs -unplumbed -unpoetic -unpoised -unpolarized -unpoliced -unpolished -unpolite -unpolitical -unpolled -unpolluted -unpopular -unpopularities -unpopularity -unposed -unposted -unpotted -unpractical -unprecedented -unprecedentedly -unpredictabilities -unpredictability -unpredictable -unpredictables -unpredictably -unpregnant -unprejudiced -unpremeditated -unprepared -unpreparedness -unpreparednesses -unprepossessing -unpressed -unpressured -unpressurized -unpretending -unpretentious -unpretentiously -unpretentiousness -unpretentiousnesses -unpretty -unpriced -unprimed -unprincipled -unprincipledness -unprinciplednesses -unprintable -unprivileged -unprized -unprobed -unproblematic -unprocessed -unproduced -unproductive -unprofessed -unprofessional -unprofessionally -unprofessionals -unprofitable -unprofitableness -unprofitablenesses -unprofitably -unprogrammable -unprogrammed -unprogressive -unpromising -unpromisingly -unprompted -unpronounceable -unpronounced -unpropitious -unprosperous -unprotected -unprovable -unproved -unproven -unprovoked -unpruned -unpublicized -unpublishable -unpublished -unpucker -unpuckered -unpuckering -unpuckers -unpunctual -unpunctualities -unpunctuality -unpunctuated -unpunished -unpure -unpurged -unpuzzle -unpuzzled -unpuzzles -unpuzzling -unqualified -unqualifiedly -unquantifiable -unquenchable -unquestionable -unquestionably -unquestioned -unquestioning -unquestioningly -unquiet -unquieter -unquietest -unquietly -unquietness -unquietnesses -unquiets -unquote -unquoted -unquotes -unquoting -unraised -unraked -unranked -unrated -unravel -unraveled -unraveling -unravelled -unravelling -unravels -unravished -unrazed -unreachable -unreached -unread -unreadable -unreadier -unreadiest -unreadiness -unreadinesses -unready -unreal -unrealistic -unrealistically -unrealities -unreality -unrealizable -unrealized -unreally -unreason -unreasonable -unreasonableness -unreasonablenesses -unreasonably -unreasoned -unreasoning -unreasoningly -unreasons -unreceptive -unreclaimable -unreclaimed -unrecognizable -unrecognizably -unrecognized -unreconcilable -unreconciled -unreconstructed -unrecorded -unrecoverable -unrecovered -unrecyclable -unredeemable -unredeemed -unredressed -unreel -unreeled -unreeler -unreelers -unreeling -unreels -unreeve -unreeved -unreeves -unreeving -unrefined -unreflective -unreformed -unrefrigerated -unregenerate -unregenerately -unregistered -unregulated -unrehearsed -unreinforced -unrelated -unrelaxed -unrelenting -unrelentingly -unreliabilities -unreliability -unreliable -unrelieved -unrelievedly -unreligious -unreluctant -unremarkable -unremarkably -unremarked -unremembered -unreminiscent -unremitting -unremittingly -unremorseful -unremovable -unrent -unrented -unrepaid -unrepair -unrepairs -unrepeatable -unrepentant -unrepentantly -unreported -unrepresentative -unrepresentativeness -unrepresentativenesses -unrepresented -unrepressed -unrequited -unreserve -unreserved -unreservedly -unreservedness -unreservednesses -unreserves -unresistant -unresisting -unresolvable -unresolved -unrespectable -unresponsive -unresponsively -unresponsiveness -unresponsivenesses -unrest -unrested -unrestful -unrestored -unrestrained -unrestrainedly -unrestrainedness -unrestrainednesses -unrestraint -unrestraints -unrestricted -unrests -unretouched -unreturnable -unrevealed -unreviewable -unreviewed -unrevised -unrevolutionary -unrewarded -unrewarding -unrhetorical -unrhymed -unrhythmic -unridable -unriddle -unriddled -unriddles -unriddling -unrifled -unrig -unrigged -unrigging -unrighteous -unrighteously -unrighteousness -unrighteousnesses -unrigs -unrimed -unrinsed -unrip -unripe -unripely -unripened -unripeness -unripenesses -unriper -unripest -unripped -unripping -unrips -unrisen -unrivaled -unrivalled -unrobe -unrobed -unrobes -unrobing -unroll -unrolled -unrolling -unrolls -unromantic -unromantically -unromanticized -unroof -unroofed -unroofing -unroofs -unroot -unrooted -unrooting -unroots -unroped -unrough -unround -unrounded -unrounding -unrounds -unrove -unroven -unruffled -unruled -unrulier -unruliest -unruliness -unrulinesses -unruly -unrushed -unrusted -uns -unsaddle -unsaddled -unsaddles -unsaddling -unsafe -unsafely -unsafeties -unsafety -unsaid -unsalable -unsalaried -unsalted -unsalvageable -unsanctioned -unsanitary -unsated -unsatisfactorily -unsatisfactoriness -unsatisfactorinesses -unsatisfactory -unsatisfied -unsatisfying -unsaturate -unsaturated -unsaturates -unsaved -unsavory -unsawed -unsawn -unsay -unsayable -unsaying -unsays -unscalable -unscaled -unscarred -unscathed -unscented -unscheduled -unscholarly -unschooled -unscientific -unscientifically -unscramble -unscrambled -unscrambler -unscramblers -unscrambles -unscrambling -unscreened -unscrew -unscrewed -unscrewing -unscrews -unscripted -unscriptural -unscrupulous -unscrupulously -unscrupulousness -unscrupulousnesses -unseal -unsealed -unsealing -unseals -unseam -unseamed -unseaming -unseams -unsearchable -unsearchably -unseared -unseasonable -unseasonableness -unseasonablenesses -unseasonably -unseasoned -unseat -unseated -unseating -unseats -unseaworthy -unsecured -unseeded -unseeing -unseemlier -unseemliest -unseemliness -unseemlinesses -unseemly -unseen -unsegmented -unsegregated -unseized -unselected -unselective -unselectively -unselfish -unselfishly -unselfishness -unselfishnesses -unsell -unsellable -unselling -unsells -unsensational -unsensitized -unsent -unsentimental -unseparated -unserious -unseriousness -unseriousnesses -unserved -unserviceable -unset -unsets -unsetting -unsettle -unsettled -unsettledness -unsettlednesses -unsettlement -unsettlements -unsettles -unsettling -unsettlingly -unsew -unsewed -unsewing -unsewn -unsews -unsex -unsexed -unsexes -unsexing -unsexual -unsexy -unshackle -unshackled -unshackles -unshackling -unshaded -unshakable -unshakably -unshaken -unshamed -unshaped -unshapely -unshapen -unshared -unsharp -unshaved -unshaven -unsheathe -unsheathed -unsheathes -unsheathing -unshed -unshell -unshelled -unshelling -unshells -unshielded -unshift -unshifted -unshifting -unshifts -unship -unshipped -unshipping -unships -unshockable -unshod -unshorn -unshowy -unshrunk -unshut -unsicker -unsifted -unsight -unsighted -unsighting -unsightlier -unsightliest -unsightliness -unsightlinesses -unsightly -unsights -unsigned -unsilent -unsinful -unsinkable -unsized -unskilled -unskillful -unskillfully -unskillfulness -unskillfulnesses -unslakable -unslaked -unsliced -unsling -unslinging -unslings -unslung -unsmart -unsmiling -unsmoked -unsmoothed -unsnap -unsnapped -unsnapping -unsnaps -unsnarl -unsnarled -unsnarling -unsnarls -unsoaked -unsober -unsociabilities -unsociability -unsociable -unsociableness -unsociablenesses -unsociably -unsocial -unsocialized -unsocially -unsoiled -unsold -unsolder -unsoldered -unsoldering -unsolders -unsoldierly -unsolicited -unsolid -unsolvable -unsolved -unsoncy -unsonsie -unsonsy -unsophisticated -unsophistication -unsophistications -unsorted -unsought -unsound -unsounded -unsounder -unsoundest -unsoundly -unsoundness -unsoundnesses -unsoured -unsowed -unsown -unsparing -unsparingly -unspeak -unspeakable -unspeakably -unspeaking -unspeaks -unspecialized -unspecifiable -unspecific -unspecified -unspectacular -unspent -unsphere -unsphered -unspheres -unsphering -unspilt -unspiritual -unsplit -unspoiled -unspoilt -unspoke -unspoken -unsportsmanlike -unspotted -unsprayed -unsprung -unspun -unstable -unstableness -unstablenesses -unstabler -unstablest -unstably -unstack -unstacked -unstacking -unstacks -unstained -unstandardized -unstartling -unstate -unstated -unstates -unstating -unstayed -unsteadied -unsteadier -unsteadies -unsteadiest -unsteadily -unsteadiness -unsteadinesses -unsteady -unsteadying -unsteel -unsteeled -unsteeling -unsteels -unstep -unstepped -unstepping -unsteps -unsterile -unsterilized -unstick -unsticking -unsticks -unstinted -unstinting -unstintingly -unstitch -unstitched -unstitches -unstitching -unstoned -unstop -unstoppable -unstoppably -unstopped -unstopper -unstoppered -unstoppering -unstoppers -unstopping -unstops -unstrained -unstrap -unstrapped -unstrapping -unstraps -unstratified -unstress -unstressed -unstresses -unstring -unstringing -unstrings -unstructured -unstrung -unstuck -unstudied -unstuffy -unstung -unstylish -unsubdued -unsubsidized -unsubstantial -unsubstantialities -unsubstantiality -unsubstantially -unsubstantiated -unsubtle -unsubtly -unsuccess -unsuccesses -unsuccessful -unsuccessfully -unsuitabilities -unsuitability -unsuitable -unsuitably -unsuited -unsullied -unsung -unsunk -unsupervised -unsupportable -unsupported -unsure -unsurely -unsurpassable -unsurpassed -unsurprised -unsurprising -unsurprisingly -unsusceptible -unsuspected -unsuspecting -unsuspectingly -unsuspicious -unsustainable -unswathe -unswathed -unswathes -unswathing -unswayed -unswear -unswearing -unswears -unsweetened -unswept -unswerving -unswore -unsworn -unsymmetrical -unsymmetrically -unsympathetic -unsympathetically -unsymptomatic -unsynchronized -unsystematic -unsystematically -unsystematized -untack -untacked -untacking -untacks -untactful -untagged -untainted -untaken -untalented -untamable -untame -untamed -untangle -untangled -untangles -untangling -untanned -untapped -untarnished -untasted -untaught -untaxed -unteach -unteachable -unteaches -unteaching -untechnical -untempered -untenabilities -untenability -untenable -untenanted -untended -untented -untenured -untestable -untested -untether -untethered -untethering -untethers -unthawed -untheoretical -unthink -unthinkabilities -unthinkability -unthinkable -unthinkably -unthinking -unthinkingly -unthinks -unthought -unthread -unthreaded -unthreading -unthreads -unthreatening -unthrifty -unthrone -unthroned -unthrones -unthroning -untidied -untidier -untidies -untidiest -untidily -untidiness -untidinesses -untidy -untidying -untie -untied -unties -until -untillable -untilled -untilted -untimelier -untimeliest -untimeliness -untimelinesses -untimely -untimeous -untinged -untipped -untired -untiring -untiringly -untitled -unto -untogether -untold -untorn -untouchabilities -untouchability -untouchable -untouchables -untouched -untoward -untowardly -untowardness -untowardnesses -untraceable -untraced -untraditional -untraditionally -untrained -untrammeled -untransformed -untranslatabilities -untranslatability -untranslatable -untranslated -untraveled -untraversed -untread -untreading -untreads -untreated -untrendy -untried -untrim -untrimmed -untrimming -untrims -untrod -untrodden -untroubled -untrue -untruer -untruest -untruly -untruss -untrussed -untrusses -untrussing -untrusting -untrustworthy -untrusty -untruth -untruthful -untruthfully -untruthfulness -untruthfulnesses -untruths -untuck -untucked -untucking -untucks -untufted -untune -untuned -untunes -untuning -unturned -untutored -untwine -untwined -untwines -untwining -untwist -untwisted -untwisting -untwists -untying -untypical -untypically -ununderstandable -ununited -unurged -unusable -unused -unusual -unusually -unusualness -unusualnesses -unutilized -unutterable -unutterably -unvaccinated -unvalued -unvanquished -unvaried -unvarnished -unvarying -unveil -unveiled -unveiling -unveilings -unveils -unveined -unventilated -unverbalized -unverifiable -unverified -unversed -unvexed -unvext -unviable -unvisited -unvocal -unvoice -unvoiced -unvoices -unvoicing -unwalled -unwaning -unwanted -unwarier -unwariest -unwarily -unwariness -unwarinesses -unwarlike -unwarmed -unwarned -unwarped -unwarrantable -unwarrantably -unwarranted -unwary -unwashed -unwashedness -unwashednesses -unwasheds -unwasted -unwatchable -unwavering -unwaveringly -unwaxed -unweaned -unwearable -unwearied -unweariedly -unweary -unweathered -unweave -unweaves -unweaving -unwed -unwedded -unweeded -unweeting -unweetingly -unweight -unweighted -unweighting -unweights -unwelcome -unwelded -unwell -unwept -unwetted -unwhite -unwholesome -unwholesomely -unwieldier -unwieldiest -unwieldily -unwieldiness -unwieldinesses -unwieldy -unwifely -unwilled -unwilling -unwillingly -unwillingness -unwillingnesses -unwind -unwinder -unwinders -unwinding -unwinds -unwinnable -unwisdom -unwisdoms -unwise -unwisely -unwiser -unwisest -unwish -unwished -unwishes -unwishing -unwit -unwitnessed -unwits -unwitted -unwitting -unwittingly -unwomanly -unwon -unwonted -unwontedly -unwontedness -unwontednesses -unwooded -unwooed -unworkabilities -unworkability -unworkable -unworkables -unworked -unworking -unworldliness -unworldlinesses -unworldly -unworn -unworried -unworthier -unworthies -unworthiest -unworthily -unworthiness -unworthinesses -unworthy -unwound -unwounded -unwove -unwoven -unwrap -unwrapped -unwrapping -unwraps -unwreathe -unwreathed -unwreathes -unwreathing -unwritten -unwrung -unyeaned -unyielding -unyieldingly -unyoke -unyoked -unyokes -unyoking -unyoung -unzip -unzipped -unzipping -unzips -unzoned -up -upas -upases -upbear -upbearer -upbearers -upbearing -upbears -upbeat -upbeats -upbind -upbinding -upbinds -upboil -upboiled -upboiling -upboils -upbore -upborne -upbound -upbow -upbows -upbraid -upbraided -upbraider -upbraiders -upbraiding -upbraids -upbringing -upbringings -upbuild -upbuilding -upbuilds -upbuilt -upby -upbye -upcast -upcasting -upcasts -upchuck -upchucked -upchucking -upchucks -upclimb -upclimbed -upclimbing -upclimbs -upcoast -upcoil -upcoiled -upcoiling -upcoils -upcoming -upcountry -upcurl -upcurled -upcurling -upcurls -upcurve -upcurved -upcurves -upcurving -updart -updarted -updarting -updarts -update -updated -updater -updaters -updates -updating -updive -updived -updives -updiving -updo -updos -updove -updraft -updrafts -updried -updries -updry -updrying -upend -upended -upending -upends -upfield -upfling -upflinging -upflings -upflow -upflowed -upflowing -upflows -upflung -upfold -upfolded -upfolding -upfolds -upfront -upgather -upgathered -upgathering -upgathers -upgaze -upgazed -upgazes -upgazing -upgird -upgirded -upgirding -upgirds -upgirt -upgoing -upgradabilities -upgradability -upgradable -upgrade -upgradeabilities -upgradeability -upgradeable -upgraded -upgrades -upgrading -upgrew -upgrow -upgrowing -upgrown -upgrows -upgrowth -upgrowths -upheap -upheaped -upheaping -upheaps -upheaval -upheavals -upheave -upheaved -upheaver -upheavers -upheaves -upheaving -upheld -uphill -uphills -uphoard -uphoarded -uphoarding -uphoards -uphold -upholder -upholders -upholding -upholds -upholster -upholstered -upholsterer -upholsterers -upholsteries -upholstering -upholsters -upholstery -uphove -uphroe -uphroes -upkeep -upkeeps -upland -uplander -uplanders -uplands -upleap -upleaped -upleaping -upleaps -upleapt -uplift -uplifted -uplifter -uplifters -uplifting -uplifts -uplight -uplighted -uplighting -uplights -uplink -uplinks -uplit -upload -uploaded -uploading -uploads -upmanship -upmanships -upmarket -upmost -upo -upon -upped -upper -uppercase -uppercased -uppercases -uppercasing -upperclassman -upperclassmen -uppercut -uppercuts -uppercutting -uppermost -upperpart -upperparts -uppers -uppile -uppiled -uppiles -uppiling -upping -uppings -uppish -uppishly -uppishness -uppishnesses -uppitiness -uppitinesses -uppity -uppityness -uppitynesses -upprop -uppropped -uppropping -upprops -upraise -upraised -upraiser -upraisers -upraises -upraising -uprate -uprated -uprates -uprating -upreach -upreached -upreaches -upreaching -uprear -upreared -uprearing -uprears -upright -uprighted -uprighting -uprightly -uprightness -uprightnesses -uprights -uprise -uprisen -upriser -uprisers -uprises -uprising -uprisings -upriver -uprivers -uproar -uproarious -uproariously -uproariousness -uproariousnesses -uproars -uproot -uprootal -uprootals -uprooted -uprootedness -uprootednesses -uprooter -uprooters -uprooting -uproots -uprose -uprouse -uproused -uprouses -uprousing -uprush -uprushed -uprushes -uprushing -ups -upsadaisy -upscale -upscaled -upscales -upscaling -upsend -upsending -upsends -upsent -upset -upsets -upsetter -upsetters -upsetting -upshift -upshifted -upshifting -upshifts -upshoot -upshooting -upshoots -upshot -upshots -upside -upsides -upsilon -upsilons -upsoar -upsoared -upsoaring -upsoars -upsprang -upspring -upspringing -upsprings -upsprung -upstage -upstaged -upstages -upstaging -upstair -upstairs -upstand -upstanding -upstandingness -upstandingnesses -upstands -upstare -upstared -upstares -upstaring -upstart -upstarted -upstarting -upstarts -upstate -upstater -upstaters -upstates -upstep -upstepped -upstepping -upsteps -upstir -upstirred -upstirring -upstirs -upstood -upstream -upstroke -upstrokes -upsurge -upsurged -upsurges -upsurging -upsweep -upsweeping -upsweeps -upswell -upswelled -upswelling -upswells -upswept -upswing -upswinging -upswings -upswollen -upswung -uptake -uptakes -uptear -uptearing -uptears -uptempo -uptempos -upthrew -upthrow -upthrowing -upthrown -upthrows -upthrust -upthrusting -upthrusts -uptick -upticks -uptight -uptightness -uptightnesses -uptilt -uptilted -uptilting -uptilts -uptime -uptimes -uptore -uptorn -uptoss -uptossed -uptosses -uptossing -uptown -uptowner -uptowners -uptowns -uptrend -uptrends -upturn -upturned -upturning -upturns -upwaft -upwafted -upwafting -upwafts -upward -upwardly -upwardness -upwardnesses -upwards -upwell -upwelled -upwelling -upwellings -upwells -upwind -upwinds -uracil -uracils -uraei -uraemia -uraemias -uraemic -uraeus -uraeuses -uralite -uralites -uralitic -urania -uranias -uranic -uranide -uranides -uraninite -uraninites -uranism -uranisms -uranite -uranites -uranitic -uranium -uraniums -uranographies -uranography -uranous -uranyl -uranylic -uranyls -urare -urares -urari -uraris -urase -urases -urate -urates -uratic -urb -urban -urbane -urbanely -urbaner -urbanest -urbanisation -urbanisations -urbanise -urbanised -urbanises -urbanising -urbanism -urbanisms -urbanist -urbanistic -urbanistically -urbanists -urbanite -urbanites -urbanities -urbanity -urbanization -urbanizations -urbanize -urbanized -urbanizes -urbanizing -urbanologies -urbanologist -urbanologists -urbanology -urbia -urbias -urbs -urceolate -urchin -urchins -urd -urds -urea -ureal -ureas -urease -ureases -uredia -uredial -uredines -uredinia -uredinial -urediniospore -urediniospores -uredinium -urediospore -urediospores -uredium -uredo -uredos -uredospore -uredospores -ureic -ureide -ureides -uremia -uremias -uremic -ureotelic -ureotelism -ureotelisms -ureter -ureteral -ureteric -ureters -urethan -urethane -urethanes -urethans -urethra -urethrae -urethral -urethras -urethritis -urethritises -urethroscope -urethroscopes -uretic -urge -urged -urgencies -urgency -urgent -urgently -urger -urgers -urges -urging -urgingly -urial -urials -uric -uricosuric -uricotelic -uricotelism -uricotelisms -uridine -uridines -urinal -urinals -urinalyses -urinalysis -urinaries -urinary -urinate -urinated -urinates -urinating -urination -urinations -urine -urinemia -urinemias -urinemic -urines -urinogenital -urinometer -urinometers -urinose -urinous -urn -urnlike -urns -urochord -urochordate -urochordates -urochords -urochrome -urochromes -urodele -urodeles -urogenital -urokinase -urokinases -urolith -urolithiases -urolithiasis -uroliths -urologic -urological -urologies -urologist -urologists -urology -uropod -uropodal -uropods -uropygia -uropygium -uropygiums -uroscopies -uroscopy -urostyle -urostyles -ursa -ursae -ursiform -ursine -urtext -urtexts -urticant -urticants -urticaria -urticarial -urticarias -urticate -urticated -urticates -urticating -urtication -urtications -urus -uruses -urushiol -urushiols -us -usabilities -usability -usable -usableness -usablenesses -usably -usage -usages -usance -usances -usaunce -usaunces -use -useable -useably -used -useful -usefully -usefulness -usefulnesses -useless -uselessly -uselessness -uselessnesses -user -users -uses -usher -ushered -usherette -usherettes -ushering -ushers -using -usnea -usneae -usneas -usquabae -usquabaes -usque -usquebae -usquebaes -usquebaugh -usquebaughs -usques -ustulate -usual -usually -usualness -usualnesses -usuals -usufruct -usufructs -usufructuaries -usufructuary -usurer -usurers -usuries -usurious -usuriously -usuriousness -usuriousnesses -usurp -usurpation -usurpations -usurped -usurper -usurpers -usurping -usurps -usury -ut -uta -utas -utensil -utensils -uteri -uterine -uterus -uteruses -utile -utilidor -utilidors -utilise -utilised -utiliser -utilisers -utilises -utilising -utilitarian -utilitarianism -utilitarianisms -utilitarians -utilities -utility -utilizable -utilization -utilizations -utilize -utilized -utilizer -utilizers -utilizes -utilizing -utmost -utmosts -utopia -utopian -utopianism -utopianisms -utopians -utopias -utopism -utopisms -utopist -utopistic -utopists -utricle -utricles -utricular -utriculi -utriculus -uts -utter -utterable -utterance -utterances -uttered -utterer -utterers -uttering -utterly -uttermost -uttermosts -utters -uvarovite -uvarovites -uvea -uveal -uveas -uveitic -uveitides -uveitis -uveitises -uveous -uvula -uvulae -uvular -uvularly -uvulars -uvulas -uvulitis -uvulitises -uxorial -uxoricide -uxoricides -uxorious -uxoriously -uxoriousness -uxoriousnesses -vac -vacancies -vacancy -vacant -vacantly -vacantness -vacantnesses -vacate -vacated -vacates -vacating -vacation -vacationed -vacationer -vacationers -vacationing -vacationist -vacationists -vacationland -vacationlands -vacations -vaccina -vaccinal -vaccinas -vaccinate -vaccinated -vaccinates -vaccinating -vaccination -vaccinations -vaccinator -vaccinators -vaccine -vaccinee -vaccinees -vaccines -vaccinia -vaccinial -vaccinias -vacillate -vacillated -vacillates -vacillating -vacillatingly -vacillation -vacillations -vacillator -vacillators -vacs -vacua -vacuities -vacuity -vacuolar -vacuolate -vacuolated -vacuolation -vacuolations -vacuole -vacuoles -vacuous -vacuously -vacuousness -vacuousnesses -vacuum -vacuumed -vacuuming -vacuums -vadose -vagabond -vagabondage -vagabondages -vagabonded -vagabonding -vagabondish -vagabondism -vagabondisms -vagabonds -vagal -vagally -vagaries -vagarious -vagariously -vagary -vagi -vagile -vagilities -vagility -vagina -vaginae -vaginal -vaginally -vaginas -vaginate -vaginismus -vaginismuses -vaginitides -vaginitis -vagotomies -vagotomy -vagotonia -vagotonias -vagotonic -vagrancies -vagrancy -vagrant -vagrantly -vagrants -vagrom -vague -vaguely -vagueness -vaguenesses -vaguer -vaguest -vagus -vahine -vahines -vail -vailed -vailing -vails -vain -vainer -vainest -vainglories -vainglorious -vaingloriously -vaingloriousness -vaingloriousnesses -vainglory -vainly -vainness -vainnesses -vair -vairs -vakeel -vakeels -vakil -vakils -valance -valanced -valances -valancing -vale -valediction -valedictions -valedictorian -valedictorians -valedictories -valedictory -valence -valences -valencia -valencias -valencies -valency -valentine -valentines -valerate -valerates -valerian -valerians -valeric -vales -valet -valeted -valeting -valets -valetudinarian -valetudinarianism -valetudinarianisms -valetudinarians -valetudinaries -valetudinary -valgoid -valgus -valguses -valiance -valiances -valiancies -valiancy -valiant -valiantly -valiantness -valiantnesses -valiants -valid -validate -validated -validates -validating -validation -validations -validities -validity -validly -valine -valines -valise -valises -valkyr -valkyrie -valkyries -valkyrs -vallate -vallecula -valleculae -vallecular -valley -valleys -valonia -valonias -valor -valorise -valorised -valorises -valorising -valorization -valorizations -valorize -valorized -valorizes -valorizing -valorous -valorously -valors -valour -valours -valpolicella -valpolicellas -valse -valses -valuable -valuableness -valuablenesses -valuables -valuably -valuate -valuated -valuates -valuating -valuation -valuational -valuationally -valuations -valuator -valuators -value -valued -valueless -valuelessness -valuelessnesses -valuer -valuers -values -valuing -valuta -valutas -valval -valvar -valvate -valve -valved -valveless -valvelet -valvelets -valves -valving -valvula -valvulae -valvular -valvule -valvules -valvulitis -valvulitises -vambrace -vambraces -vamoose -vamoosed -vamooses -vamoosing -vamose -vamosed -vamoses -vamosing -vamp -vamped -vamper -vampers -vamping -vampire -vampires -vampiric -vampirish -vampirism -vampirisms -vampish -vamps -van -vanadate -vanadates -vanadic -vanadium -vanadiums -vanadous -vanaspati -vanaspatis -vanda -vandal -vandalic -vandalise -vandalised -vandalises -vandalising -vandalism -vandalisms -vandalistic -vandalization -vandalizations -vandalize -vandalized -vandalizes -vandalizing -vandals -vandas -vandyke -vandyked -vandykes -vane -vaned -vanes -vang -vangs -vanguard -vanguardism -vanguardisms -vanguardist -vanguardists -vanguards -vanilla -vanillas -vanillic -vanillin -vanillins -vanish -vanished -vanisher -vanishers -vanishes -vanishing -vanishingly -vanitied -vanities -vanitories -vanitory -vanity -vanman -vanmen -vanned -vanner -vanners -vanning -vanpool -vanpooling -vanpoolings -vanpools -vanquish -vanquishable -vanquished -vanquisher -vanquishers -vanquishes -vanquishing -vans -vantage -vantages -vanward -vapid -vapidities -vapidity -vapidly -vapidness -vapidnesses -vapor -vapored -vaporer -vaporers -vaporetti -vaporetto -vaporettos -vaporing -vaporings -vaporise -vaporised -vaporises -vaporish -vaporishness -vaporishnesses -vaporising -vaporizable -vaporization -vaporizations -vaporize -vaporized -vaporizer -vaporizers -vaporizes -vaporizing -vaporous -vaporously -vaporousness -vaporousnesses -vapors -vaporware -vaporwares -vapory -vapour -vapoured -vapourer -vapourers -vapouring -vapours -vapoury -vaquero -vaqueros -var -vara -varactor -varactors -varas -varia -variabilities -variability -variable -variableness -variablenesses -variables -variably -variance -variances -variant -variants -variate -variated -variates -variating -variation -variational -variationally -variations -varicella -varicellas -varices -varicocele -varicoceles -varicolored -varicose -varicosed -varicosities -varicosity -varied -variedly -variegate -variegated -variegates -variegating -variegation -variegations -variegator -variegators -varier -variers -varies -varietal -varietals -varieties -variety -variform -variola -variolar -variolas -variole -varioles -variometer -variometers -variorum -variorums -various -variously -variousness -variousnesses -varisized -varistor -varistors -varix -varlet -varletries -varletry -varlets -varment -varments -varmint -varmints -varna -varnas -varnish -varnished -varnisher -varnishers -varnishes -varnishing -varnishy -varoom -varoomed -varooming -varooms -vars -varsities -varsity -varus -varuses -varve -varved -varves -vary -varying -varyingly -vas -vasa -vasal -vascula -vascular -vascularities -vascularity -vascularization -vascularizations -vasculature -vasculatures -vasculitides -vasculitis -vasculum -vasculums -vase -vasectomies -vasectomize -vasectomized -vasectomizes -vasectomizing -vasectomy -vaselike -vases -vasiform -vasoactive -vasoactivities -vasoactivity -vasoconstriction -vasoconstrictions -vasoconstrictive -vasoconstrictor -vasoconstrictors -vasodilatation -vasodilatations -vasodilation -vasodilations -vasodilator -vasodilators -vasomotor -vasopressin -vasopressins -vasopressor -vasopressors -vasospasm -vasospasms -vasospastic -vasotocin -vasotocins -vasotomies -vasotomy -vasovagal -vassal -vassalage -vassalages -vassals -vast -vaster -vastest -vastier -vastiest -vastities -vastitude -vastitudes -vastity -vastly -vastness -vastnesses -vasts -vasty -vat -vatful -vatfuls -vatic -vatical -vaticide -vaticides -vaticinal -vaticinate -vaticinated -vaticinates -vaticinating -vaticination -vaticinations -vaticinator -vaticinators -vats -vatted -vatting -vatu -vatus -vau -vaudeville -vaudevilles -vaudevillian -vaudevillians -vault -vaulted -vaulter -vaulters -vaultier -vaultiest -vaulting -vaultingly -vaultings -vaults -vaulty -vaunt -vaunted -vaunter -vaunters -vauntful -vauntie -vaunting -vauntingly -vaunts -vaunty -vaus -vav -vavasor -vavasors -vavasour -vavasours -vavassor -vavassors -vavs -vaw -vaward -vawards -vawntie -vaws -veal -vealed -vealer -vealers -vealier -vealiest -vealing -veals -vealy -vector -vectored -vectorial -vectorially -vectoring -vectors -vedalia -vedalias -vedette -vedettes -vee -veejay -veejays -veena -veenas -veep -veepee -veepees -veeps -veer -veered -veeries -veering -veeringly -veers -veery -vees -veg -vegan -veganism -veganisms -vegans -vegetable -vegetables -vegetably -vegetal -vegetant -vegetarian -vegetarianism -vegetarianisms -vegetarians -vegetate -vegetated -vegetates -vegetating -vegetation -vegetational -vegetations -vegetative -vegetatively -vegetativeness -vegetativenesses -vegete -vegetist -vegetists -vegetive -veggie -veggies -vegie -vegies -vehemence -vehemences -vehement -vehemently -vehicle -vehicles -vehicular -veil -veiled -veiledly -veiler -veilers -veiling -veilings -veillike -veils -vein -veinal -veined -veiner -veiners -veinier -veiniest -veining -veinings -veinless -veinlet -veinlets -veinlike -veins -veinule -veinules -veinulet -veinulets -veiny -vela -velamen -velamina -velar -velaria -velarium -velarization -velarizations -velarize -velarized -velarizes -velarizing -velars -velate -veld -velds -veldt -veldts -veliger -veligers -velites -velleities -velleity -vellum -vellums -veloce -velocimeter -velocimeters -velocipede -velocipedes -velociraptor -velociraptors -velocities -velocity -velodrome -velodromes -velour -velours -veloute -veloutes -velum -velure -velured -velures -veluring -velveret -velverets -velvet -velveted -velveteen -velveteens -velvetlike -velvets -velvety -vena -venae -venal -venalities -venality -venally -venatic -venation -venations -vend -vendable -vendables -vendace -vendaces -vended -vendee -vendees -vender -venders -vendetta -vendettas -vendeuse -vendeuses -vendibilities -vendibility -vendible -vendibles -vendibly -vending -vendor -vendors -vends -vendue -vendues -veneer -veneered -veneerer -veneerers -veneering -veneerings -veneers -venenate -venenated -venenates -venenating -venenose -venerabilities -venerability -venerable -venerableness -venerablenesses -venerably -venerate -venerated -venerates -venerating -veneration -venerations -venerator -venerators -venereal -veneries -venery -venesection -venesections -venetian -venetians -venge -vengeance -vengeances -venged -vengeful -vengefully -vengefulness -vengefulnesses -venges -venging -venial -venially -venialness -venialnesses -venin -venine -venines -venins -venipuncture -venipunctures -venire -venireman -veniremen -venires -venison -venisons -venogram -venograms -venographies -venography -venom -venomed -venomer -venomers -venoming -venomous -venomously -venomousness -venomousnesses -venoms -venose -venosities -venosity -venous -venously -vent -ventage -ventages -ventail -ventails -vented -venter -venters -ventifact -ventifacts -ventilate -ventilated -ventilates -ventilating -ventilation -ventilations -ventilator -ventilators -ventilatory -venting -ventless -ventral -ventrally -ventrals -ventricle -ventricles -ventricose -ventricular -ventriculi -ventriculus -ventriloquial -ventriloquially -ventriloquies -ventriloquism -ventriloquisms -ventriloquist -ventriloquistic -ventriloquists -ventriloquize -ventriloquized -ventriloquizes -ventriloquizing -ventriloquy -ventrolateral -ventromedial -vents -venture -ventured -venturer -venturers -ventures -venturesome -venturesomely -venturesomeness -venturesomenesses -venturi -venturing -venturis -venturous -venturously -venturousness -venturousnesses -venue -venues -venular -venule -venules -venulose -venulous -vera -veracious -veraciously -veraciousness -veraciousnesses -veracities -veracity -veranda -verandaed -verandah -verandahed -verandahs -verandas -verapamil -verapamils -veratria -veratrias -veratridine -veratridines -veratrin -veratrine -veratrines -veratrins -veratrum -veratrums -verb -verbal -verbalism -verbalisms -verbalist -verbalistic -verbalists -verbalization -verbalizations -verbalize -verbalized -verbalizer -verbalizers -verbalizes -verbalizing -verbally -verbals -verbatim -verbena -verbenas -verbiage -verbiages -verbicide -verbicides -verbid -verbids -verbified -verbifies -verbify -verbifying -verbigeration -verbigerations -verbile -verbiles -verbless -verbose -verbosely -verboseness -verbosenesses -verbosities -verbosity -verboten -verbs -verdancies -verdancy -verdant -verdantly -verderer -verderers -verderor -verderors -verdict -verdicts -verdigris -verdigrises -verdin -verdins -verditer -verditers -verdure -verdured -verdures -verdurous -verecund -verge -verged -vergence -vergences -verger -vergers -verges -verging -verglas -verglases -veridic -veridical -veridicalities -veridicality -veridically -verier -veriest -verifiabilities -verifiability -verifiable -verifiableness -verifiablenesses -verification -verifications -verified -verifier -verifiers -verifies -verify -verifying -verily -verisimilar -verisimilarly -verisimilitude -verisimilitudes -verisimilitudinous -verism -verismo -verismos -verisms -verist -veristic -verists -veritable -veritableness -veritablenesses -veritably -veritas -veritates -verite -verites -verities -verity -verjuice -verjuices -vermeil -vermeils -vermes -vermian -vermicelli -vermicellis -vermicide -vermicides -vermicular -vermiculate -vermiculated -vermiculation -vermiculations -vermiculite -vermiculites -vermiform -vermifuge -vermifuges -vermilion -vermilions -vermillion -vermillions -vermin -verminous -vermis -vermoulu -vermouth -vermouths -vermuth -vermuths -vernacle -vernacles -vernacular -vernacularism -vernacularisms -vernacularly -vernaculars -vernal -vernalization -vernalizations -vernalize -vernalized -vernalizes -vernalizing -vernally -vernation -vernations -vernicle -vernicles -vernier -verniers -vernissage -vernissages -vernix -vernixes -veronica -veronicas -verruca -verrucae -verrucose -versal -versant -versants -versatile -versatilely -versatileness -versatilenesses -versatilities -versatility -verse -versed -verseman -versemen -verser -versers -verses -verset -versets -versicle -versicles -versicular -versification -versifications -versified -versifier -versifiers -versifies -versify -versifying -versine -versines -versing -version -versional -versions -verso -versos -verst -verste -verstes -versts -versus -vert -vertebra -vertebrae -vertebral -vertebras -vertebrate -vertebrates -vertex -vertexes -vertical -verticalities -verticality -vertically -verticalness -verticalnesses -verticals -vertices -verticil -verticillate -verticils -vertigines -vertiginous -vertiginously -vertigo -vertigoes -vertigos -verts -vertu -vertus -vervain -vervains -verve -verves -vervet -vervets -very -vesica -vesicae -vesical -vesicant -vesicants -vesicate -vesicated -vesicates -vesicating -vesicle -vesicles -vesicula -vesiculae -vesicular -vesicularities -vesicularity -vesiculate -vesiculated -vesiculates -vesiculating -vesiculation -vesiculations -vesper -vesperal -vesperals -vespers -vespertilian -vespertine -vespiaries -vespiary -vespid -vespids -vespine -vessel -vesseled -vessels -vest -vesta -vestal -vestally -vestals -vestas -vested -vestee -vestees -vestiaries -vestiary -vestibular -vestibule -vestibuled -vestibules -vestige -vestiges -vestigia -vestigial -vestigially -vestigium -vesting -vestings -vestless -vestlike -vestment -vestmental -vestments -vestral -vestries -vestry -vestryman -vestrymen -vests -vestural -vesture -vestured -vestures -vesturing -vesuvian -vesuvianite -vesuvianites -vesuvians -vet -vetch -vetches -vetchling -vetchlings -veteran -veterans -veterinarian -veterinarians -veterinaries -veterinary -vetiver -vetivers -vetivert -vetiverts -veto -vetoed -vetoer -vetoers -vetoes -vetoing -vets -vetted -vetting -vex -vexation -vexations -vexatious -vexatiously -vexatiousness -vexatiousnesses -vexed -vexedly -vexer -vexers -vexes -vexil -vexilla -vexillar -vexillologic -vexillological -vexillologies -vexillologist -vexillologists -vexillology -vexillum -vexils -vexing -vexingly -vext -via -viabilities -viability -viable -viably -viaduct -viaducts -vial -vialed -vialing -vialled -vialling -vials -viand -viands -viatic -viatica -viatical -viaticum -viaticums -viator -viatores -viators -vibe -vibes -vibist -vibists -vibraharp -vibraharpist -vibraharpists -vibraharps -vibrance -vibrances -vibrancies -vibrancy -vibrant -vibrantly -vibrants -vibraphone -vibraphones -vibraphonist -vibraphonists -vibrate -vibrated -vibrates -vibratile -vibrating -vibration -vibrational -vibrationless -vibrations -vibrato -vibratoless -vibrator -vibrators -vibratory -vibratos -vibrio -vibrioid -vibrion -vibriones -vibrionic -vibrions -vibrios -vibrioses -vibriosis -vibrissa -vibrissae -vibronic -viburnum -viburnums -vicar -vicarage -vicarages -vicarate -vicarates -vicarial -vicariance -vicariances -vicariant -vicariants -vicariate -vicariates -vicarious -vicariously -vicariousness -vicariousnesses -vicarly -vicars -vicarship -vicarships -vice -viced -vicegerencies -vicegerency -vicegerent -vicegerents -viceless -vicenary -vicennial -viceregal -viceregally -vicereine -vicereines -viceroy -viceroyalties -viceroyalty -viceroys -viceroyship -viceroyships -vices -vichies -vichy -vichyssoise -vichyssoises -vicinage -vicinages -vicinal -vicing -vicinities -vicinity -vicious -viciously -viciousness -viciousnesses -vicissitude -vicissitudes -vicissitudinous -vicomte -vicomtes -victim -victimhood -victimhoods -victimise -victimised -victimises -victimising -victimization -victimizations -victimize -victimized -victimizer -victimizers -victimizes -victimizing -victimless -victimologies -victimologist -victimologists -victimology -victims -victor -victoria -victorias -victories -victorious -victoriously -victoriousness -victoriousnesses -victors -victory -victress -victresses -victual -victualed -victualer -victualers -victualing -victualled -victualler -victuallers -victualling -victuals -vicugna -vicugnas -vicuna -vicunas -vide -videlicet -video -videocassette -videocassettes -videoconference -videoconferences -videoconferencing -videoconferencings -videodisc -videodiscs -videodisk -videodisks -videographer -videographers -videographies -videography -videoland -videolands -videophile -videophiles -videophone -videophones -videorecorder -videorecorders -videos -videotape -videotaped -videotapes -videotaping -videotex -videotexes -videotext -videotexts -vidette -videttes -vidicon -vidicons -viduities -viduity -vie -vied -vier -viers -vies -view -viewable -viewdata -viewdatas -viewed -viewer -viewers -viewership -viewerships -viewfinder -viewfinders -viewier -viewiest -viewing -viewings -viewless -viewlessly -viewpoint -viewpoints -views -viewy -vig -viga -vigas -vigesimal -vigil -vigilance -vigilances -vigilant -vigilante -vigilantes -vigilantism -vigilantisms -vigilantly -vigils -vigintillion -vigintillions -vigneron -vignerons -vignette -vignetted -vignetter -vignetters -vignettes -vignetting -vignettist -vignettists -vigor -vigorish -vigorishes -vigoroso -vigorous -vigorously -vigorousness -vigorousnesses -vigors -vigour -vigours -vigs -viking -vikings -vilayet -vilayets -vile -vilely -vileness -vilenesses -viler -vilest -vilification -vilifications -vilified -vilifier -vilifiers -vilifies -vilify -vilifying -vilipend -vilipended -vilipending -vilipends -vill -villa -villadom -villadoms -villae -village -villager -villageries -villagers -villagery -villages -villain -villainess -villainesses -villainies -villainous -villainously -villainousness -villainousnesses -villains -villainy -villanella -villanelle -villanelles -villas -villatic -villein -villeins -villenage -villenages -villi -villiform -villose -villosities -villosity -villous -vills -villus -vim -vimen -vimina -viminal -vims -vina -vinaceous -vinaigrette -vinaigrettes -vinal -vinals -vinas -vinasse -vinasses -vinblastine -vinblastines -vinca -vincas -vincible -vincibly -vincristine -vincristines -vincula -vinculum -vinculums -vindaloo -vindaloos -vindicable -vindicate -vindicated -vindicates -vindicating -vindication -vindications -vindicative -vindicator -vindicators -vindicatory -vindictive -vindictively -vindictiveness -vindictivenesses -vine -vineal -vined -vinedresser -vinedressers -vinegar -vinegared -vinegarish -vinegars -vinegary -vineries -vinery -vines -vineyard -vineyardist -vineyardists -vineyards -vinic -viniculture -vinicultures -vinier -viniest -vinifera -viniferas -vinification -vinifications -vinified -vinifies -vinify -vinifying -vining -vino -vinos -vinosities -vinosity -vinous -vinously -vintage -vintager -vintagers -vintages -vintner -vintners -viny -vinyl -vinylic -vinylidene -vinylidenes -vinyls -viol -viola -violabilities -violability -violable -violableness -violablenesses -violably -violaceous -violas -violate -violated -violater -violaters -violates -violating -violation -violations -violative -violator -violators -violence -violences -violent -violently -violet -violets -violin -violinist -violinistic -violinists -violins -violist -violists -violoncelli -violoncellist -violoncellists -violoncello -violoncellos -violone -violones -viols -viomycin -viomycins -viper -viperine -viperish -viperous -viperously -vipers -viraginous -virago -viragoes -viragos -viral -virally -virelai -virelais -virelay -virelays -viremia -viremias -viremic -vireo -vireos -vires -virescence -virescences -virescent -virga -virgas -virgate -virgates -virgin -virginal -virginalist -virginalists -virginally -virginals -virginities -virginity -virgins -virgule -virgules -viricidal -viricide -viricides -virid -viridescent -viridian -viridians -viridities -viridity -virile -virilely -virilism -virilisms -virilities -virility -virion -virions -virl -virls -viroid -viroids -virologic -virological -virologically -virologies -virologist -virologists -virology -viroses -virosis -virtu -virtual -virtualities -virtuality -virtually -virtue -virtueless -virtues -virtuosa -virtuosas -virtuose -virtuosi -virtuosic -virtuosities -virtuosity -virtuoso -virtuosos -virtuous -virtuously -virtuousness -virtuousnesses -virtus -virucidal -virucide -virucides -virulence -virulences -virulencies -virulency -virulent -virulently -viruliferous -virus -viruses -vis -visa -visaed -visage -visaged -visages -visaing -visard -visards -visas -viscacha -viscachas -viscera -visceral -viscerally -viscid -viscidities -viscidity -viscidly -viscoelastic -viscoelasticities -viscoelasticity -viscoid -viscometer -viscometers -viscometric -viscometries -viscometry -viscose -viscoses -viscosimeter -viscosimeters -viscosimetric -viscosities -viscosity -viscount -viscountcies -viscountcy -viscountess -viscountesses -viscounties -viscounts -viscounty -viscous -viscously -viscousness -viscousnesses -viscus -vise -vised -viseed -viseing -viselike -vises -visibilities -visibility -visible -visibleness -visiblenesses -visibly -vising -vision -visional -visionally -visionaries -visionariness -visionarinesses -visionary -visioned -visioning -visionless -visions -visit -visitable -visitant -visitants -visitation -visitations -visitatorial -visited -visiter -visiters -visiting -visitor -visitors -visits -visive -visor -visored -visoring -visorless -visors -vista -vistaed -vistas -visual -visualise -visualised -visualises -visualising -visualization -visualizations -visualize -visualized -visualizer -visualizers -visualizes -visualizing -visually -visuals -vita -vitae -vital -vitalise -vitalised -vitalises -vitalising -vitalism -vitalisms -vitalist -vitalistic -vitalists -vitalities -vitality -vitalization -vitalizations -vitalize -vitalized -vitalizes -vitalizing -vitally -vitals -vitamer -vitamers -vitamin -vitamine -vitamines -vitamins -vitelli -vitellin -vitelline -vitellins -vitellogeneses -vitellogenesis -vitellus -vitelluses -vitesse -vitesses -vitiable -vitiate -vitiated -vitiates -vitiating -vitiation -vitiations -vitiator -vitiators -viticultural -viticulturally -viticulture -viticultures -viticulturist -viticulturists -vitiligo -vitiligos -vitrain -vitrains -vitrectomies -vitrectomy -vitreous -vitreouses -vitric -vitrics -vitrifiable -vitrification -vitrifications -vitrified -vitrifies -vitrify -vitrifying -vitrine -vitrines -vitriol -vitrioled -vitriolic -vitrioling -vitriolled -vitriolling -vitriols -vitta -vittae -vittate -vittle -vittled -vittles -vittling -vituline -vituperate -vituperated -vituperates -vituperating -vituperation -vituperations -vituperative -vituperatively -vituperator -vituperators -vituperatory -viva -vivace -vivaces -vivacious -vivaciously -vivaciousness -vivaciousnesses -vivacities -vivacity -vivandiere -vivandieres -vivaria -vivaries -vivarium -vivariums -vivary -vivas -vive -viverrid -viverrids -vivers -vivid -vivider -vividest -vividly -vividness -vividnesses -vivific -vivification -vivifications -vivified -vivifier -vivifiers -vivifies -vivify -vivifying -vivipara -viviparities -viviparity -viviparous -viviparously -vivisect -vivisected -vivisecting -vivisection -vivisectional -vivisectionist -vivisectionists -vivisections -vivisector -vivisectors -vivisects -vixen -vixenish -vixenly -vixens -vizard -vizarded -vizards -vizcacha -vizcachas -vizier -vizierate -vizierates -vizierial -viziers -viziership -vizierships -vizir -vizirate -vizirates -vizirial -vizirs -vizor -vizored -vizoring -vizors -vizsla -vizslas -vocable -vocables -vocably -vocabular -vocabularies -vocabulary -vocal -vocalic -vocalically -vocalics -vocalise -vocalised -vocalises -vocalising -vocalism -vocalisms -vocalist -vocalists -vocalities -vocality -vocalization -vocalizations -vocalize -vocalized -vocalizer -vocalizers -vocalizes -vocalizing -vocally -vocals -vocation -vocational -vocationalism -vocationalisms -vocationalist -vocationalists -vocationally -vocations -vocative -vocatively -vocatives -voces -vociferant -vociferate -vociferated -vociferates -vociferating -vociferation -vociferations -vociferator -vociferators -vociferous -vociferously -vociferousness -vociferousnesses -vocoder -vocoders -vodka -vodkas -vodoun -vodouns -vodun -voduns -voe -voes -vogie -vogue -vogued -vogueing -voguer -voguers -vogues -voguing -voguish -voguishness -voguishnesses -voice -voiced -voiceful -voicefulness -voicefulnesses -voiceless -voicelessly -voicelessness -voicelessnesses -voiceover -voiceovers -voiceprint -voiceprints -voicer -voicers -voices -voicing -void -voidable -voidableness -voidablenesses -voidance -voidances -voided -voider -voiders -voiding -voidness -voidnesses -voids -voila -voile -voiles -volant -volante -volar -volatile -volatileness -volatilenesses -volatiles -volatilise -volatilised -volatilises -volatilising -volatilities -volatility -volatilizable -volatilization -volatilizations -volatilize -volatilized -volatilizes -volatilizing -volcanic -volcanically -volcanicities -volcanicity -volcanics -volcanism -volcanisms -volcano -volcanoes -volcanologic -volcanological -volcanologies -volcanologist -volcanologists -volcanology -volcanos -vole -voled -voleries -volery -voles -voling -volitant -volition -volitional -volitions -volitive -volkslied -volkslieder -volley -volleyball -volleyballs -volleyed -volleyer -volleyers -volleying -volleys -volost -volosts -volplane -volplaned -volplanes -volplaning -volt -volta -voltage -voltages -voltaic -voltaism -voltaisms -volte -voltes -volti -voltmeter -voltmeters -volts -volubilities -volubility -voluble -volubleness -volublenesses -volubly -volume -volumed -volumes -volumeter -volumeters -volumetric -volumetrically -voluming -voluminosities -voluminosity -voluminous -voluminously -voluminousness -voluminousnesses -voluntaries -voluntarily -voluntariness -voluntarinesses -voluntarism -voluntarisms -voluntarist -voluntaristic -voluntarists -voluntary -voluntaryism -voluntaryisms -voluntaryist -voluntaryists -volunteer -volunteered -volunteering -volunteerism -volunteerisms -volunteers -voluptuaries -voluptuary -voluptuous -voluptuously -voluptuousness -voluptuousnesses -volute -voluted -volutes -volutin -volutins -volution -volutions -volva -volvas -volvate -volvox -volvoxes -volvuli -volvulus -volvuluses -vomer -vomerine -vomers -vomica -vomicae -vomit -vomited -vomiter -vomiters -vomiting -vomitive -vomitives -vomito -vomitories -vomitory -vomitos -vomitous -vomits -vomitus -vomituses -voodoo -voodooed -voodooing -voodooism -voodooisms -voodooist -voodooistic -voodooists -voodoos -voracious -voraciously -voraciousness -voraciousnesses -voracities -voracity -vorlage -vorlages -vortex -vortexes -vortical -vortically -vorticella -vorticellae -vorticellas -vortices -vorticism -vorticisms -vorticist -vorticists -vorticities -vorticity -vorticose -votable -votaress -votaresses -votaries -votarist -votarists -votary -vote -voteable -voted -voteless -voter -voters -votes -voting -votive -votively -votiveness -votivenesses -votress -votresses -vouch -vouched -vouchee -vouchees -voucher -vouchered -vouchering -vouchers -vouches -vouching -vouchsafe -vouchsafed -vouchsafement -vouchsafements -vouchsafes -vouchsafing -voussoir -voussoirs -vouvray -vouvrays -vow -vowed -vowel -vowelize -vowelized -vowelizes -vowelizing -vowels -vower -vowers -vowing -vowless -vows -vox -voyage -voyaged -voyager -voyagers -voyages -voyageur -voyageurs -voyaging -voyeur -voyeurism -voyeurisms -voyeuristic -voyeuristically -voyeurs -vroom -vroomed -vrooming -vrooms -vrouw -vrouws -vrow -vrows -vug -vugg -vuggier -vuggiest -vuggs -vuggy -vugh -vughs -vugs -vulcanian -vulcanic -vulcanicities -vulcanicity -vulcanisate -vulcanisates -vulcanisation -vulcanisations -vulcanise -vulcanised -vulcanises -vulcanising -vulcanism -vulcanisms -vulcanizate -vulcanizates -vulcanization -vulcanizations -vulcanize -vulcanized -vulcanizer -vulcanizers -vulcanizes -vulcanizing -vulcanologies -vulcanologist -vulcanologists -vulcanology -vulgar -vulgarer -vulgarest -vulgarian -vulgarians -vulgarise -vulgarised -vulgarises -vulgarising -vulgarism -vulgarisms -vulgarities -vulgarity -vulgarization -vulgarizations -vulgarize -vulgarized -vulgarizer -vulgarizers -vulgarizes -vulgarizing -vulgarly -vulgars -vulgate -vulgates -vulgo -vulgus -vulguses -vulnerabilities -vulnerability -vulnerable -vulnerableness -vulnerablenesses -vulnerably -vulneraries -vulnerary -vulpine -vulture -vultures -vulturine -vulturish -vulturous -vulva -vulvae -vulval -vulvar -vulvas -vulvate -vulvitis -vulvitises -vulvovaginitides -vulvovaginitis -vying -vyingly -wab -wabble -wabbled -wabbler -wabblers -wabbles -wabblier -wabbliest -wabbling -wabbly -wabs -wack -wacke -wackes -wackier -wackiest -wackily -wackiness -wackinesses -wacko -wackoes -wackos -wacks -wacky -wad -wadable -wadded -wadder -wadders -waddie -waddied -waddies -wadding -waddings -waddle -waddled -waddler -waddlers -waddles -waddling -waddly -waddy -waddying -wade -wadeable -waded -wader -waders -wades -wadi -wadies -wading -wadis -wadmaal -wadmaals -wadmal -wadmals -wadmel -wadmels -wadmol -wadmoll -wadmolls -wadmols -wads -wadset -wadsets -wadsetted -wadsetting -wady -wae -waeful -waeness -waenesses -waes -waesuck -waesucks -wafer -wafered -wafering -wafers -wafery -waff -waffed -waffie -waffies -waffing -waffle -waffled -waffler -wafflers -waffles -wafflestomper -wafflestompers -waffling -wafflings -waffs -waft -waftage -waftages -wafted -wafter -wafters -wafting -wafts -wafture -waftures -wag -wage -waged -wageless -wager -wagered -wagerer -wagerers -wagering -wagers -wages -wageworker -wageworkers -wagged -wagger -waggeries -waggers -waggery -wagging -waggish -waggishly -waggishness -waggishnesses -waggle -waggled -waggles -waggling -waggly -waggon -waggoned -waggoner -waggoners -waggoning -waggons -waging -wagon -wagonage -wagonages -wagoned -wagoner -wagoners -wagonette -wagonettes -wagoning -wagons -wags -wagsome -wagtail -wagtails -wahconda -wahcondas -wahine -wahines -wahoo -wahoos -waif -waifed -waifing -waiflike -waifs -wail -wailed -wailer -wailers -wailful -wailfully -wailing -wails -wailsome -wain -wains -wainscot -wainscoted -wainscoting -wainscotings -wainscots -wainscotted -wainscotting -wainscottings -wainwright -wainwrights -wair -waired -wairing -wairs -waist -waistband -waistbands -waistcoat -waistcoated -waistcoats -waisted -waister -waisters -waisting -waistings -waistline -waistlines -waists -wait -waited -waiter -waiters -waiting -waitings -waitperson -waitpersons -waitress -waitressed -waitresses -waitressing -waits -waitstaff -waitstaffs -waive -waived -waiver -waivers -waives -waiving -wakanda -wakandas -wake -waked -wakeful -wakefully -wakefulness -wakefulnesses -wakeless -waken -wakened -wakener -wakeners -wakening -wakenings -wakens -waker -wakerife -wakers -wakes -wakiki -wakikis -waking -waldo -waldoes -wale -waled -waler -walers -wales -walies -waling -walk -walkable -walkabout -walkabouts -walkathon -walkathons -walkaway -walkaways -walked -walker -walkers -walking -walkings -walkingstick -walkingsticks -walkout -walkouts -walkover -walkovers -walks -walkup -walkups -walkway -walkways -walkyrie -walkyries -wall -walla -wallabies -wallaby -wallah -wallahs -wallaroo -wallaroos -wallas -wallboard -wallboards -walled -wallet -wallets -walleye -walleyed -walleyes -wallflower -wallflowers -wallie -wallies -walling -wallop -walloped -walloper -wallopers -walloping -wallops -wallow -wallowed -wallower -wallowers -wallowing -wallows -wallpaper -wallpapered -wallpapering -wallpapers -walls -wally -wallydraigle -wallydraigles -walnut -walnuts -walrus -walruses -waltz -waltzed -waltzer -waltzers -waltzes -waltzing -waly -wamble -wambled -wambles -wamblier -wambliest -wambling -wambly -wame -wamefou -wamefous -wameful -wamefuls -wames -wammus -wammuses -wampish -wampished -wampishes -wampishing -wampum -wampumpeag -wampumpeags -wampums -wampus -wampuses -wamus -wamuses -wan -wand -wander -wandered -wanderer -wanderers -wandering -wanderings -wanderlust -wanderlusts -wanderoo -wanderoos -wanders -wandle -wands -wane -waned -wanes -waney -wangan -wangans -wangle -wangled -wangler -wanglers -wangles -wangling -wangun -wanguns -wanier -waniest -wanigan -wanigans -waning -wanion -wanions -wanly -wannabe -wannabes -wanned -wanner -wanness -wannesses -wannest -wannigan -wannigans -wanning -wans -want -wantage -wantages -wanted -wanter -wanters -wanting -wanton -wantoned -wantoner -wantoners -wantoning -wantonly -wantonness -wantonnesses -wantons -wants -wany -wap -wapentake -wapentakes -wapiti -wapitis -wapped -wappenschawing -wappenschawings -wapping -waps -war -warble -warbled -warbler -warblers -warbles -warbling -warbonnet -warbonnets -warcraft -warcrafts -ward -warded -warden -wardenries -wardenry -wardens -wardenship -wardenships -warder -warders -warding -wardress -wardresses -wardrobe -wardrobes -wardroom -wardrooms -wards -wardship -wardships -ware -wared -warehouse -warehoused -warehouseman -warehousemen -warehouser -warehousers -warehouses -warehousing -wareroom -warerooms -wares -warez -warfare -warfares -warfarin -warfarins -warhead -warheads -warhorse -warhorses -warier -wariest -warily -wariness -warinesses -waring -warison -warisons -wark -warked -warking -warks -warless -warlike -warlock -warlocks -warlord -warlordism -warlordisms -warlords -warm -warmaker -warmakers -warmblooded -warmed -warmer -warmers -warmest -warmhearted -warmheartedness -warmheartednesses -warming -warmish -warmly -warmness -warmnesses -warmonger -warmongering -warmongerings -warmongers -warmouth -warmouths -warms -warmth -warmths -warmup -warmups -warn -warned -warner -warners -warning -warningly -warnings -warns -warp -warpage -warpages -warpath -warpaths -warped -warper -warpers -warping -warplane -warplanes -warpower -warpowers -warps -warpwise -warragal -warragals -warrant -warrantable -warrantableness -warrantablenesses -warrantably -warranted -warrantee -warrantees -warranter -warranters -warranties -warranting -warrantless -warrantor -warrantors -warrants -warranty -warred -warren -warrener -warreners -warrens -warrigal -warrigals -warring -warrior -warriors -wars -warsaw -warsaws -warship -warships -warsle -warsled -warsler -warslers -warsles -warsling -warstle -warstled -warstler -warstlers -warstles -warstling -wart -warted -warthog -warthogs -wartier -wartiest -wartime -wartimes -wartless -wartlike -warts -warty -warwork -warworks -warworn -wary -was -wasabi -wasabis -wash -washabilities -washability -washable -washables -washateria -washaterias -washbasin -washbasins -washboard -washboards -washbowl -washbowls -washcloth -washcloths -washday -washdays -washed -washer -washerman -washermen -washers -washerwoman -washerwomen -washes -washeteria -washeterias -washhouse -washhouses -washier -washiest -washing -washings -washout -washouts -washrag -washrags -washroom -washrooms -washstand -washstands -washtub -washtubs -washup -washups -washwoman -washwomen -washy -wasp -waspier -waspiest -waspily -waspish -waspishly -waspishness -waspishnesses -wasplike -wasps -waspy -wassail -wassailed -wassailer -wassailers -wassailing -wassails -wast -wastable -wastage -wastages -waste -wastebasket -wastebaskets -wasted -wasteful -wastefully -wastefulness -wastefulnesses -wasteland -wastelands -wastelot -wastelots -wastepaper -wastepapers -waster -wasterie -wasteries -wasters -wastery -wastes -wastewater -wastewaters -wasteway -wasteways -wasting -wastrel -wastrels -wastrie -wastries -wastry -wasts -wat -watap -watape -watapes -wataps -watch -watchable -watchables -watchband -watchbands -watchcase -watchcases -watchcries -watchcry -watchdog -watchdogged -watchdogging -watchdogs -watched -watcher -watchers -watches -watcheye -watcheyes -watchful -watchfully -watchfulness -watchfulnesses -watching -watchmaker -watchmakers -watchmaking -watchmakings -watchman -watchmen -watchout -watchouts -watchtower -watchtowers -watchword -watchwords -water -waterage -waterages -waterbed -waterbeds -waterbird -waterbirds -waterborne -waterbuck -waterbucks -watercolor -watercolorist -watercolorists -watercolors -watercooler -watercoolers -watercourse -watercourses -watercraft -watercrafts -watercress -watercresses -waterdog -waterdogs -watered -waterer -waterers -waterfall -waterfalls -waterflood -waterflooded -waterflooding -waterfloods -waterfowl -waterfowler -waterfowlers -waterfowling -waterfowlings -waterfowls -waterfront -waterfronts -waterier -wateriest -waterily -wateriness -waterinesses -watering -waterings -waterish -waterishness -waterishnesses -waterleaf -waterleafs -waterless -waterlessness -waterlessnesses -waterline -waterlines -waterlog -waterlogged -waterlogging -waterlogs -waterloo -waterloos -waterman -watermanship -watermanships -watermark -watermarked -watermarking -watermarks -watermelon -watermelons -watermen -waterpower -waterpowers -waterproof -waterproofed -waterproofer -waterproofers -waterproofing -waterproofings -waterproofness -waterproofnesses -waterproofs -waters -waterscape -waterscapes -watershed -watersheds -waterside -watersides -waterskiing -waterskiings -waterspout -waterspouts -waterthrush -waterthrushes -watertight -watertightness -watertightnesses -waterway -waterways -waterweed -waterweeds -waterwheel -waterwheels -waterworks -waterworn -watery -waterzooi -waterzoois -wats -watt -wattage -wattages -wattape -wattapes -watter -wattest -watthour -watthours -wattle -wattlebird -wattlebirds -wattled -wattles -wattless -wattling -wattmeter -wattmeters -watts -waucht -wauchted -wauchting -wauchts -waugh -waught -waughted -waughting -waughts -wauk -wauked -wauking -wauks -waul -wauled -wauling -wauls -waur -wave -waveband -wavebands -waved -waveform -waveforms -waveguide -waveguides -wavelength -wavelengths -waveless -wavelessly -wavelet -wavelets -wavelike -waveoff -waveoffs -waver -wavered -waverer -waverers -wavering -waveringly -wavers -wavery -waves -waveshape -waveshapes -wavey -waveys -wavier -wavies -waviest -wavily -waviness -wavinesses -waving -wavy -waw -wawl -wawled -wawling -wawls -waws -wax -waxberries -waxberry -waxbill -waxbills -waxed -waxen -waxer -waxers -waxes -waxier -waxiest -waxily -waxiness -waxinesses -waxing -waxings -waxlike -waxplant -waxplants -waxweed -waxweeds -waxwing -waxwings -waxwork -waxworks -waxworm -waxworms -waxy -way -waybill -waybills -wayfarer -wayfarers -wayfaring -waygoing -waygoings -waylaid -waylay -waylayer -waylayers -waylaying -waylays -wayless -ways -wayside -waysides -wayward -waywardly -waywardness -waywardnesses -wayworn -wazoo -wazoos -we -weak -weaken -weakened -weakener -weakeners -weakening -weakens -weaker -weakest -weakfish -weakfishes -weakhearted -weakish -weaklier -weakliest -weakliness -weaklinesses -weakling -weaklings -weakly -weakness -weaknesses -weakside -weaksides -weal -weald -wealds -weals -wealth -wealthier -wealthiest -wealthily -wealthiness -wealthinesses -wealths -wealthy -wean -weaned -weaner -weaners -weaning -weanling -weanlings -weans -weapon -weaponed -weaponing -weaponless -weaponries -weaponry -weapons -wear -wearabilities -wearability -wearable -wearables -wearer -wearers -wearied -wearier -wearies -weariest -weariful -wearifully -wearifulness -wearifulnesses -weariless -wearilessly -wearily -weariness -wearinesses -wearing -wearingly -wearish -wearisome -wearisomely -wearisomeness -wearisomenesses -wears -weary -wearying -weasand -weasands -weasel -weaseled -weaseling -weaselled -weaselling -weaselly -weasels -weasely -weason -weasons -weather -weatherabilities -weatherability -weatherboard -weatherboarded -weatherboarding -weatherboardings -weatherboards -weathercast -weathercaster -weathercasters -weathercasts -weathercock -weathercocks -weathered -weatherglass -weatherglasses -weathering -weatherings -weatherization -weatherizations -weatherize -weatherized -weatherizes -weatherizing -weatherly -weatherman -weathermen -weatherperson -weatherpersons -weatherproof -weatherproofed -weatherproofing -weatherproofness -weatherproofnesses -weatherproofs -weathers -weatherworn -weave -weaved -weaver -weaverbird -weaverbirds -weavers -weaves -weaving -weazand -weazands -web -webbed -webbier -webbiest -webbing -webbings -webby -weber -webers -webfed -webfeet -webfoot -webless -weblike -webs -website -websites -webster -websters -webwork -webworks -webworm -webworms -wecht -wechts -wed -wedded -wedder -wedders -wedding -weddings -wedel -wedeled -wedeling -wedeln -wedelns -wedels -wedge -wedged -wedges -wedgie -wedgier -wedgies -wedgiest -wedging -wedgy -wedlock -wedlocks -weds -wee -weed -weeded -weeder -weeders -weedier -weediest -weedily -weediness -weedinesses -weeding -weedless -weedlike -weeds -weedy -week -weekday -weekdays -weekend -weekended -weekender -weekenders -weekending -weekends -weeklies -weeklong -weekly -weeknight -weeknights -weeks -weel -ween -weened -weenie -weenier -weenies -weeniest -weening -weens -weensier -weensiest -weensy -weeny -weep -weeper -weepers -weepie -weepier -weepies -weepiest -weeping -weepings -weeps -weepy -weer -wees -weest -weet -weeted -weeting -weets -weever -weevers -weevil -weeviled -weevilly -weevils -weevily -weewee -weeweed -weeweeing -weewees -weft -wefts -weftwise -weigela -weigelas -weigelia -weigelias -weigh -weighable -weighed -weigher -weighers -weighing -weighman -weighmen -weighs -weight -weighted -weighter -weighters -weightier -weightiest -weightily -weightiness -weightinesses -weighting -weightless -weightlessly -weightlessness -weightlessnesses -weightlifter -weightlifters -weightlifting -weightliftings -weights -weighty -weimaraner -weimaraners -weiner -weiners -weir -weird -weirder -weirdest -weirdie -weirdies -weirdly -weirdness -weirdnesses -weirdo -weirdoes -weirdos -weirds -weirdy -weirs -weisenheimer -weisenheimers -weka -wekas -welch -welched -welcher -welchers -welches -welching -welcome -welcomed -welcomely -welcomeness -welcomenesses -welcomer -welcomers -welcomes -welcoming -weld -weldable -welded -welder -welders -welding -weldless -weldment -weldments -weldor -weldors -welds -welfare -welfares -welfarism -welfarisms -welfarist -welfarists -welkin -welkins -well -welladay -welladays -wellaway -wellaways -wellborn -wellcurb -wellcurbs -welldoer -welldoers -welled -wellhead -wellheads -wellhole -wellholes -wellie -wellies -welling -wellness -wellnesses -wells -wellsite -wellsites -wellspring -wellsprings -welly -welsh -welshed -welsher -welshers -welshes -welshing -welt -weltanschauung -weltanschauungen -weltanschauungs -welted -welter -weltered -weltering -welters -welterweight -welterweights -welting -weltings -welts -weltschmerz -weltschmerzes -wen -wench -wenched -wencher -wenchers -wenches -wenching -wend -wended -wendigo -wendigoes -wendigos -wending -wends -wennier -wenniest -wennish -wenny -wens -went -wentletrap -wentletraps -wept -were -weregild -weregilds -werewolf -werewolves -wergeld -wergelds -wergelt -wergelts -wergild -wergilds -wert -werwolf -werwolves -weskit -weskits -wessand -wessands -west -westbound -wester -westered -westering -westerlies -westerly -western -westerner -westerners -westernisation -westernisations -westernise -westernised -westernises -westernising -westernization -westernizations -westernize -westernized -westernizes -westernizing -westernmost -westerns -westers -westing -westings -westmost -wests -westward -westwards -wet -wetback -wetbacks -wether -wethers -wetland -wetlands -wetly -wetness -wetnesses -wetproof -wets -wetsuit -wetsuits -wettabilities -wettability -wettable -wetted -wetter -wetters -wettest -wetting -wettings -wettish -wetware -wetwares -wha -whack -whacked -whacker -whackers -whackier -whackiest -whacking -whacko -whackos -whacks -whacky -whale -whaleback -whalebacks -whaleboat -whaleboats -whalebone -whalebones -whaled -whalelike -whaleman -whalemen -whaler -whalers -whales -whaling -whalings -wham -whammed -whammies -whamming -whammo -whammy -whamo -whams -whang -whanged -whangee -whangees -whanging -whangs -whap -whapped -whapper -whappers -whapping -whaps -wharf -wharfage -wharfages -wharfed -wharfing -wharfinger -wharfingers -wharfmaster -wharfmasters -wharfs -wharve -wharves -what -whatchamacallit -whatchamacallits -whatever -whatness -whatnesses -whatnot -whatnots -whats -whatshisname -whatsis -whatsises -whatsit -whatsits -whatsoever -whaup -whaups -wheal -wheals -wheat -wheatear -wheatears -wheaten -wheatens -wheats -whee -wheedle -wheedled -wheedler -wheedlers -wheedles -wheedling -wheel -wheelbarrow -wheelbarrowed -wheelbarrowing -wheelbarrows -wheelbase -wheelbases -wheelchair -wheelchairs -wheeled -wheeler -wheelers -wheelhorse -wheelhorses -wheelhouse -wheelhouses -wheelie -wheelies -wheeling -wheelings -wheelless -wheelman -wheelmen -wheels -wheelsman -wheelsmen -wheelwork -wheelworks -wheelwright -wheelwrights -wheen -wheens -wheep -wheeped -wheeping -wheeple -wheepled -wheeples -wheepling -wheeps -wheeze -wheezed -wheezer -wheezers -wheezes -wheezier -wheeziest -wheezily -wheeziness -wheezinesses -wheezing -wheezy -whelk -whelkier -whelkiest -whelks -whelky -whelm -whelmed -whelming -whelms -whelp -whelped -whelping -whelps -when -whenas -whence -whencesoever -whenever -whens -whensoever -where -whereabout -whereabouts -whereas -whereases -whereat -whereby -wherefore -wherefores -wherefrom -wherein -whereinto -whereof -whereon -wheres -wheresoever -wherethrough -whereto -whereunto -whereupon -wherever -wherewith -wherewithal -wherewithals -wherried -wherries -wherry -wherrying -wherve -wherves -whet -whether -whets -whetstone -whetstones -whetted -whetter -whetters -whetting -whew -whews -whey -wheyey -wheyface -wheyfaces -wheyish -wheylike -wheys -which -whichever -whichsoever -whicker -whickered -whickering -whickers -whid -whidah -whidahs -whidded -whidding -whids -whiff -whiffed -whiffer -whiffers -whiffet -whiffets -whiffing -whiffle -whiffled -whiffler -whifflers -whiffles -whiffletree -whiffletrees -whiffling -whiffs -whig -whigmaleerie -whigmaleeries -whigs -while -whiled -whiles -whiling -whilom -whilst -whim -whimbrel -whimbrels -whimper -whimpered -whimpering -whimpers -whims -whimsey -whimseys -whimsical -whimsicalities -whimsicality -whimsically -whimsicalness -whimsicalnesses -whimsied -whimsies -whimsy -whin -whinchat -whinchats -whine -whined -whiner -whiners -whines -whiney -whinge -whinged -whingeing -whinges -whinging -whinier -whiniest -whining -whiningly -whinnied -whinnier -whinnies -whinniest -whinny -whinnying -whins -whinstone -whinstones -whiny -whip -whipcord -whipcords -whiplash -whiplashes -whiplike -whipped -whipper -whippers -whippersnapper -whippersnappers -whippet -whippets -whippier -whippiest -whipping -whippings -whippletree -whippletrees -whippoorwill -whippoorwills -whippy -whipray -whiprays -whips -whipsaw -whipsawed -whipsawing -whipsawn -whipsaws -whipstitch -whipstitched -whipstitches -whipstitching -whipstock -whipstocks -whipt -whiptail -whiptails -whipworm -whipworms -whir -whirl -whirled -whirler -whirlers -whirlier -whirlies -whirliest -whirligig -whirligigs -whirling -whirlpool -whirlpools -whirls -whirlwind -whirlwinds -whirly -whirlybird -whirlybirds -whirr -whirred -whirried -whirries -whirring -whirrs -whirry -whirrying -whirs -whish -whished -whishes -whishing -whisht -whishted -whishting -whishts -whisk -whisked -whisker -whiskered -whiskers -whiskery -whiskey -whiskeys -whiskies -whisking -whisks -whisky -whisper -whispered -whisperer -whisperers -whispering -whisperingly -whisperings -whispers -whispery -whist -whisted -whisting -whistle -whistleable -whistleblower -whistleblowers -whistleblowing -whistleblowings -whistled -whistler -whistlers -whistles -whistling -whistlings -whists -whit -white -whitebait -whitebaits -whitebeard -whitebeards -whiteboard -whiteboards -whitecap -whitecaps -whited -whiteface -whitefaces -whitefish -whitefishes -whiteflies -whitefly -whitehead -whiteheads -whitely -whiten -whitened -whitener -whiteners -whiteness -whitenesses -whitening -whitenings -whitens -whiteout -whiteouts -whiter -whites -whitesmith -whitesmiths -whitest -whitetail -whitetails -whitethroat -whitethroats -whitewall -whitewalls -whitewash -whitewashed -whitewasher -whitewashers -whitewashes -whitewashing -whitewashings -whitewing -whitewings -whitewood -whitewoods -whitey -whiteys -whither -whithersoever -whitherward -whitier -whities -whitiest -whiting -whitings -whitish -whitlow -whitlows -whitrack -whitracks -whits -whitter -whitters -whittle -whittled -whittler -whittlers -whittles -whittling -whittlings -whittret -whittrets -whity -whiz -whizbang -whizbangs -whizz -whizzbang -whizzbangs -whizzed -whizzer -whizzers -whizzes -whizzing -who -whoa -whodunit -whodunits -whodunnit -whodunnits -whoever -whole -wholehearted -wholeheartedly -wholeness -wholenesses -wholes -wholesale -wholesaled -wholesaler -wholesalers -wholesales -wholesaling -wholesome -wholesomely -wholesomeness -wholesomenesses -wholism -wholisms -wholistic -wholly -whom -whomever -whomp -whomped -whomping -whomps -whomso -whomsoever -whoof -whoofed -whoofing -whoofs -whoop -whooped -whoopee -whoopees -whooper -whoopers -whoopie -whooping -whoopla -whooplas -whoops -whoosh -whooshed -whooshes -whooshing -whoosis -whoosises -whop -whopped -whopper -whoppers -whopping -whops -whore -whored -whoredom -whoredoms -whorehouse -whorehouses -whoremaster -whoremasters -whoremonger -whoremongers -whores -whoreson -whoresons -whoring -whorish -whorl -whorled -whorls -whort -whortle -whortleberries -whortleberry -whortles -whorts -whose -whosesoever -whosever -whosis -whosises -whoso -whosoever -whump -whumped -whumping -whumps -why -whydah -whydahs -whys -wich -wiches -wick -wickape -wickapes -wicked -wickeder -wickedest -wickedly -wickedness -wickednesses -wicker -wickers -wickerwork -wickerworks -wicket -wickets -wicking -wickings -wickiup -wickiups -wicks -wickyup -wickyups -wicopies -wicopy -widder -widders -widdershins -widdie -widdies -widdle -widdled -widdles -widdling -widdy -wide -wideawake -wideawakes -wideband -widely -widemouthed -widen -widened -widener -wideners -wideness -widenesses -widening -widens -wideout -wideouts -wider -wides -widespread -widest -widgeon -widgeons -widget -widgets -widish -widow -widowed -widower -widowerhood -widowerhoods -widowers -widowhood -widowhoods -widowing -widows -width -widths -widthway -wield -wielded -wielder -wielders -wieldier -wieldiest -wielding -wields -wieldy -wiener -wieners -wienerwurst -wienerwursts -wienie -wienies -wife -wifed -wifedom -wifedoms -wifehood -wifehoods -wifeless -wifelier -wifeliest -wifelike -wifeliness -wifelinesses -wifely -wifes -wifing -wiftier -wiftiest -wifty -wig -wigan -wigans -wigeon -wigeons -wigged -wiggeries -wiggery -wiggier -wiggiest -wigging -wiggings -wiggle -wiggled -wiggler -wigglers -wiggles -wigglier -wiggliest -wiggling -wiggly -wiggy -wight -wights -wigless -wiglet -wiglets -wiglike -wigmaker -wigmakers -wigs -wigwag -wigwagged -wigwagging -wigwags -wigwam -wigwams -wikiup -wikiups -wilco -wild -wildcat -wildcats -wildcatted -wildcatter -wildcatters -wildcatting -wildebeest -wildebeests -wilder -wildered -wildering -wilderment -wilderments -wilderness -wildernesses -wilders -wildest -wildfire -wildfires -wildflower -wildflowers -wildfowl -wildfowler -wildfowlers -wildfowling -wildfowlings -wildfowls -wilding -wildings -wildish -wildland -wildlands -wildlife -wildling -wildlings -wildly -wildness -wildnesses -wilds -wildwood -wildwoods -wile -wiled -wiles -wilful -wilfully -wilier -wiliest -wilily -wiliness -wilinesses -wiling -will -willable -willed -willemite -willemites -willer -willers -willet -willets -willful -willfully -willfulness -willfulnesses -willied -willies -willing -willinger -willingest -willingly -willingness -willingnesses -williwau -williwaus -williwaw -williwaws -willow -willowed -willower -willowers -willowier -willowiest -willowing -willowlike -willows -willowware -willowwares -willowy -willpower -willpowers -wills -willy -willyard -willyart -willying -willywaw -willywaws -wilt -wilted -wilting -wilts -wily -wimble -wimbled -wimbles -wimbling -wimp -wimpier -wimpiest -wimpiness -wimpinesses -wimpish -wimpishness -wimpishnesses -wimple -wimpled -wimples -wimpling -wimps -wimpy -win -wince -winced -wincer -wincers -winces -wincey -winceys -winch -winched -wincher -winchers -winches -winching -wincing -wind -windable -windage -windages -windbag -windbags -windblast -windblasts -windblown -windbreak -windbreaker -windbreakers -windbreaks -windburn -windburned -windburning -windburns -windburnt -windchill -windchills -winded -winder -winders -windfall -windfalls -windflaw -windflaws -windflower -windflowers -windgall -windgalls -windhover -windhovers -windier -windiest -windigo -windigoes -windigos -windily -windiness -windinesses -winding -windings -windjammer -windjammers -windjamming -windjammings -windlass -windlassed -windlasses -windlassing -windle -windled -windles -windless -windlessly -windlestraw -windlestraws -windling -windlings -windmill -windmilled -windmilling -windmills -window -windowed -windowing -windowless -windowpane -windowpanes -windows -windowsill -windowsills -windpipe -windpipes -windproof -windrow -windrowed -windrowing -windrows -winds -windscreen -windscreens -windshield -windshields -windsock -windsocks -windstorm -windstorms -windsurf -windsurfed -windsurfing -windsurfings -windsurfs -windswept -windthrow -windthrows -windup -windups -windward -windwards -windway -windways -windy -wine -wined -wineglass -wineglasses -winegrower -winegrowers -wineless -winemaker -winemakers -winemaking -winemakings -winepress -winepresses -wineries -winery -wines -wineshop -wineshops -wineskin -wineskins -winesop -winesops -winey -wing -wingback -wingbacks -wingbow -wingbows -wingding -wingdings -winged -wingedly -winger -wingers -wingier -wingiest -winging -wingless -winglessness -winglessnesses -winglet -winglets -winglike -wingman -wingmen -wingover -wingovers -wings -wingspan -wingspans -wingspread -wingspreads -wingtip -wingtips -wingy -winier -winiest -wining -winish -wink -winked -winker -winkers -winking -winkle -winkled -winkles -winkling -winks -winless -winnable -winned -winner -winners -winning -winningly -winnings -winnock -winnocks -winnow -winnowed -winnower -winnowers -winnowing -winnows -wino -winoes -winos -wins -winsome -winsomely -winsomeness -winsomenesses -winsomer -winsomest -winter -winterberries -winterberry -wintered -winterer -winterers -wintergreen -wintergreens -winterier -winteriest -wintering -winterization -winterizations -winterize -winterized -winterizes -winterizing -winterkill -winterkills -winterly -winters -wintertide -wintertides -wintertime -wintertimes -wintery -wintle -wintled -wintles -wintling -wintrier -wintriest -wintrily -wintriness -wintrinesses -wintry -winy -winze -winzes -wipe -wiped -wipeout -wipeouts -wiper -wipers -wipes -wiping -wirable -wire -wired -wiredraw -wiredrawer -wiredrawers -wiredrawing -wiredrawn -wiredraws -wiredrew -wirehair -wirehaired -wirehairs -wireless -wirelessed -wirelesses -wirelessing -wirelike -wireman -wiremen -wirephoto -wirephotos -wirer -wirers -wires -wiretap -wiretapped -wiretapper -wiretappers -wiretapping -wiretaps -wireway -wireways -wirework -wireworks -wireworm -wireworms -wirier -wiriest -wirily -wiriness -wirinesses -wiring -wirings -wirra -wiry -wis -wisdom -wisdoms -wise -wiseacre -wiseacres -wiseass -wiseasses -wisecrack -wisecracked -wisecracker -wisecrackers -wisecracking -wisecracks -wised -wiseguy -wiseguys -wiselier -wiseliest -wisely -wiseness -wisenesses -wisenheimer -wisenheimers -wisent -wisents -wiser -wises -wisest -wisewoman -wisewomen -wish -wisha -wishbone -wishbones -wished -wisher -wishers -wishes -wishful -wishfully -wishfulness -wishfulnesses -wishing -wishless -wising -wisp -wisped -wispier -wispiest -wispily -wispiness -wispinesses -wisping -wispish -wisplike -wisps -wispy -wiss -wissed -wisses -wissing -wist -wistaria -wistarias -wisted -wisteria -wisterias -wistful -wistfully -wistfulness -wistfulnesses -wisting -wists -wit -witan -witch -witchcraft -witchcrafts -witched -witcheries -witchery -witches -witchgrass -witchgrasses -witchier -witchiest -witching -witchings -witchlike -witchweed -witchweeds -witchy -wite -wited -witenagemot -witenagemote -witenagemotes -witenagemots -wites -with -withal -withdraw -withdrawable -withdrawal -withdrawals -withdrawing -withdrawn -withdrawnness -withdrawnnesses -withdraws -withdrew -withe -withed -wither -withered -witherer -witherers -withering -witheringly -witherite -witherites -withers -withershins -withes -withheld -withhold -withholder -withholders -withholding -withholds -withier -withies -withiest -within -withindoors -withing -withins -without -withoutdoors -withouts -withstand -withstanding -withstands -withstood -withy -witing -witless -witlessly -witlessness -witlessnesses -witling -witlings -witloof -witloofs -witness -witnessed -witnesses -witnessing -witney -witneys -wits -witted -witticism -witticisms -wittier -wittiest -wittily -wittiness -wittinesses -witting -wittingly -wittings -wittol -wittols -witty -wive -wived -wiver -wivern -wiverns -wivers -wives -wiving -wiz -wizard -wizardly -wizardries -wizardry -wizards -wizen -wizened -wizening -wizens -wizes -wizzen -wizzens -wizzes -wo -woad -woaded -woads -woadwax -woadwaxes -woald -woalds -wobble -wobbled -wobbler -wobblers -wobbles -wobblier -wobblies -wobbliest -wobbliness -wobblinesses -wobbling -wobbly -wobegone -wodge -wodges -woe -woebegone -woebegoneness -woebegonenesses -woeful -woefuller -woefullest -woefully -woefulness -woefulnesses -woeness -woenesses -woes -woesome -woful -wofully -wog -wogs -wok -woke -woken -woks -wold -wolds -wolf -wolfberries -wolfberry -wolfed -wolfer -wolfers -wolffish -wolffishes -wolfhound -wolfhounds -wolfing -wolfish -wolfishly -wolfishness -wolfishnesses -wolflike -wolfram -wolframite -wolframites -wolframs -wolfs -wolfsbane -wolfsbanes -wollastonite -wollastonites -wolver -wolverine -wolverines -wolvers -wolves -woman -womaned -womanhood -womanhoods -womaning -womanise -womanised -womanises -womanish -womanishly -womanishness -womanishnesses -womanising -womanize -womanized -womanizer -womanizers -womanizes -womanizing -womankind -womanless -womanlier -womanliest -womanlike -womanliness -womanlinesses -womanly -womanpower -womanpowers -womans -womb -wombat -wombats -wombed -wombier -wombiest -womblike -wombs -womby -women -womenfolk -womenfolks -womenkind -womera -womeras -wommera -wommeras -won -wonder -wondered -wonderer -wonderers -wonderful -wonderfully -wonderfulness -wonderfulnesses -wondering -wonderland -wonderlands -wonderment -wonderments -wonders -wonderwork -wonderworks -wondrous -wondrously -wondrousness -wondrousnesses -wonk -wonkier -wonkiest -wonks -wonky -wonned -wonner -wonners -wonning -wons -wont -wonted -wontedly -wontedness -wontednesses -wonting -wonton -wontons -wonts -woo -wood -woodbin -woodbind -woodbinds -woodbine -woodbines -woodbins -woodblock -woodblocks -woodbox -woodboxes -woodcarver -woodcarvers -woodcarving -woodcarvings -woodchat -woodchats -woodchopper -woodchoppers -woodchuck -woodchucks -woodcock -woodcocks -woodcraft -woodcrafts -woodcut -woodcuts -woodcutter -woodcutters -woodcutting -woodcuttings -wooded -wooden -woodener -woodenest -woodenhead -woodenheaded -woodenheads -woodenly -woodenness -woodennesses -woodenware -woodenwares -woodhen -woodhens -woodie -woodier -woodies -woodiest -woodiness -woodinesses -wooding -woodland -woodlander -woodlanders -woodlands -woodlark -woodlarks -woodless -woodlore -woodlores -woodlot -woodlots -woodman -woodmen -woodnote -woodnotes -woodpecker -woodpeckers -woodpile -woodpiles -woodruff -woodruffs -woods -woodshed -woodshedded -woodshedding -woodsheds -woodsia -woodsias -woodsier -woodsiest -woodsman -woodsmen -woodstove -woodstoves -woodsy -woodwax -woodwaxes -woodwind -woodwinds -woodwork -woodworker -woodworkers -woodworking -woodworkings -woodworks -woodworm -woodworms -woody -wooed -wooer -wooers -woof -woofed -woofer -woofers -woofing -woofs -wooing -wooingly -wool -wooled -woolen -woolens -wooler -woolers -woolfell -woolfells -woolgatherer -woolgatherers -woolgathering -woolgatherings -woolhat -woolhats -woolie -woolier -woolies -wooliest -woolled -woollen -woollens -woollier -woollies -woolliest -woollike -woollily -woolliness -woollinesses -woolly -woolman -woolmen -woolpack -woolpacks -wools -woolsack -woolsacks -woolshed -woolsheds -woolskin -woolskins -woolwork -woolworks -wooly -woomera -woomeras -woops -woopsed -woopses -woopsing -woorali -wooralis -woorari -wooraris -woos -woosh -wooshed -wooshes -wooshing -woozier -wooziest -woozily -wooziness -woozinesses -woozy -wop -wops -word -wordage -wordages -wordbook -wordbooks -worded -wordier -wordiest -wordily -wordiness -wordinesses -wording -wordings -wordless -wordlessly -wordlessness -wordlessnesses -wordmonger -wordmongers -wordplay -wordplays -words -wordsmith -wordsmitheries -wordsmithery -wordsmiths -wordy -wore -work -workabilities -workability -workable -workableness -workablenesses -workaday -workaholic -workaholics -workaholism -workaholisms -workaround -workarounds -workbag -workbags -workbasket -workbaskets -workbench -workbenches -workboat -workboats -workbook -workbooks -workbox -workboxes -workday -workdays -worked -worker -workers -workfare -workfares -workfolk -workfolks -workforce -workforces -workhorse -workhorses -workhouse -workhouses -working -workingman -workingmen -workings -workingwoman -workingwomen -workless -worklessness -worklessnesses -workload -workloads -workman -workmanlike -workmanly -workmanship -workmanships -workmate -workmates -workmen -workout -workouts -workpeople -workpiece -workpieces -workplace -workplaces -workroom -workrooms -works -worksheet -worksheets -workshop -workshops -workstation -workstations -worktable -worktables -workup -workups -workweek -workweeks -workwoman -workwomen -world -worldlier -worldliest -worldliness -worldlinesses -worldling -worldlings -worldly -worlds -worldview -worldviews -worldwide -worm -wormed -wormer -wormers -wormhole -wormholes -wormier -wormiest -wormil -wormils -worming -wormish -wormlike -wormroot -wormroots -worms -wormseed -wormseeds -wormwood -wormwoods -wormy -worn -wornness -wornnesses -worried -worriedly -worrier -worriers -worries -worriment -worriments -worrisome -worrisomely -worrisomeness -worrisomenesses -worrit -worrited -worriting -worrits -worry -worrying -worrywart -worrywarts -worse -worsen -worsened -worsening -worsens -worser -worses -worset -worsets -worship -worshiped -worshiper -worshipers -worshipful -worshipfully -worshipfulness -worshipfulnesses -worshiping -worshipless -worshipped -worshipper -worshippers -worshipping -worships -worst -worsted -worsteds -worsting -worsts -wort -worth -worthed -worthful -worthier -worthies -worthiest -worthily -worthiness -worthinesses -worthing -worthless -worthlessly -worthlessness -worthlessnesses -worths -worthwhile -worthwhileness -worthwhilenesses -worthy -worts -wos -wost -wot -wots -wotted -wotting -would -wouldest -wouldst -wound -wounded -wounding -woundless -wounds -wove -woven -wovens -wow -wowed -wowing -wows -wowser -wowsers -wrack -wracked -wrackful -wracking -wracks -wraith -wraithlike -wraiths -wrang -wrangle -wrangled -wrangler -wranglers -wrangles -wrangling -wrangs -wrap -wraparound -wraparounds -wrapped -wrapper -wrappers -wrapping -wrappings -wraps -wrapt -wrasse -wrasses -wrassle -wrassled -wrassles -wrassling -wrastle -wrastled -wrastles -wrastling -wrath -wrathed -wrathful -wrathfully -wrathfulness -wrathfulnesses -wrathier -wrathiest -wrathily -wrathing -wraths -wrathy -wreak -wreaked -wreaker -wreakers -wreaking -wreaks -wreath -wreathe -wreathed -wreathen -wreathes -wreathing -wreaths -wreathy -wreck -wreckage -wreckages -wrecked -wrecker -wreckers -wreckful -wrecking -wreckings -wrecks -wren -wrench -wrenched -wrenches -wrenching -wrenchingly -wrens -wrest -wrested -wrester -wresters -wresting -wrestle -wrestled -wrestler -wrestlers -wrestles -wrestling -wrestlings -wrests -wretch -wretched -wretcheder -wretchedest -wretchedly -wretchedness -wretchednesses -wretches -wrick -wricked -wricking -wricks -wried -wrier -wries -wriest -wriggle -wriggled -wriggler -wrigglers -wriggles -wrigglier -wriggliest -wriggling -wriggly -wright -wrights -wring -wringed -wringer -wringers -wringing -wrings -wrinkle -wrinkled -wrinkles -wrinklier -wrinkliest -wrinkling -wrinkly -wrist -wristband -wristbands -wristier -wristiest -wristlet -wristlets -wristlock -wristlocks -wrists -wristwatch -wristwatches -wristy -writ -writable -write -writeoff -writeoffs -writer -writerly -writers -writes -writeup -writeups -writhe -writhed -writhen -writher -writhers -writhes -writhing -writing -writings -writs -written -wrong -wrongdoer -wrongdoers -wrongdoing -wrongdoings -wronged -wronger -wrongers -wrongest -wrongful -wrongfully -wrongfulness -wrongfulnesses -wrongheaded -wrongheadedly -wrongheadedness -wrongheadednesses -wronging -wrongly -wrongness -wrongnesses -wrongs -wrote -wroth -wrothful -wrought -wrung -wry -wryer -wryest -wrying -wryly -wryneck -wrynecks -wryness -wrynesses -wud -wulfenite -wulfenites -wunderkind -wunderkinder -wunderkinds -wurst -wursts -wurzel -wurzels -wuss -wusses -wussier -wussies -wussiest -wussy -wuther -wuthered -wuthering -wuthers -wyandotte -wyandottes -wych -wyches -wye -wyes -wyle -wyled -wyles -wyliecoat -wyliecoats -wyling -wyn -wynd -wynds -wynn -wynns -wyns -wyte -wyted -wytes -wyting -wyvern -wyverns -xanthan -xanthans -xanthate -xanthates -xanthein -xantheins -xanthene -xanthenes -xanthic -xanthin -xanthine -xanthines -xanthins -xanthoma -xanthomas -xanthomata -xanthone -xanthones -xanthophyll -xanthophylls -xanthous -xebec -xebecs -xenia -xenial -xenias -xenic -xenobiotic -xenobiotics -xenodiagnoses -xenodiagnosis -xenodiagnostic -xenogamies -xenogamy -xenogeneic -xenogenies -xenogeny -xenograft -xenografts -xenolith -xenolithic -xenoliths -xenon -xenons -xenophile -xenophiles -xenophobe -xenophobes -xenophobia -xenophobias -xenophobic -xenophobically -xenotropic -xerarch -xeric -xerographic -xerographically -xerographies -xerography -xerophile -xerophilies -xerophilous -xerophily -xerophthalmia -xerophthalmias -xerophthalmic -xerophyte -xerophytes -xerophytic -xerophytism -xerophytisms -xeroradiographies -xeroradiography -xerosere -xeroseres -xeroses -xerosis -xerothermic -xerotic -xerox -xeroxed -xeroxes -xeroxing -xerus -xeruses -xi -xiphisterna -xiphisternum -xiphoid -xiphoids -xis -xu -xylan -xylans -xylem -xylems -xylene -xylenes -xylidin -xylidine -xylidines -xylidins -xylitol -xylitols -xylocarp -xylocarps -xylograph -xylographer -xylographers -xylographic -xylographical -xylographies -xylographs -xylography -xyloid -xylol -xylols -xylophagous -xylophone -xylophones -xylophonist -xylophonists -xylose -xyloses -xylotomies -xylotomy -xylyl -xylyls -xyst -xyster -xysters -xysti -xystoi -xystos -xysts -xystus -xystuses -ya -yabber -yabbered -yabbering -yabbers -yacht -yachted -yachter -yachters -yachting -yachtings -yachtman -yachtmen -yachts -yachtsman -yachtsmen -yack -yacked -yacking -yacks -yaff -yaffed -yaffing -yaffs -yager -yagers -yagi -yagis -yah -yahoo -yahooism -yahooisms -yahoos -yahrzeit -yahrzeits -yaird -yairds -yak -yakitori -yakitoris -yakked -yakker -yakkers -yakking -yaks -yald -yam -yamalka -yamalkas -yamen -yamens -yammer -yammered -yammerer -yammerers -yammering -yammers -yams -yamulka -yamulkas -yamun -yamuns -yang -yangs -yank -yanked -yanking -yanks -yanqui -yanquis -yantra -yantras -yap -yapock -yapocks -yapok -yapoks -yapon -yapons -yapped -yapper -yappers -yapping -yappy -yaps -yar -yarborough -yarboroughs -yard -yardage -yardages -yardarm -yardarms -yardbird -yardbirds -yarded -yarding -yardland -yardlands -yardman -yardmaster -yardmasters -yardmen -yards -yardstick -yardsticks -yardwand -yardwands -yardwork -yardworks -yare -yarely -yarer -yarest -yarmelke -yarmelkes -yarmulke -yarmulkes -yarn -yarned -yarner -yarners -yarning -yarns -yarrow -yarrows -yashmac -yashmacs -yashmak -yashmaks -yasmak -yasmaks -yatagan -yatagans -yataghan -yataghans -yatter -yattered -yattering -yatters -yaud -yauds -yauld -yaup -yauped -yauper -yaupers -yauping -yaupon -yaupons -yaups -yautia -yautias -yaw -yawed -yawing -yawl -yawled -yawling -yawls -yawmeter -yawmeters -yawn -yawned -yawner -yawners -yawning -yawningly -yawns -yawp -yawped -yawper -yawpers -yawping -yawpings -yawps -yaws -yay -yays -ycleped -yclept -ye -yea -yeah -yealing -yealings -yean -yeaned -yeaning -yeanling -yeanlings -yeans -year -yearbook -yearbooks -yearend -yearends -yearlies -yearling -yearlings -yearlong -yearly -yearn -yearned -yearner -yearners -yearning -yearningly -yearnings -yearns -years -yeas -yeasayer -yeasayers -yeast -yeasted -yeastier -yeastiest -yeastily -yeastiness -yeastinesses -yeasting -yeasts -yeasty -yecch -yecchs -yech -yechs -yechy -yeelin -yeelins -yegg -yeggman -yeggmen -yeggs -yeh -yeld -yelk -yelks -yell -yelled -yeller -yellers -yelling -yellow -yellowed -yellower -yellowest -yellowfin -yellowfins -yellowhammer -yellowhammers -yellowing -yellowish -yellowlegs -yellowly -yellows -yellowtail -yellowtails -yellowthroat -yellowthroats -yellowware -yellowwares -yellowwood -yellowwoods -yellowy -yells -yelp -yelped -yelper -yelpers -yelping -yelps -yen -yenned -yenning -yens -yenta -yentas -yente -yentes -yeoman -yeomanly -yeomanries -yeomanry -yeomen -yep -yerba -yerbas -yerk -yerked -yerking -yerks -yes -yeses -yeshiva -yeshivah -yeshivahs -yeshivas -yeshivot -yeshivoth -yessed -yesses -yessing -yester -yesterday -yesterdays -yestern -yesternight -yesternights -yesteryear -yesteryears -yestreen -yestreens -yet -yeti -yetis -yett -yetts -yeuk -yeuked -yeuking -yeuks -yeuky -yew -yews -yid -yids -yield -yielded -yielder -yielders -yielding -yields -yikes -yill -yills -yin -yince -yins -yip -yipe -yipes -yipped -yippee -yippie -yippies -yipping -yips -yird -yirds -yirr -yirred -yirring -yirrs -yirth -yirths -ylem -ylems -yo -yob -yobbo -yobboes -yobbos -yobs -yock -yocked -yocking -yocks -yod -yodel -yodeled -yodeler -yodelers -yodeling -yodelled -yodeller -yodellers -yodelling -yodels -yodh -yodhs -yodle -yodled -yodler -yodlers -yodles -yodling -yods -yoga -yogas -yogee -yogees -yogh -yoghourt -yoghourts -yoghs -yoghurt -yoghurts -yogi -yogic -yogin -yogini -yoginis -yogins -yogis -yogurt -yogurts -yohimbine -yohimbines -yoicks -yok -yoke -yoked -yokefellow -yokefellows -yokel -yokeless -yokelish -yokels -yokemate -yokemates -yokes -yoking -yokozuna -yokozunas -yoks -yolk -yolked -yolkier -yolkiest -yolks -yolky -yom -yomim -yon -yond -yonder -yoni -yonic -yonis -yonker -yonkers -yore -yores -yottabyte -yottabytes -you -young -youngberries -youngberry -younger -youngers -youngest -youngish -youngling -younglings -youngness -youngnesses -youngs -youngster -youngsters -younker -younkers -youpon -youpons -your -yourn -yours -yourself -yourselves -youse -youth -youthen -youthened -youthening -youthens -youthful -youthfully -youthfulness -youthfulnesses -youthquake -youthquakes -youths -yow -yowe -yowed -yowes -yowie -yowies -yowing -yowl -yowled -yowler -yowlers -yowling -yowls -yows -yperite -yperites -ytterbia -ytterbias -ytterbic -ytterbium -ytterbiums -yttria -yttrias -yttric -yttrium -yttriums -yuan -yuans -yuca -yucas -yucca -yuccas -yucch -yuch -yuck -yucked -yuckier -yuckiest -yucking -yucks -yucky -yuga -yugas -yuk -yukked -yukking -yuks -yulan -yulans -yule -yules -yuletide -yuletides -yum -yummier -yummies -yummiest -yummy -yup -yupon -yupons -yuppie -yuppies -yups -yurt -yurta -yurts -ywis -zabaglione -zabagliones -zabaione -zabaiones -zabajone -zabajones -zacaton -zacatons -zaddick -zaddik -zaddikim -zaffar -zaffars -zaffer -zaffers -zaffir -zaffirs -zaffre -zaffres -zaftig -zag -zagged -zagging -zags -zaibatsu -zaikai -zaikais -zaire -zaires -zamarra -zamarras -zamarro -zamarros -zamia -zamias -zamindar -zamindari -zamindaris -zamindars -zanana -zananas -zander -zanders -zanier -zanies -zaniest -zanily -zaniness -zaninesses -zany -zanyish -zanza -zanzas -zap -zapateado -zapateados -zapateo -zapateos -zapped -zapper -zappers -zappier -zappiest -zapping -zappy -zaps -zaptiah -zaptiahs -zaptieh -zaptiehs -zaratite -zaratites -zareba -zarebas -zareeba -zareebas -zarf -zarfs -zariba -zaribas -zarzuela -zarzuelas -zastruga -zastrugi -zax -zaxes -zayin -zayins -zazen -zazens -zeal -zealot -zealotries -zealotry -zealots -zealous -zealously -zealousness -zealousnesses -zeals -zeatin -zeatins -zebec -zebeck -zebecks -zebecs -zebra -zebraic -zebras -zebrass -zebrasses -zebrawood -zebrawoods -zebrine -zebroid -zebu -zebus -zecchin -zecchini -zecchino -zecchinos -zecchins -zechin -zechins -zed -zedoaries -zedoary -zeds -zee -zees -zein -zeins -zeitgeber -zeitgebers -zeitgeist -zeitgeists -zek -zeks -zelkova -zelkovas -zemindar -zemindaries -zemindars -zemindary -zemstva -zemstvo -zemstvos -zenaida -zenaidas -zenana -zenanas -zenith -zenithal -zeniths -zeolite -zeolites -zeolitic -zephyr -zephyrs -zeppelin -zeppelins -zeptosecond -zeptoseconds -zerk -zerks -zero -zeroed -zeroes -zeroing -zeros -zeroth -zest -zested -zester -zesters -zestful -zestfully -zestfulness -zestfulnesses -zestier -zestiest -zesting -zestless -zests -zesty -zeta -zetas -zettabyte -zettabytes -zeugma -zeugmas -zibeline -zibelines -zibelline -zibellines -zibet -zibeth -zibeths -zibets -zidovudine -zidovudines -zig -zigamorph -zigamorphs -zigged -zigging -ziggurat -ziggurats -zigs -zigzag -zigzagged -zigzagging -zigzags -zikkurat -zikkurats -zikurat -zikurats -zilch -zilches -zill -zillah -zillahs -zillion -zillionaire -zillionaires -zillions -zillionth -zills -zin -zinc -zincate -zincates -zinced -zincic -zincified -zincifies -zincify -zincifying -zincing -zincite -zincites -zincked -zincking -zincky -zincoid -zincous -zincs -zincy -zineb -zinebs -zinfandel -zinfandels -zing -zingani -zingano -zingara -zingare -zingari -zingaro -zinged -zinger -zingers -zingier -zingiest -zinging -zings -zingy -zinkified -zinkifies -zinkify -zinkifying -zinky -zinnia -zinnias -zins -zip -zipless -zipped -zipper -zippered -zippering -zippers -zippier -zippiest -zipping -zippy -zips -ziram -zirams -zircon -zirconia -zirconias -zirconic -zirconium -zirconiums -zircons -zit -zither -zitherist -zitherists -zithern -zitherns -zithers -ziti -zitis -zits -zizit -zizith -zizzle -zizzled -zizzles -zizzling -zlote -zloties -zloty -zlotych -zlotys -zoa -zoantharian -zoantharians -zoaria -zoarial -zoarium -zoariums -zodiac -zodiacal -zodiacs -zoea -zoeae -zoeal -zoeas -zoecia -zoecium -zoftig -zoic -zoisite -zoisites -zombi -zombie -zombielike -zombies -zombification -zombifications -zombified -zombifies -zombify -zombifying -zombiism -zombiisms -zombis -zonal -zonally -zonary -zonate -zonated -zonation -zonations -zone -zoned -zoneless -zoner -zoners -zones -zonetime -zonetimes -zoning -zonk -zonked -zonking -zonks -zonula -zonulae -zonular -zonulas -zonule -zonules -zoo -zoochore -zoochores -zooecia -zooecium -zoogenic -zoogeographer -zoogeographers -zoogeographic -zoogeographical -zoogeographically -zoogeographies -zoogeography -zooglea -zoogleae -zoogleal -zoogleas -zoogloea -zoogloeae -zoogloeas -zooid -zooidal -zooids -zookeeper -zookeepers -zooks -zoolater -zoolaters -zoolatries -zoolatry -zoologic -zoological -zoologically -zoologies -zoologist -zoologists -zoology -zoom -zoomania -zoomanias -zoomed -zoometries -zoometry -zooming -zoomorph -zoomorphic -zoomorphs -zooms -zoon -zoonal -zoonoses -zoonosis -zoonotic -zoons -zoophile -zoophiles -zoophilic -zoophilies -zoophilous -zoophily -zoophobe -zoophobes -zoophyte -zoophytes -zooplankter -zooplankters -zooplankton -zooplanktonic -zooplanktons -zoos -zoosperm -zoosperms -zoosporangia -zoosporangium -zoospore -zoospores -zoosporic -zoosterol -zoosterols -zootechnical -zootechnics -zootier -zootiest -zootomic -zootomies -zootomy -zooty -zooxanthella -zooxanthellae -zorch -zorched -zorches -zorching -zori -zoril -zorilla -zorillas -zorille -zorilles -zorillo -zorillos -zorils -zoris -zoster -zosters -zouave -zouaves -zounds -zowie -zoysia -zoysias -zucchetto -zucchettos -zucchini -zucchinis -zwieback -zwiebacks -zwitterion -zwitterionic -zwitterions -zydeco -zydecos -zygapophyses -zygapophysis -zygodactyl -zygodactylous -zygoid -zygoma -zygomas -zygomata -zygomatic -zygomorphic -zygomorphies -zygomorphy -zygose -zygoses -zygosis -zygosities -zygosity -zygospore -zygospores -zygote -zygotene -zygotenes -zygotes -zygotic -zymase -zymases -zyme -zymes -zymogen -zymogene -zymogenes -zymogens -zymogram -zymograms -zymologies -zymology -zymosan -zymosans -zymoses -zymosis -zymotic -zymurgies -zymurgy -zyzzyva -zyzzyvas diff --git a/examples/other/wordplay/public/circle-ball-dark-antialiased.gif b/examples/other/wordplay/public/circle-ball-dark-antialiased.gif deleted file mode 100644 index ede5aeb27b..0000000000 Binary files a/examples/other/wordplay/public/circle-ball-dark-antialiased.gif and /dev/null differ diff --git a/examples/other/wordplay/server/game.js b/examples/other/wordplay/server/game.js deleted file mode 100644 index 94ac4f5669..0000000000 --- a/examples/other/wordplay/server/game.js +++ /dev/null @@ -1,70 +0,0 @@ -////////// Server only logic ////////// - -Meteor.methods({ - start_new_game: function () { - // create a new game w/ fresh board - var game_id = Games.insert({board: new_board(), - clock: 120}); - - // move everyone who is ready in the lobby to the game - Players.update({game_id: null, idle: false, name: {$ne: ''}}, - {$set: {game_id: game_id}}, - {multi: true}); - // Save a record of who is in the game, so when they leave we can - // still show them. - var p = Players.find({game_id: game_id}, - {fields: {_id: true, name: true}}).fetch(); - Games.update({_id: game_id}, {$set: {players: p}}); - - - // wind down the game clock - var clock = 120; - var interval = Meteor.setInterval(function () { - clock -= 1; - Games.update(game_id, {$set: {clock: clock}}); - - // end of game - if (clock === 0) { - // stop the clock - Meteor.clearInterval(interval); - // declare zero or more winners - var scores = {}; - Words.find({game_id: game_id}).forEach(function (word) { - if (!scores[word.player_id]) - scores[word.player_id] = 0; - scores[word.player_id] += word.score; - }); - var high_score = _.max(scores); - var winners = []; - _.each(scores, function (score, player_id) { - if (score === high_score) - winners.push(player_id); - }); - Games.update(game_id, {$set: {winners: winners}}); - } - }, 1000); - - return game_id; - }, - - - keepalive: function (player_id) { - check(player_id, String); - Players.update({_id: player_id}, - {$set: {last_keepalive: (new Date()).getTime(), - idle: false}}); - } -}); - -Meteor.setInterval(function () { - var now = (new Date()).getTime(); - var idle_threshold = now - 70*1000; // 70 sec - var remove_threshold = now - 60*60*1000; // 1hr - - Players.update({last_keepalive: {$lt: idle_threshold}}, - {$set: {idle: true}}); - - // XXX need to deal with people coming back! - // Players.remove({$lt: {last_keepalive: remove_threshold}}); - -}, 30*1000); diff --git a/examples/other/wordplay/server/make-boggle-dict.js.noload b/examples/other/wordplay/server/make-boggle-dict.js.noload deleted file mode 100644 index b1cf219b6b..0000000000 --- a/examples/other/wordplay/server/make-boggle-dict.js.noload +++ /dev/null @@ -1,113 +0,0 @@ -require("./words.js"); - -var BOGGLE_DICE = ['pchoas', 'oattow', 'lrytte', 'vthrwe', - 'eghwne', 'seotis', 'anaeeg', 'idsytt', - 'mtoicu', 'afpkfs', 'xlderi', 'ensieu', - 'yldevr', 'znrnhl', 'nmiqhu', 'obbaoj']; - -var FLAGS = [0x1, 0x2, 0x4, 0x8, - 0x10, 0x20, 0x40, 0x80, - 0x100, 0x200, 0x400, 0x800, - 0x1000, 0x2000, 0x4000, 0x8000]; - -var MASKS = {}; - -// generate masks for all one, two, three, and four-letter combinations -var make_masks = function () { - var mask_count = 0; - - // recursive helper - var check_mask = function (word, index, used) { - for (var i = 0; i < 16; i += 1) { - for (var j = 0; j < 6; j += 1) { - // if die i is still available, and it has a letter that - // matches what we need, we can make use of this. - if (!(used & FLAGS[i]) && (BOGGLE_DICE[i][j] === word[index])) { - if (word.length === index + 1) { - // this is the end of the word, we have a valid mask! - if (!MASKS[word]) - MASKS[word] = []; - if (MASKS[word].indexOf(used | FLAGS[i]) === -1) { - MASKS[word].push(used | FLAGS[i]); - mask_count += 1; - } - // console.log("MASK", word, used | FLAGS[i]); - } else { - // descend into searching rest of word w/ remaining dice. - check_mask(word, - index + 1, - used | FLAGS[i]); - } - } - } - } - } - - process.stderr.write("CALCULATING MASKS FOR "); - for (var a = 97; a <= 97; a += 1) { - process.stderr.write(String.fromCharCode(a)); - check_mask(String.fromCharCode(a), 0, 0x0); - for (var b = 97; b <= 122; b += 1) { - check_mask(String.fromCharCode(a,b), 0, 0x0); - for (var c = 97; c <= 122; c += 1) { - check_mask(String.fromCharCode(a,b,c), 0, 0x0); - for (var d = 97; d <= 122; d += 1) { - check_mask(String.fromCharCode(a,b,c,d), 0, 0x0); - } - } - } - } - process.stderr.write(" DONE [" + mask_count + " MASKS]\n"); -}; - -make_masks(); - -function check (word, index, used) { - //console.log('CHECK', word, index, used); - - var length; - var masks; - - // check up to 4 chars at a time - length = (word.length - index > 4) ? 4 : word.length - index; - masks = MASKS[word.slice(index, length + index)] || []; - - for (var i = 0; i < masks.length; i += 1) { - if (!(used & masks[i])) { - // masks[i] has no overlap w/ tiles we already consumed. - if (word.length === index + length) - // we consumed the whole word. - return true; - else if (check(word, index + length, used | masks[i])) - // some descendant consumed the whole word - return true; - } - } - - // none of the available masks returned true. there's no match. - return false; -}; - -var dict_len = DICTIONARY.length -for (var i = 0; i < dict_len; i+=1) { - var word = DICTIONARY[i]; - - // reject words that have q followed by non-u. those can't be made - // in boggle. otherwise, strip the q -- our dictionary won't - // include the u. - - if (word.match(/q/)) { - if (word.match(/q[^u]/)) { - process.stderr.write('Q REJECT ' + word + '\n'); - continue; - } else { - word = word.replace('qu', 'q'); - process.stderr.write('Q REPLACED ' + word + '\n'); - } - } - - if (check(word, 0, 0x0)) - console.log(word); - else - process.stderr.write('REJECT ' + DICTIONARY[i] + '\n'); -}; diff --git a/examples/unfinished/accounts-ui-viewer/.meteor/.gitignore b/examples/unfinished/accounts-ui-viewer/.meteor/.gitignore deleted file mode 100644 index 4083037423..0000000000 --- a/examples/unfinished/accounts-ui-viewer/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/examples/unfinished/accounts-ui-viewer/.meteor/packages b/examples/unfinished/accounts-ui-viewer/.meteor/packages deleted file mode 100644 index fcf09ec39c..0000000000 --- a/examples/unfinished/accounts-ui-viewer/.meteor/packages +++ /dev/null @@ -1,18 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -autopublish -insecure -preserve-inputs -accounts-ui -less -accounts-google -accounts-github -accounts-password -accounts-facebook -standard-app-packages -facebook-config-ui -github-config-ui -google-config-ui diff --git a/examples/unfinished/accounts-ui-viewer/.meteor/release b/examples/unfinished/accounts-ui-viewer/.meteor/release deleted file mode 100644 index ee6cdce3c2..0000000000 --- a/examples/unfinished/accounts-ui-viewer/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -0.6.1 diff --git a/examples/unfinished/accounts-ui-viewer/accounts-ui-viewer.html b/examples/unfinished/accounts-ui-viewer/accounts-ui-viewer.html deleted file mode 100644 index 0d6b0e33e1..0000000000 --- a/examples/unfinished/accounts-ui-viewer/accounts-ui-viewer.html +++ /dev/null @@ -1,131 +0,0 @@ - - accounts-ui-viewer - - - - {{> page}} - - - - - - - diff --git a/examples/unfinished/accounts-ui-viewer/accounts-ui-viewer.js b/examples/unfinished/accounts-ui-viewer/accounts-ui-viewer.js deleted file mode 100644 index 9e4f67c8e5..0000000000 --- a/examples/unfinished/accounts-ui-viewer/accounts-ui-viewer.js +++ /dev/null @@ -1,221 +0,0 @@ - -Meteor.users.allow({ update: () => true }); - -const { ServiceConfiguration } = Package['service-configuration']; - -Meteor.methods({ - 'removeService': service => ServiceConfiguration.configurations.remove({ service }), -}) - -if (Meteor.isClient) { - - Accounts.STASH = { ...Accounts }; - Accounts.STASH.loggingIn = Meteor.loggingIn; - - const handleSetting = (key, value) => { - if (key === "numServices") { - const registeredServices = Accounts.oauth.serviceNames(); - ['facebook', 'github', 'google'].forEach((serv, i) => { - if (i < value && !registeredServices.includes(serv)) { - Accounts.oauth.registerService(serv); - } else if (i >= value && registeredServices.includes(serv)) { - Accounts.oauth.unregisterService(serv); - } - }); - } else if (key === "hasPasswords") { - Package['accounts-password'] = value ? {} : null; - const user = Meteor.user(); - if (user) { - if (! value) { - // make sure we have no username if "app" has no passwords - Meteor.users.update(Meteor.userId(), - { $unset: { username: 1 }}); - } else { - // make sure we have a username - Meteor.users.update(Meteor.userId(), - { $set: { username: Random.id() }}); - } - } - } else if (key === "signupFields") { - Accounts.ui._options.passwordSignupFields = value; - } else if (key === "fakeLoggingIn") { - Meteor.loggingIn = (value ? () => true : - Accounts.STASH.loggingIn); - } - }; - - const settings = Session.get('settings'); - if (! settings) { - Session.set('settings', { - alignRight: false, - positioning: "relative", - numServices: 3, - hasPasswords: true, - signupFields: 'EMAIL_ONLY', - fakeLoggingIn: false, - bgcolor: 'white' - }); - } else { - Object.keys(settings).forEach(key => handleSetting(key, settings[key])); - } - - Template.page.helpers({ - settings: () => Session.get('settings'), - settingsClass: () => { - var settings = Session.get('settings'); - var classes = []; - if (settings.positioning) - classes.push('positioning-' + settings.positioning.toLowerCase()); - return classes.join(' '); - }, - match: kv => { - kv = keyValueFromId(kv); - if (! kv) - return false; - - return Session.get('settings')[kv[0]] === kv[1]; - }, - dropdownAlign: function() { - var settings = this; - return settings.alignRight ? 'right' : 'left'; - } - }); - - - var keyValueFromId = function (id) { - var match; - if (id && (match = /^(.*?):(.*)$/.exec(id))) { - var key = match[1]; - var value = castValue(match[2]); - return [key, value]; - } - return null; - }; - - const castValue = value => { - if (value === "false") - value = false; - else if (value === "true") - value = true; - else if (/^[0-9]+$/.test(value)) - value = Number(value); - return value; - }; - - Template.radio.helpers({ - maybeChecked: function() { - var curValue = Session.get('settings')[this.key]; - if (castValue(this.value) === curValue) - return 'checked'; - return ''; - }, - }); - - const fakeLogin = callback => { - Accounts.createUser( - {username: Random.id(), - password: "password", - profile: { name: "Joe Schmoe" }}, - () => { - var user = Meteor.user(); - if (! user) - return; - // delete our username if we are in a mode - // where there aren't usernames/emails/passwords - // (only third-party auth) so that there is no - // "Change Password" button when signed in - if (! Session.get('settings').hasPasswords) - Meteor.users.update(Meteor.userId(), - { $unset: { username: 1 }}); - callback(); - }); - }; - - const exitFlows = () => { - Accounts._loginButtonsSession.set('inSignupFlow', false); - Accounts._loginButtonsSession.set('inForgotPasswordFlow', false); - Accounts._loginButtonsSession.set('inChangePasswordFlow', false); - Accounts._loginButtonsSession.set('inMessageOnlyFlow', false); - }; - - Template.page.events({ - 'change #controlpane input[type=radio]': event => { - const input = event.currentTarget; - let keyValue; - if (input && input.id && (keyValue = keyValueFromId(input.id))) { - const key = keyValue[0]; - const value = keyValue[1]; - if (value === "false") - value = false; - else if (value === "true") - value = true; - const settings = Session.get('settings'); - settings[key] = value; - Session.set('settings', settings); - - handleSetting(key, value); - } - }, - 'click #controlpane button': function (event) { - const { ServiceConfiguration } = Package['service-configuration']; - if (this.key === "fakeConfig") { - const service = this.value; - if (! ServiceConfiguration.configurations.findOne({ service })) - ServiceConfiguration.configurations.insert( - { service, fake: true }); - } else if (this.key === "unconfig") { - const service = this.value; - Meteor.call('removeService', service); - } else if (this.key === "messages") { - if (this.value === "error") { - Accounts._loginButtonsSession.errorMessage('An error occurred! Gee golly gosh.'); - } else if (this.value === "info") { - Accounts._loginButtonsSession.infoMessage('Here is some information that is crucial.'); - } else if (this.value === "clear") { - Accounts._loginButtonsSession.resetMessages(); - } - } else if (this.key === "sign") { - if (this.value === 'in') { - // create a random new user - fakeLogin(function () { - Accounts._loginButtonsSession.closeDropdown(); - }); - } else if (this.value === 'out') { - Meteor.logout(); - } - } else if (this.key === "showConfig") { - Accounts._loginButtonsSession.configureService(this.value); - } else if (this.key === "lov") { - exitFlows(); - Accounts._loginButtonsSession.set("dropdownVisible", true); - if (Meteor.userId()) - Meteor.logout(); - if (this.value === "createAccount") - Accounts._loginButtonsSession.set("inSignupFlow", true); - else if (this.value === "forgotPassword") - Accounts._loginButtonsSession.set("inForgotPasswordFlow", true); - } else if (this.key === "liv") { - exitFlows(); - Accounts._loginButtonsSession.set("dropdownVisible", true); - if (! Meteor.userId()) - fakeLogin(() => {}); - if (this.value === "changePassword") - Accounts._loginButtonsSession.set("inChangePasswordFlow", true); - else if (this.value === "messageOnly") - Accounts._loginButtonsSession.set("inMessageOnlyFlow", true); - } else if (this.key === "modals") { - const { value } = this; - [ - 'resetPasswordToken', - 'enrollAccountToken', - 'justVerifiedEmail' - ].forEach(k => { - Accounts._loginButtonsSession.set( - k, k.indexOf(value) >= 0 ? 'foo' : null - ); - }); - } - } - }); - -} diff --git a/examples/unfinished/accounts-ui-viewer/accounts-ui-viewer.less b/examples/unfinished/accounts-ui-viewer/accounts-ui-viewer.less deleted file mode 100644 index 51890f7cf3..0000000000 --- a/examples/unfinished/accounts-ui-viewer/accounts-ui-viewer.less +++ /dev/null @@ -1,108 +0,0 @@ -html, body { height: 100%; } - -#controlpane { - position: absolute; - left: 0; - width: 299px; - top: 0; - bottom: 0; - - background: #eee; - border-right: 1px solid #999; - - overflow: auto; - - h3 { - border-top: 1px solid #999; - font-size: 85%; - margin-bottom: 5px; - } - - .group { - margin: 10px; - } - - input[type=radio] { - margin-left: 5px; - vertical-align: middle; - } - - label { - padding-left: 3px; - } -} - -#previewpane { - position: absolute; - left: 300px; - right: 0; - top: 0; - bottom: 0; - - #preview-wrapper { - margin: 20px; - } -} - -.radio { - white-space: nowrap; -} - -.positioning-floatright { - #login-buttons { - float: right; - margin-right: 180px; - } - - #pos-indicator { - display: block; - top: 0; - right: 0; - width: 200px; - height: 20px; - } -} - -.positioning-relative { - #login-buttons { - position: relative; - left: 150px; - top: 20px; - } - - #pos-indicator { - display: block; - top: 0; - left: 0; - width: 170px; - height: 40px; - } -} - -.positioning-absolute { - #login-buttons { - position: absolute; - left: 170px; - top: 40px; - } - - #pos-indicator { - display: block; - top: 0; - left: 0; - width: 170px; - height: 40px; - } -} - -#pos-indicator { - position: absolute; - background: #eec; - display: none; -} - -a { color: blue; } - -button { padding: 4px; - margin-bottom: 4px; // for when buttons wrap - } \ No newline at end of file diff --git a/examples/unfinished/accounts-ui-viewer/package-lock.json b/examples/unfinished/accounts-ui-viewer/package-lock.json deleted file mode 100644 index 4df17dff5d..0000000000 --- a/examples/unfinished/accounts-ui-viewer/package-lock.json +++ /dev/null @@ -1,682 +0,0 @@ -{ - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@babel/runtime": { - "version": "7.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0-beta.38.tgz", - "integrity": "sha512-ZvPtlcvH2ZRzr1U5pkmCE7U3RIun3Nf29XHem47aScmJgMuL06ulkp+4oPBee3QrUVFErDjwNWtC67BzNuxLVw==", - "requires": { - "core-js": "2.5.3", - "regenerator-runtime": "0.11.1" - } - }, - "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" - }, - "meteor-node-stubs": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-0.3.2.tgz", - "integrity": "sha512-l93SS/HutbqBRJODO2m7hup8cYI2acF5bB39+ZvP2BX8HMmCSCXeFH7v0sr4hD7zrVvHQA5UqS0pcDYKn0VM6g==", - "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.1.4", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.11.1", - "domain-browser": "1.1.7", - "events": "1.1.1", - "http-browserify": "1.7.0", - "https-browserify": "0.0.1", - "os-browserify": "0.2.1", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "git+https://github.com/meteor/readable-stream.git#d64a64aa6061b9b6855feff4d09e58fb3b2e4502", - "stream-browserify": "2.0.1", - "string_decoder": "1.0.3", - "timers-browserify": "1.4.2", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", - "vm-browserify": "0.0.4" - }, - "dependencies": { - "Base64": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz", - "integrity": "sha1-ujpCMHCOGGcFBl5mur3Uw1z2ACg=" - }, - "asn1.js": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", - "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", - "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.1", - "minimalistic-assert": "1.0.0" - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "requires": { - "util": "0.10.3" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==" - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browserify-aes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.0.tgz", - "integrity": "sha512-W2bIMLYoZ9oow7TyePpMJk9l9LY7O3R61a/68bVCDOtnJynnwe3ZeW2IzzSkrQnPKNdJrxVDn3ALZNisSBwb7g==", - "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.1", - "safe-buffer": "5.1.1" - } - }, - "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", - "requires": { - "browserify-aes": "1.1.0", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" - } - }, - "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", - "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.1" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.5" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.1", - "parse-asn1": "5.1.0" - } - }, - "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "requires": { - "pako": "0.2.9" - } - }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8", - "isarray": "1.0.0" - } - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "2.0.1", - "safe-buffer": "5.1.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "requires": { - "date-now": "0.1.4" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, - "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" - } - }, - "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", - "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.1", - "ripemd160": "2.0.1", - "sha.js": "2.4.9" - } - }, - "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", - "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.1", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" - } - }, - "crypto-browserify": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", - "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", - "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.1", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.5" - } - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "requires": { - "inherits": "2.0.1", - "minimalistic-assert": "1.0.0" - } - }, - "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", - "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.5" - } - }, - "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=" - }, - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.1", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.1", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "requires": { - "inherits": "2.0.1" - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "http-browserify": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/http-browserify/-/http-browserify-1.7.0.tgz", - "integrity": "sha1-M3la3nLfiKz7/TZ3PO/tp2RzWyA=", - "requires": { - "Base64": "0.2.1", - "inherits": "2.0.1" - } - }, - "https-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", - "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=" - }, - "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.1" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "2.0.1", - "safe-buffer": "5.1.1" - } - } - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" - } - }, - "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "1.1.8" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1.0.2" - } - }, - "os-browserify": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", - "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=" - }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" - }, - "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", - "requires": { - "asn1.js": "4.9.1", - "browserify-aes": "1.1.0", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" - } - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", - "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.5" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" - }, - "randombytes": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", - "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", - "requires": { - "safe-buffer": "5.1.1" - } - }, - "readable-stream": { - "version": "git+https://github.com/meteor/readable-stream.git#d64a64aa6061b9b6855feff4d09e58fb3b2e4502", - "requires": { - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "requires": { - "glob": "7.1.2" - } - }, - "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", - "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.1" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "sha.js": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", - "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", - "requires": { - "inherits": "2.0.1", - "safe-buffer": "5.1.1" - } - }, - "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "requires": { - "inherits": "2.0.1", - "readable-stream": "git+https://github.com/meteor/readable-stream.git#d64a64aa6061b9b6855feff4d09e58fb3b2e4502" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - }, - "timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "requires": { - "process": "0.11.10" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "requires": { - "indexof": "0.0.1" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - } - } - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } - } -} diff --git a/examples/unfinished/accounts-ui-viewer/package.json b/examples/unfinished/accounts-ui-viewer/package.json deleted file mode 100644 index ebfd46233b..0000000000 --- a/examples/unfinished/accounts-ui-viewer/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "accounts-ui-viewer", - "private": true, - "scripts": { - "start": "meteor run" - }, - "dependencies": { - "@babel/runtime": "^7.0.0-beta.38", - "meteor-node-stubs": "^0.3.2" - } -} \ No newline at end of file diff --git a/examples/unfinished/atoms/.meteor/.gitignore b/examples/unfinished/atoms/.meteor/.gitignore deleted file mode 100644 index 4083037423..0000000000 --- a/examples/unfinished/atoms/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/examples/unfinished/atoms/.meteor/packages b/examples/unfinished/atoms/.meteor/packages deleted file mode 100644 index 1826f1fa52..0000000000 --- a/examples/unfinished/atoms/.meteor/packages +++ /dev/null @@ -1,9 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -standard-app-packages -autopublish -insecure -underscore diff --git a/examples/unfinished/atoms/atoms.css b/examples/unfinished/atoms/atoms.css deleted file mode 100644 index 038920b4ab..0000000000 --- a/examples/unfinished/atoms/atoms.css +++ /dev/null @@ -1,12 +0,0 @@ -g[class=atom] circle { - stroke: black; - stroke-width: 3px; -} - -g[class=atom] text { - font-family: Arial, sans-serif; - font-size: 24px; - fill: black; - font-weight: bold; - text-anchor: middle; -} \ No newline at end of file diff --git a/examples/unfinished/atoms/atoms.html b/examples/unfinished/atoms/atoms.html deleted file mode 100644 index 2accd2c8ad..0000000000 --- a/examples/unfinished/atoms/atoms.html +++ /dev/null @@ -1,28 +0,0 @@ - - Atoms - - - -
- - {{#atom x=100 y=100 color="#ffff00"}}O{{/atom}} - {{> hydrogen x=150 y=100}} - {{#giantatom x=250 y=100 color="#ff9999"}}My{{/giantatom}} - -
- - - - - - - diff --git a/examples/unfinished/atoms/atoms.js b/examples/unfinished/atoms/atoms.js deleted file mode 100644 index 55b01a57c0..0000000000 --- a/examples/unfinished/atoms/atoms.js +++ /dev/null @@ -1,5 +0,0 @@ -if (Meteor.isClient) { - Template.atom.textY = function () { - return this.y + 8; - }; -} diff --git a/examples/unfinished/azrael/.meteor/.gitignore b/examples/unfinished/azrael/.meteor/.gitignore deleted file mode 100644 index 4083037423..0000000000 --- a/examples/unfinished/azrael/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/examples/unfinished/azrael/.meteor/packages b/examples/unfinished/azrael/.meteor/packages deleted file mode 100644 index 83900fa851..0000000000 --- a/examples/unfinished/azrael/.meteor/packages +++ /dev/null @@ -1,9 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -underscore -jquery -jquery-layout -standard-app-packages diff --git a/examples/unfinished/azrael/.meteor/release b/examples/unfinished/azrael/.meteor/release deleted file mode 100644 index a918a2aa18..0000000000 --- a/examples/unfinished/azrael/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -0.6.0 diff --git a/examples/unfinished/azrael/client/azrael.css b/examples/unfinished/azrael/client/azrael.css deleted file mode 100644 index 249f4a6b9d..0000000000 --- a/examples/unfinished/azrael/client/azrael.css +++ /dev/null @@ -1,26 +0,0 @@ -#room-list .room.selected { - color: white; - background-color: black; -} - -.room .name { - display: inline; -} - -.room .delete { - float: right; - display: none; -} - -.room:hover .delete { - display: block; -} - -.add-room { - margin-top: 20px; - font-style: italic; -} - -.add-room:hover { - text-decoration: underline; -} \ No newline at end of file diff --git a/examples/unfinished/azrael/client/azrael.html b/examples/unfinished/azrael/client/azrael.html deleted file mode 100644 index 2fb8f7d4b9..0000000000 --- a/examples/unfinished/azrael/client/azrael.html +++ /dev/null @@ -1,61 +0,0 @@ - - -
- {{> center_pane }} -
-
East
-
- {{> room_list}} - {{> add_room}} -
-
Azrael
- - - - - - - - - - - - diff --git a/examples/unfinished/azrael/client/azrael.js b/examples/unfinished/azrael/client/azrael.js deleted file mode 100644 index 6df77de23b..0000000000 --- a/examples/unfinished/azrael/client/azrael.js +++ /dev/null @@ -1,128 +0,0 @@ -Meteor.subscribe('rooms'); - -Session.set('current_room', null); -Session.set('editing_room_name', false); - -Deps.autorun(function () { - var room_id = Session.get('current_room'); - if (room_id) Meteor.subscribe('room-detail', room_id); -}); - -// XXX would be nice to eliminate this function and have people just -// call Session.set("current_room", foo) directly instead -var selectRoom = function (room_id) { - // XXX pushstate - var room = Rooms.find(room_id); - Session.set('current_room', room_id); -}; - -Meteor.startup(function () { - $('body').layout({applyDefaultStyles: true}) -}); - -Template.room_list.rooms = function () { - // XXX it would be nice if this were find instead of findLive (ie, - // if they were unified in some sane way) - return Rooms.findLive({}, {sort: {name: 1}}); -}; - -Template.add_room.events = { - 'click': function () { - // XXX should put up dialog to get name - // XXX should support automatically set created/updated timestamps - var room_id = Rooms.insert({name: "New room", - // XXX horrid syntax - created: (new Date()).getTime()}); - selectRoom(room_id); - // XXX XXX XXX this fails to work -- it leaves edit mode after - // 1RTT. what happens is, the server echos the insert back to us, - // and that is currently wired up to trigger a changed event on - // the findlive, which redraws the element, which triggers blur, - // which causes us to set editing_room_name to false. - // - // one option is to have the rendering function (maybe in a - // post-render routine?) decide if it currently wants - // focus. (should that be within the recomputation envelope, I - // wonder?) - // - // another is to suppress blur on rerender. probably the only - // principled way to do this is to narrow the scope of the - // rerender to not include the . - // - // [No idea if the comment above is still current] - Session.set('editing_room_name', true); - Deps.flush(); - $('#room_name_input').focus(); - } -}; - -Template.room.events = { - 'mousedown': function (evt) { - selectRoom(this._id); - }, - 'dblclick': function (evt) { - Session.set('editing_room_name', true); - // XXX XXX doesn't generalize.. the element might very reasonably - // not have a unique id. may need a different strategy.. - Deps.flush(); - $('#room_name_input').focus(); - }, - 'blur input': function (evt) { - Session.set('editing_room_name', false); - }, - 'keypress input': function (evt) { - // XXX should really have a binding/validator-based pattern - // XXX check to see this pattern works if you are saving - // continuously (on every keystroke) - var value = $(evt.target).val(); - if (evt.which === 13 && value.length) - Rooms.update(this._id, {$set: {name: value}}); - if (evt.which === 13 || evt.which === 27) - Session.set('editing_room_name', false); - }, - // If you make this event be click (rather than mousedown), then - // delete doesn't work if the room isn't already selected. what - // happens is, the mousedown triggers the selection, which redraws - // the room, meaning that the elements are replaced out from under - // the event, and the click event is lost.. bleh. needs - // reconsideration. - 'mousedown .delete': function (evt) { - Rooms.remove('rooms', this._id); - Session.set('current_room', null); - }, -}; - -Template.room.editing = function (options) { - // Check current_room first, before editing_room_name, to minimize - // number of redraws - return (Session.equals('current_room', this._id) && - Session.equals('editing_room_name', true)); -}; - -Template.room.maybe_selected = function () { - return Session.equals('current_room', this._id) ? "selected" : ""; -}; - -Template.center_pane.messages = function () { - return Chat.findLive({room: Session.get("current_room")}, - {sort: {created: 1}}); -}; - -Template.center_pane.any_room_selected = function () { - return !Session.equals('current_room', null); -}; - -Template.center_pane.events = { - 'keydown #chat-entry': function (evt) { - if (evt.which === 13) { - var room_id = Session.get('current_room'); - if (!room_id) - return; - - Chat.insert({room: room_id, message: $(evt.target).val(), - username: "someone", - created: (new Date()).getTime()}); - $(evt.target).val(''); - } - } -}; diff --git a/examples/unfinished/azrael/model.js b/examples/unfinished/azrael/model.js deleted file mode 100644 index 8a1ac86732..0000000000 --- a/examples/unfinished/azrael/model.js +++ /dev/null @@ -1,21 +0,0 @@ -// XXX it is actually very dangerous to store times as Number. use -// Date type once it's implemented in minimongo -Rooms = new Mongo.Collection("rooms"); -//Rooms.schema({name: String, created: Number}); - -Chat = new Mongo.Collection("chat"); -/* -Chat.schema({room: String, message: String, - username: String, created: Number}); -*/ - -if (Meteor.isServer) { - Meteor.publish('rooms', function () { - return Rooms.find(); - }); - - // XXX should limit to just a certain amount of recent chat .. - Meteor.publish('room-detail', function (room) { - return Chat.find({room: room}); - }); -} diff --git a/examples/unfinished/benchmark/.meteor/.gitignore b/examples/unfinished/benchmark/.meteor/.gitignore deleted file mode 100644 index 4083037423..0000000000 --- a/examples/unfinished/benchmark/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/examples/unfinished/benchmark/.meteor/packages b/examples/unfinished/benchmark/.meteor/packages deleted file mode 100644 index fad7faf9d2..0000000000 --- a/examples/unfinished/benchmark/.meteor/packages +++ /dev/null @@ -1,10 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -insecure -preserve-inputs -bootstrap -random -standard-app-packages diff --git a/examples/unfinished/benchmark/.meteor/release b/examples/unfinished/benchmark/.meteor/release deleted file mode 100644 index dd8bfff626..0000000000 --- a/examples/unfinished/benchmark/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -0.6.5.1 diff --git a/examples/unfinished/benchmark/benchmark.css b/examples/unfinished/benchmark/benchmark.css deleted file mode 100644 index b6b4052b43..0000000000 --- a/examples/unfinished/benchmark/benchmark.css +++ /dev/null @@ -1 +0,0 @@ -/* CSS declarations go here */ diff --git a/examples/unfinished/benchmark/benchmark.html b/examples/unfinished/benchmark/benchmark.html deleted file mode 100644 index fb99adba89..0000000000 --- a/examples/unfinished/benchmark/benchmark.html +++ /dev/null @@ -1,23 +0,0 @@ - - benchmark - - - - {{> status}} - - {{> params}} - - - - - - diff --git a/examples/unfinished/benchmark/benchmark.js b/examples/unfinished/benchmark/benchmark.js deleted file mode 100644 index bf91196e1c..0000000000 --- a/examples/unfinished/benchmark/benchmark.js +++ /dev/null @@ -1,244 +0,0 @@ - -// Pick scenario from settings. -// XXX settings now has public. could move stuff there and avoid this. -var PARAMS = {}; -if (Meteor.isServer) { - if (!Meteor.settings.params) - throw new Error("Must set scenario with Meteor.settings"); - __meteor_runtime_config__.PARAMS = PARAMS = Meteor.settings.params; -} else { - PARAMS = __meteor_runtime_config__.PARAMS; -} - - -// id for this client or server. -var processId = Random.id(); -console.log("processId", processId); - - -////////////////////////////// -// Helper Functions -////////////////////////////// - -var random = function (n) { - return Math.floor(Random.fraction() * n); -}; - -var randomChars = - 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split(''); -var randomString = function (length) { - // XXX make more efficient - var ret = ''; - _.times(length, function () { - ret += Random.choice(randomChars); - }); - return ret; -}; - -var preCall = function (name) { - console.log('> ' + name); -}; - -var postCall = function (name) { - return function (err, callback) { - console.log('< ' + name + ' ' + (err ? 'ERR' : 'OK')); - }; -}; - -var pickCollection = function () { - return Random.choice(Collections); -}; - -var generateDoc = function () { - var ret = {}; - ret.fromProcess = processId; - _.times(PARAMS.documentNumFields, function (n) { - ret['Field' + n] = randomString(PARAMS.documentSize/PARAMS.documentNumFields); - }); - - return ret; -}; - - -////////////////////////////// -// Data -////////////////////////////// - - -var Collections = []; -_.times(PARAMS.numCollections, function (n) { - Collections.push(new Mongo.Collection("Collection" + n)); -}); - - -if (Meteor.isServer) { - - // Make sure we have indexes. Helps mongo CPU usage. - Meteor.startup(function () { - _.each(Collections, function (C) { - C._ensureIndex({toProcess: 1}); - C._ensureIndex({fromProcess: 1}); - C._ensureIndex({when: 1}); - }); - }); - - // periodic db check. generate a client list. - var currentClients = []; - var totalDocs = 0; - Meteor.setInterval(function () { - var newClients = {}; - var newTotal = 0; - // XXX hardcoded time - var since = +(new Date) - 1000*PARAMS.insertsPerSecond * 5; - _.each(Collections, function (C) { - _.each(C.find({when: {$gt: since}}, {fields: {fromProcess: 1, when: 1}}).fetch(), function (d) { - newTotal += 1; - if (d.fromProcess && d.when > since) - newClients[d.fromProcess] = true; - }); - }); - currentClients = _.keys(newClients); - totalDocs = newTotal; - }, 3*1000); // XXX hardcoded time - - // periodic document cleanup. - if (PARAMS.maxAgeSeconds) { - Meteor.setInterval(function () { - var when = +(new Date) - PARAMS.maxAgeSeconds*1000; - _.each(Collections, function (C) { - preCall('removeMaxAge'); - C.remove({when: {$lt: when}}, postCall('removeMaxAge')); - }); - // Clear out 5% of the DB each time, steady state. XXX parameterize? - }, 1000*PARAMS.maxAgeSeconds / 20); - } - - Meteor.publish("data", function (collection, process) { - check(collection, Number); - check(process, String); - var C = Collections[collection]; - return C.find({toProcess: process}); - }); - - Meteor.methods({ - 'insert': function (doc) { - check(doc, Object); - check(doc.fromProcess, String); - // pick a random destination. send to ourselves if there is no one - // else. by having an entry in the db, we'll end up in the target - // list. - doc.toProcess = Random.choice(currentClients) || doc.fromProcess; - - doc.when = +(new Date); - - var C = pickCollection(); - preCall('insert'); - C.insert(doc, postCall('insert')); - }, - update: function (processId, field, value) { - check([processId, field, value], [String]); - var modifer = {}; - modifer[field] = value; // XXX injection attack? - - var C = pickCollection(); - // update one message. - preCall('update'); - C.update({fromProcess: processId}, {$set: modifer}, {multi: false}, postCall('update')); - }, - remove: function (processId) { - check(processId, String); - var C = pickCollection(); - // remove one message. - var obj = C.findOne({fromProcess: processId}); - if (obj) { - preCall('remove'); - C.remove(obj._id, postCall('remove')); - } - } - }); - - - // XXX publish stats - // - currentClients.length - // - serverId - // - num ddp sessions - // - total documents -} - - - -if (Meteor.isClient) { - // sub to data - _.times(PARAMS.numCollections, function (n) { - Meteor.subscribe("data", n, processId); - }); - - // templates - Template.params.params = function () { - return _.map(PARAMS, function (v, k) { - return {key: k, value: v}; - }); - }; - - Template.status.status = function () { - return Meteor.status().status; - }; - - Template.status.updateRate = function () { - return (Session.get('updateAvgs') || []).join(", "); - }; - - // XXX count of how many docs are in local collection? - - - // do stuff periodically - - if (PARAMS.insertsPerSecond) { - Meteor.setInterval(function () { - Meteor.call('insert', generateDoc()); - }, 1000 / PARAMS.insertsPerSecond); - } - - if (PARAMS.updatesPerSecond) { - Meteor.setInterval(function () { - Meteor.call('update', - processId, - 'Field' + random(PARAMS.documentNumFields), - randomString(PARAMS.documentSize/PARAMS.documentNumFields) - ); - }, 1000 / PARAMS.updatesPerSecond); - } - - if (PARAMS.removesPerSecond) { - Meteor.setInterval(function () { - Meteor.call('remove', processId); - }, 1000 / PARAMS.removesPerSecond); - } - - - - // XXX very rough per client update rate. we need to measure this - // better. ideally, on the server we could get the global update rate - var updateCount = 0; - var updateHistories = {1: [], 10: [], 100: [], 1000: []}; - var updateFunc = function () { updateCount += 1; }; - _.each(Collections, function (C) { - C.find({}).observeChanges({ - added: updateFunc, changed: updateFunc, removed: updateFunc - }); - }); - Meteor.setInterval(function () { - _.each(updateHistories, function (h, max) { - h.push(updateCount); - if (h.length > max) - h.shift(); - }); - Session.set('updateAvgs', _.map(updateHistories, function (h) { - return _.reduce(h, function(memo, num) { - return memo + num; - }, 0) / h.length; - }));; - updateCount = 0; - }, 1000); - -} diff --git a/examples/unfinished/benchmark/run-local.sh b/examples/unfinished/benchmark/run-local.sh deleted file mode 100755 index 4ead6b68d7..0000000000 --- a/examples/unfinished/benchmark/run-local.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env bash - -PORT=9000 -if [ -z "$NUM_CLIENTS" ]; then - NUM_CLIENTS=10 -fi -if [ -z "$DURATION" ]; then - DURATION=120 -fi -REPORT_INTERVAL=10 - -set -e -trap 'echo "FAILED. Killing: $(jobs -pr)" ; for pid in "$(jobs -pr)"; do kill $pid ; done' EXIT - -PROJDIR=`dirname $0` -cd "$PROJDIR" -PROJDIR=`pwd` - -SCENARIO="${1:-default}" - -# clean up from previous runs -# XXX this is gross! -pkill -f "$PROJDIR/.meteor/local/db" || true -../../../meteor reset || true - -# start the benchmark app -../../../meteor --production --settings "scenarios/${SCENARIO}.json" --port ${PORT} & -OUTER_PID=$! - -echo "Waiting for server to come up" -function wait_for_port { - local N=0 - while ! curl -v "$1" 2>&1 | grep ' 200 ' > /dev/null ; do - sleep 1 - N=$(($N+1)) - if [ $N -ge $2 ] ; then - curl -v "$1" || true - echo "Timed out waiting for port $1" - exit 2 - fi - done -} -wait_for_port "http://localhost:${PORT}" 60 - - -echo "Starting phantoms" -# start a bunch of phantomjs processes -PHANTOMSCRIPT=`mktemp -t benchmark-XXXXXXXX` -cat > "$PHANTOMSCRIPT" < - blaze-test - - - - - diff --git a/examples/unfinished/blaze-test/client/blaze-test.js b/examples/unfinished/blaze-test/client/blaze-test.js deleted file mode 100644 index 92761e3cdc..0000000000 --- a/examples/unfinished/blaze-test/client/blaze-test.js +++ /dev/null @@ -1,159 +0,0 @@ -Meteor.startup(function () { - -Blaze._wrapAutorun = function (c) { - console.log('Created #' + c._id); - var callback = function () { - if (c.stopped) { - console.log('Stopped #' + c._id); - } else { - console.log('Invalidated #' + c._id); - Deps.afterFlush(function () { - c.onInvalidate(callback); - }); - } - }; - c.onInvalidate(callback); -}; - -theNumber = Blaze.Var(0); -theColor = Blaze.Var('yellow'); - -If = function (conditionVar, contentFunc, elseFunc) { - return Blaze.Isolate(function () { - return conditionVar.get() ? contentFunc() : - (elseFunc ? elseFunc() : null); - }); -}; - -With = function (dataVar, func) { - if (! (this instanceof With)) - // called without new - return new With(dataVar, func); - - Blaze.Controller.call(this); - - this.data = dataVar; - this.func = func; -}; -Blaze.__extends(With, Blaze.Controller); -_.extend(With.prototype, { - render: function () { - var func = this.func; - return func(); - } -}); - -Events = function (eventMap, func) { - if (! (this instanceof Events)) - // called without new - return new Events(eventMap, func); - - Blaze.Controller.call(this); - - this.eventMap = eventMap; - this.func = func; -}; -Blaze.__extends(Events, Blaze.Controller); -_.extend(Events.prototype, { - render: function () { - var func = this.func; - return func(); - }, - renderToDOM: function () { - var range = Blaze.Controller.prototype.renderToDOM.call(this); - range.addDOMAugmenter(new Blaze.EventAugmenter(this.eventMap)); - return range; - } -}); - -Repeat = function (countVar, contentFunc) { - var seq, count; - var comp = Deps.autorun(function () { - if (! seq) { - count = countVar.get(); - if (typeof count !== 'number') - throw new Error("Expected number"); - var funcs = new Array(count); - for (var i = 0; i < count; i++) - funcs[i] = contentFunc; - seq = new Blaze.Sequence(funcs); - } else { - var targetCount = countVar.get(); - while (count < targetCount) { - seq.addItem(contentFunc, count); - count++; - } - while (count > targetCount) { - seq.removeItem(count-1); - count--; - } - } - }); - Blaze._wrapAutorun(comp); - return Blaze.List(seq); -}; - -Ticker = function () { - var self = this; - Blaze.Component.call(self); - self.time = Blaze.Var(new Date); - self.timer = setInterval(function () { - self.time.set(new Date); - }, 1000); -}; -Blaze.__extends(Ticker, Blaze.Component); -_.extend(Ticker.prototype, { - render: function () { - var self = this; - return Blaze.Isolate(function () { - return String(self.time.get()); - }); - }, - finalize: function () { - clearInterval(this.timer); - } -}); - -outerRange = Blaze.render(function () { - return [HTML.DIV( - {style: If(Blaze.Var(function () { return theNumber.get() % 3 === 0; }), - function () { return ['background:', theColor.get()]; })}, - "The number ", Blaze.Isolate(function () { return theNumber.get(); }), " is ", - If(Blaze.Var(function () { - return theNumber.get() % 2 === 0; - }), function () { - return "even"; - }, function () { - return "odd"; - }), "."), - HTML.UL( - Repeat(theNumber, - function () { - return With(Blaze.Var(123), function () { - return Events( - {'click li': function () { console.log('click li'); }}, - function () { - return HTML.LI( - Blaze.Isolate(function () { - console.log('Context:', Blaze.currentController.parentController.data.get()); - return theNumber.get(); }), - " - ", new Ticker - ); - }); - }); - }))]; - -}); -outerRange.attach(document.body); - - -// Now, run: -// -// ``` -// theNumber.set(1); -// theNumber.set(2); -// -// outerRange.stop(); -// ``` - -}); diff --git a/examples/unfinished/chat-benchmark/.meteor/.gitignore b/examples/unfinished/chat-benchmark/.meteor/.gitignore deleted file mode 100644 index 4083037423..0000000000 --- a/examples/unfinished/chat-benchmark/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/examples/unfinished/chat-benchmark/.meteor/packages b/examples/unfinished/chat-benchmark/.meteor/packages deleted file mode 100644 index 12326cb4c4..0000000000 --- a/examples/unfinished/chat-benchmark/.meteor/packages +++ /dev/null @@ -1,11 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -insecure -preserve-inputs -bootstrap -random -standard-app-packages -facts diff --git a/examples/unfinished/chat-benchmark/.meteor/release b/examples/unfinished/chat-benchmark/.meteor/release deleted file mode 100644 index dd8bfff626..0000000000 --- a/examples/unfinished/chat-benchmark/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -0.6.5.1 diff --git a/examples/unfinished/chat-benchmark/benchmark.css b/examples/unfinished/chat-benchmark/benchmark.css deleted file mode 100644 index b6b4052b43..0000000000 --- a/examples/unfinished/chat-benchmark/benchmark.css +++ /dev/null @@ -1 +0,0 @@ -/* CSS declarations go here */ diff --git a/examples/unfinished/chat-benchmark/benchmark.html b/examples/unfinished/chat-benchmark/benchmark.html deleted file mode 100644 index 01336ef597..0000000000 --- a/examples/unfinished/chat-benchmark/benchmark.html +++ /dev/null @@ -1,25 +0,0 @@ - - benchmark - - - - {{> status}} - - {{> params}} - - {{> serverFacts}} - - - - - - diff --git a/examples/unfinished/chat-benchmark/benchmark.js b/examples/unfinished/chat-benchmark/benchmark.js deleted file mode 100644 index 5428147452..0000000000 --- a/examples/unfinished/chat-benchmark/benchmark.js +++ /dev/null @@ -1,205 +0,0 @@ -// Pick which scenario we run. Pass the 'SCENARIO' environment variable -// to change this. See 'benchmark-scenarios.js' for the list of -// scenarios. - -var PARAMS = {}; -// XXX settings now has public. could move stuff there and avoid this. -if (Meteor.isServer) { - if (!Meteor.settings.params) - throw new Error("Must set scenario with Meteor.settings"); - __meteor_runtime_config__.PARAMS = PARAMS = Meteor.settings.params; -} else { - PARAMS = __meteor_runtime_config__.PARAMS; -} - -// id for this client or server. -var processId = Random.id(); -console.log("SSS", processId); - - -////////////////////////////// -// Helper Functions -////////////////////////////// - -var random = function (n) { - return Math.floor(Random.fraction() * n); -}; - -var randomChars = - 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split(''); -var randomString = function (length) { - // XXX make more efficient - var ret = ''; - _.times(length, function () { - ret += Random.choice(randomChars); - }); - return ret; -}; - - -////////////////////////////// -// Data -////////////////////////////// - - -Rooms = new Mongo.Collection("rooms"); -Messages = new Mongo.Collection("messages"); - - -if (Meteor.isServer) { - // init - Meteor.startup(function () { - Messages._ensureIndex({room: 1}); - Messages._ensureIndex({when: 1}); - Rooms._ensureIndex({random: 1}); - Rooms._ensureIndex({when: 1}); - }); - - // periodic document cleanup. - // XXX only needs to run on one server. - // XXX do we even need this with room deletion? - if (PARAMS.messageHistorySeconds) { - Meteor.setInterval(function () { - var when = +(new Date) - PARAMS.messageHistorySeconds*1000; - Messages.remove({when: {$lt: when}}); - }, 1000*PARAMS.messageHistorySeconds / 20); - } - - // periodic room cleanup. - // XXX only needs to run on one server. - if (PARAMS.roomHistorySeconds) { - Meteor.setInterval(function () { - var when = +(new Date) - PARAMS.roomHistorySeconds*1000; - Rooms.remove({when: {$lt: when}}); - }, 1000*PARAMS.roomHistorySeconds / 20); - } - - - - Meteor.publish("rooms", function (clientId) { - var self = this; - check(clientId, String); - - var myRoom = Rooms.findOne(clientId); - // yeah, yeah, i'm inserting in a publish function. deal with it. - if (!myRoom) { - myRoom = {_id: clientId, when: +(new Date()), random: Random.fraction()}; - Rooms.insert(myRoom); - } - self.added("rooms", clientId, myRoom); - - var otherRooms = Rooms.find({random: {$gte: Random.fraction()}}, - {limit: PARAMS.roomsPerClient, - order: {random: 1}}).fetch(); - - _.each(otherRooms, function (room) { - self.added("rooms", room._id, room); - }); - - self.ready(); - }); - - Meteor.publish("messages", function (roomId) { - check(roomId, String); - return Messages.find({room: roomId}); - }); - - Meteor.methods({ - 'insert': function (doc) { - check(doc, { - from: String, - room: String, - message: String - }); - - // use server clock, don't trust the client. - doc.when = +(new Date); - - Messages.insert(doc); - } - }); - - - // XXX publish stats - // - currentClients.length - // - serverId - // - num ddp sessions - // - total documents - - Facts.setUserIdFilter(function () {return true;}); -} - - - -if (Meteor.isClient) { - var myRooms = []; - Meteor.subscribe("rooms", processId, function () { - // XXX should autorun to change rooms? meh. - var r = Rooms.find({}, {limit: PARAMS.roomsPerClient}).fetch(); - _.each(r, function (room) { - Meteor.subscribe("messages", room._id); - myRooms.push(room, room._id); - }); - }); - - // templates - Template.params.params = function () { - return _.map(PARAMS, function (v, k) { - return {key: k, value: v}; - }); - }; - - Template.status.status = function () { - return Meteor.status().status; - }; - - Template.status.updateRate = function () { - return (Session.get('updateAvgs') || []).join(", "); - }; - - // XXX count of how many docs are in local collection. don't - - // do stuff periodically - Meteor.setInterval(function () { - if (Random.fraction() < PARAMS.chanceClientIsTalkative) { - console.log("Talking"); - var room = Random.choice(myRooms); - if (!room) return; - var numMessages = PARAMS.talkativePeriodSeconds * - PARAMS.talkativeMessagesPerSecond; - _.times(numMessages, function (i) { - Meteor.setTimeout(function () { - Meteor.call('insert', { - from: processId, - room: room, - message: randomString(PARAMS.messageSize) - }); - }, 1000 * i / PARAMS.talkativeMessagesPerSecond); - }); - } - }, PARAMS.talkativePeriodSeconds * 1000); - - - // XXX very rough per client update rate. we need to measure this - // better. ideally, on the server we could get the global update rate - var updateCount = 0; - var updateHistories = {1: [], 10: [], 100: [], 1000: []}; - var updateFunc = function () { updateCount += 1; }; - Messages.find({}).observeChanges({ - added: updateFunc, changed: updateFunc, removed: updateFunc - }); - Meteor.setInterval(function () { - _.each(updateHistories, function (h, max) { - h.push(updateCount); - if (h.length > max) - h.shift(); - }); - Session.set('updateAvgs', _.map(updateHistories, function (h) { - return _.reduce(h, function(memo, num) { - return memo + num; - }, 0) / h.length; - }));; - updateCount = 0; - }, 1000); - -} diff --git a/examples/unfinished/chat-benchmark/run-local.sh b/examples/unfinished/chat-benchmark/run-local.sh deleted file mode 100755 index 0137cf1407..0000000000 --- a/examples/unfinished/chat-benchmark/run-local.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env bash - -PORT=9000 -NUM_CLIENTS=10 -DURATION=120 -REPORT_INTERVAL=10 - -set -e -trap 'echo "FAILED. Killing: $(jobs -pr)" ; for pid in "$(jobs -pr)"; do kill $pid ; done' EXIT - -PROJDIR=`dirname $0` -cd "$PROJDIR" -PROJDIR=`pwd` - -SCENARIO="${1:-default}" - -# clean up from previous runs -# XXX this is gross! -pkill -f "$PROJDIR/.meteor/local/db" || true -../../../meteor reset || true - -# start the benchmark app -../../../meteor --production --settings "scenarios/${SCENARIO}.json" --port 9000 & -OUTER_PID=$! - - -# start a bunch of phantomjs processes -PHANTOMSCRIPT=`mktemp -t benchmark-XXXXXXXX` -cat > "$PHANTOMSCRIPT" < - console.log "press" - Presses.insert {} - -Template.button_demo.press_count = -> Presses.find({}).length diff --git a/examples/unfinished/coffeeless/client/coffeeless.html b/examples/unfinished/coffeeless/client/coffeeless.html deleted file mode 100644 index 059a1121aa..0000000000 --- a/examples/unfinished/coffeeless/client/coffeeless.html +++ /dev/null @@ -1,36 +0,0 @@ - - coffeeless - - - -

coffeeless

- - Welcome to Meteor! Here is a button for you to press. - - {{> button_demo }} - - - - - - - - diff --git a/examples/unfinished/coffeeless/client/coffeeless.less b/examples/unfinished/coffeeless/client/coffeeless.less deleted file mode 100644 index b7ff8589c9..0000000000 --- a/examples/unfinished/coffeeless/client/coffeeless.less +++ /dev/null @@ -1,12 +0,0 @@ -@red: #842210; - -h1 { - color: @red; -} - -img { - display: block; - position: absolute; - top: 0px; - right: 0px; -} diff --git a/examples/unfinished/coffeeless/model.coffee b/examples/unfinished/coffeeless/model.coffee deleted file mode 100644 index d1a4baf4db..0000000000 --- a/examples/unfinished/coffeeless/model.coffee +++ /dev/null @@ -1,4 +0,0 @@ -root = exports ? this # export Presses globally. -root.Presses = new Mongo.Collection 'presses' - -Meteor.publish 'presses' diff --git a/examples/unfinished/coffeeless/public/4201645142_ec2e3bb3f8_b.jpg b/examples/unfinished/coffeeless/public/4201645142_ec2e3bb3f8_b.jpg deleted file mode 100644 index 93043abd34..0000000000 Binary files a/examples/unfinished/coffeeless/public/4201645142_ec2e3bb3f8_b.jpg and /dev/null differ diff --git a/examples/unfinished/controls/.meteor/.gitignore b/examples/unfinished/controls/.meteor/.gitignore deleted file mode 100644 index 4083037423..0000000000 --- a/examples/unfinished/controls/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/examples/unfinished/controls/.meteor/packages b/examples/unfinished/controls/.meteor/packages deleted file mode 100644 index 0aed446952..0000000000 --- a/examples/unfinished/controls/.meteor/packages +++ /dev/null @@ -1,7 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -autopublish -standard-app-packages diff --git a/examples/unfinished/controls/.meteor/release b/examples/unfinished/controls/.meteor/release deleted file mode 100644 index a918a2aa18..0000000000 --- a/examples/unfinished/controls/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -0.6.0 diff --git a/examples/unfinished/controls/client/controls.js b/examples/unfinished/controls/client/controls.js deleted file mode 100644 index 19631ea426..0000000000 --- a/examples/unfinished/controls/client/controls.js +++ /dev/null @@ -1,43 +0,0 @@ -var SPEW = function(str) { - SPEW.lines.push(str); - // use counter to signal invalidation - Session.set("SPEW_V", (Session.get("SPEW_V") || 0)+1); -}; -SPEW.lines = []; - -Template.radios.events = { - 'change input': function(event) { - //SPEW("change "+event.target.value); - if (event.target.checked) { - Session.set("current_band", event.target.value); - } - } -}; - -Template.radios.current_band = function() { - return Session.get("current_band"); -}; - -Template.radios.band_checked = function(b) { - return Session.equals("current_band", b) ? - 'checked="checked"' : ''; -}; - -Template.checkboxes.events = { - 'change input': function(event) { - Session.set("dst", event.target.checked); - } -}; - -Template.checkboxes.dst_checked = function() { - return Session.get("dst") ? 'checked="checked"' : ''; -}; - -Template.checkboxes.dst = function() { - return Session.get("dst") ? 'Yes' : 'No'; -}; - -Template.spew.lines = function() { - Session.get("SPEW_V"); - return SPEW.lines; -}; diff --git a/examples/unfinished/controls/controls.css b/examples/unfinished/controls/controls.css deleted file mode 100644 index b6b4052b43..0000000000 --- a/examples/unfinished/controls/controls.css +++ /dev/null @@ -1 +0,0 @@ -/* CSS declarations go here */ diff --git a/examples/unfinished/controls/controls.html b/examples/unfinished/controls/controls.html deleted file mode 100644 index 28e87fd29a..0000000000 --- a/examples/unfinished/controls/controls.html +++ /dev/null @@ -1,35 +0,0 @@ - - controls - - - - {{> radios}} - {{> checkboxes}} - {{> spew}} - - - - - - - diff --git a/examples/unfinished/jsparse-docs/.meteor/.gitignore b/examples/unfinished/jsparse-docs/.meteor/.gitignore deleted file mode 100644 index 4083037423..0000000000 --- a/examples/unfinished/jsparse-docs/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/examples/unfinished/jsparse-docs/.meteor/packages b/examples/unfinished/jsparse-docs/.meteor/packages deleted file mode 100644 index 0aed446952..0000000000 --- a/examples/unfinished/jsparse-docs/.meteor/packages +++ /dev/null @@ -1,7 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -autopublish -standard-app-packages diff --git a/examples/unfinished/jsparse-docs/.meteor/release b/examples/unfinished/jsparse-docs/.meteor/release deleted file mode 100644 index a918a2aa18..0000000000 --- a/examples/unfinished/jsparse-docs/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -0.6.0 diff --git a/examples/unfinished/jsparse-docs/jsparse-docs.css b/examples/unfinished/jsparse-docs/jsparse-docs.css deleted file mode 100644 index a233a3ffb0..0000000000 --- a/examples/unfinished/jsparse-docs/jsparse-docs.css +++ /dev/null @@ -1,42 +0,0 @@ - -p, .topnotes .nodespec { margin: 0.8em; } -.topnotes { - background: #ffd; - margin-bottom: 2em; - margin-left: 1em; - margin-right: 1em; - border: 2px solid #ccc; -} - -.str { font-weight: bold; } -.token { font-family: monospace; font-size: 110%; font-weight: bold; } -.token, .tokentype { background: #ddd; padding: 2px 5px; } -.tokentype { font-size: 85%; } -.ref { font-style: italic; } -.punc { font-size: 140%; } -.comma { color: #fff; } -.or { padding-left: 3px; padding-right: 3px; } - -.nodespec { - font-size: 16px; - margin: 1em 0; - line-height: 20px; -} - -.indent { - margin-left: 2em; -} - -.explan { - margin-left: 20em; - margin-right: 2em; - border: 1px solid #ccc; -} - -#page { max-width: 50em; margin: 0 auto; } - -.spacer { text-align: center; font-size:50%; font-weight: bold; border-top: 1px solid #999; - margin-left: 6em; margin-right: 6em; - } - -code { font-weight: bold; } diff --git a/examples/unfinished/jsparse-docs/jsparse-docs.html b/examples/unfinished/jsparse-docs/jsparse-docs.html deleted file mode 100644 index 8be0c0e386..0000000000 --- a/examples/unfinished/jsparse-docs/jsparse-docs.html +++ /dev/null @@ -1,279 +0,0 @@ - - jsparse Docs - - - -
- {{> page}} -
- - - diff --git a/examples/unfinished/jsparse-docs/jsparse-docs.js b/examples/unfinished/jsparse-docs/jsparse-docs.js deleted file mode 100644 index 72b161df71..0000000000 --- a/examples/unfinished/jsparse-docs/jsparse-docs.js +++ /dev/null @@ -1,67 +0,0 @@ - - -if (Meteor.isClient) { - Template.page.nodespec = function (fn) { - var parts = [fn()]; - var replaceParts = function(regex, replacementFunc) { - var newParts = []; - _.each(parts, function (part) { - if (typeof part !== 'string') { - newParts.push(part); - return; - } - regex.lastIndex = 0; - var charsTaken = 0; - var matchResult; - while ((matchResult = regex.exec(part))) { - var matchIndex = matchResult.index; - if (matchIndex > charsTaken) - newParts.push(part.substring(charsTaken, matchIndex)); - charsTaken = regex.lastIndex; - var replacementParts = replacementFunc(matchResult); - newParts.push.apply(newParts, _.toArray(replacementParts)); - } - if (charsTaken < part.length) - newParts.push(part.slice(charsTaken)); - }); - parts = newParts; - }; - - parts.unshift(['
']); - parts.push(['
']); - replaceParts(/".*?"/g, function (match) { - return [['', Handlebars._escape(match[0]), '']]; - }); - replaceParts(/`(.*?)`/g, function (match) { - return [['', Handlebars._escape(match[1]), '']]; - }); - replaceParts(/[A-Z]{3,}/g, function (match) { - return [['', Handlebars._escape(match[0]), '']]; - }); - replaceParts(/[a-z]\w*/g, function (match) { - return [['', Handlebars._escape(match[0]), '']]; - }); - replaceParts(/[\[\]()|.,*?]/g, function (match) { - return [[''], match[0], ['']]; - }); - replaceParts(/,/g, function (match) { - return [[''], match[0], ['']]; - }); - replaceParts(/\|/g, function (match) { - return [[''], match[0], ['']]; - }); - - var html = _.map(parts, function (part) { - if (typeof part === "string") - return Handlebars._escape(part); - return part.join(''); - }).join(''); - - return new Handlebars.SafeString(html); - }; - - Template.page.spacer = function () { - return new Handlebars.SafeString('
 
'); - }; - -} diff --git a/examples/unfinished/leaderboard-remote/.meteor/.gitignore b/examples/unfinished/leaderboard-remote/.meteor/.gitignore deleted file mode 100644 index 4083037423..0000000000 --- a/examples/unfinished/leaderboard-remote/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/examples/unfinished/leaderboard-remote/.meteor/packages b/examples/unfinished/leaderboard-remote/.meteor/packages deleted file mode 100644 index 0aed446952..0000000000 --- a/examples/unfinished/leaderboard-remote/.meteor/packages +++ /dev/null @@ -1,7 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -autopublish -standard-app-packages diff --git a/examples/unfinished/leaderboard-remote/.meteor/release b/examples/unfinished/leaderboard-remote/.meteor/release deleted file mode 100644 index a918a2aa18..0000000000 --- a/examples/unfinished/leaderboard-remote/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -0.6.0 diff --git a/examples/unfinished/leaderboard-remote/client/leaderboard-remote.css b/examples/unfinished/leaderboard-remote/client/leaderboard-remote.css deleted file mode 100644 index 7f84876b6d..0000000000 --- a/examples/unfinished/leaderboard-remote/client/leaderboard-remote.css +++ /dev/null @@ -1,41 +0,0 @@ -body { - width: 400px; - margin: 100px auto 0 auto; - background-color: white; - font-family: 'Helvetica Neue', Helvetica, Arial, san-serif; - line-height: 1.3; -} - -#meteor { - position: absolute; - left: 0px; - bottom: 0px; - opacity: .25; - z-index: -1; -} - -h1 { - color: red; - font-size: 3em; - font-weight: 200; - border-style: solid none none none; - border-color: red; - border-width: 4px; -} - -.button_demo { - margin-top: 2em; - width: 100%; -} - -.button_demo input { - display: block; - margin: 0 auto .5em auto; - width: 125px; -} - -.button_demo div { - text-align: center; - color: #777; - font-weight: bold; -} diff --git a/examples/unfinished/leaderboard-remote/client/leaderboard-remote.html b/examples/unfinished/leaderboard-remote/client/leaderboard-remote.html deleted file mode 100644 index 903030c2db..0000000000 --- a/examples/unfinished/leaderboard-remote/client/leaderboard-remote.html +++ /dev/null @@ -1,32 +0,0 @@ - - Remote collection demo - - - -
- - - {{> main}} - -
- - - diff --git a/examples/unfinished/leaderboard-remote/client/leaderboard-remote.js b/examples/unfinished/leaderboard-remote/client/leaderboard-remote.js deleted file mode 100644 index ff1693759d..0000000000 --- a/examples/unfinished/leaderboard-remote/client/leaderboard-remote.js +++ /dev/null @@ -1,51 +0,0 @@ -Leaderboard = DDP.connect("http://leader2.meteor.com/sockjs"); - -// XXX I'd rather this be Leaderboard.Players.. can this API be easier? -Players = new Mongo.Collection("players", {manager: Leaderboard}); - -Template.main.events = { - 'keydown': function () { - Session.set("error", null); - }, - 'click .add': function () { - var name = $('#name').val(); - var score = $('#score').val(); - - if (name.match(/^\s*$/)) { - Session.set("error", "You must give a name"); - return; - } - if (score.match(/^\s*$/)) { - Session.set("error", "You must give a score"); - return; - } - score = +score; - if (isNaN(score)) { - Session.set("error", "Score must be a number"); - return; - } - - Players.insert({name: name, score: score}); - $('#name').val(''); - $('#score').val(''); - }, - 'click .take-points': function () { - var top = Players.findOne({}, {sort: {score: -1}}); - if (top) - Players.update(top._id, {$inc: {score: -20}}); - }, -}; - -Template.main.error = function () { - return Session.get("error"); -}; - -Template.main.average_score = function () { - var count = 0; - var total = 0; - Players.find().forEach(function (player) { - count++; - total += player.score; - }); - return total / count; -}; diff --git a/examples/unfinished/leaderboard-remote/public/planes.png b/examples/unfinished/leaderboard-remote/public/planes.png deleted file mode 100644 index 7c18d610be..0000000000 Binary files a/examples/unfinished/leaderboard-remote/public/planes.png and /dev/null differ diff --git a/examples/unfinished/movers/.meteor/.gitignore b/examples/unfinished/movers/.meteor/.gitignore deleted file mode 100644 index 4083037423..0000000000 --- a/examples/unfinished/movers/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/examples/unfinished/movers/.meteor/packages b/examples/unfinished/movers/.meteor/packages deleted file mode 100644 index 85521b15a9..0000000000 --- a/examples/unfinished/movers/.meteor/packages +++ /dev/null @@ -1,10 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -standard-app-packages -autopublish -insecure -preserve-inputs -less diff --git a/examples/unfinished/movers/.meteor/release b/examples/unfinished/movers/.meteor/release deleted file mode 100644 index 621e94f0ec..0000000000 --- a/examples/unfinished/movers/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -none diff --git a/examples/unfinished/movers/client/jquery-ui-sortable.js b/examples/unfinished/movers/client/jquery-ui-sortable.js deleted file mode 100755 index 0d85cfa365..0000000000 --- a/examples/unfinished/movers/client/jquery-ui-sortable.js +++ /dev/null @@ -1,2252 +0,0 @@ -/*! jQuery UI - v1.10.3 - 2013-07-30 -* http://jqueryui.com -* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.sortable.js -* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */ - -(function( $, undefined ) { - -var uuid = 0, - runiqueId = /^ui-id-\d+$/; - -// $.ui might exist from components with no dependencies, e.g., $.ui.position -$.ui = $.ui || {}; - -$.extend( $.ui, { - version: "1.10.3", - - keyCode: { - BACKSPACE: 8, - COMMA: 188, - DELETE: 46, - DOWN: 40, - END: 35, - ENTER: 13, - ESCAPE: 27, - HOME: 36, - LEFT: 37, - NUMPAD_ADD: 107, - NUMPAD_DECIMAL: 110, - NUMPAD_DIVIDE: 111, - NUMPAD_ENTER: 108, - NUMPAD_MULTIPLY: 106, - NUMPAD_SUBTRACT: 109, - PAGE_DOWN: 34, - PAGE_UP: 33, - PERIOD: 190, - RIGHT: 39, - SPACE: 32, - TAB: 9, - UP: 38 - } -}); - -// plugins -$.fn.extend({ - focus: (function( orig ) { - return function( delay, fn ) { - return typeof delay === "number" ? - this.each(function() { - var elem = this; - setTimeout(function() { - $( elem ).focus(); - if ( fn ) { - fn.call( elem ); - } - }, delay ); - }) : - orig.apply( this, arguments ); - }; - })( $.fn.focus ), - - scrollParent: function() { - var scrollParent; - if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) { - scrollParent = this.parents().filter(function() { - return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x")); - }).eq(0); - } else { - scrollParent = this.parents().filter(function() { - return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x")); - }).eq(0); - } - - return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent; - }, - - zIndex: function( zIndex ) { - if ( zIndex !== undefined ) { - return this.css( "zIndex", zIndex ); - } - - if ( this.length ) { - var elem = $( this[ 0 ] ), position, value; - while ( elem.length && elem[ 0 ] !== document ) { - // Ignore z-index if position is set to a value where z-index is ignored by the browser - // This makes behavior of this function consistent across browsers - // WebKit always returns auto if the element is positioned - position = elem.css( "position" ); - if ( position === "absolute" || position === "relative" || position === "fixed" ) { - // IE returns 0 when zIndex is not specified - // other browsers return a string - // we ignore the case of nested elements with an explicit value of 0 - //
- value = parseInt( elem.css( "zIndex" ), 10 ); - if ( !isNaN( value ) && value !== 0 ) { - return value; - } - } - elem = elem.parent(); - } - } - - return 0; - }, - - uniqueId: function() { - return this.each(function() { - if ( !this.id ) { - this.id = "ui-id-" + (++uuid); - } - }); - }, - - removeUniqueId: function() { - return this.each(function() { - if ( runiqueId.test( this.id ) ) { - $( this ).removeAttr( "id" ); - } - }); - } -}); - -// selectors -function focusable( element, isTabIndexNotNaN ) { - var map, mapName, img, - nodeName = element.nodeName.toLowerCase(); - if ( "area" === nodeName ) { - map = element.parentNode; - mapName = map.name; - if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { - return false; - } - img = $( "img[usemap=#" + mapName + "]" )[0]; - return !!img && visible( img ); - } - return ( /input|select|textarea|button|object/.test( nodeName ) ? - !element.disabled : - "a" === nodeName ? - element.href || isTabIndexNotNaN : - isTabIndexNotNaN) && - // the element and all of its ancestors must be visible - visible( element ); -} - -function visible( element ) { - return $.expr.filters.visible( element ) && - !$( element ).parents().addBack().filter(function() { - return $.css( this, "visibility" ) === "hidden"; - }).length; -} - -$.extend( $.expr[ ":" ], { - data: $.expr.createPseudo ? - $.expr.createPseudo(function( dataName ) { - return function( elem ) { - return !!$.data( elem, dataName ); - }; - }) : - // support: jQuery <1.8 - function( elem, i, match ) { - return !!$.data( elem, match[ 3 ] ); - }, - - focusable: function( element ) { - return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); - }, - - tabbable: function( element ) { - var tabIndex = $.attr( element, "tabindex" ), - isTabIndexNaN = isNaN( tabIndex ); - return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); - } -}); - -// support: jQuery <1.8 -if ( !$( "" ).outerWidth( 1 ).jquery ) { - $.each( [ "Width", "Height" ], function( i, name ) { - var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], - type = name.toLowerCase(), - orig = { - innerWidth: $.fn.innerWidth, - innerHeight: $.fn.innerHeight, - outerWidth: $.fn.outerWidth, - outerHeight: $.fn.outerHeight - }; - - function reduce( elem, size, border, margin ) { - $.each( side, function() { - size -= parseFloat( $.css( elem, "padding" + this ) ) || 0; - if ( border ) { - size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0; - } - if ( margin ) { - size -= parseFloat( $.css( elem, "margin" + this ) ) || 0; - } - }); - return size; - } - - $.fn[ "inner" + name ] = function( size ) { - if ( size === undefined ) { - return orig[ "inner" + name ].call( this ); - } - - return this.each(function() { - $( this ).css( type, reduce( this, size ) + "px" ); - }); - }; - - $.fn[ "outer" + name] = function( size, margin ) { - if ( typeof size !== "number" ) { - return orig[ "outer" + name ].call( this, size ); - } - - return this.each(function() { - $( this).css( type, reduce( this, size, true, margin ) + "px" ); - }); - }; - }); -} - -// support: jQuery <1.8 -if ( !$.fn.addBack ) { - $.fn.addBack = function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - }; -} - -// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413) -if ( $( "" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) { - $.fn.removeData = (function( removeData ) { - return function( key ) { - if ( arguments.length ) { - return removeData.call( this, $.camelCase( key ) ); - } else { - return removeData.call( this ); - } - }; - })( $.fn.removeData ); -} - - - - - -// deprecated -$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); - -$.support.selectstart = "onselectstart" in document.createElement( "div" ); -$.fn.extend({ - disableSelection: function() { - return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) + - ".ui-disableSelection", function( event ) { - event.preventDefault(); - }); - }, - - enableSelection: function() { - return this.unbind( ".ui-disableSelection" ); - } -}); - -$.extend( $.ui, { - // $.ui.plugin is deprecated. Use $.widget() extensions instead. - plugin: { - add: function( module, option, set ) { - var i, - proto = $.ui[ module ].prototype; - for ( i in set ) { - proto.plugins[ i ] = proto.plugins[ i ] || []; - proto.plugins[ i ].push( [ option, set[ i ] ] ); - } - }, - call: function( instance, name, args ) { - var i, - set = instance.plugins[ name ]; - if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) { - return; - } - - for ( i = 0; i < set.length; i++ ) { - if ( instance.options[ set[ i ][ 0 ] ] ) { - set[ i ][ 1 ].apply( instance.element, args ); - } - } - } - }, - - // only used by resizable - hasScroll: function( el, a ) { - - //If overflow is hidden, the element might have extra content, but the user wants to hide it - if ( $( el ).css( "overflow" ) === "hidden") { - return false; - } - - var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", - has = false; - - if ( el[ scroll ] > 0 ) { - return true; - } - - // TODO: determine which cases actually cause this to happen - // if the element doesn't have the scroll set, see if it's possible to - // set the scroll - el[ scroll ] = 1; - has = ( el[ scroll ] > 0 ); - el[ scroll ] = 0; - return has; - } -}); - -})( jQuery ); -(function( $, undefined ) { - -var uuid = 0, - slice = Array.prototype.slice, - _cleanData = $.cleanData; -$.cleanData = function( elems ) { - for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { - try { - $( elem ).triggerHandler( "remove" ); - // http://bugs.jquery.com/ticket/8235 - } catch( e ) {} - } - _cleanData( elems ); -}; - -$.widget = function( name, base, prototype ) { - var fullName, existingConstructor, constructor, basePrototype, - // proxiedPrototype allows the provided prototype to remain unmodified - // so that it can be used as a mixin for multiple widgets (#8876) - proxiedPrototype = {}, - namespace = name.split( "." )[ 0 ]; - - name = name.split( "." )[ 1 ]; - fullName = namespace + "-" + name; - - if ( !prototype ) { - prototype = base; - base = $.Widget; - } - - // create selector for plugin - $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { - return !!$.data( elem, fullName ); - }; - - $[ namespace ] = $[ namespace ] || {}; - existingConstructor = $[ namespace ][ name ]; - constructor = $[ namespace ][ name ] = function( options, element ) { - // allow instantiation without "new" keyword - if ( !this._createWidget ) { - return new constructor( options, element ); - } - - // allow instantiation without initializing for simple inheritance - // must use "new" keyword (the code above always passes args) - if ( arguments.length ) { - this._createWidget( options, element ); - } - }; - // extend with the existing constructor to carry over any static properties - $.extend( constructor, existingConstructor, { - version: prototype.version, - // copy the object used to create the prototype in case we need to - // redefine the widget later - _proto: $.extend( {}, prototype ), - // track widgets that inherit from this widget in case this widget is - // redefined after a widget inherits from it - _childConstructors: [] - }); - - basePrototype = new base(); - // we need to make the options hash a property directly on the new instance - // otherwise we'll modify the options hash on the prototype that we're - // inheriting from - basePrototype.options = $.widget.extend( {}, basePrototype.options ); - $.each( prototype, function( prop, value ) { - if ( !$.isFunction( value ) ) { - proxiedPrototype[ prop ] = value; - return; - } - proxiedPrototype[ prop ] = (function() { - var _super = function() { - return base.prototype[ prop ].apply( this, arguments ); - }, - _superApply = function( args ) { - return base.prototype[ prop ].apply( this, args ); - }; - return function() { - var __super = this._super, - __superApply = this._superApply, - returnValue; - - this._super = _super; - this._superApply = _superApply; - - returnValue = value.apply( this, arguments ); - - this._super = __super; - this._superApply = __superApply; - - return returnValue; - }; - })(); - }); - constructor.prototype = $.widget.extend( basePrototype, { - // TODO: remove support for widgetEventPrefix - // always use the name + a colon as the prefix, e.g., draggable:start - // don't prefix for widgets that aren't DOM-based - widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name - }, proxiedPrototype, { - constructor: constructor, - namespace: namespace, - widgetName: name, - widgetFullName: fullName - }); - - // If this widget is being redefined then we need to find all widgets that - // are inheriting from it and redefine all of them so that they inherit from - // the new version of this widget. We're essentially trying to replace one - // level in the prototype chain. - if ( existingConstructor ) { - $.each( existingConstructor._childConstructors, function( i, child ) { - var childPrototype = child.prototype; - - // redefine the child widget using the same prototype that was - // originally used, but inherit from the new version of the base - $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto ); - }); - // remove the list of existing child constructors from the old constructor - // so the old child constructors can be garbage collected - delete existingConstructor._childConstructors; - } else { - base._childConstructors.push( constructor ); - } - - $.widget.bridge( name, constructor ); -}; - -$.widget.extend = function( target ) { - var input = slice.call( arguments, 1 ), - inputIndex = 0, - inputLength = input.length, - key, - value; - for ( ; inputIndex < inputLength; inputIndex++ ) { - for ( key in input[ inputIndex ] ) { - value = input[ inputIndex ][ key ]; - if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { - // Clone objects - if ( $.isPlainObject( value ) ) { - target[ key ] = $.isPlainObject( target[ key ] ) ? - $.widget.extend( {}, target[ key ], value ) : - // Don't extend strings, arrays, etc. with objects - $.widget.extend( {}, value ); - // Copy everything else by reference - } else { - target[ key ] = value; - } - } - } - } - return target; -}; - -$.widget.bridge = function( name, object ) { - var fullName = object.prototype.widgetFullName || name; - $.fn[ name ] = function( options ) { - var isMethodCall = typeof options === "string", - args = slice.call( arguments, 1 ), - returnValue = this; - - // allow multiple hashes to be passed on init - options = !isMethodCall && args.length ? - $.widget.extend.apply( null, [ options ].concat(args) ) : - options; - - if ( isMethodCall ) { - this.each(function() { - var methodValue, - instance = $.data( this, fullName ); - if ( !instance ) { - return $.error( "cannot call methods on " + name + " prior to initialization; " + - "attempted to call method '" + options + "'" ); - } - if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) { - return $.error( "no such method '" + options + "' for " + name + " widget instance" ); - } - methodValue = instance[ options ].apply( instance, args ); - if ( methodValue !== instance && methodValue !== undefined ) { - returnValue = methodValue && methodValue.jquery ? - returnValue.pushStack( methodValue.get() ) : - methodValue; - return false; - } - }); - } else { - this.each(function() { - var instance = $.data( this, fullName ); - if ( instance ) { - instance.option( options || {} )._init(); - } else { - $.data( this, fullName, new object( options, this ) ); - } - }); - } - - return returnValue; - }; -}; - -$.Widget = function( /* options, element */ ) {}; -$.Widget._childConstructors = []; - -$.Widget.prototype = { - widgetName: "widget", - widgetEventPrefix: "", - defaultElement: "
", - options: { - disabled: false, - - // callbacks - create: null - }, - _createWidget: function( options, element ) { - element = $( element || this.defaultElement || this )[ 0 ]; - this.element = $( element ); - this.uuid = uuid++; - this.eventNamespace = "." + this.widgetName + this.uuid; - this.options = $.widget.extend( {}, - this.options, - this._getCreateOptions(), - options ); - - this.bindings = $(); - this.hoverable = $(); - this.focusable = $(); - - if ( element !== this ) { - $.data( element, this.widgetFullName, this ); - this._on( true, this.element, { - remove: function( event ) { - if ( event.target === element ) { - this.destroy(); - } - } - }); - this.document = $( element.style ? - // element within the document - element.ownerDocument : - // element is window or document - element.document || element ); - this.window = $( this.document[0].defaultView || this.document[0].parentWindow ); - } - - this._create(); - this._trigger( "create", null, this._getCreateEventData() ); - this._init(); - }, - _getCreateOptions: $.noop, - _getCreateEventData: $.noop, - _create: $.noop, - _init: $.noop, - - destroy: function() { - this._destroy(); - // we can probably remove the unbind calls in 2.0 - // all event bindings should go through this._on() - this.element - .unbind( this.eventNamespace ) - // 1.9 BC for #7810 - // TODO remove dual storage - .removeData( this.widgetName ) - .removeData( this.widgetFullName ) - // support: jquery <1.6.3 - // http://bugs.jquery.com/ticket/9413 - .removeData( $.camelCase( this.widgetFullName ) ); - this.widget() - .unbind( this.eventNamespace ) - .removeAttr( "aria-disabled" ) - .removeClass( - this.widgetFullName + "-disabled " + - "ui-state-disabled" ); - - // clean up events and states - this.bindings.unbind( this.eventNamespace ); - this.hoverable.removeClass( "ui-state-hover" ); - this.focusable.removeClass( "ui-state-focus" ); - }, - _destroy: $.noop, - - widget: function() { - return this.element; - }, - - option: function( key, value ) { - var options = key, - parts, - curOption, - i; - - if ( arguments.length === 0 ) { - // don't return a reference to the internal hash - return $.widget.extend( {}, this.options ); - } - - if ( typeof key === "string" ) { - // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } - options = {}; - parts = key.split( "." ); - key = parts.shift(); - if ( parts.length ) { - curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); - for ( i = 0; i < parts.length - 1; i++ ) { - curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; - curOption = curOption[ parts[ i ] ]; - } - key = parts.pop(); - if ( value === undefined ) { - return curOption[ key ] === undefined ? null : curOption[ key ]; - } - curOption[ key ] = value; - } else { - if ( value === undefined ) { - return this.options[ key ] === undefined ? null : this.options[ key ]; - } - options[ key ] = value; - } - } - - this._setOptions( options ); - - return this; - }, - _setOptions: function( options ) { - var key; - - for ( key in options ) { - this._setOption( key, options[ key ] ); - } - - return this; - }, - _setOption: function( key, value ) { - this.options[ key ] = value; - - if ( key === "disabled" ) { - this.widget() - .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value ) - .attr( "aria-disabled", value ); - this.hoverable.removeClass( "ui-state-hover" ); - this.focusable.removeClass( "ui-state-focus" ); - } - - return this; - }, - - enable: function() { - return this._setOption( "disabled", false ); - }, - disable: function() { - return this._setOption( "disabled", true ); - }, - - _on: function( suppressDisabledCheck, element, handlers ) { - var delegateElement, - instance = this; - - // no suppressDisabledCheck flag, shuffle arguments - if ( typeof suppressDisabledCheck !== "boolean" ) { - handlers = element; - element = suppressDisabledCheck; - suppressDisabledCheck = false; - } - - // no element argument, shuffle and use this.element - if ( !handlers ) { - handlers = element; - element = this.element; - delegateElement = this.widget(); - } else { - // accept selectors, DOM elements - element = delegateElement = $( element ); - this.bindings = this.bindings.add( element ); - } - - $.each( handlers, function( event, handler ) { - function handlerProxy() { - // allow widgets to customize the disabled handling - // - disabled as an array instead of boolean - // - disabled class as method for disabling individual parts - if ( !suppressDisabledCheck && - ( instance.options.disabled === true || - $( this ).hasClass( "ui-state-disabled" ) ) ) { - return; - } - return ( typeof handler === "string" ? instance[ handler ] : handler ) - .apply( instance, arguments ); - } - - // copy the guid so direct unbinding works - if ( typeof handler !== "string" ) { - handlerProxy.guid = handler.guid = - handler.guid || handlerProxy.guid || $.guid++; - } - - var match = event.match( /^(\w+)\s*(.*)$/ ), - eventName = match[1] + instance.eventNamespace, - selector = match[2]; - if ( selector ) { - delegateElement.delegate( selector, eventName, handlerProxy ); - } else { - element.bind( eventName, handlerProxy ); - } - }); - }, - - _off: function( element, eventName ) { - eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace; - element.unbind( eventName ).undelegate( eventName ); - }, - - _delay: function( handler, delay ) { - function handlerProxy() { - return ( typeof handler === "string" ? instance[ handler ] : handler ) - .apply( instance, arguments ); - } - var instance = this; - return setTimeout( handlerProxy, delay || 0 ); - }, - - _hoverable: function( element ) { - this.hoverable = this.hoverable.add( element ); - this._on( element, { - mouseenter: function( event ) { - $( event.currentTarget ).addClass( "ui-state-hover" ); - }, - mouseleave: function( event ) { - $( event.currentTarget ).removeClass( "ui-state-hover" ); - } - }); - }, - - _focusable: function( element ) { - this.focusable = this.focusable.add( element ); - this._on( element, { - focusin: function( event ) { - $( event.currentTarget ).addClass( "ui-state-focus" ); - }, - focusout: function( event ) { - $( event.currentTarget ).removeClass( "ui-state-focus" ); - } - }); - }, - - _trigger: function( type, event, data ) { - var prop, orig, - callback = this.options[ type ]; - - data = data || {}; - event = $.Event( event ); - event.type = ( type === this.widgetEventPrefix ? - type : - this.widgetEventPrefix + type ).toLowerCase(); - // the original event may come from any element - // so we need to reset the target on the new event - event.target = this.element[ 0 ]; - - // copy original event properties over to the new event - orig = event.originalEvent; - if ( orig ) { - for ( prop in orig ) { - if ( !( prop in event ) ) { - event[ prop ] = orig[ prop ]; - } - } - } - - this.element.trigger( event, data ); - return !( $.isFunction( callback ) && - callback.apply( this.element[0], [ event ].concat( data ) ) === false || - event.isDefaultPrevented() ); - } -}; - -$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { - $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { - if ( typeof options === "string" ) { - options = { effect: options }; - } - var hasOptions, - effectName = !options ? - method : - options === true || typeof options === "number" ? - defaultEffect : - options.effect || defaultEffect; - options = options || {}; - if ( typeof options === "number" ) { - options = { duration: options }; - } - hasOptions = !$.isEmptyObject( options ); - options.complete = callback; - if ( options.delay ) { - element.delay( options.delay ); - } - if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { - element[ method ]( options ); - } else if ( effectName !== method && element[ effectName ] ) { - element[ effectName ]( options.duration, options.easing, callback ); - } else { - element.queue(function( next ) { - $( this )[ method ](); - if ( callback ) { - callback.call( element[ 0 ] ); - } - next(); - }); - } - }; -}); - -})( jQuery ); -(function( $, undefined ) { - -var mouseHandled = false; -$( document ).mouseup( function() { - mouseHandled = false; -}); - -$.widget("ui.mouse", { - version: "1.10.3", - options: { - cancel: "input,textarea,button,select,option", - distance: 1, - delay: 0 - }, - _mouseInit: function() { - var that = this; - - this.element - .bind("mousedown."+this.widgetName, function(event) { - return that._mouseDown(event); - }) - .bind("click."+this.widgetName, function(event) { - if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) { - $.removeData(event.target, that.widgetName + ".preventClickEvent"); - event.stopImmediatePropagation(); - return false; - } - }); - - this.started = false; - }, - - // TODO: make sure destroying one instance of mouse doesn't mess with - // other instances of mouse - _mouseDestroy: function() { - this.element.unbind("."+this.widgetName); - if ( this._mouseMoveDelegate ) { - $(document) - .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate) - .unbind("mouseup."+this.widgetName, this._mouseUpDelegate); - } - }, - - _mouseDown: function(event) { - // don't let more than one widget handle mouseStart - if( mouseHandled ) { return; } - - // we may have missed mouseup (out of window) - (this._mouseStarted && this._mouseUp(event)); - - this._mouseDownEvent = event; - - var that = this, - btnIsLeft = (event.which === 1), - // event.target.nodeName works around a bug in IE 8 with - // disabled inputs (#7620) - elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false); - if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { - return true; - } - - this.mouseDelayMet = !this.options.delay; - if (!this.mouseDelayMet) { - this._mouseDelayTimer = setTimeout(function() { - that.mouseDelayMet = true; - }, this.options.delay); - } - - if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { - this._mouseStarted = (this._mouseStart(event) !== false); - if (!this._mouseStarted) { - event.preventDefault(); - return true; - } - } - - // Click event may never have fired (Gecko & Opera) - if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) { - $.removeData(event.target, this.widgetName + ".preventClickEvent"); - } - - // these delegates are required to keep context - this._mouseMoveDelegate = function(event) { - return that._mouseMove(event); - }; - this._mouseUpDelegate = function(event) { - return that._mouseUp(event); - }; - $(document) - .bind("mousemove."+this.widgetName, this._mouseMoveDelegate) - .bind("mouseup."+this.widgetName, this._mouseUpDelegate); - - event.preventDefault(); - - mouseHandled = true; - return true; - }, - - _mouseMove: function(event) { - // IE mouseup check - mouseup happened when mouse was out of window - if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) { - return this._mouseUp(event); - } - - if (this._mouseStarted) { - this._mouseDrag(event); - return event.preventDefault(); - } - - if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { - this._mouseStarted = - (this._mouseStart(this._mouseDownEvent, event) !== false); - (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); - } - - return !this._mouseStarted; - }, - - _mouseUp: function(event) { - $(document) - .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate) - .unbind("mouseup."+this.widgetName, this._mouseUpDelegate); - - if (this._mouseStarted) { - this._mouseStarted = false; - - if (event.target === this._mouseDownEvent.target) { - $.data(event.target, this.widgetName + ".preventClickEvent", true); - } - - this._mouseStop(event); - } - - return false; - }, - - _mouseDistanceMet: function(event) { - return (Math.max( - Math.abs(this._mouseDownEvent.pageX - event.pageX), - Math.abs(this._mouseDownEvent.pageY - event.pageY) - ) >= this.options.distance - ); - }, - - _mouseDelayMet: function(/* event */) { - return this.mouseDelayMet; - }, - - // These are placeholder methods, to be overriden by extending plugin - _mouseStart: function(/* event */) {}, - _mouseDrag: function(/* event */) {}, - _mouseStop: function(/* event */) {}, - _mouseCapture: function(/* event */) { return true; } -}); - -})(jQuery); -(function( $, undefined ) { - -/*jshint loopfunc: true */ - -function isOverAxis( x, reference, size ) { - return ( x > reference ) && ( x < ( reference + size ) ); -} - -function isFloating(item) { - return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display")); -} - -$.widget("ui.sortable", $.ui.mouse, { - version: "1.10.3", - widgetEventPrefix: "sort", - ready: false, - options: { - appendTo: "parent", - axis: false, - connectWith: false, - containment: false, - cursor: "auto", - cursorAt: false, - dropOnEmpty: true, - forcePlaceholderSize: false, - forceHelperSize: false, - grid: false, - handle: false, - helper: "original", - items: "> *", - opacity: false, - placeholder: false, - revert: false, - scroll: true, - scrollSensitivity: 20, - scrollSpeed: 20, - scope: "default", - tolerance: "intersect", - zIndex: 1000, - - // callbacks - activate: null, - beforeStop: null, - change: null, - deactivate: null, - out: null, - over: null, - receive: null, - remove: null, - sort: null, - start: null, - stop: null, - update: null - }, - _create: function() { - - var o = this.options; - this.containerCache = {}; - this.element.addClass("ui-sortable"); - - //Get the items - this.refresh(); - - //Let's determine if the items are being displayed horizontally - this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false; - - //Let's determine the parent's offset - this.offset = this.element.offset(); - - //Initialize mouse events for interaction - this._mouseInit(); - - //We're ready to go - this.ready = true; - - }, - - _destroy: function() { - this.element - .removeClass("ui-sortable ui-sortable-disabled"); - this._mouseDestroy(); - - for ( var i = this.items.length - 1; i >= 0; i-- ) { - this.items[i].item.removeData(this.widgetName + "-item"); - } - - return this; - }, - - _setOption: function(key, value){ - if ( key === "disabled" ) { - this.options[ key ] = value; - - this.widget().toggleClass( "ui-sortable-disabled", !!value ); - } else { - // Don't call widget base _setOption for disable as it adds ui-state-disabled class - $.Widget.prototype._setOption.apply(this, arguments); - } - }, - - _mouseCapture: function(event, overrideHandle) { - var currentItem = null, - validHandle = false, - that = this; - - if (this.reverting) { - return false; - } - - if(this.options.disabled || this.options.type === "static") { - return false; - } - - //We have to refresh the items data once first - this._refreshItems(event); - - //Find out if the clicked node (or one of its parents) is a actual item in this.items - $(event.target).parents().each(function() { - if($.data(this, that.widgetName + "-item") === that) { - currentItem = $(this); - return false; - } - }); - if($.data(event.target, that.widgetName + "-item") === that) { - currentItem = $(event.target); - } - - if(!currentItem) { - return false; - } - if(this.options.handle && !overrideHandle) { - $(this.options.handle, currentItem).find("*").addBack().each(function() { - if(this === event.target) { - validHandle = true; - } - }); - if(!validHandle) { - return false; - } - } - - this.currentItem = currentItem; - this._removeCurrentsFromItems(); - return true; - - }, - - _mouseStart: function(event, overrideHandle, noActivation) { - - var i, body, - o = this.options; - - this.currentContainer = this; - - //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture - this.refreshPositions(); - - //Create and append the visible helper - this.helper = this._createHelper(event); - - //Cache the helper size - this._cacheHelperProportions(); - - /* - * - Position generation - - * This block generates everything position related - it's the core of draggables. - */ - - //Cache the margins of the original element - this._cacheMargins(); - - //Get the next scrolling parent - this.scrollParent = this.helper.scrollParent(); - - //The element's absolute position on the page minus margins - this.offset = this.currentItem.offset(); - this.offset = { - top: this.offset.top - this.margins.top, - left: this.offset.left - this.margins.left - }; - - $.extend(this.offset, { - click: { //Where the click happened, relative to the element - left: event.pageX - this.offset.left, - top: event.pageY - this.offset.top - }, - parent: this._getParentOffset(), - relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper - }); - - // Only after we got the offset, we can change the helper's position to absolute - // TODO: Still need to figure out a way to make relative sorting possible - this.helper.css("position", "absolute"); - this.cssPosition = this.helper.css("position"); - - //Generate the original position - this.originalPosition = this._generatePosition(event); - this.originalPageX = event.pageX; - this.originalPageY = event.pageY; - - //Adjust the mouse offset relative to the helper if "cursorAt" is supplied - (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); - - //Cache the former DOM position - this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] }; - - //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way - if(this.helper[0] !== this.currentItem[0]) { - this.currentItem.hide(); - } - - //Create the placeholder - this._createPlaceholder(); - - //Set a containment if given in the options - if(o.containment) { - this._setContainment(); - } - - if( o.cursor && o.cursor !== "auto" ) { // cursor option - body = this.document.find( "body" ); - - // support: IE - this.storedCursor = body.css( "cursor" ); - body.css( "cursor", o.cursor ); - - this.storedStylesheet = $( "" ).appendTo( body ); - } - - if(o.opacity) { // opacity option - if (this.helper.css("opacity")) { - this._storedOpacity = this.helper.css("opacity"); - } - this.helper.css("opacity", o.opacity); - } - - if(o.zIndex) { // zIndex option - if (this.helper.css("zIndex")) { - this._storedZIndex = this.helper.css("zIndex"); - } - this.helper.css("zIndex", o.zIndex); - } - - //Prepare scrolling - if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") { - this.overflowOffset = this.scrollParent.offset(); - } - - //Call callbacks - this._trigger("start", event, this._uiHash()); - - //Recache the helper size - if(!this._preserveHelperProportions) { - this._cacheHelperProportions(); - } - - - //Post "activate" events to possible containers - if( !noActivation ) { - for ( i = this.containers.length - 1; i >= 0; i-- ) { - this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) ); - } - } - - //Prepare possible droppables - if($.ui.ddmanager) { - $.ui.ddmanager.current = this; - } - - if ($.ui.ddmanager && !o.dropBehaviour) { - $.ui.ddmanager.prepareOffsets(this, event); - } - - this.dragging = true; - - this.helper.addClass("ui-sortable-helper"); - this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position - return true; - - }, - - _mouseDrag: function(event) { - var i, item, itemElement, intersection, - o = this.options, - scrolled = false; - - //Compute the helpers position - this.position = this._generatePosition(event); - this.positionAbs = this._convertPositionTo("absolute"); - - if (!this.lastPositionAbs) { - this.lastPositionAbs = this.positionAbs; - } - - //Do scrolling - if(this.options.scroll) { - if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") { - - if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) { - this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed; - } else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) { - this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed; - } - - if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) { - this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed; - } else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) { - this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed; - } - - } else { - - if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) { - scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); - } else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) { - scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); - } - - if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) { - scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); - } else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) { - scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); - } - - } - - if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) { - $.ui.ddmanager.prepareOffsets(this, event); - } - } - - //Regenerate the absolute position used for position checks - this.positionAbs = this._convertPositionTo("absolute"); - - //Set the helper position - if(!this.options.axis || this.options.axis !== "y") { - this.helper[0].style.left = this.position.left+"px"; - } - if(!this.options.axis || this.options.axis !== "x") { - this.helper[0].style.top = this.position.top+"px"; - } - - //Rearrange - for (i = this.items.length - 1; i >= 0; i--) { - - //Cache variables and intersection, continue if no intersection - item = this.items[i]; - itemElement = item.item[0]; - intersection = this._intersectsWithPointer(item); - if (!intersection) { - continue; - } - - // Only put the placeholder inside the current Container, skip all - // items form other containers. This works because when moving - // an item from one container to another the - // currentContainer is switched before the placeholder is moved. - // - // Without this moving items in "sub-sortables" can cause the placeholder to jitter - // beetween the outer and inner container. - if (item.instance !== this.currentContainer) { - continue; - } - - // cannot intersect with itself - // no useless actions that have been done before - // no action if the item moved is the parent of the item checked - if (itemElement !== this.currentItem[0] && - this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement && - !$.contains(this.placeholder[0], itemElement) && - (this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true) - ) { - - this.direction = intersection === 1 ? "down" : "up"; - - if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) { - this._rearrange(event, item); - } else { - break; - } - - this._trigger("change", event, this._uiHash()); - break; - } - } - - //Post events to containers - this._contactContainers(event); - - //Interconnect with droppables - if($.ui.ddmanager) { - $.ui.ddmanager.drag(this, event); - } - - //Call callbacks - this._trigger("sort", event, this._uiHash()); - - this.lastPositionAbs = this.positionAbs; - return false; - - }, - - _mouseStop: function(event, noPropagation) { - - if(!event) { - return; - } - - //If we are using droppables, inform the manager about the drop - if ($.ui.ddmanager && !this.options.dropBehaviour) { - $.ui.ddmanager.drop(this, event); - } - - if(this.options.revert) { - var that = this, - cur = this.placeholder.offset(), - axis = this.options.axis, - animation = {}; - - if ( !axis || axis === "x" ) { - animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft); - } - if ( !axis || axis === "y" ) { - animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop); - } - this.reverting = true; - $(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() { - that._clear(event); - }); - } else { - this._clear(event, noPropagation); - } - - return false; - - }, - - cancel: function() { - - if(this.dragging) { - - this._mouseUp({ target: null }); - - if(this.options.helper === "original") { - this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); - } else { - this.currentItem.show(); - } - - //Post deactivating events to containers - for (var i = this.containers.length - 1; i >= 0; i--){ - this.containers[i]._trigger("deactivate", null, this._uiHash(this)); - if(this.containers[i].containerCache.over) { - this.containers[i]._trigger("out", null, this._uiHash(this)); - this.containers[i].containerCache.over = 0; - } - } - - } - - if (this.placeholder) { - //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! - if(this.placeholder[0].parentNode) { - this.placeholder[0].parentNode.removeChild(this.placeholder[0]); - } - if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) { - this.helper.remove(); - } - - $.extend(this, { - helper: null, - dragging: false, - reverting: false, - _noFinalSort: null - }); - - if(this.domPosition.prev) { - $(this.domPosition.prev).after(this.currentItem); - } else { - $(this.domPosition.parent).prepend(this.currentItem); - } - } - - return this; - - }, - - serialize: function(o) { - - var items = this._getItemsAsjQuery(o && o.connected), - str = []; - o = o || {}; - - $(items).each(function() { - var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/)); - if (res) { - str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2])); - } - }); - - if(!str.length && o.key) { - str.push(o.key + "="); - } - - return str.join("&"); - - }, - - toArray: function(o) { - - var items = this._getItemsAsjQuery(o && o.connected), - ret = []; - - o = o || {}; - - items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); }); - return ret; - - }, - - /* Be careful with the following core functions */ - _intersectsWith: function(item) { - - var x1 = this.positionAbs.left, - x2 = x1 + this.helperProportions.width, - y1 = this.positionAbs.top, - y2 = y1 + this.helperProportions.height, - l = item.left, - r = l + item.width, - t = item.top, - b = t + item.height, - dyClick = this.offset.click.top, - dxClick = this.offset.click.left, - isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ), - isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ), - isOverElement = isOverElementHeight && isOverElementWidth; - - if ( this.options.tolerance === "pointer" || - this.options.forcePointerForContainers || - (this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"]) - ) { - return isOverElement; - } else { - - return (l < x1 + (this.helperProportions.width / 2) && // Right Half - x2 - (this.helperProportions.width / 2) < r && // Left Half - t < y1 + (this.helperProportions.height / 2) && // Bottom Half - y2 - (this.helperProportions.height / 2) < b ); // Top Half - - } - }, - - _intersectsWithPointer: function(item) { - - var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height), - isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width), - isOverElement = isOverElementHeight && isOverElementWidth, - verticalDirection = this._getDragVerticalDirection(), - horizontalDirection = this._getDragHorizontalDirection(); - - if (!isOverElement) { - return false; - } - - return this.floating ? - ( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 ) - : ( verticalDirection && (verticalDirection === "down" ? 2 : 1) ); - - }, - - _intersectsWithSides: function(item) { - - var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height), - isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width), - verticalDirection = this._getDragVerticalDirection(), - horizontalDirection = this._getDragHorizontalDirection(); - - if (this.floating && horizontalDirection) { - return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf)); - } else { - return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf)); - } - - }, - - _getDragVerticalDirection: function() { - var delta = this.positionAbs.top - this.lastPositionAbs.top; - return delta !== 0 && (delta > 0 ? "down" : "up"); - }, - - _getDragHorizontalDirection: function() { - var delta = this.positionAbs.left - this.lastPositionAbs.left; - return delta !== 0 && (delta > 0 ? "right" : "left"); - }, - - refresh: function(event) { - this._refreshItems(event); - this.refreshPositions(); - return this; - }, - - _connectWith: function() { - var options = this.options; - return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith; - }, - - _getItemsAsjQuery: function(connected) { - - var i, j, cur, inst, - items = [], - queries = [], - connectWith = this._connectWith(); - - if(connectWith && connected) { - for (i = connectWith.length - 1; i >= 0; i--){ - cur = $(connectWith[i]); - for ( j = cur.length - 1; j >= 0; j--){ - inst = $.data(cur[j], this.widgetFullName); - if(inst && inst !== this && !inst.options.disabled) { - queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]); - } - } - } - } - - queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]); - - for (i = queries.length - 1; i >= 0; i--){ - queries[i][0].each(function() { - items.push(this); - }); - } - - return $(items); - - }, - - _removeCurrentsFromItems: function() { - - var list = this.currentItem.find(":data(" + this.widgetName + "-item)"); - - this.items = $.grep(this.items, function (item) { - for (var j=0; j < list.length; j++) { - if(list[j] === item.item[0]) { - return false; - } - } - return true; - }); - - }, - - _refreshItems: function(event) { - - this.items = []; - this.containers = [this]; - - var i, j, cur, inst, targetData, _queries, item, queriesLength, - items = this.items, - queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]], - connectWith = this._connectWith(); - - if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down - for (i = connectWith.length - 1; i >= 0; i--){ - cur = $(connectWith[i]); - for (j = cur.length - 1; j >= 0; j--){ - inst = $.data(cur[j], this.widgetFullName); - if(inst && inst !== this && !inst.options.disabled) { - queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]); - this.containers.push(inst); - } - } - } - } - - for (i = queries.length - 1; i >= 0; i--) { - targetData = queries[i][1]; - _queries = queries[i][0]; - - for (j=0, queriesLength = _queries.length; j < queriesLength; j++) { - item = $(_queries[j]); - - item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager) - - items.push({ - item: item, - instance: targetData, - width: 0, height: 0, - left: 0, top: 0 - }); - } - } - - }, - - refreshPositions: function(fast) { - - //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change - if(this.offsetParent && this.helper) { - this.offset.parent = this._getParentOffset(); - } - - var i, item, t, p; - - for (i = this.items.length - 1; i >= 0; i--){ - item = this.items[i]; - - //We ignore calculating positions of all connected containers when we're not over them - if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) { - continue; - } - - t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item; - - if (!fast) { - item.width = t.outerWidth(); - item.height = t.outerHeight(); - } - - p = t.offset(); - item.left = p.left; - item.top = p.top; - } - - if(this.options.custom && this.options.custom.refreshContainers) { - this.options.custom.refreshContainers.call(this); - } else { - for (i = this.containers.length - 1; i >= 0; i--){ - p = this.containers[i].element.offset(); - this.containers[i].containerCache.left = p.left; - this.containers[i].containerCache.top = p.top; - this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); - this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); - } - } - - return this; - }, - - _createPlaceholder: function(that) { - that = that || this; - var className, - o = that.options; - - if(!o.placeholder || o.placeholder.constructor === String) { - className = o.placeholder; - o.placeholder = { - element: function() { - - var nodeName = that.currentItem[0].nodeName.toLowerCase(), - element = $( "<" + nodeName + ">", that.document[0] ) - .addClass(className || that.currentItem[0].className+" ui-sortable-placeholder") - .removeClass("ui-sortable-helper"); - - if ( nodeName === "tr" ) { - that.currentItem.children().each(function() { - $( " ", that.document[0] ) - .attr( "colspan", $( this ).attr( "colspan" ) || 1 ) - .appendTo( element ); - }); - } else if ( nodeName === "img" ) { - element.attr( "src", that.currentItem.attr( "src" ) ); - } - - if ( !className ) { - element.css( "visibility", "hidden" ); - } - - return element; - }, - update: function(container, p) { - - // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that - // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified - if(className && !o.forcePlaceholderSize) { - return; - } - - //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item - if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); } - if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); } - } - }; - } - - //Create the placeholder - that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem)); - - //Append it after the actual current item - that.currentItem.after(that.placeholder); - - //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317) - o.placeholder.update(that, that.placeholder); - - }, - - _contactContainers: function(event) { - var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating, - innermostContainer = null, - innermostIndex = null; - - // get innermost container that intersects with item - for (i = this.containers.length - 1; i >= 0; i--) { - - // never consider a container that's located within the item itself - if($.contains(this.currentItem[0], this.containers[i].element[0])) { - continue; - } - - if(this._intersectsWith(this.containers[i].containerCache)) { - - // if we've already found a container and it's more "inner" than this, then continue - if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) { - continue; - } - - innermostContainer = this.containers[i]; - innermostIndex = i; - - } else { - // container doesn't intersect. trigger "out" event if necessary - if(this.containers[i].containerCache.over) { - this.containers[i]._trigger("out", event, this._uiHash(this)); - this.containers[i].containerCache.over = 0; - } - } - - } - - // if no intersecting containers found, return - if(!innermostContainer) { - return; - } - - // move the item into the container if it's not there already - if(this.containers.length === 1) { - if (!this.containers[innermostIndex].containerCache.over) { - this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); - this.containers[innermostIndex].containerCache.over = 1; - } - } else { - - //When entering a new container, we will find the item with the least distance and append our item near it - dist = 10000; - itemWithLeastDistance = null; - floating = innermostContainer.floating || isFloating(this.currentItem); - posProperty = floating ? "left" : "top"; - sizeProperty = floating ? "width" : "height"; - base = this.positionAbs[posProperty] + this.offset.click[posProperty]; - for (j = this.items.length - 1; j >= 0; j--) { - if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) { - continue; - } - if(this.items[j].item[0] === this.currentItem[0]) { - continue; - } - if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) { - continue; - } - cur = this.items[j].item.offset()[posProperty]; - nearBottom = false; - if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){ - nearBottom = true; - cur += this.items[j][sizeProperty]; - } - - if(Math.abs(cur - base) < dist) { - dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; - this.direction = nearBottom ? "up": "down"; - } - } - - //Check if dropOnEmpty is enabled - if(!itemWithLeastDistance && !this.options.dropOnEmpty) { - return; - } - - if(this.currentContainer === this.containers[innermostIndex]) { - return; - } - - itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); - this._trigger("change", event, this._uiHash()); - this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); - this.currentContainer = this.containers[innermostIndex]; - - //Update the placeholder - this.options.placeholder.update(this.currentContainer, this.placeholder); - - this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); - this.containers[innermostIndex].containerCache.over = 1; - } - - - }, - - _createHelper: function(event) { - - var o = this.options, - helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem); - - //Add the helper to the DOM if that didn't happen already - if(!helper.parents("body").length) { - $(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]); - } - - if(helper[0] === this.currentItem[0]) { - this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") }; - } - - if(!helper[0].style.width || o.forceHelperSize) { - helper.width(this.currentItem.width()); - } - if(!helper[0].style.height || o.forceHelperSize) { - helper.height(this.currentItem.height()); - } - - return helper; - - }, - - _adjustOffsetFromHelper: function(obj) { - if (typeof obj === "string") { - obj = obj.split(" "); - } - if ($.isArray(obj)) { - obj = {left: +obj[0], top: +obj[1] || 0}; - } - if ("left" in obj) { - this.offset.click.left = obj.left + this.margins.left; - } - if ("right" in obj) { - this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; - } - if ("top" in obj) { - this.offset.click.top = obj.top + this.margins.top; - } - if ("bottom" in obj) { - this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; - } - }, - - _getParentOffset: function() { - - - //Get the offsetParent and cache its position - this.offsetParent = this.helper.offsetParent(); - var po = this.offsetParent.offset(); - - // This is a special case where we need to modify a offset calculated on start, since the following happened: - // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent - // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that - // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag - if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) { - po.left += this.scrollParent.scrollLeft(); - po.top += this.scrollParent.scrollTop(); - } - - // This needs to be actually done for all browsers, since pageX/pageY includes this information - // with an ugly IE fix - if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) { - po = { top: 0, left: 0 }; - } - - return { - top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), - left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) - }; - - }, - - _getRelativeOffset: function() { - - if(this.cssPosition === "relative") { - var p = this.currentItem.position(); - return { - top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), - left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() - }; - } else { - return { top: 0, left: 0 }; - } - - }, - - _cacheMargins: function() { - this.margins = { - left: (parseInt(this.currentItem.css("marginLeft"),10) || 0), - top: (parseInt(this.currentItem.css("marginTop"),10) || 0) - }; - }, - - _cacheHelperProportions: function() { - this.helperProportions = { - width: this.helper.outerWidth(), - height: this.helper.outerHeight() - }; - }, - - _setContainment: function() { - - var ce, co, over, - o = this.options; - if(o.containment === "parent") { - o.containment = this.helper[0].parentNode; - } - if(o.containment === "document" || o.containment === "window") { - this.containment = [ - 0 - this.offset.relative.left - this.offset.parent.left, - 0 - this.offset.relative.top - this.offset.parent.top, - $(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left, - ($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top - ]; - } - - if(!(/^(document|window|parent)$/).test(o.containment)) { - ce = $(o.containment)[0]; - co = $(o.containment).offset(); - over = ($(ce).css("overflow") !== "hidden"); - - this.containment = [ - co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left, - co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top, - co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left, - co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top - ]; - } - - }, - - _convertPositionTo: function(d, pos) { - - if(!pos) { - pos = this.position; - } - var mod = d === "absolute" ? 1 : -1, - scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, - scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); - - return { - top: ( - pos.top + // The absolute mouse position - this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent - this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border) - ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) - ), - left: ( - pos.left + // The absolute mouse position - this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent - this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border) - ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) - ) - }; - - }, - - _generatePosition: function(event) { - - var top, left, - o = this.options, - pageX = event.pageX, - pageY = event.pageY, - scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); - - // This is another very weird special case that only happens for relative elements: - // 1. If the css position is relative - // 2. and the scroll parent is the document or similar to the offset parent - // we have to refresh the relative offset during the scroll so there are no jumps - if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) { - this.offset.relative = this._getRelativeOffset(); - } - - /* - * - Position constraining - - * Constrain the position to a mix of grid, containment. - */ - - if(this.originalPosition) { //If we are not dragging yet, we won't check for options - - if(this.containment) { - if(event.pageX - this.offset.click.left < this.containment[0]) { - pageX = this.containment[0] + this.offset.click.left; - } - if(event.pageY - this.offset.click.top < this.containment[1]) { - pageY = this.containment[1] + this.offset.click.top; - } - if(event.pageX - this.offset.click.left > this.containment[2]) { - pageX = this.containment[2] + this.offset.click.left; - } - if(event.pageY - this.offset.click.top > this.containment[3]) { - pageY = this.containment[3] + this.offset.click.top; - } - } - - if(o.grid) { - top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1]; - pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; - - left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; - pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; - } - - } - - return { - top: ( - pageY - // The absolute mouse position - this.offset.click.top - // Click offset (relative to the element) - this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent - this.offset.parent.top + // The offsetParent's offset without borders (offset + border) - ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) - ), - left: ( - pageX - // The absolute mouse position - this.offset.click.left - // Click offset (relative to the element) - this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent - this.offset.parent.left + // The offsetParent's offset without borders (offset + border) - ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) - ) - }; - - }, - - _rearrange: function(event, i, a, hardRefresh) { - - a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling)); - - //Various things done here to improve the performance: - // 1. we create a setTimeout, that calls refreshPositions - // 2. on the instance, we have a counter variable, that get's higher after every append - // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same - // 4. this lets only the last addition to the timeout stack through - this.counter = this.counter ? ++this.counter : 1; - var counter = this.counter; - - this._delay(function() { - if(counter === this.counter) { - this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove - } - }); - - }, - - _clear: function(event, noPropagation) { - - this.reverting = false; - // We delay all events that have to be triggered to after the point where the placeholder has been removed and - // everything else normalized again - var i, - delayedTriggers = []; - - // We first have to update the dom position of the actual currentItem - // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088) - if(!this._noFinalSort && this.currentItem.parent().length) { - this.placeholder.before(this.currentItem); - } - this._noFinalSort = null; - - if(this.helper[0] === this.currentItem[0]) { - for(i in this._storedCSS) { - if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") { - this._storedCSS[i] = ""; - } - } - this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); - } else { - this.currentItem.show(); - } - - if(this.fromOutside && !noPropagation) { - delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); }); - } - if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) { - delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed - } - - // Check if the items Container has Changed and trigger appropriate - // events. - if (this !== this.currentContainer) { - if(!noPropagation) { - delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); }); - delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.currentContainer)); - delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.currentContainer)); - } - } - - - //Post events to containers - for (i = this.containers.length - 1; i >= 0; i--){ - if(!noPropagation) { - delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); }; }).call(this, this.containers[i])); - } - if(this.containers[i].containerCache.over) { - delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); }; }).call(this, this.containers[i])); - this.containers[i].containerCache.over = 0; - } - } - - //Do what was originally in plugins - if ( this.storedCursor ) { - this.document.find( "body" ).css( "cursor", this.storedCursor ); - this.storedStylesheet.remove(); - } - if(this._storedOpacity) { - this.helper.css("opacity", this._storedOpacity); - } - if(this._storedZIndex) { - this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex); - } - - this.dragging = false; - if(this.cancelHelperRemoval) { - if(!noPropagation) { - this._trigger("beforeStop", event, this._uiHash()); - for (i=0; i < delayedTriggers.length; i++) { - delayedTriggers[i].call(this, event); - } //Trigger all delayed events - this._trigger("stop", event, this._uiHash()); - } - - this.fromOutside = false; - return false; - } - - if(!noPropagation) { - this._trigger("beforeStop", event, this._uiHash()); - } - - //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! - this.placeholder[0].parentNode.removeChild(this.placeholder[0]); - - if(this.helper[0] !== this.currentItem[0]) { - this.helper.remove(); - } - this.helper = null; - - if(!noPropagation) { - for (i=0; i < delayedTriggers.length; i++) { - delayedTriggers[i].call(this, event); - } //Trigger all delayed events - this._trigger("stop", event, this._uiHash()); - } - - this.fromOutside = false; - return true; - - }, - - _trigger: function() { - if ($.Widget.prototype._trigger.apply(this, arguments) === false) { - this.cancel(); - } - }, - - _uiHash: function(_inst) { - var inst = _inst || this; - return { - helper: inst.helper, - placeholder: inst.placeholder || $([]), - position: inst.position, - originalPosition: inst.originalPosition, - offset: inst.positionAbs, - item: inst.currentItem, - sender: _inst ? _inst.element : null - }; - } - -}); - -})(jQuery); diff --git a/examples/unfinished/movers/movers.html b/examples/unfinished/movers/movers.html deleted file mode 100644 index 08efb197ec..0000000000 --- a/examples/unfinished/movers/movers.html +++ /dev/null @@ -1,16 +0,0 @@ - - movers - - - - {{> main}} - - - diff --git a/examples/unfinished/movers/movers.js b/examples/unfinished/movers/movers.js deleted file mode 100644 index 8fe890660e..0000000000 --- a/examples/unfinished/movers/movers.js +++ /dev/null @@ -1,92 +0,0 @@ -if (Meteor.isClient) { - var moveCount = 0; - var MOVE_INTERVAL = 3000; - var MOVE_DURATION = 2000; - - doMove = function () { - moveCount++; - if (moveCount % 2 === 1) { - animateToBefore($('.green'), $('.yellow')); - animateToBefore($('.red'), null); - animateToBefore($('.blue'), null); - } else { - animateToBefore($('.red'), null); - animateToBefore($('.green'), null); - animateToBefore($('.blue'), null); - animateToBefore($('.yellow'), null); - } - }; - - Meteor.startup(function () { - doMove(); - window.setInterval(doMove, MOVE_INTERVAL); - }); - - - animateToBefore = function ($n, $newNext) { - // we don't use jQuery's `.css()` for these because we want the - // element's own style, not the computed style - var oldTop = $n[0].style.top; - var oldPosition = $n[0].style.position; - var oldZIndex = $n[0].style.zIndex; - var oldMarginBottom = $n[0].style.marginBottom; - - var outerHeight = $n.outerHeight(); // not margin - var marginBottom = parseInt($n.css('margin-bottom')); - - // TODO: test interesting elements like table rows, etc. - var placeholder = $(document.createElement($n[0].nodeName)); - var placeholderHeight = outerHeight + marginBottom; - placeholder.css('height', placeholderHeight); - // insert placeholder - $n.before(placeholder); - - // move node - if ($newNext) - $newNext.before($n); - else - $n.parent().append($n); - - // XXX would tracking "left" as well as "top" magically get us - // horizontal re-ordering? - $n.css({marginBottom: -outerHeight, - position: 'relative', - zIndex: 2, - top: 0}); - var vOffset = placeholder.offset().top - $n.offset().top; - $n.css('top', vOffset); - - $({t:0}).animate({t:1}, { - duration: MOVE_DURATION, - step: function (t, fx) { - var curPlaceholderHeight = Math.round(placeholderHeight * (1-t)); - var curMarginBottom = marginBottom - curPlaceholderHeight; - var curTop = (-curPlaceholderHeight + - Math.round((1-t) * (vOffset + placeholderHeight))); - $n.css({marginBottom: curMarginBottom, - top: curTop}); - placeholder.css('height', curPlaceholderHeight); - }, - progress: function (a, t) { - // if (t >= 0.5) { - // console.log(a); - // a.stop(); - // } - }, - complete: function () { - placeholder.remove(); - $n[0].style.top = oldTop; - $n[0].style.position = oldPosition; - $n[0].style.zIndex = oldZIndex; - $n[0].style.marginBottom = oldMarginBottom; - } - }); - }; - -} - -if (Meteor.isServer) { - Meteor.startup(function () { - // code to run on server at startup - }); -} diff --git a/examples/unfinished/movers/movers.less b/examples/unfinished/movers/movers.less deleted file mode 100644 index 0b08028c37..0000000000 --- a/examples/unfinished/movers/movers.less +++ /dev/null @@ -1,12 +0,0 @@ -.item { - border: 1px solid black; - padding: 10px; - font-size: 18px; - margin-bottom: 10px; - font-weight: bold; - position: relative; -} -.red { background: #fcc; } -.blue { background: #ccf; } -.green { background: #cfc; } -.yellow { background: #ffc; } diff --git a/examples/unfinished/parse-inspector/.meteor/.gitignore b/examples/unfinished/parse-inspector/.meteor/.gitignore deleted file mode 100644 index 4083037423..0000000000 --- a/examples/unfinished/parse-inspector/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/examples/unfinished/parse-inspector/.meteor/packages b/examples/unfinished/parse-inspector/.meteor/packages deleted file mode 100644 index 1d7becdbfe..0000000000 --- a/examples/unfinished/parse-inspector/.meteor/packages +++ /dev/null @@ -1,9 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -autopublish -preserve-inputs -jsparse -standard-app-packages diff --git a/examples/unfinished/parse-inspector/.meteor/release b/examples/unfinished/parse-inspector/.meteor/release deleted file mode 100644 index a918a2aa18..0000000000 --- a/examples/unfinished/parse-inspector/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -0.6.0 diff --git a/examples/unfinished/parse-inspector/parse-inspector.css b/examples/unfinished/parse-inspector/parse-inspector.css deleted file mode 100644 index f0c71202e7..0000000000 --- a/examples/unfinished/parse-inspector/parse-inspector.css +++ /dev/null @@ -1,191 +0,0 @@ - -* { padding: 0; margin: 0; } -html, body { height: 100%; } - -#topbar { - position: absolute; - width: 100%; - top: 0; - height: 39px; - border-bottom: 1px solid #555; - overflow: auto; - background: #cfc; - font-size: 12px; -} - -#topbarinner { - padding: 7px; - font-family: sans-serif; -} - -#main { - position: absolute; - width: 100%; - top: 40px; - bottom: 0; -} - -#inputarea { - border: 0; - border-right: 1px solid #555; - position: absolute; - height: 100%; - left: 0; - right: 50%; -} - -#inputarea textarea { - position: absolute; - width: 100%; - height: 100%; - font-family: monospace; - font-size: 100%; - border: 0; -} - -#outputoptions { - position: absolute; - left: 50%; - right: 0; - overflow: visible; - bottom: 0; - height: 29px; - border-top: 1px solid #555; - - background: #ccc; -} - -#output { - position: absolute; - left: 50%; - right: 0; - overflow: auto; - top: 0; - bottom: 30px; - - font-family: monospace; -} - -#outputoptions .output-type { - text-decoration: none; - font-family: sans-serif; - font-size: 14px; - display: inline-block; - background: #e2e2e2; - vertical-align: top; - position: relative; - top: -1px; - padding: 3px 8px; - margin-left: 6px; - border-bottom-left-radius: 5px; - border-bottom-right-radius: 5px; - border: 1px solid #777; - border-top: 1px solid #555; - cursor: pointer; -} - -#outputoptions .output-type.selected { - font-weight: bold; - background: #fff; - border-top: 1px solid #fff; -} - -#inputarea textarea, #output { - line-height: 130%; -} - -.lex { border: 1px solid #333; cursor: pointer; } - -.lex_keyword { background: #0f0; } -.lex_identifier { background: #ff0; } -.lex_punctuation { background: #0ff; } -.lex_error { background: #f00; } -.lex_whitespace, .lex_newline, .lex_eof { background: #fcc; } -.lex_comment { background: #ccc; } - -.lex_regex { background: #f0f; } -.lex_null { background: #dac; } -.lex_boolean { background: #faf; } -.lex_number { background: #c3f; } -.lex_string { background: #fc3; } - -.parseerror { - background: #f99; - border: 1px solid blue; - cursor: pointer; -} -.parseerrormessage { color: #c00; } - -.box { - display: inline-block; - margin: 5px; - margin-top: 0; - background: #fff; -} - -.box.statement { - display: block; -} - -#output > .box { - margin-top: 5px; -} - -.box.named { - border: 1px solid #888; - border-radius: 5px; - cursor: pointer; - overflow: hidden; - /* position:relative breaks overflow:hidden effect of rounded corners? */ - position: static; -} - -.box.head { - font-family: sans-serif; - font-size: 70%; - font-weight: bold; - display: block; - margin-left: 0; - margin-right: 0; - background: #ccc; - color: #000; - padding-left: 5px; - padding-right: 5px; - border-bottom: 1px solid #888; -} - -.box.head:last-child { - margin: 0; - border-bottom: 0; -} - -.box.token { - background: #ddd; - /*border: 1px solid #999;*/ - border: 1px solid #00f; - cursor: pointer; - font-family: monospace; - font-weight: bold; - font-size: 120%; - padding: 1px; -} - -.box.named[mousehover] { - background: #cdf; - border: 1px solid #448; -} - -.box.token[mousehover] { - background: #ace; - border: 1px solid #448; -} - -.box.named[mousehover] > .box.head { - background: #58b; - border-bottom: 1px solid #448; -} - -.box.named[mousehover] > .box.head:last-child { - border-bottom: 0; -} - diff --git a/examples/unfinished/parse-inspector/parse-inspector.html b/examples/unfinished/parse-inspector/parse-inspector.html deleted file mode 100644 index ab3d3b36f6..0000000000 --- a/examples/unfinished/parse-inspector/parse-inspector.html +++ /dev/null @@ -1,34 +0,0 @@ - - jsparser - - - - {{> page}} - - - diff --git a/examples/unfinished/parse-inspector/parse-inspector.js b/examples/unfinished/parse-inspector/parse-inspector.js deleted file mode 100644 index d33a108de1..0000000000 --- a/examples/unfinished/parse-inspector/parse-inspector.js +++ /dev/null @@ -1,181 +0,0 @@ - - -if (Meteor.isClient) { - Meteor.startup(function () { - if (! Session.get("input")) - Session.set("input", "var x = 3"); - if (! Session.get("output-type")) - Session.set("output-type", "jsparse"); - }); - - Template.page.input = function () { - return Session.get("input") || ''; - }; - - Template.page.output = function () { - var input = Session.get("input") || ""; - - var outputType = Session.get("output-type"); - - if (outputType === "jslex") { - // LEXER - - var lexer = new JSLexer(input); - var html = ""; - var L; - do { - L = lexer.next(); - var content; - if (L.type() === "NEWLINE") { - content = ' 
'; - } else if (L.type() === "EOF") { - content = Handlebars._escape(""); - } else { - content = Handlebars._escape(L.text() || ' '); - content = content.replace(/(?!.)\s/g, '
'); // for multiline comments - content = content.replace(/\s/g, ' '); - } - html += Spark.setDataContext( - L, - '' + - content + ''); - } while (! L.isError() && ! L.isEOF()); - return new Handlebars.SafeString(html); - - } else if (outputType === "jsparse") { - - // PARSER - var html; - var tree = null; - var parser = new JSParser(input, {includeComments: true}); - try { - tree = parser.getSyntaxTree(); - } catch (parseError) { - var errorLexeme = parser.lexer.lastLexeme; - - html = Handlebars._escape( - input.substring(0, errorLexeme.startPos())); - html += Spark.setDataContext( - errorLexeme, - '' + - Handlebars._escape(errorLexeme.text() || '') + - ''); - html = html.replace(/(?!.)\s/g, '
'); - html += '
' + - Handlebars._escape(parseError.toString()) + '
'; - } - if (tree) { - var curPos = 0; - var unclosedInfos = []; - var toHtml = function (obj) { - if (obj instanceof ParseNode) { - var head = obj.name || ''; - var children = obj.children; - var info = { startPos: curPos }; - var isStatement = (head.indexOf('Stmnt') >= 0 || - head === "comment" || - head === "functionDecl"); - var html = Spark.setDataContext( - info, - '
' + Handlebars._escape(head) + '
' + - _.map(children, toHtml).join('') + '
'); - unclosedInfos.push(info); - return html; - } else if (obj.text) { - // token - _.each(unclosedInfos, function (info) { - info.endPos = curPos; - }); - curPos = obj.endPos(); - unclosedInfos.length = 0; - var text = obj.text(); - // insert zero-width spaces to allow wrapping - text = text.replace(/.{20}/g, "$&\u200b"); - text = Handlebars._escape(text); - text = text.replace(/\u200b/g, '​'); - text = text.replace(/\n/g, '
'); - return Spark.setDataContext( - obj, - '
' + text + '
'); - } else { - // other? - return '
' + - Handlebars._escape(JSON.stringify(obj)) + '
'; - } - }; - html = toHtml(tree); - curPos = parser.lexer.pos; - _.each(unclosedInfos, function (info) { - info.endPos = curPos; - }); - } - - return new Handlebars.SafeString(html); - } - else return ''; // unknown output tab? - }; - - Template.page.events({ - 'keyup #inputarea textarea': function (event) { - var input = event.currentTarget.value; - Session.set("input", input); - }, - 'mouseover .box.named, mouseover .box.token': function (event) { - event.currentTarget.setAttribute('mousehover', 'mousehover'); - event.stopImmediatePropagation(); - }, - 'mouseout .box.named, mouseout .box.token': function (event) { - event.currentTarget.removeAttribute('mousehover'); - event.stopImmediatePropagation(); - }, - 'click .box.token': function (event) { - selectInputText(this.startPos(), this.endPos()); - return false; - }, - 'click .box.named': function (event) { - selectInputText(this.startPos, this.endPos); - return false; - }, - 'click .parseerror': function (event) { - selectInputText(this.startPos(), this.endPos()); - return false; - }, - 'click .output-type': function (event) { - Session.set("output-type", this.value); - }, - 'click .lex': function (event) { - selectInputText(this.startPos(), this.endPos()); - return false; - } - }); - - Template.page.outputTypes = [ - {name: "JS Lex", value: "jslex"}, - {name: "JS Parse", value: "jsparse"} - ]; - - Template.page.is_outputtype_selected = function (which) { - return Session.equals("output-type", which) ? "selected" : ""; - }; - - var selectTextInArea = function (e, start, end){ - e.focus(); - if (e.setSelectionRange) { - e.setSelectionRange(start, end); - } else if (e.createTextRange) { - var r = e.createTextRange(); - r.collapse(true); - r.moveEnd('character', end); - r.moveStart('character', start); - r.select(); - } - }; - - var selectInputText = function (start, end) { - var textarea = DomUtils.find(document, '#inputarea textarea'); - selectTextInArea(textarea, start, end); - }; - -} diff --git a/examples/unfinished/python-ddp-client/README b/examples/unfinished/python-ddp-client/README deleted file mode 100644 index 44071bac3b..0000000000 --- a/examples/unfinished/python-ddp-client/README +++ /dev/null @@ -1 +0,0 @@ -sudo easy_install ws4py diff --git a/examples/unfinished/python-ddp-client/ddp-client.py b/examples/unfinished/python-ddp-client/ddp-client.py deleted file mode 100755 index 7300b3ae9b..0000000000 --- a/examples/unfinished/python-ddp-client/ddp-client.py +++ /dev/null @@ -1,306 +0,0 @@ -#!/usr/bin/env python2.7 - -import sys -import json -import time -import argparse -import thread -import threading -import traceback - -from ws4py.client.threadedclient import WebSocketClient -from cmd import Cmd - - -DDP_VERSIONS = ["pre1"] - -def log(msg): - """A shortcut to write to the standard error file descriptor""" - sys.stderr.write('{}\n'.format(msg)) - - -def parse_command(params): - """Parses a command with a first string param and a second - json-encoded param""" - name, args = (params + ' ').split(' ', 1) - return name, args and json.loads(args) or [] - - -class DDPClient(WebSocketClient): - """simple wrapper around Websockets for DDP connections""" - def __init__(self, url, print_raw): - WebSocketClient.__init__(self, url) - self.print_raw = print_raw - - # We keep track of methods and subs that have been sent from the - # client so that we only return to the prompt or quit the app - # once we get back all the results from the server. - # - # `id` - # - # The operation id, informed by the client and returned by the - # server to make sure both are talking about the same thing. - # - # `result_acked` - # - # Flag to make sure we were answered. - # - # `data_acked` - # - # Flag to make sure we received the correct data from the - # message we were waiting for. - self.pending_condition = threading.Condition() - self.pending = {} - - - def send(self, msg_dict): - """Send a message through the websocket client and wait for the - answer if the message being sent contains an id attribute. - - Also prints to the standard error fd. - - (NOTE: DDP does not require waiting for an answer but this is - a simple proof-of-concept client)""" - message = json.dumps(msg_dict) - if self.print_raw: - log('[RAW] >> {}'.format(message)) - super(DDPClient, self).send(message) - - # We don't need to wait for certain messages, just for the ones - # with ids. - if 'id' in msg_dict: - self.block_until_return(msg_dict['msg'], msg_dict['id']) - - def block_until_return(self, msg_type, msg_id): - """Wait until the msg_id that was sent to the server is answered""" - with self.pending_condition: - self.pending = {'id': msg_id} - - while self.pending.get('id') is not None: - if msg_type == 'method': - # Methods must validate both data and result flag - we_are_good = all(( - self.pending.get('result_acked'), - self.pending.get('data_acked'))) - else: - # Subs just need to validate data flag - we_are_good = self.pending.get('data_acked') - - if we_are_good: - return - self.pending_condition.wait() - - def opened(self): - """Set the connecte flag to true and send the connect message to - the server.""" - self.send({"msg": "connect", "version": DDP_VERSIONS[0], - "support": DDP_VERSIONS}) - - def received_message(self, data): - """Parse an incoming message and print it. Also update - self.pending appropriately""" - if self.print_raw: - log('[RAW] << {}'.format(data)) - - msg = json.loads(str(data)) - - changed_pending = False - - with self.pending_condition: - if msg.get('msg') == 'error': - log("* ERROR {}".format(msg['reason'])) - # Reset all pending state - self.pending = {} - changed_pending = True - - elif msg.get('msg') == 'connected': - log("* CONNECTED") - - elif msg.get('msg') == 'failed': - log("* FAILED; suggested version {}".format(msg['version'])) - - elif msg.get('msg') == 'result': - if msg['id'] == self.pending.get('id'): - if msg.get('result'): - log("* METHOD RESULT {}".format(msg['result'])) - elif msg.get('error'): - log("* ERROR {}".format(msg['error']['reason'])) - else: - log("* METHOD FINISHED") - self.pending.update({'result_acked': True}) - changed_pending = True - - elif msg.get('msg') == 'added': - log("* ADDED {} {}".format( - msg['collection'], msg['id'])) - if 'fields' in msg: - for key, value in msg['fields'].items(): - log(" - FIELD {} {}".format(key, value)) - elif msg.get('msg') == 'changed': - log("* CHANGED {} {}".format( - msg['collection'], msg['id'])) - if 'fields' in msg: - for key, value in msg['fields'].items(): - log(" - FIELD {} {}".format(key, value)) - if 'cleared' in msg: - for key in msg['cleared']: - log(" - CLEARED {}".format(key)); - elif msg.get('msg') == 'removed': - log("* REMOVED {} {}".format( - msg['collection'], ", ".join(msg['ids']))) - elif msg.get('msg') == 'ready': - assert 'subs' in msg - if self.pending.get('id') in msg['subs']: - log("* READY") - self.pending.update({'data_acked': True}) - changed_pending = True - elif msg.get('msg') == 'updated': - if self.pending.get('id') in msg['methods']: - log("* UPDATED") - self.pending.update({'data_acked': True}) - changed_pending = True - elif msg.get('msg') == 'nosub': - log("* NOSUB") - self.pending.update({'data_acked': True}) - changed_pending = True - - if changed_pending: - self.pending_condition.notify() - - def closed(self, code, reason=None): - """Called when the connection is closed""" - log('* CONNECTION CLOSED {} {}'.format(code, reason)) - - # Overrides WebSocket to run to ensure that if an unhandled exception is - # thrown in the thread, we print the exception and *then* kill the main - # thread. - def run(self): - try: - super(DDPClient, self).run() - except: - traceback.print_exc() - finally: - with self.pending_condition: - self.pending_condition.notify() - thread.interrupt_main() - - -class App(Cmd): - """Main input loop.""" - - def __init__(self, ddp_endpoint, print_raw): - Cmd.__init__(self) - - # Should we print the raw websocket messages in addition to - # parsing them? - self.print_raw = print_raw - - # This is the websocket client that will actually talk with - # meteor - self.ddpclient = DDPClient( - 'ws://' + ddp_endpoint + '/websocket', - self.print_raw) - self.ddpclient.connect() - - # Showing a fancy prompt string if we're interactive - if sys.stdin.isatty(): - self.prompt = ddp_endpoint + '> ' - else: - self.prompt = '' - - # Initializing the message id counter that will be incremented - # by the `next_id() method - self.unique_id = 0 - - def do_call(self, params): - """The `call` command""" - try: - method_name, params = parse_command(params) - except ValueError: - log('Error parsing parameter list - try `help call`') - return - self.ddpclient.send({ - "msg": "method", - "method": method_name, - "params": params, - "id": self.next_id(), - }) - - def do_sub(self, params): - """The `sub` command""" - try: - sub_name, params = parse_command(params) - except ValueError: - log('Error parsing parameter list - try `help sub`') - return - self.ddpclient.send({ - "msg": "sub", - "name": sub_name, - "params": params, - "id": self.next_id(), - }) - - def do_EOF(self, line): - """The `EOF` "command" - - It's here to support `cat file | python ddpclient.py` - """ - return True - - def do_help(self, line): - """The `help` command""" - - msgs = { - 'call': ( - 'call \n' - ' Calls a remote method\n' - ' Example: call vote ["foo.meteor.com"]'), - 'sub': ( - 'sub []\n' - ' Subscribes to a remote dataset\n' - ' Examples: `sub allApps` or `sub myApp ' - '["foo.meteor.com"]`'), - } - - line = line.strip() - if line and line in msgs: - return log('\n' + msgs[line]) - - for msg in msgs.values(): - log('\n' + msg) - - def emptyline(self): - """Disable the default Cmd empty line behavior""" - pass - - def next_id(self): - """Calculates the next id for messages that will be sent to the - server""" - self.unique_id = self.unique_id + 1 - return str(self.unique_id) - - -def main(): - """Parse the command line arguments and create a new App instance""" - parser = argparse.ArgumentParser( - description='A command-line tool for communicating with a DDP server.') - parser.add_argument( - 'ddp_endpoint', metavar='ddp_endpoint', - help='DDP websocket endpoint to connect ' + - 'to, e.g. madewith.meteor.com') - parser.add_argument( - '--print-raw', dest='print_raw', action="store_true", - help='print raw websocket data in addition to parsed results') - args = parser.parse_args() - - app = App(args.ddp_endpoint, args.print_raw) - try: - app.cmdloop() - except KeyboardInterrupt: - # On Ctrl-C or thread.interrupt_main(), just exit without printing a - # traceback. - pass - - -if __name__ == '__main__': - main() diff --git a/examples/unfinished/python-ddp-client/test_input b/examples/unfinished/python-ddp-client/test_input deleted file mode 100644 index 07da1e3b20..0000000000 --- a/examples/unfinished/python-ddp-client/test_input +++ /dev/null @@ -1,22 +0,0 @@ -sub -sub undefinedSub -sub undefinedSub someArg -sub undefinedSub {} -sub allApps -sub myApp "foo.bar" -sub myApp ["foo.meteor.com"] - -call -call undefinedMethod -call undefinedMethod yzyz -call undefinedMethod {} -call vote -call vote [] -call vote ["foo.meteor.com"] -call vote ["madewith.meteor.com"] -call vote {} - -help -help sub -help call - diff --git a/examples/unfinished/reorderable-list/.meteor/.gitignore b/examples/unfinished/reorderable-list/.meteor/.gitignore deleted file mode 100644 index 4083037423..0000000000 --- a/examples/unfinished/reorderable-list/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/examples/unfinished/reorderable-list/.meteor/packages b/examples/unfinished/reorderable-list/.meteor/packages deleted file mode 100644 index e442b00306..0000000000 --- a/examples/unfinished/reorderable-list/.meteor/packages +++ /dev/null @@ -1,8 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -standard-app-packages -autopublish -insecure diff --git a/examples/unfinished/reorderable-list/.meteor/release b/examples/unfinished/reorderable-list/.meteor/release deleted file mode 100644 index 621e94f0ec..0000000000 --- a/examples/unfinished/reorderable-list/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -none diff --git a/examples/unfinished/reorderable-list/client/jquery-ui-sortable.js b/examples/unfinished/reorderable-list/client/jquery-ui-sortable.js deleted file mode 100755 index 0d85cfa365..0000000000 --- a/examples/unfinished/reorderable-list/client/jquery-ui-sortable.js +++ /dev/null @@ -1,2252 +0,0 @@ -/*! jQuery UI - v1.10.3 - 2013-07-30 -* http://jqueryui.com -* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.sortable.js -* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */ - -(function( $, undefined ) { - -var uuid = 0, - runiqueId = /^ui-id-\d+$/; - -// $.ui might exist from components with no dependencies, e.g., $.ui.position -$.ui = $.ui || {}; - -$.extend( $.ui, { - version: "1.10.3", - - keyCode: { - BACKSPACE: 8, - COMMA: 188, - DELETE: 46, - DOWN: 40, - END: 35, - ENTER: 13, - ESCAPE: 27, - HOME: 36, - LEFT: 37, - NUMPAD_ADD: 107, - NUMPAD_DECIMAL: 110, - NUMPAD_DIVIDE: 111, - NUMPAD_ENTER: 108, - NUMPAD_MULTIPLY: 106, - NUMPAD_SUBTRACT: 109, - PAGE_DOWN: 34, - PAGE_UP: 33, - PERIOD: 190, - RIGHT: 39, - SPACE: 32, - TAB: 9, - UP: 38 - } -}); - -// plugins -$.fn.extend({ - focus: (function( orig ) { - return function( delay, fn ) { - return typeof delay === "number" ? - this.each(function() { - var elem = this; - setTimeout(function() { - $( elem ).focus(); - if ( fn ) { - fn.call( elem ); - } - }, delay ); - }) : - orig.apply( this, arguments ); - }; - })( $.fn.focus ), - - scrollParent: function() { - var scrollParent; - if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) { - scrollParent = this.parents().filter(function() { - return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x")); - }).eq(0); - } else { - scrollParent = this.parents().filter(function() { - return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x")); - }).eq(0); - } - - return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent; - }, - - zIndex: function( zIndex ) { - if ( zIndex !== undefined ) { - return this.css( "zIndex", zIndex ); - } - - if ( this.length ) { - var elem = $( this[ 0 ] ), position, value; - while ( elem.length && elem[ 0 ] !== document ) { - // Ignore z-index if position is set to a value where z-index is ignored by the browser - // This makes behavior of this function consistent across browsers - // WebKit always returns auto if the element is positioned - position = elem.css( "position" ); - if ( position === "absolute" || position === "relative" || position === "fixed" ) { - // IE returns 0 when zIndex is not specified - // other browsers return a string - // we ignore the case of nested elements with an explicit value of 0 - //
- value = parseInt( elem.css( "zIndex" ), 10 ); - if ( !isNaN( value ) && value !== 0 ) { - return value; - } - } - elem = elem.parent(); - } - } - - return 0; - }, - - uniqueId: function() { - return this.each(function() { - if ( !this.id ) { - this.id = "ui-id-" + (++uuid); - } - }); - }, - - removeUniqueId: function() { - return this.each(function() { - if ( runiqueId.test( this.id ) ) { - $( this ).removeAttr( "id" ); - } - }); - } -}); - -// selectors -function focusable( element, isTabIndexNotNaN ) { - var map, mapName, img, - nodeName = element.nodeName.toLowerCase(); - if ( "area" === nodeName ) { - map = element.parentNode; - mapName = map.name; - if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { - return false; - } - img = $( "img[usemap=#" + mapName + "]" )[0]; - return !!img && visible( img ); - } - return ( /input|select|textarea|button|object/.test( nodeName ) ? - !element.disabled : - "a" === nodeName ? - element.href || isTabIndexNotNaN : - isTabIndexNotNaN) && - // the element and all of its ancestors must be visible - visible( element ); -} - -function visible( element ) { - return $.expr.filters.visible( element ) && - !$( element ).parents().addBack().filter(function() { - return $.css( this, "visibility" ) === "hidden"; - }).length; -} - -$.extend( $.expr[ ":" ], { - data: $.expr.createPseudo ? - $.expr.createPseudo(function( dataName ) { - return function( elem ) { - return !!$.data( elem, dataName ); - }; - }) : - // support: jQuery <1.8 - function( elem, i, match ) { - return !!$.data( elem, match[ 3 ] ); - }, - - focusable: function( element ) { - return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); - }, - - tabbable: function( element ) { - var tabIndex = $.attr( element, "tabindex" ), - isTabIndexNaN = isNaN( tabIndex ); - return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); - } -}); - -// support: jQuery <1.8 -if ( !$( "
" ).outerWidth( 1 ).jquery ) { - $.each( [ "Width", "Height" ], function( i, name ) { - var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], - type = name.toLowerCase(), - orig = { - innerWidth: $.fn.innerWidth, - innerHeight: $.fn.innerHeight, - outerWidth: $.fn.outerWidth, - outerHeight: $.fn.outerHeight - }; - - function reduce( elem, size, border, margin ) { - $.each( side, function() { - size -= parseFloat( $.css( elem, "padding" + this ) ) || 0; - if ( border ) { - size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0; - } - if ( margin ) { - size -= parseFloat( $.css( elem, "margin" + this ) ) || 0; - } - }); - return size; - } - - $.fn[ "inner" + name ] = function( size ) { - if ( size === undefined ) { - return orig[ "inner" + name ].call( this ); - } - - return this.each(function() { - $( this ).css( type, reduce( this, size ) + "px" ); - }); - }; - - $.fn[ "outer" + name] = function( size, margin ) { - if ( typeof size !== "number" ) { - return orig[ "outer" + name ].call( this, size ); - } - - return this.each(function() { - $( this).css( type, reduce( this, size, true, margin ) + "px" ); - }); - }; - }); -} - -// support: jQuery <1.8 -if ( !$.fn.addBack ) { - $.fn.addBack = function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - }; -} - -// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413) -if ( $( "" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) { - $.fn.removeData = (function( removeData ) { - return function( key ) { - if ( arguments.length ) { - return removeData.call( this, $.camelCase( key ) ); - } else { - return removeData.call( this ); - } - }; - })( $.fn.removeData ); -} - - - - - -// deprecated -$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); - -$.support.selectstart = "onselectstart" in document.createElement( "div" ); -$.fn.extend({ - disableSelection: function() { - return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) + - ".ui-disableSelection", function( event ) { - event.preventDefault(); - }); - }, - - enableSelection: function() { - return this.unbind( ".ui-disableSelection" ); - } -}); - -$.extend( $.ui, { - // $.ui.plugin is deprecated. Use $.widget() extensions instead. - plugin: { - add: function( module, option, set ) { - var i, - proto = $.ui[ module ].prototype; - for ( i in set ) { - proto.plugins[ i ] = proto.plugins[ i ] || []; - proto.plugins[ i ].push( [ option, set[ i ] ] ); - } - }, - call: function( instance, name, args ) { - var i, - set = instance.plugins[ name ]; - if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) { - return; - } - - for ( i = 0; i < set.length; i++ ) { - if ( instance.options[ set[ i ][ 0 ] ] ) { - set[ i ][ 1 ].apply( instance.element, args ); - } - } - } - }, - - // only used by resizable - hasScroll: function( el, a ) { - - //If overflow is hidden, the element might have extra content, but the user wants to hide it - if ( $( el ).css( "overflow" ) === "hidden") { - return false; - } - - var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", - has = false; - - if ( el[ scroll ] > 0 ) { - return true; - } - - // TODO: determine which cases actually cause this to happen - // if the element doesn't have the scroll set, see if it's possible to - // set the scroll - el[ scroll ] = 1; - has = ( el[ scroll ] > 0 ); - el[ scroll ] = 0; - return has; - } -}); - -})( jQuery ); -(function( $, undefined ) { - -var uuid = 0, - slice = Array.prototype.slice, - _cleanData = $.cleanData; -$.cleanData = function( elems ) { - for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { - try { - $( elem ).triggerHandler( "remove" ); - // http://bugs.jquery.com/ticket/8235 - } catch( e ) {} - } - _cleanData( elems ); -}; - -$.widget = function( name, base, prototype ) { - var fullName, existingConstructor, constructor, basePrototype, - // proxiedPrototype allows the provided prototype to remain unmodified - // so that it can be used as a mixin for multiple widgets (#8876) - proxiedPrototype = {}, - namespace = name.split( "." )[ 0 ]; - - name = name.split( "." )[ 1 ]; - fullName = namespace + "-" + name; - - if ( !prototype ) { - prototype = base; - base = $.Widget; - } - - // create selector for plugin - $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { - return !!$.data( elem, fullName ); - }; - - $[ namespace ] = $[ namespace ] || {}; - existingConstructor = $[ namespace ][ name ]; - constructor = $[ namespace ][ name ] = function( options, element ) { - // allow instantiation without "new" keyword - if ( !this._createWidget ) { - return new constructor( options, element ); - } - - // allow instantiation without initializing for simple inheritance - // must use "new" keyword (the code above always passes args) - if ( arguments.length ) { - this._createWidget( options, element ); - } - }; - // extend with the existing constructor to carry over any static properties - $.extend( constructor, existingConstructor, { - version: prototype.version, - // copy the object used to create the prototype in case we need to - // redefine the widget later - _proto: $.extend( {}, prototype ), - // track widgets that inherit from this widget in case this widget is - // redefined after a widget inherits from it - _childConstructors: [] - }); - - basePrototype = new base(); - // we need to make the options hash a property directly on the new instance - // otherwise we'll modify the options hash on the prototype that we're - // inheriting from - basePrototype.options = $.widget.extend( {}, basePrototype.options ); - $.each( prototype, function( prop, value ) { - if ( !$.isFunction( value ) ) { - proxiedPrototype[ prop ] = value; - return; - } - proxiedPrototype[ prop ] = (function() { - var _super = function() { - return base.prototype[ prop ].apply( this, arguments ); - }, - _superApply = function( args ) { - return base.prototype[ prop ].apply( this, args ); - }; - return function() { - var __super = this._super, - __superApply = this._superApply, - returnValue; - - this._super = _super; - this._superApply = _superApply; - - returnValue = value.apply( this, arguments ); - - this._super = __super; - this._superApply = __superApply; - - return returnValue; - }; - })(); - }); - constructor.prototype = $.widget.extend( basePrototype, { - // TODO: remove support for widgetEventPrefix - // always use the name + a colon as the prefix, e.g., draggable:start - // don't prefix for widgets that aren't DOM-based - widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name - }, proxiedPrototype, { - constructor: constructor, - namespace: namespace, - widgetName: name, - widgetFullName: fullName - }); - - // If this widget is being redefined then we need to find all widgets that - // are inheriting from it and redefine all of them so that they inherit from - // the new version of this widget. We're essentially trying to replace one - // level in the prototype chain. - if ( existingConstructor ) { - $.each( existingConstructor._childConstructors, function( i, child ) { - var childPrototype = child.prototype; - - // redefine the child widget using the same prototype that was - // originally used, but inherit from the new version of the base - $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto ); - }); - // remove the list of existing child constructors from the old constructor - // so the old child constructors can be garbage collected - delete existingConstructor._childConstructors; - } else { - base._childConstructors.push( constructor ); - } - - $.widget.bridge( name, constructor ); -}; - -$.widget.extend = function( target ) { - var input = slice.call( arguments, 1 ), - inputIndex = 0, - inputLength = input.length, - key, - value; - for ( ; inputIndex < inputLength; inputIndex++ ) { - for ( key in input[ inputIndex ] ) { - value = input[ inputIndex ][ key ]; - if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { - // Clone objects - if ( $.isPlainObject( value ) ) { - target[ key ] = $.isPlainObject( target[ key ] ) ? - $.widget.extend( {}, target[ key ], value ) : - // Don't extend strings, arrays, etc. with objects - $.widget.extend( {}, value ); - // Copy everything else by reference - } else { - target[ key ] = value; - } - } - } - } - return target; -}; - -$.widget.bridge = function( name, object ) { - var fullName = object.prototype.widgetFullName || name; - $.fn[ name ] = function( options ) { - var isMethodCall = typeof options === "string", - args = slice.call( arguments, 1 ), - returnValue = this; - - // allow multiple hashes to be passed on init - options = !isMethodCall && args.length ? - $.widget.extend.apply( null, [ options ].concat(args) ) : - options; - - if ( isMethodCall ) { - this.each(function() { - var methodValue, - instance = $.data( this, fullName ); - if ( !instance ) { - return $.error( "cannot call methods on " + name + " prior to initialization; " + - "attempted to call method '" + options + "'" ); - } - if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) { - return $.error( "no such method '" + options + "' for " + name + " widget instance" ); - } - methodValue = instance[ options ].apply( instance, args ); - if ( methodValue !== instance && methodValue !== undefined ) { - returnValue = methodValue && methodValue.jquery ? - returnValue.pushStack( methodValue.get() ) : - methodValue; - return false; - } - }); - } else { - this.each(function() { - var instance = $.data( this, fullName ); - if ( instance ) { - instance.option( options || {} )._init(); - } else { - $.data( this, fullName, new object( options, this ) ); - } - }); - } - - return returnValue; - }; -}; - -$.Widget = function( /* options, element */ ) {}; -$.Widget._childConstructors = []; - -$.Widget.prototype = { - widgetName: "widget", - widgetEventPrefix: "", - defaultElement: "
", - options: { - disabled: false, - - // callbacks - create: null - }, - _createWidget: function( options, element ) { - element = $( element || this.defaultElement || this )[ 0 ]; - this.element = $( element ); - this.uuid = uuid++; - this.eventNamespace = "." + this.widgetName + this.uuid; - this.options = $.widget.extend( {}, - this.options, - this._getCreateOptions(), - options ); - - this.bindings = $(); - this.hoverable = $(); - this.focusable = $(); - - if ( element !== this ) { - $.data( element, this.widgetFullName, this ); - this._on( true, this.element, { - remove: function( event ) { - if ( event.target === element ) { - this.destroy(); - } - } - }); - this.document = $( element.style ? - // element within the document - element.ownerDocument : - // element is window or document - element.document || element ); - this.window = $( this.document[0].defaultView || this.document[0].parentWindow ); - } - - this._create(); - this._trigger( "create", null, this._getCreateEventData() ); - this._init(); - }, - _getCreateOptions: $.noop, - _getCreateEventData: $.noop, - _create: $.noop, - _init: $.noop, - - destroy: function() { - this._destroy(); - // we can probably remove the unbind calls in 2.0 - // all event bindings should go through this._on() - this.element - .unbind( this.eventNamespace ) - // 1.9 BC for #7810 - // TODO remove dual storage - .removeData( this.widgetName ) - .removeData( this.widgetFullName ) - // support: jquery <1.6.3 - // http://bugs.jquery.com/ticket/9413 - .removeData( $.camelCase( this.widgetFullName ) ); - this.widget() - .unbind( this.eventNamespace ) - .removeAttr( "aria-disabled" ) - .removeClass( - this.widgetFullName + "-disabled " + - "ui-state-disabled" ); - - // clean up events and states - this.bindings.unbind( this.eventNamespace ); - this.hoverable.removeClass( "ui-state-hover" ); - this.focusable.removeClass( "ui-state-focus" ); - }, - _destroy: $.noop, - - widget: function() { - return this.element; - }, - - option: function( key, value ) { - var options = key, - parts, - curOption, - i; - - if ( arguments.length === 0 ) { - // don't return a reference to the internal hash - return $.widget.extend( {}, this.options ); - } - - if ( typeof key === "string" ) { - // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } - options = {}; - parts = key.split( "." ); - key = parts.shift(); - if ( parts.length ) { - curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); - for ( i = 0; i < parts.length - 1; i++ ) { - curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; - curOption = curOption[ parts[ i ] ]; - } - key = parts.pop(); - if ( value === undefined ) { - return curOption[ key ] === undefined ? null : curOption[ key ]; - } - curOption[ key ] = value; - } else { - if ( value === undefined ) { - return this.options[ key ] === undefined ? null : this.options[ key ]; - } - options[ key ] = value; - } - } - - this._setOptions( options ); - - return this; - }, - _setOptions: function( options ) { - var key; - - for ( key in options ) { - this._setOption( key, options[ key ] ); - } - - return this; - }, - _setOption: function( key, value ) { - this.options[ key ] = value; - - if ( key === "disabled" ) { - this.widget() - .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value ) - .attr( "aria-disabled", value ); - this.hoverable.removeClass( "ui-state-hover" ); - this.focusable.removeClass( "ui-state-focus" ); - } - - return this; - }, - - enable: function() { - return this._setOption( "disabled", false ); - }, - disable: function() { - return this._setOption( "disabled", true ); - }, - - _on: function( suppressDisabledCheck, element, handlers ) { - var delegateElement, - instance = this; - - // no suppressDisabledCheck flag, shuffle arguments - if ( typeof suppressDisabledCheck !== "boolean" ) { - handlers = element; - element = suppressDisabledCheck; - suppressDisabledCheck = false; - } - - // no element argument, shuffle and use this.element - if ( !handlers ) { - handlers = element; - element = this.element; - delegateElement = this.widget(); - } else { - // accept selectors, DOM elements - element = delegateElement = $( element ); - this.bindings = this.bindings.add( element ); - } - - $.each( handlers, function( event, handler ) { - function handlerProxy() { - // allow widgets to customize the disabled handling - // - disabled as an array instead of boolean - // - disabled class as method for disabling individual parts - if ( !suppressDisabledCheck && - ( instance.options.disabled === true || - $( this ).hasClass( "ui-state-disabled" ) ) ) { - return; - } - return ( typeof handler === "string" ? instance[ handler ] : handler ) - .apply( instance, arguments ); - } - - // copy the guid so direct unbinding works - if ( typeof handler !== "string" ) { - handlerProxy.guid = handler.guid = - handler.guid || handlerProxy.guid || $.guid++; - } - - var match = event.match( /^(\w+)\s*(.*)$/ ), - eventName = match[1] + instance.eventNamespace, - selector = match[2]; - if ( selector ) { - delegateElement.delegate( selector, eventName, handlerProxy ); - } else { - element.bind( eventName, handlerProxy ); - } - }); - }, - - _off: function( element, eventName ) { - eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace; - element.unbind( eventName ).undelegate( eventName ); - }, - - _delay: function( handler, delay ) { - function handlerProxy() { - return ( typeof handler === "string" ? instance[ handler ] : handler ) - .apply( instance, arguments ); - } - var instance = this; - return setTimeout( handlerProxy, delay || 0 ); - }, - - _hoverable: function( element ) { - this.hoverable = this.hoverable.add( element ); - this._on( element, { - mouseenter: function( event ) { - $( event.currentTarget ).addClass( "ui-state-hover" ); - }, - mouseleave: function( event ) { - $( event.currentTarget ).removeClass( "ui-state-hover" ); - } - }); - }, - - _focusable: function( element ) { - this.focusable = this.focusable.add( element ); - this._on( element, { - focusin: function( event ) { - $( event.currentTarget ).addClass( "ui-state-focus" ); - }, - focusout: function( event ) { - $( event.currentTarget ).removeClass( "ui-state-focus" ); - } - }); - }, - - _trigger: function( type, event, data ) { - var prop, orig, - callback = this.options[ type ]; - - data = data || {}; - event = $.Event( event ); - event.type = ( type === this.widgetEventPrefix ? - type : - this.widgetEventPrefix + type ).toLowerCase(); - // the original event may come from any element - // so we need to reset the target on the new event - event.target = this.element[ 0 ]; - - // copy original event properties over to the new event - orig = event.originalEvent; - if ( orig ) { - for ( prop in orig ) { - if ( !( prop in event ) ) { - event[ prop ] = orig[ prop ]; - } - } - } - - this.element.trigger( event, data ); - return !( $.isFunction( callback ) && - callback.apply( this.element[0], [ event ].concat( data ) ) === false || - event.isDefaultPrevented() ); - } -}; - -$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { - $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { - if ( typeof options === "string" ) { - options = { effect: options }; - } - var hasOptions, - effectName = !options ? - method : - options === true || typeof options === "number" ? - defaultEffect : - options.effect || defaultEffect; - options = options || {}; - if ( typeof options === "number" ) { - options = { duration: options }; - } - hasOptions = !$.isEmptyObject( options ); - options.complete = callback; - if ( options.delay ) { - element.delay( options.delay ); - } - if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { - element[ method ]( options ); - } else if ( effectName !== method && element[ effectName ] ) { - element[ effectName ]( options.duration, options.easing, callback ); - } else { - element.queue(function( next ) { - $( this )[ method ](); - if ( callback ) { - callback.call( element[ 0 ] ); - } - next(); - }); - } - }; -}); - -})( jQuery ); -(function( $, undefined ) { - -var mouseHandled = false; -$( document ).mouseup( function() { - mouseHandled = false; -}); - -$.widget("ui.mouse", { - version: "1.10.3", - options: { - cancel: "input,textarea,button,select,option", - distance: 1, - delay: 0 - }, - _mouseInit: function() { - var that = this; - - this.element - .bind("mousedown."+this.widgetName, function(event) { - return that._mouseDown(event); - }) - .bind("click."+this.widgetName, function(event) { - if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) { - $.removeData(event.target, that.widgetName + ".preventClickEvent"); - event.stopImmediatePropagation(); - return false; - } - }); - - this.started = false; - }, - - // TODO: make sure destroying one instance of mouse doesn't mess with - // other instances of mouse - _mouseDestroy: function() { - this.element.unbind("."+this.widgetName); - if ( this._mouseMoveDelegate ) { - $(document) - .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate) - .unbind("mouseup."+this.widgetName, this._mouseUpDelegate); - } - }, - - _mouseDown: function(event) { - // don't let more than one widget handle mouseStart - if( mouseHandled ) { return; } - - // we may have missed mouseup (out of window) - (this._mouseStarted && this._mouseUp(event)); - - this._mouseDownEvent = event; - - var that = this, - btnIsLeft = (event.which === 1), - // event.target.nodeName works around a bug in IE 8 with - // disabled inputs (#7620) - elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false); - if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { - return true; - } - - this.mouseDelayMet = !this.options.delay; - if (!this.mouseDelayMet) { - this._mouseDelayTimer = setTimeout(function() { - that.mouseDelayMet = true; - }, this.options.delay); - } - - if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { - this._mouseStarted = (this._mouseStart(event) !== false); - if (!this._mouseStarted) { - event.preventDefault(); - return true; - } - } - - // Click event may never have fired (Gecko & Opera) - if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) { - $.removeData(event.target, this.widgetName + ".preventClickEvent"); - } - - // these delegates are required to keep context - this._mouseMoveDelegate = function(event) { - return that._mouseMove(event); - }; - this._mouseUpDelegate = function(event) { - return that._mouseUp(event); - }; - $(document) - .bind("mousemove."+this.widgetName, this._mouseMoveDelegate) - .bind("mouseup."+this.widgetName, this._mouseUpDelegate); - - event.preventDefault(); - - mouseHandled = true; - return true; - }, - - _mouseMove: function(event) { - // IE mouseup check - mouseup happened when mouse was out of window - if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) { - return this._mouseUp(event); - } - - if (this._mouseStarted) { - this._mouseDrag(event); - return event.preventDefault(); - } - - if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { - this._mouseStarted = - (this._mouseStart(this._mouseDownEvent, event) !== false); - (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); - } - - return !this._mouseStarted; - }, - - _mouseUp: function(event) { - $(document) - .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate) - .unbind("mouseup."+this.widgetName, this._mouseUpDelegate); - - if (this._mouseStarted) { - this._mouseStarted = false; - - if (event.target === this._mouseDownEvent.target) { - $.data(event.target, this.widgetName + ".preventClickEvent", true); - } - - this._mouseStop(event); - } - - return false; - }, - - _mouseDistanceMet: function(event) { - return (Math.max( - Math.abs(this._mouseDownEvent.pageX - event.pageX), - Math.abs(this._mouseDownEvent.pageY - event.pageY) - ) >= this.options.distance - ); - }, - - _mouseDelayMet: function(/* event */) { - return this.mouseDelayMet; - }, - - // These are placeholder methods, to be overriden by extending plugin - _mouseStart: function(/* event */) {}, - _mouseDrag: function(/* event */) {}, - _mouseStop: function(/* event */) {}, - _mouseCapture: function(/* event */) { return true; } -}); - -})(jQuery); -(function( $, undefined ) { - -/*jshint loopfunc: true */ - -function isOverAxis( x, reference, size ) { - return ( x > reference ) && ( x < ( reference + size ) ); -} - -function isFloating(item) { - return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display")); -} - -$.widget("ui.sortable", $.ui.mouse, { - version: "1.10.3", - widgetEventPrefix: "sort", - ready: false, - options: { - appendTo: "parent", - axis: false, - connectWith: false, - containment: false, - cursor: "auto", - cursorAt: false, - dropOnEmpty: true, - forcePlaceholderSize: false, - forceHelperSize: false, - grid: false, - handle: false, - helper: "original", - items: "> *", - opacity: false, - placeholder: false, - revert: false, - scroll: true, - scrollSensitivity: 20, - scrollSpeed: 20, - scope: "default", - tolerance: "intersect", - zIndex: 1000, - - // callbacks - activate: null, - beforeStop: null, - change: null, - deactivate: null, - out: null, - over: null, - receive: null, - remove: null, - sort: null, - start: null, - stop: null, - update: null - }, - _create: function() { - - var o = this.options; - this.containerCache = {}; - this.element.addClass("ui-sortable"); - - //Get the items - this.refresh(); - - //Let's determine if the items are being displayed horizontally - this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false; - - //Let's determine the parent's offset - this.offset = this.element.offset(); - - //Initialize mouse events for interaction - this._mouseInit(); - - //We're ready to go - this.ready = true; - - }, - - _destroy: function() { - this.element - .removeClass("ui-sortable ui-sortable-disabled"); - this._mouseDestroy(); - - for ( var i = this.items.length - 1; i >= 0; i-- ) { - this.items[i].item.removeData(this.widgetName + "-item"); - } - - return this; - }, - - _setOption: function(key, value){ - if ( key === "disabled" ) { - this.options[ key ] = value; - - this.widget().toggleClass( "ui-sortable-disabled", !!value ); - } else { - // Don't call widget base _setOption for disable as it adds ui-state-disabled class - $.Widget.prototype._setOption.apply(this, arguments); - } - }, - - _mouseCapture: function(event, overrideHandle) { - var currentItem = null, - validHandle = false, - that = this; - - if (this.reverting) { - return false; - } - - if(this.options.disabled || this.options.type === "static") { - return false; - } - - //We have to refresh the items data once first - this._refreshItems(event); - - //Find out if the clicked node (or one of its parents) is a actual item in this.items - $(event.target).parents().each(function() { - if($.data(this, that.widgetName + "-item") === that) { - currentItem = $(this); - return false; - } - }); - if($.data(event.target, that.widgetName + "-item") === that) { - currentItem = $(event.target); - } - - if(!currentItem) { - return false; - } - if(this.options.handle && !overrideHandle) { - $(this.options.handle, currentItem).find("*").addBack().each(function() { - if(this === event.target) { - validHandle = true; - } - }); - if(!validHandle) { - return false; - } - } - - this.currentItem = currentItem; - this._removeCurrentsFromItems(); - return true; - - }, - - _mouseStart: function(event, overrideHandle, noActivation) { - - var i, body, - o = this.options; - - this.currentContainer = this; - - //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture - this.refreshPositions(); - - //Create and append the visible helper - this.helper = this._createHelper(event); - - //Cache the helper size - this._cacheHelperProportions(); - - /* - * - Position generation - - * This block generates everything position related - it's the core of draggables. - */ - - //Cache the margins of the original element - this._cacheMargins(); - - //Get the next scrolling parent - this.scrollParent = this.helper.scrollParent(); - - //The element's absolute position on the page minus margins - this.offset = this.currentItem.offset(); - this.offset = { - top: this.offset.top - this.margins.top, - left: this.offset.left - this.margins.left - }; - - $.extend(this.offset, { - click: { //Where the click happened, relative to the element - left: event.pageX - this.offset.left, - top: event.pageY - this.offset.top - }, - parent: this._getParentOffset(), - relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper - }); - - // Only after we got the offset, we can change the helper's position to absolute - // TODO: Still need to figure out a way to make relative sorting possible - this.helper.css("position", "absolute"); - this.cssPosition = this.helper.css("position"); - - //Generate the original position - this.originalPosition = this._generatePosition(event); - this.originalPageX = event.pageX; - this.originalPageY = event.pageY; - - //Adjust the mouse offset relative to the helper if "cursorAt" is supplied - (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); - - //Cache the former DOM position - this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] }; - - //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way - if(this.helper[0] !== this.currentItem[0]) { - this.currentItem.hide(); - } - - //Create the placeholder - this._createPlaceholder(); - - //Set a containment if given in the options - if(o.containment) { - this._setContainment(); - } - - if( o.cursor && o.cursor !== "auto" ) { // cursor option - body = this.document.find( "body" ); - - // support: IE - this.storedCursor = body.css( "cursor" ); - body.css( "cursor", o.cursor ); - - this.storedStylesheet = $( "" ).appendTo( body ); - } - - if(o.opacity) { // opacity option - if (this.helper.css("opacity")) { - this._storedOpacity = this.helper.css("opacity"); - } - this.helper.css("opacity", o.opacity); - } - - if(o.zIndex) { // zIndex option - if (this.helper.css("zIndex")) { - this._storedZIndex = this.helper.css("zIndex"); - } - this.helper.css("zIndex", o.zIndex); - } - - //Prepare scrolling - if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") { - this.overflowOffset = this.scrollParent.offset(); - } - - //Call callbacks - this._trigger("start", event, this._uiHash()); - - //Recache the helper size - if(!this._preserveHelperProportions) { - this._cacheHelperProportions(); - } - - - //Post "activate" events to possible containers - if( !noActivation ) { - for ( i = this.containers.length - 1; i >= 0; i-- ) { - this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) ); - } - } - - //Prepare possible droppables - if($.ui.ddmanager) { - $.ui.ddmanager.current = this; - } - - if ($.ui.ddmanager && !o.dropBehaviour) { - $.ui.ddmanager.prepareOffsets(this, event); - } - - this.dragging = true; - - this.helper.addClass("ui-sortable-helper"); - this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position - return true; - - }, - - _mouseDrag: function(event) { - var i, item, itemElement, intersection, - o = this.options, - scrolled = false; - - //Compute the helpers position - this.position = this._generatePosition(event); - this.positionAbs = this._convertPositionTo("absolute"); - - if (!this.lastPositionAbs) { - this.lastPositionAbs = this.positionAbs; - } - - //Do scrolling - if(this.options.scroll) { - if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") { - - if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) { - this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed; - } else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) { - this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed; - } - - if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) { - this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed; - } else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) { - this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed; - } - - } else { - - if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) { - scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); - } else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) { - scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); - } - - if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) { - scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); - } else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) { - scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); - } - - } - - if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) { - $.ui.ddmanager.prepareOffsets(this, event); - } - } - - //Regenerate the absolute position used for position checks - this.positionAbs = this._convertPositionTo("absolute"); - - //Set the helper position - if(!this.options.axis || this.options.axis !== "y") { - this.helper[0].style.left = this.position.left+"px"; - } - if(!this.options.axis || this.options.axis !== "x") { - this.helper[0].style.top = this.position.top+"px"; - } - - //Rearrange - for (i = this.items.length - 1; i >= 0; i--) { - - //Cache variables and intersection, continue if no intersection - item = this.items[i]; - itemElement = item.item[0]; - intersection = this._intersectsWithPointer(item); - if (!intersection) { - continue; - } - - // Only put the placeholder inside the current Container, skip all - // items form other containers. This works because when moving - // an item from one container to another the - // currentContainer is switched before the placeholder is moved. - // - // Without this moving items in "sub-sortables" can cause the placeholder to jitter - // beetween the outer and inner container. - if (item.instance !== this.currentContainer) { - continue; - } - - // cannot intersect with itself - // no useless actions that have been done before - // no action if the item moved is the parent of the item checked - if (itemElement !== this.currentItem[0] && - this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement && - !$.contains(this.placeholder[0], itemElement) && - (this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true) - ) { - - this.direction = intersection === 1 ? "down" : "up"; - - if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) { - this._rearrange(event, item); - } else { - break; - } - - this._trigger("change", event, this._uiHash()); - break; - } - } - - //Post events to containers - this._contactContainers(event); - - //Interconnect with droppables - if($.ui.ddmanager) { - $.ui.ddmanager.drag(this, event); - } - - //Call callbacks - this._trigger("sort", event, this._uiHash()); - - this.lastPositionAbs = this.positionAbs; - return false; - - }, - - _mouseStop: function(event, noPropagation) { - - if(!event) { - return; - } - - //If we are using droppables, inform the manager about the drop - if ($.ui.ddmanager && !this.options.dropBehaviour) { - $.ui.ddmanager.drop(this, event); - } - - if(this.options.revert) { - var that = this, - cur = this.placeholder.offset(), - axis = this.options.axis, - animation = {}; - - if ( !axis || axis === "x" ) { - animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft); - } - if ( !axis || axis === "y" ) { - animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop); - } - this.reverting = true; - $(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() { - that._clear(event); - }); - } else { - this._clear(event, noPropagation); - } - - return false; - - }, - - cancel: function() { - - if(this.dragging) { - - this._mouseUp({ target: null }); - - if(this.options.helper === "original") { - this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); - } else { - this.currentItem.show(); - } - - //Post deactivating events to containers - for (var i = this.containers.length - 1; i >= 0; i--){ - this.containers[i]._trigger("deactivate", null, this._uiHash(this)); - if(this.containers[i].containerCache.over) { - this.containers[i]._trigger("out", null, this._uiHash(this)); - this.containers[i].containerCache.over = 0; - } - } - - } - - if (this.placeholder) { - //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! - if(this.placeholder[0].parentNode) { - this.placeholder[0].parentNode.removeChild(this.placeholder[0]); - } - if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) { - this.helper.remove(); - } - - $.extend(this, { - helper: null, - dragging: false, - reverting: false, - _noFinalSort: null - }); - - if(this.domPosition.prev) { - $(this.domPosition.prev).after(this.currentItem); - } else { - $(this.domPosition.parent).prepend(this.currentItem); - } - } - - return this; - - }, - - serialize: function(o) { - - var items = this._getItemsAsjQuery(o && o.connected), - str = []; - o = o || {}; - - $(items).each(function() { - var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/)); - if (res) { - str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2])); - } - }); - - if(!str.length && o.key) { - str.push(o.key + "="); - } - - return str.join("&"); - - }, - - toArray: function(o) { - - var items = this._getItemsAsjQuery(o && o.connected), - ret = []; - - o = o || {}; - - items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); }); - return ret; - - }, - - /* Be careful with the following core functions */ - _intersectsWith: function(item) { - - var x1 = this.positionAbs.left, - x2 = x1 + this.helperProportions.width, - y1 = this.positionAbs.top, - y2 = y1 + this.helperProportions.height, - l = item.left, - r = l + item.width, - t = item.top, - b = t + item.height, - dyClick = this.offset.click.top, - dxClick = this.offset.click.left, - isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ), - isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ), - isOverElement = isOverElementHeight && isOverElementWidth; - - if ( this.options.tolerance === "pointer" || - this.options.forcePointerForContainers || - (this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"]) - ) { - return isOverElement; - } else { - - return (l < x1 + (this.helperProportions.width / 2) && // Right Half - x2 - (this.helperProportions.width / 2) < r && // Left Half - t < y1 + (this.helperProportions.height / 2) && // Bottom Half - y2 - (this.helperProportions.height / 2) < b ); // Top Half - - } - }, - - _intersectsWithPointer: function(item) { - - var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height), - isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width), - isOverElement = isOverElementHeight && isOverElementWidth, - verticalDirection = this._getDragVerticalDirection(), - horizontalDirection = this._getDragHorizontalDirection(); - - if (!isOverElement) { - return false; - } - - return this.floating ? - ( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 ) - : ( verticalDirection && (verticalDirection === "down" ? 2 : 1) ); - - }, - - _intersectsWithSides: function(item) { - - var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height), - isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width), - verticalDirection = this._getDragVerticalDirection(), - horizontalDirection = this._getDragHorizontalDirection(); - - if (this.floating && horizontalDirection) { - return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf)); - } else { - return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf)); - } - - }, - - _getDragVerticalDirection: function() { - var delta = this.positionAbs.top - this.lastPositionAbs.top; - return delta !== 0 && (delta > 0 ? "down" : "up"); - }, - - _getDragHorizontalDirection: function() { - var delta = this.positionAbs.left - this.lastPositionAbs.left; - return delta !== 0 && (delta > 0 ? "right" : "left"); - }, - - refresh: function(event) { - this._refreshItems(event); - this.refreshPositions(); - return this; - }, - - _connectWith: function() { - var options = this.options; - return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith; - }, - - _getItemsAsjQuery: function(connected) { - - var i, j, cur, inst, - items = [], - queries = [], - connectWith = this._connectWith(); - - if(connectWith && connected) { - for (i = connectWith.length - 1; i >= 0; i--){ - cur = $(connectWith[i]); - for ( j = cur.length - 1; j >= 0; j--){ - inst = $.data(cur[j], this.widgetFullName); - if(inst && inst !== this && !inst.options.disabled) { - queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]); - } - } - } - } - - queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]); - - for (i = queries.length - 1; i >= 0; i--){ - queries[i][0].each(function() { - items.push(this); - }); - } - - return $(items); - - }, - - _removeCurrentsFromItems: function() { - - var list = this.currentItem.find(":data(" + this.widgetName + "-item)"); - - this.items = $.grep(this.items, function (item) { - for (var j=0; j < list.length; j++) { - if(list[j] === item.item[0]) { - return false; - } - } - return true; - }); - - }, - - _refreshItems: function(event) { - - this.items = []; - this.containers = [this]; - - var i, j, cur, inst, targetData, _queries, item, queriesLength, - items = this.items, - queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]], - connectWith = this._connectWith(); - - if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down - for (i = connectWith.length - 1; i >= 0; i--){ - cur = $(connectWith[i]); - for (j = cur.length - 1; j >= 0; j--){ - inst = $.data(cur[j], this.widgetFullName); - if(inst && inst !== this && !inst.options.disabled) { - queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]); - this.containers.push(inst); - } - } - } - } - - for (i = queries.length - 1; i >= 0; i--) { - targetData = queries[i][1]; - _queries = queries[i][0]; - - for (j=0, queriesLength = _queries.length; j < queriesLength; j++) { - item = $(_queries[j]); - - item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager) - - items.push({ - item: item, - instance: targetData, - width: 0, height: 0, - left: 0, top: 0 - }); - } - } - - }, - - refreshPositions: function(fast) { - - //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change - if(this.offsetParent && this.helper) { - this.offset.parent = this._getParentOffset(); - } - - var i, item, t, p; - - for (i = this.items.length - 1; i >= 0; i--){ - item = this.items[i]; - - //We ignore calculating positions of all connected containers when we're not over them - if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) { - continue; - } - - t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item; - - if (!fast) { - item.width = t.outerWidth(); - item.height = t.outerHeight(); - } - - p = t.offset(); - item.left = p.left; - item.top = p.top; - } - - if(this.options.custom && this.options.custom.refreshContainers) { - this.options.custom.refreshContainers.call(this); - } else { - for (i = this.containers.length - 1; i >= 0; i--){ - p = this.containers[i].element.offset(); - this.containers[i].containerCache.left = p.left; - this.containers[i].containerCache.top = p.top; - this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); - this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); - } - } - - return this; - }, - - _createPlaceholder: function(that) { - that = that || this; - var className, - o = that.options; - - if(!o.placeholder || o.placeholder.constructor === String) { - className = o.placeholder; - o.placeholder = { - element: function() { - - var nodeName = that.currentItem[0].nodeName.toLowerCase(), - element = $( "<" + nodeName + ">", that.document[0] ) - .addClass(className || that.currentItem[0].className+" ui-sortable-placeholder") - .removeClass("ui-sortable-helper"); - - if ( nodeName === "tr" ) { - that.currentItem.children().each(function() { - $( " ", that.document[0] ) - .attr( "colspan", $( this ).attr( "colspan" ) || 1 ) - .appendTo( element ); - }); - } else if ( nodeName === "img" ) { - element.attr( "src", that.currentItem.attr( "src" ) ); - } - - if ( !className ) { - element.css( "visibility", "hidden" ); - } - - return element; - }, - update: function(container, p) { - - // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that - // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified - if(className && !o.forcePlaceholderSize) { - return; - } - - //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item - if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); } - if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); } - } - }; - } - - //Create the placeholder - that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem)); - - //Append it after the actual current item - that.currentItem.after(that.placeholder); - - //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317) - o.placeholder.update(that, that.placeholder); - - }, - - _contactContainers: function(event) { - var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating, - innermostContainer = null, - innermostIndex = null; - - // get innermost container that intersects with item - for (i = this.containers.length - 1; i >= 0; i--) { - - // never consider a container that's located within the item itself - if($.contains(this.currentItem[0], this.containers[i].element[0])) { - continue; - } - - if(this._intersectsWith(this.containers[i].containerCache)) { - - // if we've already found a container and it's more "inner" than this, then continue - if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) { - continue; - } - - innermostContainer = this.containers[i]; - innermostIndex = i; - - } else { - // container doesn't intersect. trigger "out" event if necessary - if(this.containers[i].containerCache.over) { - this.containers[i]._trigger("out", event, this._uiHash(this)); - this.containers[i].containerCache.over = 0; - } - } - - } - - // if no intersecting containers found, return - if(!innermostContainer) { - return; - } - - // move the item into the container if it's not there already - if(this.containers.length === 1) { - if (!this.containers[innermostIndex].containerCache.over) { - this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); - this.containers[innermostIndex].containerCache.over = 1; - } - } else { - - //When entering a new container, we will find the item with the least distance and append our item near it - dist = 10000; - itemWithLeastDistance = null; - floating = innermostContainer.floating || isFloating(this.currentItem); - posProperty = floating ? "left" : "top"; - sizeProperty = floating ? "width" : "height"; - base = this.positionAbs[posProperty] + this.offset.click[posProperty]; - for (j = this.items.length - 1; j >= 0; j--) { - if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) { - continue; - } - if(this.items[j].item[0] === this.currentItem[0]) { - continue; - } - if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) { - continue; - } - cur = this.items[j].item.offset()[posProperty]; - nearBottom = false; - if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){ - nearBottom = true; - cur += this.items[j][sizeProperty]; - } - - if(Math.abs(cur - base) < dist) { - dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; - this.direction = nearBottom ? "up": "down"; - } - } - - //Check if dropOnEmpty is enabled - if(!itemWithLeastDistance && !this.options.dropOnEmpty) { - return; - } - - if(this.currentContainer === this.containers[innermostIndex]) { - return; - } - - itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); - this._trigger("change", event, this._uiHash()); - this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); - this.currentContainer = this.containers[innermostIndex]; - - //Update the placeholder - this.options.placeholder.update(this.currentContainer, this.placeholder); - - this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); - this.containers[innermostIndex].containerCache.over = 1; - } - - - }, - - _createHelper: function(event) { - - var o = this.options, - helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem); - - //Add the helper to the DOM if that didn't happen already - if(!helper.parents("body").length) { - $(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]); - } - - if(helper[0] === this.currentItem[0]) { - this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") }; - } - - if(!helper[0].style.width || o.forceHelperSize) { - helper.width(this.currentItem.width()); - } - if(!helper[0].style.height || o.forceHelperSize) { - helper.height(this.currentItem.height()); - } - - return helper; - - }, - - _adjustOffsetFromHelper: function(obj) { - if (typeof obj === "string") { - obj = obj.split(" "); - } - if ($.isArray(obj)) { - obj = {left: +obj[0], top: +obj[1] || 0}; - } - if ("left" in obj) { - this.offset.click.left = obj.left + this.margins.left; - } - if ("right" in obj) { - this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; - } - if ("top" in obj) { - this.offset.click.top = obj.top + this.margins.top; - } - if ("bottom" in obj) { - this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; - } - }, - - _getParentOffset: function() { - - - //Get the offsetParent and cache its position - this.offsetParent = this.helper.offsetParent(); - var po = this.offsetParent.offset(); - - // This is a special case where we need to modify a offset calculated on start, since the following happened: - // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent - // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that - // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag - if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) { - po.left += this.scrollParent.scrollLeft(); - po.top += this.scrollParent.scrollTop(); - } - - // This needs to be actually done for all browsers, since pageX/pageY includes this information - // with an ugly IE fix - if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) { - po = { top: 0, left: 0 }; - } - - return { - top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), - left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) - }; - - }, - - _getRelativeOffset: function() { - - if(this.cssPosition === "relative") { - var p = this.currentItem.position(); - return { - top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), - left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() - }; - } else { - return { top: 0, left: 0 }; - } - - }, - - _cacheMargins: function() { - this.margins = { - left: (parseInt(this.currentItem.css("marginLeft"),10) || 0), - top: (parseInt(this.currentItem.css("marginTop"),10) || 0) - }; - }, - - _cacheHelperProportions: function() { - this.helperProportions = { - width: this.helper.outerWidth(), - height: this.helper.outerHeight() - }; - }, - - _setContainment: function() { - - var ce, co, over, - o = this.options; - if(o.containment === "parent") { - o.containment = this.helper[0].parentNode; - } - if(o.containment === "document" || o.containment === "window") { - this.containment = [ - 0 - this.offset.relative.left - this.offset.parent.left, - 0 - this.offset.relative.top - this.offset.parent.top, - $(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left, - ($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top - ]; - } - - if(!(/^(document|window|parent)$/).test(o.containment)) { - ce = $(o.containment)[0]; - co = $(o.containment).offset(); - over = ($(ce).css("overflow") !== "hidden"); - - this.containment = [ - co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left, - co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top, - co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left, - co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top - ]; - } - - }, - - _convertPositionTo: function(d, pos) { - - if(!pos) { - pos = this.position; - } - var mod = d === "absolute" ? 1 : -1, - scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, - scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); - - return { - top: ( - pos.top + // The absolute mouse position - this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent - this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border) - ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) - ), - left: ( - pos.left + // The absolute mouse position - this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent - this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border) - ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) - ) - }; - - }, - - _generatePosition: function(event) { - - var top, left, - o = this.options, - pageX = event.pageX, - pageY = event.pageY, - scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); - - // This is another very weird special case that only happens for relative elements: - // 1. If the css position is relative - // 2. and the scroll parent is the document or similar to the offset parent - // we have to refresh the relative offset during the scroll so there are no jumps - if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) { - this.offset.relative = this._getRelativeOffset(); - } - - /* - * - Position constraining - - * Constrain the position to a mix of grid, containment. - */ - - if(this.originalPosition) { //If we are not dragging yet, we won't check for options - - if(this.containment) { - if(event.pageX - this.offset.click.left < this.containment[0]) { - pageX = this.containment[0] + this.offset.click.left; - } - if(event.pageY - this.offset.click.top < this.containment[1]) { - pageY = this.containment[1] + this.offset.click.top; - } - if(event.pageX - this.offset.click.left > this.containment[2]) { - pageX = this.containment[2] + this.offset.click.left; - } - if(event.pageY - this.offset.click.top > this.containment[3]) { - pageY = this.containment[3] + this.offset.click.top; - } - } - - if(o.grid) { - top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1]; - pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; - - left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; - pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; - } - - } - - return { - top: ( - pageY - // The absolute mouse position - this.offset.click.top - // Click offset (relative to the element) - this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent - this.offset.parent.top + // The offsetParent's offset without borders (offset + border) - ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) - ), - left: ( - pageX - // The absolute mouse position - this.offset.click.left - // Click offset (relative to the element) - this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent - this.offset.parent.left + // The offsetParent's offset without borders (offset + border) - ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) - ) - }; - - }, - - _rearrange: function(event, i, a, hardRefresh) { - - a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling)); - - //Various things done here to improve the performance: - // 1. we create a setTimeout, that calls refreshPositions - // 2. on the instance, we have a counter variable, that get's higher after every append - // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same - // 4. this lets only the last addition to the timeout stack through - this.counter = this.counter ? ++this.counter : 1; - var counter = this.counter; - - this._delay(function() { - if(counter === this.counter) { - this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove - } - }); - - }, - - _clear: function(event, noPropagation) { - - this.reverting = false; - // We delay all events that have to be triggered to after the point where the placeholder has been removed and - // everything else normalized again - var i, - delayedTriggers = []; - - // We first have to update the dom position of the actual currentItem - // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088) - if(!this._noFinalSort && this.currentItem.parent().length) { - this.placeholder.before(this.currentItem); - } - this._noFinalSort = null; - - if(this.helper[0] === this.currentItem[0]) { - for(i in this._storedCSS) { - if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") { - this._storedCSS[i] = ""; - } - } - this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); - } else { - this.currentItem.show(); - } - - if(this.fromOutside && !noPropagation) { - delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); }); - } - if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) { - delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed - } - - // Check if the items Container has Changed and trigger appropriate - // events. - if (this !== this.currentContainer) { - if(!noPropagation) { - delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); }); - delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.currentContainer)); - delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.currentContainer)); - } - } - - - //Post events to containers - for (i = this.containers.length - 1; i >= 0; i--){ - if(!noPropagation) { - delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); }; }).call(this, this.containers[i])); - } - if(this.containers[i].containerCache.over) { - delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); }; }).call(this, this.containers[i])); - this.containers[i].containerCache.over = 0; - } - } - - //Do what was originally in plugins - if ( this.storedCursor ) { - this.document.find( "body" ).css( "cursor", this.storedCursor ); - this.storedStylesheet.remove(); - } - if(this._storedOpacity) { - this.helper.css("opacity", this._storedOpacity); - } - if(this._storedZIndex) { - this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex); - } - - this.dragging = false; - if(this.cancelHelperRemoval) { - if(!noPropagation) { - this._trigger("beforeStop", event, this._uiHash()); - for (i=0; i < delayedTriggers.length; i++) { - delayedTriggers[i].call(this, event); - } //Trigger all delayed events - this._trigger("stop", event, this._uiHash()); - } - - this.fromOutside = false; - return false; - } - - if(!noPropagation) { - this._trigger("beforeStop", event, this._uiHash()); - } - - //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! - this.placeholder[0].parentNode.removeChild(this.placeholder[0]); - - if(this.helper[0] !== this.currentItem[0]) { - this.helper.remove(); - } - this.helper = null; - - if(!noPropagation) { - for (i=0; i < delayedTriggers.length; i++) { - delayedTriggers[i].call(this, event); - } //Trigger all delayed events - this._trigger("stop", event, this._uiHash()); - } - - this.fromOutside = false; - return true; - - }, - - _trigger: function() { - if ($.Widget.prototype._trigger.apply(this, arguments) === false) { - this.cancel(); - } - }, - - _uiHash: function(_inst) { - var inst = _inst || this; - return { - helper: inst.helper, - placeholder: inst.placeholder || $([]), - position: inst.position, - originalPosition: inst.originalPosition, - offset: inst.positionAbs, - item: inst.currentItem, - sender: _inst ? _inst.element : null - }; - } - -}); - -})(jQuery); diff --git a/examples/unfinished/reorderable-list/client/shark.css b/examples/unfinished/reorderable-list/client/shark.css deleted file mode 100644 index c6a9f2e7f5..0000000000 --- a/examples/unfinished/reorderable-list/client/shark.css +++ /dev/null @@ -1,10 +0,0 @@ -#list div { - padding: 10px; - height: 19px; - border: 1px solid #bbb; - margin: 8px; - font-weight: bold; - cursor: move; - width: 400px; - background: #eee; } - diff --git a/examples/unfinished/reorderable-list/client/shark.html b/examples/unfinished/reorderable-list/client/shark.html deleted file mode 100644 index e65e597c2d..0000000000 --- a/examples/unfinished/reorderable-list/client/shark.html +++ /dev/null @@ -1,9 +0,0 @@ - -
- {{#each items}} -
- {{text}} -
- {{/each}} -
- diff --git a/examples/unfinished/reorderable-list/client/shark.js b/examples/unfinished/reorderable-list/client/shark.js deleted file mode 100644 index 2ae26b746c..0000000000 --- a/examples/unfinished/reorderable-list/client/shark.js +++ /dev/null @@ -1,30 +0,0 @@ -UI.body.items = Items.find({}, { sort: { rank: 1 } }); - -SimpleRationalRanks = { - beforeFirst: function (firstRank) { return firstRank - 1; }, - between: function (beforeRank, afterRank) { return (beforeRank + afterRank) / 2; }, - afterLast: function (lastRank) { return lastRank + 1; } -}; - -UI.body.rendered = function () { - $(this.find('#list')).sortable({ // uses the 'sortable' interaction from jquery ui - stop: function (event, ui) { // fired when an item is dropped - var el = ui.item.get(0), before = ui.item.prev().get(0), after = ui.item.next().get(0); - - var newRank; - if (!before) { // moving to the top of the list - newRank = SimpleRationalRanks.beforeFirst(UI.getElementData(after).rank); - - } else if (!after) { // moving to the bottom of the list - newRank = SimpleRationalRanks.afterLast(UI.getElementData(before).rank); - - } else { - newRank = SimpleRationalRanks.between( - UI.getElementData(before).rank, - UI.getElementData(after).rank); - } - - Items.update(UI.getElementData(el)._id, {$set: {rank: newRank}}); - } - }); -}; diff --git a/examples/unfinished/reorderable-list/lib/items.js b/examples/unfinished/reorderable-list/lib/items.js deleted file mode 100644 index 91c12feea6..0000000000 --- a/examples/unfinished/reorderable-list/lib/items.js +++ /dev/null @@ -1,9 +0,0 @@ -Items = new Mongo.Collection("items"); - -if (Meteor.isServer) { - if (Items.find().count() === 0) { - _.each( - ["violet", "unicorn", "flask", "jar", "leitmotif", "rearrange", "right", "ethereal"], - function (text, index) { Items.insert({text: text, rank: index}); }); - } -} diff --git a/examples/unfinished/todos-backbone/.meteor/.gitignore b/examples/unfinished/todos-backbone/.meteor/.gitignore deleted file mode 100644 index 4083037423..0000000000 --- a/examples/unfinished/todos-backbone/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/examples/unfinished/todos-backbone/.meteor/packages b/examples/unfinished/todos-backbone/.meteor/packages deleted file mode 100644 index c24acdbd36..0000000000 --- a/examples/unfinished/todos-backbone/.meteor/packages +++ /dev/null @@ -1,8 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -jquery -backbone -standard-app-packages diff --git a/examples/unfinished/todos-backbone/.meteor/release b/examples/unfinished/todos-backbone/.meteor/release deleted file mode 100644 index a918a2aa18..0000000000 --- a/examples/unfinished/todos-backbone/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -0.6.0 diff --git a/examples/unfinished/todos-backbone/body.html b/examples/unfinished/todos-backbone/body.html deleted file mode 100644 index fa8e5c01d2..0000000000 --- a/examples/unfinished/todos-backbone/body.html +++ /dev/null @@ -1,75 +0,0 @@ - -Todos - - - - - - -
- -
-

Todos

-
- -
- -
- - -
- -
-
    -
    - -
    - -
    - -
    - -
    - -
    - Created by -
    - Jérôme Gravel-Niquet -
    - - - - - - - - diff --git a/examples/unfinished/todos-backbone/client/todos.js b/examples/unfinished/todos-backbone/client/todos.js deleted file mode 100644 index cb9e610af6..0000000000 --- a/examples/unfinished/todos-backbone/client/todos.js +++ /dev/null @@ -1,201 +0,0 @@ -// An example Backbone application contributed by -// [Jérôme Gravel-Niquet](http://jgn.me/). This demo uses a simple -// [LocalStorage adapter](backbone-localstorage.html) -// to persist Backbone models within your browser. - -// Load the application once the DOM is ready, using `jQuery.ready`: -$(function(){ - // ask for all the todos in my cache - Meteor.subscribe('todos'); - - // helper functions - - function all () { - return Todos.find(); - }; - - function all_done () { - return Todos.find({done: true}); - }; - - function all_remaining () { - return Todos.find({done: false}); - }; - - function nextOrder () { - var todos = Todos.find({}, {sort: {order: -1}, limit: 1}); - return todos[0] ? todos[0].order + 1 : 1; - }; - - // Todo Item View - // -------------- - - // The DOM element for a todo item... - window.TodoView = Backbone.View.extend({ - - //... is a list tag. - tagName: "li", - - // Cache the template function for a single item. - template: _.template($('#item-template').html()), - - // The DOM events specific to an item. - events: { - "click .check" : "toggleDone", - "dblclick div.todo-text" : "edit", - "click span.todo-destroy" : "clear", - "keypress .todo-input" : "updateOnEnter" - }, - - // Re-render the contents of the todo item. - render: function() { - $(this.el).html(this.template(this.model)); - this.setText(); - return this; - }, - - // To avoid XSS (not that it would be harmful in this particular app), - // we use `jQuery.text` to set the contents of the todo item. - setText: function() { - this.$('.todo-text').text(this.model.text); - this.input = this.$('.todo-input'); - this.input.bind('blur', _.bind(this.close, this)).val(this.model.text); - }, - - // Toggle the `"done"` state of the object. - toggleDone: function() { - Todos.update(this.model._id, {$set: {done: !this.model.done}}); - }, - - // Switch this view into `"editing"` mode, displaying the input field. - edit: function() { - $(this.el).addClass("editing"); - this.input.focus(); - }, - - // Close the `"editing"` mode, saving changes to the todo. - // findLive callback will update this view. - close: function() { - Todos.update(this.model._id, {$set: {text: this.input.val()}}); - $(this.el).removeClass("editing"); - }, - - // If you hit `enter`, we're through editing the item. - updateOnEnter: function(e) { - if (e.keyCode == 13) this.close(); - }, - - // Remove this view from the DOM. - remove: function() { - $(this.el).remove(); - }, - - // destroy the todo object. the findLive callback will g/c this view. - clear: function() { - Todos.remove(this.model._id); - } - }); - - // The Application - // --------------- - - // Our overall **AppView** is the top-level piece of UI. - window.AppView = Backbone.View.extend({ - - // Instead of generating a new element, bind to the existing skeleton of - // the App already present in the HTML. - el: $("#todoapp"), - - // Our template for the line of statistics at the bottom of the app. - statsTemplate: _.template($('#stats-template').html()), - - // Delegated events for creating new items, and clearing done ones. - events: { - "keypress #new-todo": "createOnEnter", - "keyup #new-todo": "showTooltip", - "click .todo-clear a": "clearCompleted" - }, - - todos: [], - - // At initialization we bind to the relevant events on the `Todos` - // collection, when items are added or changed. Kick things off by - // loading any preexisting todos that might be saved in *localStorage*. - initialize: function() { - var self = this; - - this.input = this.$("#new-todo"); - - // spin up the live query. ignore the return value since we never - // stop the query. - Todos.findLive({}, { - added: function (obj, before_idx) { - // add a view node to the DOM - var view = new TodoView({model: obj}); - self.todos.splice(before_idx, 0, view); - self.$("#todo-list").append(view.render().el); - self.render(); - }, - removed: function (obj, at_idx) { - // remove the view node from the DOM - var view = self.todos.splice(at_idx, 1); - view[0].remove(); - self.render(); - }, - changed: function (obj, at_idx) { - // update obj in existing view and rerender - self.todos[at_idx].model = obj; - self.todos[at_idx].render(); - self.render(); - }, - moved: function (old_idx, new_idx) { - // unimplemented -- items don't ever move - }, - sort: {'order': 1} - }); - }, - - // Re-rendering the App just means refreshing the statistics -- the rest - // of the app doesn't change. - render: function() { - console.log("RENDER", all().length, all_done().length, all_remaining().length); - - this.$('#todo-stats').html(this.statsTemplate({ - total: all().length, - done: all_done().length, - remaining: all_remaining().length - })); - }, - - // If you hit return in the main input field, and there is text to save, - // create new **Todo** model. - createOnEnter: function(e) { - var text = this.input.val(); - if (!text || e.keyCode != 13) return; - Todos.insert({text: text, done: false, order: nextOrder()}); - this.input.val(''); - }, - - // Clear all done todo items, destroying their models. - clearCompleted: function() { - _.each(all_done(), function (todo) { Todos.remove(todo._id); }); - return false; - }, - - // Lazily show the tooltip that tells you to press `enter` to save - // a new todo item, after one second. - showTooltip: function(e) { - var tooltip = this.$(".ui-tooltip-top"); - var val = this.input.val(); - tooltip.fadeOut(); - if (this.tooltipTimeout) clearTimeout(this.tooltipTimeout); - if (val == '' || val == this.input.attr('placeholder')) return; - var show = function(){ tooltip.show().fadeIn(); }; - this.tooltipTimeout = _.delay(show, 1000); - } - }); - - // Finally, we kick things off by creating the **App**. - window.App = new AppView; - -}); diff --git a/examples/unfinished/todos-backbone/common.js b/examples/unfinished/todos-backbone/common.js deleted file mode 100644 index a12c5d85e5..0000000000 --- a/examples/unfinished/todos-backbone/common.js +++ /dev/null @@ -1,8 +0,0 @@ -Todos = new Mongo.Collection("todos"); -//Todos.schema({text: String, done: Boolean, order: Number}); - -if (Meteor.isServer) { - Meteor.publish('todos', function () { - return Todos.find(); - }); -} diff --git a/examples/unfinished/todos-backbone/public/destroy.png b/examples/unfinished/todos-backbone/public/destroy.png deleted file mode 100644 index f44a72e5f9..0000000000 Binary files a/examples/unfinished/todos-backbone/public/destroy.png and /dev/null differ diff --git a/examples/unfinished/todos-backbone/todos.css b/examples/unfinished/todos-backbone/todos.css deleted file mode 100644 index 61ab6cffd7..0000000000 --- a/examples/unfinished/todos-backbone/todos.css +++ /dev/null @@ -1,311 +0,0 @@ -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, font, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td { - margin: 0; - padding: 0; - border: 0; - outline: 0; - font-weight: inherit; - font-style: inherit; - font-size: 100%; - font-family: inherit; - vertical-align: baseline; -} -body { - line-height: 1; - color: black; - background: white; -} -ol, ul { - list-style: none; -} -a img { - border: none; -} - -html { - background: #eeeeee; -} - body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.4em; - background: #eeeeee; - color: #333333; - } - -#todoapp { - width: 480px; - margin: 0 auto 40px; - background: white; - padding: 20px; - -moz-box-shadow: rgba(0, 0, 0, 0.2) 0 5px 6px 0; - -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 5px 6px 0; - -o-box-shadow: rgba(0, 0, 0, 0.2) 0 5px 6px 0; - box-shadow: rgba(0, 0, 0, 0.2) 0 5px 6px 0; -} - #todoapp h1 { - font-size: 36px; - font-weight: bold; - text-align: center; - padding: 20px 0 30px 0; - line-height: 1; - } - -#create-todo { - position: relative; -} - #create-todo input { - width: 466px; - font-size: 24px; - font-family: inherit; - line-height: 1.4em; - border: 0; - outline: none; - padding: 6px; - border: 1px solid #999999; - -moz-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset; - -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset; - -o-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset; - box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset; - } - #create-todo input::-webkit-input-placeholder { - font-style: italic; - } - #create-todo span { - position: absolute; - z-index: 999; - width: 170px; - left: 50%; - margin-left: -85px; - } - -#todo-list { - margin-top: 10px; -} - #todo-list li { - padding: 12px 20px 11px 0; - position: relative; - font-size: 24px; - line-height: 1.1em; - border-bottom: 1px solid #cccccc; - } - #todo-list li:after { - content: "\0020"; - display: block; - height: 0; - clear: both; - overflow: hidden; - visibility: hidden; - } - #todo-list li.editing { - padding: 0; - border-bottom: 0; - } - #todo-list .editing .display, - #todo-list .edit { - display: none; - } - #todo-list .editing .edit { - display: block; - } - #todo-list .editing input { - width: 444px; - font-size: 24px; - font-family: inherit; - margin: 0; - line-height: 1.6em; - border: 0; - outline: none; - padding: 10px 7px 0px 27px; - border: 1px solid #999999; - -moz-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset; - -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset; - -o-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset; - box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset; - } - #todo-list .check { - position: relative; - top: 9px; - margin: 0 10px 0 7px; - float: left; - } - #todo-list .done .todo-text { - text-decoration: line-through; - color: #777777; - } - #todo-list .todo-destroy { - position: absolute; - right: 5px; - top: 14px; - display: none; - cursor: pointer; - width: 20px; - height: 20px; - background: url(destroy.png) no-repeat 0 0; - } - #todo-list li:hover .todo-destroy { - display: block; - } - #todo-list .todo-destroy:hover { - background-position: 0 -20px; - } - -#todo-stats { - *zoom: 1; - margin-top: 10px; - color: #777777; -} - #todo-stats:after { - content: "\0020"; - display: block; - height: 0; - clear: both; - overflow: hidden; - visibility: hidden; - } - #todo-stats .todo-count { - float: left; - } - #todo-stats .todo-count .number { - font-weight: bold; - color: #333333; - } - #todo-stats .todo-clear { - float: right; - } - #todo-stats .todo-clear a { - color: #777777; - font-size: 12px; - } - #todo-stats .todo-clear a:visited { - color: #777777; - } - #todo-stats .todo-clear a:hover { - color: #336699; - } - -#instructions { - width: 520px; - margin: 10px auto; - color: #777777; - text-shadow: rgba(255, 255, 255, 0.8) 0 1px 0; - text-align: center; -} - #instructions a { - color: #336699; - } - -#credits { - width: 520px; - margin: 30px auto; - color: #999; - text-shadow: rgba(255, 255, 255, 0.8) 0 1px 0; - text-align: center; -} - #credits a { - color: #888; - } - - -/* - * François 'cahnory' Germain - */ -.ui-tooltip, .ui-tooltip-top, .ui-tooltip-right, .ui-tooltip-bottom, .ui-tooltip-left { - color:#ffffff; - cursor:normal; - display:-moz-inline-stack; - display:inline-block; - font-size:12px; - font-family:arial; - padding:.5em 1em; - position:relative; - text-align:center; - text-shadow:0 -1px 1px #111111; - -webkit-border-top-left-radius:4px ; - -webkit-border-top-right-radius:4px ; - -webkit-border-bottom-right-radius:4px ; - -webkit-border-bottom-left-radius:4px ; - -khtml-border-top-left-radius:4px ; - -khtml-border-top-right-radius:4px ; - -khtml-border-bottom-right-radius:4px ; - -khtml-border-bottom-left-radius:4px ; - -moz-border-radius-topleft:4px ; - -moz-border-radius-topright:4px ; - -moz-border-radius-bottomright:4px ; - -moz-border-radius-bottomleft:4px ; - border-top-left-radius:4px ; - border-top-right-radius:4px ; - border-bottom-right-radius:4px ; - border-bottom-left-radius:4px ; - -o-box-shadow:0 1px 2px #000000, inset 0 0 0 1px #222222, inset 0 2px #666666, inset 0 -2px 2px #444444; - -moz-box-shadow:0 1px 2px #000000, inset 0 0 0 1px #222222, inset 0 2px #666666, inset 0 -2px 2px #444444; - -khtml-box-shadow:0 1px 2px #000000, inset 0 0 0 1px #222222, inset 0 2px #666666, inset 0 -2px 2px #444444; - -webkit-box-shadow:0 1px 2px #000000, inset 0 0 0 1px #222222, inset 0 2px #666666, inset 0 -2px 2px #444444; - box-shadow:0 1px 2px #000000, inset 0 0 0 1px #222222, inset 0 2px #666666, inset 0 -2px 2px #444444; - background-color:#3b3b3b; - background-image:-moz-linear-gradient(top,#555555,#222222); - background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#555555),color-stop(1,#222222)); - filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#555555,EndColorStr=#222222); - -ms-filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#555555,EndColorStr=#222222); -} -.ui-tooltip:after, .ui-tooltip-top:after, .ui-tooltip-right:after, .ui-tooltip-bottom:after, .ui-tooltip-left:after { - content:"\25B8"; - display:block; - font-size:2em; - height:0; - line-height:0; - position:absolute; -} -.ui-tooltip:after, .ui-tooltip-bottom:after { - color:#2a2a2a; - bottom:0; - left:1px; - text-align:center; - text-shadow:1px 0 2px #000000; - -o-transform:rotate(90deg); - -moz-transform:rotate(90deg); - -khtml-transform:rotate(90deg); - -webkit-transform:rotate(90deg); - width:100%; -} -.ui-tooltip-top:after { - bottom:auto; - color:#4f4f4f; - left:-2px; - top:0; - text-align:center; - text-shadow:none; - -o-transform:rotate(-90deg); - -moz-transform:rotate(-90deg); - -khtml-transform:rotate(-90deg); - -webkit-transform:rotate(-90deg); - width:100%; -} -.ui-tooltip-right:after { - color:#222222; - right:-0.375em; - top:50%; - margin-top:-.05em; - text-shadow:0 1px 2px #000000; - -o-transform:rotate(0); - -moz-transform:rotate(0); - -khtml-transform:rotate(0); - -webkit-transform:rotate(0); -} -.ui-tooltip-left:after { - color:#222222; - left:-0.375em; - top:50%; - margin-top:.1em; - text-shadow:0 -1px 2px #000000; - -o-transform:rotate(180deg); - -moz-transform:rotate(180deg); - -khtml-transform:rotate(180deg); - -webkit-transform:rotate(180deg); -} diff --git a/examples/unfinished/todos-underscore/.meteor/.gitignore b/examples/unfinished/todos-underscore/.meteor/.gitignore deleted file mode 100644 index 4083037423..0000000000 --- a/examples/unfinished/todos-underscore/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/examples/unfinished/todos-underscore/.meteor/packages b/examples/unfinished/todos-underscore/.meteor/packages deleted file mode 100644 index 6bbedad3c8..0000000000 --- a/examples/unfinished/todos-underscore/.meteor/packages +++ /dev/null @@ -1,9 +0,0 @@ -# Meteor packages used by this project, one per line. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -jquery -jquery-layout -jquery-history -standard-app-packages diff --git a/examples/unfinished/todos-underscore/.meteor/release b/examples/unfinished/todos-underscore/.meteor/release deleted file mode 100644 index a918a2aa18..0000000000 --- a/examples/unfinished/todos-underscore/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -0.6.0 diff --git a/examples/unfinished/todos-underscore/body.html b/examples/unfinished/todos-underscore/body.html deleted file mode 100644 index 0739651c2d..0000000000 --- a/examples/unfinished/todos-underscore/body.html +++ /dev/null @@ -1,98 +0,0 @@ - -Todos - - - - -
    -
    -
    -
    - -
    -
    - -
      -
      -
      - -
      -
      - -
      - -
      -
      - -
      -
      -

      - To get started, create a new todo list in the left sidebar by - typing its name in the text box. Select a list by clicking on its - name, and rename by double clicking. The active list appears in - the main window pane. You can do the usual here: add items, check - them off as completed, and destroy items. You can also tag items - with one or more tags, by clicking the blue Add new tag - button to the right. All your in-use tags appear at the top. You - can filter the list items by selecting a tag, or click the - leftmost button to return to the full list. -

      - -

      - Inspired by Backbone's - Todo Demo, - with credit to - Jérôme Gravel-Niquet. -

      -
      -
      - - - - - - - - - - diff --git a/examples/unfinished/todos-underscore/client/client.js b/examples/unfinished/todos-underscore/client/client.js deleted file mode 100644 index 1ccb0c4f06..0000000000 --- a/examples/unfinished/todos-underscore/client/client.js +++ /dev/null @@ -1,258 +0,0 @@ -// quick jquery extension to bind text inputs to blur and RET. -$.fn.onBlurOrEnter = function (callback) { - this.bind('blur', callback); - this.bind('keypress', function (evt) { - if (evt.keyCode === 13 && $(this).val()) - callback.call(this, evt); - }); -}; - -// everything else happens after DOM is ready -$(function () { - $('body').layout({north__minSize: 50, - spacing_open: 10, - north__fxSettings: { direction: "vertical" }}); - - // cache the template function for a single item. - var item_template = _.template($('#item-template').html()); - - // this render function could be replaced with a handlebars - // template. underscore template isn't safe for user-entered data - // like the item text (XSS). - function renderItem (obj) { - // generate template for todo - var elt = $(item_template(obj)); - - // set text through jquery for XSS protection - elt.find('.todo-text').text(obj.text); - - // clicking the checkbox toggles done state - elt.find('.check').click(function () { - Todos.update(obj._id, {$set: {done: !obj.done}}); - }); - - // clicking destroy button removes the item - elt.find('.destroy').click(function () { - Todos.remove(obj._id); - }); - - // wire up tag destruction links - elt.find('.tag .remove').click(function () { - var tag = $(this).attr('name'); - $(this).parent().fadeOut(500, function () { - Todos.update(obj._id, {$pull: {tags: tag}}); - }); - }); - - // wire up add tag - elt.find('.addtag').click(function () { - $(this).hide(); - elt.find('.edittag').show(); - elt.find('.edittag input').focus(); - }); - - // wire up edit tag - elt.find('.edittag input').onBlurOrEnter(function () { - elt.find('.edittag').hide(); - elt.find('.addtag').show(); - if ($(this).val() !== '') - Todos.update(obj._id, {$addToSet: {tags: $(this).val()}}); - }); - - // doubleclick on todo text brings up the editor - elt.find('.todo-text').dblclick(function () { - elt.addClass('editing'); - - var input = elt.find('.todo-input'); - input.val(obj.text); - input.focus(); - input.select(); - - input.onBlurOrEnter(function () { - elt.removeClass('editing'); - if ($(this).val() !== '') - Todos.update(obj._id, {$set: {text: elt.find('.todo-input').val()}}); - }); - }); - - return elt[0]; - }; - - // construct new todo from text box - $('#new-todo').bind('keypress', function (evt) { - var list_id = Session.get('list_id'); - var tag = Session.get('tag_filter'); - - // prevent creation of a new todo if nothing is selected - if (!list_id) return; - - var text = $('#new-todo').val(); - - if (evt.keyCode === 13 && text) { - var obj = {text: text, - list_id: list_id, - done: false, - timestamp: (new Date()).getTime()}; - if (tag) obj.tags = [tag]; - - Todos.insert(obj); - $('#new-todo').val(''); - } - }); - - var current_list_stop; - function setCurrentList (list_id) { - Session.set('list_id', list_id); - - $('#items-view').show(); - - // kill current findLive render - if (current_list_stop) - current_list_stop.stop(); - - var query = {list_id: list_id}; - if (Session.get('tag_filter')) - query.tags = Session.get('tag_filter') - - // render individual todo list, stash kill function - current_list_stop = - Meteor.ui.renderList(Todos, $('#item-list'), { - selector: query, - sort: {timestamp: 1}, - render: renderItem, - events: {} - }); - }; - - // render list of lists in the left sidebar. - Meteor.ui.renderList(Lists, $('#lists'), { - sort: {name: 1}, - template: $('#list-template'), - events: { - 'click': function (evt) { - window.History.pushState({list_id: this._id}, - "Todos: " + this.name, - "/" + this._id); - }, - 'dblclick': function (evt) { - var list_elt = $(evt.currentTarget); - var input = list_elt.find('.list-name-input'); - - list_elt.addClass('editing'); - - input.val(this.name); - input.focus(); - input.select(); - - var _id = this._id; - input.onBlurOrEnter(function () { - list_elt.removeClass('editing'); - if (input.val() !== '') - Lists.update(_id, {$set: {name: input.val()}}); - }); - } - } - }); - - // construct new todo list from text box - $('#new-list').bind('keypress', function (evt) { - var text = $('#new-list').val(); - - if (evt.keyCode === 13 && text) { - var list = Lists.insert({name: text}); - $('#new-list').val(''); - window.History.pushState({list_id: list._id}, - "Todos: " + list.name, - "/" + list._id); - } - }); - - // tags and filters - - // the tag filter bar is easy to generate using a simple - // renderList() against a minimongo query. since minimongo doesn't - // support aggregate queries, construct a local collection to serve - // the same purpose, and drive the renderList() off of it. - - var LocalTags = new Mongo.Collection; - (function () { - function updateLocalTags() { - var real = _(Todos.find()).chain().pluck('tags').compact().flatten().uniq().value(); - real.unshift(null); // XXX fake tag - - var computed = _(LocalTags.find()).pluck('tag'); - - _.each(_.difference(real, computed), function (new_tag) { - LocalTags.insert({tag: new_tag}); - }); - - _.each(_.difference(computed, real), function (dead_tag) { - LocalTags.remove({tag: dead_tag}); - }); - }; - - Todos.findLive({}, { - added: function (obj, before_idx) { _.defer(updateLocalTags); }, - removed: function (id, at_idx) { _.defer(updateLocalTags); }, - changed: function (obj, at_idx) { _.defer(updateLocalTags); }, - }); - })(); - - // findLive() against the computed tag table. since we also want a - // show-all button, arrange for the computed table to always include - // a null placeholder tag, and for the template to render that as - // "Show all". always begin the user session with a null filter. - - Session.set('tag_filter', null); - - Meteor.ui.renderList(LocalTags, $('#tag-filter'), { - sort: {tag: 1}, - template: $('#tag-filter-template'), - events: { - 'click': function (evt) { - if (Session.equals('tag_filter', this.tag)) - Session.set('tag_filter', null); - else - Session.set('tag_filter', this.tag); - - setCurrentList(Session.get('list_id')); - } - } - }); - - // load list on statechange (which we drive from several places). - window.History.Adapter.bind(window, 'statechange', function () { - var state = window.History.getState(); - var list = Lists.find(state.data.list_id); - setCurrentList(list._id); - }); - - // subscribe to all available todo lists. once the inital load - // completes, navigate to the list specified by URL, if any. - Meteor.subscribe('lists', function () { - var initial_list_id = window.location.pathname.split('/')[1]; - var list; - - if (initial_list_id) { - list = Lists.find(initial_list_id); - } else { - var lists = Lists.find({}, {sort: {name: 1}, limit: 1}); - list = lists[0]; - } - - if (list) { - window.History.replaceState({list_id: list._id}, - "Todos: " + list.name, - "/" + list._id); - // replaceState doesn't always trigger statechange on reload. if - // you last reloaded the same page and the state is the same, it - // won't fire. so call this here. double calling is not great, but - // OK. - setCurrentList(list._id); - } - }); - - // subscribe to all the items in each list. no need for a callback - // here: todo items are never queried using collection.find(). - Meteor.subscribe('todos'); -}); diff --git a/examples/unfinished/todos-underscore/common.js b/examples/unfinished/todos-underscore/common.js deleted file mode 100644 index 3c18676a60..0000000000 --- a/examples/unfinished/todos-underscore/common.js +++ /dev/null @@ -1,22 +0,0 @@ -Lists = new Mongo.Collection("lists"); - -Todos = new Mongo.Collection("todos"); - -/* Schema support coming soon! - -Lists.schema({text: String}); - -Todos.schema({text: String, - done: Boolean, - tags: [String]}); -*/ - -if (Meteor.isServer) { - Meteor.publish('lists', function () { - return Lists.find(); - }); - - Meteor.publish('todos', function () { - return Todos.find(); - }); -} diff --git a/examples/unfinished/todos-underscore/main.css b/examples/unfinished/todos-underscore/main.css deleted file mode 100644 index 60e850487d..0000000000 --- a/examples/unfinished/todos-underscore/main.css +++ /dev/null @@ -1,221 +0,0 @@ -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.4em; - background: #eeeeee; - color: #333333; -} - -.ui-layout-north { - background: #dddddd; -} - -#tag-filter { - margin: 8px; -} - -#items-view { - display: none; - margin: 10px; -} - -#new-todo { - width: 466px; - font-size: 24px; - font-family: inherit; - line-height: 1.4em; - border: 0; - outline: none; - padding: 6px; - border: 1px solid #999999; - margin-left: 75px; -} - -.ui-layout-west { - padding: 10px; - border-right: solid 1px #cccccc; -} - -.ui-layout-south { - border-top: solid 1px black; - padding: 10px; - background: #cccccc; -} - -#help p { - margin: 8px; -} - -.ui-layout-center { - overflow: auto; -} - -#lists .list { - margin: 2px; - font-weight: bold; -} - -#lists .list-name .empty { - font-size: 0.9em; - font-style: italic; -} - -#lists .editing .display, -#lists .edit { - display: none; -} -#lists .editing .edit { - display: block; -} -#lists .editing input { - font-family: inherit; - margin: 0; - line-height: 1.6em; - border: 0; - outline: none; - padding: 10px 7px 0px 27px; - border: 1px solid #999999; -} -#lists .selected { - background-color: lightblue; -} - -/* todo items */ - -#item-list { - margin-top: 10px; -} - -#item-list li { - margin: 12px; - font-size: 24px; - line-height: 1.1em; - border-bottom: 1px solid #cccccc; - height: 50px; -} - -#item-list li:after { - content: "\0020"; - display: block; - height: 0; - clear: both; - overflow: hidden; - visibility: hidden; -} - -#item-list .destroy { - float: left; - width: 20px; - height: 20px; - cursor: pointer; - margin-top: 12px; - margin-left: 5px; -} - -#item-list li:hover .destroy { - background: url('/destroy.png') no-repeat 0 0; -} - -#item-list li .destroy:hover { - background-position: 0 -20px; -} - -#item-list .display { - float: left; - margin: 9px; -} - -#item-list .check { - float: left; - margin: 9px; -} - -#item-list .edit { - float: left; -} - -#item-list .todo-text { - float: left; -} - -#item-list li.editing { - padding: 0; -} - -#item-list .editing .display, -#item-list .edit { - display: none; -} - -#item-list .editing .edit { - display: block; -} - -#item-list .editing input { - width: 444px; - font-size: 24px; - font-family: inherit; - margin-left: 38px; - line-height: 1.6em; - border: 0; - outline: none; - border: 1px solid #999999; -} - -#item-list .done .todo-text { - text-decoration: line-through; - color: #777777; -} - -#item-list .item-tags { - float: right; -} - -/* tags */ - -.tag { - float: left; - - color: black; - background: #aaaaaa; - font-size: 16px; - font-weight: bold; - - cursor: pointer; - - border: 1px solid black; - border-radius: 2px; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - - padding: 1px 3px 1px 3px; - margin: 4px; -} - -.tag.addtag { - background: lightblue; - border: 1px dashed black; -} - -.tag.edittag { - display: none; -} - -.tag.selected { - background: lightblue; -} - -.tag .name { - float: left; -} - -.tag .remove { - margin-top: 5px; - margin-left: 5px; - float: left; - width: 16px; - height: 16px; - background-image: url("/close_16.png"); -} - - diff --git a/examples/unfinished/todos-underscore/public/close_16.png b/examples/unfinished/todos-underscore/public/close_16.png deleted file mode 100644 index c605b1ce94..0000000000 Binary files a/examples/unfinished/todos-underscore/public/close_16.png and /dev/null differ diff --git a/examples/unfinished/todos-underscore/public/destroy.png b/examples/unfinished/todos-underscore/public/destroy.png deleted file mode 100644 index f44a72e5f9..0000000000 Binary files a/examples/unfinished/todos-underscore/public/destroy.png and /dev/null differ diff --git a/examples/unfinished/todos-underscore/reset.css b/examples/unfinished/todos-underscore/reset.css deleted file mode 100644 index eaa88eed13..0000000000 --- a/examples/unfinished/todos-underscore/reset.css +++ /dev/null @@ -1,30 +0,0 @@ -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, font, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td { - margin: 0; - padding: 0; - border: 0; - outline: 0; - font-weight: inherit; - font-style: inherit; - font-size: 100%; - font-family: inherit; - vertical-align: baseline; -} -body { - line-height: 1; - color: black; - background: white; -} -ol, ul { - list-style: none; -} -a img { - border: none; -} - diff --git a/examples/unfinished/todos-underscore/server/bootstrap.js b/examples/unfinished/todos-underscore/server/bootstrap.js deleted file mode 100644 index e991e59b1b..0000000000 --- a/examples/unfinished/todos-underscore/server/bootstrap.js +++ /dev/null @@ -1,21 +0,0 @@ -// if the database is empty on server start, create some sample data. -Meteor.startup(function () { - if (Lists.find().length === 0) { - var list1 = Lists.insert({name: 'Things to do'}); - Todos.insert({list_id: list1._id, - text: 'Write Meteor app', tags: ['fun']}); - Todos.insert({list_id: list1._id, - text: 'Drink beer', tags: ['fun', 'yum']}); - - var list2 = Lists.insert({name: 'Places to see'}); - Todos.insert({list_id: list2._id, text: 'San Francisco', - tags: ['yum']}); - Todos.insert({list_id: list2._id, text: 'Paris', - tags: ['fun']}); - Todos.insert({list_id: list2._id, text: 'Tokyo'}); - - var list3 = Lists.insert({name: 'People to meet'}); - Todos.insert({list_id: list3._id, - text: 'All the cool kids'}); - } -}); diff --git a/meteor b/meteor index 2cc96758b3..511289b587 100755 --- a/meteor +++ b/meteor @@ -1,7 +1,6 @@ #!/usr/bin/env bash -# Note: Skip 8.12.0.0, as it has already been used. -BUNDLE_VERSION=8.11.4.5 +BUNDLE_VERSION=12.18.4.7 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. @@ -22,9 +21,9 @@ if [ "$UNAME" = "Darwin" ] ; then ARCH="x86_64" elif [ "$UNAME" = "Linux" ] ; then ARCH="$(uname -m)" - if [ "$ARCH" != "i686" -a "$ARCH" != "x86_64" ] ; then + if [ "$ARCH" != "x86_64" ] ; then echo "Unsupported architecture: $ARCH" - echo "Meteor only supports i686 and x86_64 for now." + echo "Meteor only supports x86_64" exit 1 fi fi @@ -133,14 +132,10 @@ fi # the script take precedence over $NODE_PATH; it used to be that users would # screw up their meteor installs by have a ~/node_modules -if [ "$ARCH" = "i686" ]; then - # 32-bit platforms cannot request 4GB - MAX_OLD_SPACE_SIZE=3072 -else - MAX_OLD_SPACE_SIZE=4096 -fi - +# --no-wasm-code-gc is currently necessary as a workaround for +# https://github.com/nodejs/node/issues/29767 exec "$DEV_BUNDLE/bin/node" \ - --max-old-space-size=${MAX_OLD_SPACE_SIZE} \ + --max-old-space-size=4096 \ + --no-wasm-code-gc \ ${TOOL_NODE_FLAGS} \ "$METEOR" "$@" diff --git a/meteor.bat b/meteor.bat index 6ea71fbe56..aa6b05d750 100644 --- a/meteor.bat +++ b/meteor.bat @@ -47,6 +47,7 @@ SET NODE_PATH=%~dp0\dev_bundle\lib\node_modules SET BABEL_CACHE_DIR=%~dp0\.babel-cache "%~dp0\dev_bundle\bin\node.exe" ^ + --no-wasm-code-gc ^ %TOOL_NODE_FLAGS% ^ "%~dp0\tools\index.js" %* diff --git a/packages/accounts-base/accounts_client.js b/packages/accounts-base/accounts_client.js index 17c1e38a28..92ad0303dd 100644 --- a/packages/accounts-base/accounts_client.js +++ b/packages/accounts-base/accounts_client.js @@ -435,7 +435,22 @@ export class AccountsClient extends AccountsCommon { this._pageLoadLoginCallbacks.forEach(callback => callback(attemptInfo)); this._pageLoadLoginCallbacks = []; this._pageLoadLoginAttemptInfo = attemptInfo; - }; + } + + // _startupCallback executes on onLogin callbacks + // at registration time if already logged in + // this can happen when new AccountsClient is created + // before callbacks are registered see #10157 + _startupCallback(callback) { + // Are we already logged in? + if (this.connection._userId) { + // If already logged in before handler is registered, it's safe to + // assume type is a 'resume', so we execute the callback at the end + // of the queue so that Meteor.startup can complete before any + // embedded onLogin callbacks would execute. + Meteor.setTimeout(() => callback({ type: 'resume' }), 0); + } + } /// /// LOGIN TOKENS diff --git a/packages/accounts-base/accounts_client_tests.js b/packages/accounts-base/accounts_client_tests.js index e6b2385df5..207870285d 100644 --- a/packages/accounts-base/accounts_client_tests.js +++ b/packages/accounts-base/accounts_client_tests.js @@ -1,5 +1,13 @@ const username = 'jsmith'; const password = 'password'; +const excludeField = 'excludeField'; +const defaultExcludeField = 'defaultExcludeField'; +const excludeValue = 'foo'; +const profile = { + name: username, + [excludeField]: excludeValue, + [defaultExcludeField]: excludeValue, +} const logoutAndCreateUser = (test, done, nextTests) => { Meteor.logout(() => { @@ -7,7 +15,7 @@ const logoutAndCreateUser = (test, done, nextTests) => { test.isFalse(Meteor.user()); // Setup a new test user - Accounts.createUser({ username, password }, () => { + Accounts.createUser({ username, password, profile }, () => { // Handle next tests nextTests(test, done); }); @@ -100,3 +108,32 @@ Tinytest.addAsync( }); } ); + +Tinytest.addAsync( + 'accounts - Meteor.user obeys explicit and default field selectors', + (test, done) => { + logoutAndCreateUser(test, done, () => { + Meteor.loginWithPassword(username, password, () => { + // by default, all fields should be returned + test.equal(Meteor.user().profile[excludeField], excludeValue); + + // this time we want to exclude the default fields + const options = Accounts._options; + Accounts._options = {}; + Accounts.config({defaultFieldSelector: {['profile.'+defaultExcludeField]: 0}}); + let user = Meteor.user(); + test.isUndefined(user.profile[defaultExcludeField]); + test.equal(user.profile[excludeField], excludeValue); + test.equal(user.profile.name, username); + + // this time we only want certain fields... + user = Meteor.user({fields: {'profile.name': 1}}); + test.isUndefined(user.profile[excludeField]); + test.isUndefined(user.profile[defaultExcludeField]); + test.equal(user.profile.name, username); + Accounts._options = options; + removeTestUser(done); + }); + }); + } +); diff --git a/packages/accounts-base/accounts_common.js b/packages/accounts-base/accounts_common.js index d89ed40fa1..42bf754bb9 100644 --- a/packages/accounts-base/accounts_common.js +++ b/packages/accounts-base/accounts_common.js @@ -77,13 +77,46 @@ export class AccountsCommon { throw new Error("userId method not implemented"); } + // merge the defaultFieldSelector with an existing options object + _addDefaultFieldSelector(options = {}) { + // this will be the most common case for most people, so make it quick + if (!this._options.defaultFieldSelector) return options; + + // if no field selector then just use defaultFieldSelector + if (!options.fields) return { + ...options, + fields: this._options.defaultFieldSelector, + }; + + // if empty field selector then the full user object is explicitly requested, so obey + const keys = Object.keys(options.fields); + if (!keys.length) return options; + + // if the requested fields are +ve then ignore defaultFieldSelector + // assume they are all either +ve or -ve because Mongo doesn't like mixed + if (!!options.fields[keys[0]]) return options; + + // The requested fields are -ve. + // If the defaultFieldSelector is +ve then use requested fields, otherwise merge them + const keys2 = Object.keys(this._options.defaultFieldSelector); + return this._options.defaultFieldSelector[keys2[0]] ? options : { + ...options, + fields: { + ...options.fields, + ...this._options.defaultFieldSelector, + } + } + } + /** * @summary Get the current user record, or `null` if no user is logged in. A reactive data source. * @locus Anywhere + * @param {Object} [options] + * @param {MongoFieldSpecifier} options.fields Dictionary of fields to return or exclude. */ - user() { + user(options) { const userId = this.userId(); - return userId ? this.users.findOne(userId) : null; + return userId ? this.users.findOne(userId, this._addDefaultFieldSelector(options)) : null; } // Set up config for the accounts system. Call this on both the client @@ -132,6 +165,7 @@ export class AccountsCommon { * @param {Number} options.passwordResetTokenExpirationInDays The number of days from when a link to reset password is sent until token expires and user can't reset password with the link anymore. Defaults to 3. * @param {Number} options.passwordEnrollTokenExpirationInDays The number of days from when a link to set inital password is sent until token expires and user can't set password with the link anymore. Defaults to 30. * @param {Boolean} options.ambiguousErrorMessages Return ambiguous error messages from login failures to prevent user enumeration. Defaults to false. + * @param {MongoFieldSpecifier} options.defaultFieldSelector To exclude by default large custom fields from `Meteor.user()` and `Meteor.findUserBy...()` functions when called without a field selector, and all `onLogin`, `onLoginFailure` and `onLogout` callbacks. Example: `Accounts.config({ defaultFieldSelector: { myBigArray: 0 }})`. */ config(options) { // We don't want users to accidentally only call Accounts.config on the @@ -166,7 +200,8 @@ export class AccountsCommon { // validate option keys const VALID_KEYS = ["sendVerificationEmail", "forbidClientAccountCreation", "passwordEnrollTokenExpirationInDays", "restrictCreationByEmailDomain", "loginExpirationInDays", "passwordResetTokenExpirationInDays", - "ambiguousErrorMessages", "bcryptRounds"]; + "ambiguousErrorMessages", "bcryptRounds", "defaultFieldSelector"]; + Object.keys(options).forEach(key => { if (!VALID_KEYS.includes(key)) { throw new Error(`Accounts.config: Invalid key: ${key}`); @@ -196,7 +231,10 @@ export class AccountsCommon { * as user details, connection information, etc. */ onLogin(func) { - return this._onLoginHook.register(func); + let ret = this._onLoginHook.register(func); + // call the just registered callback if already logged in + this._startupCallback(ret.callback); + return ret; } /** @@ -285,6 +323,9 @@ export class AccountsCommon { } return new Date() > (new Date(when) - minLifetimeMs); } + + // No-op on the server, overridden on the client. + _startupCallback(callback) {} } // Note that Accounts is defined separately in accounts_client.js and @@ -301,8 +342,10 @@ Meteor.userId = () => Accounts.userId(); * @summary Get the current user record, or `null` if no user is logged in. A reactive data source. * @locus Anywhere but publish functions * @importFromPackage meteor + * @param {Object} [options] + * @param {MongoFieldSpecifier} options.fields Dictionary of fields to return or exclude. */ -Meteor.user = () => Accounts.user(); +Meteor.user = (options) => Accounts.user(options); // how long (in days) until a login token expires const DEFAULT_LOGIN_EXPIRATION_DAYS = 90; diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index 37da4975af..e9421290f6 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -37,6 +37,18 @@ export class AccountsServer extends AccountsCommon { loggedInUser: ['profile', 'username', 'emails'], otherUsers: ['profile', 'username'] }; + + // use object to keep the reference when used in functions + // where _defaultPublishFields is destructured into lexical scope + // for publish callbacks that need `this` + this._defaultPublishFields = { + projection: { + profile: 1, + username: 1, + emails: 1, + } + }; + this._initServerPublications(); // connectionId -> {connection, loginToken} @@ -71,9 +83,9 @@ export class AccountsServer extends AccountsCommon { resetPassword: token => Meteor.absoluteUrl(`#/reset-password/${token}`), verifyEmail: token => Meteor.absoluteUrl(`#/verify-email/${token}`), enrollAccount: token => Meteor.absoluteUrl(`#/enroll-account/${token}`), - } + }; - this.addDefaultRateLimit() + this.addDefaultRateLimit(); } /// @@ -117,6 +129,19 @@ export class AccountsServer extends AccountsCommon { this._validateNewUserHooks.push(func); } + /** + * @summary Validate login from external service + * @locus Server + * @param {Function} func Called whenever login/user creation from external service is attempted. Login or user creation based on this login can be aborted by passing a falsy value or throwing an exception. + */ + beforeExternalLogin(func) { + if (this._beforeExternalLoginHook) { + throw new Error("Can only call beforeExternalLogin once"); + } + + this._beforeExternalLoginHook = func; + } + /// /// CREATE USER HOOKS /// @@ -188,8 +213,10 @@ export class AccountsServer extends AccountsCommon { }; _successfulLogout(connection, userId) { - const user = userId && this.users.findOne(userId); + // don't fetch the user object unless there are some callbacks registered + let user; this._onLogoutHook.each(callback => { + if (!user && userId) user = this.users.findOne(userId, {fields: this._options.defaultFieldSelector}); callback({ user, connection }); return true; }); @@ -317,7 +344,7 @@ export class AccountsServer extends AccountsCommon { let user; if (result.userId) - user = this.users.findOne(result.userId); + user = this.users.findOne(result.userId, {fields: this._options.defaultFieldSelector}); const attempt = { type: result.type || "unknown", @@ -398,7 +425,7 @@ export class AccountsServer extends AccountsCommon { }; if (result.userId) { - attempt.user = this.users.findOne(result.userId); + attempt.user = this.users.findOne(result.userId, {fields: this._options.defaultFieldSelector}); } this._validateLogin(methodInvocation.connection, attempt); @@ -676,7 +703,7 @@ export class AccountsServer extends AccountsCommon { _initServerPublications() { // Bring into lexical scope for publish callbacks that need `this` - const { users, _autopublishFields } = this; + const { users, _autopublishFields, _defaultPublishFields } = this; // Publish all login service configuration fields other than secret. this._server.publish("meteor.loginServiceConfiguration", () => { @@ -684,22 +711,22 @@ export class AccountsServer extends AccountsCommon { return ServiceConfiguration.configurations.find({}, {fields: {secret: 0}}); }, {is_auto: true}); // not techincally autopublish, but stops the warning. - // Publish the current user's record to the client. - this._server.publish(null, function () { - if (this.userId) { - return users.find({ - _id: this.userId - }, { - fields: { - profile: 1, - username: 1, - emails: 1 - } - }); - } else { - return null; - } - }, /*suppress autopublish warning*/{is_auto: true}); + // Use Meteor.startup to give other packages a chance to call + // setDefaultPublishFields. + Meteor.startup(() => { + // Publish the current user's record to the client. + this._server.publish(null, function () { + if (this.userId) { + return users.find({ + _id: this.userId + }, { + fields: _defaultPublishFields.projection, + }); + } else { + return null; + } + }, /*suppress autopublish warning*/{is_auto: true}); + }); // Use Meteor.startup to give other packages a chance to call // addAutopublishFields. @@ -747,6 +774,14 @@ export class AccountsServer extends AccountsCommon { this._autopublishFields.otherUsers, opts.forOtherUsers); }; + // Replaces the fields to be automatically + // published when the user logs in + // + // @param {MongoFieldSpecifier} fields Dictionary of fields to return or exclude. + setDefaultPublishFields(fields) { + this._defaultPublishFields.projection = fields; + }; + /// /// ACCOUNT DATA /// @@ -785,15 +820,10 @@ export class AccountsServer extends AccountsCommon { // {token, when} => {hashedToken, when} _hashStampedToken(stampedToken) { - const hashedStampedToken = Object.keys(stampedToken).reduce( - (prev, key) => key === 'token' ? - prev : - { ...prev, [key]: stampedToken[key] }, - {}, - ) + const { token, ...hashedStampedToken } = stampedToken; return { ...hashedStampedToken, - hashedToken: this._hashLoginToken(stampedToken.token) + hashedToken: this._hashLoginToken(token) }; }; @@ -900,7 +930,7 @@ export class AccountsServer extends AccountsCommon { // The onClose callback for the connection takes care of // cleaning up the observe handle and any other state we have // lying around. - }); + }, { nonMutatingCallbacks: true }); // If the user ran another login or logout command we were waiting for the // defer or added to fire (ie, another call to _setLoginToken occurred), @@ -1150,9 +1180,9 @@ export class AccountsServer extends AccountsCommon { Meteor.startup(() => { this.users.find({ "services.resume.haveLoginTokensToDelete": true - }, { + }, {fields: { "services.resume.loginTokensToDelete": 1 - }).forEach(user => { + }}).forEach(user => { this._deleteSavedTokensForUser( user._id, user.services.resume.loginTokensToDelete @@ -1212,7 +1242,12 @@ export class AccountsServer extends AccountsCommon { selector[serviceIdKey] = serviceData.id; } - let user = this.users.findOne(selector); + let user = this.users.findOne(selector, {fields: this._options.defaultFieldSelector}); + + // Before continuing, run user hook to see if we should continue + if (this._beforeExternalLoginHook && !this._beforeExternalLoginHook(serviceName, serviceData, user)) { + throw new Meteor.Error(403, "Login forbidden"); + } // When creating a new user we pass through all options. When updating an // existing user, by default we only process/pass through the serviceData @@ -1322,7 +1357,8 @@ const defaultResumeLoginHandler = (accounts, options) => { // sending the unhashed token to the database in a query if we don't // need to. let user = accounts.users.findOne( - {"services.resume.loginTokens.hashedToken": hashedToken}); + {"services.resume.loginTokens.hashedToken": hashedToken}, + {fields: {"services.resume.loginTokens.$": 1}}); if (! user) { // If we didn't find the hashed login token, try also looking for @@ -1335,7 +1371,9 @@ const defaultResumeLoginHandler = (accounts, options) => { {"services.resume.loginTokens.hashedToken": hashedToken}, {"services.resume.loginTokens.token": options.resume} ] - }); + }, + // Note: Cannot use ...loginTokens.$ positional operator with $or query. + {fields: {"services.resume.loginTokens": 1}}); } if (! user) @@ -1515,9 +1553,9 @@ function defaultValidateNewUserHook(user) { emailIsGood = user.emails.reduce( (prev, email) => prev || this._testEmailDomain(email.address), false ); - } else if (user.services && user.services.length > 0) { + } else if (user.services && Object.values(user.services).length > 0) { // Find any email of any service and check it - emailIsGood = user.services.reduce( + emailIsGood = Object.values(user.services).reduce( (prev, service) => service.email && this._testEmailDomain(service.email), false, ); @@ -1560,18 +1598,18 @@ const setupUsersCollection = users => { }); /// DEFAULT INDEXES ON USERS - users._ensureIndex('username', {unique: 1, sparse: 1}); - users._ensureIndex('emails.address', {unique: 1, sparse: 1}); + users._ensureIndex('username', { unique: true, sparse: true }); + users._ensureIndex('emails.address', { unique: true, sparse: true }); users._ensureIndex('services.resume.loginTokens.hashedToken', - {unique: 1, sparse: 1}); + { unique: true, sparse: true }); users._ensureIndex('services.resume.loginTokens.token', - {unique: 1, sparse: 1}); + { unique: true, sparse: true }); // For taking care of logoutOtherClients calls that crashed before the // tokens were deleted. users._ensureIndex('services.resume.haveLoginTokensToDelete', - { sparse: 1 }); + { sparse: true }); // For expiring login tokens - users._ensureIndex("services.resume.loginTokens.when", { sparse: 1 }); + users._ensureIndex("services.resume.loginTokens.when", { sparse: true }); // For expiring password tokens - users._ensureIndex('services.password.reset.when', { sparse: 1 }); + users._ensureIndex('services.password.reset.when', { sparse: true }); }; diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index fb4165a96c..fa52871a21 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -57,6 +57,15 @@ Tinytest.add('accounts - config - default token lifetime', test => { Accounts._options = options; }); +Tinytest.add('accounts - config - defaultFieldSelector', test => { + const options = Accounts._options; + Accounts._options = {}; + const setValue = {bigArray: 0}; + Accounts.config({defaultFieldSelector: setValue}); + test.equal(Accounts._options.defaultFieldSelector, setValue); + Accounts._options = options; +}); + const idsInValidateNewUser = {}; Accounts.validateNewUser(user => { idsInValidateNewUser[user._id] = true; @@ -451,6 +460,109 @@ Tinytest.add( } ); +Tinytest.add( + 'accounts - hook callbacks obey options.defaultFieldSelector', + test => { + const ignoreFieldName = "bigArray"; + const userId = Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1] }); + const stampedToken = Accounts._generateStampedLoginToken(); + Accounts._insertLoginToken(userId, stampedToken); + const options = Accounts._options; + Accounts._options = {}; + Accounts.config({defaultFieldSelector: {[ignoreFieldName]: 0}}); + test.equal(Accounts._options.defaultFieldSelector, {[ignoreFieldName]: 0}, 'defaultFieldSelector'); + + const validateStopper = Accounts.validateLoginAttempt(attempt => { + test.isUndefined(allowLogin != 'bogus' ? attempt.user[ignoreFieldName] : attempt.user, "validateLoginAttempt") + return allowLogin; + }); + const onLoginStopper = Accounts.onLogin(attempt => + test.isUndefined(attempt.user[ignoreFieldName], "onLogin") + ); + const onLogoutStopper = Accounts.onLogout(logoutContext => + test.isUndefined(logoutContext.user[ignoreFieldName], "onLogout") + ); + const onLoginFailureStopper = Accounts.onLoginFailure(attempt => + test.isUndefined(allowLogin != 'bogus' ? attempt.user[ignoreFieldName] : attempt.user, "onLoginFailure") + ); + + const conn = DDP.connect(Meteor.absoluteUrl()); + + // test a new connection + let allowLogin = true; + conn.call('login', { resume: stampedToken.token }); + + // Now that the user is logged in on the connection, Meteor.userId() should + // return that user. + conn.call('login', { resume: stampedToken.token }); + + // Trigger onLoginFailure callbacks, this will not include the user object + allowLogin = 'bogus'; + test.throws(() => conn.call('login', { resume: "bogus" }), '403'); + + // test a forced login fail which WILL include the user object + allowLogin = false; + test.throws(() => conn.call('login', { resume: stampedToken.token }), '403'); + + // Trigger onLogout callbacks + const onLogoutExpectedUserId = userId; + conn.call('logout'); + + Accounts._options = options; + conn.disconnect(); + validateStopper.stop(); + onLoginStopper.stop(); + onLogoutStopper.stop(); + onLoginFailureStopper.stop(); + } +); + +Tinytest.add( + 'accounts - Meteor.user() obeys options.defaultFieldSelector', + test => { + const ignoreFieldName = "bigArray"; + const userId = Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1] }); + const stampedToken = Accounts._generateStampedLoginToken(); + Accounts._insertLoginToken(userId, stampedToken); + const options = Accounts._options; + + // stub Meteor.userId() so it works outside methods and returns the correct user: + const origAccountsUserId = Accounts.userId; + Accounts.userId = () => userId; + + Accounts._options = {}; + + // test the field is included by default + let user = Meteor.user(); + test.isNotUndefined(user[ignoreFieldName], 'included by default'); + + // test the field is excluded + Accounts.config({defaultFieldSelector: {[ignoreFieldName]: 0}}); + user = Meteor.user(); + test.isUndefined(user[ignoreFieldName], 'excluded'); + user = Meteor.user({}); + test.isUndefined(user[ignoreFieldName], 'excluded {}'); + + // test the field can still be retrieved if required + user = Meteor.user({fields: {[ignoreFieldName]: 1}}); + test.isNotUndefined(user[ignoreFieldName], 'field can be retrieved'); + test.isUndefined(user.username, 'field can be retrieved username'); + + // test a combined negative field specifier + user = Meteor.user({fields: {username: 0}}); + test.isUndefined(user[ignoreFieldName], 'combined field selector'); + test.isUndefined(user.username, 'combined field selector username'); + + // test an explicit request for the full user object + user = Meteor.user({fields: {}}); + test.isNotUndefined(user[ignoreFieldName], 'full selector'); + test.isNotUndefined(user.username, 'full selector username'); + + Accounts._options = options; + Accounts.userId = origAccountsUserId; + } +); + Tinytest.add( 'accounts - verify onExternalLogin hook can update oauth user profiles', test => { @@ -461,16 +573,24 @@ Tinytest.add( 'facebook', { id: facebookId }, { profile: { foo: 1 } }, - ).id; + ).userId; + const ignoreFieldName = "bigArray"; + const c = Meteor.users.update(uid1, {$set: {[ignoreFieldName]: [1]}}); let users = Meteor.users.find({ 'services.facebook.id': facebookId }).fetch(); test.length(users, 1); test.equal(users[0].profile.foo, 1); + test.isNotUndefined(users[0][ignoreFieldName], 'ignoreField - before limit fields'); // Verify user profile data can be modified using the onExternalLogin // hook, for existing users. - Accounts.onExternalLogin((options) => { + // Also verify that the user object is filtered by _options.defaultFieldSelector + const accountsOptions = Accounts._options; + Accounts._options = {}; + Accounts.config({defaultFieldSelector: {[ignoreFieldName]: 0}}); + Accounts.onExternalLogin((options, user) => { options.profile.foo = 2; + test.isUndefined(users[ignoreFieldName], 'ignoreField - after limit fields'); return options; }); Accounts.updateOrCreateUserFromExternalService( @@ -478,9 +598,11 @@ Tinytest.add( { id: facebookId }, { profile: { foo: 1 } }, ); + // test.isUndefined(users[0][ignoreFieldName], 'ignoreField - fields limited'); users = Meteor.users.find({ 'services.facebook.id': facebookId }).fetch(); test.length(users, 1); test.equal(users[0].profile.foo, 2); + test.isNotUndefined(users[0][ignoreFieldName], 'ignoreField - still there'); // Verify user profile data can be modified using the onExternalLogin // hook, for new users. @@ -489,7 +611,7 @@ Tinytest.add( 'facebook', { id: facebookId }, { profile: { foo: 3 } }, - ).id; + ).userId; users = Meteor.users.find({ 'services.facebook.id': facebookId }).fetch(); test.length(users, 1); test.equal(users[0].profile.foo, 2); @@ -498,5 +620,47 @@ Tinytest.add( Meteor.users.remove(uid1); Meteor.users.remove(uid2); Accounts._onExternalLoginHook = null; + Accounts._options = accountsOptions; } ); + +Tinytest.add( + 'accounts - verify beforeExternalLogin hook can stop user login', + test => { + // Verify user data is saved properly when not using the + // beforeExternalLogin hook. + let facebookId = Random.id(); + const uid1 = Accounts.updateOrCreateUserFromExternalService( + 'facebook', + { id: facebookId }, + { profile: { foo: 1 } }, + ).userId; + const ignoreFieldName = "bigArray"; + const c = Meteor.users.update(uid1, {$set: {[ignoreFieldName]: [1]}}); + let users = + Meteor.users.find({ 'services.facebook.id': facebookId }).fetch(); + test.length(users, 1); + test.equal(users[0].profile.foo, 1); + test.isNotUndefined(users[0][ignoreFieldName], 'ignoreField - before limit fields'); + + // Verify that when beforeExternalLogin returns false + // that an error throws and user is not saved + Accounts.beforeExternalLogin((serviceName, serviceData, user) => { + // Check that we get the correct data + test.equal(serviceName, 'facebook'); + test.equal(serviceData, { id: facebookId }); + test.equal(user._id, uid1); + return false + }); + + test.throws(() => Accounts.updateOrCreateUserFromExternalService( + 'facebook', + { id: facebookId }, + { profile: { foo: 1 } }, + )); + + // Cleanup + Meteor.users.remove(uid1); + Accounts._beforeExternalLoginHook = null; + } +); diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 687cb8154c..5ea398b8fe 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "A user account system", - version: "1.4.3", + version: "1.7.1", }); Package.onUse(api => { @@ -27,7 +27,7 @@ Package.onUse(api => { // If the 'blaze' package is loaded, we'll define some helpers like // {{currentUser}}. If not, no biggie. - api.use('blaze', 'client', {weak: true}); + api.use('blaze@2.3.4', 'client', {weak: true}); // Allow us to detect 'autopublish', and publish some Meteor.users fields if // it's loaded. diff --git a/packages/accounts-github/package.js b/packages/accounts-github/package.js index d2a25333a5..969d33e692 100644 --- a/packages/accounts-github/package.js +++ b/packages/accounts-github/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Login service for Github accounts', - version: '1.4.2', + version: '1.4.3', }); Package.onUse(api => { diff --git a/packages/accounts-google/google.js b/packages/accounts-google/google.js index 7f2b0b0c51..4cb72d3b23 100644 --- a/packages/accounts-google/google.js +++ b/packages/accounts-google/google.js @@ -50,7 +50,7 @@ if (Meteor.isClient) { Google.whitelistedFields.filter( field => field !== 'email' && field !== 'verified_email' ).map( - subfield => `services.google${subfield}` + subfield => `services.google.${subfield}` ), }); } diff --git a/packages/accounts-google/package.js b/packages/accounts-google/package.js index 31a383a3cb..7ec6309d8c 100644 --- a/packages/accounts-google/package.js +++ b/packages/accounts-google/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Login service for Google accounts", - version: "1.3.2", + version: "1.3.3", }); Package.onUse(api => { diff --git a/packages/accounts-oauth/oauth_common.js b/packages/accounts-oauth/oauth_common.js index 05f6307331..cbf1273525 100644 --- a/packages/accounts-oauth/oauth_common.js +++ b/packages/accounts-oauth/oauth_common.js @@ -15,7 +15,7 @@ Accounts.oauth.registerService = name => { // so this should be a unique index. You might want to add indexes for other // fields returned by your service (eg services.github.login) but you can do // that in your app. - Meteor.users._ensureIndex(`services.${name}.id`, {unique: 1, sparse: 1}); + Meteor.users._ensureIndex(`services.${name}.id`, {unique: true, sparse: true}); } }; diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index 484fe7e125..fb61a4f77e 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.1.16", + version: "1.2.0", }); Package.onUse(api => { diff --git a/packages/accounts-password/.gitignore b/packages/accounts-password/.gitignore index 677a6fc263..3ccf4f8cd6 100644 --- a/packages/accounts-password/.gitignore +++ b/packages/accounts-password/.gitignore @@ -1 +1,2 @@ .build* +.versions diff --git a/packages/accounts-password/email_tests_setup.js b/packages/accounts-password/email_tests_setup.js index 32c080a4a5..346390e63e 100644 --- a/packages/accounts-password/email_tests_setup.js +++ b/packages/accounts-password/email_tests_setup.js @@ -20,7 +20,7 @@ Accounts.emailTemplates.headers = { 'My-Custom-Header' : 'Cool' }; -EmailTest.hookSend(options => { +Email.hookSend(options => { const { to } = options; if (!to || !to.toUpperCase().includes('INTERCEPT')) { return true; // go ahead and send diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 5d614113d5..ced7e3ab8a 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: "1.5.1" + version: "1.6.3" }); Package.onUse(api => { diff --git a/packages/accounts-password/password_client.js b/packages/accounts-password/password_client.js index 022c1cdf65..871393127a 100644 --- a/packages/accounts-password/password_client.js +++ b/packages/accounts-password/password_client.js @@ -20,7 +20,7 @@ const reportError = (error, callback) => { /** * @summary Log the user in with a password. * @locus Client - * @param {Object | String} user + * @param {Object | String} selector * Either a string interpreted as a username or an email; or an object with a * single key: `email`, `username` or `id`. Username or email match in a case * insensitive manner. diff --git a/packages/accounts-password/password_server.js b/packages/accounts-password/password_server.js index dcb8258dc1..2b9a9dbe45 100644 --- a/packages/accounts-password/password_server.js +++ b/packages/accounts-password/password_server.js @@ -5,7 +5,7 @@ const bcryptHash = Meteor.wrapAsync(bcrypt.hash); const bcryptCompare = Meteor.wrapAsync(bcrypt.compare); // Utility for grabbing user -const getUserById = id => Meteor.users.findOne(id); +const getUserById = (id, options) => Meteor.users.findOne(id, Accounts._addDefaultFieldSelector(options)); // User records have a 'services.password.bcrypt' field on them to hold // their hashed passwords (unless they have a 'services.password.srp' @@ -73,6 +73,9 @@ const getRoundsFromBcryptHash = hash => { // properties `digest` and `algorithm` (in which case we bcrypt // `password.digest`). // +// The user parameter needs at least user._id and user.services +Accounts._checkPasswordUserFields = {_id: 1, services: 1}; +// Accounts._checkPassword = (user, password) => { const result = { userId: user._id @@ -120,12 +123,14 @@ const handleError = (msg, throwError = true) => { /// LOGIN /// -Accounts._findUserByQuery = query => { +Accounts._findUserByQuery = (query, options) => { let user = null; if (query.id) { - user = getUserById(query.id); + // default field selector is added within getUserById() + user = getUserById(query.id, options); } else { + options = Accounts._addDefaultFieldSelector(options); let fieldName; let fieldValue; if (query.username) { @@ -139,11 +144,11 @@ Accounts._findUserByQuery = query => { } let selector = {}; selector[fieldName] = fieldValue; - user = Meteor.users.findOne(selector); + user = Meteor.users.findOne(selector, options); // If user is not found, try a case insensitive lookup if (!user) { selector = selectorForFastCaseInsensitiveLookup(fieldName, fieldValue); - const candidateUsers = Meteor.users.find(selector).fetch(); + const candidateUsers = Meteor.users.find(selector, options).fetch(); // No match if multiple candidates are found if (candidateUsers.length === 1) { user = candidateUsers[0]; @@ -161,11 +166,13 @@ Accounts._findUserByQuery = query => { * insensitive search, it returns null. * @locus Server * @param {String} username The username to look for + * @param {Object} [options] + * @param {MongoFieldSpecifier} options.fields Dictionary of fields to return or exclude. * @returns {Object} A user if found, else null * @importFromPackage accounts-base */ -Accounts.findUserByUsername = - username => Accounts._findUserByQuery({ username }); +Accounts.findUserByUsername = + (username, options) => Accounts._findUserByQuery({ username }, options); /** * @summary Finds the user with the specified email. @@ -174,10 +181,13 @@ Accounts.findUserByUsername = * insensitive search, it returns null. * @locus Server * @param {String} email The email address to look for + * @param {Object} [options] + * @param {MongoFieldSpecifier} options.fields Dictionary of fields to return or exclude. * @returns {Object} A user if found, else null * @importFromPackage accounts-base */ -Accounts.findUserByEmail = email => Accounts._findUserByQuery({ email }); +Accounts.findUserByEmail = + (email, options) => Accounts._findUserByQuery({ email }, options); // Generates a MongoDB selector that can be used to perform a fast case // insensitive lookup for the given fieldName and string. Since MongoDB does @@ -230,7 +240,13 @@ const checkForCaseInsensitiveDuplicates = (fieldName, displayName, fieldValue, o if (fieldValue && !skipCheck) { const matchedUsers = Meteor.users.find( - selectorForFastCaseInsensitiveLookup(fieldName, fieldValue)).fetch(); + selectorForFastCaseInsensitiveLookup(fieldName, fieldValue), + { + fields: {_id: 1}, + // we only need a maximum of 2 users for the logic below to work + limit: 2, + } + ).fetch(); if (matchedUsers.length > 0 && // If we don't have a userId yet, any match we find is a duplicate @@ -289,7 +305,10 @@ Accounts.registerLoginHandler("password", options => { }); - const user = Accounts._findUserByQuery(options.user); + const user = Accounts._findUserByQuery(options.user, {fields: { + services: 1, + ...Accounts._checkPasswordUserFields, + }}); if (!user) { handleError("User not found"); } @@ -358,7 +377,10 @@ Accounts.registerLoginHandler("password", options => { password: passwordValidator }); - const user = Accounts._findUserByQuery(options.user); + const user = Accounts._findUserByQuery(options.user, {fields: { + services: 1, + ...Accounts._checkPasswordUserFields, + }}); if (!user) { handleError("User not found"); } @@ -419,7 +441,9 @@ Accounts.setUsername = (userId, newUsername) => { check(userId, NonEmptyString); check(newUsername, NonEmptyString); - const user = getUserById(userId); + const user = getUserById(userId, {fields: { + username: 1, + }}); if (!user) { handleError("User not found"); } @@ -465,7 +489,10 @@ Meteor.methods({changePassword: function (oldPassword, newPassword) { throw new Meteor.Error(401, "Must be logged in"); } - const user = getUserById(this.userId); + const user = getUserById(this.userId, {fields: { + services: 1, + ...Accounts._checkPasswordUserFields, + }}); if (!user) { handleError("User not found"); } @@ -523,7 +550,7 @@ Meteor.methods({changePassword: function (oldPassword, newPassword) { Accounts.setPassword = (userId, newPlaintextPassword, options) => { options = { logout: true , ...options }; - const user = getUserById(userId); + const user = getUserById(userId, {fields: {_id: 1}}); if (!user) { throw new Meteor.Error(403, "User not found"); } @@ -556,7 +583,7 @@ const pluckAddresses = (emails = []) => emails.map(email => email.address); Meteor.methods({forgotPassword: options => { check(options, {email: String}); - const user = Accounts.findUserByEmail(options.email); + const user = Accounts.findUserByEmail(options.email, {fields: {emails: 1}}); if (!user) { handleError("User not found"); } @@ -581,6 +608,8 @@ Meteor.methods({forgotPassword: options => { */ Accounts.generateResetToken = (userId, email, reason, extraTokenData) => { // Make sure the user exists, and email is one of their addresses. + // Don't limit the fields in the user object since the user is returned + // by the function and some other fields might be used elsewhere. const user = getUserById(userId); if (!user) { handleError("Can't find user"); @@ -592,7 +621,7 @@ Accounts.generateResetToken = (userId, email, reason, extraTokenData) => { } // make sure we have a valid email - if (!email || + if (!email || !(pluckAddresses(user.emails).includes(email))) { handleError("No such email for user."); } @@ -638,6 +667,8 @@ Accounts.generateResetToken = (userId, email, reason, extraTokenData) => { */ Accounts.generateVerificationToken = (userId, email, extraTokenData) => { // Make sure the user exists, and email is one of their addresses. + // Don't limit the fields in the user object since the user is returned + // by the function and some other fields might be used elsewhere. const user = getUserById(userId); if (!user) { handleError("Can't find user"); @@ -654,7 +685,7 @@ Accounts.generateVerificationToken = (userId, email, extraTokenData) => { } // make sure we have a valid email - if (!email || + if (!email || !(pluckAddresses(user.emails).includes(email))) { handleError("No such email for user."); } @@ -738,6 +769,9 @@ Accounts.sendResetPasswordEmail = (userId, email, extraTokenData) => { const url = Accounts.urls.resetPassword(token); const options = Accounts.generateOptionsForEmail(realEmail, user, url, 'resetPassword'); Email.send(options); + if (Meteor.isDevelopment) { + console.log(`\nReset password URL: ${url}`); + } return {email: realEmail, user, token, url, options}; }; @@ -764,6 +798,9 @@ Accounts.sendEnrollmentEmail = (userId, email, extraTokenData) => { const url = Accounts.urls.enrollAccount(token); const options = Accounts.generateOptionsForEmail(realEmail, user, url, 'enrollAccount'); Email.send(options); + if (Meteor.isDevelopment) { + console.log(`\nEnrollment email URL: ${url}`); + } return {email: realEmail, user, token, url, options}; }; @@ -782,8 +819,13 @@ Meteor.methods({resetPassword: function (...args) { check(token, String); check(newPassword, passwordValidator); - const user = Meteor.users.findOne({ - "services.password.reset.token": token}); + const user = Meteor.users.findOne( + {"services.password.reset.token": token}, + {fields: { + services: 1, + emails: 1, + }} + ); if (!user) { throw new Meteor.Error(403, "Token expired"); } @@ -873,6 +915,9 @@ Accounts.sendVerificationEmail = (userId, email, extraTokenData) => { const url = Accounts.urls.verifyEmail(token); const options = Accounts.generateOptionsForEmail(realEmail, user, url, 'verifyEmail'); Email.send(options); + if (Meteor.isDevelopment) { + console.log(`\nVerification email URL: ${url}`); + } return {email: realEmail, user, token, url, options}; }; @@ -889,7 +934,12 @@ Meteor.methods({verifyEmail: function (...args) { check(token, String); const user = Meteor.users.findOne( - {'services.email.verificationTokens.token': token}); + {'services.email.verificationTokens.token': token}, + {fields: { + services: 1, + emails: 1, + }} + ); if (!user) throw new Meteor.Error(403, "Verify email link expired"); @@ -948,7 +998,7 @@ Accounts.addEmail = (userId, newEmail, verified) => { verified = false; } - const user = getUserById(userId); + const user = getUserById(userId, {fields: {emails: 1}}); if (!user) throw new Meteor.Error(403, "User not found"); @@ -963,7 +1013,7 @@ Accounts.addEmail = (userId, newEmail, verified) => { const caseInsensitiveRegExp = new RegExp(`^${Meteor._escapeRegExp(newEmail)}$`, 'i'); - const didUpdateOwnEmail = user.emails.reduce( + const didUpdateOwnEmail = (user.emails || []).reduce( (prev, email) => { if (caseInsensitiveRegExp.test(email.address)) { Meteor.users.update({ @@ -977,7 +1027,7 @@ Accounts.addEmail = (userId, newEmail, verified) => { } else { return prev; } - }, + }, false ); @@ -1030,7 +1080,7 @@ Accounts.removeEmail = (userId, email) => { check(userId, NonEmptyString); check(email, NonEmptyString); - const user = getUserById(userId); + const user = getUserById(userId, {fields: {_id: 1}}); if (!user) throw new Meteor.Error(403, "User not found"); @@ -1105,18 +1155,7 @@ Meteor.methods({createUser: function (...args) { error: new Meteor.Error(403, "Signups forbidden") }; - // Create user. result contains id and token. - const userId = createUser(options); - // safety belt. createUser is supposed to throw on error. send 500 error - // instead of sending a verification email with empty userid. - if (! userId) - throw new Error("createUser failed to insert new user"); - - // If `Accounts._options.sendVerificationEmail` is set, register - // a token to verify the user's primary email, and send it to - // that address. - if (options.email && Accounts._options.sendVerificationEmail) - Accounts.sendVerificationEmail(userId, options.email); + const userId = Accounts.createUserVerifyingEmail(options); // client gets logged in as the new user afterwards. return {userId: userId}; @@ -1124,6 +1163,34 @@ Meteor.methods({createUser: function (...args) { ); }}); +// Create user directly on the server. +// +// Differently from Accounts.createUser(), this evaluates the Accounts package +// configurations and send a verification email if the user has been registered +// successfully. +Accounts.createUserVerifyingEmail = (options) => { + options = { ...options }; + // Create user. result contains id and token. + const userId = createUser(options); + // safety belt. createUser is supposed to throw on error. send 500 error + // instead of sending a verification email with empty userid. + if (! userId) + throw new Error("createUser failed to insert new user"); + + // If `Accounts._options.sendVerificationEmail` is set, register + // a token to verify the user's primary email, and send it to + // that address. + if (options.email && Accounts._options.sendVerificationEmail) { + if (options.password) { + Accounts.sendVerificationEmail(userId, options.email); + } else { + Accounts.sendEnrollmentEmail(userId, options.email); + } + } + + return userId; +}; + // Create user directly on the server. // // Unlike the client version, this does not log you in as this user @@ -1151,6 +1218,6 @@ Accounts.createUser = (options, callback) => { /// PASSWORD-SPECIFIC INDEXES ON USERS /// Meteor.users._ensureIndex('services.email.verificationTokens.token', - {unique: 1, sparse: 1}); + { unique: true, sparse: true }); Meteor.users._ensureIndex('services.password.reset.token', - {unique: 1, sparse: 1}); + { unique: true, sparse: true }); diff --git a/packages/accounts-password/password_tests.js b/packages/accounts-password/password_tests.js index 43ec4dc1a1..2776efbb0d 100644 --- a/packages/accounts-password/password_tests.js +++ b/packages/accounts-password/password_tests.js @@ -1700,10 +1700,12 @@ if (Meteor.isServer) (() => { ) // We should be able to change the username - Tinytest.add("passwords - change username", test => { + Tinytest.add("passwords - change username & findUserByUsername", test => { const username = Random.id(); + const ignoreFieldName = "profile"; const userId = Accounts.createUser({ - username: username + username, + [ignoreFieldName]: {name: 'foo'}, }); test.isTrue(userId); @@ -1714,7 +1716,27 @@ if (Meteor.isServer) (() => { test.equal(Accounts._findUserByQuery({id: userId}).username, newUsername); // Test findUserByUsername as well while we're here - test.equal(Accounts.findUserByUsername(newUsername)._id, userId); + let user = Accounts.findUserByUsername(newUsername); + test.equal(user._id, userId, 'userId - ignore'); + test.isNotUndefined(user[ignoreFieldName], 'field - no ignore'); + + // Test default field selector + const options = Accounts._options; + Accounts._options = {defaultFieldSelector: {[ignoreFieldName]: 0}}; + user = Accounts.findUserByUsername(newUsername); + test.equal(user.username, newUsername, 'username - default ignore'); + test.isUndefined(user[ignoreFieldName], 'field - default ignore'); + + // Test default field selector over-ride + user = Accounts.findUserByUsername(newUsername, { + fields: { + [ignoreFieldName]: 1 + } + }); + test.isUndefined(user.username, 'username - override'); + test.isNotUndefined(user[ignoreFieldName], 'field - override'); + + Accounts._options = options; }); Tinytest.add("passwords - change username to a new one only differing " + @@ -1760,10 +1782,14 @@ if (Meteor.isServer) (() => { user2OriginalUsername); }); - Tinytest.add("passwords - add email", test => { + Tinytest.add("passwords - add email & findUserByEmail", test => { const origEmail = `${Random.id()}@turing.com`; + const username = Random.id(); + const ignoreFieldName = "profile"; const userId = Accounts.createUser({ - email: origEmail + email: origEmail, + username, + [ignoreFieldName]: {name: 'foo'}, }); const newEmail = `${Random.id()}@turing.com`; @@ -1779,7 +1805,41 @@ if (Meteor.isServer) (() => { ]); // Test findUserByEmail as well while we're here - test.equal(Accounts.findUserByEmail(origEmail)._id, userId); + let user = Accounts.findUserByEmail(origEmail); + test.equal(user._id, userId); + test.isNotUndefined(user[ignoreFieldName], 'field - no ignore'); + + // Test default field selector + const options = Accounts._options; + Accounts._options = {defaultFieldSelector: {[ignoreFieldName]: 0}}; + user = Accounts.findUserByEmail(origEmail); + test.equal(user.username, username, 'username - default ignore'); + test.isUndefined(user[ignoreFieldName], 'field - default ignore'); + + // Test default field selector over-ride + user = Accounts.findUserByEmail(origEmail, { + fields: { + [ignoreFieldName]: 1 + } + }); + test.equal(user._id, userId, 'userId - override'); + test.isUndefined(user.username, 'username - override'); + test.isNotUndefined(user[ignoreFieldName], 'field - override'); + + Accounts._options = options; + }); + + Tinytest.add("passwords - add email when user has not an existing email", test => { + const userId = Accounts.createUser({ + username: `user${Random.id()}` + }); + + const newEmail = `${Random.id()}@turing.com`; + Accounts.addEmail(userId, newEmail); + + test.equal(Accounts._findUserByQuery({id: userId}).emails, [ + { address: newEmail, verified: false }, + ]); }); Tinytest.add("passwords - add email when the user has an existing email " + diff --git a/packages/accounts-ui-unstyled/accounts_ui.js b/packages/accounts-ui-unstyled/accounts_ui.js index 87c96a82fb..da036d414f 100644 --- a/packages/accounts-ui-unstyled/accounts_ui.js +++ b/packages/accounts-ui-unstyled/accounts_ui.js @@ -4,15 +4,29 @@ * @memberOf Accounts * @importFromPackage accounts-base */ -Accounts.ui = {}; - -Accounts.ui._options = { - requestPermissions: {}, - requestOfflineToken: {}, - forceApprovalPrompt: {} +Accounts.ui = { + _options: { + requestPermissions: Object.create(null), + requestOfflineToken: Object.create(null), + forceApprovalPrompt: Object.create(null), + }, }; -// XXX refactor duplicated code in this function +const VALID_OPTIONS = new Set() + .add('passwordSignupFields') + .add('requestPermissions') + .add('requestOfflineToken') + .add('forceApprovalPrompt'); + +const VALID_PASSWORD_SIGNUP_FIELDS = new Set() + .add("USERNAME_AND_EMAIL") + .add("USERNAME_AND_OPTIONAL_EMAIL") + .add("USERNAME_ONLY") + .add("EMAIL_ONLY"); + +function isValidPasswordSignupField(field) { + return VALID_PASSWORD_SIGNUP_FIELDS.has(field); +} /** * @summary Configure the behavior of [`{{> loginButtons}}`](#accountsui). @@ -25,86 +39,107 @@ Accounts.ui._options = { * @importFromPackage accounts-base */ Accounts.ui.config = options => { - // validate options keys - const VALID_KEYS = ['passwordSignupFields', 'requestPermissions', 'requestOfflineToken', 'forceApprovalPrompt']; Object.keys(options).forEach(key => { - if (!VALID_KEYS.includes(key)) - throw new Error(`Accounts.ui.config: Invalid key: ${key}`); + if (!VALID_OPTIONS.has(key)) { + throw new Error(`Accounts.ui.config: Invalid option: ${key}`); + } }); - // deal with `passwordSignupFields` - if (options.passwordSignupFields) { - if (options.passwordSignupFields.reduce((prev, field) => - prev && - [ - "USERNAME_AND_EMAIL", - "USERNAME_AND_OPTIONAL_EMAIL", - "USERNAME_ONLY", - "EMAIL_ONLY" - ].includes(field), - true - )) { - if (Accounts.ui._options.passwordSignupFields) - throw new Error("Accounts.ui.config: Can't set `passwordSignupFields` more than once"); - else - Accounts.ui._options.passwordSignupFields = options.passwordSignupFields; - } else { - throw new Error(`Accounts.ui.config: Invalid option for \`passwordSignupFields\`: ${options.passwordSignupFields}`); + handlePasswordSignupFields(options); + handleRequestPermissions(options); + handleRequestOfflineToken(options); + handleForceApprovalPrompt(options); +}; + +function handlePasswordSignupFields(options) { + let { passwordSignupFields } = options; + + if (passwordSignupFields) { + const reportInvalid = () => { + throw new Error(`Accounts.ui.config: Invalid option for \`passwordSignupFields\`: ${passwordSignupFields}`); + }; + + if (typeof passwordSignupFields === "string") { + passwordSignupFields = [passwordSignupFields]; + } else if (!Array.isArray(passwordSignupFields)) { + reportInvalid(); } + + if (passwordSignupFields.every(isValidPasswordSignupField)) { + if (Accounts.ui._options.passwordSignupFields) { + throw new Error("Accounts.ui.config: Can't set `passwordSignupFields` more than once"); + } + Object.assign(Accounts.ui._options, { passwordSignupFields }); + return; + } + + reportInvalid(); + } +} + +export function passwordSignupFields() { + const { passwordSignupFields } = Accounts.ui._options; + + if (Array.isArray(passwordSignupFields)) { + return passwordSignupFields; } - // deal with `requestPermissions` - if (options.requestPermissions) { - Object.keys(options.requestPermissions).forEach(service => { - const scope = options.forceApprovalPrompt[service]; + if (typeof passwordSignupFields === 'string') { + return [passwordSignupFields]; + } + + return ["EMAIL_ONLY"]; +} + + +function handleRequestPermissions({ requestPermissions }) { + if (requestPermissions) { + Object.keys(requestPermissions).forEach(service => { if (Accounts.ui._options.requestPermissions[service]) { throw new Error(`Accounts.ui.config: Can't set \`requestPermissions\` more than once for ${service}`); - } else if (!Array.isArray(scope)) { - throw new Error("Accounts.ui.config: Value for `requestPermissions` must be an array"); - } else { - Accounts.ui._options.requestPermissions[service] = scope; } + + const scope = requestPermissions[service]; + + if (!Array.isArray(scope)) { + throw new Error("Accounts.ui.config: Value for `requestPermissions` must be an array"); + } + + Accounts.ui._options.requestPermissions[service] = scope; }); } +} - // deal with `requestOfflineToken` - if (options.requestOfflineToken) { - Object.keys(options.requestOfflineToken).forEach(service => { - const value = options.forceApprovalPrompt[service]; - if (service !== 'google') +function handleRequestOfflineToken({ requestOfflineToken }) { + if (requestOfflineToken) { + Object.keys(requestOfflineToken).forEach(service => { + if (service !== 'google') { throw new Error("Accounts.ui.config: `requestOfflineToken` only supported for Google login at the moment."); + } if (Accounts.ui._options.requestOfflineToken[service]) { throw new Error(`Accounts.ui.config: Can't set \`requestOfflineToken\` more than once for ${service}`); - } else { - Accounts.ui._options.requestOfflineToken[service] = value; } + + Accounts.ui._options.requestOfflineToken[service] = + requestOfflineToken[service]; }); } +} - // deal with `forceApprovalPrompt` - if (options.forceApprovalPrompt) { - Object.keys(options.forceApprovalPrompt).forEach(service => { - const value = options.forceApprovalPrompt[service]; - if (service !== 'google') +function handleForceApprovalPrompt({ forceApprovalPrompt }) { + if (forceApprovalPrompt) { + Object.keys(forceApprovalPrompt).forEach(service => { + if (service !== 'google') { throw new Error("Accounts.ui.config: `forceApprovalPrompt` only supported for Google login at the moment."); + } if (Accounts.ui._options.forceApprovalPrompt[service]) { throw new Error(`Accounts.ui.config: Can't set \`forceApprovalPrompt\` more than once for ${service}`); - } else { - Accounts.ui._options.forceApprovalPrompt[service] = value; } + + Accounts.ui._options.forceApprovalPrompt[service] = + forceApprovalPrompt[service]; }); } -}; - -export const passwordSignupFields = () => { - const { passwordSignupFields } = Accounts.ui._options; - if (Array.isArray(passwordSignupFields)) { - return passwordSignupFields; - } else if (typeof passwordSignupFields === 'string') { - return [passwordSignupFields]; - } - return ["EMAIL_ONLY"]; } - \ No newline at end of file diff --git a/packages/accounts-ui-unstyled/login_buttons_dropdown.js b/packages/accounts-ui-unstyled/login_buttons_dropdown.js index 3ec72f0dd8..2594d3358e 100644 --- a/packages/accounts-ui-unstyled/login_buttons_dropdown.js +++ b/packages/accounts-ui-unstyled/login_buttons_dropdown.js @@ -238,8 +238,10 @@ Template._loginButtonsLoggedOutDropdown.events({ }, 'keypress #forgot-password-email': event => { - if (event.keyCode === 13) + if (event.keyCode === 13) { + event.preventDefault(); forgotPassword(); + } }, 'click #login-buttons-forgot-password': forgotPassword, @@ -335,10 +337,6 @@ Template._loginButtonsLoggedOutDropdown.events({ if (password !== null) document.getElementById('login-password').value = password; }, - 'keypress #login-username, keypress #login-email, keypress #login-username-or-email, keypress #login-password, keypress #login-password-again': event => { - if (event.keyCode === 13) - loginOrSignup(); - } }); Template._loginButtonsLoggedOutDropdown.helpers({ diff --git a/packages/accounts-ui-unstyled/package.js b/packages/accounts-ui-unstyled/package.js index fb434d3b54..6f5f767058 100644 --- a/packages/accounts-ui-unstyled/package.js +++ b/packages/accounts-ui-unstyled/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Unstyled version of login widgets", - version: "1.4.1" + version: "1.4.3" }); Package.onUse(function (api) { diff --git a/packages/accounts-ui/package.js b/packages/accounts-ui/package.js index 81d2b398a8..6cbba924cc 100644 --- a/packages/accounts-ui/package.js +++ b/packages/accounts-ui/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Simple templates to add login widgets to an app", - version: "1.3.1", + version: "1.3.2", }); Package.onUse(api => { diff --git a/packages/appcache/.gitignore b/packages/appcache/.gitignore index 677a6fc263..3ccf4f8cd6 100644 --- a/packages/appcache/.gitignore +++ b/packages/appcache/.gitignore @@ -1 +1,2 @@ .build* +.versions diff --git a/packages/appcache/CHANGELOG.md b/packages/appcache/CHANGELOG.md new file mode 100644 index 0000000000..415992746a --- /dev/null +++ b/packages/appcache/CHANGELOG.md @@ -0,0 +1,5 @@ +# CHANGELOG + +## v1.2.3, 2019-12-13 + +* Rewrite appcache resources exceed recommended cache size debug message. Fixes [Issue #10321](https://github.com/meteor/meteor/issues/10321). Thanks [@CaptainN](https://github.com/CaptainN) diff --git a/packages/appcache/appcache-server.js b/packages/appcache/appcache-server.js old mode 100644 new mode 100755 index 28185351b2..55822427d4 --- a/packages/appcache/appcache-server.js +++ b/packages/appcache/appcache-server.js @@ -1,5 +1,4 @@ import { Meteor } from 'meteor/meteor' -import { isModern } from "meteor/modern-browsers"; import { WebApp } from "meteor/webapp"; import crypto from 'crypto'; import fs from 'fs'; @@ -7,6 +6,7 @@ import path from 'path'; let _disableSizeCheck = false; let disabledBrowsers = {}; +let enableCallback = null; Meteor.AppCache = { config: options => { @@ -21,6 +21,9 @@ Meteor.AppCache = { RoutePolicy.declare(urlPrefix, 'static-online') ); } + else if (option === 'enableCallback') { + enableCallback = value; + } // option to suppress warnings for tests. else if (option === '_disableSizeCheck') { _disableSizeCheck = value; @@ -37,7 +40,13 @@ Meteor.AppCache = { } }; -const browserDisabled = request => disabledBrowsers[request.browser.name]; +const browserDisabled = request => { + if (enableCallback) { + return !enableCallback(request); + } + + return disabledBrowsers[request.browser.name]; +} // Cache of previously computed app.manifest files. const manifestCache = new Map; @@ -78,12 +87,12 @@ WebApp.connectHandlers.use((req, res, next) => { } const cacheInfo = { - modern: isModern(request.browser), + // Provided by WebApp.categorizeRequest. + modern: request.modern, }; - cacheInfo.arch = cacheInfo.modern - ? "web.browser" - : "web.browser.legacy"; + // Also provided by WebApp.categorizeRequest. + cacheInfo.arch = request.arch; // The true hash of the client manifest for this arch, regardless of // AUTOUPDATE_VERSION or Autoupdate.autoupdateVersion. @@ -251,10 +260,12 @@ function eachResource({ } function sizeCheck() { - [ // Check size of each known architecture independently. + const RESOURCE_SIZE_LIMIT = 5 * 1024 * 1024; // 5MB + const largeSizes = [ // Check size of each known architecture independently. "web.browser", "web.browser.legacy", - ].forEach(arch => { + ].filter((arch) => !!WebApp.clientPrograms[arch]) + .map((arch) => { let totalSize = 0; WebApp.clientPrograms[arch].manifest.forEach(resource => { @@ -265,17 +276,26 @@ function sizeCheck() { } }); - if (totalSize > 5 * 1024 * 1024) { - Meteor._debug([ - "** You are using the appcache package but the total size of the", - `** cached resources is ${(totalSize / 1024 / 1024).toFixed(1)}MB.`, - "**", - "** This is over the recommended maximum of 5MB and may break your", - "** app in some browsers! See http://docs.meteor.com/#appcache", - "** for more information and fixes." - ].join("\n")); + return { + arch, + size: totalSize, } - }); + }) + .filter(({ size }) => size > RESOURCE_SIZE_LIMIT); + + if (largeSizes.length > 0) { + Meteor._debug([ + "** You are using the appcache package, but the size of", + "** one or more of your cached resources is larger than", + "** the recommended maximum size of 5MB which may break", + "** your app in some browsers!", + "** ", + ...largeSizes.map(data => `** ${data.arch}: ${(data.size / 1024 / 1024).toFixed(1)}MB`), + "** ", + "** See http://docs.meteor.com/#appcache for more", + "** information and fixes." + ].join("\n")); + } } // Run the size check after user code has had a chance to run. That way, diff --git a/packages/appcache/package.js b/packages/appcache/package.js index 00a62db723..f2bbc8679c 100644 --- a/packages/appcache/package.js +++ b/packages/appcache/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Enable the application cache in the browser", - version: "1.2.2", + version: "1.2.7", }); Package.onUse(api => { diff --git a/packages/autoupdate/README.md b/packages/autoupdate/README.md index f76824b62a..b44d30f594 100644 --- a/packages/autoupdate/README.md +++ b/packages/autoupdate/README.md @@ -3,7 +3,7 @@ *** This package is the heart of Meteor's Hot Code Push functionality. It has a -client component and a server component component. The client component uses a +client component and a server component. The client component uses a DDP API provided by the server to subscribe to the version ID of the most recent build of the app's client. When it sees that a new version is available, it uses the [reload](https://atmospherejs.com/meteor/reload) package (if included in the diff --git a/packages/autoupdate/autoupdate_client.js b/packages/autoupdate/autoupdate_client.js index a3ce4d2449..1f95672541 100644 --- a/packages/autoupdate/autoupdate_client.js +++ b/packages/autoupdate/autoupdate_client.js @@ -15,7 +15,7 @@ // version available on the server. // // `Autoupdate.newClientAvailable` is a reactive data source which -// becomes `true` if there is a new version of the client is available on +// becomes `true` if a new version of the client is available on // the server. // // This package doesn't implement a soft code reload process itself, @@ -25,11 +25,13 @@ // The client version of the client code currently running in the // browser. +import { ClientVersions } from "./client_versions.js"; + const clientArch = Meteor.isCordova ? "web.cordova" : Meteor.isModern ? "web.browser" : "web.browser.legacy"; const autoupdateVersions = - __meteor_runtime_config__.autoupdate.versions[clientArch] || { + ((__meteor_runtime_config__.autoupdate || {}).versions || {})[clientArch] || { version: "unknown", versionRefreshable: "unknown", versionNonRefreshable: "unknown", @@ -38,25 +40,21 @@ const autoupdateVersions = export const Autoupdate = {}; -// The collection of acceptable client versions. -const ClientVersions = - Autoupdate._ClientVersions = // Used by a self-test. - new Mongo.Collection("meteor_autoupdate_clientVersions"); +// Stores acceptable client versions. +const clientVersions = + Autoupdate._clientVersions = // Used by a self-test. + new ClientVersions(); + +Meteor.connection.registerStore( + "meteor_autoupdate_clientVersions", + clientVersions.createStore() +); Autoupdate.newClientAvailable = function () { - return !! ( - ClientVersions.findOne({ - _id: clientArch, - versionNonRefreshable: { - $ne: autoupdateVersions.versionNonRefreshable, - } - }) || - ClientVersions.findOne({ - _id: clientArch, - versionRefreshable: { - $ne: autoupdateVersions.versionRefreshable, - } - }) + return clientVersions.newClientAvailable( + clientArch, + ["versionRefreshable", "versionNonRefreshable"], + autoupdateVersions ); }; @@ -104,10 +102,7 @@ Autoupdate._retrySubscription = () => { resolved.then(() => checkNewVersionDocument(doc)); } - const handle = ClientVersions.find().observe({ - added: check, - changed: check - }); + const stop = clientVersions.watch(check); function checkNewVersionDocument(doc) { if (doc._id !== clientArch) { @@ -118,7 +113,7 @@ Autoupdate._retrySubscription = () => { autoupdateVersions.versionNonRefreshable) { // Non-refreshable assets have changed, so we have to reload the // whole page rather than just replacing tags. - if (handle) handle.stop(); + if (stop) stop(); if (Package.reload) { // The reload package should be provided by ddp-client, which // is provided by the ddp package that autoupdate depends on. diff --git a/packages/autoupdate/autoupdate_cordova.js b/packages/autoupdate/autoupdate_cordova.js index 3f8f06f9a2..fcbac1d486 100644 --- a/packages/autoupdate/autoupdate_cordova.js +++ b/packages/autoupdate/autoupdate_cordova.js @@ -1,21 +1,27 @@ +import { ClientVersions } from "./client_versions.js"; + var autoupdateVersionsCordova = __meteor_runtime_config__.autoupdate.versions["web.cordova"] || { version: "unknown" }; -// The collection of acceptable client versions. -const ClientVersions = - new Mongo.Collection("meteor_autoupdate_clientVersions"); - export const Autoupdate = {}; -Autoupdate.newClientAvailable = - () => !! ClientVersions.findOne({ - _id: "web.cordova", - version: { - $ne: autoupdateVersionsCordova.version - } - }); +// Stores acceptable client versions. +const clientVersions = new ClientVersions(); + +Meteor.connection.registerStore( + "meteor_autoupdate_clientVersions", + clientVersions.createStore() +); + +Autoupdate.newClientAvailable = function () { + return clientVersions.newClientAvailable( + "web.cordova", + ["version"], + autoupdateVersionsCordova + ); +}; var retry = new Retry({ // Unlike the stream reconnect use of Retry, which we want to be instant @@ -59,11 +65,8 @@ Autoupdate._retrySubscription = () => { } } - ClientVersions.find({ - _id: "web.cordova" - }).observe({ - added: checkNewVersionDocument, - changed: checkNewVersionDocument + clientVersions.watch(checkNewVersionDocument, { + filter: "web.cordova" }); } } diff --git a/packages/autoupdate/autoupdate_server.js b/packages/autoupdate/autoupdate_server.js index 1a168e785e..ef564fc8ef 100644 --- a/packages/autoupdate/autoupdate_server.js +++ b/packages/autoupdate/autoupdate_server.js @@ -22,6 +22,7 @@ // The ID of each document is the client architecture, and the fields of // the document are the versions described above. +import { ClientVersions } from "./client_versions.js"; var Future = Npm.require("fibers/future"); export const Autoupdate = __meteor_runtime_config__.autoupdate = { @@ -34,11 +35,8 @@ export const Autoupdate = __meteor_runtime_config__.autoupdate = { versions: {} }; -// The collection of acceptable client versions. -const ClientVersions = - new Mongo.Collection("meteor_autoupdate_clientVersions", { - connection: null - }); +// Stores acceptable client versions. +const clientVersions = new ClientVersions(); // The client hash includes __meteor_runtime_config__, so wait until // all packages have loaded and have had a chance to populate the @@ -96,11 +94,8 @@ function updateVersions(shouldReloadClientProgram) { ...Autoupdate.versions[arch], assets: WebApp.getRefreshableAssets(arch), }; - if (! ClientVersions.findOne({ _id: arch })) { - ClientVersions.insert({ _id: arch, ...payload }); - } else { - ClientVersions.update(arch, { $set: payload }); - } + + clientVersions.set(arch, payload); }); }); } @@ -118,7 +113,13 @@ Meteor.publish( if (Autoupdate.appId && appId && Autoupdate.appId !== appId) return []; - return ClientVersions.find(); + const stop = clientVersions.watch((version, isNew) => { + (isNew ? this.added : this.changed) + .call(this, "meteor_autoupdate_clientVersions", version._id, version); + }); + + this.onStop(() => stop()); + this.ready(); }, {is_auto: true} ); @@ -132,8 +133,8 @@ Meteor.startup(function () { "version-refreshable", "version-cordova", ].forEach(_id => { - ClientVersions.upsert(_id, { - $set: { version: "outdated" } + clientVersions.set(_id, { + version: "outdated" }); }); }); diff --git a/packages/autoupdate/client_versions.js b/packages/autoupdate/client_versions.js new file mode 100644 index 0000000000..05ccde1207 --- /dev/null +++ b/packages/autoupdate/client_versions.js @@ -0,0 +1,104 @@ +import { Tracker } from "meteor/tracker"; + +export class ClientVersions { + constructor() { + this._versions = new Map(); + this._watchCallbacks = new Set(); + } + + // Creates a Livedata store for use with `Meteor.connection.registerStore`. + // After the store is registered, document updates reported by Livedata are + // merged with the documents in this `ClientVersions` instance. + createStore() { + return { + update: ({ id, msg, fields }) => { + if (msg === "added" || msg === "changed") { + this.set(id, fields); + } + } + }; + } + + hasVersions() { + return this._versions.size > 0; + } + + get(id) { + return this._versions.get(id); + } + + // Adds or updates a version document and invokes registered callbacks for the + // added/updated document. If a document with the given ID already exists, its + // fields are merged with `fields`. + set(id, fields) { + let version = this._versions.get(id); + let isNew = false; + + if (version) { + Object.assign(version, fields); + } else { + version = { + _id: id, + ...fields + }; + + isNew = true; + this._versions.set(id, version); + } + + this._watchCallbacks.forEach(({ fn, filter }) => { + if (! filter || filter === version._id) { + fn(version, isNew); + } + }); + } + + // Registers a callback that will be invoked when a version document is added + // or changed. Calling the function returned by `watch` removes the callback. + // If `skipInitial` is true, the callback isn't be invoked for existing + // documents. If `filter` is set, the callback is only invoked for documents + // with ID `filter`. + watch(fn, { skipInitial, filter } = {}) { + if (! skipInitial) { + const resolved = Promise.resolve(); + + this._versions.forEach((version) => { + if (! filter || filter === version._id) { + resolved.then(() => fn(version, true)); + } + }); + } + + const callback = { fn, filter }; + this._watchCallbacks.add(callback); + + return () => this._watchCallbacks.delete(callback); + } + + // A reactive data source for `Autoupdate.newClientAvailable`. + newClientAvailable(id, fields, currentVersion) { + function isNewVersion(version) { + return ( + version._id === id && + fields.some((field) => version[field] !== currentVersion[field]) + ); + } + + const dependency = new Tracker.Dependency(); + const version = this.get(id); + + dependency.depend(); + + const stop = this.watch( + (version) => { + if (isNewVersion(version)) { + dependency.changed(); + stop(); + } + }, + { skipInitial: true } + ); + + return !! version && isNewVersion(version); + } +} diff --git a/packages/autoupdate/package.js b/packages/autoupdate/package.js index 756be8b37d..e4a2bf47e6 100644 --- a/packages/autoupdate/package.js +++ b/packages/autoupdate/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Update the client when new client code is available", - version: '1.5.0' + version: '1.6.0' }); Package.onUse(function (api) { @@ -15,10 +15,11 @@ Package.onUse(function (api) { 'retry' ], 'client'); + api.use('reload', 'client', { weak: true }); + api.use([ 'ecmascript', - 'ddp', - 'mongo', + 'ddp' ], ['client', 'server']); api.mainModule('autoupdate_server.js', 'server'); diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 4607d8579d..9be3dbb5db 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -2,368 +2,396 @@ "lockfileVersion": 1, "dependencies": { "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==" }, "@babel/core": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.1.2.tgz", - "integrity": "sha512-IFeSSnjXdhDaoysIlev//UzHZbdEmm7D0EIH2qtse9xK7mXEZQpYjs2P00XlP1qYsYvid79p+Zgg6tz1mp6iVw==", + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "dependencies": { "json5": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==" } } }, "@babel/generator": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.1.3.tgz", - "integrity": "sha512-ZoCZGcfIJFJuZBqxcY9OjC1KW2lWK64qrX1o4UYL3yshVhwKFYgzpWZ0vvtGMNJdTlvkw0W+HR1VnYN8q3QPFQ==", - "dependencies": { - "@babel/types": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.3.tgz", - "integrity": "sha512-RpPOVfK+yatXyn8n4PB1NW6k9qjinrXrRR8ugBN8fD6hCy5RXI6PSbVqpOJBO9oSaY7Nom4ohj35feb0UR9hSA==" - } - } + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", + "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==" }, "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==" }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==" }, "@babel/helper-builder-react-jsx": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz", - "integrity": "sha512-ebJ2JM6NAKW0fQEqN8hOLxK84RbRz9OkUhGS/Xd5u56ejMfVbayJ4+LykERZCOUM6faa6Fp3SZNX3fcT16MKHw==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", + "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==" }, - "@babel/helper-call-delegate": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz", - "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==" + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.12.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz", + "integrity": "sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og==" + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==" + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", + "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==" }, "@babel/helper-define-map": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz", - "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==" + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==" }, "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==" }, "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==" }, "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==" - }, - "@babel/helper-hoist-variables": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz", - "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==" }, "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==" + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==" }, "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==" + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==" }, "@babel/helper-module-transforms": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz", - "integrity": "sha512-0JZRd2yhawo79Rcm4w0LwSMILFmFXjugG3yqf+P/UsKsRS1mJCmMwwlHDlMg7Avr9LrvSpp4ZSULO9r8jpCzcw==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==" }, "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==" + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz", + "integrity": "sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==" }, "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" - }, - "@babel/helper-regex": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", - "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==" }, "@babel/helper-replace-supers": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz", - "integrity": "sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ==" + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", + "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==" }, "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==" + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==" }, "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==" + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==" + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" }, "@babel/helper-wrap-function": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz", - "integrity": "sha512-R6HU3dete+rwsdAfrOzTlE9Mcpk4RjU3aX3gi9grtmugQY0u79X7eogUvfXA5sI81Mfq1cn6AgxihfN33STjJA==" + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==" }, "@babel/helpers": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.1.2.tgz", - "integrity": "sha512-Myc3pUE8eswD73aWcartxB16K6CGmHDv9KxOmD2CeOs/FaEAQodr3VYGmlvOmog60vNQ2w8QbatuahepZwrHiA==" + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", + "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==" }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==" }, "@babel/parser": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.1.2.tgz", - "integrity": "sha512-x5HFsW+E/nQalGMw7hu+fvPqnBeBaIr0lWJ2SG0PPL2j+Pm9lYvCrsZJGIgauPIENx0v10INIyFjmSNUD/gSqQ==" + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz", + "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.1.0.tgz", - "integrity": "sha512-Fq803F3Jcxo20MXUSDdmZZXrPe6BWyGcWBPPNB/M7WaUYESKDeKMOGIxEzQOjGSmW/NWb6UaPZrtTB2ekhB/ew==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", + "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==" }, "@babel/plugin-proposal-class-properties": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.1.0.tgz", - "integrity": "sha512-/PCJWN+CKt5v1xcGn4vnuu13QDoV+P7NcICP44BoonAJoPSGwVkgrXihFIQGiEjjPlUDBIw1cM7wYFLARS2/hw==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==" + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==" }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz", - "integrity": "sha512-14fhfoPcNu7itSen7Py1iGN0gEm87hX/B+8nZPqkdmANyyYWYMY2pjA3r8WXbWVKMzfnSNS0xY8GVS0IjXi/iw==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==" + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==" + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", + "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==" }, "@babel/plugin-syntax-async-generators": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0.tgz", - "integrity": "sha512-im7ged00ddGKAjcZgewXmp1vxSZQQywuQXe2B1A7kajjZmDeY/ekMPmWr9zJgveSaQH0k7BcGrojQhcK06l0zA==" + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" }, "@babel/plugin-syntax-class-properties": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.0.0.tgz", - "integrity": "sha512-cR12g0Qzn4sgkjrbrzWy2GE7m9vMl/sFkqZ3gIpAQdrvPDnLM8180i+ANDFIXfjHo9aqp0ccJlQ0QNZcFUbf9w==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==" }, "@babel/plugin-syntax-dynamic-import": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0.tgz", - "integrity": "sha512-Gt9xNyRrCHCiyX/ZxDGOcBnlJl0I3IWicpZRC4CdC0P5a/I07Ya2OAMEBU+J7GmRFVmIetqEYRko6QYRuKOESw==" - }, - "@babel/plugin-syntax-flow": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.0.0.tgz", - "integrity": "sha512-zGcuZWiWWDa5qTZ6iAnpG0fnX/GOu49pGR5PFvkQ9GmKNaSphXQnlNXh/LG20sqWtNrx/eB6krzfEzcwvUyeFA==" + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" }, "@babel/plugin-syntax-jsx": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0.tgz", - "integrity": "sha512-PdmL2AoPsCLWxhIr3kG2+F9v4WH06Q3z+NoGVpQgnUNGcagXHq5sB3OXxkSahKq9TLdNMN/AJzFYSOo8UKDMHg==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==" + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "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==" }, "@babel/plugin-syntax-object-rest-spread": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0.tgz", - "integrity": "sha512-5A0n4p6bIiVe5OvQPxBnesezsgFJdHhSs3uFSvaPdMqtsovajLZ+G2vZyvNe10EzJBWWo3AcHGKhAFUxqwp2dw==" + "version": "7.8.3", + "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==" }, - "@babel/plugin-syntax-typescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.0.0.tgz", - "integrity": "sha512-5fxmdqiAQVQTIS+KSvYeZuTt91wKtBTYi6JlIkvbQ6hmO+9fZE81ezxmMiFMIsxE7CdRSgzn7nQ1BChcvK9OpA==" + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "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==" + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" }, "@babel/plugin-transform-arrow-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0.tgz", - "integrity": "sha512-2EZDBl1WIO/q4DIkIp4s86sdp4ZifL51MoIviLY/gG/mLSuOIEg7J8o6mhbxOTvUJkaN50n+8u41FVsr5KLy/w==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==" }, "@babel/plugin-transform-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.1.0.tgz", - "integrity": "sha512-rNmcmoQ78IrvNCIt/R9U+cixUHeYAzgusTFgIAv+wQb9HJU4szhpDD6e5GCACmj/JP5KxuCwM96bX3L9v4ZN/g==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==" }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz", - "integrity": "sha512-AOBiyUp7vYTqz2Jibe1UaAWL0Hl9JUXEgjFvvvcSc9MVDItv46ViXFw2F7SVt1B5k+KWjl44eeXOAk3UDEaJjQ==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==" }, "@babel/plugin-transform-block-scoping": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0.tgz", - "integrity": "sha512-GWEMCrmHQcYWISilUrk9GDqH4enf3UmhOEbNbNrlNAX1ssH3MsS1xLOS6rdjRVPgA7XXVPn87tRkdTEoA/dxEg==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", + "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==" }, "@babel/plugin-transform-classes": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz", - "integrity": "sha512-rNaqoD+4OCBZjM7VaskladgqnZ1LO6o2UxuWSDzljzW21pN1KXkB7BstAVweZdxQkHAujps5QMNOTWesBciKFg==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==" }, "@babel/plugin-transform-computed-properties": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz", - "integrity": "sha512-ubouZdChNAv4AAWAgU7QKbB93NU5sHwInEWfp+/OzJKA02E6Woh9RVoX4sZrbRwtybky/d7baTUqwFx+HgbvMA==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==" }, "@babel/plugin-transform-destructuring": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.3.tgz", - "integrity": "sha512-Mb9M4DGIOspH1ExHOUnn2UUXFOyVTiX84fXCd+6B5iWrQg/QMeeRmSwpZ9lnjYLSXtZwiw80ytVMr3zue0ucYw==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==" }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.1.0.tgz", - "integrity": "sha512-uZt9kD1Pp/JubkukOGQml9tqAeI8NkE98oZnHZ2qHRElmeKCodbTZgOEUtujSCSLhHSBWbzNiFSDIMC4/RBTLQ==" - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.0.0.tgz", - "integrity": "sha512-WhXUNb4It5a19RsgKKbQPrjmy4yWOY1KynpEbNw7bnd1QTcrT/EIl3MJvnGgpgvrKyKbqX7nUNOJfkpLOnoDKA==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==" }, "@babel/plugin-transform-for-of": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0.tgz", - "integrity": "sha512-TlxKecN20X2tt2UEr2LNE6aqA0oPeMT1Y3cgz8k4Dn1j5ObT8M3nl9aA37LLklx0PBZKETC9ZAf9n/6SujTuXA==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==" }, "@babel/plugin-transform-literals": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz", - "integrity": "sha512-1NTDBWkeNXgpUcyoVFxbr9hS57EpZYXpje92zv0SUzjdu3enaRwF/l3cmyRnXLtIdyJASyiS6PtybK+CgKf7jA==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==" }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.1.0.tgz", - "integrity": "sha512-wtNwtMjn1XGwM0AXPspQgvmE6msSJP15CX2RVfpTSTNPLhKhaOjaIfBaVfj4iUZ/VrFSodcFedwtPg/NxwQlPA==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==" }, "@babel/plugin-transform-object-super": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.1.0.tgz", - "integrity": "sha512-/O02Je1CRTSk2SSJaq0xjwQ8hG4zhZGNjE8psTsSNPXyLRCODv7/PBozqT5AmQMzp7MI3ndvMhGdqp9c96tTEw==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", + "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==" }, "@babel/plugin-transform-parameters": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.1.0.tgz", - "integrity": "sha512-vHV7oxkEJ8IHxTfRr3hNGzV446GAb+0hgbA7o/0Jd76s+YzccdWuTU296FOCOl/xweU4t/Ya4g41yWz80RFCRw==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==" }, "@babel/plugin-transform-property-literals": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.0.0.tgz", - "integrity": "sha512-7HK6/jB4MLpwQUJQ3diaX0pbCRcoL9asJscQfU3D1HpDwYdrH6yAUKleUNFHFyGNYBI9UeJrS2Jpx2JhtPKu5g==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", + "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==" }, "@babel/plugin-transform-react-display-name": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz", - "integrity": "sha512-BX8xKuQTO0HzINxT6j/GiCwoJB0AOMs0HmLbEnAvcte8U8rSkNa/eSCAY+l1OA4JnCVq2jw2p6U8QQryy2fTPg==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", + "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==" }, "@babel/plugin-transform-react-jsx": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.0.0.tgz", - "integrity": "sha512-0TMP21hXsSUjIQJmu/r7RiVxeFrXRcMUigbKu0BLegJK9PkYodHstaszcig7zxXfaBji2LYUdtqIkHs+hgYkJQ==" + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.7.tgz", + "integrity": "sha512-YFlTi6MEsclFAPIDNZYiCRbneg1MFGao9pPG9uD5htwE0vDbPaMUMeYd6itWjw7K4kro4UbdQf3ljmFl9y48dQ==" + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.7.tgz", + "integrity": "sha512-Rs3ETtMtR3VLXFeYRChle5SsP/P9Jp/6dsewBQfokDSzKJThlsuFcnzLTDRALiUmTC48ej19YD9uN1mupEeEDg==" }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.0.0.tgz", - "integrity": "sha512-pymy+AK12WO4safW1HmBpwagUQRl9cevNX+82AIAtU1pIdugqcH+nuYP03Ja6B+N4gliAaKWAegIBL/ymALPHA==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz", + "integrity": "sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==" }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.0.0.tgz", - "integrity": "sha512-OSeEpFJEH5dw/TtxTg4nijl4nHBbhqbKL94Xo/Y17WKIf2qJWeIk/QeXACF19lG1vMezkxqruwnTjVizaW7u7w==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz", + "integrity": "sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==" + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", + "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==" }, "@babel/plugin-transform-regenerator": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz", - "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", + "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==" }, "@babel/plugin-transform-runtime": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.1.0.tgz", - "integrity": "sha512-WFLMgzu5DLQEah0lKTJzYb14vd6UiES7PTnXcvrPZ1VrwFeJ+mTbvr65fFAsXYMt2bIoOoC0jk76zY1S7HZjUg==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", + "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==" }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz", - "integrity": "sha512-g/99LI4vm5iOf5r1Gdxq5Xmu91zvjhEG5+yZDJW268AZELAu4J1EiFLnkSG3yuUsZyOipVOVUKoGPYwfsTymhw==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", + "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==" }, "@babel/plugin-transform-spread": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz", - "integrity": "sha512-L702YFy2EvirrR4shTj0g2xQp7aNwZoWNCkNu2mcoU0uyzMl0XRwDSwzB/xp6DSUFiBmEXuyAyEN16LsgVqGGQ==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", + "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==" }, "@babel/plugin-transform-sticky-regex": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz", - "integrity": "sha512-LFUToxiyS/WD+XEWpkx/XJBrUXKewSZpzX68s+yEOtIbdnsRjpryDw9U06gYc6klYEij/+KQVRnD3nz3AoKmjw==" + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", + "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==" }, "@babel/plugin-transform-template-literals": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz", - "integrity": "sha512-vA6rkTCabRZu7Nbl9DfLZE1imj4tzdWcg5vtdQGvj+OH9itNNB6hxuRMHuIY8SGnEt1T9g5foqs9LnrHzsqEFg==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", + "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==" }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0.tgz", - "integrity": "sha512-1r1X5DO78WnaAIvs5uC48t41LLckxsYklJrZjNKcevyz83sF2l4RHbw29qrCPr/6ksFsdfRpT/ZgxNWHXRnffg==" - }, - "@babel/plugin-transform-typescript": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.1.0.tgz", - "integrity": "sha512-TOTtVeT+fekAesiCHnPz+PSkYSdOSLyLn42DI45nxg6iCdlQY6LIj/tYqpMB0y+YicoTUiYiXqF8rG6SKfhw6Q==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", + "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==" }, "@babel/plugin-transform-unicode-regex": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz", - "integrity": "sha512-uJBrJhBOEa3D033P95nPHu3nbFwFE9ZgXsfEitzoIXIwqAZWk7uXcg06yFKXz9FSxBH5ucgU/cYdX0IV8ldHKw==" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", + "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==" }, "@babel/preset-react": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", - "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==" + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.7.tgz", + "integrity": "sha512-wKeTdnGUP5AEYCYQIMeXMMwU7j+2opxrG0WzuZfxuuW9nhKvvALBjl67653CWamZJVefuJGI219G591RSldrqQ==" }, "@babel/runtime": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.2.tgz", - "integrity": "sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg==" + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==" }, "@babel/template": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.1.2.tgz", - "integrity": "sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==" + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==" }, "@babel/traverse": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.1.0.tgz", - "integrity": "sha512-bwgln0FsMoxm3pLOgrrnGaXk18sSM9JNf1/nHC/FksmNGFbYnPWY4GYCfLxyP1KRmfsxqkRpfoa6xr6VuuSxdw==" + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz", + "integrity": "sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==" }, "@babel/types": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.2.tgz", - "integrity": "sha512-pb1I05sZEKiSlMUV9UReaqsCPUpgbHHHu2n1piRm7JkuBkm6QxcaIzKu6FMnMtCbih/cEYTR+RGYYC96Yk9HAg==" + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.7.tgz", + "integrity": "sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==" }, "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" + }, + "acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==" }, "ansi-styles": { "version": "3.2.1", @@ -382,7 +410,7 @@ }, "babel-helper-is-nodes-equiv": { "version": "0.0.1", - "resolved": "http://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" }, "babel-helper-is-void-0": { @@ -405,6 +433,11 @@ "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==" + }, "babel-plugin-minify-builtins": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", @@ -416,9 +449,9 @@ "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==" }, "babel-plugin-minify-dead-code-elimination": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.0.tgz", - "integrity": "sha512-XQteBGXlgEoAKc/BhO6oafUdT4LBa7ARi55mxoyhLHNuA+RlzRmeMAfc31pb/UqU01wBzRc36YqHQzopnkd/6Q==" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", + "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==" }, "babel-plugin-minify-flip-comparisons": { "version": "0.4.3", @@ -426,9 +459,9 @@ "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=" }, "babel-plugin-minify-guarded-expressions": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.3.tgz", - "integrity": "sha1-zHCbRFP9IbHzAod0RMifiEJ845c=" + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz", + "integrity": "sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==" }, "babel-plugin-minify-infinity": { "version": "0.4.3", @@ -451,20 +484,15 @@ "integrity": "sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==" }, "babel-plugin-minify-simplify": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.0.tgz", - "integrity": "sha512-TM01J/YcKZ8XIQd1Z3nF2AdWHoDsarjtZ5fWPDksYZNsoOjQ2UO2EWm824Ym6sp127m44gPlLFiO5KFxU8pA5Q==" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz", + "integrity": "sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==" }, "babel-plugin-minify-type-constructors": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=" }, - "babel-plugin-transform-es2015-modules-reify": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-reify/-/babel-plugin-transform-es2015-modules-reify-0.17.0.tgz", - "integrity": "sha512-ndt36d1gb3sLb5iEejlDxGkfnfhghmMtmVcFoBs+0mY0uOKNfAfU+h56y403v8VnlbHggXAMhslaiVHG4hXMrw==" - }, "babel-plugin-transform-inline-consecutive-adds": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", @@ -521,19 +549,24 @@ "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" }, "babel-preset-meteor": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/babel-preset-meteor/-/babel-preset-meteor-7.1.2.tgz", - "integrity": "sha512-V0rhi9J8hPoKsyeNAQM4OnL3hHwEhHqgSvEmsqD2bzzeHJLmQiAX0PrPEcmY3rV+61GlI2tEE21nAkrPgPDC5Q==" + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-meteor/-/babel-preset-meteor-7.9.0.tgz", + "integrity": "sha512-SB2hGHZ2wKFiqaovO5DlgoYEUjNGP9FytZlLXppDKKP+TGpoGSQUyNhQ/ACSPFbTEBhKSuyV1LCEmHS+yK7FyQ==" }, "babel-preset-minify": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.0.tgz", - "integrity": "sha512-xj1s9Mon+RFubH569vrGCayA9Fm2GMsCgDRm1Jb8SgctOB7KFcrVc2o8K3YHUyMz+SWP8aea75BoS8YfsXXuiA==" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", + "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==" + }, + "call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==" }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==" + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" }, "color-convert": { "version": "1.9.3", @@ -546,14 +579,19 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==" }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==" + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" }, "escape-string-regexp": { "version": "1.0.5", @@ -561,54 +599,79 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-intrinsic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", + "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==" }, "globals": { - "version": "11.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz", - "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==" + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "jsesc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", - "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==" }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==" }, "meteor-babel": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/meteor-babel/-/meteor-babel-7.1.3.tgz", - "integrity": "sha512-5pLtk2SW7HXW97u0Ke9vRJw0KrAsgGUDdWGAn4WrgD1l4XIyK0sGMV0QLvirSgXRfff3UkAUik9hrXS1h1mDUw==" + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/meteor-babel/-/meteor-babel-7.10.5.tgz", + "integrity": "sha512-Vi9coQTeMbKv8+WVN+e7C0sllBqZPluMWlV4fjfRytkxyJnHL8cvUvckdGZTx5+dAIvYCFU6yWCElhb6+PDeWw==" }, "meteor-babel-helpers": { "version": "0.0.3", @@ -616,59 +679,64 @@ "integrity": "sha1-8uXZ+HlvvS6JAQI9dpnlsgLqn7A=" }, "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" - }, "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz", - "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==" + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==" }, "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" }, "regenerator-transform": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz", - "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==" + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==" }, "regexpu-core": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.2.0.tgz", - "integrity": "sha512-Z835VSnJJ46CNBttalHD/dB+Sj2ezmY6Xp38npwU87peK6mqOzOpV8eYktdkLTEkzzD+JsTcxd84ozd8I14+rw==" + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==" }, "regjsgen": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.4.0.tgz", - "integrity": "sha512-X51Lte1gCYUdlwhF28+2YMO0U6WeN0GLpgpA7LK7mbdDnkQYiwvEpmpe0F/cv5L14EbxgrdayAG3JETBv0dbXA==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" }, "regjsparser": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.3.0.tgz", - "integrity": "sha512-zza72oZBBHzt64G7DxdqrOo/30bhHkwMUoT0WqfGu98XLd7N+1tsy5MJ96Bk4MD0y74n629RhmrGW6XlnLLwCA==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", "dependencies": { "jsesc": { "version": "0.5.0", @@ -678,14 +746,14 @@ } }, "reify": { - "version": "0.17.3", - "resolved": "https://registry.npmjs.org/reify/-/reify-0.17.3.tgz", - "integrity": "sha512-i0t837UYnWyJPCeesupZjmpThIppOPSs4I/uHmsWzQaiGQqtsYlbeJNN5i+61fe6UEA3Famc3IHnlm511poMnA==" + "version": "0.20.12", + "resolved": "https://registry.npmjs.org/reify/-/reify-0.20.12.tgz", + "integrity": "sha512-4BzKwDWyJJbukwI6xIJRh+BDTitoGzxdgYPiQQ1zbcTZW6I8xgHPw1DnVuEs/mEZQlYm1e09DcFSApb4UaR5bQ==" }, "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==" + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==" }, "safe-buffer": { "version": "5.1.2", @@ -693,15 +761,20 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -712,10 +785,10 @@ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + "typescript": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.2.tgz", + "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==" }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", @@ -728,14 +801,14 @@ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==" }, "unicode-match-property-value-ecmascript": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", - "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" }, "unicode-property-aliases-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", - "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" } } } diff --git a/packages/babel-compiler/babel-compiler.js b/packages/babel-compiler/babel-compiler.js index 6ae5146c4e..b88abe5a30 100644 --- a/packages/babel-compiler/babel-compiler.js +++ b/packages/babel-compiler/babel-compiler.js @@ -30,7 +30,6 @@ BCp.processFilesForTarget = function (inputFiles) { if (inputFile.supportsLazyCompilation) { inputFile.addJavaScript({ path: inputFile.getPathInPackage(), - hash: inputFile.getSourceHash(), bare: !! inputFile.getFileOptions().bare }, function () { return compiler.processOneFileForTarget(inputFile); @@ -68,12 +67,6 @@ BCp.processOneFileForTarget = function (inputFile, source) { sourceMap: null, bare: !! fileOptions.bare }; - var cacheOptions = { - cacheDirectory: this.cacheDirectory, - cacheDeps: { - sourceHash: toBeAdded.hash, - }, - }; // If you need to exclude a specific file within a package from Babel // compilation, pass the { transpile: false } options to api.addFiles @@ -86,25 +79,43 @@ BCp.processOneFileForTarget = function (inputFile, source) { // compilation, give it the following file extension: .es5.js ! excludedFileExtensionPattern.test(inputFilePath)) { - var extraFeatures = Object.assign({}, this.extraFeatures); - var arch = inputFile.getArch(); + const features = { ...this.extraFeatures }; + const arch = inputFile.getArch(); if (arch.startsWith("os.")) { // Start with a much simpler set of Babel presets and plugins if // we're compiling for Node 8. - extraFeatures.nodeMajorVersion = parseInt(process.versions.node, 10); + features.nodeMajorVersion = parseInt(process.versions.node, 10); } else if (arch === "web.browser") { - extraFeatures.modernBrowsers = true; + features.modernBrowsers = true; } - if (! extraFeatures.hasOwnProperty("jscript")) { + if (! features.hasOwnProperty("jscript")) { // Perform some additional transformations to improve compatibility // in older browsers (e.g. wrapping named function expressions, per // http://kiro.me/blog/nfe_dilemma.html). - extraFeatures.jscript = true; + features.jscript = true; } - var babelOptions = Babel.getDefaultOptions(extraFeatures); + if (shouldCompileModulesOnly(inputFilePath)) { + // Modules like @babel/runtime/helpers/esm/typeof.js need to be + // compiled to support ECMAScript modules syntax, but should *not* + // be compiled in any other way (for more explanation, see my longer + // comment in shouldCompileModulesOnly). + features.compileModulesOnly = true; + } + + const cacheOptions = { + cacheDirectory: this.cacheDirectory, + cacheDeps: { + sourceHash: toBeAdded.hash, + }, + }; + + this.inferTypeScriptConfig( + features, inputFile, cacheOptions.cacheDeps); + + var babelOptions = Babel.getDefaultOptions(features); babelOptions.caller = { name: "meteor", arch }; this.inferExtraBabelOptions( @@ -166,6 +177,32 @@ BCp.processOneFileForTarget = function (inputFile, source) { return toBeAdded; }; +function shouldCompileModulesOnly(path) { + const parts = path.split("/"); + const nmi = parts.lastIndexOf("node_modules"); + if (nmi >= 0) { + const part1 = parts[nmi + 1]; + // We trust that any code related to @babel/runtime has already been + // compiled adequately. The @babel/runtime/helpers/typeof module is a + // good example of why double-compilation is risky for these packages, + // since it uses native typeof syntax to implement its polyfill for + // Symbol-aware typeof, so compiling it again would cause the + // generated code to try to require itself. In general, compiling code + // more than once with Babel should be safe (just unnecessary), except + // for code that Babel itself relies upon at runtime. Finally, if this + // hard-coded list of package names proves to be incomplete, we can + // always add to it (or even replace it completely) by releasing a new + // version of the babel-compiler package. + if (part1 === "@babel" || + part1 === "core-js" || + part1 === "regenerator-runtime") { + return true; + } + } + + return false; +} + BCp.setDiskCacheDirectory = function (cacheDir) { this.cacheDirectory = cacheDir; }; @@ -178,6 +215,20 @@ function profile(name, func) { } }; +BCp.inferTypeScriptConfig = function (features, inputFile, cacheDeps) { + if (features.typescript && inputFile.findControlFile) { + const tsconfigPath = inputFile.findControlFile("tsconfig.json"); + if (tsconfigPath) { + if (typeof features.typescript !== "object") { + features.typescript = Object.create(null); + } + Object.assign(features.typescript, { tsconfigPath }); + return true; + } + } + return false; +}; + BCp.inferExtraBabelOptions = function (inputFile, babelOptions, cacheDeps) { if (! inputFile.require || ! inputFile.findControlFile || diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index feb7187df9..26faa98d20 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,12 +6,12 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '7.2.1' + version: '7.5.4' }); Npm.depends({ - 'meteor-babel': '7.1.3', - 'json5': '2.1.0' + 'meteor-babel': '7.10.5', + 'json5': '2.1.1' }); Package.onUse(function (api) { diff --git a/packages/babel-runtime/.npm/package/npm-shrinkwrap.json b/packages/babel-runtime/.npm/package/npm-shrinkwrap.json deleted file mode 100644 index be3d02025a..0000000000 --- a/packages/babel-runtime/.npm/package/npm-shrinkwrap.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "lockfileVersion": 1, - "dependencies": { - "meteor-babel-helpers": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/meteor-babel-helpers/-/meteor-babel-helpers-0.0.3.tgz", - "integrity": "sha1-8uXZ+HlvvS6JAQI9dpnlsgLqn7A=" - } - } -} diff --git a/packages/babel-runtime/babel-runtime.js b/packages/babel-runtime/babel-runtime.js index 1df02e443d..00ebd17cd6 100644 --- a/packages/babel-runtime/babel-runtime.js +++ b/packages/babel-runtime/babel-runtime.js @@ -1,5 +1,3 @@ -exports.meteorBabelHelpers = require("meteor-babel-helpers"); - try { var babelRuntimeVersion = require("@babel/runtime/package.json").version; } catch (e) { diff --git a/packages/babel-runtime/package.js b/packages/babel-runtime/package.js index 3771b5697c..ead34989b3 100644 --- a/packages/babel-runtime/package.js +++ b/packages/babel-runtime/package.js @@ -1,16 +1,11 @@ Package.describe({ name: "babel-runtime", summary: "Runtime support for output of Babel transpiler", - version: '1.3.0', + version: '1.5.0', documentation: 'README.md' }); -Npm.depends({ - "meteor-babel-helpers": "0.0.3" -}); - Package.onUse(function (api) { api.use("modules"); api.mainModule("babel-runtime.js"); - api.export("meteorBabelHelpers"); }); diff --git a/packages/base64/base64.js b/packages/base64/base64.js index 2e938371d8..de33c8566a 100644 --- a/packages/base64/base64.js +++ b/packages/base64/base64.js @@ -32,19 +32,19 @@ const encode = array => { let c = null; let d = null; - array.forEach((elm, i) => { + for (let i = 0; i < array.length; i++) { switch (i % 3) { case 0: - a = (elm >> 2) & 0x3F; - b = (elm & 0x03) << 4; + a = (array[i] >> 2) & 0x3F; + b = (array[i] & 0x03) << 4; break; case 1: - b = b | (elm >> 4) & 0xF; - c = (elm & 0xF) << 2; + b = b | (array[i] >> 4) & 0xF; + c = (array[i] & 0xF) << 2; break; case 2: - c = c | (elm >> 6) & 0x03; - d = elm & 0x3F; + c = c | (array[i] >> 6) & 0x03; + d = array[i] & 0x3F; answer.push(getChar(a)); answer.push(getChar(b)); answer.push(getChar(c)); @@ -55,7 +55,7 @@ const encode = array => { d = null; break; } - }); + } if (a != null) { answer.push(getChar(a)); @@ -65,7 +65,7 @@ const encode = array => { } else { answer.push(getChar(c)); } - + if (d == null) { answer.push('='); } @@ -102,7 +102,7 @@ const decode = str => { len--; } } - + const arr = newBinary(len); let one = null; @@ -147,7 +147,7 @@ const decode = str => { break; } } - + return arr; }; diff --git a/packages/base64/package.js b/packages/base64/package.js index 710e5f873e..547992b2a4 100644 --- a/packages/base64/package.js +++ b/packages/base64/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Base64 encoding and decoding", - version: '1.0.11', + version: '1.0.12', }); Package.onUse(api => { diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index 0e8ebfef77..83fc175361 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.6.0' + version: '1.7.1' }); Npm.depends({ diff --git a/packages/boilerplate-generator/template-web.browser.js b/packages/boilerplate-generator/template-web.browser.js index 63694f0498..413151385d 100644 --- a/packages/boilerplate-generator/template-web.browser.js +++ b/packages/boilerplate-generator/template-web.browser.js @@ -42,6 +42,7 @@ export const headTemplate = ({ // Template function for rendering the boilerplate html for browsers export const closeTemplate = ({ meteorRuntimeConfig, + meteorRuntimeHash, rootUrlPathPrefix, inlineScriptsAllowed, js, @@ -54,8 +55,9 @@ export const closeTemplate = ({ ? template(' ')({ conf: meteorRuntimeConfig, }) - : template(' ')({ + : template(' ')({ src: rootUrlPathPrefix, + hash: meteorRuntimeHash, }), '', diff --git a/packages/boilerplate-generator/template-web.cordova.js b/packages/boilerplate-generator/template-web.cordova.js index 236fb2e60f..591f3887de 100644 --- a/packages/boilerplate-generator/template-web.cordova.js +++ b/packages/boilerplate-generator/template-web.cordova.js @@ -29,7 +29,7 @@ export const headTemplate = ({ ' ', ' ', ' ', - ' ', + ' ', (headSections.length === 1) ? [cssBundle, headSections[0]].join('\n') diff --git a/packages/browser-policy-content/browser-policy-content.js b/packages/browser-policy-content/browser-policy-content.js index fd7e829e7d..4d93d0fea5 100644 --- a/packages/browser-policy-content/browser-policy-content.js +++ b/packages/browser-policy-content/browser-policy-content.js @@ -106,7 +106,7 @@ var addSourceForDirective = function (directive, src) { var toAdd = []; //Only add single quotes to CSP2 script digests - if (/^(sha(256|384|512)-)/i.test(src)) { + if (/^(sha(256|384|512)|nonce)-/i.test(src)) { toAdd.push("'" + src + "'"); } else { src = src.toLowerCase(); diff --git a/packages/browser-policy-content/package.js b/packages/browser-policy-content/package.js index 5c8f18fe01..2015ca05c2 100644 --- a/packages/browser-policy-content/package.js +++ b/packages/browser-policy-content/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Configure content security policies", - version: "1.1.0" + version: "1.1.1" }); Package.onUse(function (api) { diff --git a/packages/browser-policy/README.md b/packages/browser-policy/README.md index 767931d2b2..42e0499964 100644 --- a/packages/browser-policy/README.md +++ b/packages/browser-policy/README.md @@ -31,10 +31,12 @@ For most apps, we recommend that you take the following steps: * Add `browser-policy` to your app to enable a starter policy. With this starter policy, your app's client code will be able to load content (images, scripts, fonts, etc.) only from its own origin, except that XMLHttpRequests and WebSocket -connections can go to any origin. Further, your app's client code will not be -able to use functions such as `eval()` that convert strings to code. Users' +connections can go to any origin. Users' browsers will only let your app be framed by web pages on the same origin as -your app. +your app. Further, your app's client code will not be +able to use functions such as `eval()` that convert strings to code. +However, note that if you also use the `dynamic-imports` package, this limitation +on `eval()` is lifted. * You can use the functions described below to customize the policies. If your app does not need any inline Javascript such as inline `", but normal {{spacebars}} escaping escapes too much! See // https://github.com/meteor/meteor/issues/3730 - meteorRuntimeConfig: JSON.stringify( - encodeURIComponent(JSON.stringify(runtimeConfig))), + meteorRuntimeConfig, + meteorRuntimeHash: sha1(meteorRuntimeConfig), rootUrlPathPrefix: __meteor_runtime_config__.ROOT_URL_PATH_PREFIX || '', bundledJsCssUrlRewriteHook: bundledJsCssUrlRewriteHook, sriMode: sriMode, @@ -357,8 +419,6 @@ WebAppInternals.generateBoilerplateInstance = function (arch, // - content: the stringified content that should be served at this path // - absolutePath: the absolute path on disk to the file -var staticFilesByArch; - // Serve static files from the manifest or added with // `addStaticJs`. Exported for tests. WebAppInternals.staticFilesMiddleware = async function ( @@ -387,27 +447,32 @@ WebAppInternals.staticFilesMiddleware = async function ( res.end(); }; - if (pathname === "/meteor_runtime_config.js" && - ! WebAppInternals.inlineScriptsAllowed()) { - serveStaticJs("__meteor_runtime_config__ = " + - JSON.stringify(__meteor_runtime_config__) + ";"); - return; - } else if (_.has(additionalStaticJs, pathname) && + if (_.has(additionalStaticJs, pathname) && ! WebAppInternals.inlineScriptsAllowed()) { serveStaticJs(additionalStaticJs[pathname]); return; } - const { arch, path } = getArchAndPath( - pathname, - identifyBrowser(req.headers["user-agent"]), - ); + const { arch, path } = WebApp.categorizeRequest(req); + + if (! hasOwn.call(WebApp.clientPrograms, arch)) { + // We could come here in case we run with some architectures excluded + next(); + return; + } // If pauseClient(arch) has been called, program.paused will be a // Promise that will be resolved when the program is unpaused. - await WebApp.clientPrograms[arch].paused; + const program = WebApp.clientPrograms[arch]; + await program.paused; - const info = getStaticFileInfo(pathname, path, arch); + if (path === "/meteor_runtime_config.js" && + ! WebAppInternals.inlineScriptsAllowed()) { + serveStaticJs(`__meteor_runtime_config__ = ${program.meteorRuntimeConfig};`); + return; + } + + const info = getStaticFileInfo(staticFilesByArch, pathname, path, arch); if (! info) { next(); return; @@ -477,7 +542,7 @@ WebAppInternals.staticFilesMiddleware = async function ( } }; -function getStaticFileInfo(originalPath, path, arch) { +function getStaticFileInfo(staticFilesByArch, originalPath, path, arch) { if (! hasOwn.call(WebApp.clientPrograms, arch)) { return null; } @@ -511,7 +576,7 @@ function getStaticFileInfo(originalPath, path, arch) { return finalize(originalPath); } - // If getArchAndPath returned an alternate path, try that instead. + // If categorizeRequest returned an alternate path, try that instead. if (path !== originalPath && hasOwn.call(staticFiles, path)) { return finalize(path); @@ -521,37 +586,6 @@ function getStaticFileInfo(originalPath, path, arch) { return info; } -function getArchAndPath(path, browser) { - const pathParts = path.split("/"); - const archKey = pathParts[1]; - - if (archKey.startsWith("__")) { - const archCleaned = "web." + archKey.slice(2); - if (hasOwn.call(WebApp.clientPrograms, archCleaned)) { - pathParts.splice(1, 1); // Remove the archKey part. - return { - arch: archCleaned, - path: pathParts.join("/"), - }; - } - } - - // TODO Perhaps one day we could infer Cordova clients here, so that we - // wouldn't have to use prefixed "/__cordova/..." URLs. - const arch = isModern(browser) - ? "web.browser" - : "web.browser.legacy"; - - if (hasOwn.call(WebApp.clientPrograms, arch)) { - return { arch, path }; - } - - return { - arch: WebApp.defaultArch, - path, - }; -} - // Parse the passed in port value. Return the port as-is if it's a String // (e.g. a Windows Server style named pipe), otherwise return the port as an // integer. @@ -586,14 +620,16 @@ function runWebAppServer() { WebAppInternals.reloadClientPrograms = function () { syncQueue.runTask(function() { - staticFilesByArch = Object.create(null); + const staticFilesByArch = Object.create(null); const { configJson } = __meteor_bootstrap__; const clientArchs = configJson.clientArchs || Object.keys(configJson.clientPaths); try { - clientArchs.forEach(generateClientProgram); + clientArchs.forEach(arch => { + generateClientProgram(arch, staticFilesByArch); + }); WebAppInternals.staticFilesByArch = staticFilesByArch; } catch (e) { Log.error("Error reloading the client program: " + e.stack); @@ -627,7 +663,10 @@ function runWebAppServer() { syncQueue.runTask(() => generateClientProgram(arch)); }; - function generateClientProgram(arch) { + function generateClientProgram( + arch, + staticFilesByArch = WebAppInternals.staticFilesByArch, + ) { const clientDir = pathJoin( pathDirname(__meteor_bootstrap__.serverDir), arch, @@ -682,11 +721,6 @@ function runWebAppServer() { const { PUBLIC_SETTINGS } = __meteor_runtime_config__; const configOverrides = { PUBLIC_SETTINGS, - // Since the minimum modern versions defined in the modern-versions - // package affect which bundle a given client receives, any changes - // in those versions should trigger a corresponding change in the - // versions calculated below. - minimumModernVersionsHash: calculateHashOfMinimumVersions(), }; const oldProgram = WebApp.clientPrograms[arch]; @@ -696,6 +730,10 @@ function runWebAppServer() { // Use arrow functions so that these versions can be lazily // calculated later, and so that they will not be included in the // staticFiles[manifestUrl].content string below. + // + // Note: these version calculations must be kept in agreement with + // CordovaBuilder#appendVersion in tools/cordova/builder.js, or hot + // code push will reload Cordova apps unnecessarily. version: () => WebAppHashing.calculateClientHash( manifest, null, configOverrides), versionRefreshable: () => WebAppHashing.calculateClientHash( @@ -790,13 +828,18 @@ function runWebAppServer() { function generateBoilerplateForArch(arch) { const program = WebApp.clientPrograms[arch]; + const additionalOptions = defaultOptionsForArch[arch] || {}; const { baseData } = boilerplateByArch[arch] = WebAppInternals.generateBoilerplateInstance( arch, program.manifest, - defaultOptionsForArch[arch], + additionalOptions, ); - + // We need the runtime config with overrides for meteor_runtime_config.js: + program.meteorRuntimeConfig = JSON.stringify({ + ...__meteor_runtime_config__, + ...(additionalOptions.runtimeConfigOverrides || null), + }); program.refreshableAssets = baseData.css.map(file => ({ url: bundledJsCssUrlRewriteHook(file.url), })); @@ -813,7 +856,7 @@ function runWebAppServer() { app.use(rawConnectHandlers); // Auto-compress any json, javascript, or text. - app.use(compress()); + app.use(compress({filter: shouldCompress})); // parse cookies into an object app.use(cookieParser()); @@ -835,8 +878,11 @@ function runWebAppServer() { // // Do this before the next middleware destroys req.url if a path prefix // is set to close #10111. - app.use(query()); - + app.use(function (request, response, next) { + request.query = qs.parse(parseUrl(request.url).query); + next(); + }); + function getPathParts(path) { const parts = path.split("/"); while (parts[0] === "") parts.shift(); @@ -851,7 +897,7 @@ function runWebAppServer() { // Strip off the path prefix, if it exists. app.use(function (request, response, next) { const pathPrefix = __meteor_runtime_config__.ROOT_URL_PATH_PREFIX; - const { pathname } = parseUrl(request.url); + const { pathname, search } = parseUrl(request.url); // check if the path in the url starts with the path prefix if (pathPrefix) { @@ -859,6 +905,9 @@ function runWebAppServer() { const pathParts = getPathParts(pathname); if (isPrefixOf(prefixParts, pathParts)) { request.url = "/" + pathParts.slice(prefixParts.length).join("/"); + if (search) { + request.url += search; + } return next(); } } @@ -881,7 +930,10 @@ function runWebAppServer() { // Serve static files from the manifest. // This is inspired by the 'static' middleware. app.use(function (req, res, next) { - WebAppInternals.staticFilesMiddleware(staticFilesByArch, req, res, next); + WebAppInternals.staticFilesMiddleware( + WebAppInternals.staticFilesByArch, + req, res, next + ); }); // Core Meteor packages like dynamic-import can add handlers before @@ -959,10 +1011,21 @@ function runWebAppServer() { return; } - const { arch } = getArchAndPath( - parseRequest(req).pathname, - request.browser, - ); + const { arch } = request; + assert.strictEqual(typeof arch, "string", { arch }); + + if (! hasOwn.call(WebApp.clientPrograms, arch)) { + // We could come here in case we run with some architectures excluded + headers['Cache-Control'] = 'no-cache'; + res.writeHead(404, headers); + if (Meteor.isDevelopment) { + res.end(`No client program found for the ${arch} architecture.`); + } else { + // Safety net, but this branch should not be possible. + res.end("404 Not Found"); + } + return; + } // If pauseClient(arch) has been called, program.paused will be a // Promise that will be resolved when the program is unpaused. diff --git a/scripts/admin/copy-dev-bundle-from-jenkins.sh b/scripts/admin/copy-dev-bundle-from-jenkins.sh index 44a9b702e4..ab6bfdb13a 100755 --- a/scripts/admin/copy-dev-bundle-from-jenkins.sh +++ b/scripts/admin/copy-dev-bundle-from-jenkins.sh @@ -39,7 +39,7 @@ echo Found build $DIRNAME trap "echo Found surprising number of tarballs." EXIT # Check to make sure the proper number of each kind of file is there. aws s3 ls s3://com.meteor.jenkins/$DIRNAME/ | \ - perl -nle 'if (/\.tar\.gz/) { ++$TAR } else { die "something weird" } END { exit !($TAR == 5) }' + perl -nle 'if (/\.tar\.gz/) { ++$TAR } else { die "something weird" } END { exit !($TAR == 3) }' trap - EXIT diff --git a/scripts/admin/eslint/.eslintrc b/scripts/admin/eslint/.eslintrc deleted file mode 100644 index a93a42d2db..0000000000 --- a/scripts/admin/eslint/.eslintrc +++ /dev/null @@ -1,154 +0,0 @@ -{ - "parser": "babel-eslint", - "env": { - "browser": true, - "node": true - }, - "rules": { -/** - * Strict mode - */ - // babel inserts "use strict"; for us - // http://eslint.org/docs/rules/strict - "strict": [2, "never"], - -/** - * ES6 - */ - "no-var": 2, // http://eslint.org/docs/rules/no-var - -/** - * Variables - */ - "no-shadow": 2, // http://eslint.org/docs/rules/no-shadow - "no-shadow-restricted-names": 2, // http://eslint.org/docs/rules/no-shadow-restricted-names - "no-unused-vars": [2, { // http://eslint.org/docs/rules/no-unused-vars - "vars": "local", - "args": "after-used" - }], - "no-use-before-define": [2, "nofunc"], // http://eslint.org/docs/rules/no-use-before-define - -/** - * Possible errors - */ - "comma-dangle": [1, "always-multiline"], // http://eslint.org/docs/rules/comma-dangle - "no-cond-assign": [2, "always"], // http://eslint.org/docs/rules/no-cond-assign - "no-console": 1, // http://eslint.org/docs/rules/no-console - "no-debugger": 1, // http://eslint.org/docs/rules/no-debugger - "no-alert": 1, // http://eslint.org/docs/rules/no-alert - "no-constant-condition": 1, // http://eslint.org/docs/rules/no-constant-condition - "no-dupe-keys": 2, // http://eslint.org/docs/rules/no-dupe-keys - "no-duplicate-case": 2, // http://eslint.org/docs/rules/no-duplicate-case - "no-empty": 2, // http://eslint.org/docs/rules/no-empty - "no-ex-assign": 2, // http://eslint.org/docs/rules/no-ex-assign - "no-extra-boolean-cast": 0, // http://eslint.org/docs/rules/no-extra-boolean-cast - "no-extra-semi": 2, // http://eslint.org/docs/rules/no-extra-semi - "no-func-assign": 2, // http://eslint.org/docs/rules/no-func-assign - "no-inner-declarations": 2, // http://eslint.org/docs/rules/no-inner-declarations - "no-invalid-regexp": 2, // http://eslint.org/docs/rules/no-invalid-regexp - "no-irregular-whitespace": 2, // http://eslint.org/docs/rules/no-irregular-whitespace - "no-obj-calls": 2, // http://eslint.org/docs/rules/no-obj-calls - "no-reserved-keys": 2, // http://eslint.org/docs/rules/no-reserved-keys - "no-sparse-arrays": 2, // http://eslint.org/docs/rules/no-sparse-arrays - "no-unreachable": 2, // http://eslint.org/docs/rules/no-unreachable - "use-isnan": 2, // http://eslint.org/docs/rules/use-isnan - "block-scoped-var": 0, // http://eslint.org/docs/rules/block-scoped-var - -/** - * Best practices - */ - "consistent-return": 2, // http://eslint.org/docs/rules/consistent-return - "curly": [2, "multi-line"], // http://eslint.org/docs/rules/curly - "default-case": 2, // http://eslint.org/docs/rules/default-case - "dot-notation": [2, { // http://eslint.org/docs/rules/dot-notation - "allowKeywords": true - }], - "eqeqeq": 2, // http://eslint.org/docs/rules/eqeqeq - "guard-for-in": 2, // http://eslint.org/docs/rules/guard-for-in - "no-caller": 2, // http://eslint.org/docs/rules/no-caller - "no-else-return": 2, // http://eslint.org/docs/rules/no-else-return - "no-eq-null": 2, // http://eslint.org/docs/rules/no-eq-null - "no-eval": 2, // http://eslint.org/docs/rules/no-eval - "no-extend-native": 2, // http://eslint.org/docs/rules/no-extend-native - "no-extra-bind": 2, // http://eslint.org/docs/rules/no-extra-bind - "no-fallthrough": 2, // http://eslint.org/docs/rules/no-fallthrough - "no-floating-decimal": 2, // http://eslint.org/docs/rules/no-floating-decimal - "no-implied-eval": 2, // http://eslint.org/docs/rules/no-implied-eval - "no-lone-blocks": 2, // http://eslint.org/docs/rules/no-lone-blocks - "no-loop-func": 2, // http://eslint.org/docs/rules/no-loop-func - "no-multi-str": 2, // http://eslint.org/docs/rules/no-multi-str - "no-native-reassign": 2, // http://eslint.org/docs/rules/no-native-reassign - "no-new": 2, // http://eslint.org/docs/rules/no-new - "no-new-func": 2, // http://eslint.org/docs/rules/no-new-func - "no-new-wrappers": 2, // http://eslint.org/docs/rules/no-new-wrappers - "no-octal": 2, // http://eslint.org/docs/rules/no-octal - "no-octal-escape": 2, // http://eslint.org/docs/rules/no-octal-escape - "no-param-reassign": 2, // http://eslint.org/docs/rules/no-param-reassign - "no-proto": 2, // http://eslint.org/docs/rules/no-proto - "no-redeclare": 2, // http://eslint.org/docs/rules/no-redeclare - "no-return-assign": 2, // http://eslint.org/docs/rules/no-return-assign - "no-script-url": 2, // http://eslint.org/docs/rules/no-script-url - "no-self-compare": 2, // http://eslint.org/docs/rules/no-self-compare - "no-sequences": 2, // http://eslint.org/docs/rules/no-sequences - "no-throw-literal": 2, // http://eslint.org/docs/rules/no-throw-literal - "no-with": 2, // http://eslint.org/docs/rules/no-with - "radix": 2, // http://eslint.org/docs/rules/radix - "vars-on-top": 2, // http://eslint.org/docs/rules/vars-on-top - "wrap-iife": [2, "any"], // http://eslint.org/docs/rules/wrap-iife - "yoda": 2, // http://eslint.org/docs/rules/yoda - "max-len": [2, 80, 2], // http://eslint.org/docs/rules/max-len - -/** - * Style - */ - "indent": [2, 2], // http://eslint.org/docs/rules/indent - "brace-style": [2, // http://eslint.org/docs/rules/brace-style - "1tbs", { - "allowSingleLine": true - }], - "quotes": [ - 2, "single", "avoid-escape" // http://eslint.org/docs/rules/quotes - ], - "camelcase": [2, { // http://eslint.org/docs/rules/camelcase - "properties": "never" - }], - "comma-spacing": [2, { // http://eslint.org/docs/rules/comma-spacing - "before": false, - "after": true - }], - "comma-style": [2, "last"], // http://eslint.org/docs/rules/comma-style - "eol-last": 2, // http://eslint.org/docs/rules/eol-last - "func-names": 1, // http://eslint.org/docs/rules/func-names - "func-style": [2, "declaration"], // http://eslint.org/docs/rules/func-style - "key-spacing": [2, { // http://eslint.org/docs/rules/key-spacing - "beforeColon": false, - "afterColon": true - }], - "new-cap": [2, { // http://eslint.org/docs/rules/new-cap - "newIsCap": true - }], - "no-multiple-empty-lines": [2, { // http://eslint.org/docs/rules/no-multiple-empty-lines - "max": 2 - }], - "no-nested-ternary": 2, // http://eslint.org/docs/rules/no-nested-ternary - "no-new-object": 2, // http://eslint.org/docs/rules/no-new-object - "no-array-constructor": 2, // http://eslint.org/docs/rules/no-array-constructor - "no-spaced-func": 2, // http://eslint.org/docs/rules/no-spaced-func - "no-trailing-spaces": 2, // http://eslint.org/docs/rules/no-trailing-spaces - "no-wrap-func": 2, // http://eslint.org/docs/rules/no-wrap-func - "no-underscore-dangle": 0, // http://eslint.org/docs/rules/no-underscore-dangle - "one-var": [2, "never"], // http://eslint.org/docs/rules/one-var - "padded-blocks": [2, "never"], // http://eslint.org/docs/rules/padded-blocks - "semi": [2, "always"], // http://eslint.org/docs/rules/semi - "semi-spacing": [2, { // http://eslint.org/docs/rules/semi-spacing - "before": false, - "after": true - }], - "space-after-keywords": 2, // http://eslint.org/docs/rules/space-after-keywords - "space-before-blocks": 2, // http://eslint.org/docs/rules/space-before-blocks - "space-before-function-paren": [2, "never"], // http://eslint.org/docs/rules/space-before-function-paren - "space-infix-ops": 2, // http://eslint.org/docs/rules/space-infix-ops - "space-return-throw-case": 2, // http://eslint.org/docs/rules/space-return-throw-case - "spaced-line-comment": 2, // http://eslint.org/docs/rules/spaced-line-comment - } -} diff --git a/scripts/admin/eslint/eslint.sh b/scripts/admin/eslint/eslint.sh deleted file mode 100755 index d4d451561f..0000000000 --- a/scripts/admin/eslint/eslint.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash - -ORIGDIR=$(pwd) -cd $(dirname $0) -SCRIPTDIR=$(pwd) -cd ../../.. -TOPDIR=$(pwd) - -INFINITY=10000 - -cd "$SCRIPTDIR" -${TOPDIR}/dev_bundle/bin/npm install - -cd "$TOPDIR" - -files_to_lint="." -if [ "$1" == "modified" ]; then - files_to_lint=$(git diff --cached --name-only --diff-filter=ACM \ - | grep '\.js$') -fi - -if [ -n "$files_to_lint" ]; then - "${TOPDIR}/dev_bundle/bin/node" \ - "${SCRIPTDIR}/node_modules/.bin/eslint" \ - --quiet \ - -c "${SCRIPTDIR}/.eslintrc" \ - $files_to_lint -fi diff --git a/scripts/admin/eslint/package-lock.json b/scripts/admin/eslint/package-lock.json deleted file mode 100644 index 6161617ace..0000000000 --- a/scripts/admin/eslint/package-lock.json +++ /dev/null @@ -1,1370 +0,0 @@ -{ - "name": "meteor-jsdoc", - "version": "0.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "acorn": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", - "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==" - }, - "acorn-jsx": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz", - "integrity": "sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==", - "requires": { - "acorn": "^5.0.3" - } - }, - "acorn-to-esprima": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/acorn-to-esprima/-/acorn-to-esprima-2.0.8.tgz", - "integrity": "sha1-AD8MZC65ITL0F9NwjxStqCrfLrE=" - }, - "ajv": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", - "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.1" - } - }, - "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=" - }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==" - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "babel-eslint": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-4.1.7.tgz", - "integrity": "sha1-eSv6d/JwmvbyCtT3lswtzwtxMWU=", - "requires": { - "acorn-to-esprima": "^2.0.4", - "babel-traverse": "^6.0.20", - "babel-types": "^6.0.19", - "babylon": "^6.0.18", - "lodash.assign": "^3.2.0", - "lodash.pick": "^3.1.0" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "requires": { - "callsites": "^0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==" - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - }, - "color-convert": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", - "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", - "requires": { - "color-name": "1.1.1" - } - }, - "color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "requires": { - "foreach": "^2.0.5", - "object-keys": "^1.0.8" - } - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", - "requires": { - "es-to-primitive": "^1.1.1", - "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" - } - }, - "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "requires": { - "is-callable": "^1.1.1", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "eslint": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.3.0.tgz", - "integrity": "sha512-N/tCqlMKkyNvAvLu+zI9AqDasnSLt00K+Hu8kdsERliC9jYEc8ck12XtjvOXrBKu8fK6RrBcN9bat6Xk++9jAg==", - "requires": { - "ajv": "^6.5.0", - "babel-code-frame": "^6.26.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^4.0.0", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.2", - "imurmurhash": "^0.1.4", - "inquirer": "^5.2.0", - "is-resolvable": "^1.1.0", - "js-yaml": "^3.11.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.5", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^2.0.0", - "require-uncached": "^1.0.3", - "semver": "^5.5.0", - "string.prototype.matchall": "^2.0.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^4.0.3", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "11.7.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz", - "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "eslint-plugin-react": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-2.5.0.tgz", - "integrity": "sha1-b2DLrW/6HcTl2TkZtaHtZ1IubLc=" - }, - "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==" - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==" - }, - "espree": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-4.0.0.tgz", - "integrity": "sha512-kapdTCt1bjmspxStVKX6huolXVV5ZfyZguY1lcfhVVZstce3bqxH9mcLzNn3/mlgW6wQ732+0fuG9v7h0ZQoKg==", - "requires": { - "acorn": "^5.6.0", - "acorn-jsx": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, - "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "requires": { - "circular-json": "^0.3.1", - "del": "^2.0.2", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.3.tgz", - "integrity": "sha512-Z/vAH2GGIEATQnBVXMclE2IGV6i0GyVngKThcGZ5kHgHMxLo9Ow2+XHRq1aEKEej5vOF1TPJNbvX6J/anT0M7A==" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "inquirer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", - "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.1.0", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^5.5.2", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "^1.0.1" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "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": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" - }, - "lodash._baseflatten": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz", - "integrity": "sha1-B3D/gBMa9uNPO1EXlqe6UhTmX/c=", - "requires": { - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash._basefor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", - "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=" - }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=" - }, - "lodash._createassigner": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", - "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", - "requires": { - "lodash._bindcallback": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash.restparam": "^3.0.0" - } - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" - }, - "lodash._pickbyarray": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash._pickbyarray/-/lodash._pickbyarray-3.0.2.tgz", - "integrity": "sha1-H4mNlgfrVgsOFnOEt3x8bRCKpMU=" - }, - "lodash._pickbycallback": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._pickbycallback/-/lodash._pickbycallback-3.0.0.tgz", - "integrity": "sha1-/2G5oBens699MObFPeKK+hm4dQo=", - "requires": { - "lodash._basefor": "^3.0.0", - "lodash.keysin": "^3.0.0" - } - }, - "lodash.assign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", - "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", - "requires": { - "lodash._baseassign": "^3.0.0", - "lodash._createassigner": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.keysin": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/lodash.keysin/-/lodash.keysin-3.0.8.tgz", - "integrity": "sha1-IsRJPrvtsUJ5YqVLRFssinZ/tH8=", - "requires": { - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.pick": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-3.1.0.tgz", - "integrity": "sha1-8lKoVbIEa2G805BLJvdr0u/GVVA=", - "requires": { - "lodash._baseflatten": "^3.0.0", - "lodash._bindcallback": "^3.0.0", - "lodash._pickbyarray": "^3.0.0", - "lodash._pickbycallback": "^3.0.0", - "lodash.restparam": "^3.0.0" - } - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - }, - "nice-try": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", - "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==" - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, - "regexp.prototype.flags": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", - "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", - "requires": { - "define-properties": "^1.1.2" - } - }, - "regexpp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.0.tgz", - "integrity": "sha512-g2FAVtR8Uh8GO1Nv5wpxW7VFVwHcCEr4wyA8/MHiRkO8uHoR5ntAA8Uq3P1vvMTX/BeQiRVSpDGLd+Wn5HNOTA==" - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=" - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "requires": { - "glob": "^7.0.5" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "requires": { - "is-promise": "^2.1.0" - } - }, - "rxjs": { - "version": "5.5.11", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.11.tgz", - "integrity": "sha512-3bjO7UwWfA2CV7lmwYMBzj4fQ6Cq+ftHc2MvUe+WMS7wcdJ1LosDWmdjPQanYp2dBRj572p7PeU81JUxHKOcBA==", - "requires": { - "symbol-observable": "1.0.1" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string.prototype.matchall": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-2.0.0.tgz", - "integrity": "sha512-WoZ+B2ypng1dp4iFLF2kmZlwwlE19gmjgKuhL1FJfDgCREWb3ye3SDVHSzLH6bxfnvYmkCxbzkmWcQZHA4P//Q==", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.10.0", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "regexp.prototype.flags": "^1.2.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=" - }, - "table": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", - "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", - "requires": { - "ajv": "^6.0.1", - "ajv-keywords": "^3.0.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "requires": { - "mkdirp": "^0.5.1" - } - } - } -} diff --git a/scripts/admin/eslint/package.json b/scripts/admin/eslint/package.json deleted file mode 100644 index f53bc6310c..0000000000 --- a/scripts/admin/eslint/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "meteor-jsdoc", - "version": "0.0.0", - "description": "no warn", - "readme": "no warn", - "repository": "no warn", - "dependencies": { - "babel-eslint": "4.1.7", - "eslint": "^5.3.0", - "eslint-plugin-react": "2.5.0" - } -} diff --git a/scripts/admin/git-hooks/pre-commit b/scripts/admin/git-hooks/pre-commit deleted file mode 100755 index 1763bb0d71..0000000000 --- a/scripts/admin/git-hooks/pre-commit +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - -cd $(dirname $0) -cd ../.. - -# If you want to allow linter errors set this variable to true. -eslint=$(git config hooks.ignore-eslint) - -echo "Linting Meteor tool code..." - -./scripts/admin/eslint/eslint.sh modified -linter_exit_code=$? - -if [ "$eslint" != "true" ] && [ $linter_exit_code != 0 ] -then - echo "Linter errors detected in pre-commit hook." - echo - echo "Run the linter with ./scripts/admin/eslint/eslint.sh" - echo - echo "If you know what you are doing you can disable this" - echo "check using:" - echo - echo " git config hooks.ignore-eslint true" - echo - exit 1 -fi diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 841ba991fb..3b36ee668b 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.8-rc.17", + "version": "1.12-beta.3", "recommended": false, "official": false, "description": "Meteor" diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index f683bf5f88..bccf7be18b 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.8", + "version": "1.12", "recommended": false, "official": true, "description": "The Official Meteor Distribution" diff --git a/scripts/build-dev-bundle-common.sh b/scripts/build-dev-bundle-common.sh index 1bc195553a..5feb85aa56 100644 --- a/scripts/build-dev-bundle-common.sh +++ b/scripts/build-dev-bundle-common.sh @@ -5,10 +5,10 @@ set -u UNAME=$(uname) ARCH=$(uname -m) -NODE_VERSION=8.11.4 -MONGO_VERSION_64BIT=4.0.2 -MONGO_VERSION_32BIT=3.2.19 -NPM_VERSION=6.4.1 +NODE_VERSION=12.18.4 +MONGO_VERSION_64BIT=4.2.8 +MONGO_VERSION_32BIT=3.2.22 +NPM_VERSION=6.14.8 # If we built Node from source on Jenkins, this is the build number. NODE_BUILD_NUMBER= @@ -40,7 +40,7 @@ elif [ "$UNAME" == "Darwin" ] ; then exit 1 fi - OS="osx" + OS="macos" # We don't strip on Mac because we don't know a safe command. (Can't strip # too much because we do need node to be able to load objects like diff --git a/scripts/dev-bundle-server-package.js b/scripts/dev-bundle-server-package.js index 1e2c2ad7af..8f400155d7 100644 --- a/scripts/dev-bundle-server-package.js +++ b/scripts/dev-bundle-server-package.js @@ -8,14 +8,17 @@ var packageJson = { name: "meteor-dev-bundle", private: true, dependencies: { - "meteor-promise": "0.8.6", - fibers: "2.0.0", - promise: "8.0.1", - // Not yet upgrading Underscore from 1.5.2 to 1.7.0 (which should be done - // in the package too) because we should consider using lodash instead - // (and there are backwards-incompatible changes either way). - underscore: "1.5.2", + // Keep the versions of these packages consistent with the versions + // found in dev-bundle-tool-package.js. + fibers: "4.0.3", + "meteor-promise": "0.8.7", + promise: "8.0.2", + reify: "0.20.12", + "@babel/parser": "7.9.4", + "@types/underscore": "1.9.2", + underscore: "1.9.1", "source-map-support": "https://github.com/meteor/node-source-map-support/tarball/1912478769d76e5df4c365e147f25896aee6375e", + "@types/semver": "5.4.0", semver: "5.4.1" }, // These are only used in dev mode (by shell.js) so end-users can avoid diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index 3e6863f990..6584853cd0 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -10,36 +10,40 @@ var packageJson = { dependencies: { // Explicit dependency because we are replacing it with a bundled version // and we want to make sure there are no dependencies on a higher version - npm: "6.4.1", - pacote: "https://github.com/meteor/pacote/tarball/a3285854a68e4969d6c8abaa74407f7d113b178f", - "node-gyp": "3.7.0", - "node-pre-gyp": "0.10.3", - "meteor-babel": "7.1.3", - "meteor-promise": "0.8.6", - promise: "8.0.1", - reify: "0.17.3", - fibers: "2.0.0", + npm: "6.14.8", + pacote: "https://github.com/meteor/pacote/tarball/a81b0324686e85d22c7688c47629d4009000e8b8", + "node-gyp": "6.0.1", + "node-pre-gyp": "0.14.0", + typescript: "4.1.2", + "meteor-babel": "7.10.5", + // Keep the versions of these packages consistent with the versions + // found in dev-bundle-server-package.js. + "meteor-promise": "0.8.7", + fibers: "4.0.3", + reify: "0.20.12", // So that Babel can emit require("@babel/runtime/helpers/...") calls. - "@babel/runtime": "7.1.2", + "@babel/runtime": "7.9.2", // For backwards compatibility with isopackets that still depend on // babel-runtime rather than @babel/runtime. "babel-runtime": "7.0.0-beta.3", - // Not yet upgrading Underscore from 1.5.2 to 1.7.0 (which should be done - // in the package too) because we should consider using lodash instead - // (and there are backwards-incompatible changes either way). - underscore: "1.5.2", + "@types/underscore": "1.9.2", + underscore: "1.9.1", "source-map-support": "https://github.com/meteor/node-source-map-support/tarball/1912478769d76e5df4c365e147f25896aee6375e", + "@types/semver": "5.4.0", semver: "5.4.1", - request: "2.83.0", + request: "2.88.0", uuid: "3.3.2", + "graceful-fs": "4.2.2", fstream: "https://github.com/meteor/fstream/tarball/cf4ea6c175355cec7bee38311e170d08c4078a5d", tar: "2.2.1", - kexec: "3.0.0", - "source-map": "0.5.3", + // Fork of kexec@3.0.0 with my Node.js 12 compatibility PR + // https://github.com/jprichardson/node-kexec/pull/37 applied. + kexec: "https://github.com/meteor/node-kexec/tarball/f29f54037c7db6ad29e1781463b182e5929215a0", + "source-map": "0.7.3", chalk: "0.5.1", - sqlite3: "3.1.8", - netroute: "1.0.2", + sqlite3: "4.1.0", "http-proxy": "1.16.2", + "is-reachable": "3.1.0", "wordwrap": "0.0.2", "moment": "2.20.1", "rimraf": "2.6.2", @@ -52,9 +56,14 @@ var packageJson = { escope: "3.6.0", split2: "2.2.0", multipipe: "2.0.1", - pathwatcher: "7.1.1", - optimism: "0.6.3", - 'lru-cache': '4.1.3' + pathwatcher: "8.1.0", + // The @wry/context package version must be compatible with the + // version constraint imposed by optimism/package.json. + optimism: "0.11.3", + "@wry/context": "0.4.4", + 'lru-cache': '4.1.3', + "anser": "1.4.8", + 'xmlbuilder2': '1.3.0' } }; diff --git a/scripts/generate-dev-bundle.ps1 b/scripts/generate-dev-bundle.ps1 index 1bc4075a6f..bd799c545f 100644 --- a/scripts/generate-dev-bundle.ps1 +++ b/scripts/generate-dev-bundle.ps1 @@ -57,7 +57,7 @@ Function Invoke-Install7ZipApplication { Write-Host "Downloading 7-zip..." -ForegroundColor Magenta $7zMsiPath = Join-Path $dirTemp '7z.msi' # 32-bit, right now. But this does not go in the bundle. - $webclient.DownloadFile("http://www.7-zip.org/a/7z1604.msi", $7zMsiPath) + $webclient.DownloadFile("https://www.7-zip.org/a/7z1604.msi", $7zMsiPath) Write-Host "Installing 7-zip system-wide..." -ForegroundColor Magenta & "msiexec.exe" /i $7zMsiPath /quiet /qn /norestart | Out-Null @@ -69,12 +69,9 @@ Function Invoke-Install7ZipApplication { Function Add-7ZipTool { Write-Host "Downloading 7-zip 'extra'..." -ForegroundColor Magenta $extraArchive = Join-Path $dirTemp 'extra.7z' - $webclient.DownloadFile("http://www.7-zip.org/a/7z1604-extra.7z", $extraArchive) + $webclient.DownloadFile("https://www.7-zip.org/a/7z1604-extra.7z", $extraArchive) $pathToExtract = 'x64/7za.exe' - if ($PLATFORM -eq "windows_x86") { - $pathToExtract = '7za.exe' - } Write-Host 'Placing 7za.exe from extra.7z in \bin...' -ForegroundColor Magenta & "$system7zip" e $extraArchive -o"$dirTemp" $pathToExtract | Out-Null @@ -118,11 +115,7 @@ Function Add-NodeAndNpm { $nodeUrlBase = 'https://nodejs.org/dist' } - if ($PLATFORM -eq "windows_x86") { - $nodeArchitecture = 'win-x86' - } else { - $nodeArchitecture = 'win-x64' - } + $nodeArchitecture = 'win-x64' # Various variables which are used as part of directory paths and # inside Node release and header archives. @@ -231,8 +224,7 @@ Function Add-Mongo { # Mongo >= 3.4 no longer supports 32-bit (x86) architectures, so we package # the latest 3.2 version of Mongo for those builds and >= 3.4 for x64. $mongo_filenames = @{ - windows_x86 = "mongodb-win32-i386-${MONGO_VERSION_32BIT}" - windows_x64 = "mongodb-win32-x86_64-2008plus-ssl-${MONGO_VERSION_64BIT}" + windows_x64 = "mongodb-win32-x86_64-2012plus-${MONGO_VERSION_64BIT}" } $previousCwd = $PWD @@ -321,23 +313,11 @@ Function Add-NpmModulesFromJsBundleFile { cd node_modules - # @babel/runtime@7.0.0-beta.56 removed the @babel/runtime/helpers/builtin - # directory, since all helpers are now implemented in the built-in style - # (meaning they do not import core-js polyfills). Generated code in build - # plugins might still refer to the old directory layout (at least for the - # time being), but we can accommodate that by symlinking to the parent - # directory, since all the module names are the same. - if ((Test-Path "@babel\runtime\helpers") -And - !(Test-Path "@babel\runtime\helpers\builtin")) { - cd @babel\runtime\helpers - & "$($Commands.node)" -e 'require("fs").symlinkSync(".", "builtin", "junction")' - cd ..\..\.. - } - # Since we install a patched version of pacote in $Destination\lib\node_modules, # we need to remove npm's bundled version to make it use the new one. if (Test-Path "pacote") { Remove-DirectoryRecursively "npm\node_modules\pacote" + & "$($Commands.node)" -e "require('fs').renameSync('pacote', 'npm\\node_modules\\pacote')" } cd "$previousCwd" diff --git a/scripts/generate-dev-bundle.sh b/scripts/generate-dev-bundle.sh index 0c2fa22843..50a9dfc053 100755 --- a/scripts/generate-dev-bundle.sh +++ b/scripts/generate-dev-bundle.sh @@ -52,29 +52,29 @@ downloadReleaseCandidateNode() { extractNodeFromTarGz || downloadNodeFromS3 || \ downloadOfficialNode || downloadReleaseCandidateNode -# Download Mongo from mongodb.com. Will download a 64-bit version of Mongo -# by default. Will download a 32-bit version of Mongo if using a 32-bit based -# OS. +# On macOS, download MongoDB from mongodb.com. On Linux, download a custom build +# that is compatible with current distributions. If a 32-bit Linux is used, +# download a 32-bit legacy version from mongodb.com instead. MONGO_VERSION=$MONGO_VERSION_64BIT -MONGO_SSL="-ssl" -# The MongoDB "Generic" Linux option is not offered with SSL, which is reserved -# for named distributions. This works out better since the SSL support adds -# size to the dev bundle though isn't necessary for local development. -if [ $UNAME = "Linux" ]; then - MONGO_SSL="" +if [ $ARCH = "i686" ] && [ $OS = "linux" ]; then + MONGO_VERSION=$MONGO_VERSION_32BIT fi -if [ $ARCH = "i686" ]; then - MONGO_VERSION=$MONGO_VERSION_32BIT -fi +case $OS in + macos) MONGO_BASE_URL="https://fastdl.mongodb.org/osx" ;; + linux) + [ $ARCH = "i686" ] && + MONGO_BASE_URL="https://fastdl.mongodb.org/linux" || + MONGO_BASE_URL="https://github.com/meteor/mongodb-builder/releases/download/v${MONGO_VERSION}" + ;; +esac MONGO_NAME="mongodb-${OS}-${ARCH}-${MONGO_VERSION}" -MONGO_NAME_SSL="mongodb-${OS}${MONGO_SSL}-${ARCH}-${MONGO_VERSION}" -MONGO_TGZ="${MONGO_NAME_SSL}.tgz" -MONGO_URL="http://fastdl.mongodb.org/${OS}/${MONGO_TGZ}" +MONGO_TGZ="${MONGO_NAME}.tgz" +MONGO_URL="${MONGO_BASE_URL}/${MONGO_TGZ}" echo "Downloading Mongo from ${MONGO_URL}" -curl "${MONGO_URL}" | tar zx +curl -L "${MONGO_URL}" | tar zx # Put Mongo binaries in the right spot (mongodb/bin) mkdir -p "mongodb/bin" @@ -115,6 +115,9 @@ ls -al "$INCLUDE_PATH" mkdir "${DIR}/build/npm-server-install" cd "${DIR}/build/npm-server-install" node "${CHECKOUT_DIR}/scripts/dev-bundle-server-package.js" > package.json +# XXX For no apparent reason this npm install will fail with an EISDIR +# error if we do not help it by creating the .npm/_locks directory. +mkdir -p "${DIR}/.npm/_locks" npm install npm shrinkwrap @@ -125,19 +128,6 @@ cp -R node_modules/* "${DIR}/server-lib/node_modules/" mkdir -p "${DIR}/etc" mv package.json npm-shrinkwrap.json "${DIR}/etc/" -# Fibers ships with compiled versions of its C code for a dozen platforms. This -# bloats our dev bundle. Remove all the ones other than our -# architecture. (Expression based on build.js in fibers source.) -shrink_fibers () { - FIBERS_ARCH=$(node -p -e 'process.platform + "-" + process.arch + "-" + process.versions.modules') - mv $FIBERS_ARCH .. - rm -rf * - mv ../$FIBERS_ARCH . -} - -cd "$DIR/server-lib/node_modules/fibers/bin" -shrink_fibers - # Now, install the npm modules which are the dependencies of the command-line # tool. mkdir "${DIR}/build/npm-tool-install" @@ -153,20 +143,6 @@ cd "${DIR}/lib" cd node_modules -# @babel/runtime@7.0.0-beta.56 removed the @babel/runtime/helpers/builtin -# directory, since all helpers are now implemented in the built-in style -# (meaning they do not import core-js polyfills). Generated code in build -# plugins might still refer to the old directory layout (at least for the -# time being), but we can accommodate that by symlinking to the parent -# directory, since all the module names are the same. -if [ -d @babel/runtime/helpers ] && - [ ! -d @babel/runtime/helpers/builtin ] -then - pushd @babel/runtime/helpers - ln -s . builtin - popd -fi - ## Clean up some bulky stuff. # Used to delete bulky subtrees. It's an error (unlike with rm -rf) if they @@ -185,6 +161,7 @@ delete () { if [ -d "pacote" ] then delete npm/node_modules/pacote + mv pacote npm/node_modules/ fi delete sqlite3/deps @@ -195,9 +172,6 @@ delete moment/min # Remove esprima tests to reduce the size of the dev bundle find . -path '*/esprima-fb/test' | xargs rm -rf -cd "$DIR/lib/node_modules/fibers/bin" -shrink_fibers - # Sanity check to see if we're not breaking anything by replacing npm INSTALLED_NPM_VERSION=$(cat "$DIR/lib/node_modules/npm/package.json" | xargs -0 node -e "console.log(JSON.parse(process.argv[1]).version)") diff --git a/scripts/windows/appveyor/install.ps1 b/scripts/windows/appveyor/install.ps1 index e0063542b1..ced6023ad5 100644 --- a/scripts/windows/appveyor/install.ps1 +++ b/scripts/windows/appveyor/install.ps1 @@ -15,7 +15,7 @@ If ($LASTEXITCODE -ne 0) { throw "Updating submodules failed." } -# The `meteor --get-ready` command is susceptible to EPERM errors, so +# The `meteor --get-ready` command is susceptible to EPERM errors, so # we attempt it three times. $attempt = 3 $success = $false @@ -25,7 +25,7 @@ while ($attempt -gt 0 -and -not $success) { # By redirecting error to host, we avoid a shocking/false error color, # since --get-ready and --version can print (anything) to STDERR and # PowerShell will interpret that as something being terribly wrong. - & "$meteorBat" --get-ready 2>&1 | Write-Host -ForegroundColor Green + & "$meteorBat" --get-ready If ($LASTEXITCODE -eq 0) { $success = $true diff --git a/scripts/windows/download-dev-bundle.ps1 b/scripts/windows/download-dev-bundle.ps1 index a16581ace2..40b4030307 100644 --- a/scripts/windows/download-dev-bundle.ps1 +++ b/scripts/windows/download-dev-bundle.ps1 @@ -41,7 +41,7 @@ if (Test-Path $devbundle_zip) { Write-Host "Extracting $TARBALL to the dev_bundle directory" -cmd /C "7z.exe x $devbundle_zip -so | 7z.exe x -aoa -si -ttar -o$CHECKOUT_DIR\dev_bundle_XXX" | out-null +cmd /C "7z.exe x `"$devbundle_zip`" -so | 7z.exe x -aoa -si -ttar -o`"$CHECKOUT_DIR\dev_bundle_XXX`"" | out-null if ($LASTEXITCODE -ne 0) { Exit 1 } diff --git a/scripts/windows/link-npm-bin-commands.js b/scripts/windows/link-npm-bin-commands.js index 70dc9a3893..197aa97600 100644 --- a/scripts/windows/link-npm-bin-commands.js +++ b/scripts/windows/link-npm-bin-commands.js @@ -32,7 +32,7 @@ Object.keys(npmPkgBin).forEach(cmd => { }); Promise.all(promises).then(items => { - console.error("Linked npm bin commands: " + items.join(", ")); + console.log("Linked npm bin commands: " + items.join(", ")); }, error => { console.error("Failed to link bin commands: " + error); }); diff --git a/tools/cli/commands-cordova.js b/tools/cli/commands-cordova.js index ffec0c23c7..bd08a411f4 100644 --- a/tools/cli/commands-cordova.js +++ b/tools/cli/commands-cordova.js @@ -3,7 +3,6 @@ import main from './main.js'; import { Console } from '../console/console.js'; import catalog from '../packaging/catalog/catalog.js'; import buildmessage from '../utils/buildmessage.js'; -import files from '../fs/files.js'; import { CORDOVA_PLATFORMS, ensureDevBundleDependencies, @@ -122,7 +121,7 @@ main.registerCommand({ notOnWindows: false }, function (options) { ensureDevBundleDependencies(); - doAddPlatform(options); + doAddPlatform(options); }); // Remove one or more Cordova platforms @@ -163,7 +162,7 @@ main.registerCommand({ Console.setVerbose(!!options.verbose); Console.info("Please follow the installation instructions in the mobile guide:"); - Console.info(Console.url("http://guide.meteor.com/mobile.html#installing-prerequisites")); + Console.info(Console.url("http://guide.meteor.com/cordova.html#installing-prerequisites")); return 0; }); @@ -190,3 +189,19 @@ to your PATH.)`); return 0; }); + +main.registerCommand({ + name: 'ensure-cordova-dependencies', + options: { + verbose: { type: Boolean, short: "v" } + }, + minArgs: 0, + maxArgs: Infinity, + requiresApp: true, + catalogRefresh: new catalog.Refresh.Never(), +}, function (options) { + Console.setVerbose(!!options.verbose); + + ensureDevBundleDependencies(); + Console.info("Cordova dependencies are installed."); +}); diff --git a/tools/cli/commands-packages-query.js b/tools/cli/commands-packages-query.js index d0f996fa97..2e68a79d76 100644 --- a/tools/cli/commands-packages-query.js +++ b/tools/cli/commands-packages-query.js @@ -5,7 +5,7 @@ var _ = require('underscore'); var buildmessage = require('../utils/buildmessage.js'); var catalog = require('../packaging/catalog/catalog.js'); var Console = require('../console/console.js').Console; -var files = require('../fs/files.js'); +var files = require('../fs/files'); import { loadIsopackage } from '../tool-env/isopackets.js'; var main = require('./main.js'); var packageVersionParser = require('../packaging/package-version-parser.js'); diff --git a/tools/cli/commands-packages.js b/tools/cli/commands-packages.js index 85ea491d0f..55dd4b5697 100644 --- a/tools/cli/commands-packages.js +++ b/tools/cli/commands-packages.js @@ -1,6 +1,6 @@ var main = require('./main.js'); var _ = require('underscore'); -var files = require('../fs/files.js'); +var files = require('../fs/files'); var buildmessage = require('../utils/buildmessage.js'); var auth = require('../meteor-services/auth.js'); var config = require('../meteor-services/config.js'); @@ -822,8 +822,8 @@ main.registerCommand({ // version number, this will use buildmessage to error and exit.) // // Without any modifications about forks and package names, this particular - // option is not very useful outside of MDG. Right now, to run this option on - // a non-MDG fork of meteor, someone would probably need to go through and + // option is not very useful outside of Meteor Software. Right now, to run this option on + // a non-Meteor Software fork of meteor, someone would probably need to go through and // change the package names to have proper prefixes, etc. if (options['from-checkout']) { // You must be running from checkout to bundle up your checkout as a release. @@ -1139,7 +1139,9 @@ main.registerCommand({ requiresApp: true, options: { 'tree': { type: Boolean }, + 'json': { type: Boolean }, 'weak': { type: Boolean }, + 'details': { type: Boolean }, 'allow-incompatible-update': { type: Boolean } }, catalogRefresh: new catalog.Refresh.OnceAtStart({ ignoreErrors: true }) @@ -1154,8 +1156,25 @@ main.registerCommand({ // No need to display the PackageMapDelta here, since we're about to list all // of the packages anyway! - if (options['tree']) { + const showJson = !!options['json']; + const showTree = !!options['tree']; + + const suffixes = { + topLevel: '(top level)', + expandedAbove: '(expanded above)', + weak: '[weak]', + skipped: 'package skipped', + missing: 'missing?' + } + + if (showJson && showTree) { + throw new Error('can only run for one option,found --json and --tree'); + } + + if (showTree || showJson) { + const jsonOut = showJson && {}; const showWeak = !!options['weak']; + const showDetails = !!options['details']; // Load package details of all used packages (inc. dependencies) const packageDetails = new Map; projectContext.packageMap.eachPackage(function (name, info) { @@ -1172,7 +1191,7 @@ main.registerCommand({ const dontExpand = new Set(topLevelSet.values()); // Recursive function that outputs each package - const printPackage = function (packageToPrint, isWeak, indent1, indent2) { + const printPackage = function ({ packageToPrint, isWeak, indent1, indent2, parent }) { const packageName = packageToPrint.packageName; const depsObj = packageToPrint.dependencies || {}; let deps = Object.keys(depsObj).sort(); @@ -1192,16 +1211,59 @@ main.registerCommand({ const expandedAlready = (deps.length > 0 && dontExpand.has(packageName)); const shouldExpand = (deps.length > 0 && !expandedAlready && !isWeak); - if (indent1 !== '') { - indent1 += (shouldExpand ? '┬' : '─') + ' '; + + // with normal tree display we send the current info to stdout + if (showTree) { + if (indent1 !== '') { + indent1 += (shouldExpand ? '┬' : '─') + ' '; + } + + let suffix = (isWeak ? suffixes.weak : ''); + if (expandedAlready) { + suffix += topLevelSet.has(packageName) + ? ` ${suffixes.topLevel}` + : ` ${suffixes.expandedAbove}` + } + + Console.info(indent1 + packageName + '@' + packageToPrint.version + suffix); } - let suffix = (isWeak ? '[weak]' : ''); - if (expandedAlready) { - suffix += topLevelSet.has(packageName) ? ' (top level)' : ' (expanded above)'; + // with json we add detailed info to the json object + if (showJson) { + if (expandedAlready) { + // on expanded packages we only want to add minimal information to + // keep the json file compact, so we make the value a stirng + if (topLevelSet.has(packageName)) { + parent[packageName] = `${packageToPrint.version}-${suffixes.topLevel}` + } else { + parent[packageName] = `${packageToPrint.version}-${suffixes.expandedAbove}` + } + } else { + // on non-expanded packages we want detailed information but we + // omit falsy values in order to keep the output minimal and readable + const entry = {}; + parent[packageName] = entry; + + const mapInfo = projectContext.packageMap.getInfo(packageName); + const infoSource = Object.assign({}, showDetails ? packageToPrint : {}, { + version: packageToPrint.version, + local: mapInfo && mapInfo.kind === 'local', + weak: isWeak, + newerVersion: getNewerVersion(packageName, packageToPrint.version, catalog.official) + }); + + Object.entries(infoSource).forEach(([key, value]) => { + if (value) { + entry[key] = value; + } + }); + + if (shouldExpand) { + entry.dependencies = {}; + } + } } - Console.info(indent1 + packageName + '@' + packageToPrint.version + suffix); if (shouldExpand) { dontExpand.add(packageName); deps.forEach((dep, index) => { @@ -1209,14 +1271,37 @@ main.registerCommand({ const weakRef = references.length > 0 && references.every(r => r.weak); const last = ((index + 1) === deps.length); const child = packageDetails.get(dep); - const newIndent1 = indent2 + (last ? '└─' : '├─'); - const newIndent2 = indent2 + (last ? ' ' : '│ '); - if (child) { - printPackage(child, weakRef, newIndent1, newIndent2); - } else if (weakRef) { - Console.info(newIndent1 + '─ ' + dep + '[weak] package skipped'); - } else { - Console.info(newIndent1 + '─ ' + dep + ' missing?'); + + // with normal tree display we increase indentation + if (showTree) { + const newIndent1 = indent2 + (last ? '└─' : '├─'); + const newIndent2 = indent2 + (last ? ' ' : '│ '); + if (child) { + printPackage({ + packageToPrint: child, + isWeak: weakRef, + indent1: newIndent1, + indent2: newIndent2 + }); + } else if (weakRef) { + Console.info(`${newIndent1}─ ${dep} ${suffixes.weak} ${suffixes.skipped}`); + } else { + Console.info(`${newIndent1}─ ${dep} ${suffixes.missing}`); + } + } + + if (showJson) { + if (child) { + printPackage({ + packageToPrint: child, + isWeak: weakRef, + parent: parent[packageName].dependencies + }); + } else if (weakRef) { + parent[packageName].dependencies[dep] = `${suffixes.weak} ${suffixes.skipped}`; + } else { + parent[packageName].dependencies = suffixes.missing; + } } }); } @@ -1228,10 +1313,23 @@ main.registerCommand({ if (topLevelPackage) { // Force top level packages to be expanded dontExpand.delete(topLevelPackage.packageName); - printPackage(topLevelPackage, false, '', ''); + printPackage({ + packageToPrint: topLevelPackage, + isWeak: false, + indent1: '', + indent2: '', + parent: jsonOut + }) } }); + if (showJson) { + // we can't use Console here, because it pretty prints the output with + // a wrap at 80 chars per line, which causes the json to break if details + // options is active and the package descriptions exceed the limit + console.info(JSON.stringify(jsonOut)); + } + return 0; } diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 8b7b18c65d..da9adc786d 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -1,6 +1,6 @@ var main = require('./main.js'); var _ = require('underscore'); -var files = require('../fs/files.js'); +var files = require('../fs/files'); var deploy = require('../meteor-services/deploy.js'); var buildmessage = require('../utils/buildmessage.js'); var auth = require('../meteor-services/auth.js'); @@ -9,14 +9,14 @@ var config = require('../meteor-services/config.js'); var runLog = require('../runners/run-log.js'); var utils = require('../utils/utils.js'); var httpHelpers = require('../utils/http-helpers.js'); -var archinfo = require('../utils/archinfo.js'); +var archinfo = require('../utils/archinfo'); var catalog = require('../packaging/catalog/catalog.js'); var stats = require('../meteor-services/stats.js'); var Console = require('../console/console.js').Console; var projectContextModule = require('../project-context.js'); var release = require('../packaging/release.js'); -const { Profile } = require("../tool-env/profile.js"); +const { Profile } = require("../tool-env/profile"); import { ensureDevBundleDependencies } from '../cordova/index.js'; import { CordovaRunner } from '../cordova/runner.js'; @@ -24,8 +24,8 @@ import { iOSRunTarget, AndroidRunTarget } from '../cordova/run-targets.js'; import { EXAMPLE_REPOSITORIES } from './example-repositories.js'; -// The architecture used by MDG's hosted servers; it's the architecture used by -// 'meteor deploy'. +// The architecture used by Meteor Software's hosted servers; it's the +// architecture used by 'meteor deploy'. var DEPLOY_ARCH = 'os.linux.x86_64'; // The default port that the development server listens on. @@ -82,7 +82,9 @@ export function parseServerOptionsForRunCommand(options, runTargets) { isRunOnDeviceRequested); } - return { parsedServerUrl, parsedMobileServerUrl }; + const parsedCordovaServerPort = parseCordovaServerPortOption(options); + + return { parsedServerUrl, parsedMobileServerUrl, parsedCordovaServerPort }; } function parsePortOption(portOption) { @@ -110,6 +112,11 @@ function parseMobileServerOption(mobileServerOption, return parsedMobileServerUrl; } +function parseCordovaServerPortOption(options = {}) { + const cordovaServerPortOption = options['cordova-server-port']; + return cordovaServerPortOption ? parseInt(cordovaServerPortOption, 10) : null; +} + function detectMobileServerUrl(parsedServerUrl, isRunOnDeviceRequested) { // Always try to use an auto-detected IP first try { @@ -155,6 +162,16 @@ export function parseRunTargets(targets) { }); }; +const excludableWebArchs = ['web.browser', 'web.browser.legacy', 'web.cordova']; +function filterWebArchs(webArchs, excludeArchsOption) { + if (excludeArchsOption) { + const excludeArchs = excludeArchsOption.trim().split(/\s*,\s*/) + .filter(arch => excludableWebArchs.includes(arch)); + webArchs = webArchs.filter(arch => !excludeArchs.includes(arch)); + } + return webArchs; +} + /////////////////////////////////////////////////////////////////////////////// // options that act like commands /////////////////////////////////////////////////////////////////////////////// @@ -290,6 +307,7 @@ var runCommandOptions = { options: { port: { type: String, short: "p", default: DEFAULT_PORT }, 'mobile-server': { type: String }, + 'cordova-server-port': { type: String }, // XXX COMPAT WITH 0.9.2.2 'mobile-port': { type: String }, 'app-port': { type: String }, @@ -310,7 +328,8 @@ var runCommandOptions = { // Allow the version solver to make breaking changes to the versions // of top-level dependencies. 'allow-incompatible-update': { type: Boolean }, - 'extra-packages': { type: String } + 'extra-packages': { type: String }, + 'exclude-archs': { type: String } }, catalogRefresh: new catalog.Refresh.Never() }; @@ -326,7 +345,7 @@ function doRunCommand(options) { // Additional args are interpreted as run targets const runTargets = parseRunTargets(options.args); - const { parsedServerUrl, parsedMobileServerUrl } = + const { parsedServerUrl, parsedMobileServerUrl, parsedCordovaServerPort } = parseServerOptionsForRunCommand(options, runTargets); var includePackages = []; @@ -391,6 +410,7 @@ function doRunCommand(options) { webArchs.push("web.cordova"); } } + webArchs = filterWebArchs(webArchs, options['exclude-archs']); let cordovaRunner; if (!_.isEmpty(runTargets)) { @@ -401,7 +421,8 @@ function doRunCommand(options) { main.captureAndExit('', 'preparing Cordova project', () => { const cordovaProject = new CordovaProject(projectContext, { settingsFile: options.settings, - mobileServerUrl: utils.formatUrl(parsedMobileServerUrl) }); + mobileServerUrl: utils.formatUrl(parsedMobileServerUrl), + cordovaServerPort: parsedCordovaServerPort }); if (buildmessage.jobHasMessages()) return; cordovaRunner = new CordovaRunner(cordovaProject, runTargets); @@ -431,6 +452,7 @@ function doRunCommand(options) { mongoUrl: process.env.MONGO_URL, oplogUrl: process.env.MONGO_OPLOG_URL, mobileServerUrl: utils.formatUrl(parsedMobileServerUrl), + cordovaServerPort: parsedCordovaServerPort, once: options.once, noReleaseCheck: options['no-release-check'] || process.env.METEOR_NO_RELEASE_CHECK, cordovaRunner: cordovaRunner @@ -472,7 +494,7 @@ main.registerCommand({ // Convert to OS path here because shell/server.js doesn't know how to // convert paths, since it exists in the app and in the tool. - require('../shell-client.js').connect( + require('../shell-client').connect( files.convertToOSPath(projectContext.getMeteorShellDirectory()) ); @@ -495,6 +517,9 @@ main.registerCommand({ minimal: { type: Boolean }, full: { type: Boolean }, react: { type: Boolean }, + vue: { type: Boolean }, + typescript: { type: Boolean }, + apollo: { type: Boolean }, }, catalogRefresh: new catalog.Refresh.Never() }, function (options) { @@ -583,7 +608,7 @@ main.registerCommand({ return transform(f); }, transformContents: function (contents, f) { - if ((/(\.html|\.js|\.css)/).test(f)) { + if ((/(\.html|\.[jt]sx?|\.css)/).test(f)) { return Buffer.from(transform(contents.toString())); } else { return contents; @@ -747,6 +772,12 @@ main.registerCommand({ skelName += "-full"; } else if (options.react) { skelName += "-react"; + } else if (options.vue) { + skelName += "-vue"; + } else if (options.typescript) { + skelName += "-typescript"; + } else if (options.apollo) { + skelName += "-apollo"; } files.cp_r(files.pathJoin(__dirnameConverted, '..', 'static-assets', skelName), appPath, { @@ -754,7 +785,7 @@ main.registerCommand({ return transform(f); }, transformContents: function (contents, f) { - if ((/(\.html|\.js|\.css)/).test(f)) { + if ((/(\.html|\.[jt]sx?|\.css)/).test(f)) { return Buffer.from(transform(contents.toString())); } else { return contents; @@ -851,23 +882,32 @@ main.registerCommand({ Console.url("https://www.meteor.com/tutorials"), Console.options({ indent: 2 })); + Console.info(""); + Console.info("When you’re ready to deploy and host your new Meteor application, check out Galaxy:"); + Console.info( + Console.url("https://www.meteor.com/hosting"), + Console.options({ indent: 2 })); + if (! options.bare && ! options.minimal && ! options.full && - ! options.react) { - // Notify people about --bare, --minimal, --full, and --react. + ! options.react && + ! options.vue && + ! options.typescript) { + // Notify people about --bare, --minimal, --full, --react, --vue, --apollo and --typescript. Console.info([ "", "To start with a different app template, try one of the following:", "", ].join("\n")); - cmd("meteor create --bare # to create an empty app"); - cmd("meteor create --minimal # to create an app with as few " + - "Meteor packages as possible"); - cmd("meteor create --full # to create a more complete " + - "scaffolded app"); - cmd("meteor create --react # to create a basic React-based app"); + cmd("meteor create --bare # to create an empty app"); + cmd("meteor create --minimal # to create an app with as few Meteor packages as possible"); + cmd("meteor create --full # to create a more complete scaffolded app"); + cmd("meteor create --react # to create a basic React-based app"); + cmd("meteor create --vue # to create a basic Vue-based app"); + cmd("meteor create --apollo # to create a basic Apollo + React app"); + cmd("meteor create --typescript # to create an app using TypeScript and React"); } Console.info(""); @@ -888,6 +928,7 @@ var buildCommands = { "server-only": { type: Boolean }, 'mobile-settings': { type: String }, server: { type: String }, + "cordova-server-port": { type: String }, // XXX COMPAT WITH 0.9.2.2 "mobile-port": { type: String }, // Indicates whether these build is running headless, e.g. in a @@ -950,7 +991,7 @@ var buildCommand = function (options) { // of the file, not a constant 'bundle' (a bit obnoxious for // machines, but worth it for humans) - // Error handling for options.architecture. See archinfo.js for more + // Error handling for options.architecture. See archinfo for more // information on what the architectures are, what they mean, et cetera. if (options.architecture && !_.has(archinfo.VALID_ARCHITECTURES, options.architecture)) { @@ -986,6 +1027,7 @@ var buildCommand = function (options) { let cordovaPlatforms; let parsedMobileServerUrl; + let parsedCordovaServerPort; if (!serverOnly) { cordovaPlatforms = projectContext.platformList.getCordovaPlatforms(); @@ -1008,6 +1050,7 @@ on an OS X system."); } parsedMobileServerUrl = parseMobileServerOption(mobileServerOption, 'server'); + parsedCordovaServerPort = parseCordovaServerPortOption(options); } } else { cordovaPlatforms = []; @@ -1096,7 +1139,8 @@ ${Console.command("meteor build ../output")}`, cordovaProject = new CordovaProject(projectContext, { settingsFile: options.settings, - mobileServerUrl: utils.formatUrl(parsedMobileServerUrl) }); + mobileServerUrl: utils.formatUrl(parsedMobileServerUrl), + cordovaServerPort: parsedCordovaServerPort }); if (buildmessage.jobHasMessages()) return; const pluginVersions = pluginVersionsFromStarManifest( @@ -1137,7 +1181,7 @@ ${displayNameForPlatform(platform)}` }, () => { `This is an auto-generated XCode project for your iOS application. Instructions for publishing your iOS app to App Store can be found at: -https://guide.meteor.com/mobile.html#submitting-ios +https://guide.meteor.com/cordova.html#submitting-ios `, "utf8"); } else if (platform === 'android') { const apkPath = files.pathJoin(buildPath, 'build/outputs/apk', @@ -1153,7 +1197,7 @@ https://guide.meteor.com/mobile.html#submitting-ios `This is an auto-generated Gradle project for your Android application. Instructions for publishing your Android app to Play Store can be found at: -https://guide.meteor.com/mobile.html#submitting-android +https://guide.meteor.com/cordova.html#submitting-android `, "utf8"); } }); @@ -1224,7 +1268,6 @@ main.registerCommand({ projectContext.prepareProjectForBuild(); }); - const bundlePath = projectContext.getProjectLocalDirectory('build'); const bundler = require('../isobuild/bundler.js'); const bundle = bundler.bundle({ projectContext: projectContext, @@ -1393,6 +1436,7 @@ main.registerCommand({ 'allow-incompatible-update': { type: Boolean }, 'deploy-polling-timeout': { type: Number }, 'no-wait': { type: Boolean }, + 'cache-build': { type: Boolean }, }, allowUnrecognizedOptions: true, requiresApp: function (options) { @@ -1466,6 +1510,7 @@ function deployCommand(options, { rawOptions }) { deployPollingTimeoutMs = options['deploy-polling-timeout']; } + const isCacheBuildEnabled = !!options['cache-build']; const waitForDeploy = !options['no-wait']; var deployResult = deploy.bundleAndDeploy({ @@ -1476,6 +1521,7 @@ function deployCommand(options, { rawOptions }) { rawOptions, deployPollingTimeoutMs, waitForDeploy, + isCacheBuildEnabled, }); if (deployResult === 0) { @@ -1550,6 +1596,7 @@ testCommandOptions = { options: { port: { type: String, short: "p", default: DEFAULT_PORT }, 'mobile-server': { type: String }, + 'cordova-server-port': { type: String }, // XXX COMPAT WITH 0.9.2.2 'mobile-port': { type: String }, 'debug-port': { type: String }, @@ -1611,7 +1658,9 @@ testCommandOptions = { // For 'test-packages': Run in "full app" mode 'full-app': { type: Boolean, 'default': false }, - 'extra-packages': { type: String } + 'extra-packages': { type: String }, + + 'exclude-archs': { type: String } } }; @@ -1648,7 +1697,7 @@ function doTestCommand(options) { const runTargets = parseRunTargets(_.intersection( Object.keys(options), ['ios', 'ios-device', 'android', 'android-device'])); - const { parsedServerUrl, parsedMobileServerUrl } = + const { parsedServerUrl, parsedMobileServerUrl, parsedCordovaServerPort } = parseServerOptionsForRunCommand(options, runTargets); // Make a temporary app dir (based on the test runner app). This will be @@ -1658,9 +1707,10 @@ function doTestCommand(options) { let testRunnerAppDir; const testAppPath = options['test-app-path']; if (testAppPath) { + const absTestAppPath = files.pathResolve(testAppPath); try { - if (files.mkdir_p(testAppPath, 0o700)) { - testRunnerAppDir = testAppPath; + if (files.mkdir_p(absTestAppPath, 0o700)) { + testRunnerAppDir = absTestAppPath; } else { Console.error( 'The specified --test-app-path directory could not be used, as ' + @@ -1865,7 +1915,8 @@ function doTestCommand(options) { const cordovaProject = new CordovaProject(projectContext, { settingsFile: options.settings, - mobileServerUrl: utils.formatUrl(parsedMobileServerUrl) }); + mobileServerUrl: utils.formatUrl(parsedMobileServerUrl), + cordovaServerPort: parsedCordovaServerPort }); if (buildmessage.jobHasMessages()) return; cordovaRunner = new CordovaRunner(cordovaProject, runTargets); @@ -1884,6 +1935,7 @@ function doTestCommand(options) { options, { mobileServerUrl: utils.formatUrl(parsedMobileServerUrl), + cordovaServerPort: parsedCordovaServerPort, proxyPort: parsedServerUrl.port, proxyHost: parsedServerUrl.hostname, } @@ -1951,6 +2003,11 @@ var runTestAppForPackages = function (projectContext, options) { minifyMode: options.production ? 'production' : 'development' }; buildOptions.buildMode = "test"; + let webArchs = projectContext.platformList.getWebArchs(); + if (options.cordovaRunner) { + webArchs.push("web.cordova"); + } + buildOptions.webArchs = filterWebArchs(webArchs, options['exclude-archs']); if (options.deploy) { // Run the constraint solver and build local packages. @@ -2380,7 +2437,7 @@ main.registerCommand({ json: { type: Boolean }, verbose: { type: Boolean, short: "v" }, // By default, we give you a machine for 5 minutes. You can request up to - // 15. (MDG can reserve machines for longer than that.) + // 15. (Meteor Software can reserve machines for longer than that.) minutes: { type: Number } }, pretty: false, diff --git a/tools/cli/convert-to-os-path.js b/tools/cli/convert-to-os-path.js new file mode 100644 index 0000000000..bcc5446cfb --- /dev/null +++ b/tools/cli/convert-to-os-path.js @@ -0,0 +1,20 @@ +function toDosPath(path) { + if (path[0] === "/") { + if (! /^\/[A-Za-z](\/|$)/.test(path)) { + throw new Error("Surprising path: " + path); + } + // transform a previously windows path back + // "/C/something" to "c:/something" + path = path[1] + ":" + path.slice(2); + } + return path.split("/").join("\\"); +} + +function convertToOSPath(path) { + if (process.platform === "win32") { + return toDosPath(path); + } + return path; +} + +exports.convertToOSPath = convertToOSPath; diff --git a/tools/cli/default-npm-deps.js b/tools/cli/default-npm-deps.js index 4d4fa2a5c7..5acf992307 100644 --- a/tools/cli/default-npm-deps.js +++ b/tools/cli/default-npm-deps.js @@ -4,7 +4,7 @@ import { statOrNull, writeFile, unlink, -} from "../fs/files.js"; +} from "../fs/files"; const INSTALL_JOB_MESSAGE = "installing npm dependencies"; diff --git a/tools/cli/dev-bundle-bin-helpers.js b/tools/cli/dev-bundle-bin-helpers.js index ce0ffa13d3..1854cb3e04 100644 --- a/tools/cli/dev-bundle-bin-helpers.js +++ b/tools/cli/dev-bundle-bin-helpers.js @@ -1,6 +1,7 @@ -var fs = require("fs"); -var path = require("path"); -var files = require("../fs/mini-files.js"); +const fs = require("fs"); +const path = require("path"); +const { convertToOSPath } = require("./convert-to-os-path.js"); + var isWindows = process.platform === "win32"; var extensions = isWindows ? [".cmd", ".exe"] : [""]; var hasOwn = Object.prototype.hasOwnProperty; @@ -37,7 +38,8 @@ exports.getCommand = function (name, devBundleDir) { function isValidCommand(name, devBundleDir) { if (name === "node" || - name === "npm") { + name === "npm" || + name === "npx") { return true; } @@ -63,7 +65,7 @@ function isValidCommand(name, devBundleDir) { exports.getEnv = function (options) { var devBundle = options && options.devBundle; var devBundlePromise = typeof devBundle === "string" - ? Promise.resolve(files.convertToOSPath(devBundle)) + ? Promise.resolve(convertToOSPath(devBundle)) : getDevBundle(); return devBundlePromise.then(function (devBundleDir) { diff --git a/tools/cli/dev-bundle-helpers.js b/tools/cli/dev-bundle-helpers.js index f41c243ff3..eafcffe932 100644 --- a/tools/cli/dev-bundle-helpers.js +++ b/tools/cli/dev-bundle-helpers.js @@ -1,20 +1,25 @@ -import { pathJoin, getDevBundle } from '../fs/files.js'; -import { installNpmModule, moduleDoesResolve } from '../isobuild/meteor-npm.js'; +import { pathJoin, getDevBundle, statOrNull } from '../fs/files'; +import { installNpmModule } from '../isobuild/meteor-npm.js'; export function ensureDependencies(deps) { + const devBundleLib = pathJoin(getDevBundle(), 'lib'); + const devBundleNodeModules = pathJoin(devBundleLib, 'node_modules'); + // Check if each of the requested dependencies resolves, if not // mark them for installation. const needToInstall = Object.create(null); Object.keys(deps).forEach(dep => { - if (!moduleDoesResolve(dep)) { + const pkgDir = pathJoin(devBundleNodeModules, dep); + const pkgStat = statOrNull(pkgDir); + const alreadyInstalled = pkgStat && pkgStat.isDirectory(); + if (!alreadyInstalled) { const versionToInstall = deps[dep]; needToInstall[dep] = versionToInstall; } }); - const devBundleLib = pathJoin(getDevBundle(), 'lib'); - // Install each of the requested modules. - Object.keys(needToInstall) - .forEach(dep => installNpmModule(dep, needToInstall[dep], devBundleLib)); + Object.keys(needToInstall).forEach(dep => { + installNpmModule(dep, needToInstall[dep], devBundleLib); + }); } diff --git a/tools/cli/dev-bundle-links.js b/tools/cli/dev-bundle-links.js index d203fc973a..717dcff306 100644 --- a/tools/cli/dev-bundle-links.js +++ b/tools/cli/dev-bundle-links.js @@ -1,9 +1,9 @@ -var fs = require("fs"); -var files = require("../fs/mini-files.js"); +const fs = require("fs"); +const { convertToOSPath } = require("./convert-to-os-path.js"); exports.makeLink = function (target, linkPath) { - target = files.convertToOSPath(target); - linkPath = files.convertToOSPath(linkPath); + target = convertToOSPath(target); + linkPath = convertToOSPath(linkPath); var tempPath = linkPath + "-" + Math.random().toString(36).slice(2); @@ -17,14 +17,14 @@ exports.makeLink = function (target, linkPath) { fs.renameSync(tempPath, linkPath); } catch (e) { // If renaming fails, try unlinking first. - fs.unlinkSync(linkPath); + require("rimraf").sync(linkPath); fs.renameSync(tempPath, linkPath); } }; // Note: this function returns an OS-specific path! exports.readLink = function (linkPath) { - linkPath = files.convertToOSPath(linkPath); + linkPath = convertToOSPath(linkPath); var stat = fs.lstatSync(linkPath); if (stat.isSymbolicLink()) { diff --git a/tools/cli/dev-bundle.js b/tools/cli/dev-bundle.js index 3c5b13393d..a89946e73e 100644 --- a/tools/cli/dev-bundle.js +++ b/tools/cli/dev-bundle.js @@ -189,17 +189,11 @@ function makeStatTest(method) { function getHostArch() { if (process.platform === "win32") { - if (process.arch === "x64") { - return "os.windows.x86_64"; - } - return "os.windows.x86_32"; + return "os.windows.x86_64"; } if (process.platform === "linux") { - if (process.arch === "x64") { - return "os.linux.x86_64"; - } - return "os.linux.x86_32"; + return "os.linux.x86_64"; } if (process.platform === "darwin") { diff --git a/tools/cli/example-repositories.js b/tools/cli/example-repositories.js index 42b9b4a16a..bda0132177 100644 --- a/tools/cli/example-repositories.js +++ b/tools/cli/example-repositories.js @@ -14,7 +14,7 @@ export const EXAMPLE_REPOSITORIES = { 'repo': 'https://github.com/meteor/todos', 'branch': 'react', }, - 'angular2-boilerplate': { - repo: 'https://github.com/bsliran/angular2-meteor-base' + 'angular-boilerplate': { + repo: 'https://github.com/Urigo/angular-meteor-base.git' } }; diff --git a/tools/cli/help.txt b/tools/cli/help.txt index d359e87cae..3a7c0352ec 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -83,6 +83,11 @@ Options: Defaults to your local IP and the port that the Meteor server binds to. Can include a URL scheme (for example, --mobile-server=https://example.com:443). + --cordova-server-port + Local port where Cordova will serve the content. It's + important when multiple Cordova apps are build from the same + Meteor app source code as by default the port is generated + using the id inside .meteor/.id file. --production Simulate production mode. Minify and bundle CSS and JS files. --raw-logs Run without parsing logs from stdout and stderr. --settings, -s Set optional data for Meteor.settings on the server. @@ -98,6 +103,9 @@ Options: version constraints. --extra-packages Run with additional packages (comma separated, for example: --extra-packages "package-name1, package-name2@1.2.3") + --exclude-archs Don't create bundles for certain web architectures + (comma separated, for example: + --exclude-archs "web.browser.legacy, web.cordova") >>> debug Run the project with server-side debugging enabled. @@ -168,13 +176,14 @@ sample applications. Use --list to see the available examples. There are currently no package examples. Options: - --package Create a new meteor package instead of an app. - --example Example template to use. - --list Show list of available examples. - --bare Create an empty app. - --minimal Create an app with as few Meteor packages as possible. - --full Create a fully scaffolded app. - --react Create a basic React-based app. + --package Create a new meteor package instead of an app. + --example Example template to use. + --list Show list of available examples. + --bare Create an empty app. + --minimal Create an app with as few Meteor packages as possible. + --full Create a fully scaffolded app. + --react Create a basic React-based app. + --typescript Create a basic Typescript React-based app. >>> update @@ -281,13 +290,17 @@ Options: List the packages explicitly used by your project. Usage: meteor list meteor list --tree [--weak] + meteor list --json [--weak] [--details] Lists the packages that you have explicitly added to your project. Transitive dependencies are not listed unless you use the --tree option, which outputs a tree showing how packages are referenced. +Use the --json option to output the tree in JSON format. + Options: --weak Show weakly referenced dependencies in the tree. + --details Adds more package details to the JSON output. >>> add-platform Add a platform to this project. @@ -335,6 +348,12 @@ Usage: meteor list-platforms Lists all of the platforms added to your project. +>>> ensure-cordova-dependencies +Ensure that Cordova dependencies are installed. +Usage: meteor ensure-cordova-dependencies + +Check if the dependencies are installed, otherwise install them. + >>> configure-android Run the Android configuration tool from Meteor's ADK environment. Usage: meteor configure-android @@ -504,6 +523,8 @@ Options: minified code; defaults to 15 minutes. --no-wait Exits when Meteor has uploaded the app's code instead of waiting for the deploy to conclude. + --cache-build Reuses the build already created if the git commit hash is the + same >>> authorized View or change authorized users and organizations for a site. @@ -598,6 +619,11 @@ Options: port that the Meteor server binds to. Can include a URL scheme (for example, --mobile-server=https://example.com:443). + --cordova-server-port + Local port where Cordova will serve the content. It's + important when multiple Cordova apps are build from the same + Meteor app source code as by default the port is generated + using the id inside .meteor/.id file. --production Simulate production mode. Minify and bundle CSS, JS files. --settings, -s Set optional data for Meteor.settings on the server @@ -682,6 +708,11 @@ Options: port that the Meteor server binds to. Can include a URL scheme (for example, --mobile-server=https://example.com:443). + --cordova-server-port + Local port where Cordova will serve the content. It's + important when multiple Cordova apps are build from the same + Meteor app source code as by default the port is generated + using the id inside .meteor/.id file. --raw-logs Run without parsing logs from stdout and stderr. --settings, -s Set optional data for Meteor.settings on the server @@ -698,6 +729,9 @@ Options: --driver-package Name of the optional test driver package to use to run tests and display results. For example: --driver-package practicalmeteor:mocha + --exclude-archs Don't create test bundles for certain web architectures + (comma separated, for example: + --exclude-archs "web.browser.legacy, web.cordova") >>> self-test Run tests of the 'meteor' tool. @@ -782,7 +816,7 @@ Usage: meteor list-sites List the sites that you have deployed with 'meteor deploy', and sites for which other users have authorized you with the 'meteor authorized' command. To see sites in a region other than us-east-1, set the DEPLOY_HOSTNAME -environment variable. For example, +environment variable. For example, `DEPLOY_HOSTNAME=eu-west-1.galaxy-deploy.meteor.com meteor list-sites` diff --git a/tools/cli/main.js b/tools/cli/main.js index 1ccf77ebe8..16934fc0e7 100644 --- a/tools/cli/main.js +++ b/tools/cli/main.js @@ -7,7 +7,7 @@ var assert = require("assert"); var _ = require('underscore'); var Fiber = require('fibers'); var Console = require('../console/console.js').Console; -var files = require('../fs/files.js'); +var files = require('../fs/files'); var warehouse = require('../packaging/warehouse.js'); var tropohouse = require('../packaging/tropohouse.js'); var release = require('../packaging/release.js'); @@ -15,7 +15,7 @@ var projectContextModule = require('../project-context.js'); var catalog = require('../packaging/catalog/catalog.js'); var buildmessage = require('../utils/buildmessage.js'); var httpHelpers = require('../utils/http-helpers.js'); -const archinfo = require('../utils/archinfo.js'); +const archinfo = require('../utils/archinfo'); import { isEmacs } from "../utils/utils.js"; var main = exports; @@ -509,8 +509,6 @@ var springboard = function (rel, options) { } } - const executable = files.pathJoin(newToolsDir, "meteor"); - // Strip off the "node" and "meteor.js" from argv and replace it with the // appropriate tools's meteor shell script. var newArgv = []; @@ -543,10 +541,16 @@ var springboard = function (rel, options) { // process, so that the springboarded process can reestablish it. catalog.official.closePermanently(); - if (process.platform === 'win32') { + const isWindows = process.platform === "win32"; + const executable = files.pathJoin( + newToolsDir, + isWindows ? "meteor.bat" : "meteor", + ); + + if (isWindows) { process.exit(new Promise(function (resolve) { - var batPath = files.convertToOSPath(executable + ".bat"); - var child = require("child_process").spawn(batPath, newArgv, { + var execPath = files.convertToOSPath(executable); + var child = require("child_process").spawn(execPath, newArgv, { env: process.env, stdio: 'inherit' }).on('exit', resolve); @@ -600,20 +604,13 @@ Fiber(function () { // Check required Node version. // This code is duplicated in tools/server/boot.js. - var MIN_NODE_VERSION = 'v8.0.0'; + var MIN_NODE_VERSION = 'v12.0.0'; if (require('semver').lt(process.version, MIN_NODE_VERSION)) { Console.error( 'Meteor requires Node ' + MIN_NODE_VERSION + ' or later.'); process.exit(1); } - // Set up git hooks, but not on Windows because they don't work there and it;s - // not worth setting it up at the moment - if (files.inCheckout() && process.platform !== "win32") { - var installGitHooks = require('../tool-env/install-git-hooks.js')['default']; - installGitHooks(); - } - // This is a bit of a hack, but: if we don't check this in the tool, then the // first time we do a isopack.load, it will fail due to the check in the // meteor package, and that'll look a lot uglier. diff --git a/tools/console/README.md b/tools/console/README.md index 2dbcf52e7e..343bdee73f 100644 --- a/tools/console/README.md +++ b/tools/console/README.md @@ -1,6 +1,6 @@ This folder contains libs for printing output in response to CLI commands. -`progress.js` defines the lib for printing a progress-bar, so the long +`progress.ts` defines the lib for printing a progress-bar, so the long operations don't look like hanging. `console.js` exposes the `Console` singleton that should be used through-out the diff --git a/tools/console/console.js b/tools/console/console.js index 73df9f1cde..4c96edfe81 100644 --- a/tools/console/console.js +++ b/tools/console/console.js @@ -89,6 +89,7 @@ const PROGRESS_BAR_FORMAT = '[:bar] :percent :etas'; const TEMP_STATUS_LENGTH = STATUS_MAX_LENGTH + 12; const STATUS_INTERVAL_MS = 50; +const PROGRESS_THROTTLE_MS = 300; // Message to show when we don't know what we're doing // XXX: ? FALLBACK_STATUS = 'Pondering'; @@ -309,9 +310,11 @@ class ProgressDisplayFull { this._lastWrittenLine = null; this._lastWrittenTime = 0; + this._renderTimeout = null; } depaint() { + this._clearDelayedRender(); this._stream.write(spacesString(this._printedLength) + CARRIAGE_RETURN); } @@ -332,7 +335,15 @@ class ProgressDisplayFull { if (startTime) { this._progressBarRenderer.start = startTime; } - this._render(); + + if (!this._rerenderTimeout && this._lastWrittenTime) { + this._rerenderTimeout = setTimeout(() => { + this._rerenderTimeout = null; + this._render() + }, PROGRESS_THROTTLE_MS); + } else if (this._lastWrittenTime === 0) { + this._render(); + } } repaint() { @@ -343,8 +354,18 @@ class ProgressDisplayFull { this._headless = !! headless; } + _clearDelayedRender() { + if (this._rerenderTimeout) { + clearTimeout(this._rerenderTimeout); + this._rerenderTimeout = null; + } + } + _render() { - // XXX: Throttle these updates? + if (this._rerenderTimeout) { + this._clearDelayedRender(); + } + // XXX: Or maybe just jump to the correct position? var progressGraphic = ''; @@ -488,7 +509,7 @@ class StatusPoller { this._watching = watching; - var title = (watching != null ? watching._title : null) || FALLBACK_STATUS; + var title = (watching != null ? watching.title : null) || FALLBACK_STATUS; var progressDisplay = this._console._progressDisplay; progressDisplay.updateStatus && progressDisplay.updateStatus(title); diff --git a/tools/console/progress.js b/tools/console/progress.js deleted file mode 100644 index 0ce5c1c780..0000000000 --- a/tools/console/progress.js +++ /dev/null @@ -1,231 +0,0 @@ -/// -/// utility functions for computing progress of complex tasks -/// -/// State callback here is an object with these keys: -/// done: bool, true if done -/// current: number, the current progress value -/// end: number, optional, the value of current where we expect to be done -/// -/// If end is not set, we'll display a spinner instead of a progress bar -/// - -var _ = require('underscore'); - -var Progress = function (options) { - var self = this; - - options = options || {}; - - self._lastState = null; - self._parent = options.parent; - self._watchers = options.watchers || []; - - self._title = options.title; - if (self._title) { - // Capitalize job titles when displayed in the progress bar. - self._title = self._title[0].toUpperCase() + self._title.slice(1); - } - - // XXX: Should we have a strict/mdg mode that enables this test? - //if (!self._title && self._parent) { - // throw new Error("No title passed"); - //} - - self._forkJoin = options.forkJoin; - - self._allTasks = []; - - self._selfState = { current: 0, done: false }; - self._state = _.clone(self._selfState); - - self._isDone = false; - - self.startTime = +(new Date); -}; - -_.extend(Progress.prototype, { - toString: function() { - var self = this; - return "Progress [state=" + JSON.stringify(self._state) + "]"; - }, - - reportProgressDone: function () { - var self = this; - - var state = _.clone(self._selfState); - state.done = true; - if (state.end !== undefined) { - if (state.current > state.end) { - state.end = state.current; - } - state.current = state.end; - } - self.reportProgress(state); - }, - - // Tries to determine which is the 'current' job in the tree - // This is very heuristical... we use some hints, like: - // don't descend into fork-join jobs; we know these execute concurrently, - // so we assume the top-level task has the title - // i.e. "Downloading packages", not "downloading supercool-1.0" - getCurrentProgress: function () { - var self = this; - - var isRoot = !self._parent; - - if (self._isDone) { - // A done task cannot be the active task - return null; - } - - if (!self._state.done && (self._state.current != 0) && self._state.end && - !isRoot) { - // We are not done and we have interesting state to report - return self; - } - - if (self._forkJoin) { - // Don't descend into fork-join tasks (by choice) - return self; - } - - if (self._allTasks.length) { - var candidates = _.map(self._allTasks, function (task) { - return task.getCurrentProgress(); - }); - var active = _.filter(candidates, function (s) { - return !!s; - }); - if (active.length) { - // pick one to display, somewhat arbitrarily - return active[active.length - 1]; - } - // No single active task, return self - return self; - } - - return self; - }, - - // Creates a subtask that must be completed as part of this (bigger) task - addChildTask: function (options) { - var self = this; - options = _.extend({ parent: self }, options || {}); - var child = new Progress(options); - self._allTasks.push(child); - self._reportChildState(child, child._state); - return child; - }, - - // Dumps the tree, for debug - dump: function (stream, options, prefix) { - var self = this; - - options = options || {}; - if (options.skipDone && self._isDone) { - return; - } - - if (prefix) { - stream.write(prefix); - } - var end = self._state.end; - if (!end) { - end = '?'; - } - stream.write("Task [" + self._title + "] " + self._state.current + "/" + end - + (self._isDone ? " done" : "") +"\n"); - if (self._allTasks.length) { - _.each(self._allTasks, function (child) { - child.dump(stream, options, (prefix || '') + ' '); - }); - } - }, - - // Receives a state report indicating progress of self - reportProgress: function (state) { - var self = this; - - self._selfState = state; - - self._updateTotalState(); - - // Nudge the spinner/progress bar, but don't yield (might not be safe to yield) - require('./console.js').Console.nudge(false); - - self._notifyState(); - }, - - // Subscribes a watcher to changes - addWatcher: function (watcher) { - var self = this; - - self._watchers.push(watcher); - }, - - // Notifies watchers & parents - _notifyState: function () { - var self = this; - - if (self._parent) { - self._parent._reportChildState(self, self._state); - } - - if (self._watchers.length) { - _.each(self._watchers, function (watcher) { - watcher(self._state); - }); - } - }, - - // Recomputes state, incorporating children's states - _updateTotalState: function () { - var self = this; - - var allChildrenDone = true; - var state = _.clone(self._selfState); - _.each(self._allTasks, function (child) { - var childState = child._state; - - if (!child._isDone) { - allChildrenDone = false; - } - - state.current += childState.current; - if (state.end !== undefined) { - if (childState.done) { - state.end += childState.current; - } else if (childState.end !== undefined) { - state.end += childState.end; - } else { - state.end = undefined; - } - } - }); - self._isDone = allChildrenDone && !!self._selfState.done; - if (!allChildrenDone) { - state.done = false; - } - - if (!state.done && self._state.done) { - // This shouldn't happen - throw new Error("Progress transition from done => !done"); - } - - self._state = state; - }, - - // Called by a child when its state changes - _reportChildState: function (child, state) { - var self = this; - - self._updateTotalState(); - self._notifyState(); - }, - - getState: function() { - return this._state; - } -}); - -exports.Progress = Progress; diff --git a/tools/console/progress.ts b/tools/console/progress.ts new file mode 100644 index 0000000000..7b50bfa876 --- /dev/null +++ b/tools/console/progress.ts @@ -0,0 +1,215 @@ +type ProgressWatcher = (state: ProgressState) => void; + +type ProgressOptions = { + parent?: Progress; + watchers?: ProgressWatcher[]; + title?: string; + forkJoin?: boolean; +}; + +type ProgressState = { + done: boolean; // true if job is done + current: number; // the current progress value + end?: number; // the value of current where we expect to be done +}; + +/** + * Utility class for computing the progress of complex tasks. + * + * Watchers are invoked with a ProgressState object. + */ +export class Progress { + public readonly title?: string; + public readonly startTime = Date.now(); + + private parent: Progress | null; + private allTasks: Progress[] = []; + private selfState: ProgressState = { current: 0, done: false }; + private state: ProgressState = { current: 0, done: false }; + private isDone = false; + private watchers: ProgressWatcher[]; + private forkJoin: boolean; + + constructor(options: ProgressOptions = {}) { + this.parent = options.parent || null; + this.watchers = options.watchers || []; + this.forkJoin = !!options.forkJoin; + + if ((this.title = options.title)) { + // Capitalize job titles when displayed in the progress bar. + this.title = this.title[0].toUpperCase() + this.title.slice(1); + } + } + + toString() { + return "Progress [state=" + JSON.stringify(this.state) + "]"; + } + + reportProgressDone() { + const state = { + ...this.selfState, + done: true, + }; + + if (typeof state.end !== 'undefined') { + if (state.current > state.end) { + state.end = state.current; + } + state.current = state.end; + } + + this.reportProgress(state); + } + + // Tries to determine which is the 'current' job in the tree + // This is very heuristical... we use some hints, like: + // don't descend into fork-join jobs; we know these execute concurrently, + // so we assume the top-level task has the title + // i.e. "Downloading packages", not "downloading supercool-1.0" + getCurrentProgress(): Progress | null { + const isRoot = !this.parent; + + if (this.isDone) { + // A done task cannot be the active task + return null; + } + + if (!this.state.done && (this.state.current !== 0) && this.state.end && + !isRoot) { + // We are not done and we have interesting state to report + return this; + } + + if (this.forkJoin) { + // Don't descend into fork-join tasks (by choice) + return this; + } + + if (this.allTasks.length) { + const active = this.allTasks + .map(task => task.getCurrentProgress()) + .filter(Boolean); + + if (active.length) { + // pick one to display, somewhat arbitrarily + return active[active.length - 1]; + } + + // No single active task, return self + return this; + } + + return this; + } + + // Creates a subtask that must be completed as part of this (bigger) task + addChildTask(options: ProgressOptions) { + options = { + parent: this, + ...options, + }; + const child = new Progress(options); + this.allTasks.push(child); + this.reportChildState(); + return child; + } + + // Dumps the tree, for debug + dump( + stream: NodeJS.WriteStream, + options?: { skipDone: boolean }, + prefix?: string, + ) { + if (options && options.skipDone && this.isDone) { + return; + } + + if (prefix) { + stream.write(prefix); + } + const end = this.state.end || '?'; + stream.write("Task [" + this.title + "] " + this.state.current + "/" + end + + (this.isDone ? " done" : "") +"\n"); + if (this.allTasks.length) { + this.allTasks.forEach(child => { + child.dump(stream, options, (prefix || '') + ' '); + }); + } + } + + // Receives a state report indicating progress of self + reportProgress(state: ProgressState) { + this.selfState = state; + + this.updateTotalState(); + + // Nudge the spinner/progress bar, but don't yield (might not be safe to yield) + require('./console.js').Console.nudge(false); + + this.notifyState(); + } + + // Subscribes a watcher to changes + addWatcher(watcher: ProgressWatcher) { + this.watchers.push(watcher); + } + + // Notifies watchers & parents + private notifyState() { + if (this.parent) { + this.parent.reportChildState(); + } + + if (this.watchers.length) { + this.watchers.forEach(watcher => { + watcher(this.state); + }); + } + } + + // Recomputes state, incorporating children's states + private updateTotalState() { + let allChildrenDone = true; + const state = { ...this.selfState }; + this.allTasks.forEach(child => { + const childState = child.state; + + if (!child.isDone) { + allChildrenDone = false; + } + + state.current += childState.current; + if (state.end !== undefined) { + if (childState.done) { + state.end += childState.current; + } else if (childState.end !== undefined) { + state.end += childState.end; + } else { + state.end = undefined; + } + } + }); + + this.isDone = allChildrenDone && !!this.selfState.done; + if (!allChildrenDone) { + state.done = false; + } + + if (!state.done && this.state.done) { + // This shouldn't happen + throw new Error("Progress transition from done => !done"); + } + + this.state = state; + } + + // Called by a child when its state changes + private reportChildState() { + this.updateTotalState(); + this.notifyState(); + } + + getState() { + return this.state; + } +} diff --git a/tools/cordova/builder.js b/tools/cordova/builder.js index 12cdbe7a4a..2af19a016c 100644 --- a/tools/cordova/builder.js +++ b/tools/cordova/builder.js @@ -3,15 +3,16 @@ import util from 'util'; import path from 'path'; import { Console } from '../console/console.js'; import buildmessage from '../utils/buildmessage.js'; -import files from '../fs/files.js'; -import { optimisticReadJsonOrNull } from "../fs/optimistic.js"; +import files from '../fs/files'; +import { optimisticReadJsonOrNull } from "../fs/optimistic"; import bundler from '../isobuild/bundler.js'; -import archinfo from '../utils/archinfo.js'; +import archinfo from '../utils/archinfo'; import release from '../packaging/release.js'; import { loadIsopackage } from '../tool-env/isopackets.js'; import utils from '../utils/utils.js'; +import XmlBuilder from 'xmlbuilder2'; -import { CORDOVA_ARCH } from './index.js'; +import { CORDOVA_ARCH, SWIFT_VERSION } from './index.js'; // Hard-coded size constants @@ -91,14 +92,18 @@ export class CordovaBuilder { } initalizeDefaults() { - // Convert the appId (a base 36 string) to a number - const appIdAsNumber = parseInt(this.projectContext.appIdentifier, 36); - // We use the appId to choose a local server port between 12000-13000. - // This range should be large enough to avoid collisions with other - // Meteor apps, and has also been chosen to avoid collisions - // with other apps or services on the device (although this can never be - // guaranteed). - const localServerPort = 12000 + (appIdAsNumber % 1000); + let { cordovaServerPort } = this.options; + // if --cordova-server-port is not present on run command + if (!cordovaServerPort) { + // Convert the appId (a base 36 string) to a number + const appIdAsNumber = parseInt(this.projectContext.appIdentifier, 36); + // We use the appId to choose a local server port between 12000-13000. + // This range should be large enough to avoid collisions with other + // Meteor apps, and has also been chosen to avoid collisions + // with other apps or services on the device (although this can never be + // guaranteed). + cordovaServerPort = 12000 + (appIdAsNumber % 1000); + } this.metadata = { id: 'com.id' + this.projectContext.appIdentifier, @@ -109,18 +114,20 @@ export class CordovaBuilder { author: 'A Meteor Developer', email: 'n/a', website: 'n/a', - contentUrl: `http://localhost:${localServerPort}/` + contentUrl: `http://localhost:${cordovaServerPort}/` }; // Set some defaults different from the Cordova defaults this.additionalConfiguration = { global: { 'webviewbounce': false, - 'DisallowOverscroll': true + 'DisallowOverscroll': true, + 'WKWebViewOnly': true, + 'SwiftVersion': SWIFT_VERSION }, platform: { - ios: {}, - android: {} + ios: {}, + android: {} } }; @@ -242,9 +249,7 @@ export class CordovaBuilder { } writeConfigXmlAndCopyResources(shouldCopyResources = true) { - const { XmlBuilder } = loadIsopackage('xmlbuilder'); - - let config = XmlBuilder.create('widget'); + let config = XmlBuilder.create({ version: '1.0' }).ele('widget'); // Set the root attributes _.each({ @@ -261,16 +266,16 @@ export class CordovaBuilder { }); // Set the metadata - config.element('name').txt(this.metadata.name); - config.element('description').txt(this.metadata.description); - config.element('author', { + config.ele('name').txt(this.metadata.name); + config.ele('description').txt(this.metadata.description); + config.ele('author', { href: this.metadata.website, email: this.metadata.email }).txt(this.metadata.author); // Set the additional global configuration preferences _.each(this.additionalConfiguration.global, (value, key) => { - config.element('preference', { + config.ele('preference', { name: key, value: value.toString() }); @@ -278,10 +283,10 @@ export class CordovaBuilder { // Set custom tags into widget element _.each(this.custom, elementSet => { - const tag = config.raw(elementSet); + const tag = config.ele(elementSet); }); - config.element('content', { src: this.metadata.contentUrl }); + config.ele('content', { src: this.metadata.contentUrl }); // Copy all the access rules _.each(this.accessRules, (options, pattern) => { @@ -289,23 +294,23 @@ export class CordovaBuilder { options = _.omit(options, 'type'); if (type === 'intent') { - config.element('allow-intent', { href: pattern }); + config.ele('allow-intent', { href: pattern }); } else if (type === 'navigation') { - config.element('allow-navigation', _.extend({ href: pattern }, options)); + config.ele('allow-navigation', _.extend({ href: pattern }, options)); } else { - config.element('access', _.extend({ origin: pattern }, options)); + config.ele('access', _.extend({ origin: pattern }, options)); } }); const platformElement = { - ios: config.element('platform', {name: 'ios'}), - android: config.element('platform', {name: 'android'}) + ios: config.ele('platform', { name: 'ios' }), + android: config.ele('platform', { name: 'android' }) } // Set the additional platform-specific configuration preferences _.each(this.additionalConfiguration.platform, (prefs, platform) => { _.each(prefs, (value, key) => { - platformElement[platform].element('preference', { + platformElement[platform].ele('preference', { name: key, value: value.toString() }); @@ -334,7 +339,7 @@ export class CordovaBuilder { Console.debug('Writing new config.xml'); const configXmlPath = files.pathJoin(this.projectRoot, 'config.xml'); - const formattedXmlConfig = config.end({ pretty: true }); + const formattedXmlConfig = config.end({ prettyPrint: true }); files.writeFile(configXmlPath, formattedXmlConfig, 'utf8'); } @@ -382,29 +387,29 @@ export class CordovaBuilder { files.pathJoin(this.resourcesPath, filename)); // Set it to the xml tree - xmlElement.element(tag, imageAttributes(name, width, height, src)); + xmlElement.ele(tag, imageAttributes(name, width, height, src)); }); } configureAndCopyResourceFiles(resourceFiles, iosElement, androidElement) { _.each(resourceFiles, resourceFile => { - // Copy file in cordova project root directory - var filename = path.parse(resourceFile.src).base; + // Copy resource files in cordova project root ./resource-files directory keeping original absolute path + var filepath = files.pathResolve(this.projectContext.projectDir, resourceFile.src); files.copyFile( - files.pathResolve(this.projectContext.projectDir, resourceFile.src), - files.pathJoin(this.projectRoot, filename)); + filepath, + files.pathJoin(this.projectRoot, "resource-files", filepath)); // And entry in config.xml if (!resourceFile.platform || (resourceFile.platform && resourceFile.platform === "android")) { - androidElement.element('resource-file', { - src: resourceFile.src, + androidElement.ele('resource-file', { + src: files.pathJoin("resource-files", filepath), target: resourceFile.target }); } if (!resourceFile.platform || (resourceFile.platform && resourceFile.platform === "ios")) { - iosElement.element('resource-file', { - src: resourceFile.src, + iosElement.ele('resource-file', { + src: files.pathJoin("resource-files", filepath), target: resourceFile.target }); } @@ -451,6 +456,10 @@ export class CordovaBuilder { } appendVersion(program, publicSettings) { + // Note: these version calculations must be kept in agreement with + // generateClientProgram in packages/webapp/webapp_server.js, or hot + // code push will reload the app unnecessarily. + let configDummy = {}; configDummy.PUBLIC_SETTINGS = publicSettings || {}; @@ -480,6 +489,7 @@ export class CordovaBuilder { const runtimeConfig = { meteorRelease: meteorRelease, + gitCommitHash: process.env.METEOR_GIT_COMMIT_HASH || files.findGitCommitHash(applicationPath), ROOT_URL: mobileServerUrl, // XXX propagate it from this.options? ROOT_URL_PATH_PREFIX: '', @@ -536,7 +546,7 @@ function createAppConfiguration(builder) { let settings = null; if (settingsFile) { settings = optimisticReadJsonOrNull(settingsFile); - if (! settings) { + if (!settings) { throw new Error("Unreadable --settings file: " + settingsFile); } } diff --git a/tools/cordova/index.js b/tools/cordova/index.js index 7763f41929..f7ce8abddc 100644 --- a/tools/cordova/index.js +++ b/tools/cordova/index.js @@ -2,25 +2,30 @@ import _ from 'underscore'; import assert from 'assert'; import utils from '../utils/utils.js'; import buildmessage from '../utils/buildmessage.js'; +import { + pathJoin, + statOrNull, + getDevBundle, + rm_recursive, +} from '../fs/files'; export const CORDOVA_ARCH = "web.cordova"; export const CORDOVA_PLATFORMS = ['ios', 'android']; export const CORDOVA_DEV_BUNDLE_VERSIONS = { - 'cordova-lib': '7.1.0', - 'cordova-common': '2.1.1', + 'cordova-lib': '9.0.1', + 'cordova-common': '3.2.1', 'cordova-registry-mapper': '1.1.15', }; export const CORDOVA_PLATFORM_VERSIONS = { - // This commit represents cordova-android@6.4.0 plus - // https://github.com/apache/cordova-android/pull/417, aka - // https://github.com/meteor/cordova-android/tree/v6.4.0-with-pr-417: - 'android': 'https://github.com/meteor/cordova-android/tarball/317db7df0f7a054444197bc6d28453cf4ab23280', - 'ios': '4.5.4' + 'android': '8.1.0', + 'ios': '5.1.1', }; +export const SWIFT_VERSION = 5; + const PLATFORM_TO_DISPLAY_NAME_MAP = { 'ios': 'iOS', 'android': 'Android' @@ -34,6 +39,27 @@ export function ensureDevBundleDependencies() { () => { require("../cli/dev-bundle-helpers.js") .ensureDependencies(CORDOVA_DEV_BUNDLE_VERSIONS); + + const cordovaNodeModulesDir = pathJoin( + getDevBundle(), + "lib", + "node_modules", + "cordova-lib", + "node_modules", + ); + + [ + // Remove these bundled packages in preference to + // dev_bundle/lib/node_modules/: + "graceful-fs", + pathJoin("npm", "node_modules", "graceful-fs"), + ].forEach(pkg => { + const path = pathJoin(cordovaNodeModulesDir, pkg); + const stat = statOrNull(path); + if (stat && stat.isDirectory()) { + rm_recursive(path); + } + }); } ); } diff --git a/tools/cordova/project.js b/tools/cordova/project.js index e118a0fd30..d224e2f56d 100644 --- a/tools/cordova/project.js +++ b/tools/cordova/project.js @@ -4,20 +4,17 @@ import assert from 'assert'; import chalk from 'chalk'; import semver from 'semver'; -import files from '../fs/files.js'; +import files from '../fs/files'; import utils from '../utils/utils.js'; import { Console } from '../console/console.js'; -import { Profile } from '../tool-env/profile.js'; +import { Profile } from '../tool-env/profile'; import buildmessage from '../utils/buildmessage.js'; import main from '../cli/main.js'; -import httpHelpers from '../utils/http-helpers.js'; -import { execFileSync, execFileAsync } from '../utils/processes.js'; +import { execFileSync } from '../utils/processes'; -import './protect-string-proto.js'; // must always come before 'cordova-lib' import { cordova as cordova_lib, events as cordova_events, CordovaError } from 'cordova-lib'; import cordova_util from 'cordova-lib/src/cordova/util.js'; -import superspawn from 'cordova-common/src/superspawn.js'; import PluginInfoProvider from 'cordova-common/src/PluginInfo/PluginInfoProvider.js'; import { CORDOVA_PLATFORMS, CORDOVA_PLATFORM_VERSIONS, displayNameForPlatform, displayNamesForPlatforms, @@ -64,7 +61,7 @@ const pinnedPluginVersions = { "cordova-plugin-file-transfer": "1.6.3", "cordova-plugin-geolocation": "2.4.3", "cordova-plugin-globalization": "1.0.7", - "cordova-plugin-inappbrowser": "1.7.1", + "cordova-plugin-inappbrowser": "3.2.0", "cordova-plugin-legacy-whitelist": "1.1.2", "cordova-plugin-media": "3.0.1", "cordova-plugin-media-capture": "1.4.3", @@ -77,6 +74,34 @@ const pinnedPluginVersions = { "cordova-plugin-wkwebview-engine": "1.1.3" } +/** + * To fix Cordova error: Variable(s) missing we convert the cli_variables + * when removing plugins we want to convert for each plugin, for instance, + * cordova-plugin-facebook4: + * commandOptions { + * ... + * cli_variables: { + * 'cordova-plugin-googleplus': { + * REVERSED_CLIENT_ID: 'com.googleusercontent.apps.11111111-xxkodsuusaiusixuaix' + * }, + * 'cordova-plugin-facebook4': { APP_ID: '1111111111111111', APP_NAME: 'appname' } + * } + * } + * into this + * commandOptions { + * ... + * cli_variables: { APP_ID: '1111111111111111', APP_NAME: 'appname' } + * } + * + * @param plugin + * @param commandOptions + */ +const getCommandOptionsForPlugin = (plugin, commandOptions = {}) => { + const cli_variables = commandOptions && commandOptions.cli_variables + && commandOptions.cli_variables[plugin] || {}; + return {...commandOptions, cli_variables}; +} + export class CordovaProject { constructor(projectContext, options = {}) { @@ -87,6 +112,9 @@ export class CordovaProject { this.pluginsDir = files.pathJoin(this.projectRoot, 'plugins'); + this.buildJsonPath = files.convertToOSPath( + files.pathJoin(this.projectRoot, 'build.json')); + this.createIfNeeded(); } @@ -149,6 +177,7 @@ outdated platforms`); this.projectContext, templatePath, { mobileServerUrl: this.options.mobileServerUrl, + cordovaServerPort: this.options.cordovaServerPort, settingsFile: this.options.settingsFile } ); @@ -182,6 +211,32 @@ outdated platforms`); undefined, undefined, config); }, undefined, null); } + + this.writeBuildJson(); + } + + writeBuildJson() { + if (files.exists(this.buildJsonPath)) { + return; + } + + const iosCommonOptions = { + // See https://github.com/apache/cordova-ios/issues/407: + buildFlag: [ + "-UseModernBuildSystem=0", + ...(Console.verbose ? [] : ["-quiet"]) + ] + }; + + files.writeFile( + this.buildJsonPath, + JSON.stringify({ + ios: { + debug: iosCommonOptions, + release: iosCommonOptions, + } + }, null, 2) + "\n", + ); } // Preparing @@ -198,6 +253,7 @@ outdated platforms`); this.projectContext, this.projectRoot, { mobileServerUrl: this.options.mobileServerUrl, + cordovaServerPort: this.options.cordovaServerPort, settingsFile: this.options.settingsFile } ); @@ -240,8 +296,10 @@ outdated platforms`); delete require.cache[files.pathJoin(this.projectRoot, 'platforms/ios/cordova/lib/prepare.js')]; - const commandOptions = _.extend(this.defaultOptions, - { platforms: [platform] }); + const commandOptions = { + ...this.defaultOptions, + platforms: [platform], + }; this.runCommands(`preparing Cordova project for platform \ ${displayNameForPlatform(platform)}`, async () => { @@ -254,8 +312,11 @@ ${displayNameForPlatform(platform)}`, async () => { buildForPlatform(platform, options = {}, extraPaths) { assert(platform); - const commandOptions = _.extend(this.defaultOptions, - { platforms: [platform], options: options }); + const commandOptions = { + ...this.defaultOptions, + platforms: [platform], + options, + }; this.runCommands(`building Cordova app for platform \ ${displayNameForPlatform(platform)}`, async () => { @@ -266,21 +327,21 @@ ${displayNameForPlatform(platform)}`, async () => { // Running async run(platform, isDevice, options = [], extraPaths = []) { + options.push('--buildConfig', this.buildJsonPath); options.push(isDevice ? '--device' : '--emulator'); let env = this.defaultEnvWithPathsAdded(...extraPaths); - - let command = files.convertToOSPath(files.pathJoin( - this.projectRoot, 'platforms', platform, 'cordova', 'run')); + const commandOptions = { + ...this.defaultOptions, + platforms: [platform], + device: isDevice, + }; this.runCommands(`running Cordova app for platform \ -${displayNameForPlatform(platform)} with options ${options}`, - execFileAsync(command, options, { - env: env, - cwd: this.projectRoot, - stdio: Console.verbose ? 'inherit' : 'pipe', - waitForClose: false - }), null, null); +${displayNameForPlatform(platform)} with options ${options}`, async () => { + await cordova_lib.run(commandOptions); + }); + } // Platforms @@ -335,7 +396,7 @@ to build apps for ${displayNameForPlatform(platform)}.`); Console.info(); Console.info("Please follow the installation instructions in the mobile guide:"); - Console.info(Console.url("http://guide.meteor.com/mobile.html#installing-prerequisites")); + Console.info(Console.url("http://guide.meteor.com/cordova.html#installing-prerequisites")); Console.info(); @@ -481,14 +542,15 @@ from Cordova project`, async () => { // Construct a target suitable for 'cordova plugin add' from an id and // version, converting or resolving a URL or path where needed. - targetForPlugin(id, version) { + targetForPlugin(id, version, { usePluginName = false } = {}) { assert(id); assert(version); buildmessage.assertInJob(); if (utils.isUrlWithSha(version)) { - return convertToGitUrl(version); + return usePluginName ? convertToGitUrl(version) : + `${id}@${convertToGitUrl(version)}`; } else if (utils.isUrlWithFileScheme(version)) { // Strip file:// and resolve the path relative to the cordova-build // directory @@ -520,25 +582,49 @@ from Cordova project`, async () => { } } - addPlugin(id, version, config = {}) { - const target = this.targetForPlugin(id, version); + addPlugin(id, version, config = {}, options = {}) { + const { retry = true } = options; + const target = this.targetForPlugin(id, version, options); if (target) { const commandOptions = _.extend(this.defaultOptions, { cli_variables: config, link: utils.isUrlWithFileScheme(version) }); - this.runCommands(`adding plugin ${target} \ -to Cordova project`, cordova_lib.plugin.bind(undefined, 'add', [target], commandOptions)); + try { + this.runCommands(`adding plugin ${target} \ +to Cordova project`, cordova_lib.plugin.bind(undefined, 'add', [target], + commandOptions)); + } catch (error) { + if (retry && utils.isUrlWithSha(version)) { + Console.warn(`Cordova plugin add for ${id} failed with plugin id + in the URL with hash, retrying now with plugin name. If this works you + can ignore the error above or you can update your plugin declaration + to use the id from config.xml instead of the name from package.json`); + this.addPlugin(id, version, config, { ...options, + usePluginName: true, retry: false }); + return; + } + throw error; + } } } // plugins is an array of plugin IDs. - removePlugins(plugins) { + removePlugins(plugins, config = {}) { if (_.isEmpty(plugins)) { return; } - this.runCommands(`removing plugins ${plugins} \ -from Cordova project`, cordova_lib.plugin.bind(undefined, 'rm', plugins, this.defaultOptions)); + const commandOptions = _.extend(this.defaultOptions, + { cli_variables: config }); + + plugins.forEach(plugin => { + const commandOptionsPlugin = getCommandOptionsForPlugin(plugin, + commandOptions); + + this.runCommands(`removing plugin ${plugin} \ + from Cordova project`, cordova_lib.plugin.bind(undefined, 'rm --force', [plugin], + commandOptionsPlugin)); + }); } // Ensures that the Cordova plugins are synchronized with the app-level @@ -666,7 +752,7 @@ perform cordova plugins reinstall`); Object.keys(installedPluginVersions)); } - this.removePlugins(pluginsToRemove); + this.removePlugins(pluginsToRemove, pluginsConfiguration); let pluginVersionsToInstall; @@ -704,7 +790,6 @@ perform cordova plugins reinstall`); // @scope/plugin@1.0.0 => { 'com.cordova.plugin': 'scope/plugin' } const installed = this.listInstalledPluginVersions(); const installedPluginsNames = Object.keys(installed); - const installedPluginsVersions = Object.values(installed); const missingPlugins = {}; Object.keys(requiredPlugins).filter(plugin => { @@ -760,7 +845,11 @@ convenience, but you should adjust your dependencies.`); // Cordova commands support get defaultOptions() { - return { silent: !Console.verbose, verbose: Console.verbose }; + return { + silent: !Console.verbose, + verbose: Console.verbose, + buildConfig: this.buildJsonPath, + }; } defaultEnvWithPathsAdded(...extraPaths) { diff --git a/tools/cordova/protect-string-proto.js b/tools/cordova/protect-string-proto.js deleted file mode 100644 index 57398a0b8d..0000000000 --- a/tools/cordova/protect-string-proto.js +++ /dev/null @@ -1,48 +0,0 @@ -// `cordova-lib` depends on `shelljs`, which modifies String.prototype -// (which is BAD). See: -// https://github.com/arturadib/shelljs/issues/159 -// -// The following code protects the tool environment (which is also -// where build plugins run) from having a polluted String.prototype. -// One JS library in particular, String.js (before v3.3.1), is -// sensitive to String prototype pollution. -// -// This code can be removed when `shelljs` cleans up its act and -// `cordova-lib` uses a new version, or when `cordova-lib` moves away -// from `shelljs`. - -function makeDescriptor() { - let value; - - // This descriptor allows the property to remain non-enumerable while - // still permitting controlled modifications of its value. - return { - enumerable: false, - - get() { - return value; - }, - - set(newValue) { - if (typeof newValue === "function") { - value = function () { - // Ignore calls that likely originate from - // https://github.com/jprichardson/string.js/blob/adc2e9d1b8/lib/string.js#L726 - if (arguments.length > 0 || - this != "teststring") { - return newValue.apply(this, arguments); - } - }; - } else { - value = newValue; - } - - return newValue; - } - }; -} - -Object.defineProperties(String.prototype, { - to: makeDescriptor(), - toEnd: makeDescriptor() -}); diff --git a/tools/cordova/run-targets.js b/tools/cordova/run-targets.js index 47e0e2cb73..2b2913ebd5 100644 --- a/tools/cordova/run-targets.js +++ b/tools/cordova/run-targets.js @@ -5,8 +5,8 @@ import child_process from 'child_process'; import { loadIsopackage } from '../tool-env/isopackets.js'; import runLog from '../runners/run-log.js'; import { Console } from '../console/console.js'; -import files from '../fs/files.js'; -import { execFileSync, execFileAsync } from '../utils/processes.js'; +import files from '../fs/files'; +import { execFileSync, execFileAsync } from '../utils/processes'; export class CordovaRunTarget { get title() { @@ -69,7 +69,7 @@ function openXcodeProject(projectDir) { "app on an iOS device. For further instructions, visit this " + "wiki page: ") + Console.url( - "https://guide.meteor.com/mobile.html#running-on-ios" + "https://guide.meteor.com/cordova.html#running-on-ios" )); Console.info(); } catch (error) { @@ -82,7 +82,7 @@ ${error.message}`); Console.error(message); Console.error( chalk.green("Instructions for running your app on an iOS device: ") + - Console.url("https://guide.meteor.com/mobile.html#running-on-ios") + Console.url("https://guide.meteor.com/cordova.html#running-on-ios") ); Console.error(); } @@ -132,7 +132,7 @@ export class AndroidRunTarget extends CordovaRunTarget { } async tailLogs(cordovaProject, target) { - const { transform } = require("../utils/eachline.js"); + const { transform } = require("../utils/eachline"); cordovaProject.runCommands(`tailing logs for ${this.displayName}`, async () => { await this.checkPlatformRequirementsAndSetEnv(cordovaProject); diff --git a/tools/fs/README.md b/tools/fs/README.md index 28fc31d980..f139e14e89 100644 --- a/tools/fs/README.md +++ b/tools/fs/README.md @@ -25,12 +25,6 @@ Also `files.pathJoin` instead of `path.join` and others to properly preserve the unixy feel of paths: `/C/Users/IEUser/AppData/Local` instead of `C:\Users\IEUser\AppData\Local`. -### `mini-files` - -Some code is shared between the tool libs (this folder) and the code that gets -copied to a built bundle (`boot.js`). The shared code is stored in -`mini-files.js`. - ## File watching Since node.js doesn't ship a stable library to watch a folder on all diff --git a/tools/fs/files.js b/tools/fs/files.ts similarity index 51% rename from tools/fs/files.js rename to tools/fs/files.ts index d55948eb29..b91a5a6799 100644 --- a/tools/fs/files.js +++ b/tools/fs/files.ts @@ -4,140 +4,164 @@ /// (such as testing whether an directory is a meteor app) /// -var assert = require("assert"); -var fs = require("fs"); -var path = require('path'); -var os = require('os'); -var util = require('util'); -var _ = require('underscore'); -var Fiber = require('fibers'); -var crypto = require('crypto'); -var spawn = require("child_process").spawn; +import assert from "assert"; +import fs, { PathLike, Stats, Dirent } from "fs"; +import path from "path"; +import os from "os"; +import { spawn, execFile } from "child_process"; +import { EventEmitter } from "events"; +import { Slot } from "@wry/context"; +import { dep } from "optimism"; -var rimraf = require('rimraf'); -var sourcemap = require('source-map'); -var sourceMapRetrieverStack = require('../tool-env/source-map-retriever-stack.js'); +const _ = require('underscore'); +const Fiber = require("fibers"); -var utils = require('../utils/utils.js'); -var cleanup = require('../tool-env/cleanup.js'); -var buildmessage = require('../utils/buildmessage.js'); -var fiberHelpers = require('../utils/fiber-helpers.js'); -var colonConverter = require('../utils/colon-converter.js'); +const rimraf = require('rimraf'); +const sourcemap = require('source-map'); +const sourceMapRetrieverStack = require('../tool-env/source-map-retriever-stack.js'); -var miniFiles = require('./mini-files.js'); +const utils = require('../utils/utils.js'); +const cleanup = require('../tool-env/cleanup.js'); +const buildmessage = require('../utils/buildmessage.js'); +const fiberHelpers = require('../utils/fiber-helpers.js'); +const colonConverter = require('../utils/colon-converter.js'); -var Profile = require('../tool-env/profile.js').Profile; +const Profile = require('../tool-env/profile').Profile; -// Attach all exports of miniFiles here to avoid code duplication -var files = exports; -_.extend(files, miniFiles); +export * from '../static-assets/server/mini-files'; +import { + convertToOSPath, + convertToPosixPath, + convertToStandardLineEndings, + convertToStandardPath, + convertToWindowsPath, + isWindowsLikeFilesystem, + pathBasename, + pathDirname, + pathJoin, + pathNormalize, + pathOsDelimiter, + pathRelative, + pathResolve, + pathSep, +} from "../static-assets/server/mini-files"; -var parsedSourceMaps = {}; -var nextStackFilenameCounter = 1; +const { hasOwnProperty } = Object.prototype; + +const parsedSourceMaps: Record = {}; +let nextStackFilenameCounter = 1; // Use the source maps specified to runJavaScript -var useParsedSourceMap = function (pathForSourceMap) { +function useParsedSourceMap(pathForSourceMap: string) { // Check our fancy source map data structure, used for isopacks - if (_.has(parsedSourceMaps, pathForSourceMap)) { + if (hasOwnProperty.call(parsedSourceMaps, pathForSourceMap)) { return {map: parsedSourceMaps[pathForSourceMap]}; } return null; -}; +} // Try this source map first sourceMapRetrieverStack.push(useParsedSourceMap); -// Fibers are disabled by default for files.* operations unless -// process.env.METEOR_DISABLE_FS_FIBERS parses to a falsy value. -const YIELD_ALLOWED = !! ( - _.has(process.env, "METEOR_DISABLE_FS_FIBERS") && - ! JSON.parse(process.env.METEOR_DISABLE_FS_FIBERS)); - function canYield() { return Fiber.current && Fiber.yield && ! Fiber.yield.disallowed; } -function mayYield() { - return YIELD_ALLOWED && canYield(); -} - // given a predicate function and a starting path, traverse upwards // from the path until we find a path that satisfies the predicate. // // returns either the path to the lowest level directory that passed // the test or null for none found. if starting path isn't given, use // cwd. -var findUpwards = function (predicate, startPath) { - var testDir = startPath || files.cwd(); +function findUpwards( + predicate: (path: string) => boolean, + startPath: string = cwd(), +): string | null { + let testDir: string | null = startPath; while (testDir) { if (predicate(testDir)) { break; } - var newDir = files.pathDirname(testDir); + var newDir: string = pathDirname(testDir); if (newDir === testDir) { testDir = null; } else { testDir = newDir; } } - if (!testDir) { - return null; - } + return testDir || null; +} - return testDir; -}; - -files.cwd = function () { - return files.convertToStandardPath(process.cwd()); -}; +export function cwd() { + return convertToStandardPath(process.cwd()); +} // Determine if 'filepath' (a path, or omit for cwd) is within an app // directory. If so, return the top-level app directory. -files.findAppDir = function (filepath) { - var isAppDir = function (filepath) { +export function findAppDir(filepath: string) { + return findUpwards(function isAppDir(filepath) { // XXX once we are done with the transition to engine, this should - // change to: `return files.exists(path.join(filepath, '.meteor', + // change to: `return exists(path.join(filepath, '.meteor', // 'release'))` // .meteor/packages can be a directory, if .meteor is a warehouse // directory. since installing meteor initializes a warehouse at // $HOME/.meteor, we want to make sure your home directory (and all // subdirectories therein) don't count as being within a meteor app. - try { // use try/catch to avoid the additional syscall to files.exists - return files.stat( - files.pathJoin(filepath, '.meteor', 'packages')).isFile(); + try { // use try/catch to avoid the additional syscall to exists + return stat( + pathJoin(filepath, '.meteor', 'packages')).isFile(); } catch (e) { return false; } - }; + }, filepath); +} - return findUpwards(isAppDir, filepath); -}; - -files.findPackageDir = function (filepath) { - var isPackageDir = function (filepath) { +export function findPackageDir(filepath: string) { + return findUpwards(function isPackageDir(filepath) { try { - return files.stat(files.pathJoin(filepath, 'package.js')).isFile(); + return stat(pathJoin(filepath, 'package.js')).isFile(); } catch (e) { return false; } - }; + }, filepath); +} - return findUpwards(isPackageDir, filepath); -}; +// Returns the hash of the current Git HEAD revision of the application, +// if possible. Always resolves rather than rejecting (unless something +// truly unexpected happens). The result value is a string when a Git +// revision was successfully resolved, or undefined otherwise. +export function findGitCommitHash(path: string) { + return new Promise(resolve => { + const appDir = findAppDir(path); + if (appDir) { + execFile("git", ["rev-parse", "HEAD"], { + cwd: convertToOSPath(appDir), + }, (error: any, stdout: string) => { + if (! error && typeof stdout === "string") { + resolve(stdout.trim()); + } else { + resolve(); + } + }); + } else { + resolve(); + } + }).await(); +} // create a .gitignore file in dirPath if one doesn't exist. add // 'entry' to the .gitignore on its own line at the bottom of the // file, if the exact line does not already exist in the file. -files.addToGitignore = function (dirPath, entry) { - var filepath = files.pathJoin(dirPath, ".gitignore"); - if (files.exists(filepath)) { - var data = files.readFile(filepath, 'utf8'); - var lines = data.split(/\n/); - if (_.any(lines, function (x) { return x === entry; })) { +export function addToGitignore(dirPath: string, entry: string) { + const filePath = pathJoin(dirPath, ".gitignore"); + if (exists(filePath)) { + let data = readFile(filePath, 'utf8') as string; + const lines = data.split(/\n/); + if (lines.some(line => line === entry)) { // already there do nothing } else { // rewrite file w/ new entry. @@ -145,18 +169,18 @@ files.addToGitignore = function (dirPath, entry) { data = data + "\n"; } data = data + entry + "\n"; - files.writeFile(filepath, data, 'utf8'); + writeFile(filePath, data, 'utf8'); } } else { // doesn't exist, just write it. - files.writeFile(filepath, entry + "\n", 'utf8'); + writeFile(filePath, entry + "\n", 'utf8'); } -}; +} // Are we running Meteor from a git checkout? -files.inCheckout = _.once(function () { +export const inCheckout = _.once(function () { try { - if (files.exists(files.pathJoin(files.getCurrentToolsDir(), '.git'))) { + if (exists(pathJoin(getCurrentToolsDir(), '.git'))) { return true; } } catch (e) { console.log(e); } @@ -167,71 +191,70 @@ files.inCheckout = _.once(function () { // True if we are using a warehouse: either installed Meteor, or if // $METEOR_WAREHOUSE_DIR is set. Otherwise false (we're in a git checkout and // just using packages from the checkout). -files.usesWarehouse = function () { +export function usesWarehouse() { // Test hook: act like we're "installed" using a non-homedir warehouse // directory. if (process.env.METEOR_WAREHOUSE_DIR) { return true; } else { - return ! files.inCheckout(); + return ! inCheckout(); } -}; +} // Read the '.tools_version.txt' file. If in a checkout, throw an error. -files.getToolsVersion = function () { - if (! files.inCheckout()) { - var isopackJsonPath = files.pathJoin(files.getCurrentToolsDir(), +export function getToolsVersion() { + if (! inCheckout()) { + const isopackJsonPath = pathJoin(getCurrentToolsDir(), '..', // get out of tool, back to package 'isopack.json'); - var parsed; - - if (files.exists(isopackJsonPath)) { - var isopackJson = files.readFile(isopackJsonPath); - parsed = JSON.parse(isopackJson); + let parsed; + if (exists(isopackJsonPath)) { // XXX "isopack-1" is duplicate of isopack.currentFormat - parsed = parsed["isopack-1"]; // get the right format from the JSON + parsed = JSON.parse(readFile(isopackJsonPath))["isopack-1"]; return parsed.name + '@' + parsed.version; } // XXX COMPAT WITH 0.9.3 - var unipackageJsonPath = files.pathJoin(files.getCurrentToolsDir(), + const unipackageJsonPath = pathJoin( + getCurrentToolsDir(), '..', // get out of tool, back to package - 'unipackage.json'); - var unipackageJson = files.readFile(unipackageJsonPath); - parsed = JSON.parse(unipackageJson); + 'unipackage.json' + ); + parsed = JSON.parse(readFile(unipackageJsonPath)); return parsed.name + '@' + parsed.version; } else { throw new Error("Unexpected. Git checkouts don't have tools versions."); } -}; +} // Return the root of dev_bundle (probably /usr/local/meteor in an // install, or (checkout root)/dev_bundle in a checkout.). -files.getDevBundle = function () { - return files.pathJoin(files.getCurrentToolsDir(), 'dev_bundle'); -}; +export function getDevBundle() { + return pathJoin(getCurrentToolsDir(), 'dev_bundle'); +} -files.getCurrentNodeBinDir = function () { - return files.pathJoin(files.getDevBundle(), "bin"); +export function getCurrentNodeBinDir() { + return pathJoin(getDevBundle(), "bin"); } // Return the top-level directory for this meteor install or checkout -files.getCurrentToolsDir = function () { - return files.pathDirname( - files.pathDirname( - files.convertToStandardPath(__dirname))); -}; +export function getCurrentToolsDir() { + return pathDirname(pathDirname(convertToStandardPath(__dirname))); +} // Read a settings file and sanity-check it. Returns a string on // success or null on failure (in which case buildmessages will be // emitted). -files.getSettings = function (filename, watchSet) { +export function getSettings( + filename: string, + watchSet: import("./watch").WatchSet, +) { buildmessage.assertInCapture(); - var absPath = files.pathResolve(filename); - var buffer = require("./watch.js").readAndWatchFile(watchSet, absPath); + const absPath = pathResolve(filename); + const buffer = require("./watch").readAndWatchFile(watchSet, absPath); if (buffer === null) { buildmessage.error("file not found (settings file)", { file: filename }); @@ -244,7 +267,7 @@ files.getSettings = function (filename, watchSet) { return null; } - var str = buffer.toString('utf8'); + let str = buffer.toString('utf8'); // The use of a byte order mark crashes JSON parsing. Since a BOM is not // required (or recommended) when using UTF-8, let's remove it if it exists. @@ -262,33 +285,33 @@ files.getSettings = function (filename, watchSet) { } return str; -}; +} // Try to find the prettiest way to present a path to the // user. Presently, the main thing it does is replace $HOME with ~. -files.prettyPath = function (p) { - p = files.realpath(p); - var home = files.getHomeDir(); +export function prettyPath(p: string) { + p = realpath(p); + const home = getHomeDir(); if (! home) { return p; } - var relativeToHome = files.pathRelative(home, p); - if (relativeToHome.substr(0, 3) === ('..' + files.pathSep)) { + const relativeToHome = pathRelative(home, p); + if (relativeToHome.substr(0, 3) === ('..' + pathSep)) { return p; } - return files.pathJoin('~', relativeToHome); -}; + return pathJoin('~', relativeToHome); +} // Like statSync, but null if file not found -files.statOrNull = function (path) { - return statOrNull(path); -}; +export function statOrNull(path: string) { + return statOrNullHelper(path, false); +} -function statOrNull(path, preserveSymlinks) { +function statOrNullHelper(path: string, preserveSymlinks = false) { try { return preserveSymlinks - ? files.lstat(path) - : files.stat(path); + ? lstat(path) + : stat(path); } catch (e) { if (e.code === "ENOENT") { return null; @@ -297,32 +320,32 @@ function statOrNull(path, preserveSymlinks) { } } -export function realpathOrNull(path) { +export function realpathOrNull(path: string) { try { - return files.realpath(path); + return realpath(path); } catch (e) { if (e.code !== "ENOENT") throw e; return null; } } -files.rm_recursive_async = (path) => { - return new Promise((resolve, reject) => { - rimraf(files.convertToOSPath(path), err => err +export function rm_recursive_async(path: string) { + return new Promise((resolve, reject) => { + rimraf(convertToOSPath(path), (err: Error) => err ? reject(err) : resolve()); }); -}; +} // Like rm -r. -files.rm_recursive = Profile("files.rm_recursive", (path) => { +export const rm_recursive = Profile("files.rm_recursive", (path: string) => { try { - rimraf.sync(files.convertToOSPath(path)); + rimraf.sync(convertToOSPath(path)); } catch (e) { if ((e.code === "ENOTEMPTY" || e.code === "EPERM") && canYield()) { - files.rm_recursive_async(path).await(); + rm_recursive_async(path).await(); return; } throw e; @@ -330,11 +353,11 @@ files.rm_recursive = Profile("files.rm_recursive", (path) => { }); // Returns the base64 SHA256 of the given file. -files.fileHash = function (filename) { - var crypto = require('crypto'); - var hash = crypto.createHash('sha256'); +export function fileHash(filename: string) { + const crypto = require('crypto'); + const hash = crypto.createHash('sha256'); hash.setEncoding('base64'); - var rs = files.createReadStream(filename); + const rs = createReadStream(filename); return new Promise(function (resolve) { rs.on('end', function () { rs.close(); @@ -342,99 +365,85 @@ files.fileHash = function (filename) { }); rs.pipe(hash, { end: false }); }).await(); -}; +} // This is the result of running fileHash on a blank file. -files.blankHash = "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="; +export const blankHash = "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="; // Returns a base64 SHA256 hash representing a tree on disk. It is not sensitive // to modtime, uid/gid, or any permissions bits other than the current-user-exec // bit on normal files. -files.treeHash = function (root, options) { - options = _.extend({ - ignore: function (relativePath) { - return false; - } - }, options); - - var crypto = require('crypto'); - var hash = crypto.createHash('sha256'); - - var hashLog = process.env.TREE_HASH_DEBUG ? - ['\n\nTREE HASH for ' + root + '\n'] : null; - - var updateHash = function (text) { - hashLog && hashLog.push(text); - hash.update(text); +export function treeHash(root: string, optionsParams: { + ignore?: (path: string) => boolean; +}) { + const options = { + ignore() { return false; }, + ...optionsParams, }; - var traverse = function (relativePath) { + const hash = require('crypto').createHash('sha256'); + + function traverse(relativePath: string) { if (options.ignore(relativePath)) { - hashLog && hashLog.push('SKIP ' + JSON.stringify(relativePath) + '\n'); return; } - var absPath = files.pathJoin(root, relativePath); - var stat = files.lstat(absPath); + var absPath = pathJoin(root, relativePath); + var stat = lstat(absPath); if (stat.isDirectory()) { if (relativePath) { - updateHash('dir ' + JSON.stringify(relativePath) + '\n'); + hash.update('dir ' + JSON.stringify(relativePath) + '\n'); } - _.each(files.readdir(absPath), function (entry) { - traverse(files.pathJoin(relativePath, entry)); + readdir(absPath).forEach(entry => { + traverse(pathJoin(relativePath, entry)); }); } else if (stat.isFile()) { if (!relativePath) { throw Error("must call files.treeHash on a directory"); } - updateHash('file ' + JSON.stringify(relativePath) + ' ' + - stat.size + ' ' + files.fileHash(absPath) + '\n'); + hash.update('file ' + JSON.stringify(relativePath) + ' ' + + stat.size + ' ' + fileHash(absPath) + '\n'); if (stat.mode & 0o100) { - updateHash('exec\n'); + hash.update('exec\n'); } } else if (stat.isSymbolicLink()) { if (!relativePath) { throw Error("must call files.treeHash on a directory"); } - updateHash('symlink ' + JSON.stringify(relativePath) + ' ' + - JSON.stringify(files.readlink(absPath)) + '\n'); + hash.update('symlink ' + JSON.stringify(relativePath) + ' ' + + JSON.stringify(readlink(absPath)) + '\n'); } // ignore anything weirder }; traverse(''); - hashLog && files.appendFile(process.env.TREE_HASH_DEBUG, hashLog.join('')); + return hash.digest('base64'); -}; +} // like mkdir -p. if it returns true, the item is a directory (even if // it was already created). if it returns false, the item is not a // directory and we couldn't make it one. -files.mkdir_p = function (dir, mode) { - var p = files.pathResolve(dir); - var ps = files.pathNormalize(p).split(files.pathSep); +export function mkdir_p(dir: string, mode: number | null = null) { + const p = pathResolve(dir); + const ps = pathNormalize(p).split(pathSep); - var stat = files.statOrNull(p); + const stat = statOrNull(p); if (stat) { return stat.isDirectory(); } // doesn't exist. recurse to build parent. - // Don't use files.pathJoin here because it can strip off the leading slash + // Don't use pathJoin here because it can strip off the leading slash // accidentally. - var parentPath = ps.slice(0, -1).join(files.pathSep); - var success = files.mkdir_p(parentPath, mode); + const parentPath = ps.slice(0, -1).join(pathSep); + const success = mkdir_p(parentPath, mode); // parent is not a directory. if (! success) { return false; } - var pathIsDirectory = function (path) { - var stat = files.statOrNull(path); - return stat && stat.isDirectory(); - }; - try { - files.mkdir(p, mode); + mkdir(p, mode); } catch (err) { if (err.code === "EEXIST") { if (pathIsDirectory(p)) { @@ -451,7 +460,12 @@ files.mkdir_p = function (dir, mode) { // double check we exist now return pathIsDirectory(p); -}; +} + +function pathIsDirectory(path: string) { + const stat = statOrNull(path); + return stat && stat.isDirectory(); +} // Roughly like cp -R. // @@ -467,33 +481,40 @@ files.mkdir_p = function (dir, mode) { // If options.ignore is present, it should be a list of regexps. Any // file whose basename matches one of the regexps, before // transformation, will be skipped. -files.cp_r = function(from, to, options = {}) { - from = files.pathResolve(from); +export function cp_r(from: string, to: string, options: { + preserveSymlinks?: boolean; + ignore?: RegExp[]; + transformFilename?: (f: string) => string; + transformContents?: ( + contents: ReturnType, + file: string, + ) => typeof contents; +} = {}) { + from = pathResolve(from); - const stat = statOrNull(from, options.preserveSymlinks); + const stat = statOrNullHelper(from, options.preserveSymlinks); if (! stat) { return; } if (stat.isDirectory()) { - files.mkdir_p(to, 0o755); + mkdir_p(to, 0o755); - files.readdir(from).forEach(f => { + readdir(from).forEach(f => { if (options.ignore && - _.any(options.ignore, - pattern => f.match(pattern))) { + options.ignore.some(pattern => f.match(pattern))) { return; } - const fullFrom = files.pathJoin(from, f); + const fullFrom = pathJoin(from, f); if (options.transformFilename) { f = options.transformFilename(f); } - files.cp_r( + cp_r( fullFrom, - files.pathJoin(to, f), + pathJoin(to, f), options ); }) @@ -501,62 +522,69 @@ files.cp_r = function(from, to, options = {}) { return; } - files.mkdir_p(files.pathDirname(to)); + mkdir_p(pathDirname(to)); if (stat.isSymbolicLink()) { - symlinkWithOverwrite(files.readlink(from), to); + symlinkWithOverwrite(readlink(from), to); + + } else if (options.transformContents) { + writeFile(to, options.transformContents( + readFile(from), + pathBasename(from) + ), { + // Create the file as readable and writable by everyone, and + // executable by everyone if the original file is executable by + // owner. (This mode will be modified by umask.) We don't copy the + // mode *directly* because this function is used by 'meteor create' + // which is copying from the read-only tools tree into a writable app. + mode: (stat.mode & 0o100) ? 0o777 : 0o666, + }); } else { - // Create the file as readable and writable by everyone, and - // executable by everyone if the original file is executable by - // owner. (This mode will be modified by umask.) We don't copy the - // mode *directly* because this function is used by 'meteor create' - // which is copying from the read-only tools tree into a writable app. - const mode = (stat.mode & 0o100) ? 0o777 : 0o666; - - if (options.transformContents) { - files.writeFile(to, options.transformContents( - files.readFile(from), - files.pathBasename(from) - ), { mode }); - - } else { - copyFileHelper(from, to, mode); - } + // Note: files.copyFile applies the same stat.mode logic as above. + copyFile(from, to); } -}; +} // create a symlink, overwriting the target link, file, or directory // if it exists -export function symlinkWithOverwrite(source, target) { - const args = [source, target]; +export const symlinkWithOverwrite = +Profile("files.symlinkWithOverwrite", function symlinkWithOverwrite( + source: string, + target: string, +) { + const args: [string, string, "junction"?] = [source, target]; if (process.platform === "win32") { - const absoluteSource = files.pathResolve(target, source); + const absoluteSource = pathResolve(target, source); - if (files.stat(absoluteSource).isDirectory()) { + if (stat(absoluteSource).isDirectory()) { args[2] = "junction"; } } try { - files.symlink(...args); + symlink(...args); } catch (e) { if (e.code === "EEXIST") { - if (files.lstat(target).isSymbolicLink() && - files.readlink(target) === source) { + function normalizePath(path: string) { + return convertToOSPath(path).replace(/[\/\\]$/, "") + } + + if (lstat(target).isSymbolicLink() && + normalizePath(readlink(target)) === normalizePath(source)) { // If the target already points to the desired source, we don't // need to do anything. return; } // overwrite existing link, file, or directory - files.rm_recursive(target); - files.symlink(...args); + rm_recursive(target); + symlink(...args); } else { throw e; } } -} +}) /** * Get every path in a directory recursively, treating symlinks as files @@ -566,39 +594,42 @@ export function symlinkWithOverwrite(source, target) { * @param {String[]} options.output An array to push results to * @return {String[]} All of the paths in the directory recursively */ -files.getPathsInDir = function (dir, options) { +export function getPathsInDir(dir: string, options: { + cwd?: string; + output?: string[]; +}) { // Don't let this function yield so that the file system doesn't get changed // underneath us return fiberHelpers.noYieldsAllowed(function () { - var cwd = options.cwd || files.convertToStandardPath(process.cwd()); + var cwd = options.cwd || convertToStandardPath(process.cwd()); - if (! files.exists(cwd)) { + if (! exists(cwd)) { throw new Error("Specified current working directory doesn't exist: " + cwd); } - var absoluteDir = files.pathResolve(cwd, dir); + const absoluteDir = pathResolve(cwd, dir); - if (! files.exists(absoluteDir)) { + if (! exists(absoluteDir)) { // There are no paths in this dir, so don't do anything return; } - var output = options.output || []; + const output = options.output || []; - var pathIsDirectory = function (path) { - var stat = files.lstat(path); + function pathIsDirectory(path: string) { + var stat = lstat(path); return stat.isDirectory(); - }; + } - _.each(files.readdir(absoluteDir), function (entry) { - var newPath = files.pathJoin(dir, entry); - var newAbsPath = files.pathJoin(absoluteDir, entry); + readdir(absoluteDir).forEach(entry => { + const newPath = pathJoin(dir, entry); + const newAbsPath = pathJoin(absoluteDir, entry); output.push(newPath); if (pathIsDirectory(newAbsPath)) { - files.getPathsInDir(newPath, { + getPathsInDir(newPath, { cwd: cwd, output: output }); @@ -607,68 +638,39 @@ files.getPathsInDir = function (dir, options) { return output; }); -}; +} -files.findPathsWithRegex = function (dir, regex, options) { - var allPaths = files.getPathsInDir(dir, { +export function findPathsWithRegex( + dir: string, + regex: RegExp, + options: { + cwd: string; + }, +) { + return getPathsInDir(dir, { cwd: options.cwd - }); - - return _.filter(allPaths, function (path) { + }).filter(function (path: string) { return path.match(regex); }); -}; - -// Copies a file, which is expected to exist. Parent directories of "to" do not -// have to exist. Treats symbolic links transparently (copies the contents, not -// the link itself, and it's an error if the link doesn't point to a file). -files.copyFile = function (from, to, origMode=null) { - files.mkdir_p(files.pathDirname(files.pathResolve(to)), 0o755); - - if (origMode === null) { - var stats = files.stat(from); - if (!stats.isFile()) { - throw Error("cannot copy non-files"); - } - origMode = stats.mode; - } - - // Create the file as readable and writable by everyone, and executable by - // everyone if the original file is executably by owner. (This mode will be - // modified by umask.) We don't copy the mode *directly* because this function - // is used by 'meteor create' which is copying from the read-only tools tree - // into a writable app. - var mode = (origMode & 0o100) ? 0o777 : 0o666; - - copyFileHelper(from, to, mode); -}; -files.copyFile = Profile("files.copyFile", files.copyFile); - -var copyFileHelper = function (from, to, mode) { - var readStream = files.createReadStream(from); - var writeStream = files.createWriteStream(to, { mode: mode }); - new Promise(function (resolve, reject) { - readStream.on('error', reject); - writeStream.on('error', reject); - writeStream.on('open', function () { - readStream.pipe(writeStream); - }); - writeStream.once('finish', resolve); - }).await(); -}; +} // Make a temporary directory. Returns the path to the newly created // directory. Only the current user is allowed to read or write the // files in the directory (or add files to it). The directory will // be cleaned up on exit. const tempDirs = Object.create(null); -files.mkdtemp = function (prefix) { - var make = function () { +export function mkdtemp(prefix: string): string { + function make(): string { prefix = prefix || 'mt-'; // find /tmp - var tmpDir = _.first(_.map(['TMPDIR', 'TMP', 'TEMP'], function (t) { - return process.env[t]; - }).filter(_.identity)); + let tmpDir: string | undefined; + ['TMPDIR', 'TMP', 'TEMP'].some(t => { + const value = process.env[t]; + if (value) { + tmpDir = value; + return true; + } + }); if (! tmpDir && process.platform !== 'win32') { tmpDir = '/tmp'; @@ -678,16 +680,18 @@ files.mkdtemp = function (prefix) { throw new Error("Couldn't create a temporary directory."); } - tmpDir = files.realpath(tmpDir); + tmpDir = realpath(tmpDir); // make the directory. give it 3 tries in case of collisions from // crappy random. var tries = 3; while (tries > 0) { - var dirPath = files.pathJoin( - tmpDir, prefix + (Math.random() * 0x100000000 + 1).toString(36)); + const dirPath = pathJoin( + tmpDir, + prefix + (Math.random() * 0x100000000 + 1).toString(36), + ); try { - files.mkdir(dirPath, 0o700); + mkdir(dirPath, 0o700); return dirPath; } catch (err) { tries--; @@ -695,14 +699,14 @@ files.mkdtemp = function (prefix) { } throw new Error("failed to make temporary directory in " + tmpDir); }; - var dir = make(); + const dir = make(); tempDirs[dir] = true; return dir; -}; +} // Call this if you're done using a temporary directory. It will asynchronously // be deleted. -files.freeTempDir = function (dir) { +export function freeTempDir(dir: string) { if (! tempDirs[dir]) { throw Error("not a tracked temp dir: " + dir); } @@ -711,7 +715,7 @@ files.freeTempDir = function (dir) { return; } - return files.rm_recursive_async(dir).then(() => { + return rm_recursive_async(dir).then(() => { // Delete tempDirs[dir] only when the removal finishes, so that the // cleanup.onExit handler can attempt the removal synchronously if it // fires in the meantime. @@ -721,14 +725,23 @@ files.freeTempDir = function (dir) { // to delete it again when the process exits. console.log(error); }); -}; +} + +// Change the status of a dir +export function changeTempDirStatus(dir: string, status: boolean) { + if (! tempDirs[dir]) { + throw Error("not a tracked temp dir: " + dir); + } + + tempDirs[dir] = status; +} if (! process.env.METEOR_SAVE_TMPDIRS) { - cleanup.onExit(function (sig) { - Object.keys(tempDirs).forEach(dir => { + cleanup.onExit(function () { + Object.entries(tempDirs).filter(([_, isTmp]) => !!isTmp).map(([dir]) => dir).forEach(dir => { delete tempDirs[dir]; try { - files.rm_recursive(dir); + rm_recursive(dir); } catch (err) { // Don't crash and print a stack trace because we failed to delete // a temp directory. This happens sometimes on Windows and seems @@ -738,17 +751,25 @@ if (! process.env.METEOR_SAVE_TMPDIRS) { }); } +type TarOptions = { + verbose?: boolean; + forceConvert?: boolean; +} + // Takes a buffer containing `.tar.gz` data and extracts the archive // into a destination directory. destPath should not exist yet, and // the archive should contain a single top-level directory, which will // be renamed atomically to destPath. -files.extractTarGz = function (buffer, destPath, options) { - var options = options || {}; - var parentDir = files.pathDirname(destPath); - var tempDir = files.pathJoin(parentDir, '.tmp' + utils.randomToken()); - files.mkdir_p(tempDir); +export function extractTarGz( + buffer: Buffer, + destPath: string, + options: TarOptions = {}, +) { + const parentDir = pathDirname(destPath); + const tempDir = pathJoin(parentDir, '.tmp' + utils.randomToken()); + mkdir_p(tempDir); - if (! _.has(options, "verbose")) { + if (! hasOwnProperty.call(options, "verbose")) { options.verbose = require("../console/console.js").Console.verbose; } @@ -759,13 +780,13 @@ files.extractTarGz = function (buffer, destPath, options) { : tryExtractWithNativeTar(buffer, tempDir, options) promise = promise.catch( - error => tryExtractWithNpmTar(buffer, tempDir, options) + () => tryExtractWithNpmTar(buffer, tempDir, options) ); promise.await(); // succeed! - var topLevelOfArchive = files.readdir(tempDir) + const topLevelOfArchive = readdir(tempDir) // On Windows, the 7z.exe tool sometimes creates an auxiliary // PaxHeader directory. .filter(file => ! file.startsWith("PaxHeader")); @@ -775,22 +796,26 @@ files.extractTarGz = function (buffer, destPath, options) { "Extracted archive '" + tempDir + "' should only contain one entry"); } - var extractDir = files.pathJoin(tempDir, topLevelOfArchive[0]); - files.rename(extractDir, destPath); - files.rm_recursive(tempDir); + const extractDir = pathJoin(tempDir, topLevelOfArchive[0]); + rename(extractDir, destPath); + rm_recursive(tempDir); if (options.verbose) { - console.log("Finished extracting in", new Date - startTime, "ms"); + console.log("Finished extracting in", Date.now() - startTime, "ms"); } -}; +} -function ensureDirectoryEmpty(dir) { - files.readdir(dir).forEach(file => { - files.rm_recursive(files.pathJoin(dir, file)); +function ensureDirectoryEmpty(dir: string) { + readdir(dir).forEach(file => { + rm_recursive(pathJoin(dir, file)); }); } -function tryExtractWithNativeTar(buffer, tempDir, options) { +function tryExtractWithNativeTar( + buffer: Buffer, + tempDir: string, + options: TarOptions = {}, +) { ensureDirectoryEmpty(tempDir); if (options.forceConvert) { @@ -801,7 +826,7 @@ function tryExtractWithNativeTar(buffer, tempDir, options) { return new Promise((resolve, reject) => { const flags = options.verbose ? "-xzvf" : "-xzf"; const tarProc = spawn("tar", [flags, "-"], { - cwd: files.convertToOSPath(tempDir), + cwd: convertToOSPath(tempDir), stdio: options.verbose ? [ "pipe", // Always need to write to tarProc.stdin. process.stdout, @@ -812,12 +837,18 @@ function tryExtractWithNativeTar(buffer, tempDir, options) { tarProc.on("error", reject); tarProc.on("exit", resolve); - tarProc.stdin.write(buffer); - tarProc.stdin.end(); + if (tarProc.stdin) { + tarProc.stdin.write(buffer); + tarProc.stdin.end(); + } }); } -function tryExtractWithNative7z(buffer, tempDir, options) { +function tryExtractWithNative7z( + buffer: Buffer, + tempDir: string, + options: TarOptions = {}, +) { ensureDirectoryEmpty(tempDir); if (options.forceConvert) { @@ -825,15 +856,14 @@ function tryExtractWithNative7z(buffer, tempDir, options) { "Native 7z.exe cannot convert colons in package names")); } - const exeOSPath = files.convertToOSPath( - files.pathJoin(files.getCurrentNodeBinDir(), "7z.exe")); + const exeOSPath = convertToOSPath(pathJoin(getCurrentNodeBinDir(), "7z.exe")); const tarGzBasename = "out.tar.gz"; const spawnOptions = { - cwd: files.convertToOSPath(tempDir), - stdio: options.verbose ? "inherit" : "pipe", + cwd: convertToOSPath(tempDir), + stdio: (options.verbose ? "inherit" : "pipe") as ("inherit" | "pipe"), }; - files.writeFile(files.pathJoin(tempDir, tarGzBasename), buffer); + writeFile(pathJoin(tempDir, tarGzBasename), buffer); return new Promise((resolve, reject) => { spawn(exeOSPath, [ @@ -845,8 +875,8 @@ function tryExtractWithNative7z(buffer, tempDir, options) { }).then(code => { assert.strictEqual(code, 0); - let tarBasename; - const foundTar = files.readdir(tempDir).some(file => { + let tarBasename: string; + const foundTar = readdir(tempDir).some(file => { if (file !== tarGzBasename) { tarBasename = file; return true; @@ -856,8 +886,8 @@ function tryExtractWithNative7z(buffer, tempDir, options) { assert.ok(foundTar, "failed to find .tar file"); function cleanUp() { - files.unlink(files.pathJoin(tempDir, tarGzBasename)); - files.unlink(files.pathJoin(tempDir, tarBasename)); + unlink(pathJoin(tempDir, tarGzBasename)); + unlink(pathJoin(tempDir, tarBasename)); } return new Promise((resolve, reject) => { @@ -877,17 +907,21 @@ function tryExtractWithNative7z(buffer, tempDir, options) { }); } -function tryExtractWithNpmTar(buffer, tempDir, options) { +function tryExtractWithNpmTar( + buffer: Buffer, + tempDir: string, + options: TarOptions = {}, +) { ensureDirectoryEmpty(tempDir); - var tar = require("tar"); - var zlib = require("zlib"); + const tar = require("tar"); + const zlib = require("zlib"); return new Promise((resolve, reject) => { - var gunzip = zlib.createGunzip().on('error', reject); - var extractor = new tar.Extract({ - path: files.convertToOSPath(tempDir) - }).on('entry', function (e) { + const gunzip = zlib.createGunzip().on('error', reject); + const extractor = new tar.Extract({ + path: convertToOSPath(tempDir) + }).on('entry', function (e: any) { if (process.platform === "win32" || options.forceConvert) { // On Windows, try to convert old packages that have colons in // paths by blindly replacing all of the paths. Otherwise, we @@ -909,23 +943,23 @@ function tryExtractWithNpmTar(buffer, tempDir, options) { // bit but only if the read bit was present. Same as: // https://github.com/mapbox/node-pre-gyp/blob/7a28f4b0f562ba4712722fefe4eeffb7b20fbf7a/lib/install.js#L71-L77 // and others reported in: https://github.com/npm/node-tar/issues/7 -function addExecBitWhenReadBitPresent(fileMode) { +function addExecBitWhenReadBitPresent(fileMode: number) { return fileMode |= (fileMode >>> 2) & 0o111; } // Tar-gzips a directory, returning a stream that can then be piped as // needed. The tar archive will contain a top-level directory named // after dirPath. -files.createTarGzStream = function (dirPath, options) { - var tar = require("tar"); - var fstream = require('fstream'); - var zlib = require("zlib"); +export function createTarGzStream(dirPath: string) { + const tar = require("tar"); + const fstream = require('fstream'); + const zlib = require("zlib"); // Create a segment of the file path which we will look for to // identify exactly what we think is a "bin" file (that is, something // which should be expected to work within the context of an // 'npm run-script'). - var binPathMatch = ["", "node_modules", ".bin", ""].join(path.sep); + const binPathMatch = ["", "node_modules", ".bin", ""].join(path.sep); // Don't use `{ path: dirPath, type: 'Directory' }` as an argument to // fstream.Reader. This triggers a collection of odd behaviors in fstream @@ -950,9 +984,9 @@ files.createTarGzStream = function (dirPath, options) { // with the same permissions as the first file inside it. This manifests as // an EACCESS when untarring if the first file inside the top-level directory // is not writeable. - var fileStream = fstream.Reader({ - path: files.convertToOSPath(dirPath), - filter: function (entry) { + const fileStream = fstream.Reader({ + path: convertToOSPath(dirPath), + filter(entry: any) { if (process.platform !== "win32") { return true; } @@ -978,21 +1012,22 @@ files.createTarGzStream = function (dirPath, options) { return true; } }); - var tarStream = fileStream.pipe(tar.Pack({ noProprietary: true })); - return tarStream.pipe(zlib.createGzip()); -}; + return fileStream.pipe(tar.Pack({ + noProprietary: true, + })).pipe(zlib.createGzip()); +} // Tar-gzips a directory into a tarball on disk, synchronously. // The tar archive will contain a top-level directory named after dirPath. -files.createTarball = Profile(function (dirPath, tarball) { - return "files.createTarball " + files.pathBasename(tarball); -}, function (dirPath, tarball, options) { - var out = files.createWriteStream(tarball); +export const createTarball = Profile(function (_: string, tarball: string) { + return "files.createTarball " + pathBasename(tarball); +}, function (dirPath: string, tarball: string) { + const out = createWriteStream(tarball); new Promise(function (resolve, reject) { out.on('error', reject); out.on('close', resolve); - files.createTarGzStream(dirPath, options).pipe(out); + createTarGzStream(dirPath).pipe(out); }).await(); }); @@ -1003,88 +1038,91 @@ files.createTarball = Profile(function (dirPath, tarball) { // toDir does not exist" and "you can end up with garbage directories // sitting around", but not "there's any time where toDir exists but // is in a state other than initial or final".) -files.renameDirAlmostAtomically = - Profile("files.renameDirAlmostAtomically", (fromDir, toDir) => { - const garbageDir = `${toDir}-garbage-${utils.randomToken()}`; +export const renameDirAlmostAtomically = +Profile("files.renameDirAlmostAtomically", (fromDir: string, toDir: string) => { + const garbageDir = pathJoin( + pathDirname(toDir), + // Begin the base filename with a '.' character so that it can be + // ignored by other directory-scanning code. + `.${pathBasename(toDir)}-garbage-${utils.randomToken()}`, + ); - // Get old dir out of the way, if it exists. - let cleanupGarbage = false; - let forceCopy = false; + // Get old dir out of the way, if it exists. + let cleanupGarbage = false; + let forceCopy = false; + try { + rename(toDir, garbageDir); + cleanupGarbage = true; + } catch (e) { + if (e.code === 'EXDEV') { + // Some (notably Docker) file systems will fail to do a seemingly + // harmless operation, such as renaming, on what is apparently the same + // file system. AUFS will do this even if the `fromDir` and `toDir` + // are on the same layer, and OverlayFS will fail if the `fromDir` and + // `toDir` are on different layers. In these cases, we will not be + // atomic and will need to do a recursive copy. + forceCopy = true; + } else if (e.code !== 'ENOENT') { + // No such file or directory is okay, but anything else is not. + throw e; + } + } + + if (! forceCopy) { try { - files.rename(toDir, garbageDir); - cleanupGarbage = true; + rename(fromDir, toDir); } catch (e) { + // It's possible that there may not have been a `toDir` to have + // advanced warning about this, so we're prepared to handle it again. if (e.code === 'EXDEV') { - // Some (notably Docker) file systems will fail to do a seemingly - // harmless operation, such as renaming, on what is apparently the same - // file system. AUFS will do this even if the `fromDir` and `toDir` - // are on the same layer, and OverlayFS will fail if the `fromDir` and - // `toDir` are on different layers. In these cases, we will not be - // atomic and will need to do a recursive copy. forceCopy = true; - } else if (e.code !== 'ENOENT') { - // No such file or directory is okay, but anything else is not. + } else { throw e; } } + } - if (! forceCopy) { - try { - files.rename(fromDir, toDir); - } catch (e) { - // It's possible that there may not have been a `toDir` to have - // advanced warning about this, so we're prepared to handle it again. - if (e.code === 'EXDEV') { - forceCopy = true; - } else { - throw e; - } - } - } + // If we've been forced to jeopardize our atomicity due to file-system + // limitations, we'll resort to copying. + if (forceCopy) { + rm_recursive(toDir); + cp_r(fromDir, toDir, { + preserveSymlinks: true, + }); + } - // If we've been forced to jeopardize our atomicity due to file-system - // limitations, we'll resort to copying. - if (forceCopy) { - files.rm_recursive(toDir); - files.cp_r(fromDir, toDir, { - preserveSymlinks: true, - }); - } + // ... and take out the trash. + if (cleanupGarbage) { + // We don't care about how long this takes, so we'll let it go async. + rm_recursive_async(garbageDir); + } +}); - // ... and take out the trash. - if (cleanupGarbage) { - // We don't care about how long this takes, so we'll let it go async. - files.rm_recursive(garbageDir); - } - }); +export const writeFileAtomically = +Profile("files.writeFileAtomically", function (filename: string, contents: string | Buffer) { + const parentDir = pathDirname(filename); + mkdir_p(parentDir); -files.writeFileAtomically = - Profile("files.writeFileAtomically", function (filename, contents) { - const parentDir = files.pathDirname(filename); - files.mkdir_p(parentDir); + const tmpFile = pathJoin( + parentDir, + '.' + pathBasename(filename) + '.' + utils.randomToken() + ); - const tmpFile = files.pathJoin( - parentDir, - '.' + files.pathBasename(filename) + '.' + utils.randomToken() - ); - - files.writeFile(tmpFile, contents); - files.rename(tmpFile, filename); - }); + writeFile(tmpFile, contents); + rename(tmpFile, filename); +}); // Like fs.symlinkSync, but creates a temporay link and renames it over the // file; this means it works even if the file already exists. // Do not use this function on Windows, it won't work. -files.symlinkOverSync = function (linkText, file) { - fiberHelpers.noYieldsAllowed(function () { - file = files.pathResolve(file); - var tmpSymlink = files.pathJoin( - files.pathDirname(file), - "." + files.pathBasename(file) + ".tmp" + utils.randomToken()); - files.symlink(linkText, tmpSymlink); - files.rename(tmpSymlink, file); - }); -}; +export function symlinkOverSync(linkText: string, file: string) { + file = pathResolve(file); + const tmpSymlink = pathJoin( + pathDirname(file), + "." + pathBasename(file) + ".tmp" + utils.randomToken()); + symlink(linkText, tmpSymlink); + rename(tmpSymlink, file); +} // Return the result of evaluating `code` using // `runInThisContext`. `code` will be wrapped in a closure. You can @@ -1104,57 +1142,61 @@ files.symlinkOverSync = function (linkText, file) { // different parser with a better error handling API. Ah well. The // underlying V8 issue is: // https://code.google.com/p/v8/issues/detail?id=1281 -files.runJavaScript = function (code, options) { - if (typeof code !== 'string') { - throw new Error("code must be a string"); - } - - options = options || {}; - var filename = options.filename || ""; - +export function runJavaScript(code: string, { + symbols = Object.create(null), + filename = "", + sourceMap, + sourceMapRoot, +}: { + symbols: Record; + filename: string; + sourceMap?: object; + sourceMapRoot?: string; +}) { return Profile.time('runJavaScript ' + filename, () => { - - var keys = [], values = []; + const keys: string[] = [], values: any[] = []; // don't assume that _.keys and _.values are guaranteed to // enumerate in the same order - _.each(options.symbols, function (value, name) { + _.each(symbols, function (value: any, name: string) { keys.push(name); values.push(value); }); - var stackFilename = filename; - if (options.sourceMap) { + let stackFilename = filename; + if (sourceMap) { // We want to generate an arbitrary filename that we use to associate the // file with its source map. stackFilename = ""; } - var chunks = []; - var header = "(function(" + keys.join(',') + "){"; + const chunks = []; + const header = "(function(" + keys.join(',') + "){"; chunks.push(header); - if (options.sourceMap) { - var consumer = new sourcemap.SourceMapConsumer(options.sourceMap); + if (sourceMap) { + const sourcemapConsumer = Promise.await(new sourcemap.SourceMapConsumer(sourceMap)); chunks.push(sourcemap.SourceNode.fromStringWithSourceMap( - code, consumer)); + code, sourcemapConsumer)); + sourcemapConsumer.destroy(); } else { chunks.push(code); } // \n is necessary in case final line is a //-comment chunks.push("\n})"); - var wrapped; - var parsedSourceMap = null; - if (options.sourceMap) { - var node = new sourcemap.SourceNode(null, null, null, chunks); - var results = node.toStringWithSourceMap({ + let wrapped; + let parsedSourceMap = null; + if (sourceMap) { + const results = new sourcemap.SourceNode( + null, null, null, chunks + ).toStringWithSourceMap({ file: stackFilename }); wrapped = results.code; parsedSourceMap = results.map.toJSON(); - if (options.sourceMapRoot) { + if (sourceMapRoot) { // Add the specified root to any root that may be in the file. - parsedSourceMap.sourceRoot = files.pathJoin( - options.sourceMapRoot, parsedSourceMap.sourceRoot || ''); + parsedSourceMap.sourceRoot = pathJoin( + sourceMapRoot, parsedSourceMap.sourceRoot || ''); } // source-map-support doesn't ever look at the sourcesContent field, so // there's no point in keeping it in memory. @@ -1190,7 +1232,7 @@ files.runJavaScript = function (code, options) { // node to run the code and parse its output. We instead run an // entirely different JS parser, from the Babel project, but // which at least has a nice API for reporting errors. - var parse = require('meteor-babel').parse; + const { parse } = require('meteor-babel'); try { parse(wrapped, { strictMode: false }); } catch (parseError) { @@ -1198,13 +1240,14 @@ files.runJavaScript = function (code, options) { throw parseError; } - var err = new files.FancySyntaxError; + const err = new FancySyntaxError; err.message = parseError.message; if (parsedSourceMap) { // XXX this duplicates code in computeGlobalReferences - var consumer2 = new sourcemap.SourceMapConsumer(parsedSourceMap); + var consumer2 = Promise.await(new sourcemap.SourceMapConsumer(parsedSourceMap)); var original = consumer2.originalPositionFor(parseError.loc); + consumer2.destroy(); if (original.source) { err.file = original.source; err.line = original.line; @@ -1218,7 +1261,7 @@ files.runJavaScript = function (code, options) { err.column = parseError.loc.column; // adjust errors on line 1 to account for our header - if (err.line === 1) { + if (err.line === 1 && typeof err.column === "number") { err.column -= header.length; } @@ -1231,46 +1274,51 @@ files.runJavaScript = function (code, options) { throw nodeParseError; } - var func = script.runInThisContext(); - - return (buildmessage.markBoundary(func)).apply(null, values); + return buildmessage.markBoundary( + script.runInThisContext() + ).apply(null, values); }); -}; +} // - message: an error message from the parser // - file: filename // - line: 1-based // - column: 1-based -files.FancySyntaxError = function () {}; +export class FancySyntaxError { + public file?: string; + public line?: number; + public column?: number; + constructor(public message?: string) {} +} -files.OfflineError = function (error) { - this.error = error; -}; -files.OfflineError.prototype.toString = function () { - return "[Offline: " + this.error.toString() + "]"; -}; +export class OfflineError { + constructor(public error: Error) {} + toString() { + return "[Offline: " + this.error.toString() + "]"; + } +} // Like files.readdir, but skips entries whose names begin with dots, and // converts ENOENT to []. -files.readdirNoDots = function (path) { +export function readdirNoDots(path: string) { try { - var entries = files.readdir(path); + var entries = readdir(path); } catch (e) { if (e.code === 'ENOENT') { return []; } throw e; } - return _.filter(entries, function (entry) { + return entries.filter(entry => { return entry && entry[0] !== '.'; }); -}; +} // Read a file in line by line. Returns an array of lines to be // processed individually. Throws if the file doesn't exist or if // anything else goes wrong. -var getLines = function (file) { - var buffer = files.readFile(file); +export function getLines(file: string) { + var buffer = readFile(file); var lines = exports.splitBufferToLines(buffer); // strip blank lines at the end @@ -1283,16 +1331,14 @@ var getLines = function (file) { } return lines; -}; +} -exports.getLines = getLines; - -exports.splitBufferToLines = function (buffer) { +export function splitBufferToLines(buffer: Buffer) { return buffer.toString('utf8').split(/\r*\n\r*/); -}; +} // Same as `getLines`, but returns [] if the file doesn't exist. -exports.getLinesOrEmpty = function (file) { +export function getLinesOrEmpty(file: string) { try { return getLines(file); } catch (e) { @@ -1301,13 +1347,13 @@ exports.getLinesOrEmpty = function (file) { } throw e; } -}; +} // Returns null if the file does not exist, otherwise returns the parsed JSON in // the file. Throws on errors other than ENOENT (including JSON parse failure). -exports.readJSONOrNull = function (file) { +export function readJSONOrNull(file: string) { try { - var raw = files.readFile(file, 'utf8'); + var raw = readFile(file, 'utf8'); } catch (e) { if (e && e.code === 'ENOENT') { return null; @@ -1315,38 +1361,32 @@ exports.readJSONOrNull = function (file) { throw e; } return JSON.parse(raw); -}; +} // Trims whitespace & other filler characters of a line in a project file. -files.trimSpaceAndComments = function (line) { +export function trimSpaceAndComments(line: string) { var match = line.match(/^([^#]*)#/); if (match) { line = match[1]; } - return files.trimSpace(line); -}; - -// Trims leading and trailing whilespace in a project file. -files.trimSpace = function (line) { - return line.replace(/^\s+|\s+$/g, ''); -}; - - -files.KeyValueFile = function (path) { - var self = this; - self.path = path; + return trimSpace(line); } -_.extend(files.KeyValueFile.prototype, { - set: function (k, v) { - var self = this; +// Trims leading and trailing whilespace in a project file. +export function trimSpace(line: string) { + return line.replace(/^\s+|\s+$/g, ''); +} - var data = self._readAll() || ''; - var lines = data.split(/\n/); +export class KeyValueFile { + constructor(public path: string) {} - var found = false; - for (var i = 0; i < lines.length; i++) { - var trimmed = lines[i].trim(); + set(k: string, v: any) { + const data = (this.readAll() || '').toString("utf8"); + const lines = data.split(/\n/); + + let found = false; + for (let i = 0; i < lines.length; i++) { + const trimmed = lines[i].trim(); if (trimmed.indexOf(k + '=') == 0) { lines[i] = k + '=' + v; found = true; @@ -1355,31 +1395,30 @@ _.extend(files.KeyValueFile.prototype, { if (!found) { lines.push(k + "=" + v); } - var newdata = lines.join('\n') + '\n'; - files.writeFile(self.path, newdata, 'utf8'); - }, + const newdata = lines.join('\n') + '\n'; + writeFile(this.path, newdata, 'utf8'); + } - _readAll: function () { - var self = this; - - if (files.exists(self.path)) { - return files.readFile(self.path, 'utf8'); + private readAll() { + if (exists(this.path)) { + return readFile(this.path, 'utf8'); } else { return null; } } -}); +} -files.getHomeDir = function () { +export function getHomeDir() { if (process.platform === "win32") { - return files.pathDirname( - files.convertToStandardPath(process.env.METEOR_INSTALLATION)); - } else { - return process.env.HOME; + const MI = process.env.METEOR_INSTALLATION; + if (typeof MI === "string") { + return pathDirname(convertToStandardPath(MI)); + } } -}; + return process.env.HOME; +} -files.currentEnvWithPathsAdded = function (...paths) { +export function currentEnvWithPathsAdded(...paths: string[]) { const env = {...process.env}; let pathPropertyName; @@ -1390,7 +1429,7 @@ files.currentEnvWithPathsAdded = function (...paths) { // of setting Path for instance. // We want to make sure we're setting the right property, so we // lookup the property name case insensitively ourselves. - pathPropertyName = _.find(Object.keys(env), (key) => { + pathPropertyName = _.find(Object.keys(env), (key: string) => { return key.toUpperCase() === 'PATH'; }); if (!pathPropertyName) { @@ -1400,30 +1439,27 @@ files.currentEnvWithPathsAdded = function (...paths) { pathPropertyName = 'PATH'; } - const convertedPaths = paths.map(path => files.convertToOSPath(path)); - let pathDecomposed = (env[pathPropertyName] || "").split(files.pathOsDelimiter); + const convertedPaths = paths.map(path => convertToOSPath(path)); + let pathDecomposed = (env[pathPropertyName] || "").split(pathOsDelimiter); pathDecomposed.unshift(...convertedPaths); - env[pathPropertyName] = pathDecomposed.join(files.pathOsDelimiter); + env[pathPropertyName] = pathDecomposed.join(pathOsDelimiter); return env; } // add .bat extension to link file if not present -var ensureBatExtension = function (p) { - if (p.indexOf(".bat") !== p.length - 4) { - p = p + ".bat"; - } - return p; -}; +function ensureBatExtension(p: string) { + return p.endsWith(".bat") ? p : p + ".bat"; +} // Windows-only, generates a bat script that calls the destination bat script -files._generateScriptLinkToMeteorScript = function (scriptLocation) { - var scriptLocationIsAbsolutePath = scriptLocation.match(/^\//); - var scriptLocationConverted = scriptLocationIsAbsolutePath - ? files.convertToWindowsPath(scriptLocation) - : "%~dp0\\" + files.convertToWindowsPath(scriptLocation); +export function _generateScriptLinkToMeteorScript(scriptLocation: string) { + const scriptLocationIsAbsolutePath = scriptLocation.match(/^\//); + const scriptLocationConverted = scriptLocationIsAbsolutePath + ? convertToWindowsPath(scriptLocation) + : "%~dp0\\" + convertToWindowsPath(scriptLocation); - var newScript = [ + return [ "@echo off", "SETLOCAL", "SET METEOR_INSTALLATION=%~dp0%", @@ -1440,16 +1476,13 @@ files._generateScriptLinkToMeteorScript = function (scriptLocation) { // by files.readLinkToMeteorScript "rem " + scriptLocationConverted, ].join(os.EOL); +} - return newScript; -}; +export function _getLocationFromScriptLinkToMeteorScript(script: string | Buffer) { + const lines = _.compact(script.toString().split('\n')); -files._getLocationFromScriptLinkToMeteorScript = function (script) { - var lines = _.compact(script.toString().split('\n')); - - var scriptLocation = _.last(lines) - .replace(/^rem /g, ''); - var isAbsolute = true; + let scriptLocation = _.last(lines).replace(/^rem /g, ''); + let isAbsolute = true; if (scriptLocation.match(/^%~dp0/)) { isAbsolute = false; @@ -1460,36 +1493,70 @@ files._getLocationFromScriptLinkToMeteorScript = function (script) { throw new Error('Failed to parse script location from meteor.bat'); } - return files.convertToPosixPath(scriptLocation, ! isAbsolute); -}; + return convertToPosixPath(scriptLocation, ! isAbsolute); +} -files.linkToMeteorScript = function (scriptLocation, linkLocation, platform) { +export function linkToMeteorScript( + scriptLocation: string, + linkLocation: string, + platform: string, +) { platform = platform || process.platform; if (platform === 'win32') { // Make a meteor batch script that points to current tool - linkLocation = ensureBatExtension(linkLocation); scriptLocation = ensureBatExtension(scriptLocation); - var script = files._generateScriptLinkToMeteorScript(scriptLocation); - - files.writeFile(linkLocation, script, {encoding: "ascii"}); + const script = _generateScriptLinkToMeteorScript(scriptLocation); + writeFile(linkLocation, script, { encoding: "ascii" }); } else { // Symlink meteor tool - files.symlinkOverSync(scriptLocation, linkLocation); + symlinkOverSync(scriptLocation, linkLocation); } -}; +} -files.readLinkToMeteorScript = function (linkLocation, platform) { - platform = platform || process.platform; +export function readLinkToMeteorScript( + linkLocation: string, + platform = process.platform, +) { if (platform === 'win32') { linkLocation = ensureBatExtension(linkLocation); - var script = files.readFile(linkLocation); - return files._getLocationFromScriptLinkToMeteorScript(script); + const script = readFile(linkLocation); + return _getLocationFromScriptLinkToMeteorScript(script); } else { - return files.readlink(linkLocation); + return readlink(linkLocation); } -}; +} + +// The fs.exists method is deprecated in Node v4: +// https://nodejs.org/api/fs.html#fs_fs_exists_path_callback +export function exists(path: string) { + return !! statOrNull(path); +} + +export function readBufferWithLengthAndOffset( + filename: string, + length: number, + offset: number, +) { + const data = Buffer.alloc(length); + // Read the data from disk, if it is non-empty. Avoid doing IO for empty + // files, because (a) unnecessary and (b) fs.readSync with length 0 + // throws instead of acting like POSIX read: + // https://github.com/joyent/node/issues/5685 + if (length > 0) { + const fd = open(filename, "r"); + try { + const count = read(fd, data, { position: 0, length, offset }); + if (count !== length) { + throw new Error("couldn't read entire resource"); + } + } finally { + close(fd); + } + } + return data; +} // Summary of cross platform file system handling strategy @@ -1529,344 +1596,226 @@ files.readLinkToMeteorScript = function (linkLocation, platform) { // A helpful file to import for this purpose is colon-converter.js, which also // knows how to convert various configuration file formats. -files.fsFixPath = {}; -/** - * Wrap a function from node's fs module to use the right slashes for this OS - * and run in a fiber, then assign it to the "files" namespace. Each call - * creates a files.func that runs asynchronously with Fibers (yielding and - * until the call is done), unless run outside a Fiber or in noYieldsAllowed, in - * which case it uses fs.funcSync. - * - * Also creates a simpler version on files.fsFixPath.* that just fixes the path - * and fiberizes the Sync version if possible. - * - * @param {String} fsFuncName The name of the node fs function to wrap - * @param {Number[]} pathArgIndices Indices of arguments that have paths, these - * arguments will be converted to the correct OS slashes - * @param {Object} options Some options for lesser-used cases - * @param {Boolean} options.noErr If true, the callback of the wrapped function - * doesn't have a first "error" argument, for example in fs.exists. - * @param {Function} options.modifyReturnValue Pass in a function to modify the - * return value - */ -function wrapFsFunc(fsFuncName, pathArgIndices, options) { - options = options || {}; - - const fsFunc = fs[fsFuncName]; - const fsFuncSync = fs[fsFuncName + "Sync"]; - - function makeWrapper ({alwaysSync, sync}) { - function wrapper(...args) { - for (let j = pathArgIndices.length - 1; j >= 0; --j) { - const i = pathArgIndices[j]; - args[i] = files.convertToOSPath(args[i]); - } - - const shouldBeSync = alwaysSync || sync; - // There's some overhead in awaiting a Promise of an async call, - // vs just doing the sync call, which for a call like "stat" - // takes longer than the call itself. Different parts of the tool - // may perform 1,000s or 10,000s of stats each under certain - // conditions, so we get a nice performance boost from making - // these calls sync. - const isQuickie = (fsFuncName === 'stat' || - fsFuncName === 'rename' || - fsFuncName === 'symlink'); - - const dirty = options && options.dirty; - const dirtyFn = typeof dirty === "function" ? dirty : null; - - if (mayYield() && - shouldBeSync && - ! isQuickie) { - const promise = new Promise((resolve, reject) => { - args.push((err, value) => { - if (options.noErr) { - resolve(err); - } else if (err) { - reject(err); - } else { - resolve(value); - } - }); - - fsFunc.apply(fs, args); - }); - - const result = promise.await(); - - if (dirtyFn) { - dirtyFn(...args); - } - - return options.modifyReturnValue - ? options.modifyReturnValue(result) - : result; - - } else if (shouldBeSync) { - // Should be sync but can't yield: we are not in a Fiber. - // Run the sync version of the fs.* method. - const result = fsFuncSync.apply(fs, args); - - if (dirtyFn) { - dirtyFn(...args); - } - - return options.modifyReturnValue ? - options.modifyReturnValue(result) : result; - - } else if (! sync) { - // wrapping a plain async version - let cb = args[args.length - 1]; - if (typeof cb === "function") { - args.pop(); - } else { - cb = null; - } - - new Promise((resolve, reject) => { - args.push((err, res) => { - err ? reject(err) : resolve(res); - }); - - fsFunc.apply(fs, args); - - }).then(res => { - if (dirtyFn) { - dirtyFn(...args); - } - - if (options.modifyReturnValue) { - res = options.modifyReturnValue(res); - } - - cb && cb(null, res); - - }, cb); - - return; - } - - throw new Error('unexpected'); - } - - wrapper.displayName = fsFuncName; - return wrapper; - } - - files[fsFuncName] = Profile('files.' + fsFuncName, makeWrapper({ alwaysSync: true })); - - files.fsFixPath[fsFuncName] = - Profile('wrapped.fs.' + fsFuncName, makeWrapper({ sync: false })); - files.fsFixPath[fsFuncName + 'Sync'] = - Profile('wrapped.fs.' + fsFuncName + 'Sync', makeWrapper({ sync: true })); +type wrapFsFuncOptions = { + cached?: boolean; + modifyReturnValue?: (result: TResult) => any; + dirty?: (...args: TArgs) => any; } -let dependOnPathSalt = 0; -export const dependOnPath = require("optimism").wrap( - // Always return something different to prevent optimism from - // second-guessing the dirtiness of this function. - path => ++dependOnPathSalt, - // This function is disposable because we don't care about its result, - // only its role in optimistic dependency tracking/dirtying. - { disposable: true } -); +function wrapFsFunc( + fnName: string, + fn: (...args: TArgs) => TResult, + pathArgIndices: number[], + options?: wrapFsFuncOptions, +): typeof fn { + return Profile("files." + fnName, function (...args: TArgs) { + for (let j = pathArgIndices.length - 1; j >= 0; --j) { + const i = pathArgIndices[j]; + args[i] = convertToOSPath(args[i]); + } -function wrapDestructiveFsFunc(name, pathArgIndices) { - pathArgIndices = pathArgIndices || [0]; - wrapFsFunc(name, pathArgIndices, { - dirty(...args) { - // Immediately reset all optimistic functions (defined in - // tools/fs/optimistic.js) that depend on these paths. + let cacheKey: string | null = null; + if (options && options.cached) { + const cache = withCacheSlot.getValue(); + if (cache) { + const strings = [fnName]; + const allStrings = args.every(arg => { + if (typeof arg === "string") { + strings.push(arg); + return true; + } + return false; + }); + if (allStrings) { + cacheKey = JSON.stringify(strings); + if (hasOwnProperty.call(cache, cacheKey)) { + return cache[cacheKey]; + } + } + } + } + + const result = fn.apply(fs, args); + + if (options && options.dirty) { + options.dirty(...args); + } + + const finalResult = options && options.modifyReturnValue + ? options.modifyReturnValue(result) + : result; + + if (cacheKey) { + withCacheSlot.getValue()![cacheKey] = finalResult; + } + + return finalResult; + }); +} + +const withCacheSlot = new Slot>(); +export function withCache(fn: () => R): R { + const cache = withCacheSlot.getValue(); + return cache ? fn() : withCacheSlot.withValue(Object.create(null), fn); +} + +export const dependOnPath = dep(); + +function wrapDestructiveFsFunc( + fnName: string, + fn: (...args: TArgs) => TResult, + pathArgIndices: number[] = [0], + options?: wrapFsFuncOptions, +): typeof fn { + return wrapFsFunc(fnName, fn, pathArgIndices, { + ...options, + dirty(...args: TArgs) { pathArgIndices.forEach(i => dependOnPath.dirty(args[i])); } }); } -wrapDestructiveFsFunc("writeFile"); -wrapDestructiveFsFunc("appendFile"); - -wrapFsFunc("readFile", [0], { - modifyReturnValue: function (fileData) { - if (_.isString(fileData)) { - return files.convertToStandardLineEndings(fileData); +export const readFile = wrapFsFunc("readFile", fs.readFileSync, [0], { + modifyReturnValue: function (fileData: Buffer | string) { + if (typeof fileData === "string") { + return convertToStandardLineEndings(fileData); } - return fileData; } }); -wrapFsFunc("stat", [0]); -wrapFsFunc("lstat", [0]); - -wrapDestructiveFsFunc("rename", [0, 1]); - -// After the outermost files.withCache call returns, the withCacheCache is -// reset to null so that it does not survive server restarts. -let withCacheCache = null; - -files.withCache = Profile("files.withCache", function (fn) { - const oldCache = withCacheCache; - withCacheCache = oldCache || Object.create(null); - try { - return fn(); - } finally { - withCacheCache = oldCache; +// Copies a file, which is expected to exist. Parent directories of "to" do not +// have to exist. Treats symbolic links transparently (copies the contents, not +// the link itself, and it's an error if the link doesn't point to a file). +const wrappedCopyFile = wrapDestructiveFsFunc("copyFile", fs.copyFileSync, [0, 1]); +export function copyFile(from: string, to: string, flags = 0) { + mkdir_p(pathDirname(pathResolve(to)), 0o755); + wrappedCopyFile(from, to, flags); + const stat = statOrNull(from); + if (stat && stat.isFile()) { + // Create the file as readable and writable by everyone, and executable by + // everyone if the original file is executably by owner. (This mode will be + // modified by umask.) We don't copy the mode *directly* because this function + // is used by 'meteor create' which is copying from the read-only tools tree + // into a writable app. + chmod(to, (stat.mode & 0o100) ? 0o777 : 0o666); } -}); - -function enableCache(name) { - const method = files[name]; - - function makeCacheKey(args) { - var parts = [name]; - - for (var i = 0; i < args.length; ++i) { - var arg = args[i]; - - if (typeof arg !== "string") { - // If any of the arguments is not a string, then we won't cache - // the result of the corresponding file.* method invocation. - return null; - } - - parts.push(arg); - } - - return parts.join("\0"); - } - - files[name] = function (...args) { - if (withCacheCache) { - var cacheKey = makeCacheKey(args); - if (cacheKey && cacheKey in withCacheCache) { - return withCacheCache[cacheKey]; - } - } - - const result = method.apply(files, args); - - if (withCacheCache && cacheKey !== null) { - // If cacheKey === null, then we called makeCacheKey above and it - // failed because one of the arguments was not a string, so we - // should not try to call makeCacheKey again. - withCacheCache[cacheKey || makeCacheKey(args)] = result; - } - - return result; - }; } -enableCache("readdir"); -enableCache("realpath"); -enableCache("stat"); -enableCache("lstat"); +const wrappedRename = wrapDestructiveFsFunc("rename", fs.renameSync, [0, 1]); +export const rename = isWindowsLikeFilesystem() ? function (from: string, to: string) { + // Retries are necessary only on Windows, because the rename call can + // fail with EBUSY, which means the file is in use. + const osTo = convertToOSPath(to); + const startTimeMs = Date.now(); + const intervalMs = 50; + const timeLimitMs = 1000; -// The fs.exists method is deprecated in Node v4: -// https://nodejs.org/api/fs.html#fs_fs_exists_path_callback -files.exists = -files.existsSync = function (path, callback) { - if (typeof callback === "function") { - throw new Error("Passing a callback to files.exists is no longer supported"); - } - return !! files.statOrNull(path); -}; - -if (files.isWindowsLikeFilesystem()) { - const rename = files.rename; - - files.rename = function (from, to) { - // Retries are necessary only on Windows, because the rename call can - // fail with EBUSY, which means the file is in use. - let maxTries = 10; - let success = false; - const osTo = files.convertToOSPath(to); - - while (! success && maxTries-- > 0) { + return new Promise((resolve, reject) => { + function attempt() { try { // Despite previous failures, the top-level destination directory // may have been successfully created, so we must remove it to // avoid moving the source file *into* the destination directory. rimraf.sync(osTo); - rename(from, to); - success = true; + wrappedRename(from, to); + resolve(); } catch (err) { if (err.code !== 'EPERM' && err.code !== 'EACCES') { - throw err; + reject(err); + } else if (Date.now() - startTimeMs < timeLimitMs) { + setTimeout(attempt, intervalMs); + } else { + reject(err); } } } - - if (! success) { - files.cp_r(from, to, { preserveSymlinks: true }); - files.rm_recursive(from); + attempt(); + }).catch(error => { + if (error.code === 'EPERM' || + error.code === 'EACCESS') { + cp_r(from, to, { preserveSymlinks: true }); + rm_recursive(from); + } else { + throw error; } - }; -} + }).await(); +} : wrappedRename; // Warning: doesn't convert slashes in the second 'cache' arg -wrapFsFunc("realpath", [0], { - modifyReturnValue: files.convertToStandardPath +export const realpath = +wrapFsFunc<[string], string>("realpath", fs.realpathSync, [0], { + cached: true, + modifyReturnValue: convertToStandardPath, }); -wrapFsFunc("readdir", [0], { - modifyReturnValue: function (entries) { - return _.map(entries, files.convertToStandardPath); - } +export const readdir = +wrapFsFunc<[string], string[]>("readdir", fs.readdirSync, [0], { + cached: true, + modifyReturnValue(entries: string[]) { + return entries.map(entry => convertToStandardPath(entry)); + }, }); -wrapDestructiveFsFunc("rmdir"); -wrapDestructiveFsFunc("mkdir"); -wrapDestructiveFsFunc("unlink"); -wrapDestructiveFsFunc("chmod"); +export const readdirWithTypes = wrapFsFunc<[string], Dirent[]>("readdirWithTypes", (dir) => { + return fs.readdirSync(dir, { + withFileTypes: true + }); + }, [0], { + cached: true +}); -wrapFsFunc("open", [0]); +export const appendFile = wrapDestructiveFsFunc("appendFile", fs.appendFileSync); +export const chmod = wrapDestructiveFsFunc("chmod", fs.chmodSync); +export const close = wrapFsFunc("close", fs.closeSync, []); +export const createReadStream = wrapFsFunc("createReadStream", fs.createReadStream, [0]); +export const createWriteStream = wrapFsFunc("createWriteStream", fs.createWriteStream, [0]); +export const lstat = wrapFsFunc("lstat", fs.lstatSync, [0], { cached: true }); +export const mkdir = wrapDestructiveFsFunc("mkdir", fs.mkdirSync); +export const open = wrapFsFunc("open", fs.openSync, [0]); +export const read = wrapFsFunc("read", fs.readSync, []); +export const readlink = wrapFsFunc<[string], string>("readlink", fs.readlinkSync, [0]); +export const rmdir = wrapDestructiveFsFunc("rmdir", fs.rmdirSync); +export const stat = wrapFsFunc("stat", fs.statSync as (path: PathLike) => Stats, [0], { cached: true }); +export const symlink = wrapFsFunc("symlink", fs.symlinkSync, [0, 1]); +export const unlink = wrapDestructiveFsFunc("unlink", fs.unlinkSync); +export const write = wrapFsFunc("write", fs.writeSync, []); +export const writeFile = wrapDestructiveFsFunc("writeFile", fs.writeFileSync); -// XXX this doesn't give you the second argument to the callback -wrapFsFunc("read", []); -wrapFsFunc("write", []); -wrapFsFunc("close", []); -wrapFsFunc("symlink", [0, 1]); -wrapFsFunc("readlink", [0]); +type StatListener = ( + current: Stats, + previous: Stats, +) => void; -// These don't need to be Fiberized -files.createReadStream = function (...args) { - args[0] = files.convertToOSPath(args[0]); - return fs.createReadStream(...args); +type StatWatcherOptions = { + persistent?: boolean; + interval?: number; }; -files.createWriteStream = function (...args) { - args[0] = files.convertToOSPath(args[0]); - return fs.createWriteStream(...args); -}; +interface StatWatcher extends EventEmitter { + stop: () => void; + start: ( + filename: string, + options: StatWatcherOptions, + listener: StatListener, + ) => void; +} -files.watchFile = function (...args) { - args[0] = files.convertToOSPath(args[0]); - return fs.watchFile(...args); -}; +export const watchFile = wrapFsFunc("watchFile", ( + filename: string, + options: StatWatcherOptions, + listener: StatListener, +) => { + return fs.watchFile( + filename, + options, + listener, + ) as any as StatWatcher; +}, [0]); -files.unwatchFile = function (...args) { - args[0] = files.convertToOSPath(args[0]); - return fs.unwatchFile(...args); -}; - -files.readBufferWithLengthAndOffset = function (filename, length, offset) { - var data = new Buffer(length); - // Read the data from disk, if it is non-empty. Avoid doing IO for empty - // files, because (a) unnecessary and (b) fs.readSync with length 0 - // throws instead of acting like POSIX read: - // https://github.com/joyent/node/issues/5685 - if (length > 0) { - var fd = files.open(filename, "r"); - try { - var count = files.read( - fd, data, 0, length, offset); - } finally { - files.close(fd); - } - if (count !== length) { - throw new Error("couldn't read entire resource"); - } - } - return data; -}; +export const unwatchFile = wrapFsFunc("unwatchFile", ( + filename: string, + listener: StatListener, +) => { + return fs.unwatchFile(filename, listener); +}, [0]); diff --git a/tools/fs/fsFixPath.ts b/tools/fs/fsFixPath.ts new file mode 100644 index 0000000000..31a689e94a --- /dev/null +++ b/tools/fs/fsFixPath.ts @@ -0,0 +1,27 @@ +export { + // The tools/fs/files module used to export wrappers for both fiberized + // and synchronous fs.* functions. This module exists to preserve backwards + // compatibility with that behavior, even though everything is sync now. + appendFile, appendFile as appendFileSync, + chmod, chmod as chmodSync, + close, close as closeSync, + copyFile, copyFile as copyFileSync, + createReadStream, + createWriteStream, + lstat, lstat as lstatSync, + mkdir, mkdir as mkdirSync, + open, open as openSync, + read, read as readSync, + readFile, readFile as readFileSync, + readdir, readdir as readdirSync, + readlink, readlink as readlinkSync, + realpath, realpath as realpathSync, + rename, rename as renameSync, + rmdir, rmdir as rmdirSync, + stat, stat as statSync, + symlink, symlink as symlinkSync, + unlink, unlink as unlinkSync, + watchFile, unwatchFile, + write, write as writeSync, + writeFile, writeFile as writeFileSync, +} from "./files"; diff --git a/tools/fs/mini-files.js b/tools/fs/mini-files.js deleted file mode 100644 index 4e4c2f46b1..0000000000 --- a/tools/fs/mini-files.js +++ /dev/null @@ -1,2 +0,0 @@ -var miniFiles = require('../static-assets/server/mini-files.js'); -module.exports = miniFiles; diff --git a/tools/fs/optimistic.js b/tools/fs/optimistic.js deleted file mode 100644 index 4bddc674be..0000000000 --- a/tools/fs/optimistic.js +++ /dev/null @@ -1,299 +0,0 @@ -import assert from "assert"; -import { wrap } from "optimism"; -import { Profile } from "../tool-env/profile.js"; -import { watch } from "./safe-watcher.js"; -import { sha1 } from "./watch.js"; -import { - pathSep, - pathDirname, - pathIsAbsolute, - pathJoin, - statOrNull, - lstat, - readFile, - readdir, - dependOnPath, -} from "./files.js"; - -// When in doubt, the optimistic caching system can be completely disabled -// by setting this environment variable. -const ENABLED = ! process.env.METEOR_DISABLE_OPTIMISTIC_CACHING; - -function makeOptimistic(name, fn) { - const wrapper = wrap(ENABLED ? function (...args) { - maybeDependOnPath(args[0]); - return fn.apply(this, args); - } : fn, { - makeCacheKey(...args) { - if (! ENABLED) { - // Cache nothing when the optimistic caching system is disabled. - return; - } - - const path = args[0]; - if (! pathIsAbsolute(path)) { - return; - } - - var parts = []; - - for (var i = 0; i < args.length; ++i) { - var arg = args[i]; - - if (typeof arg !== "string") { - // If any of the arguments is not a string, then we won't cache the - // result of the corresponding file.* method invocation. - return; - } - - parts.push(arg); - } - - return parts.join("\0"); - }, - - subscribe(...args) { - const path = args[0]; - - if (! shouldWatch(path)) { - return; - } - - assert.ok(pathIsAbsolute(path)); - - let watcher = watch(path, () => { - wrapper.dirty(...args); - }); - - return () => { - if (watcher) { - watcher.close(); - watcher = null; - } - }; - } - }); - - return Profile("optimistic " + name, wrapper); -} - -export const shouldWatch = wrap(path => { - const parts = path.split(pathSep); - const nmi = parts.indexOf("node_modules"); - - if (nmi < 0) { - // Watch everything not in a node_modules directory. - return true; - } - - if (nmi < parts.length - 1) { - const nmi2 = parts.indexOf("node_modules", nmi + 1); - if (nmi2 > nmi) { - // If this path is nested inside more than one node_modules - // directory, then it isn't part of a linked npm package, so we - // should not watch it. - return false; - } - - const packageDirParts = parts.slice(0, nmi + 2); - - if (parts[nmi + 1].startsWith("@")) { - // For linked @scoped npm packages, the symlink is nested inside the - // @scoped directory (which is a child of node_modules). - packageDirParts.push(parts[nmi + 2]); - } - - const packageDir = packageDirParts.join(pathSep); - if (optimisticIsSymbolicLink(packageDir)) { - // If this path is in a linked npm package, then it might be under - // active development, so we should watch it. - return true; - } - } - - // Starting a watcher for every single file contained within a - // node_modules directory would be prohibitively expensive, so - // instead we rely on dependOnNodeModules to tell us when files in - // node_modules directories might have changed. - return false; -}); - -function maybeDependOnPath(path) { - if (typeof path === "string") { - dependOnPath(path); - maybeDependOnNodeModules(path); - } -} - -function maybeDependOnNodeModules(path) { - if (typeof path !== "string") { - return; - } - - const parts = path.split(pathSep); - - while (true) { - const index = parts.lastIndexOf("node_modules"); - if (index < 0) { - return; - } - - parts.length = index + 1; - dependOnNodeModules(parts.join(pathSep)); - assert.strictEqual(parts.pop(), "node_modules"); - } -} - -let dependOnDirectorySalt = 0; - -const dependOnDirectory = wrap(dir => { - // Always return something different to prevent optimism from - // second-guessing the dirtiness of this function. - return ++dependOnDirectorySalt; -}, { - subscribe(dir) { - let watcher = watch( - dir, - () => dependOnDirectory.dirty(dir), - ); - - return function () { - if (watcher) { - watcher.close(); - watcher = null; - } - }; - }, - - // This function is disposable because we don't care about its result, - // only its role in optimistic dependency tracking/dirtying. - disposable: true -}); - -// Called when an optimistic function detects the given file does not -// exist, but needs to return null or false rather than throwing an -// exception. When/if the file is eventually created, we might only get a -// file change notification for the parent directory, so it's important to -// depend on the parent directory using this function, so that we don't -// cache the unsuccessful result forever. -function dependOnParentDirectory(path) { - const parentDir = pathDirname(path); - if (parentDir !== path) { - dependOnDirectory(parentDir); - } -} - -// Called by any optimistic function that receives a */node_modules/* path -// as its first argument, so that we can later bulk-invalidate the results -// of those calls if the contents of the node_modules directory change. -// Note that this strategy will not detect changes within subdirectories -// of this node_modules directory, but that's ok because the use case we -// care about is adding or removing npm packages. -const dependOnNodeModules = wrap(nodeModulesDir => { - assert(pathIsAbsolute(nodeModulesDir)); - assert(nodeModulesDir.endsWith(pathSep + "node_modules")); - return dependOnDirectory(nodeModulesDir); -}, { - // This function is disposable because we don't care about its result, - // only its role in optimistic dependency tracking/dirtying. - disposable: true -}); - -// Invalidate all optimistic results derived from paths involving the -// given node_modules directory. -export function dirtyNodeModulesDirectory(nodeModulesDir) { - dependOnNodeModules.dirty(nodeModulesDir); -} - -export const optimisticStatOrNull = makeOptimistic("statOrNull", path => { - const result = statOrNull(path); - if (result === null) { - dependOnParentDirectory(path); - } - return result; -}); - -export const optimisticLStat = makeOptimistic("lstat", lstat); -export const optimisticLStatOrNull = makeOptimistic("lstatOrNull", path => { - try { - return optimisticLStat(path); - } catch (e) { - if (e.code !== "ENOENT") throw e; - dependOnParentDirectory(path); - return null; - } -}); -export const optimisticReadFile = makeOptimistic("readFile", readFile); -export const optimisticReaddir = makeOptimistic("readdir", readdir); -export const optimisticHashOrNull = makeOptimistic("hashOrNull", (...args) => { - try { - return sha1(optimisticReadFile(...args)); - - } catch (e) { - if (e.code !== "EISDIR" && - e.code !== "ENOENT") { - throw e; - } - } - - dependOnParentDirectory(args[0]); - - return null; -}); - -export const optimisticReadJsonOrNull = -makeOptimistic("readJsonOrNull", (path, options) => { - try { - return JSON.parse(optimisticReadFile(path, options)); - - } catch (e) { - if (e.code === "ENOENT") { - dependOnParentDirectory(path); - return null; - } - - if (e instanceof SyntaxError && - options && options.allowSyntaxError) { - return null; - } - - throw e; - } -}); - -export const optimisticReadMeteorIgnore = wrap(dir => { - const meteorIgnorePath = pathJoin(dir, ".meteorignore"); - const meteorIgnoreStat = optimisticStatOrNull(meteorIgnorePath); - - if (meteorIgnoreStat && - meteorIgnoreStat.isFile()) { - return require("ignore")().add( - optimisticReadFile(meteorIgnorePath, "utf8") - ); - } - - return null; -}); - -const optimisticIsSymbolicLink = wrap(path => { - try { - return lstat(path).isSymbolicLink(); - } catch (e) { - if (e.code !== "ENOENT") throw e; - dependOnParentDirectory(path); - return false; - } -}, { - subscribe(path) { - let watcher = watch(path, () => { - optimisticIsSymbolicLink.dirty(path); - }); - - return function () { - if (watcher) { - watcher.close(); - watcher = null; - } - }; - } -}); diff --git a/tools/fs/optimistic.ts b/tools/fs/optimistic.ts new file mode 100644 index 0000000000..47e64228c7 --- /dev/null +++ b/tools/fs/optimistic.ts @@ -0,0 +1,420 @@ +import assert from "assert"; +import { wrap, OptimisticWrapperFunction, dep } from "optimism"; +import ignore from "ignore"; +import { Profile } from "../tool-env/profile"; +import { watch, SafeWatcher } from "./safe-watcher"; +import { sha1 } from "./watch"; +import { + pathSep, + pathBasename, + pathDirname, + pathIsAbsolute, + pathJoin, + statOrNull, + lstat, + readFile, + readdir, + dependOnPath, + findAppDir, +} from "./files"; + +// When in doubt, the optimistic caching system can be completely disabled +// by setting this environment variable. +const ENABLED = ! process.env.METEOR_DISABLE_OPTIMISTIC_CACHING; + +function makeOptimistic< + TArgs extends any[], + TResult, +>( + name: string, + fn: (...args: TArgs) => TResult, +): OptimisticWrapperFunction { + fn = Profile("optimistic " + name, fn); + + const wrapper = wrap(ENABLED ? function (this: any) { + maybeDependOnPath(arguments[0]); + return fn.apply(this, arguments as any); + } as typeof fn : fn, { + makeCacheKey(...args: TArgs) { + if (! ENABLED) { + // Cache nothing when the optimistic caching system is disabled. + return; + } + + const path = args[0]; + if (! pathIsAbsolute(path)) { + return; + } + + if (! args.every(arg => typeof arg === "string")) { + // If any of the arguments is not a string, then we won't cache the + // result of the corresponding file.* method invocation. + return; + } + + return args.join("\0"); + }, + + subscribe(...args: TArgs) { + const path = args[0]; + + if (! shouldWatch(path)) { + return; + } + + assert.ok(pathIsAbsolute(path)); + + let watcher: SafeWatcher | null = watch(path, () => { + wrapper.dirty(...args); + }); + + return () => { + if (watcher) { + watcher.close(); + watcher = null; + } + }; + } + }); + + return wrapper; +} + +// The Meteor application directory should never change during the lifetime +// of the build process, so it should be safe to cache findAppDir without +// subscribing to file changes. +const optimisticFindAppDir = wrap(findAppDir); + +const shouldWatch = wrap(Profile("shouldWatch", (path: string) => { + const parts = path.split(pathSep); + const nmi = parts.indexOf("node_modules"); + + if (nmi < 0) { + // Watch everything not in a node_modules directory. + return true; + } + + const dotMeteorIndex = parts.lastIndexOf(".meteor", nmi); + if (dotMeteorIndex >= 0) { + // Watch nothing inside of .meteor, at least for the purposes of the + // optimistic caching system. Meteor watches files inside .meteor/local + // via the WatchSet abstraction, unrelatedly. + return false; + } + + if (nmi < parts.length - 1) { + const nmi2 = parts.indexOf("node_modules", nmi + 1); + if (nmi2 > nmi) { + // If this path is nested inside more than one node_modules + // directory, then it isn't part of a linked npm package, so we + // should not watch it. + return false; + } + + const parentDirParts = parts.slice(0, nmi); + const parentDir = parentDirParts.join(pathSep); + const appDir = optimisticFindAppDir(parentDir); + if ( + appDir && + parentDir.startsWith(appDir) && + appDir.split(pathSep).length < parentDirParts.length + ) { + // If the given path is contained by the Meteor application directory, + // but the node_modules directory we're considering is not directly + // contained by the root application directory, watch the file. See + // discussion in issue https://github.com/meteor/meteor/issues/10664 + return true; + } + + const packageDirParts = parts.slice(0, nmi + 2); + + if (parts[nmi + 1].startsWith("@")) { + // For linked @scoped npm packages, the symlink is nested inside the + // @scoped directory (which is a child of node_modules). + packageDirParts.push(parts[nmi + 2]); + } + + const packageDir = packageDirParts.join(pathSep); + if (optimisticIsSymbolicLink(packageDir)) { + // If this path is in a linked npm package, then it might be under + // active development, so we should watch it. + return true; + } + } + + // Starting a watcher for every single file contained within a + // node_modules directory would be prohibitively expensive, so + // instead we rely on dependOnNodeModules to tell us when files in + // node_modules directories might have changed. + return false; +})); + +function maybeDependOnPath(path: string) { + if (typeof path === "string") { + dependOnPath(path); + maybeDependOnNodeModules(path); + } +} + +function maybeDependOnNodeModules(path: string) { + if (typeof path !== "string") { + return; + } + + const parts = path.split(pathSep); + + while (true) { + const index = parts.lastIndexOf("node_modules"); + if (index < 0) { + return; + } + + parts.length = index + 1; + dependOnNodeModules(parts.join(pathSep)); + assert.strictEqual(parts.pop(), "node_modules"); + } +} + +const dependOnDirectory = dep({ + subscribe(dir: string) { + let watcher: SafeWatcher | null = watch( + dir, + () => dependOnDirectory.dirty(dir), + ); + + return function () { + if (watcher) { + watcher.close(); + watcher = null; + } + }; + }, +}); + +// Called when an optimistic function detects the given file does not +// exist, but needs to return null or false rather than throwing an +// exception. When/if the file is eventually created, we might only get a +// file change notification for the parent directory, so it's important to +// depend on the parent directory using this function, so that we don't +// cache the unsuccessful result forever. +function dependOnParentDirectory(path: string) { + const parentDir = pathDirname(path); + if (parentDir !== path) { + dependOnDirectory(parentDir); + } +} + +// Called by any optimistic function that receives a */node_modules/* path +// as its first argument, so that we can later bulk-invalidate the results +// of those calls if the contents of the node_modules directory change. +// Note that this strategy will not detect changes within subdirectories +// of this node_modules directory, but that's ok because the use case we +// care about is adding or removing npm packages. +function dependOnNodeModules(nodeModulesDir: string) { + assert(pathIsAbsolute(nodeModulesDir), nodeModulesDir); + assert(nodeModulesDir.endsWith(pathSep + "node_modules")); + dependOnDirectory(nodeModulesDir); +} + +// Invalidate all optimistic results derived from paths involving the +// given node_modules directory. +export function dirtyNodeModulesDirectory(nodeModulesDir: string) { + dependOnDirectory.dirty(nodeModulesDir); +} + +function makeCheapPathFunction( + pathFunction: (path: string) => TResult, +): typeof pathFunction { + if (! ENABLED) { + return pathFunction; + } + const wrapper = wrap(pathFunction, { + // The maximum LRU cache size is Math.pow(2, 16) by default, but it's + // important to prevent eviction churn for very-frequently-called + // functions like optimisticStatOrNull. While it's tempting to set + // this limit to Infinity, increasing it by 16x comes close enough. + max: Math.pow(2, 20), + subscribe(path) { + let watcher: SafeWatcher | null = watch( + path, + () => wrapper.dirty(path), + ); + return function () { + if (watcher) { + watcher.close(); + watcher = null; + } + }; + } + }); + return wrapper; +} + +export const optimisticStatOrNull = makeCheapPathFunction( + (path: string) => { + const result = statOrNull(path); + if (result === null) { + dependOnParentDirectory(path); + } + return result; + }, +); + +export const optimisticLStat = makeOptimistic("lstat", lstat); +export const optimisticLStatOrNull = makeCheapPathFunction( + (path: string) => { + try { + return optimisticLStat(path); + } catch (e) { + if (e.code !== "ENOENT") throw e; + dependOnParentDirectory(path); + return null; + } + }, +); + +export const optimisticReadFile = makeOptimistic("readFile", readFile); +export const optimisticReaddir = makeOptimistic("readdir", readdir); +export const optimisticHashOrNull = makeOptimistic("hashOrNull", ( + path: string, + options?: Parameters[1], +) => { + try { + return sha1(optimisticReadFile(path, options)) as string; + + } catch (e) { + if (e.code !== "EISDIR" && + e.code !== "ENOENT") { + throw e; + } + } + + dependOnParentDirectory(path); + + return null; +}); + +const riskyJsonWhitespacePattern = + // Turns out a lot of weird characters technically count as /\s/ characters. + // This is all of them except for " ", "\n", and "\r", which are safe: + /[\t\b\f\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/g; + +export const optimisticReadJsonOrNull = +makeOptimistic("readJsonOrNull", ( + path: string, + options?: Parameters[1] & { + allowSyntaxError?: boolean; + }, +): Record | null => { + let contents: string | Buffer; + try { + contents = optimisticReadFile(path, options); + } catch (e) { + if (e.code === "ENOENT") { + dependOnParentDirectory(path); + return null; + } + throw e; + } + + try { + return JSON.parse(contents); + } catch (e) { + if (e instanceof SyntaxError && + options && options.allowSyntaxError) { + return null; + } + + const stringContents: string = contents.toString("utf8"); + // Replace any risky whitespace characters with spaces, to address issue + // https://github.com/meteor/meteor/issues/10688 + const cleanContents = stringContents.replace(riskyJsonWhitespacePattern, " "); + if (cleanContents !== stringContents) { + // Try one last time to parse cleanContents before throwing. + return JSON.parse(cleanContents); + } + + throw e; + } +}); + +export const optimisticReadMeteorIgnore = wrap((dir: string) => { + const meteorIgnorePath = pathJoin(dir, ".meteorignore"); + const meteorIgnoreStat = optimisticStatOrNull(meteorIgnorePath); + + if (meteorIgnoreStat && + meteorIgnoreStat.isFile()) { + return ignore().add( + optimisticReadFile(meteorIgnorePath).toString("utf8") + ); + } + + return null; +}); + +type LookupPkgJsonType = OptimisticWrapperFunction< + [string, string], + ReturnType[] +>; + +// Returns an array of package.json objects encountered in any directory +// between relDir and absRootDir. If a package.json with a "name" property +// is found, it will always be the first object in the array. +export const optimisticLookupPackageJsonArray: LookupPkgJsonType = +wrap((absRootDir: string, relDir: string) => { + const absPkgJsonPath = pathJoin(absRootDir, relDir, "package.json"); + const pkgJson = optimisticReadJsonOrNull(absPkgJsonPath); + + // Named package.json files always terminate the search. This + // restriction was first introduced to fix #10547, before this function + // was updated to return an array instead of a single object, but + // returning here is still an important base case. + if (pkgJson && typeof pkgJson.name === "string") { + return [pkgJson]; + } + + const relParentDir = pathDirname(relDir); + if (relParentDir === relDir) { + return []; + } + + // Stop searching if an ancestor node_modules directory is encountered. + if (pathBasename(relParentDir) === "node_modules") { + return []; + } + + const parentArray = + optimisticLookupPackageJsonArray(absRootDir, relParentDir); + + if (pkgJson) { + // If an intermediate package.json file was found, add its object to + // the array. Since these arrays are cached, we don't want to modify + // them using parentArray.push(pkgJson), hence concat. + return parentArray.concat(pkgJson); + } + + return parentArray; +}); + +const optimisticIsSymbolicLink = wrap((path: string) => { + try { + return lstat(path).isSymbolicLink(); + } catch (e) { + if (e.code !== "ENOENT") throw e; + dependOnParentDirectory(path); + return false; + } +}, { + subscribe(path) { + let watcher: SafeWatcher | null = watch(path, () => { + optimisticIsSymbolicLink.dirty(path); + }); + + return function () { + if (watcher) { + watcher.close(); + watcher = null; + } + }; + } +}); diff --git a/tools/fs/safe-watcher.js b/tools/fs/safe-watcher.ts similarity index 81% rename from tools/fs/safe-watcher.js rename to tools/fs/safe-watcher.ts index dae54bd9c0..c90fa56c18 100644 --- a/tools/fs/safe-watcher.js +++ b/tools/fs/safe-watcher.ts @@ -1,14 +1,14 @@ -import * as watchLibrary from "pathwatcher"; -import { Profile } from "../tool-env/profile.js"; +import { FSWatcher, Stats } from "fs"; +import { Profile } from "../tool-env/profile"; import { statOrNull, - pathDirname, pathResolve, convertToOSPath, - convertToStandardPath, watchFile, unwatchFile, -} from "./files.js"; +} from "./files"; + +const watchLibrary = require("pathwatcher"); // Set METEOR_WATCH_FORCE_POLLING environment variable to a truthy value to // force the use of files.watchFile instead of watchLibrary.watch. @@ -26,28 +26,43 @@ if (process.env.METEOR_WATCH_PRIORITIZE_CHANGED && } var DEFAULT_POLLING_INTERVAL = - ~~process.env.METEOR_WATCH_POLLING_INTERVAL_MS || 5000; + +(process.env.METEOR_WATCH_POLLING_INTERVAL_MS || 5000); var NO_WATCHER_POLLING_INTERVAL = - ~~process.env.METEOR_WATCH_POLLING_INTERVAL_MS || 500; + +(process.env.METEOR_WATCH_POLLING_INTERVAL_MS || 500); // This may seems like a long time to wait before actually closing the // file watchers, but it's to our advantage if they survive restarts. const WATCHER_CLEANUP_DELAY_MS = 30000; -const entries = Object.create(null); - // Pathwatcher complains (using console.error, ugh) if you try to watch -// two files with the same stat.ino number but different paths, so we have +// two files with the same stat.ino number but different paths on linux, so we have // to deduplicate files by ino. +const DEDUPLICATE_BY_INO = process.platform !== "win32"; + const entriesByIno = new Map; + +export type SafeWatcher = { + close: () => void; +} + +type EntryCallback = (event: string) => void; + +interface Entry extends SafeWatcher { + callbacks: Set; + rewatch: () => void; + release: (callback: EntryCallback) => void; +} + +const entries: Record = Object.create(null); + // Set of paths for which a change event has been fired, watched with // watchLibrary.watch if available. This could be an LRU cache, but in // practice it should never grow large enough for that to matter. const changedPaths = new Set; -function hasPriority(absPath) { +function hasPriority(absPath: string) { // If we're not prioritizing changed files, then all files have // priority, which means they should be watched with native file // watchers if the platform supports them. If we are prioritizing @@ -57,7 +72,7 @@ function hasPriority(absPath) { : true; } -function acquireWatcher(absPath, callback) { +function acquireWatcher(absPath: string, callback: EntryCallback) { const entry = entries[absPath] || ( entries[absPath] = startNewWatcher(absPath)); @@ -73,12 +88,20 @@ function acquireWatcher(absPath, callback) { return entry; } -function startNewWatcher(absPath) { - const stat = statOrNull(absPath); - const ino = stat && stat.ino; - if (ino > 0 && entriesByIno.has(ino)) { - const entry = entriesByIno.get(ino); - if (entries[absPath] === entry) { +function startNewWatcher(absPath: string): Entry { + let stat: Stats | null = null; + + if (DEDUPLICATE_BY_INO) { + stat = statOrNull(absPath); + if (stat && stat.ino > 0 && entriesByIno.has(stat.ino)) { + const entry = entriesByIno.get(stat.ino); + if (entries[absPath] === entry) { + return entry; + } + } + } else { + let entry = entries[absPath]; + if (entry) { return entry; } } @@ -87,16 +110,16 @@ function startNewWatcher(absPath) { if (watcher) { watcher.close(); watcher = null; - if (ino > 0) { - entriesByIno.delete(ino); + if (stat && stat.ino > 0) { + entriesByIno.delete(stat.ino); } } } - let lastWatcherEventTime = +new Date; - const callbacks = new Set; - let watcherCleanupTimer = null; - let watcher; + let lastWatcherEventTime = Date.now(); + const callbacks = new Set(); + let watcherCleanupTimer: ReturnType | null = null; + let watcher: FSWatcher | null = null; // Determines the polling interval to be used for the fs.watchFile-based // safety net that works on all platforms and file systems. @@ -125,7 +148,7 @@ function startNewWatcher(absPath) { return NO_WATCHER_POLLING_INTERVAL; } - function fire(event) { + function fire(event: string) { if (event !== "change") { // When we receive a "delete" or "rename" event, the watcher is // probably not going to generate any more notifications for this @@ -144,12 +167,12 @@ function startNewWatcher(absPath) { rewatch(); } - callbacks.forEach(cb => cb.call(this, event)); + callbacks.forEach(cb => cb(event)); } - function watchWrapper(event) { - lastWatcherEventTime = +new Date; - fire.call(this, event); + function watchWrapper(event: string) { + lastWatcherEventTime = Date.now(); + fire(event); // It's tempting to call unwatchFile(absPath, watchFileWrapper) here, // but previous watcher success is no guarantee of future watcher @@ -183,9 +206,7 @@ function startNewWatcher(absPath) { statWatch(absPath, getPollingInterval(), watchFileWrapper); } - function watchFileWrapper(...args) { - const [newStat, oldStat] = args; - + function watchFileWrapper(newStat: Stats, oldStat: Stats) { if (newStat.ino === 0 && oldStat.ino === 0 && +newStat.mtime === +oldStat.mtime) { @@ -196,8 +217,8 @@ function startNewWatcher(absPath) { // If a watcher event fired in the last polling interval, ignore // this event. - if (new Date - lastWatcherEventTime > getPollingInterval()) { - fire.call(this, "change"); + if (Date.now() - lastWatcherEventTime > getPollingInterval()) { + fire("change"); } } @@ -205,7 +226,7 @@ function startNewWatcher(absPath) { callbacks, rewatch, - release(callback) { + release(callback: EntryCallback) { if (! entries[absPath]) { return; } @@ -217,7 +238,10 @@ function startNewWatcher(absPath) { // Once there are no more callbacks in the Set, close both watchers // and nullify the shared data. - clearTimeout(watcherCleanupTimer); + if (watcherCleanupTimer) { + clearTimeout(watcherCleanupTimer); + } + watcherCleanupTimer = setTimeout(() => { if (callbacks.size > 0) { // If another callback was added while the timer was pending, we @@ -243,8 +267,8 @@ function startNewWatcher(absPath) { } }; - if (ino > 0) { - entriesByIno.set(ino, entry); + if (stat && stat.ino > 0) { + entriesByIno.set(stat.ino, entry); } return entry; @@ -261,7 +285,11 @@ export function closeAllWatchers() { const statWatchers = Object.create(null); -function statWatch(absPath, interval, callback) { +function statWatch( + absPath: string, + interval: number, + callback: (current: Stats, previous: Stats) => void, +) { const oldWatcher = statWatchers[absPath]; while (oldWatcher) { @@ -321,7 +349,7 @@ function statWatch(absPath, interval, callback) { return oldWatcher; } -function watchLibraryWatch(absPath, callback) { +function watchLibraryWatch(absPath: string, callback: EntryCallback) { if (WATCHER_ENABLED) { try { return watchLibrary.watch(convertToOSPath(absPath), callback); @@ -339,9 +367,9 @@ let suggestedRaisingWatchLimit = false; // This function is async so that archinfo.host() (which may call // utils.execFileSync) will run in a Fiber. -async function maybeSuggestRaisingWatchLimit(error) { +async function maybeSuggestRaisingWatchLimit(error: Error & { errno: number }) { var constants = require('constants'); - var archinfo = require('../utils/archinfo.js'); + var archinfo = require('../utils/archinfo'); if (! suggestedRaisingWatchLimit && // Note: the not-super-documented require('constants') maps from // strings to SYSTEM errno values. System errno values aren't the same @@ -373,12 +401,12 @@ async function maybeSuggestRaisingWatchLimit(error) { export const watch = Profile( "safeWatcher.watch", - (absPath, callback) => { + (absPath: string, callback: EntryCallback) => { const entry = acquireWatcher(absPath, callback); return { close() { entry.release(callback); } - }; + } as SafeWatcher; } ); diff --git a/tools/fs/watch.js b/tools/fs/watch.js deleted file mode 100644 index 896cff26af..0000000000 --- a/tools/fs/watch.js +++ /dev/null @@ -1,763 +0,0 @@ -import files from './files.js'; -import _ from "underscore"; -import * as safeWatcher from './safe-watcher.js'; -import {createHash} from "crypto"; -import {coalesce} from '../utils/func-utils.js'; -import {Profile} from '../tool-env/profile.js'; - -import { - optimisticStatOrNull, - optimisticReaddir, - optimisticHashOrNull, -} from "./optimistic.js"; - -const WATCH_COALESCE_MS = - process.env.METEOR_FILE_WATCH_COALESCE_MS || 100; - -// Watch for changes to a set of files, and the first time that any of -// the files change, call a user-provided callback. (If you want a -// second callback, you'll need to create a second Watcher.) -// -// You describe the structure you want to watch in a WatchSet; you then create a -// Watcher to watch it. Watcher does not mutate WatchSet, so you can create -// several Watchers from the same WatchSet. WatchSet can be easily converted to -// and from JSON for serialization. -// -// You can set up two kinds of watches, file and directory watches. -// -// In a file watch, you provide an absolute path to a file and a SHA1 (encoded -// as hex) of the contents of that file. If the file ever changes so that its -// contents no longer match that SHA1, the callback triggers. You can also -// provide `null` for the SHA1, which means the file should not exist. -// -// In a directory watch, you provide an absolute path to a directory, -// two lists of regular expressions specifying the entries to -// include and exclude, a list of specific names to include (which ignores -// the exclude regexp list) and an array of which entries to expect. -// -// For directory watches, the regular expressions work as follows. You provide -// two arrays of regular expressions, an include list and an exclude list. An -// entry in the directory matches if it matches at least one regular expression -// in the include list, and doesn't match any regular expressions in the exclude -// list. The string that is matched against the regular expression ends with a -// '/' if the entry is directory. There is NO IMPLICIT RECURSION here: a -// directory watch ONLY watches the immediate children of the directory! If you -// want a recursive watch, you need to do the recursive walk while building the -// WatchSet and add a bunch of separate directory watches. In addition, you -// can provide a list of specific names to expect; these are not filtered -// by the exclude list. (For example, you might want to see all "*.js" files -// but ignore files starting with dots (which are often temporary files), but -// explicitly ask for ".jshintrc".) -// -// There can be multiple directory watches on the same directory. There is no -// relationship between the files found in directory watches and the files -// watched by file watches; they are parallel mechanisms. -// -// Regular expressions are checked only against individual path components (the -// actual name of the file or the subdirectory) plus the trailing '/' for -// directories, not against the entire path. -// -// You can call stop() to stop watching and tear down the -// watcher. Calling stop() guarantees that you will not receive a -// callback (if you have not already). Calling stop() is unnecessary -// if you've received a callback. -// -// To do a "one-shot" (to see if any files have been modified, compared to the -// dependencies, at a particular point in time), use the isUpToDate function. -// -// XXX Symlinks are currently treated transparently: we treat them as the thing -// they point to (ie, as a directory if they point to a directory, as -// nonexistent if they point to something nonexist, etc). Not sure if this is -// correct. - -export class WatchSet { - constructor() { - var self = this; - - // Set this to true if any Watcher built on this WatchSet must immediately - // fire (eg, if this WatchSet was given two different sha1 for the same file). - self.alwaysFire = false; - - // Map from the absolute path to a file, to a sha1 hash, or null if the file - // should not exist. A Watcher created from this set fires when the file - // changes from that sha, or is deleted (if non-null) or created (if null). - // - // Note that Isopack.getSourceFilesUnderSourceRoot() depends on this field - // existing (it's not just an internal implementation detail of watch.js). - self.files = {}; - - // Array of object with keys: - // - 'absPath': absolute path to a directory - // - 'include': array of RegExps - // - 'exclude': array of RegExps - // - 'names': array of strings - // - 'contents': array of strings, or null if the directory should not exist - // - // This represents the assertion that 'absPath' is a directory and that - // 'contents' is its immediate contents, as filtered by the regular - // expressions. Entries in 'contents' are file and subdirectory names; - // directory names end with '/'. 'contents' is sorted. An entry is in - // 'contents' if its value (including the slash, for directories) matches at - // least one regular expression in 'include' and no regular expressions in - // 'exclude'... or if it is in 'names'. - // - // There is no recursion here: files contained in subdirectories never appear. - // - // A directory may have multiple entries (presumably with different - // include/exclude filters). - self.directories = []; - } - - addFile(filePath, hash) { - var self = this; - // No need to update if this is in always-fire mode already. - if (self.alwaysFire) { - return; - } - if (_.has(self.files, filePath)) { - // Redundant? - if (self.files[filePath] === hash) { - return; - } - // Nope, inconsistent. - self.alwaysFire = true; - return; - } - self.files[filePath] = hash; - } - - addDirectory({absPath, include, exclude, names, contents: unsortedContents}) { - var self = this; - if (self.alwaysFire) { - return; - } - if (_.isEmpty(include) && _.isEmpty(names)) { - return; - } - const contents = _.clone(unsortedContents); - if (contents) { - contents.sort(); - } - - self.directories.push({absPath, include, exclude, names, contents}); - } - - // Merges another WatchSet into this one. This one will now fire if either - // WatchSet would have fired. - merge(other) { - var self = this; - if (self.alwaysFire) { - return; - } - if (other.alwaysFire) { - self.alwaysFire = true; - return; - } - _.each(other.files, function (hash, name) { - self.addFile(name, hash); - }); - _.each(other.directories, function (dir) { - // XXX this doesn't deep-clone the directory, but I think these objects - // are never mutated #WatchSetShallowClone - self.directories.push(dir); - }); - } - - clone() { - var self = this; - var ret = new WatchSet(); - - // XXX doesn't bother to deep-clone the directory info - // #WatchSetShallowClone - ret.alwaysFire = self.alwaysFire; - ret.files = _.clone(self.files); - ret.directories = _.clone(self.directories); - return ret; - } - - toJSON() { - var self = this; - if (self.alwaysFire) { - return {alwaysFire: true}; - } - var ret = {files: self.files}; - - var reToJSON = function (r) { - var options = ''; - if (r.ignoreCase) { - options += 'i'; - } - if (r.multiline) { - options += 'm'; - } - if (r.global) { - options += 'g'; - } - if (options) { - return {$regex: r.source, $options: options}; - } - return r.source; - }; - - ret.directories = _.map(self.directories, function (d) { - return { - absPath: d.absPath, - include: _.map(d.include, reToJSON), - exclude: _.map(d.exclude, reToJSON), - names: d.names, - contents: d.contents - }; - }); - - return ret; - } - - static fromJSON(json) { - var set = new WatchSet(); - - if (! json) { - return set; - } - - if (json.alwaysFire) { - set.alwaysFire = true; - return set; - } - - set.files = _.clone(json.files); - - var reFromJSON = function (j) { - if (_.has(j, '$regex')) { - return new RegExp(j.$regex, j.$options); - } - return new RegExp(j); - }; - - set.directories = _.map(json.directories, function (d) { - return { - absPath: d.absPath, - include: _.map(d.include, reFromJSON), - exclude: _.map(d.exclude, reFromJSON), - names: d.names, - contents: d.contents - }; - }); - - return set; - } -} - -export function readFile(absPath) { - try { - return files.readFile(absPath); - } catch (e) { - // Rethrow most errors. - if (! e || (e.code !== 'ENOENT' && e.code !== 'EISDIR')) { - throw e; - } - // File does not exist (or is a directory). - return null; - } -}; - -export const sha1 = Profile("sha1", function (...args) { - var hash = createHash('sha1'); - args.forEach(arg => hash.update(arg)); - return hash.digest('hex'); -}); - -export const sha512 = Profile("sha512", function (...args) { - var hash = createHash('sha512'); - args.forEach(arg => hash.update(arg)); - return hash.digest('base64'); -}); - -export function readDirectory({absPath, include, exclude, names}) { - // Read the directory. - try { - var contents = files.readdir(absPath); - } catch (e) { - // If the path is not a directory, return null; let other errors through. - if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) { - return null; - } - throw e; - } - - // Add slashes to the end of directories. - var contentsWithSlashes = []; - _.each(contents, function (entry) { - // We do stat instead of lstat here, so that we treat symlinks to - // directories just like directories themselves. - const stat = files.statOrNull(files.pathJoin(absPath, entry)); - if (! stat) { - // Disappeared after the readdir (or a dangling symlink)? - // Eh, pretend it was never there in the first place. - return; - } - - if (stat.isDirectory()) { - entry += '/'; - } - - contentsWithSlashes.push(entry); - }); - - // Filter based on regexps. - var filtered = contentsWithSlashes.filter((entry) => { - // Is it one of the names we explicitly requested? - if (names && names.indexOf(entry) !== -1) { - return true; - } - // Is it ruled out by an exclude rule? - if (exclude && exclude.some(re => re.test(entry))) { - return false; - } - // Is it ruled in by an include rule? - if (include && include.some(re => re.test(entry))) { - return true; - } - return false; - }); - - // Sort it! - filtered.sort(); - return filtered; -} - -// All fields are private. -export class Watcher { - constructor(options) { - var self = this; - - // The set to watch. - self.watchSet = options.watchSet; - if (! self.watchSet) { - throw new Error("watchSet option is required"); - } - - // Function to call when a change is detected according to one of - // the above. - self.onChange = options.onChange; - if (! self.onChange) { - throw new Error("onChange option is required"); - } - - self.stopped = false; - self.justCheckOnce = !! options._justCheckOnce; - - self.watches = { - // : { - // // Null until safeWatcher.watch succeeds in watching the file. - // watcher: | null, - // // Undefined until we stat the file for the first time, then null - // // if the file is observed to be missing. - // lastStat: | null | undefined - // } - }; - - // Were we given an inconsistent WatchSet? Fire now and be done with it. - if (self.watchSet.alwaysFire) { - self._fire(); - return; - } - - self._startFileWatches(); - self._checkDirectories(); - } - - _fireIfFileChanged(absPath) { - var self = this; - - if (self.stopped) { - return true; - } - - var oldHash = self.watchSet.files[absPath]; - - if (oldHash === undefined) { - throw new Error("Checking unknown file " + absPath); - } - - var newHash = optimisticHashOrNull(absPath); - - if (newHash === null) { - // File does not exist (or is a directory). - // Is this what we expected? - if (oldHash === null) { - return false; - } - // Nope, not what we expected. - self._fire(); - return true; - } - - // File exists! Is that what we expected? - if (oldHash === null) { - self._fire(); - return true; - } - - // Unchanged? - if (newHash === oldHash) { - return false; - } - - self._fire(); - return true; - } - - _fireIfDirectoryChanged(info) { - var self = this; - - if (self.stopped) { - return true; - } - - var newContents = readDirectory({ - absPath: info.absPath, - include: info.include, - exclude: info.exclude, - names: info.names - }); - - // If the directory has changed (including being deleted or created). - if (! _.isEqual(info.contents, newContents)) { - self._fire(); - return true; - } - - return false; - } - - _startFileWatches() { - var self = this; - - // Set up a watch for each file - _.each(self.watchSet.files, function (hash, absPath) { - if (self.stopped) { - return; - } - - if (! self.justCheckOnce) { - self._watchFileOrDirectory(absPath); - } - - // Check for the case where by the time we created the watch, - // the file had already changed from the sha we were provided. - self._fireIfFileChanged(absPath); - }); - } - - _watchFileOrDirectory(absPath) { - var self = this; - - if (! _.has(self.watches, absPath)) { - self.watches[absPath] = { - watcher: null, - // Initially undefined (instead of null) to indicate we have never - // called files.stat on this file before. - lastStat: undefined - }; - } - - var entry = self.watches[absPath]; - if (entry.watcher) { - // Already watching this path. - return; - } - - if (files.statOrNull(absPath)) { - if (self._mustNotExist(absPath)) { - self._fire(); - return; - } - - var onWatchEvent = self._makeWatchEventCallback(absPath); - entry.watcher = safeWatcher.watch(absPath, onWatchEvent); - - // If we successfully created the watcher, invoke the callback - // immediately, so that we examine this file at least once. - onWatchEvent(); - - } else { - if (self._mustBeAFile(absPath)) { - self._fire(); - return; - } - - var parentDir = files.pathDirname(absPath); - if (parentDir === absPath) { - throw new Error("Unable to watch parent directory of " + absPath); - } - - self._watchFileOrDirectory(parentDir); - } - } - - _makeWatchEventCallback(absPath) { - var self = this; - - // Sometimes we receive a rapid succession of change events, perhaps - // because several files were modified at once (e.g. by git reset - // --hard), or a file was deleted and then recreated by an editor like - // Vim. Because detecting changes can be costly, and because we care - // most about the settled state of the file system, we use the - // funcUtils.coalesce helper to delay calls to the callback by - // METEOR_FILE_WATCH_COALESCE_MS or 100 milliseconds, canceling any - // additional calls if they happen within that window of time, so that - // a rapid succession of calls will tend to trigger only one inspection - // of the file system. - return coalesce(WATCH_COALESCE_MS, function onWatchEvent() { - if (self.stopped) { - return; - } - - // This helper method will call self._fire() if the old and new stat - // objects have different types (missing, file, or directory), so we - // can assume they have the same type for the rest of this method. - var stat = self._updateStatForWatch(absPath); - if (self.stopped) { - return; - } - - if (stat === null || stat.isFile()) { - if (_.has(self.watchSet.files, absPath)) { - self._fireIfFileChanged(absPath); - // XXX #3335 We probably should check again in a second, due to low - // filesystem modtime resolution. - } - - } else if (stat.isDirectory()) { - try { - var dirFiles = files.readdir(absPath); - } catch (err) { - if (err.code === "ENOENT" || - err.code === "ENOTDIR") { - // The directory was removed or changed type since we called - // self._updateStatForWatch, so we fire unconditionally. - self._fire(); - return; - } - throw err; - } - - _.each(dirFiles, function(file) { - var fullPath = files.pathJoin(absPath, file); - - // Recursively watch new files, if we ever previously tried to - // watch them. Recall that when we attempt to watch a - // non-existent file, we actually watch the closest enclosing - // directory that exists, so once the file (and/or any - // intermediate directories) are created, we begin watching - // those directories in response to change events fired for - // directories we're already watching. - if (_.has(self.watches, fullPath)) { - self._watchFileOrDirectory(fullPath); - } - }); - - // If self.watchSet.directories contains any entries for the - // directory we are examining, call self._fireIfDirectoryChanged. - _.some(self.watchSet.directories, function(info) { - return self.stopped || - (absPath === info.absPath && - self._fireIfDirectoryChanged(info, true)); - // XXX #3335 We probably should check again in a second, due to low - // filesystem modtime resolution. - }); - } - }); - } - - _mustNotExist(absPath) { - var wsFiles = this.watchSet.files; - if (_.has(wsFiles, absPath)) { - return wsFiles[absPath] === null; - } - return false; - } - - _mustBeAFile(absPath) { - var wsFiles = this.watchSet.files; - if (_.has(wsFiles, absPath)) { - return _.isString(wsFiles[absPath]); - } - return false; - } - - _updateStatForWatch(absPath) { - var self = this; - var entry = self.watches[absPath]; - var lastStat = entry.lastStat; - var stat = files.statOrNull(absPath); - var mustNotExist = self._mustNotExist(absPath); - var mustBeAFile = self._mustBeAFile(absPath); - - if (stat && lastStat === undefined) { - // We have not checked for this file before, so our expectations are - // somewhat relaxed (namely, we don't care about lastStat), but - // self._fire() might still need to be called if self.watchSet.files - // has conflicting expectations. - if (stat.isFile()) { - if (mustNotExist) { - self._fire(); - } - } else if (stat.isDirectory()) { - if (mustNotExist || mustBeAFile) { - self._fire(); - } - } else { - // Neither a file nor a directory, so treat as non-existent. - stat = null; - if (mustBeAFile) { - self._fire(); - } - } - - // We have not checked for this file before, so just record the new - // stat object. - entry.lastStat = stat; - - } else if (stat && stat.isFile()) { - entry.lastStat = stat; - if (! lastStat || ! lastStat.isFile()) { - self._fire(); - } - - } else if (stat && stat.isDirectory()) { - entry.lastStat = stat; - if (! lastStat || ! lastStat.isDirectory()) { - self._fire(); - } - - } else { - entry.lastStat = stat = null; - if (lastStat) { - self._fire(); - } - } - - return stat; - } - - _checkDirectories() { - var self = this; - - if (self.stopped) { - return; - } - - _.each(self.watchSet.directories, function (info) { - if (self.stopped) { - return; - } - - if (! self.justCheckOnce) { - self._watchFileOrDirectory(info.absPath); - } - - // Check for the case where by the time we created the watch, the - // directory has already changed. - self._fireIfDirectoryChanged(info); - }); - } - - _fire() { - var self = this; - - if (self.stopped) { - return; - } - - self.stop(); - self.onChange(); - } - - stop() { - var self = this; - self.stopped = true; - - // Clean up file watches - _.each(self.watches, function (entry) { - if (entry.watcher) { - entry.watcher.close(); - entry.watcher = null; - } - }); - self.watches = {}; - } -} - -// Given a WatchSet, returns true if it currently describes the state of the -// disk. -export function isUpToDate(watchSet) { - return Profile.time('watch.isUpToDate', () => { - var upToDate = true; - var watcher = new Watcher({ - watchSet: watchSet, - onChange: function () { - upToDate = false; - }, - // internal flag which prevents us from starting watches and timers that - // we're about to cancel anyway - _justCheckOnce: true - }); - watcher.stop(); - return upToDate; - }); -} - -// Options should have absPath/include/exclude/names. -export function readAndWatchDirectory(watchSet, options) { - var contents = readDirectory(options); - watchSet.addDirectory(_.extend({contents: contents}, options)); - return contents; -} - -// Calculating the sha hash can be expensive for large files. By -// returning the calculated hash along with the file contents, the -// hash doesn't need to be calculated again for static files. -// -// We only calculate the hash if needed here, so callers must not -// *rely* on the hash being returned; merely that if the hash is -// present, it is the correct hash of the contents. -export function readAndWatchFileWithHash(watchSet, absPath) { - const result = { - contents: null, - hash: null, - }; - - try { - result.contents = files.readFile(absPath); - } catch (e) { - if (e && e.code === "EISDIR") { - // Avoid adding directories to the watchSet as files. - return result; - } - - if (e && e.code === "ENOENT") { - // Continue, leaving result.{contents,hash} both null. - } else { - // Throw all other errors. - throw e; - } - } - - if (result.contents !== null) { - result.hash = sha1(result.contents); - } - - // Allow null watchSet, if we want to use readFile-style error handling in a - // context where we might not always have a WatchSet (eg, reading - // settings.json where we watch for "meteor run" but not for "meteor deploy"). - if (watchSet) { - watchSet.addFile(absPath, result.hash); - } - - return result; -} - -export function readAndWatchFile(watchSet, absPath) { - return readAndWatchFileWithHash(watchSet, absPath).contents; -} diff --git a/tools/fs/watch.ts b/tools/fs/watch.ts new file mode 100644 index 0000000000..f473840331 --- /dev/null +++ b/tools/fs/watch.ts @@ -0,0 +1,891 @@ +import { Stats, FSWatcher, Dirent } from "fs"; +import * as files from "./files"; +import * as safeWatcher from "./safe-watcher"; +import { createHash } from "crypto"; +import { coalesce } from "../utils/func-utils"; +import { Profile } from "../tool-env/profile"; +import { + optimisticHashOrNull, + optimisticStatOrNull, +} from "./optimistic"; + +const _ = require("underscore"); + +const WATCH_COALESCE_MS = + +(process.env.METEOR_FILE_WATCH_COALESCE_MS || 100); + +// Watch for changes to a set of files, and the first time that any of +// the files change, call a user-provided callback. (If you want a +// second callback, you'll need to create a second Watcher.) +// +// You describe the structure you want to watch in a WatchSet; you then create a +// Watcher to watch it. Watcher does not mutate WatchSet, so you can create +// several Watchers from the same WatchSet. WatchSet can be easily converted to +// and from JSON for serialization. +// +// You can set up two kinds of watches, file and directory watches. +// +// In a file watch, you provide an absolute path to a file and a SHA1 (encoded +// as hex) of the contents of that file. If the file ever changes so that its +// contents no longer match that SHA1, the callback triggers. You can also +// provide `null` for the SHA1, which means the file should not exist. +// +// In a directory watch, you provide an absolute path to a directory, +// two lists of regular expressions specifying the entries to +// include and exclude, a list of specific names to include (which ignores +// the exclude regexp list) and an array of which entries to expect. +// +// For directory watches, the regular expressions work as follows. You provide +// two arrays of regular expressions, an include list and an exclude list. An +// entry in the directory matches if it matches at least one regular expression +// in the include list, and doesn't match any regular expressions in the exclude +// list. The string that is matched against the regular expression ends with a +// '/' if the entry is directory. There is NO IMPLICIT RECURSION here: a +// directory watch ONLY watches the immediate children of the directory! If you +// want a recursive watch, you need to do the recursive walk while building the +// WatchSet and add a bunch of separate directory watches. In addition, you +// can provide a list of specific names to expect; these are not filtered +// by the exclude list. (For example, you might want to see all "*.js" files +// but ignore files starting with dots (which are often temporary files), but +// explicitly ask for ".jshintrc".) +// +// There can be multiple directory watches on the same directory. There is no +// relationship between the files found in directory watches and the files +// watched by file watches; they are parallel mechanisms. +// +// Regular expressions are checked only against individual path components (the +// actual name of the file or the subdirectory) plus the trailing '/' for +// directories, not against the entire path. +// +// You can call stop() to stop watching and tear down the +// watcher. Calling stop() guarantees that you will not receive a +// callback (if you have not already). Calling stop() is unnecessary +// if you've received a callback. +// +// To do a "one-shot" (to see if any files have been modified, compared to the +// dependencies, at a particular point in time), use the isUpToDate function. +// +// XXX Symlinks are currently treated transparently: we treat them as the thing +// they point to (ie, as a directory if they point to a directory, as +// nonexistent if they point to something nonexist, etc). Not sure if this is +// correct. + +type DirectoryEntry = { + absPath: string; + include: RegExp[]; + exclude: RegExp[]; + names: string[]; + contents: string[] | null; +} + +export class WatchSet { + // Set this to true if any Watcher built on this WatchSet must immediately + // fire (eg, if this WatchSet was given two different sha1 for the same file). + public alwaysFire = false; + + // Map from the absolute path to a file, to a sha1 hash, or null if the file + // should not exist. A Watcher created from this set fires when the file + // changes from that sha, or is deleted (if non-null) or created (if null). + // + // Note that Isopack.getSourceFilesUnderSourceRoot() depends on this field + // existing (it's not just an internal implementation detail of watch.ts). + public readonly files: Record = Object.create(null); + + // This represents the assertion that 'absPath' is a directory and that + // 'contents' is its immediate contents, as filtered by the regular + // expressions. Entries in 'contents' are file and subdirectory names; + // directory names end with '/'. 'contents' is sorted. An entry is in + // 'contents' if its value (including the slash, for directories) matches at + // least one regular expression in 'include' and no regular expressions in + // 'exclude'... or if it is in 'names'. + // + // There is no recursion here: files contained in subdirectories never appear. + // + // A directory may have multiple entries (presumably with different + // include/exclude filters). + public readonly directories: DirectoryEntry[] = []; + + public addFile(filePath: string, hash: string | null) { + // Calling addFile directly instead of addPotentiallyUnusedFile implies + // that the file will be used, so we can mark it as such here. Note that + // addPotentiallyUnusedFile overrides this value based on the alreadyUsed + // variable after calling this.addFile. + this.potentiallyUnusedFiles.delete(filePath); + + // No need to update if this is in always-fire mode already. + if (this.alwaysFire) { + return; + } + + if (_.has(this.files, filePath)) { + // Redundant? + if (this.files[filePath] === hash) { + return; + } + // Nope, inconsistent. + this.alwaysFire = true; + return; + } + + this.files[filePath] = hash; + } + + public hasFile(filePath: string): boolean { + return _.has(this.files, filePath); + } + + // Files added via addPotentiallyUnusedFile will be included in this Set + // until addFile is called at a later time, which removes them from the + // potentiallyUnusedFiles Set and prevents them from being considered as + // potentially unused in the future. Either way, this.files will have + // the same contents as if addFile was called instead, which is + // important for checks such as IsopackCache._checkUpToDate, which need + // to take everything (even potentially unused files) into account. + private potentiallyUnusedFiles = new Set(); + + public isDefinitelyUsed(filePath: string): boolean { + return this.hasFile(filePath) && ! this.isPotentiallyUnused(filePath); + } + + public isPotentiallyUnused(filePath: string): boolean { + return this.potentiallyUnusedFiles.has(filePath); + } + + public addPotentiallyUnusedFile(filePath: string, hash: string | null) { + const alreadyUsed = this.isDefinitelyUsed(filePath); + this.addFile(filePath, hash); + if (! alreadyUsed) { + this.potentiallyUnusedFiles.add(filePath); + } + } + + public addDirectory({ + absPath, + include, + exclude, + names, + contents, + }: DirectoryEntry) { + if (this.alwaysFire) return; + if (_.isEmpty(include) && _.isEmpty(names)) { + return; + } + this.directories.push({ + absPath, + include, + exclude, + names, + contents: contents && contents.slice(0).sort(), + }); + } + + // Merges another WatchSet into this one. This one will now fire if either + // WatchSet would have fired. + public merge(that: WatchSet) { + if (this.alwaysFire) return; + if (that.alwaysFire) { + this.alwaysFire = true; + return; + } + + Object.keys(that.files).forEach(name => { + if (that.isPotentiallyUnused(name)) { + this.addPotentiallyUnusedFile(name, that.files[name]); + } else { + this.addFile(name, that.files[name]); + } + }); + + that.directories.forEach(dir => { + // XXX this doesn't deep-clone the directory, but I think these objects + // are never mutated #WatchSetShallowClone #TypeScriptOpportunity + this.directories.push(dir); + }); + } + + public clone() { + const ret = new WatchSet(); + + ret.alwaysFire = this.alwaysFire; + + Object.keys(this.files).forEach(name => { + ret.files[name] = this.files[name]; + }); + + this.potentiallyUnusedFiles.forEach(name => { + ret.potentiallyUnusedFiles.add(name); + }); + + // XXX doesn't bother to deep-clone the directory info + // #WatchSetShallowClone + this.directories.forEach(entry => { + ret.directories.push(entry); + }); + + return ret; + } + + toJSON() { + if (this.alwaysFire) { + return { alwaysFire: true }; + } + + function reToJSON(r: RegExp) { + let options = ''; + if (r.ignoreCase) { + options += 'i'; + } + if (r.multiline) { + options += 'm'; + } + if (r.global) { + options += 'g'; + } + if (options) { + return { + $regex: r.source, + $options: options, + }; + } + return r.source; + } + + const potentiallyUnusedFiles: string[] = []; + this.potentiallyUnusedFiles.forEach(name => { + potentiallyUnusedFiles.push(name); + }); + + return { + files: this.files, + potentiallyUnusedFiles, + directories: this.directories.map(d => ({ + absPath: d.absPath, + include: d.include.map(reToJSON), + exclude: d.exclude.map(reToJSON), + names: d.names, + contents: d.contents + })), + }; + } + + static fromJSON(json: any) { + const watchSet = new WatchSet(); + + if (! json) { + return watchSet; + } + + if (json.alwaysFire) { + watchSet.alwaysFire = true; + return watchSet; + } + + Object.keys(json.files).forEach(name => { + watchSet.files[name] = json.files[name]; + }); + + if (Array.isArray(json.potentiallyUnusedFiles)) { + json.potentiallyUnusedFiles.forEach((name: string) => { + watchSet.potentiallyUnusedFiles.add(name); + }); + } + + function reFromJSON(j: any) { + if (j.$regex) { + return new RegExp(j.$regex, j.$options); + } + return new RegExp(j); + } + + json.directories.forEach((d: any) => { + watchSet.directories.push({ + absPath: d.absPath, + include: d.include.map(reFromJSON), + exclude: d.exclude.map(reFromJSON), + names: d.names, + contents: d.contents, + }) + }); + + return watchSet; + } +} + +export function readFile(absPath: string) { + try { + return files.readFile(absPath); + } catch (e) { + // Rethrow most errors. + if (! e || (e.code !== 'ENOENT' && e.code !== 'EISDIR')) { + throw e; + } + // File does not exist (or is a directory). + return null; + } +}; + +export const sha1 = Profile("sha1", function (...args: (string | Buffer)[]) { + const hash = createHash('sha1'); + args.forEach(arg => hash.update(arg)); + return hash.digest('hex'); +}); + +export const sha512 = Profile("sha512", function (...args: (string | Buffer)[]) { + const hash = createHash('sha512'); + args.forEach(arg => hash.update(arg)); + return hash.digest('base64'); +}); + +function readAndStatDirectory(absPath: string) { + // Read the directory. + try { + var contents = files.readdirWithTypes(absPath); + } catch (e) { + // If the path is not a directory, return null; let other errors through. + if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) { + return null; + } + throw e; + } + + // Add slashes to the end of directories. + const contentsWithSlashes: string[] = []; + contents.forEach(entry => { + let stat: Dirent | Stats | null = entry; + let name = entry.name; + + if (entry.isSymbolicLink()) { + // We do stat instead of lstat here, so that we treat symlinks to + // directories just like directories themselves. + stat = optimisticStatOrNull(files.pathJoin(absPath, entry.name)); + } + if (! stat) { + // Disappeared after the readdir (or a dangling symlink)? + // Eh, pretend it was never there in the first place. + return; + } + + if (stat.isDirectory()) { + name += '/'; + } + + contentsWithSlashes.push(name); + }); + + return contentsWithSlashes; +} + +function filterDirectoryContents(contents: string[], { + include, + exclude, + names, +}: { + include?: RegExp[], + exclude?: RegExp[], + names?: string[], +}) { + // Filter based on regexps. + return contents.filter(entry => { + // Is it one of the names we explicitly requested? + if (names && names.indexOf(entry) !== -1) { + return true; + } + // Is it ruled out by an exclude rule? + if (exclude && exclude.some(re => re.test(entry))) { + return false; + } + // Is it ruled in by an include rule? + if (include && include.some(re => re.test(entry))) { + return true; + } + return false; + }).sort(); +} + +export function readDirectory({ absPath, include, exclude, names }: { + absPath: string; + include?: RegExp[], + exclude?: RegExp[], + names?: string[], +}) { + const contents = readAndStatDirectory(absPath); + return contents ? filterDirectoryContents(contents, { + include, exclude, names + }) : []; +} + +// All fields are private. +export class Watcher { + private watchSet: WatchSet; + private onChange: () => any; + private stopped = false; + private justCheckOnce = false; + private async = false; + private includePotentiallyUnusedFiles = true; + + private watches: Record = Object.create(null); + + constructor(options: { + watchSet: WatchSet; + onChange: () => any; + async?: boolean; + justCheckOnce?: boolean; + includePotentiallyUnusedFiles?: boolean; + }) { + this.async = !! options.async; + this.watchSet = options.watchSet; + this.onChange = options.onChange; + this.justCheckOnce = !! options.justCheckOnce; + if (options.includePotentiallyUnusedFiles === false) { + this.includePotentiallyUnusedFiles = false; + } + + // Were we given an inconsistent WatchSet? Fire now and be done with it. + if (this.watchSet.alwaysFire) { + this.fire(); + return; + } + + this.startFileWatches(); + this.checkDirectories(); + } + + private fireIfFileChanged(absPath: string) { + if (this.stopped) { + return true; + } + + if ( + ! this.includePotentiallyUnusedFiles && + this.watchSet.isPotentiallyUnused(absPath) + ) { + return false; + } + + const oldHash = this.watchSet.files[absPath]; + if (typeof oldHash === "undefined") { + throw new Error("Checking unknown file " + absPath); + } + + const newHash = optimisticHashOrNull(absPath); + if (newHash === null) { + // File does not exist (or is a directory). + // Is this what we expected? + if (oldHash === null) { + return false; + } + // Nope, not what we expected. + this.fire(); + return true; + } + + // File exists! Is that what we expected? + if (oldHash === null) { + this.fire(); + return true; + } + + // Unchanged? + if (newHash === oldHash) { + return false; + } + + this.fire(); + return true; + } + + // infos must all be for the same directory + private fireIfDirectoryChanged(infos: DirectoryEntry[]) { + if (this.stopped) { + return true; + } + + const contents = readAndStatDirectory(infos[0].absPath); + + for (const info of infos) { + const newContents = filterDirectoryContents(contents || [], info); + + // If the directory has changed (including being deleted or created). + if (! _.isEqual(info.contents, newContents)) { + this.fire(); + return true; + } + } + + return false; + } + + private startFileWatches() { + const keys = Object.keys(this.watchSet.files); + + // Set up a watch for each file + this.processBatches(keys, absPath => { + if (! this.justCheckOnce) { + this.watchFileOrDirectory(absPath, true); + } + + // Check for the case where by the time we created the watch, + // the file had already changed from the sha we were provided. + this.fireIfFileChanged(absPath); + }); + } + + private watchFileOrDirectory(absPath: string, skipCheck = false) { + if (! _.has(this.watches, absPath)) { + this.watches[absPath] = { + watcher: null, + // Initially undefined (instead of null) to indicate we have never + // called files.stat on this file before. + lastStat: undefined + }; + } + + const entry = this.watches[absPath]; + if (entry.watcher) { + // Already watching this path. + return; + } + + if (files.statOrNull(absPath)) { + if (this.mustNotExist(absPath)) { + this.fire(); + return; + } + + const onWatchEvent = this.makeWatchEventCallback(absPath); + entry.watcher = safeWatcher.watch(absPath, onWatchEvent); + + if (!skipCheck) { + // If we successfully created the watcher, invoke the callback + // immediately, so that we examine this file at least once. + onWatchEvent(); + } else { + this.updateStatForWatch(absPath); + } + + } else { + if (this.mustBeAFile(absPath)) { + this.fire(); + return; + } + + const parentDir = files.pathDirname(absPath); + if (parentDir === absPath) { + throw new Error("Unable to watch parent directory of " + absPath); + } + + this.watchFileOrDirectory(parentDir); + } + } + + private makeWatchEventCallback(absPath: string) { + // Sometimes we receive a rapid succession of change events, perhaps + // because several files were modified at once (e.g. by git reset + // --hard), or a file was deleted and then recreated by an editor like + // Vim. Because detecting changes can be costly, and because we care + // most about the settled state of the file system, we use the + // funcUtils.coalesce helper to delay calls to the callback by + // METEOR_FILE_WATCH_COALESCE_MS or 100 milliseconds, canceling any + // additional calls if they happen within that window of time, so that + // a rapid succession of calls will tend to trigger only one inspection + // of the file system. + return coalesce(WATCH_COALESCE_MS, () => { + if (this.stopped) { + return; + } + + // This helper method will call this._fire() if the old and new stat + // objects have different types (missing, file, or directory), so we + // can assume they have the same type for the rest of this method. + const stat = this.updateStatForWatch(absPath); + if (this.stopped) { + return; + } + + if (stat === null || stat.isFile()) { + if (_.has(this.watchSet.files, absPath)) { + this.fireIfFileChanged(absPath); + // XXX #3335 We probably should check again in a second, due to low + // filesystem modtime resolution. + } + + } else if (stat.isDirectory()) { + try { + var dirFiles = files.readdir(absPath); + } catch (err) { + if (err.code === "ENOENT" || + err.code === "ENOTDIR") { + // The directory was removed or changed type since we called + // this._updateStatForWatch, so we fire unconditionally. + this.fire(); + return; + } + throw err; + } + + dirFiles.forEach(file => { + const fullPath = files.pathJoin(absPath, file); + + // Recursively watch new files, if we ever previously tried to + // watch them. Recall that when we attempt to watch a + // non-existent file, we actually watch the closest enclosing + // directory that exists, so once the file (and/or any + // intermediate directories) are created, we begin watching + // those directories in response to change events fired for + // directories we're already watching. + if (_.has(this.watches, fullPath)) { + this.watchFileOrDirectory(fullPath); + } + }); + + // If this.watchSet.directories contains any entries for the + // directory we are examining, call this._fireIfDirectoryChanged. + const infos = this.watchSet.directories.filter(info => info.absPath === absPath ); + if (infos.length) { + this.fireIfDirectoryChanged(infos); + } + // XXX #3335 We probably should check again in a second, due to low + // filesystem modtime resolution. + } + }); + } + + private mustNotExist(absPath: string) { + const wsFiles = this.watchSet.files; + if (_.has(wsFiles, absPath)) { + return wsFiles[absPath] === null; + } + return false; + } + + private mustBeAFile(absPath: string) { + const wsFiles = this.watchSet.files; + if (_.has(wsFiles, absPath)) { + return _.isString(wsFiles[absPath]); + } + return false; + } + + private updateStatForWatch(absPath: string) { + const entry = this.watches[absPath]; + const lastStat = entry.lastStat; + let stat = files.statOrNull(absPath); + const mustNotExist = this.mustNotExist(absPath); + const mustBeAFile = this.mustBeAFile(absPath); + + if (stat && lastStat === undefined) { + // We have not checked for this file before, so our expectations are + // somewhat relaxed (namely, we don't care about lastStat), but + // this._fire() might still need to be called if this.watchSet.files + // has conflicting expectations. + if (stat.isFile()) { + if (mustNotExist) { + this.fire(); + } + } else if (stat.isDirectory()) { + if (mustNotExist || mustBeAFile) { + this.fire(); + } + } else { + // Neither a file nor a directory, so treat as non-existent. + stat = null; + if (mustBeAFile) { + this.fire(); + } + } + + // We have not checked for this file before, so just record the new + // stat object. + entry.lastStat = stat; + + } else if (stat && stat.isFile()) { + entry.lastStat = stat; + if (! lastStat || ! lastStat.isFile()) { + this.fire(); + } + + } else if (stat && stat.isDirectory()) { + entry.lastStat = stat; + if (! lastStat || ! lastStat.isDirectory()) { + this.fire(); + } + + } else { + entry.lastStat = stat = null; + if (lastStat) { + this.fire(); + } + } + + return stat; + } + + // Iterates over the array, calling handleItem for each item + // When this._async is true, it pauses ocassionally to avoid blocking for too long + // Stops iterating after watcher is stopped + private processBatches( + array: T[], + handleItem: (item: T) => any, + ) { + let index = 0; + + const processBatch = () => { + const stopTime = this.async ? Date.now() + 50 : Infinity; + while (Date.now() < stopTime && index < array.length) { + if (this.stopped) { + return; + } + + handleItem(array[index]); + + index += 1; + } + + if (index < array.length) { + if (this.async) { + setImmediate(processBatch); + } else { + processBatch(); + } + } + } + + processBatch(); + } + + private checkDirectories() { + const dirs = Object.values(this.watchSet.directories.reduce((result, dir) => { + const dirs = result[dir.absPath]; + if (dirs) { + dirs.push(dir); + } else { + result[dir.absPath] = [dir]; + } + return result; + }, {} as Record)); + + if (this.stopped) { + return; + } + + this.processBatches(dirs, entries => { + if (! this.justCheckOnce) { + this.watchFileOrDirectory(entries[0].absPath, true); + } + + // Check for the case where by the time we created the watch, the + // directory has already changed. + this.fireIfDirectoryChanged(entries); + }); + } + + private fire() { + if (this.stopped) return; + this.stop(); + this.onChange(); + } + + stop() { + this.stopped = true; + // Clean up file watches + _.each(this.watches, function (entry: { watcher: FSWatcher | null }) { + if (entry.watcher) { + entry.watcher.close(); + entry.watcher = null; + } + }); + this.watches = Object.create(null); + } +} + +// Given a WatchSet, returns true if it currently describes the state of the +// disk. +export function isUpToDate( + watchSet: WatchSet, + includePotentiallyUnusedFiles = true +) { + return Profile.time('watch.isUpToDate', () => { + let upToDate = true; + const watcher = new Watcher({ + watchSet: watchSet, + onChange() { + upToDate = false; + }, + // internal flag which prevents us from starting watches and timers that + // we're about to cancel anyway + justCheckOnce: true, + includePotentiallyUnusedFiles, + }); + watcher.stop(); + return upToDate; + }); +} + +// Options should have absPath/include/exclude/names. +export function readAndWatchDirectory( + watchSet: WatchSet, + options: DirectoryEntry, +) { + const contents = readDirectory(options); + watchSet.addDirectory({ + contents, + ...options, + }); + return contents; +} + +// Calculating the sha hash can be expensive for large files. By +// returning the calculated hash along with the file contents, the +// hash doesn't need to be calculated again for static files. +// +// We only calculate the hash if needed here, so callers must not +// *rely* on the hash being returned; merely that if the hash is +// present, it is the correct hash of the contents. +export function readAndWatchFileWithHash(watchSet: WatchSet, absPath: string) { + const result: { + contents: string | Buffer | null; + hash: string | null; + } = { + contents: null, + hash: null, + }; + + try { + result.contents = files.readFile(absPath); + } catch (e) { + if (e && e.code === "EISDIR") { + // Avoid adding directories to the watchSet as files. + return result; + } + + if (e && e.code === "ENOENT") { + // Continue, leaving result.{contents,hash} both null. + } else { + // Throw all other errors. + throw e; + } + } + + if (result.contents !== null) { + result.hash = sha1(result.contents); + } + + // Allow null watchSet, if we want to use readFile-style error handling in a + // context where we might not always have a WatchSet (eg, reading + // settings.json where we watch for "meteor run" but not for "meteor deploy"). + if (watchSet) { + watchSet.addFile(absPath, result.hash); + } + + return result; +} + +export function readAndWatchFile(watchSet: WatchSet, absPath: string) { + return readAndWatchFileWithHash(watchSet, absPath).contents; +} diff --git a/tools/index.d.ts b/tools/index.d.ts new file mode 100644 index 0000000000..73ead4e9d5 --- /dev/null +++ b/tools/index.d.ts @@ -0,0 +1,26 @@ +export {} + +declare global { + interface JSON { + // The ES5 library fails to allow the input parameter to be a Buffer. + parse(input: Buffer | string, reviver?: (this: any, key: string, value: any) => any): any; + } + + interface Promise { + // This is an incomplete list of methods added to Promise.prototype by the + // meteor-promise npm package. TODO Eventually these declarations should be + // moved into that package. + await(): T; + } + + // Promise.await(x) is a shorthand provided by meteor-promise for + // Promise.resolve(x).await(). + interface PromiseConstructor { + await(arg: T | PromiseLike): T; + } + + interface Function { + // func-utils.ts makes usage of this feature + displayName?: string; + } +} diff --git a/tools/isobuild/build-plugin.js b/tools/isobuild/build-plugin.js index cafd77c4f6..dd50a64eb2 100644 --- a/tools/isobuild/build-plugin.js +++ b/tools/isobuild/build-plugin.js @@ -1,6 +1,6 @@ -var archinfo = require('../utils/archinfo.js'); +var archinfo = require('../utils/archinfo'); var buildmessage = require('../utils/buildmessage.js'); -var files = require('../fs/files.js'); +var files = require('../fs/files'); var _ = require('underscore'); import utils from '../utils/utils.js'; diff --git a/tools/isobuild/builder.js b/tools/isobuild/builder.js index 08435bece0..797dca477c 100644 --- a/tools/isobuild/builder.js +++ b/tools/isobuild/builder.js @@ -1,16 +1,17 @@ import assert from "assert"; -import {WatchSet, readAndWatchFile, sha1} from '../fs/watch.js'; +import {WatchSet, readAndWatchFile, sha1} from '../fs/watch'; import files, { - symlinkWithOverwrite, -} from '../fs/files.js'; + symlinkWithOverwrite, realpath, +} from '../fs/files'; import NpmDiscards from './npm-discards.js'; -import {Profile} from '../tool-env/profile.js'; +import {Profile} from '../tool-env/profile'; import { optimisticReadFile, optimisticReaddir, optimisticStatOrNull, optimisticLStatOrNull, -} from "../fs/optimistic.js"; + optimisticHashOrNull, +} from "../fs/optimistic"; // Builder is in charge of writing "bundles" to disk, which are // directory trees such as site archives, programs, and packages. In @@ -75,7 +76,9 @@ export default class Builder { this.previousUsedAsFile = {}; this.writtenHashes = {}; + this.createdSymlinks = {}; this.previousWrittenHashes = {}; + this.previousCreatedSymlinks = {}; // foo/bar => foo/.build1234.bar // Should we include a random number? The advantage is that multiple @@ -106,6 +109,7 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` this.previousWrittenHashes = previousBuilder.writtenHashes; this.previousUsedAsFile = previousBuilder.usedAsFile; + this.previousCreatedSymlinks = previousBuilder.createdSymlinks; resetBuildPath = false; } else { @@ -228,6 +232,39 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` return partsOut.join(files.pathSep); } + // Checks if a file with the same path and hash was written by + // the previous builder. If it was, it adds it to the cache and makes + // sure the parent directories exist and are part of the cache. + // + // Returns true if the file was already written + usePreviousWrite(relPath, hash, sanitize) { + relPath = this._normalizeFilePath(relPath, sanitize); + + if (this.previousWrittenHashes[relPath] === hash) { + this._ensureDirectory(files.pathDirname(relPath)); + this.writtenHashes[relPath] = hash; + this.usedAsFile[relPath] = true; + return true; + } + + return false; + } + + _normalizeFilePath(relPath, sanitize) { + // Ensure no trailing slash + if (relPath.slice(-1) === files.pathSep) { + relPath = relPath.slice(0, -1); + } + + // In sanitize mode, ensure path does not contain segments like + // '..', does not contain forbidden characters, and is unique. + if (sanitize) { + relPath = this._sanitize(relPath); + } + + return relPath; + } + // Write either a buffer or the contents of a file to `relPath` (a // path to a file relative to the bundle root), creating it (and any // enclosing directories) if it doesn't exist yet. Exactly one of @@ -250,16 +287,7 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` // // If `file` is used then it will be added to the builder's WatchSet. write(relPath, {data, file, hash, sanitize, executable, symlink}) { - // Ensure no trailing slash - if (relPath.slice(-1) === files.pathSep) { - relPath = relPath.slice(0, -1); - } - - // In sanitize mode, ensure path does not contain segments like - // '..', does not contain forbidden characters, and is unique. - if (sanitize) { - relPath = this._sanitize(relPath); - } + relPath = this._normalizeFilePath(relPath, sanitize); let getData = null; if (data) { @@ -285,13 +313,27 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` } else { hash = hash || sha1(getData()); - if (this.previousWrittenHashes[relPath] !== hash) { + // Write is called multiple times for assets when they have multiple urls for the same file + if (this.previousWrittenHashes[relPath] !== hash && this.writtenHashes[relPath] !== hash) { + // Builder is used to create build products, which should be read-only; // users shouldn't be manually editing automatically generated files and // expecting the results to "stick". - atomicallyRewriteFile(absPath, getData(), { - mode: executable ? 0o555 : 0o444 - }); + const mode = executable ? 0o555 : 0o444 + + if (this.buildPath === this.outputPath || this.writtenHashes[relPath]) { + // atomicallyRewriteFile handles overwriting files that have already been created + atomicallyRewriteFile(absPath, getData(), { + mode + }); + } else { + // Since builder is not updating in place, and + // this build is only used if every file is successfully written, + // it is not important to write atomically. + files.writeFile(absPath, getData(), { + mode + }) + } } this.writtenHashes[relPath] = hash; @@ -301,6 +343,79 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` return relPath; } + copyTranspiledModules(relativePaths, { + sourceRootDir, + targetRootDir = this.outputPath, + needToTranspile = files.inCheckout(), + }) { + if (!needToTranspile) { + // If these files have already been transpiled, copy the transpiled files + // (both .js and .js.map) directly to the builder output directory, without + // recompiling them. + relativePaths.forEach(relPath => { + const jsPath = jsToTs(relPath); + [jsPath, jsPath + ".map"].forEach(path => { + this.write(path, { + file: files.pathJoin(sourceRootDir, path), + }); + }); + }); + return; + } + + const babel = require("meteor-babel"); + const commonBabelOptions = babel.getDefaultOptions({ + nodeMajorVersion: parseInt(process.versions.node), + typescript: true + }); + commonBabelOptions.sourceMaps = true; + + const toolsDir = files.getCurrentToolsDir(); + const babelCacheDirectory = + files.pathJoin(files.pathDirname(toolsDir), ".babel-cache"); + + relativePaths.forEach(relPath => { + assert.ok(!files.pathIsAbsolute(relPath), relPath); + const fullPath = files.pathJoin(sourceRootDir, relPath); + let inputFileContents = files.readFile(fullPath, "utf-8"); + + // If certain behavior should be disabled in the transpiled code, the + // #RemoveInProd comment can be added to strip out appropriate lines. + inputFileContents = inputFileContents.replace(/^.*#RemoveInProd.*$/mg, ""); + + var transpiled = babel.compile(inputFileContents, { + ...commonBabelOptions, + filename: relPath, + sourceFileName: "/" + relPath, + }, { + cacheDirectory: babelCacheDirectory, + }); + + // The published implementation of the meteor-tool package should + // contain only .js files, like any compiled TypeScript project. + // This design has the unfortunate consequence of forbidding + // explicit .ts file extensions in imported module identifier + // strings, but that's just how it goes with TypeScript. + let outputPath = jsToTs(relPath); + + const sourceMapUrlComment = + "//# sourceMappingURL=" + files.pathBasename(outputPath + ".map"); + + this.write(outputPath, { + data: Buffer.from(transpiled.code + "\n" + sourceMapUrlComment, 'utf8') + }); + + // The babelOptions.sourceMapTarget option was deprecated in Babel + // 7.0.0-beta.41: https://github.com/babel/babel/pull/7500 + const sourceMapTarget = outputPath + ".map"; + transpiled.map.file = sourceMapTarget; + + this.write(sourceMapTarget, { + data: Buffer.from(JSON.stringify(transpiled.map), 'utf8') + }); + }); + } + // Serialize `data` as JSON and write it to `relPath` (a path to a // file relative to the bundle root), creating parent directories as // necessary. Throw an exception if the file already exists. @@ -425,7 +540,7 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` // as well as node_modules/meteor and the parent directories of any // scoped npm packages. this._ensureAllNonPackageDirectories( - files.realpath(options.from), + realpath(options.from), options.to ); } @@ -499,8 +614,6 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` to = to.slice(0, -1); } - const absPathTo = files.pathJoin(this.buildPath, to); - if (symlink) { if (specificFiles) { throw new Error("can't copy only specific paths with a single symlink"); @@ -524,13 +637,17 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` }); } - const rootDir = files.realpath(from); + const rootDir = realpath(from); const walk = (absFrom, relTo) => { if (symlink && ! (relTo in this.usedAsFile)) { this._ensureDirectory(files.pathDirname(relTo)); const absTo = files.pathResolve(this.buildPath, relTo); - symlinkWithOverwrite(absFrom, absTo); + if (this.previousCreatedSymlinks[absFrom] !== relTo) { + symlinkWithOverwrite(absFrom, absTo); + } + this.usedAsFile[relTo] = false; + this.createdSymlinks[absFrom] = relTo; return; } @@ -544,7 +661,7 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` return; } - // Returns files.realpath(thisAbsFrom), iff it is external to + // Returns files.realpath(thisAbsFrom), if it is external to // rootDir, using caching because this function might be called // more than once. let cachedExternalPath; @@ -554,7 +671,7 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` } try { - var real = files.realpath(thisAbsFrom); + var real = realpath(thisAbsFrom); } catch (e) { if (e.code !== "ENOENT" && e.code !== "ELOOP") { @@ -641,23 +758,28 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` // could not be created above. fileStatus = optimisticStatOrNull(thisAbsFrom); if (fileStatus && fileStatus.isFile()) { - // XXX can't really optimize this copying without reading - // the file into memory to calculate the hash. - files.writeFile( - files.pathResolve(this.buildPath, thisRelTo), - // The reason we call files.writeFile here instead of - // files.copyFile is so that we can read the file using - // optimisticReadFile instead of files.createReadStream. - optimisticReadFile(thisAbsFrom), - // Logic borrowed from files.copyFile: "Create the file as - // readable and writable by everyone, and executable by everyone - // if the original file is executably by owner. (This mode will be - // modified by umask.) We don't copy the mode *directly* because - // this function is used by 'meteor create' which is copying from - // the read-only tools tree into a writable app." - { mode: (fileStatus.mode & 0o100) ? 0o777 : 0o666 }, - ); + const hash = optimisticHashOrNull(thisAbsFrom); + if (this.previousWrittenHashes[thisRelTo] !== hash) { + const content = optimisticReadFile(thisAbsFrom); + + files.writeFile( + files.pathResolve(this.buildPath, thisRelTo), + // The reason we call files.writeFile here instead of + // files.copyFile is so that we can read the file using + // optimisticReadFile instead of files.createReadStream. + content, + // Logic borrowed from files.copyFile: "Create the file as + // readable and writable by everyone, and executable by everyone + // if the original file is executably by owner. (This mode will be + // modified by umask.) We don't copy the mode *directly* because + // this function is used by 'meteor create' which is copying from + // the read-only tools tree into a writable app." + { mode: (fileStatus.mode & 0o100) ? 0o777 : 0o666 }, + ); + } + + this.writtenHashes[thisRelTo] = hash; this.usedAsFile[thisRelTo] = true; } }); @@ -721,7 +843,10 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` // Methods that don't have to fix up arguments or return values, because // they are implemented purely in terms of other methods which do. - const passThroughMethods = ["writeToGeneratedFilename"]; + const passThroughMethods = [ + "writeToGeneratedFilename", + "copyTranspiledModules", + ]; passThroughMethods.forEach(method => { subBuilder[method] = this[method]; }); @@ -785,6 +910,16 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` } } +function jsToTs(path) { + if (path.endsWith(".ts")) { + const parts = path.split("."); + assert.strictEqual(parts.pop(), "ts"); + parts.push("js"); + path = parts.join("."); + } + return path; +} + function atomicallyRewriteFile(path, data, options) { // create a different file with a random name and then rename over atomically const rname = '.builder-tmp-file.' + Math.floor(Math.random() * 999999); diff --git a/tools/isobuild/bundler.js b/tools/isobuild/bundler.js index a473bd5c9d..12d35211e2 100644 --- a/tools/isobuild/bundler.js +++ b/tools/isobuild/bundler.js @@ -161,21 +161,25 @@ import { JsFile, CssFile } from './minifier-plugin.js'; var meteorNpm = require('./meteor-npm.js'); import { addToTree } from "./linker.js"; -var files = require('../fs/files.js'); -var archinfo = require('../utils/archinfo.js'); +var files = require('../fs/files'); +var archinfo = require('../utils/archinfo'); var buildmessage = require('../utils/buildmessage.js'); -var watch = require('../fs/watch.js'); +var watch = require('../fs/watch'); var colonConverter = require('../utils/colon-converter.js'); -var Profile = require('../tool-env/profile.js').Profile; +var Profile = require('../tool-env/profile').Profile; var packageVersionParser = require('../packaging/package-version-parser.js'); var release = require('../packaging/release.js'); import { loadIsopackage } from '../tool-env/isopackets.js'; import { CORDOVA_PLATFORM_VERSIONS } from '../cordova'; import { gzipSync } from "zlib"; import { PackageRegistry } from "../../packages/meteor/define-package.js"; +import { optimisticLStatOrNull } from '../fs/optimistic'; const SOURCE_URL_PREFIX = "meteor://\u{1f4bb}app"; +const MINIFY_PLAIN_FUNCTION = Buffer.from('function(', 'utf8'); +const MINIFY_RENAMED_FUNCTION = Buffer.from('function __minifyJs(', 'utf8'); + // files to ignore when bundling. node has no globs, so use regexps exports.ignoreFiles = [ /~$/, /^\.#/, @@ -208,6 +212,7 @@ exports._mainJsContents = [ "", "process.argv.splice(2, 0, 'program.json');", "process.chdir(require('path').join(__dirname, 'programs', 'server'));", + 'require("./programs/server/runtime.js");', "require('./programs/server/boot.js');", ].join("\n"); @@ -482,12 +487,11 @@ export class NodeModulesDirectory { return true; } - const real = files.realpathOrNull(path); - if (typeof real === "string" && - real !== path) { + const fileStatus = optimisticLStatOrNull(path); + if (fileStatus && fileStatus.isSymbolicLink()) { // If node_modules/.bin/command is a symlink, determine the // answer by calling isWithinProdPackage(real). - return isWithinProdPackage(real); + return isWithinProdPackage(files.realpathOrNull(path)); } // If node_modules/.bin/command is not a symlink, then it's hard @@ -546,6 +550,9 @@ class File { // disk). this.sourcePath = options.sourcePath; + // Allows not calculating sri when it isn't needed + this._skipSri = options.skipSri + // info is just for help with debugging the tool; it isn't written to disk or // anything. this.info = options.info || '?'; @@ -597,6 +604,7 @@ class File { this.assets = null; this._contents = options.data || null; // contents, if known, as a Buffer + this._inputHash = options.hash; this._hash = null; this._sri = null; } @@ -612,17 +620,24 @@ class File { hash() { if (! this._hash) { - this._hash = watch.sha1( - String(File._salt()), - this.sri(), - ); + const hashes = [String(File._salt())]; + + if (typeof this._inputHash === "string") { + hashes.push(this._inputHash); + } + + if (!this._skipSri) { + hashes.push(this.sri()); + } + + this._hash = watch.sha1(...hashes); } return this._hash; } sri() { - if (! this._sri) { + if (! this._sri && !this._skipSri) { this._sri = watch.sha512(this.contents()); } @@ -1063,13 +1078,20 @@ class Target { } const target = this; + + const linkerCacheDir = this.bundlerCacheDir && + files.pathJoin(this.bundlerCacheDir, "linker"); + + const scannerCacheDir = this.bundlerCacheDir && + files.pathJoin(this.bundlerCacheDir, "scanner"); + const processor = new compilerPluginModule.CompilerPluginProcessor({ unibuilds: this.unibuilds, arch: this.arch, sourceRoot: this.sourceRoot, isopackCache: this.isopackCache, - linkerCacheDir: this.bundlerCacheDir && - files.pathJoin(this.bundlerCacheDir, 'linker'), + linkerCacheDir, + scannerCacheDir, // Takes a CssOutputResource and returns a string of minified CSS, // or null to indicate no minification occurred. @@ -1086,6 +1108,7 @@ class Target { info: 'resource ' + resource.servePath, arch: target.arch, data: resource.data, + hash: resource.hash, }); file.setTargetPathFromRelPath( @@ -1113,6 +1136,29 @@ class Target { const jsOutputFilesMap = compilerPluginModule.PackageSourceBatch .computeJsOutputFilesMap(sourceBatches); + sourceBatches.forEach(batch => { + const { unibuild } = batch; + + // Depend on the source files that produced these resources. + this.watchSet.merge(unibuild.watchSet); + + // Remember the versions of all of the build-time dependencies + // that were used in these resources. Depend on them as well. + // XXX assumes that this merges cleanly + this.watchSet.merge(unibuild.pkg.pluginWatchSet); + + const entry = jsOutputFilesMap.get(unibuild.pkg.name || null); + if (entry && entry.importScannerWatchSet) { + // Populated in PackageSourceBatch._watchOutputFiles, based on the + // ImportScanner's knowledge of which modules are really imported. + this.watchSet.merge(entry.importScannerWatchSet); + } + }); + + if (buildmessage.jobHasMessages()) { + return; + } + const versions = {}; const dynamicImportFiles = new Set; @@ -1153,6 +1199,7 @@ class Target { data: resource.data, cacheable: false, hash: resource.hash, + skipSri: !!resource.hash }; const file = new File(fileOptions); @@ -1212,6 +1259,7 @@ class Target { info: 'resource ' + resource.servePath, arch: this.arch, data: resource.data, + hash: resource.hash, cacheable: false, }); @@ -1268,14 +1316,6 @@ class Target { addToTree(file.hash(), file.targetPath, versions); } }); - - // Depend on the source files that produced these resources. - this.watchSet.merge(unibuild.watchSet); - - // Remember the versions of all of the build-time dependencies - // that were used in these resources. Depend on them as well. - // XXX assumes that this merges cleanly - this.watchSet.merge(unibuild.pkg.pluginWatchSet); }); dynamicImportFiles.forEach(file => { @@ -1286,6 +1326,19 @@ class Target { ), "utf8") ); }); + + // Call any plugin.afterLink callbacks defined by compiler plugins, + // now that all compilation (including lazy compilation) is finished. + sourceBatches.forEach(batch => { + batch.resourceSlots.forEach(slot => { + const plugin = + slot.sourceProcessor && + slot.sourceProcessor.userPlugin; + if (plugin && typeof plugin.afterLink === "function") { + plugin.afterLink(); + } + }); + }); } // Minify the JS in this target @@ -1293,28 +1346,15 @@ class Target { const staticFiles = []; const dynamicFiles = []; const { arch } = this; + const inputHashesByJsFile = new Map; this.js.forEach(file => { const jsf = new JsFile(file, { arch }); + inputHashesByJsFile.set(jsf, file.hash()); + if (file.targetPath.startsWith("dynamic/")) { - // Make sure file._hash is cached. - file.hash(); - - // Dynamic files consist of a single anonymous function - // expression, which some minifiers (e.g. UglifyJS) either fail to - // parse or mistakenly eliminate as dead code. To avoid these - // problems, we temporarily name the function __minifyJs. - file._contents = Buffer.from( - file.contents() - .toString("utf8") - .replace(/^\s*function\s*\(/, - "function __minifyJs("), - "utf8" - ); - dynamicFiles.push(jsf); - } else { staticFiles.push(jsf); } @@ -1342,16 +1382,15 @@ class Target { function handle(source, dynamic) { source._minifiedFiles.forEach(file => { - // Remove the function name __minifyJs that was added above. - file.data = file.data - .toString("utf8") - .replace(/^\s*function\s+__minifyJs\s*\(/, - "function("); + if (typeof file.data === 'string') { + file.data = Buffer.from(file.data, "utf8"); + } const newFile = new File({ info: 'minified js', arch, - data: Buffer.from(file.data, 'utf8'), + data: file.data, + hash: inputHashesByJsFile.get(source), }); if (file.sourceMap) { @@ -1684,7 +1723,9 @@ class ClientTarget extends Target { manifestItem.sri = file.sri(); if (! file.targetPath.startsWith("dynamic/")) { - writeFile(file, builder); + writeFile(file, builder, { + leaveSourceMapUrls: type === 'asset' + }); manifest.push(manifestItem); return; } @@ -1795,7 +1836,12 @@ const minifyCssFiles = Profile("minifyCssFiles", wrap(function (files, { minifier, minifyMode, }) { - const sources = files.map(file => new CssFile(file, { arch })); + const inputHashesByCssFile = new Map; + const sources = files.map(file => { + const cssFile = new CssFile(file, { arch }); + inputHashesByCssFile.set(cssFile, file.hash()); + return cssFile; + }); const markedMinifier = buildmessage.markBoundary( minifier.userPlugin.processFilesForBundle, minifier.userPlugin, @@ -1814,7 +1860,8 @@ const minifyCssFiles = Profile("minifyCssFiles", wrap(function (files, { const newFile = new File({ info: 'minified css', arch, - data: Buffer.from(file.data, 'utf8') + data: Buffer.from(file.data, 'utf8'), + hash: inputHashesByCssFile.get(source), }); if (file.sourceMap) { newFile.setSourceMap(file.sourceMap, '/'); @@ -2392,7 +2439,9 @@ class JsImage { _.each(nodeModulesDirectories, function (nmd) { assert.strictEqual(typeof nmd.preferredBundlePath, "string"); - if (! nmd.isPortable()) { + // Skip calculating isPortable in 'meteor run' since the + // modules are never rebuilt + if (includeNodeModules !== 'symlink' && !nmd.isPortable()) { const parentDir = files.pathDirname(nmd.preferredBundlePath); rebuildDirs[parentDir] = parentDir; } @@ -2650,29 +2699,33 @@ class ServerTarget extends JsImageTarget { const toolsDir = files.pathDirname( files.convertToStandardPath(__dirname)); - builder.write("profile.js", { - file: files.pathJoin(toolsDir, "tool-env", "profile.js"), + builder.copyTranspiledModules([ + "profile.ts" + ], { + sourceRootDir: files.pathJoin(toolsDir, "tool-env"), }); // Server bootstrap - _.each([ + builder.copyTranspiledModules([ "boot.js", "boot-utils.js", - "debug.js", + "debug.ts", "server-json.js", - "mini-files.js", + "mini-files.ts", "npm-require.js", "npm-rebuild.js", "npm-rebuild-args.js", - ], function (filename) { - builder.write(filename, { - file: files.pathJoin( - toolsDir, - 'static-assets', - 'server', - filename - ) - }); + "runtime.js", + ], { + sourceRootDir: files.pathJoin( + toolsDir, + "static-assets", + "server", + ), + // If we're not in a checkout, then /static-assets/server + // already contains transpiled files, so we can just copy them, without + // also transpiling them again. + needToTranspile: files.inCheckout(), }); // Script that fetches the dev_bundle and runs the server bootstrap @@ -2680,7 +2733,7 @@ class ServerTarget extends JsImageTarget { // anything anymore if (archinfo.VALID_ARCHITECTURES[self.arch] !== true) { throw new Error( - `MDG does not publish dev_bundles for arch: ${self.arch}` + `Meteor Software does not publish dev_bundles for arch: ${self.arch}` ); } @@ -2714,9 +2767,13 @@ var writeFile = Profile("bundler writeFile", function (file, builder, options) { let data = file.contents(); const hash = file.hash(); + if (builder.usePreviousWrite(file.targetPath, hash)) { + return; + } + if (options && options.sourceMapUrl) { data = addSourceMappingURL(data, options.sourceMapUrl); - } else { + } else if (!options || !options.leaveSourceMapUrls) { // If we do not have an options.sourceMapUrl to append, then we still // want to remove any existing //# sourceMappingURL comments. // https://github.com/meteor/meteor/issues/9894 @@ -2787,17 +2844,18 @@ var writeTargetToPath = Profile( previousBuilder = null, buildMode, minifyMode, + forceInPlaceBuild }) { var builder = new Builder({ outputPath: files.pathJoin(outputPath, 'programs', name), previousBuilder, - // We do not force an in-place build for individual targets like - // .meteor/local/build/programs/web.browser.legacy, because they - // tend to be written atomically, and it's important on Windows to - // avoid overwriting files that might be open currently in the build - // or server process. If in-place builds were safer on Windows, they - // would be much quicker than from-scratch rebuilds. - forceInPlaceBuild: false, + // We do not force an in-place build for individual targets + // like .meteor/local/build/programs/web.browser.legacy, because they tend + // to be written atomically, and it's important on Windows to avoid + // overwriting files that might be open currently in the server + // process. There are some exceptions when we know the server process + // is not using the files, such as during a full build when it is stopped. + forceInPlaceBuild }); var targetBuild = target.write(builder, { @@ -2848,7 +2906,9 @@ var writeSiteArchive = Profile("bundler writeSiteArchive", function ( releaseName, previousBuilders = Object.create(null), buildMode, - minifyMode + minifyMode, + sourceRoot, + forceInPlaceBuild, }) { const builders = {}; @@ -2865,6 +2925,12 @@ var writeSiteArchive = Profile("bundler writeSiteArchive", function ( }); try { + Object.keys(targets).forEach(key => { + // Both makeClientTarget and makeServerTarget get their sourceRoot + // from packageSource.sourceRoot, so this should always be true: + assert.strictEqual(targets[key].sourceRoot, sourceRoot); + }); + var json = { format: "site-archive-pre1", builtBy, @@ -2872,6 +2938,7 @@ var writeSiteArchive = Profile("bundler writeSiteArchive", function ( meteorRelease: releaseName, nodeVersion: process.versions.node, npmVersion: meteorNpm.npmVersion, + gitCommitHash: process.env.METEOR_GIT_COMMIT_HASH || files.findGitCommitHash(sourceRoot), }; // Tell the deploy server what version of the dependency kit we're using, so @@ -2936,7 +3003,8 @@ Find out more about Meteor at meteor.com. releaseName, previousBuilder: previousBuilders[name] || null, buildMode, - minifyMode + minifyMode, + forceInPlaceBuild }); builders[name] = targetBuilder; @@ -3015,6 +3083,10 @@ Find out more about Meteor at meteor.com. * - hasCachedBundle: true if we already have a cached bundle stored in * /build. When true, we only build the new client targets in the bundle. * + * - forceInPlaceBuild On Windows, in place builds are disabled by default + * since they are only safe when the output files from the previous build + * are not being used. This can be set to true when it is safe. + * * Returns an object with keys: * - errors: A buildmessage.MessageSet, or falsy if bundling succeeded. * - serverWatchSet: Information about server files and paths that were @@ -3049,6 +3121,7 @@ function bundle({ previousBuilders = Object.create(null), hasCachedBundle, allowDelayedClientBuilds = false, + forceInPlaceBuild, }) { buildOptions = buildOptions || {}; @@ -3203,6 +3276,7 @@ function bundle({ builtBy, releaseName, minifyMode, + forceInPlaceBuild, }; function writeClientTarget(target) { @@ -3281,6 +3355,7 @@ function bundle({ starResult = writeSiteArchive(targets, outputPath, { buildMode: buildOptions.buildMode, previousBuilders, + sourceRoot: packageSource.sourceRoot, ...writeOptions, }); serverWatchSet.merge(starResult.serverWatchSet); diff --git a/tools/isobuild/compiler-deprecated-compile-step.js b/tools/isobuild/compiler-deprecated-compile-step.js index 39dc5ed6eb..fe3b9c76c8 100644 --- a/tools/isobuild/compiler-deprecated-compile-step.js +++ b/tools/isobuild/compiler-deprecated-compile-step.js @@ -7,11 +7,11 @@ var _ = require('underscore'); -var archinfo = require('../utils/archinfo.js'); +var archinfo = require('../utils/archinfo'); var buildmessage = require('../utils/buildmessage.js'); -var files = require('../fs/files.js'); +var files = require('../fs/files'); var colonConverter = require('../utils/colon-converter.js'); -var watch = require('../fs/watch.js'); +var watch = require('../fs/watch'); var convertSourceMapPaths = function (sourcemap, f) { if (! sourcemap) { diff --git a/tools/isobuild/compiler-plugin.js b/tools/isobuild/compiler-plugin.js index 9d84313e76..b8b476d9c4 100644 --- a/tools/isobuild/compiler-plugin.js +++ b/tools/isobuild/compiler-plugin.js @@ -1,25 +1,30 @@ -var archinfo = require('../utils/archinfo.js'); +var archinfo = require('../utils/archinfo'); var buildmessage = require('../utils/buildmessage.js'); var buildPluginModule = require('./build-plugin.js'); var colonConverter = require('../utils/colon-converter.js'); -var files = require('../fs/files.js'); +var files = require('../fs/files'); var compiler = require('./compiler.js'); var linker = require('./linker.js'); var util = require('util'); var _ = require('underscore'); -var Profile = require('../tool-env/profile.js').Profile; +var Profile = require('../tool-env/profile').Profile; import assert from "assert"; -import {sha1, readAndWatchFileWithHash} from '../fs/watch.js'; +import { + WatchSet, + sha1, + readAndWatchFileWithHash, +} from '../fs/watch'; import LRU from 'lru-cache'; import {sourceMapLength} from '../utils/utils.js'; import {Console} from '../console/console.js'; -import ImportScanner from './import-scanner.js'; -import {cssToCommonJS} from "./css-modules.js"; -import Resolver from "./resolver.js"; +import ImportScanner from './import-scanner'; +import {cssToCommonJS} from "./css-modules"; +import Resolver from "./resolver"; import { optimisticStatOrNull, optimisticReadJsonOrNull, -} from "../fs/optimistic.js"; + optimisticHashOrNull, +} from "../fs/optimistic"; import { isTestFilePath } from './test-files.js'; @@ -65,7 +70,7 @@ const hasOwn = Object.prototype.hasOwnProperty; // Cache the (slightly post-processed) results of linker.fullLink. const CACHE_SIZE = process.env.METEOR_LINKER_CACHE_SIZE || 1024*1024*100; const CACHE_DEBUG = !! process.env.METEOR_TEST_PRINT_LINKER_CACHE_DEBUG; -const LINKER_CACHE_SALT = 21; // Increment this number to force relinking. +const LINKER_CACHE_SALT = 24; // Increment this number to force relinking. const LINKER_CACHE = new LRU({ max: CACHE_SIZE, // Cache is measured in bytes. We don't care about servePath. @@ -110,6 +115,7 @@ export class CompilerPluginProcessor { sourceRoot, isopackCache, linkerCacheDir, + scannerCacheDir, minifyCssResource, }) { Object.assign(this, { @@ -118,11 +124,16 @@ export class CompilerPluginProcessor { sourceRoot, isopackCache, linkerCacheDir, + scannerCacheDir, minifyCssResource, }); - if (this.linkerCacheDir) { - files.mkdir_p(this.linkerCacheDir); + if (linkerCacheDir) { + files.mkdir_p(linkerCacheDir); + } + + if (scannerCacheDir) { + files.mkdir_p(scannerCacheDir); } } @@ -141,7 +152,8 @@ export class CompilerPluginProcessor { return new PackageSourceBatch(unibuild, self, { sourceRoot, - linkerCacheDir: self.linkerCacheDir + linkerCacheDir: self.linkerCacheDir, + scannerCacheDir: self.scannerCacheDir, }); }); @@ -281,19 +293,10 @@ class InputFile extends buildPluginModule.InputFile { } readAndWatchFileWithHash(path) { - const osPath = files.convertToOSPath(path); - const sourceRoot = this.getSourceRoot(); - const relPath = files.pathRelative(sourceRoot, osPath); - if (relPath.startsWith("..")) { - throw new Error( - `Attempting to read file outside ${ - this.getPackageName() || "the app"}: ${osPath}` - ); - } const sourceBatch = this._resourceSlot.packageSourceBatch; return readAndWatchFileWithHash( sourceBatch.unibuild.watchSet, - osPath + files.convertToOSPath(path), ); } @@ -530,7 +533,7 @@ class InputFile extends buildPluginModule.InputFile { * @memberOf InputFile * @instance */ - addHtml(options) { + addHtml(options, lazyFinalizer) { if (typeof lazyFinalizer === "function") { // For now, just call the lazyFinalizer function immediately. Since // HTML is not compiled, this immediate invocation is probably @@ -571,20 +574,7 @@ class ResourceSlot { // If we have a sourceProcessor, it will handle the adding of the // final processed JavaScript. } else if (self.inputResource.extension === "js") { - // If there is no sourceProcessor for a .js file, add the source - // directly to the output. #HardcodeJs - self.addJavaScript({ - // XXX it's a shame to keep converting between Buffer and string, but - // files.convertToStandardLineEndings only works on strings for now - data: self.inputResource.data.toString('utf8'), - path: self.inputResource.path, - hash: self.inputResource.hash, - bare: self.inputResource.fileOptions && - (self.inputResource.fileOptions.bare || - // XXX eventually get rid of backward-compatibility "raw" name - // XXX COMPAT WITH 0.6.4 - self.inputResource.fileOptions.raw) - }); + self._addDirectlyToJsOutputResources(); } } else { if (sourceProcessor) { @@ -594,20 +584,23 @@ class ResourceSlot { // Any resource that isn't handled by compiler plugins just gets passed // through. if (self.inputResource.type === "js") { - let resource = self.inputResource; - if (! _.isString(resource.sourcePath)) { - resource.sourcePath = self.inputResource.path; - } - if (! _.isString(resource.targetPath)) { - resource.targetPath = resource.sourcePath; - } - self.jsOutputResources.push(resource); + self._addDirectlyToJsOutputResources(); } else { self.outputResources.push(self.inputResource); } } } + // Add this resource directly to jsOutputResources without modifying the + // original data. #HardcodeJs + _addDirectlyToJsOutputResources() { + this.addJavaScript({ + ...(this.inputResource.fileOptions || {}), + path: this.inputResource.path, + data: this.inputResource.data, + }); + } + _getOption(name, options) { if (options && _.has(options, name)) { return options[name]; @@ -698,6 +691,15 @@ class ResourceSlot { return isInImports; } + _isBare(options) { + return !! ( + this._getOption("bare", options) || + // XXX eventually get rid of backwards-compatible "raw" name + // XXX COMPAT WITH 0.6.4 + this._getOption("raw", options) + ); + } + addStylesheet(options, lazyFinalizer) { if (! this.sourceProcessor) { throw Error("addStylesheet on non-source ResourceSlot?"); @@ -787,7 +789,9 @@ class ResourceSlot { addJavaScript(options, lazyFinalizer) { // #HardcodeJs this gets called by constructor in the "js" case - if (! this.sourceProcessor && this.inputResource.extension !== "js") { + if (! this.sourceProcessor && + this.inputResource.extension !== "js" && + this.inputResource.type !== "js") { throw Error("addJavaScript on non-source ResourceSlot?"); } @@ -869,16 +873,21 @@ class OutputResource { } const targetPath = options.path || sourcePath; + const servePath = targetPath + ? resourceSlot.packageSourceBatch.unibuild.pkg._getServePath(targetPath) + : resourceSlot.inputResource.servePath; Object.assign(this, { type, lazy: resourceSlot._isLazy(options, true), - bare: !! resourceSlot._getOption("bare", options), + bare: resourceSlot._isBare(options), mainModule: !! resourceSlot._getOption("mainModule", options), sourcePath, targetPath, - servePath: resourceSlot.packageSourceBatch - .unibuild.pkg._getServePath(targetPath), + servePath, + // Remember the source hash so that changes to the source that + // disappear after compilation can still contribute to the hash. + _inputHash: resourceSlot.inputResource.hash, }); } @@ -963,9 +972,17 @@ class OutputResource { } return this._set("data", data); - case "hash": - const { hash } = this._initialOptions; - return this._set("hash", hash || sha1(this._get("data"))); + case "hash": { + const hashes = []; + + if (typeof this._inputHash === "string") { + hashes.push(this._inputHash); + } + + hashes.push(sha1(this._get("data"))); + + return this._set("hash", sha1(...hashes)); + } case "sourceMap": let { sourceMap } = this._initialOptions; @@ -1022,6 +1039,7 @@ export class PackageSourceBatch { constructor(unibuild, processor, { sourceRoot, linkerCacheDir, + scannerCacheDir, }) { const self = this; buildmessage.assertInJob(); @@ -1030,45 +1048,16 @@ export class PackageSourceBatch { self.processor = processor; self.sourceRoot = sourceRoot; self.linkerCacheDir = linkerCacheDir; + self.scannerCacheDir = scannerCacheDir; self.importExtensions = [".js", ".json"]; self._nodeModulesPaths = null; - var sourceProcessorSet = self._getSourceProcessorSet(); - self.resourceSlots = []; - unibuild.resources.forEach(function (resource) { - let sourceProcessor = null; - if (resource.type === "source") { - var extension = resource.extension; - if (extension === null) { - const filename = files.pathBasename(resource.path); - sourceProcessor = sourceProcessorSet.getByFilename(filename); - if (! sourceProcessor) { - buildmessage.error( - `no plugin found for ${ resource.path } in ` + - `${ unibuild.pkg.displayName() }; a plugin for ${ filename } ` + - `was active when it was published but none is now`); - return; - // recover by ignoring - } - } else { - sourceProcessor = sourceProcessorSet.getByExtension(extension); - // If resource.extension === 'js', it's ok for there to be no - // sourceProcessor, since we #HardcodeJs in ResourceSlot. - if (! sourceProcessor && extension !== 'js') { - buildmessage.error( - `no plugin found for ${ resource.path } in ` + - `${ unibuild.pkg.displayName() }; a plugin for *.${ extension } ` + - `was active when it was published but none is now`); - return; - // recover by ignoring - } - - self.addImportExtension(extension); - } + unibuild.resources.forEach(resource => { + const slot = self.makeResourceSlot(resource); + if (slot) { + self.resourceSlots.push(slot); } - - self.resourceSlots.push(new ResourceSlot(resource, sourceProcessor, self)); }); // Compute imports by merging the exports of all of the packages we @@ -1118,6 +1107,85 @@ export class PackageSourceBatch { } : null; } + compileOneJsResource(resource) { + const slot = this.makeResourceSlot({ + type: "source", + extension: "js", + // Need { data, path, hash } here, at least. + ...resource, + fileOptions: { + lazy: true, + ...resource.fileOptions, + } + }); + + if (slot) { + // If the resource was not handled by a source processor, it will be + // added directly to slot.jsOutputResources by makeResourceSlot, + // meaning we do not need to compile it. + if (slot.jsOutputResources.length > 0) { + return slot.jsOutputResources + } + + const inputFile = new InputFile(slot); + inputFile.supportsLazyCompilation = false; + + if (slot.sourceProcessor) { + const { userPlugin } = slot.sourceProcessor; + if (userPlugin) { + const markedMethod = buildmessage.markBoundary( + userPlugin.processFilesForTarget, + userPlugin + ); + try { + Promise.await(markedMethod([inputFile])); + } catch (e) { + buildmessage.exception(e); + } + } + } + + return slot.jsOutputResources; + } + + return []; + } + + makeResourceSlot(resource) { + let sourceProcessor = null; + if (resource.type === "source") { + var extension = resource.extension; + if (extension === null) { + const filename = files.pathBasename(resource.path); + sourceProcessor = this._getSourceProcessorSet().getByFilename(filename); + if (! sourceProcessor) { + buildmessage.error( + `no plugin found for ${ resource.path } in ` + + `${ this.unibuild.pkg.displayName() }; a plugin for ${ filename } ` + + `was active when it was published but none is now`); + return null; + // recover by ignoring + } + } else { + sourceProcessor = this._getSourceProcessorSet().getByExtension(extension); + // If resource.extension === 'js', it's ok for there to be no + // sourceProcessor, since we #HardcodeJs in ResourceSlot. + if (! sourceProcessor && extension !== 'js') { + buildmessage.error( + `no plugin found for ${ resource.path } in ` + + `${ this.unibuild.pkg.displayName() }; a plugin for *.${ extension } ` + + `was active when it was published but none is now`); + return null; + // recover by ignoring + } + + this.addImportExtension(extension); + } + } + + return new ResourceSlot(resource, sourceProcessor, this); + } + addImportExtension(extension) { extension = extension.toLowerCase(); @@ -1158,26 +1226,27 @@ export class PackageSourceBatch { } _getSourceProcessorSet() { - const self = this; + if (! this._sourceProcessorSet) { + buildmessage.assertInJob(); - buildmessage.assertInJob(); + const isopack = this.unibuild.pkg; + const activePluginPackages = compiler.getActivePluginPackages(isopack, { + uses: this.unibuild.uses, + isopackCache: this.processor.isopackCache + }); - var isopack = self.unibuild.pkg; - const activePluginPackages = compiler.getActivePluginPackages(isopack, { - uses: self.unibuild.uses, - isopackCache: self.processor.isopackCache - }); - const sourceProcessorSet = new buildPluginModule.SourceProcessorSet( - isopack.displayName(), { hardcodeJs: true }); + this._sourceProcessorSet = new buildPluginModule.SourceProcessorSet( + isopack.displayName(), { hardcodeJs: true }); - _.each(activePluginPackages, function (otherPkg) { - otherPkg.ensurePluginsInitialized(); + _.each(activePluginPackages, otherPkg => { + otherPkg.ensurePluginsInitialized(); + this._sourceProcessorSet.merge(otherPkg.sourceProcessors.compiler, { + arch: this.processor.arch, + }); + }); + } - sourceProcessorSet.merge( - otherPkg.sourceProcessors.compiler, {arch: self.processor.arch}); - }); - - return sourceProcessorSet; + return this._sourceProcessorSet; } // Returns a map from package names to arrays of JS output files. @@ -1196,6 +1265,7 @@ export class PackageSourceBatch { files: inputFiles, mainModule: _.find(inputFiles, file => file.mainModule) || null, batch, + importScannerWatchSet: new WatchSet(), }); }); @@ -1203,7 +1273,7 @@ export class PackageSourceBatch { // In the unlikely event that no package is using the modules // package, then the map is already complete, and we don't need to // do any import scanning. - return map; + return this._watchOutputFiles(map); } // Append install() calls to the install-packages.js file in the @@ -1272,16 +1342,19 @@ export class PackageSourceBatch { } }); + const entry = map.get(name); + const scanner = new ImportScanner({ name, bundleArch: batch.processor.arch, extensions: batch.importExtensions, sourceRoot: batch.sourceRoot, nodeModulesPaths, - watchSet: batch.unibuild.watchSet, + watchSet: entry.importScannerWatchSet, + cacheDir: batch.scannerCacheDir, }); - scanner.addInputFiles(map.get(name).files); + scanner.addInputFiles(entry.files); if (batch.useMeteorInstall) { scanner.scanImports(); @@ -1417,7 +1490,37 @@ export class PackageSourceBatch { } }); - return map; + return this._watchOutputFiles(map); + } + + static _watchOutputFiles(jsOutputFilesMap) { + // Watch all output files produced by computeJsOutputFilesMap. + jsOutputFilesMap.forEach(entry => { + entry.files.forEach(file => { + const { + sourcePath, + absPath = sourcePath && + files.pathJoin(entry.batch.sourceRoot, sourcePath), + } = file; + const { importScannerWatchSet } = entry; + if ( + typeof absPath === "string" && + // Blindly calling importScannerWatchSet.addFile would be + // logically correct here, but we can save the cost of calling + // optimisticHashOrNull(absPath) if the importScannerWatchSet + // already knows about the file and it has not been marked as + // potentially unused. + ! importScannerWatchSet.isDefinitelyUsed(absPath) + ) { + // If this file was previously added to the importScannerWatchSet + // using the addPotentiallyUnusedFile method (see compileUnibuild), + // calling addFile here will update its usage status to reflect that + // the ImportScanner did, in fact, end up "using" the file. + importScannerWatchSet.addFile(absPath, optimisticHashOrNull(absPath)); + } + }); + }); + return jsOutputFilesMap; } static _warnAboutMissingModules(missingModules) { @@ -1611,7 +1714,7 @@ export class PackageSourceBatch { if (cacheFilename) { let diskCached = null; try { - diskCached = optimisticReadJsonOrNull(cacheFilename); + diskCached = files.readJSONOrNull(cacheFilename); } catch (e) { // Ignore JSON parse errors; pretend there was no cache. if (!(e instanceof SyntaxError)) { @@ -1655,6 +1758,7 @@ export class PackageSourceBatch { // before returning from the method (but after writing // to cache). data: file.source, + hash: file.hash, servePath: file.servePath, sourceMap: sm }; diff --git a/tools/isobuild/compiler.js b/tools/isobuild/compiler.js index 0d1daecceb..3ecdb82d61 100644 --- a/tools/isobuild/compiler.js +++ b/tools/isobuild/compiler.js @@ -1,23 +1,23 @@ var _ = require('underscore'); -var archinfo = require('../utils/archinfo.js'); +var archinfo = require('../utils/archinfo'); var buildmessage = require('../utils/buildmessage.js'); var bundler = require('./bundler.js'); var isopack = require('./isopack.js'); var meteorNpm = require('./meteor-npm.js'); -var watch = require('../fs/watch.js'); +var watch = require('../fs/watch'); var Console = require('../console/console.js').Console; -var files = require('../fs/files.js'); +var files = require('../fs/files'); var colonConverter = require('../utils/colon-converter.js'); var linterPluginModule = require('./linter-plugin.js'); var compileStepModule = require('./compiler-deprecated-compile-step.js'); -var Profile = require('../tool-env/profile.js').Profile; +var Profile = require('../tool-env/profile').Profile; import { SourceProcessorSet } from './build-plugin.js'; import { optimisticReadFile, optimisticHashOrNull, -} from "../fs/optimistic.js"; +} from "../fs/optimistic"; var compiler = exports; @@ -34,7 +34,7 @@ var compiler = exports; // dependencies. (At least for now, packages only used in target creation (eg // minifiers) don't require you to update BUILT_BY, though you will need to quit // and rerun "meteor run".) -compiler.BUILT_BY = 'meteor/31'; +compiler.BUILT_BY = 'meteor/34'; // This is a list of all possible architectures that a build can target. (Client // is expanded into 'web.browser' and 'web.cordova') @@ -479,12 +479,9 @@ var compileUnibuild = Profile(function (options) { const relPath = asset.relPath; const absPath = files.pathResolve(inputSourceArch.sourceRoot, relPath); - // readAndWatchFileWithHash returns an object carrying a buffer with the - // file-contents. The buffer contains the original data of the file (no EOL - // transforms from the tools/files.js part). - const file = watch.readAndWatchFileWithHash(watchSet, absPath); - const hash = file.hash; - const contents = file.contents; + const hash = optimisticHashOrNull(absPath); + const contents = optimisticReadFile(absPath); + watchSet.addFile(absPath, hash); addAsset(contents, relPath, hash); }); @@ -560,7 +557,15 @@ api.addAssets('${relPath}', 'client').`); const contents = optimisticReadFile(absPath); const hash = optimisticHashOrNull(absPath); const file = { contents, hash }; - watchSet.addFile(absPath, hash); + + if (fileOptions && ! fileOptions.lazy) { + watchSet.addFile(absPath, hash); + } else { + // Lazy files might not ultimately be used by the current unibuild/bundle, + // so we add them to the watchSet using a provisional status that may be + // updated later, at the end of PackageSourceBatch.computeJsOutputFilesMap. + watchSet.addPotentiallyUnusedFile(absPath, hash); + } Console.nudge(true); diff --git a/tools/isobuild/css-modules.js b/tools/isobuild/css-modules.ts similarity index 69% rename from tools/isobuild/css-modules.js rename to tools/isobuild/css-modules.ts index 2b71c2bcd7..d9141b4ec6 100644 --- a/tools/isobuild/css-modules.js +++ b/tools/isobuild/css-modules.ts @@ -1,4 +1,4 @@ -export function cssToCommonJS(css) { +export function cssToCommonJS(css: string, _hash: string) { return [ 'module.exports = require("meteor/modules").addStyles(', " " + JSON.stringify(css), diff --git a/tools/isobuild/import-scanner.js b/tools/isobuild/import-scanner.ts similarity index 66% rename from tools/isobuild/import-scanner.js rename to tools/isobuild/import-scanner.ts index ed2adcc1c2..e6c09760e2 100644 --- a/tools/isobuild/import-scanner.js +++ b/tools/isobuild/import-scanner.ts @@ -2,33 +2,37 @@ import assert from "assert"; import {inspect} from "util"; import {Script} from "vm"; import { - isString, isObject, isEmpty, has, keys, each, map, omit, + isString, isObject, isEmpty, has, keys, each, omit, } from "underscore"; -import {sha1} from "../fs/watch.js"; -import {matches as archMatches} from "../utils/archinfo.js"; -import {findImportedModuleIdentifiers} from "./js-analyze.js"; -import {cssToCommonJS} from "./css-modules.js"; -import buildmessage from "../utils/buildmessage.js"; -import LRU from "lru-cache"; -import {Profile} from "../tool-env/profile.js"; -import {SourceNode, SourceMapConsumer} from "source-map"; +import {sha1} from "../fs/watch"; import { + matches as archMatches, + isLegacyArch, +} from "../utils/archinfo"; +import {findImportedModuleIdentifiers} from "./js-analyze.js"; +import {cssToCommonJS} from "./css-modules"; +import buildmessage from "../utils/buildmessage.js"; +import {Profile} from "../tool-env/profile"; +import { + mkdir_p, pathJoin, pathRelative, pathNormalize, - pathBasename, pathExtname, pathDirname, pathIsAbsolute, convertToOSPath, convertToPosixPath, realpathOrNull, -} from "../fs/files.js"; + writeFileAtomically, + readFile, +} from "../fs/files"; + +const { SourceNode, SourceMapConsumer } = require("source-map"); const { relative: posixRelative, dirname: posixDirname, - sep: posixSep, } = require("path").posix; import { @@ -36,10 +40,14 @@ import { optimisticStatOrNull, optimisticLStatOrNull, optimisticHashOrNull, - shouldWatch, -} from "../fs/optimistic.js"; + optimisticLookupPackageJsonArray, +} from "../fs/optimistic"; -import Resolver from "./resolver.js"; +import { wrap } from "optimism"; +const { compile: reifyCompile } = require("reify/lib/compiler"); +const { parse: reifyBabelParse } = require("reify/lib/parsers/babel"); + +import Resolver, { Resolution } from "./resolver"; const fakeFileStat = { isFile() { @@ -49,32 +57,135 @@ const fakeFileStat = { isDirectory() { return false; } -}; +} as import("fs").Stats; // Symbol used by scanMissingModules to mark certain files as temporary, // to prevent them from being added to scanner.outputFiles. const fakeSymbol = Symbol("fake"); -// Default handlers for well-known file extensions. -// Note that these function expect strings, not Buffer objects. -const defaultExtensionHandlers = { - ".js"(dataString) { - // Strip any #! line from the beginning of the file. - return dataString.replace(/^#![^\n]*/, ""); - }, +const emptyDataString = ""; +const emptyData = Buffer.from(emptyDataString, "utf8"); +const emptyHash = sha1(emptyDataString); - ".json"(dataString) { - const file = this; - file.jsonData = JSON.parse(dataString); +function stripHashBang(dataString: string) { + return dataString.replace(/^#![^\n]*/, ""); +} + +const reifyCompileWithCache = Profile("reifyCompileWithCache", wrap(function ( + source, + _hash, + bundleArch, + cacheFilePath, +) { + if (cacheFilePath) { + try { + return readFile(cacheFilePath, "utf8"); + } catch (e) { + if (e.code !== "ENOENT") throw e; + } + } + + const isLegacy = isLegacyArch(bundleArch); + let result = reifyCompile(stripHashBang(source), { + parse: reifyBabelParse, + generateLetDeclarations: !isLegacy, + avoidModernSyntax: isLegacy, + enforceStrictMode: false, + dynamicImport: true, + ast: false, + }).code; + + if (cacheFilePath) { + Promise.resolve().then( + () => writeFileAtomically(cacheFilePath, result), + ); + } + + return result; +}, { + makeCacheKey(_source, hash, bundleArch) { + return JSON.stringify([hash, bundleArch]); + } +})); + +class DefaultHandlers { + private cacheDir?: string; + private bundleArch: string; + + constructor({ + cacheDir, + bundleArch, + }: Record) { + this.bundleArch = bundleArch; + if (cacheDir) { + mkdir_p(this.cacheDir = pathJoin( + cacheDir, + bundleArch, + )); + } + } + + getCacheFileName(file: RawFile) { + return this.cacheDir && pathJoin(this.cacheDir, "reify-" + file.hash + ".js"); + } + + call( + method: "js" | "mjs" | "json" | "css", + file: RawFile, + ): string { + return this[method](file); + } + + js(file: RawFile) { + const parts = file.absPath.split("/"); + const nmi = parts.lastIndexOf("node_modules"); + if (nmi >= 0) { + const nextPart = parts[nmi + 1]; + // The core-js package is one example of a package that does not + // need recompilation to support import/export syntax. Since it is + // used heavily by the ecmascript-runtime-{client,server} Meteor + // packages, it makes sense to hard-code this exception. + if (nextPart === "core-js") { + return stripHashBang(file.dataString); + } + } + + const cacheFileName = this.cacheDir ? + this.getCacheFileName(file) : + null; + + return reifyCompileWithCache( + file.dataString, + file.hash, + this.bundleArch, + cacheFileName + ) + } + + // Files with an .mjs extension are just JavaScript plus module syntax. + mjs(file: RawFile) { + return this.js(file); + } + + json(file: RawFile) { + file.jsonData = JSON.parse(file.dataString); return jsonDataToCommonJS(file.jsonData); - }, + } - ".css"(dataString, hash) { + css({ dataString, hash }: RawFile) { return cssToCommonJS(dataString, hash); } -}; +} -function jsonDataToCommonJS(data) { +[ + "js", + "json", + "css", +].forEach(function (this: any, type: string) { + this[type] = Profile("DefaultHandlers." + type, this[type]); +}, DefaultHandlers.prototype); + +function jsonDataToCommonJS(data: any) { return "module.exports = " + JSON.stringify(data, null, 2) + ";\n"; } @@ -83,7 +194,7 @@ function jsonDataToCommonJS(data) { // eviction logic. const scriptParseCache = Object.create(null); -function canBeParsedAsPlainJS(dataString, hash) { +function canBeParsedAsPlainJS(dataString: string, hash: string): boolean { if (hash && has(scriptParseCache, hash)) { return scriptParseCache[hash]; } @@ -101,7 +212,7 @@ function canBeParsedAsPlainJS(dataString, hash) { return result; } -function stripLeadingSlash(path) { +function stripLeadingSlash(path?: string) { if (typeof path === "string" && path.charAt(0) === "/") { return path.slice(1); @@ -110,7 +221,7 @@ function stripLeadingSlash(path) { return path; } -function ensureLeadingSlash(path) { +function ensureLeadingSlash(path?: string) { if (typeof path !== "string") { return path; } @@ -124,26 +235,49 @@ function ensureLeadingSlash(path) { return posix; } +const Status = { + NOT_IMPORTED: false, + DYNAMIC: 'dynamic', + STATIC: 'static', +}; + // Files start with file.imported === false. As we scan the dependency // graph, a file can get promoted to "dynamic" or "static" to indicate // that it has been imported by other modules. The "dynamic" status trumps // false, and "static" trumps both "dynamic" and false. A file can never // be demoted to a lower status after it has been promoted. -const importedStatusOrder = [false, "dynamic", "static"]; +const importedStatusOrder = [ + Status.NOT_IMPORTED, + Status.DYNAMIC, + Status.STATIC, +]; // Set each file.imported status to the maximum status of provided files. -function alignImportedStatuses(...files) { +function alignImportedStatuses(...files: File[]) { const maxIndex = Math.max(...files.map( file => importedStatusOrder.indexOf(file.imported))); const maxStatus = importedStatusOrder[maxIndex]; files.forEach(file => file.imported = maxStatus); } +function getParentStatus(importInfos: ImportInfo[]) { + return importInfos.some(entry => !entry.parentWasDynamic) + ? Status.STATIC + : Status.DYNAMIC; +} + +function isHigherStatus( + newStatus: string | boolean, + previousStatus: string | boolean, +) { + return importedStatusOrder.indexOf(newStatus) > + importedStatusOrder.indexOf(previousStatus); +} + // Set file.imported to status if status has a higher index than the // current value of file.imported. -function setImportedStatus(file, status) { - if (importedStatusOrder.indexOf(status) > - importedStatusOrder.indexOf(file.imported)) { +function setImportedStatus(file: File, status: string | boolean) { + if (isHigherStatus(status, file.imported)) { file.imported = status; } } @@ -155,11 +289,12 @@ function setImportedStatus(file, status) { // The cache can be global because findImportedModuleIdentifiers // is a pure function, and that way it applies across instances // of ImportScanner (which do not persist across builds). +const LRU = require("lru-cache"); const IMPORT_SCANNER_CACHE = new LRU({ max: 1024*1024, - length(ids) { + length(ids: Record) { let total = 40; // size of key - each(ids, (info, id) => { total += id.length; }); + each(ids, (_info, id) => { total += id.length; }); return total; } }); @@ -169,34 +304,104 @@ const IMPORT_SCANNER_CACHE = new LRU({ // calling module.useNode() immediately, but it's important that we have // something to include in the bundle so that parent modules have // something to resolve. -const useNodeStub = { - dataString: "module.useNode();", - deps: Object.create(null), -}; -useNodeStub.data = Buffer.from(useNodeStub.dataString, "utf8"); -useNodeStub.hash = sha1(useNodeStub.data); +const useNodeStub: Omit = function () { + const dataString = "module.useNode();"; + const data = Buffer.from(dataString, "utf8"); + return { + type: "js", + data, + dataString, + hash: sha1(data), + deps: Object.create(null), + }; +}(); + +export type ImportScannerOptions = { + name: string; + bundleArch: string; + extensions: string[]; + sourceRoot: string; + nodeModulesPaths: string[]; + cacheDir: string; +} + +interface RawFile { + absPath: string; + data: Buffer; + dataString: string; + hash: string; + jsonData?: Record; +} + +interface File extends RawFile { + type: string; + sourcePath: string; + targetPath?: string; + servePath?: string; + absModuleId?: string; + deps?: Record; + lazy: boolean; + bare?: boolean; + // TODO Improve the sourceMap type. + sourceMap?: Record; + implicit?: boolean; + imported: string | boolean; + [fakeSymbol]?: boolean; + reportPendingErrors?: () => number; + hasErrors?: boolean; + missingModules?: Record; + alias?: FileAlias; +} + +type FileAlias = { + path: string; + absModuleId?: string | false; +} + +type MissingMap = Record; +// TODO Get this type from js-analyze.ts (after converting from .js). +type ImportInfo = { + dynamic: boolean; + possiblySpurious: boolean; + parentPath: string; + bundleArch?: string; + packageName?: string; + parentWasDynamic?: boolean; + helpers?: Record; +} export default class ImportScanner { + public name: string; + + private bundleArch: string; + private sourceRoot: string; + private nodeModulesPaths: string[]; + private defaultHandlers: DefaultHandlers; + private resolver: Resolver; + + private absPathToOutputIndex: Record = Object.create(null); + private realPathToFiles: Record = Object.create(null); + private realPathCache: Record = Object.create(null); + private allMissingModules: MissingMap = Object.create(null); + private outputFiles: File[] = []; + constructor({ name, bundleArch, extensions, sourceRoot, nodeModulesPaths = [], - watchSet, - }) { - assert.ok(isString(sourceRoot)); - + cacheDir, + }: ImportScannerOptions) { this.name = name; this.bundleArch = bundleArch; this.sourceRoot = sourceRoot; this.nodeModulesPaths = nodeModulesPaths; - this.watchSet = watchSet; - this.absPathToOutputIndex = Object.create(null); - this.realPathToFiles = Object.create(null); - this.realPathCache = Object.create(null); - this.allMissingModules = Object.create(null); - this.outputFiles = []; + + this.defaultHandlers = new DefaultHandlers({ + cacheDir, + bundleArch, + }); this.resolver = Resolver.getOrCreate({ caller: "ImportScanner#constructor", @@ -215,7 +420,7 @@ export default class ImportScanner { return stat; } - const file = this._getFile(absPath); + const file = this.getFile(absPath); if (file) { return fakeFileStat; } @@ -224,14 +429,15 @@ export default class ImportScanner { }; } - _getFile(absPath) { + private getFile(absPath: string): File | null { absPath = absPath.toLowerCase(); if (has(this.absPathToOutputIndex, absPath)) { return this.outputFiles[this.absPathToOutputIndex[absPath]]; } + return null; } - _addFile(absPath, file) { + private addFile(absPath: string, file: File): File | null { if (! file || file[fakeSymbol]) { // Return file without adding it to this.outputFiles. return file; @@ -264,40 +470,40 @@ export default class ImportScanner { return file; } + + return null; } - addInputFiles(files) { + addInputFiles(files: File[]) { files.forEach(file => { - this._checkSourceAndTargetPaths(file); + this.checkSourceAndTargetPaths(file); // Note: this absolute path may not necessarily exist on the file // system, but any import statements or require calls in file.data // will be interpreted relative to this path, so it needs to be // something plausible. #6411 #6383 - const absPath = pathJoin(this.sourceRoot, file.sourcePath); + file.absPath = pathJoin(this.sourceRoot, file.sourcePath); // This property can have values false, true, "dynamic" (which // indicates that the file has been imported, but only dynamically). file.imported = false; - file.absModuleId = file.absModuleId || this._getAbsModuleId(absPath); + file.absModuleId = file.absModuleId || + this.getAbsModuleId(file.absPath); - if (! this._addFile(absPath, file)) { + if (! this.addFile(file.absPath, file)) { // Collisions can happen if a compiler plugin calls addJavaScript // multiple times with the same sourcePath. #6422 - this._combineFiles(this._getFile(absPath), file); + this.combineFiles(this.getFile(file.absPath)!, file); } - this._addFileByRealPath(file, this._realPath(absPath)); + this.addFileByRealPath(file, this.realPath(file.absPath)); }); return this; } - _addFileByRealPath(file, realPath) { - assert.ok(isObject(file)); - assert.strictEqual(typeof realPath, "string"); - + private addFileByRealPath(file: File, realPath: string) { if (! has(this.realPathToFiles, realPath)) { this.realPathToFiles[realPath] = []; } @@ -311,13 +517,13 @@ export default class ImportScanner { return file; } - _getInfoByRealPath(realPath) { - assert.strictEqual(typeof realPath, "string"); + private getInfoByRealPath(realPath: string): RawFile | null { const files = this.realPathToFiles[realPath]; if (files && files.length > 0) { const firstFile = files[0]; - const dataString = this._getDataString(firstFile); + const dataString = this.getDataString(firstFile); return { + absPath: realPath, data: firstFile.data, dataString: dataString, hash: firstFile.hash, @@ -326,7 +532,7 @@ export default class ImportScanner { return null; } - _realPath(absPath) { + private realPath(absPath: string) { if (has(this.realPathCache, absPath)) { return this.realPathCache[absPath]; } @@ -372,8 +578,8 @@ export default class ImportScanner { // Make sure file.sourcePath is defined, and handle the possibility that // file.targetPath differs from file.sourcePath. - _checkSourceAndTargetPaths(file) { - file.sourcePath = this._getSourcePath(file); + private checkSourceAndTargetPaths(file: File) { + file.sourcePath = this.getSourcePath(file); if (! isString(file.targetPath)) { return; @@ -385,28 +591,29 @@ export default class ImportScanner { const absSourcePath = pathJoin(this.sourceRoot, file.sourcePath); const absTargetPath = pathJoin(this.sourceRoot, file.targetPath); - const absSourceId = this._getAbsModuleId(absSourcePath); - const absTargetId = this._getAbsModuleId(absTargetPath); + const absSourceId = this.getAbsModuleId(absSourcePath); + const absTargetId = this.getAbsModuleId(absTargetPath); + + if (!absSourceId || !absTargetId) { + return; + } // If file.targetPath differs from file.sourcePath, generate a new // file object with that .sourcePath that imports the original file. // This allows either the .sourcePath or the .targetPath to be used // when importing the original file, and also allows multiple files // to have the same .sourcePath but different .targetPaths. - let sourceFile = this._getFile(absSourcePath); - if (! sourceFile) { - sourceFile = this._addFile(absSourcePath, { - type: file.type, - sourcePath: file.sourcePath, - servePath: stripLeadingSlash(absSourceId), - absModuleId: absSourceId, - dataString: "", - deps: {}, - lazy: true, - imported: false, - implicit: true, - }); - } + const sourceFile = this.getFile(absSourcePath) || this.addFile(absSourcePath, { + ...file, + servePath: stripLeadingSlash(absSourceId), + absModuleId: absSourceId, + data: emptyData, + dataString: emptyDataString, + deps: Object.create(null), + lazy: true, + imported: false, + implicit: true, + })!; // Make sure the original file gets installed at the target path // instead of the source path. @@ -420,7 +627,7 @@ export default class ImportScanner { return; } - const relativeId = this._getRelativeImportId( + const relativeId = this.getRelativeImportId( absSourceId, absTargetId, ); @@ -440,17 +647,18 @@ export default class ImportScanner { // plugin calling inputFile.addJavaScript multiple times for the // same source file (see discussion in #9176), with different target // paths, code, laziness, etc. - sourceFile.dataString = this._getDataString(sourceFile) + + sourceFile.dataString = this.getDataString(sourceFile) + // The + in "*+" indicates that the "default" property should be // included as well as any other re-exported properties. "module.link(" + JSON.stringify(relativeId) + ', { "*": "*+" });\n'; sourceFile.data = Buffer.from(sourceFile.dataString, "utf8"); sourceFile.hash = sha1(sourceFile.data); - sourceFile.deps[relativeId] = { - absModuleId: file.absModuleId, + sourceFile.deps = sourceFile.deps || Object.create(null); + sourceFile.deps![relativeId] = { + dynamic: false, possiblySpurious: false, - dynamic: false + parentPath: absSourcePath, }; } } @@ -458,16 +666,16 @@ export default class ImportScanner { // Concatenate the contents of oldFile and newFile, combining source // maps and updating all other properties appropriately. Once this // combination is done, oldFile should be kept and newFile discarded. - _combineFiles(oldFile, newFile) { + private combineFiles(oldFile: File, newFile: File) { const scanner = this; - function checkProperty(name) { + function checkProperty(name: "lazy" | "bare") { if (has(oldFile, name)) { if (! has(newFile, name)) { - newFile[name] = oldFile[name]; + newFile[name] = oldFile[name]!; } } else if (has(newFile, name)) { - oldFile[name] = newFile[name]; + oldFile[name] = newFile[name]!; } if (oldFile[name] !== newFile[name]) { @@ -489,15 +697,18 @@ export default class ImportScanner { checkProperty("lazy"); checkProperty("bare"); - function getChunk(file) { - const consumer = file.sourceMap && - new SourceMapConsumer(file.sourceMap); - const node = consumer && - SourceNode.fromStringWithSourceMap( - scanner._getDataString(file), + function getChunk(file: File) { + if (file.sourceMap) { + const consumer = Promise.await(new SourceMapConsumer(file.sourceMap)); + const node = SourceNode.fromStringWithSourceMap( + scanner.getDataString(file), consumer ); - return node || scanner._getDataString(file); + consumer.destroy(); + return node; + } else { + return scanner.getDataString(file); + } } const { @@ -518,22 +729,22 @@ export default class ImportScanner { alignImportedStatuses(oldFile, newFile); oldFile.sourceMap = combinedSourceMap.toJSON(); - if (! oldFile.sourceMap.mappings) { - oldFile.sourceMap = null; + if (! oldFile.sourceMap!.mappings) { + oldFile.sourceMap = void 0; } } scanImports() { this.outputFiles.forEach(file => { if (! file.lazy) { - this._scanFile(file); + this.scanFile(file); } }); return this; } - scanMissingModules(missingModules) { + scanMissingModules(missingModules: MissingMap) { assert.ok(missingModules); assert.ok(typeof missingModules === "object"); assert.ok(! Array.isArray(missingModules)); @@ -546,8 +757,8 @@ export default class ImportScanner { this.allMissingModules = newlyMissing; Object.keys(missingModules).forEach(id => { - let staticImportInfo = null; - let dynamicImportInfo = null; + let staticImportInfo: ImportInfo | null = null; + let dynamicImportInfo: ImportInfo | null = null; // Although it would be logically valid to call this._scanFile for // each and every importInfo object, there can be a lot of them @@ -567,23 +778,33 @@ export default class ImportScanner { return staticImportInfo && dynamicImportInfo; }); + const fakeStub = { + type: "js", + sourcePath: "fake.js", + absPath: pathJoin(this.sourceRoot, "fake.js"), + data: emptyData, + dataString: emptyDataString, + hash: emptyHash, + [fakeSymbol]: true, + imported: false, + lazy: true, + } + if (staticImportInfo) { - this._scanFile({ - sourcePath: "fake.js", - [fakeSymbol]: true, + this.scanFile({ + ...fakeStub, // By specifying the .deps property of this fake file ahead of // time, we can avoid calling findImportedModuleIdentifiers in // the _scanFile method, which is important because this file // doesn't have a .data or .dataString property. - deps: { [id]: staticImportInfo } + deps: { [id]: staticImportInfo }, }, false); // !forDynamicImport } if (dynamicImportInfo) { - this._scanFile({ - sourcePath: "fake.js", - [fakeSymbol]: true, - deps: { [id]: dynamicImportInfo } + this.scanFile({ + ...fakeStub, + deps: { [id]: dynamicImportInfo }, }, true); // forDynamicImport } }); @@ -602,7 +823,12 @@ export default class ImportScanner { // newlyMissing and merge the new identifiers back into // this.allMissingModules. Object.keys(newlyMissing).forEach(id => { - if (has(previousAllMissingModules, id)) { + const skipScan = has(previousAllMissingModules, id) && + !isHigherStatus( + getParentStatus(newlyMissing[id]), + getParentStatus(previousAllMissingModules[id])); + + if (skipScan) { delete newlyMissing[id]; } else { ImportScanner.mergeMissing( @@ -623,7 +849,7 @@ export default class ImportScanner { // concatenating values (which must be arrays) if a property already // exists. The array elements should be importInfo objects, and will be // deduplicated according to their .parentPath properties. - static mergeMissing(target, source) { + static mergeMissing(target: MissingMap, source: MissingMap) { keys(source).forEach(id => { const importInfoList = source[id]; const pathToIndex = Object.create(null); @@ -653,7 +879,7 @@ export default class ImportScanner { }); } - _mergeFilesWithSameRealPath() { + private mergeFilesWithSameRealPath() { Object.keys(this.realPathToFiles).forEach(realPath => { const files = this.realPathToFiles[realPath]; if (! files || files.length < 2) { @@ -684,18 +910,20 @@ export default class ImportScanner { } }); + const absContainerPath = pathJoin(this.sourceRoot, container.sourcePath); + // Alias every non-container file to container.absModuleId. files.forEach(file => { if (file !== container) { - file.alias = file.alias || {}; - file.alias.absModuleId = container.absModuleId; + file.alias = file.alias || { path: absContainerPath }; + file.alias!.absModuleId = container.absModuleId; } }); }); } getOutputFiles() { - this._mergeFilesWithSameRealPath(); + this.mergeFilesWithSameRealPath(); // Return all installable output files that are either eager or // imported (statically or dynamically). @@ -707,16 +935,16 @@ export default class ImportScanner { }); } - _getSourcePath(file) { + private getSourcePath(file: File) { let sourcePath = file.sourcePath; if (sourcePath) { if (pathIsAbsolute(sourcePath)) { + let relPath: string | undefined; try { - var relPath = pathRelative(this.sourceRoot, sourcePath); - + relPath = pathRelative(this.sourceRoot, sourcePath); } finally { if (! relPath || relPath.startsWith("..")) { - if (this.resolver._joinAndStat(this.sourceRoot, sourcePath)) { + if (this.resolver.joinAndStat(this.sourceRoot, sourcePath)) { // If sourcePath exists as a path relative to this.sourceRoot, // strip away the leading / that made it look absolute. return pathNormalize(pathJoin(".", sourcePath)); @@ -738,20 +966,22 @@ export default class ImportScanner { } else if (file.servePath) { sourcePath = convertToOSPath(file.servePath.replace(/^\//, "")); - } else if (file.path) { - sourcePath = file.path; + } else if ((file as any).path) { + sourcePath = (file as any).path; } return pathNormalize(pathJoin(".", sourcePath)); } - _findImportedModuleIdentifiers(file) { + private findImportedModuleIdentifiers( + file: File, + ): Record { if (IMPORT_SCANNER_CACHE.has(file.hash)) { return IMPORT_SCANNER_CACHE.get(file.hash); } const result = findImportedModuleIdentifiers( - this._getDataString(file), + this.getDataString(file), file.hash, ); @@ -763,30 +993,34 @@ export default class ImportScanner { return result; } - _resolve(parentFile, id, forDynamicImport = false) { + private resolve( + parentFile: File, + id: string, + forDynamicImport = false, + ): Resolution | FileAlias { const absPath = pathJoin(this.sourceRoot, parentFile.sourcePath); const resolved = this.resolver.resolve(id, absPath); if (resolved === "missing") { - return this._onMissing(parentFile, id, forDynamicImport); + return this.onMissing(parentFile, id, forDynamicImport); } if (resolved && resolved.packageJsonMap) { - const info = parentFile.deps[id]; + const info = parentFile.deps![id]; info.helpers = info.helpers || {}; each(resolved.packageJsonMap, (pkg, path) => { const packageJsonFile = - this._addPkgJsonToOutput(path, pkg, forDynamicImport); + this.addPkgJsonToOutput(path, pkg, forDynamicImport); - if (! parentFile.absModuleId) { + if (! parentFile.absModuleId || ! packageJsonFile.absModuleId) { // If parentFile is not installable, then we won't return it // from getOutputFiles, so we don't need to worry about // recording any parentFile.deps[id].helpers. return; } - const relativeId = this._getRelativeImportId( + const relativeId = this.getRelativeImportId( parentFile.absModuleId, packageJsonFile.absModuleId ); @@ -794,7 +1028,7 @@ export default class ImportScanner { // Although not explicitly imported, any package.json modules // involved in resolving this import should be recorded as // implicit "helpers." - info.helpers[relativeId] = forDynamicImport; + info.helpers![relativeId] = forDynamicImport; }); // Any relevant package.json files must have already been added via @@ -802,9 +1036,9 @@ export default class ImportScanner { // .alias. In other words, the Resolver is responsible for including // relevant package.json files in resolved.packageJsonMap so that // they can be handled by the loop above. - const file = this._getFile(resolved.path); + const file = this.getFile(resolved.path); if (file && file.alias) { - setImportedStatus(file, forDynamicImport ? "dynamic" : "static"); + setImportedStatus(file, forDynamicImport ? Status.DYNAMIC : Status.STATIC); return file.alias; } } @@ -812,7 +1046,7 @@ export default class ImportScanner { return resolved; } - _getRelativeImportId(absParentId, absChildId) { + private getRelativeImportId(absParentId: string, absChildId: string) { const relativeId = posixRelative( posixDirname(absParentId), absChildId @@ -828,7 +1062,7 @@ export default class ImportScanner { return relativeId; } - _scanFile(file, forDynamicImport = false) { + private scanFile(file: File, forDynamicImport = false) { if (file.imported === "static") { // If we've already scanned this file non-dynamically, then we don't // need to scan it again. @@ -836,14 +1070,14 @@ export default class ImportScanner { } if (forDynamicImport && - file.imported === "dynamic") { + file.imported === Status.DYNAMIC) { // If we've already scanned this file dynamically, then we don't // need to scan it dynamically again. return; } // Set file.imported to a truthy value (either "dynamic" or true). - setImportedStatus(file, forDynamicImport ? "dynamic" : "static"); + setImportedStatus(file, forDynamicImport ? Status.DYNAMIC : Status.STATIC); if (file.reportPendingErrors && file.reportPendingErrors() > 0) { @@ -855,10 +1089,10 @@ export default class ImportScanner { } try { - file.deps = file.deps || this._findImportedModuleIdentifiers(file); + file.deps = file.deps || this.findImportedModuleIdentifiers(file); } catch (e) { if (e.$ParseError) { - buildmessage.error(e.message, { + (buildmessage as any).error(e.message, { file: file.sourcePath, line: e.loc.line, column: e.loc.column, @@ -868,7 +1102,7 @@ export default class ImportScanner { throw e; } - each(file.deps, (info, id) => { + each(file.deps, (info: ImportInfo, id: string) => { // Asynchronous module fetching only really makes sense in the // browser (even though it works equally well on the server), so // it's better if forDynamicImport never becomes true on the server. @@ -877,13 +1111,13 @@ export default class ImportScanner { info.parentWasDynamic || info.dynamic); - const resolved = this._resolve(file, id, dynamic); - const absImportedPath = resolved && resolved.path; + const resolved = this.resolve(file, id, dynamic); + const absImportedPath = resolved && resolved !== "missing" && resolved.path; if (! absImportedPath) { return; } - let depFile = this._getFile(absImportedPath); + let depFile = this.getFile(absImportedPath); if (depFile) { // We should never have stored a fake file in this.outputFiles, so // it's surprising if depFile[fakeSymbol] is true. @@ -892,9 +1126,10 @@ export default class ImportScanner { // If the module is an implicit package.json stub, update to the // explicit version now. if (depFile.jsonData && + depFile.absModuleId && depFile.absModuleId.endsWith("/package.json") && depFile.implicit === true) { - const file = this._readPackageJson(absImportedPath); + const file = this.readPackageJson(absImportedPath); if (file) { depFile.implicit = false; Object.assign(depFile, file); @@ -904,21 +1139,21 @@ export default class ImportScanner { // If depFile has already been scanned, this._scanFile will return // immediately thanks to the depFile.imported-checking logic at // the top of the method. - this._scanFile(depFile, dynamic); + this.scanFile(depFile, dynamic); return; } - depFile = this._readDepFile(absImportedPath); + depFile = this.readDepFile(absImportedPath); if (! depFile) { return; } // Append this file to the output array and record its index. - this._addFile(absImportedPath, depFile); + this.addFile(absImportedPath, depFile); // Recursively scan the module's imported dependencies. - this._scanFile(depFile, dynamic); + this.scanFile(depFile, dynamic); }); } @@ -931,37 +1166,38 @@ export default class ImportScanner { return archMatches(this.bundleArch, "web.browser"); } - _getDataString(file) { + private getDataString(file: File) { if (typeof file.dataString === "string") { return file.dataString; } - const dotExt = "." + file.type; - const dataString = file.data.toString("utf8"); - file.dataString = defaultExtensionHandlers[dotExt].call( - file, - dataString, - file.hash, - ); + const rawDataString = file.data.toString("utf8"); + if (file.type === "js") { + // Avoid compiling .js file with Reify when all we want is a string + // version of file.data. + file.dataString = stripHashBang(rawDataString); + } else { + file.dataString = rawDataString; + file.dataString = this.defaultHandlers.call(file.type as any, file); + } if (! (file.data instanceof Buffer) || - file.dataString !== dataString) { + file.dataString !== rawDataString) { file.data = Buffer.from(file.dataString, "utf8"); } return file.dataString; } - _readFile(absPath) { - const info = { - data: optimisticReadFile(absPath), - hash: optimisticHashOrNull(absPath), + private readFile(absPath: string) { + const data = optimisticReadFile(absPath) as Buffer; + const info: RawFile = { + absPath, + data, + dataString: data.toString("utf8"), + hash: optimisticHashOrNull(absPath)!, }; - this.watchSet.addFile(absPath, info.hash); - - info.dataString = info.data.toString("utf8"); - // Same logic/comment as stripBOM in node/lib/module.js: // Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) // because the buffer-to-string conversion in `fs.readFileSync()` @@ -975,9 +1211,9 @@ export default class ImportScanner { return info; } - _readPackageJson(absPath) { + private readPackageJson(absPath: string) { try { - var info = this._readFile(absPath); + var info = this.readFile(absPath); } catch (e) { if (e.code !== "ENOENT") throw e; return null; @@ -1003,10 +1239,10 @@ export default class ImportScanner { return info; } - _readModule(absPath) { - let ext = pathExtname(absPath).toLowerCase(); + private readModule(absPath: string): RawFile | null { + const dotExt = pathExtname(absPath).toLowerCase(); - if (ext === ".node") { + if (dotExt === ".node") { const dataString = "throw new Error(" + JSON.stringify( this.isWeb() ? "cannot load native .node modules on the client" @@ -1016,11 +1252,11 @@ export default class ImportScanner { const data = Buffer.from(dataString, "utf8"); const hash = sha1(data); - return { data, dataString, hash }; + return { absPath, data, dataString, hash }; } try { - var info = this._readFile(absPath); + var info = this.readFile(absPath); } catch (e) { if (e.code !== "ENOENT") throw e; return null; @@ -1028,20 +1264,16 @@ export default class ImportScanner { const dataString = info.dataString; - if (! has(defaultExtensionHandlers, ext)) { - if (canBeParsedAsPlainJS(dataString)) { - ext = ".js"; + let ext = dotExt.slice(1); + if (! has(DefaultHandlers.prototype, ext)) { + if (canBeParsedAsPlainJS(dataString, info.hash)) { + ext = "js"; } else { return null; } } - info.dataString = defaultExtensionHandlers[ext].call( - info, - info.dataString, - info.hash, - ); - + info.dataString = this.defaultHandlers.call(ext as any, info); if (info.dataString !== dataString) { info.data = Buffer.from(info.dataString, "utf8"); } @@ -1049,17 +1281,17 @@ export default class ImportScanner { return info; } - _readDepFile(absPath) { - const absModuleId = this._getAbsModuleId(absPath); + private readDepFile(absPath: string): File | null { + const absModuleId = this.getAbsModuleId(absPath); if (! absModuleId) { // The given path cannot be installed on this architecture. return null; } - const realPath = this._realPath(absPath); + const realPath = this.realPath(absPath); - let depFile = this._getInfoByRealPath(realPath); - if (depFile) { + let rawFile = this.getInfoByRealPath(realPath); + if (rawFile) { // If we already have a file with the same real path, use its data // rather than reading the file again, or generating a stub. This // logic enables selective compilation of node_modules in an elegant @@ -1070,56 +1302,51 @@ export default class ImportScanner { // raw version found in node_modules. See also: // https://github.com/meteor/meteor-feature-requests/issues/6 - } else if (this._shouldUseNode(absModuleId)) { + } else if (this.shouldUseNode(absModuleId, absPath)) { // On the server, modules in node_modules directories will be // handled natively by Node, so we just need to generate a stub // module that calls module.useNode(), rather than calling // this._readModule to read the actual module file. Note that // useNodeStub includes an empty .deps property, which will make // this._scanFile(depFile, dynamic) return immediately. - depFile = { ...useNodeStub }; - - // If optimistic functions care about this file, e.g. because it - // resides in a linked npm package, then we should allow it to - // be watched even though we are replacing it with a stub that - // merely calls module.useNode(). - if (shouldWatch(absPath)) { - this.watchSet.addFile( - absPath, - optimisticHashOrNull(absPath), - ); - } + rawFile = { + ...useNodeStub, + absPath, + }; } else { - depFile = absModuleId.endsWith("/package.json") - ? this._readPackageJson(absPath) - : this._readModule(absPath); + rawFile = absModuleId.endsWith("/package.json") + ? this.readPackageJson(absPath) + : this.readModule(absPath); // If the module is not readable, _readModule may return null. // Otherwise it will return { data, dataString, hash }. - if (! depFile) { + if (! rawFile) { return null; } } - depFile.type = "js"; // TODO Is this correct? - depFile.sourcePath = pathRelative(this.sourceRoot, absPath); - depFile.absModuleId = absModuleId; - depFile.servePath = stripLeadingSlash(absModuleId); - depFile.lazy = true; - // Setting depFile.imported = false is necessary so that - // this._scanFile(depFile, dynamic) doesn't think the file has been - // scanned already and return immediately. - depFile.imported = false; + const depFile: File = { + ...rawFile, + type: "js", + sourcePath: pathRelative(this.sourceRoot, absPath), + absModuleId, + servePath: stripLeadingSlash(absModuleId), + lazy: true, + // Setting depFile.imported = false is necessary so that + // this._scanFile(depFile, dynamic) doesn't think the file has been + // scanned already and return immediately. + imported: false, + }; - this._addFileByRealPath(depFile, realPath); + this.addFileByRealPath(depFile, realPath); return depFile; } // Similar to logic in Module.prototype.useNode as defined in // packages/modules-runtime/server.js. Introduced to fix issue #10122. - _shouldUseNode(absModuleId) { + private shouldUseNode(absModuleId: string, absPath: string) { if (this.isWeb()) { // Node should never be used in a browser, obviously. return false; @@ -1139,19 +1366,56 @@ export default class ImportScanner { start += 2; } - // If the remaining parts include node_modules, then this is a module - // that was installed by npm, and it should be evaluated by Node on - // the server. - return parts.indexOf("node_modules", start) >= 0; + // If the remaining parts do not include node_modules, then this + // module was not installed by npm, so we should not try to evaluate + // it natively in Node on the server. + if (parts.indexOf("node_modules", start) < 0) { + return false; + } + + // Below this point, we know we're dealing with a module in + // node_modules, which means we should try to use module.useNode() to + // evaluate the module natively in Node, except if the module is an + // ESM module, because then the module cannot be imported using + // require (as of Node 12.16.0), so module.useNode() will not work. + + const dotExt = pathExtname(absPath).toLowerCase(); + + if (dotExt === ".mjs") { + // Although few npm packages actually use .mjs, Node will always + // interpret these files as ESM modules, so we can return early. + return false; + } + + if (dotExt === ".json") { + // There's no benefit to using Node to evaluate JSON modules, since + // there's nothing Node-specific about the parsing of JSON. + return false; + } + + if (dotExt === ".js") { + const relDir = pathRelative(this.sourceRoot, pathDirname(absPath)); + const pkgJsonArray = + optimisticLookupPackageJsonArray(this.sourceRoot, relDir); + // Setting "type":"module" in package.json makes Node treat .js + // files within the package as ESM modules. + if (pkgJsonArray.some(pkgJson => pkgJson?.type === "module")) { + return false; + } + } + + // Everything else (.node, .wasm, whatever) needs to be handled + // natively by Node. + return true; } // Returns an absolute module identifier indicating where to install the // given file via meteorInstall. May return undefined if the file should // not be installed on the current architecture. - _getAbsModuleId(absPath) { + private getAbsModuleId(absPath: string) { let path = - this._getNodeModulesAbsModuleId(absPath) || - this._getSourceRootAbsModuleId(absPath); + this.getNodeModulesAbsModuleId(absPath) || + this.getSourceRootAbsModuleId(absPath); if (! path) { return; @@ -1172,29 +1436,30 @@ export default class ImportScanner { return ensureLeadingSlash(path); } - _getNodeModulesAbsModuleId(absPath) { - let absModuleId; + private getNodeModulesAbsModuleId(absPath: string) { + let absModuleId: string | undefined; this.nodeModulesPaths.some(path => { const relPathWithinNodeModules = pathRelative(path, absPath); if (relPathWithinNodeModules.startsWith("..")) { // absPath is not a subdirectory of path. - return; + return false; } // Install the module into the local node_modules directory within // this app or package. - return absModuleId = pathJoin( + absModuleId = pathJoin( "node_modules", relPathWithinNodeModules ); + return true; }); - return ensureLeadingSlash(absModuleId); + return absModuleId && ensureLeadingSlash(absModuleId); } - _getSourceRootAbsModuleId(absPath) { + private getSourceRootAbsModuleId(absPath: string) { const relPath = pathRelative(this.sourceRoot, absPath); if (relPath.startsWith("..")) { @@ -1252,7 +1517,11 @@ export default class ImportScanner { } // Called by this.resolver when a module identifier cannot be resolved. - _onMissing(parentFile, id, forDynamicImport = false) { + private onMissing( + parentFile: File, + id: string, + forDynamicImport = false, + ): Resolution | FileAlias { const isApp = ! this.name; const absParentPath = pathJoin( this.sourceRoot, @@ -1266,18 +1535,18 @@ export default class ImportScanner { // a dependency on meteor-node-stubs/deps/.js. const stubId = Resolver.getNativeStubId(id); if (isString(stubId) && stubId !== id) { - const info = parentFile.deps[id]; + const info = parentFile.deps![id]; // Although not explicitly imported, any stubs associated with // this native import should be recorded as implicit "helpers." info.helpers = info.helpers || {}; info.helpers[stubId] = forDynamicImport; - return this._resolve(parentFile, stubId, forDynamicImport); + return this.resolve(parentFile, stubId, forDynamicImport); } } - const info = { + const info: ImportInfo = { packageName: this.name, parentPath: absParentPath, bundleArch: this.bundleArch, @@ -1321,25 +1590,34 @@ export default class ImportScanner { this.allMissingModules, { [id]: [info] } ); + + return null; } - _addPkgJsonToOutput(pkgJsonPath, pkg, forDynamicImport = false) { - const file = this._getFile(pkgJsonPath); + private addPkgJsonToOutput( + pkgJsonPath: string, + pkg: Record, + forDynamicImport = false, + ): File { + const file = this.getFile(pkgJsonPath); if (file) { // If the file already exists, just update file.imported according // to the forDynamicImport parameter. - setImportedStatus(file, forDynamicImport ? "dynamic" : "static"); + setImportedStatus(file, forDynamicImport ? Status.DYNAMIC : Status.STATIC); return file; } - const data = Buffer.from(jsonDataToCommonJS(pkg), "utf8"); + const dataString = jsonDataToCommonJS(pkg); + const data = Buffer.from(dataString, "utf8"); const relPkgJsonPath = pathRelative(this.sourceRoot, pkgJsonPath); - const absModuleId = this._getAbsModuleId(pkgJsonPath); + const absModuleId = this.getAbsModuleId(pkgJsonPath); - const pkgFile = { + const pkgFile: File = { type: "js", // We represent the JSON module with JS. + absPath: pkgJsonPath, data, + dataString, jsonData: pkg, deps: {}, // Avoid accidentally re-scanning this file. sourcePath: relPkgJsonPath, @@ -1347,7 +1625,7 @@ export default class ImportScanner { servePath: stripLeadingSlash(absModuleId), hash: sha1(data), lazy: true, - imported: forDynamicImport ? "dynamic" : "static", + imported: forDynamicImport ? Status.DYNAMIC : Status.STATIC, // Since _addPkgJsonToOutput is only ever called for package.json // files that are involved in resolving package directories, and pkg // is only a subset of the information in the actual package.json @@ -1357,29 +1635,24 @@ export default class ImportScanner { implicit: true, }; - this._addFile(pkgJsonPath, pkgFile); + this.addFile(pkgJsonPath, pkgFile); - const hash = optimisticHashOrNull(pkgJsonPath); - if (hash) { - this.watchSet.addFile(pkgJsonPath, hash); - } - - this._resolvePkgJsonBrowserAliases(pkgFile, forDynamicImport); + this.resolvePkgJsonBrowserAliases(pkgFile); return pkgFile; } - _resolvePkgJsonBrowserAliases(pkgFile, forDynamicImport = false) { + private resolvePkgJsonBrowserAliases(pkgFile: File) { if (! this.isWeb()) { return; } - const browser = pkgFile.jsonData.browser; + const browser = pkgFile.jsonData!.browser; if (! isObject(browser)) { return; } - const deps = pkgFile.deps; + const deps = pkgFile.deps || (pkgFile.deps = Object.create(null)); const absPkgJsonPath = pathJoin(this.sourceRoot, pkgFile.sourcePath); Object.keys(browser).forEach(sourceId => { @@ -1391,16 +1664,20 @@ export default class ImportScanner { return; } - const file = this._getFile(source.path); + const file = this.getFile(source.path); if (file && file.alias) { // If we previously set an .alias for this file, assume it is // complete and return early. return; } - const sourceAbsModuleId = this._getAbsModuleId(source.path); + const sourceAbsModuleId = this.getAbsModuleId(source.path); + if (! sourceAbsModuleId || ! pkgFile.absModuleId) { + return; + } + const hasAuthorityToCreateAlias = - this._areAbsModuleIdsInSamePackage( + this.areAbsModuleIdsInSamePackage( pkgFile.absModuleId, sourceAbsModuleId ); @@ -1412,7 +1689,10 @@ export default class ImportScanner { } const targetId = browser[sourceId]; - const alias = {}; + const alias: FileAlias = { + path: source.path, + absModuleId: sourceAbsModuleId, + }; if (typeof targetId === "string") { deps[targetId] = deps[targetId] || {}; @@ -1422,8 +1702,14 @@ export default class ImportScanner { return; } + // Ignore useless self-referential browser aliases, to fix + // https://github.com/meteor/meteor/issues/10409. + if (target.id === source.id) { + return; + } + Object.assign(alias, target); - alias.absModuleId = this._getAbsModuleId(target.path); + alias.absModuleId = this.getAbsModuleId(target.path); } else if (targetId === false) { // This is supposed to indicate the alias refers to an empty stub. @@ -1438,10 +1724,13 @@ export default class ImportScanner { } else { const relSourcePath = pathRelative(this.sourceRoot, source.path); - this._addFile(source.path, { + this.addFile(source.path, { + type: "js", alias, - data: Buffer.from("", "utf8"), - dataString: "", + absPath: absPkgJsonPath, + data: emptyData, + dataString: emptyDataString, + hash: emptyHash, sourcePath: relSourcePath, absModuleId: sourceAbsModuleId, servePath: stripLeadingSlash(sourceAbsModuleId), @@ -1453,7 +1742,7 @@ export default class ImportScanner { }); } - _areAbsModuleIdsInSamePackage(path1, path2) { + private areAbsModuleIdsInSamePackage(path1: string, path2: string) { if (! (isString(path1) && isString(path2))) { return false; } @@ -1462,7 +1751,7 @@ export default class ImportScanner { assert.strictEqual(path1.charAt(0), "/"); assert.strictEqual(path2.charAt(0), "/"); - function getPackageRoot(path) { + function getPackageRoot(path: string) { const parts = path.split("/"); assert.strictEqual(parts[0], ""); const nmi = parts.lastIndexOf("node_modules"); @@ -1473,15 +1762,15 @@ export default class ImportScanner { } } -const ISp = ImportScanner.prototype; +const ISp = ImportScanner.prototype as any; -[ "_addPkgJsonToOutput", - "_findImportedModuleIdentifiers", - "_getAbsModuleId", - "_readFile", - "_realPath", - "_resolve", - "_resolvePkgJsonBrowserAliases", +[ "addPkgJsonToOutput", + "findImportedModuleIdentifiers", + "getAbsModuleId", + "readFile", + "realPath", + "resolve", + "resolvePkgJsonBrowserAliases", // We avoid profiling _scanFile here because it doesn't typically have // much "own time," and it gets called recursively, resulting in deeply // nested METEOR_PROFILE output, which often obscures actual problems. @@ -1495,7 +1784,7 @@ const ISp = ImportScanner.prototype; "scanImports", "scanMissingModules", ].forEach(name => { - ISp[name] = Profile(function (...args) { + ISp[name] = Profile(function (this: ImportScanner) { return `ImportScanner#${name} for ${this.name || "the app"}`; }, ISp[name]); }); diff --git a/tools/isobuild/isopack-cache.js b/tools/isobuild/isopack-cache.js index f7c8dbc00c..06e27fd5de 100644 --- a/tools/isobuild/isopack-cache.js +++ b/tools/isobuild/isopack-cache.js @@ -2,12 +2,12 @@ var _ = require('underscore'); var buildmessage = require('../utils/buildmessage.js'); var compiler = require('./compiler.js'); -var files = require('../fs/files.js'); +var files = require('../fs/files'); var isopackModule = require('./isopack.js'); -var watch = require('../fs/watch.js'); +var watch = require('../fs/watch'); var colonConverter = require('../utils/colon-converter.js'); -var Profile = require('../tool-env/profile.js').Profile; -var archinfo = require('../utils/archinfo.js'); +var Profile = require('../tool-env/profile').Profile; +var archinfo = require('../utils/archinfo'); import { requestGarbageCollection } from "../utils/gc.js"; export class IsopackCache { diff --git a/tools/isobuild/isopack.js b/tools/isobuild/isopack.js index 037e5c398e..696ff87154 100644 --- a/tools/isobuild/isopack.js +++ b/tools/isobuild/isopack.js @@ -1,13 +1,14 @@ var assert = require('assert'); var compiler = require('./compiler.js'); -var archinfo = require('../utils/archinfo.js'); +var archinfo = require('../utils/archinfo'); var _ = require('underscore'); var linker = require('./linker.js'); var buildmessage = require('../utils/buildmessage.js'); import Builder from './builder.js'; var bundler = require('./bundler.js'); -var watch = require('../fs/watch.js'); -var files = require('../fs/files.js'); +var watch = require('../fs/watch'); +import * as files from '../fs/files'; +import * as fsFixPath from '../fs/fsFixPath'; import { ISOPACKETS, makeIsopacketBuildContext, @@ -16,7 +17,7 @@ var colonConverter = require('../utils/colon-converter.js'); var utils = require('../utils/utils.js'); var buildPluginModule = require('./build-plugin.js'); var Console = require('../console/console.js').Console; -var Profile = require('../tool-env/profile.js').Profile; +var Profile = require('../tool-env/profile').Profile; import { requestGarbageCollection } from "../utils/gc.js"; import { Unibuild } from "./unibuild.js"; @@ -805,7 +806,7 @@ _.extend(Isopack.prototype, { extname: files.pathExtname, sep: files.pathSep }, - fs: files.fsFixPath + fs: fsFixPath, }; return Plugin; }, @@ -1409,33 +1410,33 @@ _.extend(Isopack.prototype, { !f.match(/^examples\/unfinished/); }); - // Regexes matching paths to transpile using babel - var transpileRegexes = [ - /^tools\/[^\/]+\.js$/, // General tools files - /^tools\/isobuild\/[^\/]+\.js$/, // Isobuild files - /^tools\/cli\/[^\/]+\.js$/, // CLI files - /^tools\/tool-env\/[^\/]+\.js$/, // Tool initiation and clean up - /^tools\/runners\/[^\/]+\.js$/, // Parts of tool process - /^tools\/packaging\/[^\/]+\.js$/, - /^tools\/packaging\/catalog\/[^\/]+\.js$/, - /^tools\/utils\/[^\/]+\.js$/, - /^tools\/fs\/[^\/]+\.js$/, - /^tools\/meteor-services\/[^\/]+\.js$/, - /^tools\/tool-testing\/[^\/]+\.js$/, - /^tools\/console\/[^\/]+\.js$/, - /^tools\/cordova\/[^\/]+\.js$/, - // We don't support running self-test from an install anymore - ]; + function shouldTranspile(path) { + const parts = path.split("/"); + if (parts[0] === "tools" && + (path.endsWith(".js") || path.endsWith(".ts"))) { + if (path.endsWith(".d.ts")) { + // The official TypeScript compiler's transpileModule function fails + // for .d.ts declaration files with the cryptic error "Error: Debug + // Failure. Output generation failed". + return false; + } + if (parts[1] === "static-assets") { + return parts[2] === "server"; + } + if (parts[1] !== "node_modules" && + parts[1] !== "tests") { + return true; + } + } + return false; + } // Split pathsToCopy into two arrays - one of files that should be copied // directly, and one of files that should be transpiled with Babel var pathsToTranspile = []; var pathsToCopyStraight = []; - pathsToCopy.forEach((path) => { - var shouldTranspile = - _.some(transpileRegexes, (regex) => path.match(regex)); - - if (shouldTranspile) { + pathsToCopy.forEach(path => { + if (shouldTranspile(path)) { pathsToTranspile.push(path); } else { pathsToCopyStraight.push(path); @@ -1446,52 +1447,10 @@ _.extend(Isopack.prototype, { var toolPath = 'mt-' + archinfo.host(); builder = builder.enter(toolPath); - // Transpile the files we selected - var babel = require("meteor-babel"); - pathsToTranspile.forEach((path) => { - const toolsDir = files.getCurrentToolsDir(); - const fullPath = files.convertToOSPath(files.pathJoin(toolsDir, path)); - let inputFileContents = files.readFile(fullPath, "utf-8"); - const babelCacheDirectory = - files.pathJoin(files.pathDirname(toolsDir), ".babel-cache"); - - // #RemoveInProd - // We don't actually want to load the babel auto-transpiler when we are - // in a Meteor installation where everything is already transpiled for us. - // Therefore, strip out that line in main.js - if (path === "tools/tool-env/install-babel.js" || - path === "tools/tool-env/source-map-retriever-stack.js") { - inputFileContents = inputFileContents.replace(/^.*#RemoveInProd.*$/mg, ""); - } - - var babelOptions = babel.getDefaultOptions({ - nodeMajorVersion: parseInt(process.versions.node) - }); - - _.extend(babelOptions, { - filename: path, - sourceFileName: "/" + path, - sourceMaps: true - }); - - var transpiled = babel.compile(inputFileContents, babelOptions, { - cacheDirectory: babelCacheDirectory, - }); - - var sourceMapUrlComment = "//# sourceMappingURL=" + files.pathBasename(path + ".map"); - - builder.write(path, { - data: Buffer.from(transpiled.code + "\n" + sourceMapUrlComment, 'utf8') - }); - - // The babelOptions.sourceMapTarget option was deprecated in Babel - // 7.0.0-beta.41: https://github.com/babel/babel/pull/7500 - const sourceMapTarget = path + ".map"; - transpiled.map.file = sourceMapTarget; - - builder.write(sourceMapTarget, { - data: Buffer.from(JSON.stringify(transpiled.map), 'utf8') - }); + const sourceRootDir = files.getCurrentToolsDir(); + builder.copyTranspiledModules(pathsToTranspile, { + sourceRootDir, + needToTranspile: true, }); var gitSha = utils.runGitInCheckout('rev-parse', 'HEAD'); diff --git a/tools/isobuild/js-analyze.js b/tools/isobuild/js-analyze.js index 88d13490d4..04cac3fd5a 100644 --- a/tools/isobuild/js-analyze.js +++ b/tools/isobuild/js-analyze.js @@ -46,7 +46,7 @@ function tryToParse(source, hash) { /** * The `findImportedModuleIdentifiers` function takes a string of module * source code and returns a map from imported module identifiers to AST - * nodes. The keys of this map are used in ./import-scanner.js to traverse + * nodes. The keys of this map are used in ./import-scanner.ts to traverse * the module dependency graph. The AST nodes are generally ignored. * * The implementation uses a regular expression to scan quickly for diff --git a/tools/isobuild/linker.js b/tools/isobuild/linker.js index 7a569f2e10..2450ca09f7 100644 --- a/tools/isobuild/linker.js +++ b/tools/isobuild/linker.js @@ -1,12 +1,12 @@ var _ = require('underscore'); var sourcemap = require('source-map'); var buildmessage = require('../utils/buildmessage.js'); -var watch = require('../fs/watch.js'); -var Profile = require('../tool-env/profile.js').Profile; +var watch = require('../fs/watch'); +var Profile = require('../tool-env/profile').Profile; import assert from 'assert'; import LRU from 'lru-cache'; import { sourceMapLength } from '../utils/utils.js'; -import files from '../fs/files.js'; +import files from '../fs/files'; import { findAssignedGlobals } from './js-analyze.js'; import { convert as convertColons } from '../utils/colon-converter.js'; @@ -21,6 +21,10 @@ const APP_PRELINK_CACHE = new LRU({ return prelinked.source.length + sourceMapLength(prelinked.sourceMap); } }); +// Caches code with source map for dynamic files +const DYNAMIC_PRELINKED_OUTPUT_CACHE = new LRU({ + max: Math.pow(2, 11) +}); var packageDot = function (name) { if (/^[a-zA-Z][a-zA-Z0-9]*$/.exec(name)) { @@ -122,7 +126,10 @@ _.extend(Module.prototype, { return _.map(eagerFiles, function (file) { const cacheKey = JSON.stringify([ - file.sourceHash, file.bare, file.servePath]); + file._inputHash, + file.bare, + file.servePath, + ]); if (APP_PRELINK_CACHE.has(cacheKey)) { return APP_PRELINK_CACHE.get(cacheKey); @@ -146,7 +153,8 @@ _.extend(Module.prototype, { source: results.code, sourcePath: file.sourcePath, servePath: file.servePath, - sourceMap: sourceMap + sourceMap: sourceMap, + hash: file._inputHash, }; APP_PRELINK_CACHE.set(cacheKey, prelinked); @@ -164,6 +172,9 @@ _.extend(Module.prototype, { // .sourceMap, and (optionally) .exportsName properties before being // returned from this method in a singleton array. servePath: self.combinedServePath, + hash: watch.sha1( + JSON.stringify(self.files.map(file => file._inputHash)) + ), }; const results = [result]; @@ -264,11 +275,7 @@ _.extend(Module.prototype, { if (file.isDynamic()) { const servePath = files.pathJoin("dynamic", file.absModuleId); const { code: source, map } = - file.getPrelinkedOutput({ - sourceWidth: sourceWidth, - }).toStringWithSourceMap({ - file: servePath, - }); + getOutputWithSourceMapCached(file, servePath, { sourceWidth }) results.push({ source, @@ -292,6 +299,7 @@ _.extend(Module.prototype, { } tryMain("browser"); + tryMain("module"); tryMain("main"); stubArray.push(stub); @@ -550,7 +558,7 @@ function File(inputFile, module) { // hash of source (precalculated for *.js files, calculated here for files // produced by plugins) - self.sourceHash = inputFile.hash || watch.sha1(self.source); + self._inputHash = inputFile.hash || watch.sha1(self.source); // The path of the source file, relative to the root directory of the // package or application. @@ -637,7 +645,7 @@ _.extend(File.prototype, { } try { - return _.keys(findAssignedGlobals(self.source, self.sourceHash)); + return _.keys(findAssignedGlobals(self.source, self._inputHash)); } catch (e) { if (!e.$ParseError) { throw e; @@ -649,7 +657,7 @@ _.extend(File.prototype, { column: e.column }; if (self.sourceMap) { - var parsed = new sourcemap.SourceMapConsumer(self.sourceMap); + var parsed = Promise.await(new sourcemap.SourceMapConsumer(self.sourceMap)); var original = parsed.originalPositionFor( {line: e.lineNumber, column: e.column - 1}); if (original.source) { @@ -657,6 +665,7 @@ _.extend(File.prototype, { errorOptions.line = original.line; errorOptions.column = original.column + 1; } + parsed.destroy(); } buildmessage.error(e.message, errorOptions); @@ -664,7 +673,7 @@ _.extend(File.prototype, { // Recover by pretending that this file is empty (which // includes replacing its source code with '' in the output) self.source = ""; - self.sourceHash = watch.sha1(self.source); + self._inputHash = watch.sha1(self.source); self.sourceMap = null; return []; } @@ -676,7 +685,7 @@ _.extend(File.prototype, { _getClosureHeader() { if (this.meteorInstallOptions) { - const headerParts = ["function("]; + const headerParts = ["function module("]; if (this.source.match(/\b__dirname\b/)) { headerParts.push("require,exports,module,__filename,__dirname"); @@ -771,10 +780,12 @@ const getPrelinkedOutputCached = require("optimism").wrap( let chunk = result.code; if (result.map) { + const sourcemapConsumer = Promise.await(new sourcemap.SourceMapConsumer(result.map)); chunk = sourcemap.SourceNode.fromStringWithSourceMap( result.code, - new sourcemap.SourceMapConsumer(result.map), + sourcemapConsumer, ); + sourcemapConsumer.destroy(); } chunks.push(chunk); @@ -805,14 +816,17 @@ const getPrelinkedOutputCached = require("optimism").wrap( } return new sourcemap.SourceNode(null, null, null, chunks); - }, { // Store at most 4096 Files worth of prelinked output in this cache. max: Math.pow(2, 12), makeCacheKey(file, options) { + if (options.disableCache) { + return; + } + return JSON.stringify({ - sourceHash: file.sourceHash, + hash: file._inputHash, arch: file.module.bundleArch, bare: file.bare, servePath: file.servePath, @@ -822,6 +836,32 @@ const getPrelinkedOutputCached = require("optimism").wrap( } ); +function getOutputWithSourceMapCached(file, servePath, options) { + const key = JSON.stringify({ + hash: file._inputHash, + arch: file.module.bundleArch, + bare: file.bare, + servePath: file.servePath, + dynamic: file.isDynamic(), + options, + }); + + if (DYNAMIC_PRELINKED_OUTPUT_CACHE.has(key)) { + return DYNAMIC_PRELINKED_OUTPUT_CACHE.get(key); + } + + const result = file.getPrelinkedOutput({ + ...options, + disableCache: true + }).toStringWithSourceMap({ + file: servePath, + }); + + DYNAMIC_PRELINKED_OUTPUT_CACHE.set(key, result); + + return result; +} + // Given a list of lines (not newline-terminated), returns a string placing them // in a pretty banner of width bannerWidth. All lines must have length at most // (bannerWidth - 6); if bannerWidth is not provided, the smallest width that diff --git a/tools/isobuild/meteor-npm.js b/tools/isobuild/meteor-npm.js index a13a477754..33ab0ea3b6 100644 --- a/tools/isobuild/meteor-npm.js +++ b/tools/isobuild/meteor-npm.js @@ -6,16 +6,17 @@ var assert = require('assert'); var cleanup = require('../tool-env/cleanup.js'); var fs = require('fs'); -var files = require('../fs/files.js'); +var files = require('../fs/files'); var os = require('os'); var _ = require('underscore'); var httpHelpers = require('../utils/http-helpers.js'); var buildmessage = require('../utils/buildmessage.js'); var utils = require('../utils/utils.js'); var runLog = require('../runners/run-log.js'); -var Profile = require('../tool-env/profile.js').Profile; +var Profile = require('../tool-env/profile').Profile; +import { parse } from "semver"; import { version as npmVersion } from 'npm'; -import { execFileAsync } from "../utils/processes.js"; +import { execFileAsync } from "../utils/processes"; import { get as getRebuildArgs } from "../static-assets/server/npm-rebuild-args.js"; @@ -30,7 +31,7 @@ import { optimisticStatOrNull, optimisticReadJsonOrNull, optimisticReaddir, -} from "../fs/optimistic.js"; +} from "../fs/optimistic"; var meteorNpm = exports; @@ -239,8 +240,6 @@ function recordLastRebuildVersions(pkgDir) { // Returns true iff isSubtreeOf(currentVersions, versions), allowing // valid semantic versions to differ in their patch versions. function versionsAreCompatible(versions) { - import { parse } from "semver"; - return isSubtreeOf(currentVersions, versions, (a, b) => { // Technically already handled by isSubtreeOf, but doesn't hurt. if (a === b) { @@ -343,21 +342,27 @@ Profile("meteorNpm.rebuildIfNonPortable", function (nodeModulesDir) { // directory paths. const tempPkgDirs = {}; - dirsToRebuild.forEach(function (pkgPath) { + dirsToRebuild.splice(0).forEach(pkgPath => { const tempPkgDir = tempPkgDirs[pkgPath] = files.pathJoin( tempNodeModules, files.pathRelative(nodeModulesDir, pkgPath) ); - // Copy the package directory instead of renaming it, so that the - // original package will be left untouched if the rebuild fails. We - // could just run files.cp_r(pkgPath, tempPkgDir) here, except that we - // want to handle nested node_modules directories specially. - copyNpmPackageWithSymlinkedNodeModules(pkgPath, tempPkgDir); + // It's possible the pkgPath directory may have been deleted since we + // did the scan above: https://circleci.com/gh/meteor/meteor/31330 + if (isDirectory(pkgPath)) { + // Copy the package directory instead of renaming it, so that the + // original package will be left untouched if the rebuild fails. We + // could just run files.cp_r(pkgPath, tempPkgDir) here, except that we + // want to handle nested node_modules directories specially. + copyNpmPackageWithSymlinkedNodeModules(pkgPath, tempPkgDir); - // Record the current process.versions so that we can avoid - // copying/rebuilding/renaming next time. - recordLastRebuildVersions(tempPkgDir); + // Record the current process.versions so that we can avoid + // copying/rebuilding/renaming next time. + recordLastRebuildVersions(tempPkgDir); + + dirsToRebuild.push(pkgPath); + } }); // The `npm rebuild` command must be run in the parent directory of the @@ -478,8 +483,9 @@ const isPortable = Profile("meteorNpm.isPortable", dir => { const pkgJsonPath = files.pathJoin(dir, "package.json"); const pkgJsonStat = optimisticStatOrNull(pkgJsonPath); const canCache = pkgJsonStat && pkgJsonStat.isFile(); - const portableFile = files.pathJoin( - dir, ".meteor-portable-" + portableVersion + ".json"); + const portableFile = files.convertToOSPath( + files.pathJoin(dir, ".meteor-portable-" + portableVersion + ".json") + ); if (canCache) { // Cache previous results by writing a boolean value to a hidden file @@ -1047,20 +1053,6 @@ var getShrinkwrappedDependencies = function (dir) { return treeToDependencies(getShrinkwrappedDependenciesTree(dir)); }; -const moduleDoesResolve = meteorNpm.moduleDoesResolve = (dep) => { - try { - require.resolve(dep); - } catch (e) { - if (e.code !== 'MODULE_NOT_FOUND') { - throw e; - } - - return false; - } - - return true; -}; - const installNpmModule = meteorNpm.installNpmModule = (name, version, dir) => { const installArg = utils.isNpmUrl(version) ? version @@ -1073,7 +1065,7 @@ const installNpmModule = meteorNpm.installNpmModule = (name, version, dir) => { if (! result.success) { const pkgNotFound = - `404 Not Found: ${utils.quotemeta(name)}@${utils.quotemeta(version)}`; + `404 Not Found - GET ${utils.quotemeta("https://registry.npmjs.org/"+name)}`; const versionNotFound = "No matching version found for " + diff --git a/tools/isobuild/npm-discards.js b/tools/isobuild/npm-discards.js index dabac02d9f..b895a1cec0 100644 --- a/tools/isobuild/npm-discards.js +++ b/tools/isobuild/npm-discards.js @@ -1,5 +1,5 @@ var assert = require("assert"); -var files = require('../fs/files.js'); +var files = require('../fs/files'); var _ = require("underscore"); // This class encapsulates a structured specification of files and diff --git a/tools/isobuild/package-api.js b/tools/isobuild/package-api.js index 4fff4a2d8c..ec6fcb401f 100644 --- a/tools/isobuild/package-api.js +++ b/tools/isobuild/package-api.js @@ -3,7 +3,7 @@ var _ = require("underscore"); var buildmessage = require('../utils/buildmessage.js'); var utils = require('../utils/utils.js'); var compiler = require('./compiler.js'); -var archinfo = require('../utils/archinfo.js'); +var archinfo = require('../utils/archinfo'); var catalog = require('../packaging/catalog/catalog.js'); // It's important that we import these functions individually instead of @@ -12,7 +12,7 @@ var catalog = require('../packaging/catalog/catalog.js'); import { pathRelative, convertToPosixPath, -} from "../fs/files.js"; +} from "../fs/files"; function toArray (x) { if (_.isArray(x)) { @@ -31,7 +31,7 @@ function toArchArray(arch) { arch.splice(0).forEach(where => { if (seen[where]) return; seen[where] = true; - arch.push(...mapWhereToArches(where)); + arch.push(...archinfo.mapWhereToArches(where)); }); // avoid using _.each so as to not add more frames to skip @@ -50,34 +50,6 @@ function toArchArray(arch) { return arch; } -export function mapWhereToArches(where) { - const arches = []; - - // Shorthands for common arch prefixes: - // "server" => os.* - // "client" => web.* - // "legacy" => web.browser.legacy, web.cordova - if (where === "server") { - arches.push("os"); - } else if (where === "client") { - arches.push("web"); - } else if (where === "legacy") { - arches.push( - "web.browser.legacy", - // It's important to include web.browser.legacy resources in the - // Cordova bundle, since Cordova bundles are built into the mobile - // application, rather than being downloaded from a web server at - // runtime. This means we can't distinguish between clients at - // runtime, so we have to use code that works for all clients. - "web.cordova" - ); - } else { - arches.push(where); - } - - return arches; -} - // Iterates over the list of target archs and calls f(arch) for all archs // that match an element of self.allarchs. function forAllMatchingArchs (archs, f) { diff --git a/tools/isobuild/package-cordova.js b/tools/isobuild/package-cordova.js index 730fcf002a..98fcdc7dff 100644 --- a/tools/isobuild/package-cordova.js +++ b/tools/isobuild/package-cordova.js @@ -20,7 +20,7 @@ export class PackageCordova { * [plugins.cordova.io](http://plugins.cordova.io/), so the plugins and * versions specified must exist there. Alternatively, the version * can be replaced with a GitHub tarball URL as described in the - * [Cordova](https://guide.meteor.com/mobile.html#cordova-plugins) + * [Cordova](https://guide.meteor.com/cordova.html#cordova-plugins) * page of the Meteor wiki on GitHub. * @param {Object} dependencies An object where the keys are plugin * names and the values are version numbers or GitHub tarball URLs diff --git a/tools/isobuild/package-namespace.js b/tools/isobuild/package-namespace.js index 094979b926..e37e61838f 100644 --- a/tools/isobuild/package-namespace.js +++ b/tools/isobuild/package-namespace.js @@ -1,5 +1,5 @@ import { each, size, compact } from "underscore"; -import { inCheckout } from "../fs/files.js"; +import { inCheckout } from "../fs/files"; import buildmessage from "../utils/buildmessage.js"; import packageVersionParser from "../packaging/package-version-parser.js"; diff --git a/tools/isobuild/package-source.js b/tools/isobuild/package-source.js index b84de6e307..253c5fda18 100644 --- a/tools/isobuild/package-source.js +++ b/tools/isobuild/package-source.js @@ -1,17 +1,17 @@ var _ = require('underscore'); var sourcemap = require('source-map'); -var files = require('../fs/files.js'); +var files = require('../fs/files'); var utils = require('../utils/utils.js'); -var watch = require('../fs/watch.js'); +var watch = require('../fs/watch'); var buildmessage = require('../utils/buildmessage.js'); var meteorNpm = require('./meteor-npm.js'); import Builder from './builder.js'; -var archinfo = require('../utils/archinfo.js'); +var archinfo = require('../utils/archinfo'); var catalog = require('../packaging/catalog/catalog.js'); var packageVersionParser = require('../packaging/package-version-parser.js'); var compiler = require('./compiler.js'); -var Profile = require('../tool-env/profile.js').Profile; +var Profile = require('../tool-env/profile').Profile; import SourceArch from './source-arch.js'; import { PackageNamespace } from "./package-namespace.js"; @@ -22,7 +22,8 @@ import { PackageAPI } from "./package-api.js"; import { TEST_FILENAME_REGEXPS, APP_TEST_FILENAME_REGEXPS, - isTestFilePath } from './test-files.js'; + isTestFilePath, +} from './test-files'; import { convert as convertColonsInPath @@ -33,7 +34,8 @@ import { optimisticHashOrNull, optimisticStatOrNull, optimisticReadMeteorIgnore, -} from "../fs/optimistic.js"; + optimisticLookupPackageJsonArray, +} from "../fs/optimistic"; // XXX: This is a medium-term hack, to avoid having the user set a package name // & test-name in package.describe. We will change this in the new control file @@ -77,6 +79,9 @@ var loadOrderSort = function (sourceProcessorSet, arch) { }); return function (a, b) { + const aBasename = files.pathBasename(a); + const bBasename = files.pathBasename(b); + // XXX MODERATELY SIZED HACK -- // push template files ahead of everything else. this is // important because the user wants to be able to say @@ -85,15 +90,15 @@ var loadOrderSort = function (sourceProcessorSet, arch) { // before the corresponding .html file. // // maybe all of the templates should go in one file? - var isTemplate_a = isTemplate(files.pathBasename(a)); - var isTemplate_b = isTemplate(files.pathBasename(b)); + var isTemplate_a = isTemplate(aBasename); + var isTemplate_b = isTemplate(bBasename); if (isTemplate_a !== isTemplate_b) { return (isTemplate_a ? -1 : 1); } // main.* loaded last - var ismain_a = (files.pathBasename(a).indexOf('main.') === 0); - var ismain_b = (files.pathBasename(b).indexOf('main.') === 0); + var ismain_a = (aBasename.indexOf('main.') === 0); + var ismain_b = (bBasename.indexOf('main.') === 0); if (ismain_a !== ismain_b) { return (ismain_a ? 1 : -1); } @@ -211,14 +216,44 @@ var getExcerptFromReadme = function (text) { class SymlinkLoopChecker { constructor(sourceRoot) { this.sourceRoot = sourceRoot; + this._realSourceRoot = files.realpath(sourceRoot); this._seenPaths = {}; + this._cache = new Map(); } + // Avoids running realpath unless necessary + // since it is relatively slow on windows + _realpath = Profile('_realpath', function (relDir) { + const absPath = files.pathJoin(this._realSourceRoot, relDir); + + if (files.lstat(absPath).isSymbolicLink()) { + const result = files.realpath(absPath); + this._cache.set(relDir, result); + + return result; + } + + let result; + const parentDir = files.pathDirname(relDir); + const parentEntry = this._cache.get(parentDir); + if (parentDir === '.') { + result = absPath; + } else if (parentEntry) { + result = files.pathJoin(parentEntry, files.pathBasename(relDir)); + } else { + // The parent dir was never checked, which prevents us from + // skipping realpath + result = files.realpath(absPath); + } + + this._cache.set(relDir, result); + return result; + }) + check(relDir, quietly = true) { - const absPath = files.pathJoin(this.sourceRoot, relDir); try { - var realPath = files.realpath(absPath); + var realPath = this._realpath(relDir); } catch (e) { if (!e || e.code !== 'ELOOP') { throw e; @@ -424,6 +459,9 @@ _.extend(PackageSource.prototype, { sourceRoot: self.sourceRoot, uses: _.map(options.use, splitConstraint), getFiles() { + // TODO We might want to call _findSources here, if we want plugins to + // be able to import compiled files that were not explicitly included in + // the sources array passed to Package.registerBuildPlugin. return { sources: sources } @@ -453,7 +491,11 @@ _.extend(PackageSource.prototype, { // - name: override the name of this package with a different name. // - buildingIsopackets: true if this is being scanned in the process // of building isopackets - initFromPackageDir: Profile("PackageSource#initFromPackageDir", function (dir, options) { + initFromPackageDir: Profile((dir, options) => { + return `PackageSource#initFromPackageDir for ${ + options?.name || dir.split(files.pathSep).pop() + }`; + }, function (dir, options) { var self = this; buildmessage.assertInCapture(); var isPortable = true; @@ -825,10 +867,21 @@ _.extend(PackageSource.prototype, { }), _readAndWatchDirectory(relDir, watchSet, {include, exclude, names}) { - return watch.readAndWatchDirectory(watchSet, { + const options = { absPath: files.pathJoin(this.sourceRoot, relDir), include, exclude, names - }).map(name => files.pathJoin(relDir, name)); + }; + + const contents = watch.readDirectory(options); + + if (watchSet) { + watchSet.addDirectory({ + contents, + ...options + }); + } + + return contents.map(name => files.pathJoin(relDir, name)); }, // Initialize a package from an application directory (has .meteor/packages). @@ -855,6 +908,9 @@ _.extend(PackageSource.prototype, { const testModulesByArch = projectContext.meteorConfig.getTestModulesByArch(); + const nodeModulesToRecompileByArch = + projectContext.meteorConfig.getNodeModulesToRecompileByArch(); + projectWatchSet.merge(projectContext.meteorConfig.watchSet); _.each(compiler.ALL_ARCHES, function (arch) { @@ -866,10 +922,13 @@ _.extend(PackageSource.prototype, { } const mainModule = projectContext.meteorConfig - .getMainModuleForArch(arch, mainModulesByArch); + .getMainModule(arch, mainModulesByArch); const testModule = projectContext.meteorConfig - .getTestModuleForArch(arch, testModulesByArch); + .getTestModule(arch, testModulesByArch); + + const nodeModulesToRecompile = projectContext.meteorConfig + .getNodeModulesToRecompile(arch, nodeModulesToRecompileByArch); // XXX what about /web.browser/* etc, these directories could also // be for specific client targets. @@ -890,6 +949,7 @@ _.extend(PackageSource.prototype, { ignoreFiles, isApp: true, testModule, + nodeModulesToRecompile, }; // If this architecture has a mainModule defined in @@ -1019,7 +1079,13 @@ _.extend(PackageSource.prototype, { if (dir === "node_modules") { fileOptions.lazy = true; - fileOptions.transpile = false; + + // We used to disable transpilation for modules within node_modules, + // mostly for build performance reasons, but now that we have a lazy + // compilation system, we no longer need to worry about build times + // for unused modules, which unlocks opportunities such as compiling + // ECMAScript import/export syntax in npm packages. + // fileOptions.transpile = false; // Return immediately so that we don't apply special meanings to // client or server directories inside node_modules directories. @@ -1077,17 +1143,19 @@ _.extend(PackageSource.prototype, { // complete list of source files for directories within node_modules. _findSourcesCache: Object.create(null), - _findSources: Profile("PackageSource#_findSources", function ({ + _findSources: Profile(({ sourceArch }) => `PackageSource#_findSources for ${sourceArch.arch}`, function ({ sourceProcessorSet, watchSet, isApp, sourceArch, testModule, + nodeModulesToRecompile = new Set, loopChecker = new SymlinkLoopChecker(this.sourceRoot), ignoreFiles = [] }) { const self = this; const arch = sourceArch.arch; + const isWeb = archinfo.matches(arch, "web"); const sourceReadOptions = sourceProcessorSet.appReadDirectoryOptions(arch); @@ -1102,15 +1170,6 @@ _.extend(PackageSource.prototype, { // Ignore the usual ignorable files. sourceReadOptions.exclude.push(...ignoreFiles); - // Unless we're running tests, ignore all test filenames and if we are, ignore the - // type of file we *aren't* running - if (!global.testCommandMetadata || global.testCommandMetadata.isTest) { - sourceReadOptions.exclude.push(...APP_TEST_FILENAME_REGEXPS); - } - if (!global.testCommandMetadata || global.testCommandMetadata.isAppTest) { - sourceReadOptions.exclude.push(...TEST_FILENAME_REGEXPS); - } - // Read top-level source files, excluding control files that were not // explicitly included. const controlFiles = ['mobile-config.js']; @@ -1121,17 +1180,63 @@ _.extend(PackageSource.prototype, { const anyLevelExcludes = []; - // If we have a meteor.testModule from package.json, then we don't - // need to exclude tests/ directories from the search, because we - // trust meteor.testModule to identify a single test entry point. - if (! testModule) { + if (testModule || !isApp) { + // If we have a meteor.testModule from package.json, then we don't + // need to exclude tests/ directories or *.tests.js files from the + // search, because we trust meteor.testModule to identify a single + // test entry point. Likewise, in packages (!isApp), test files are + // added explicitly, and thus do not need to be excluded here. + } else { anyLevelExcludes.push(/^tests\/$/); + + const { + isTest = false, + isAppTest = false, + } = global.testCommandMetadata || {}; + + if (isTest || isAppTest) { + // If we're running `meteor test` without the --full-app option, + // ignore app-test-only files like *.app-tests.js. + if (! isAppTest) { + sourceReadOptions.exclude.push( + ...APP_TEST_FILENAME_REGEXPS, + ); + } + + // If we're running `meteor test` with the --full-app option, + // ignore non-app-test files like *.tests.js. The wisdom of this + // behavior is debatable, since you might want to run non-app + // tests even when you're using the --full-app option, but it's + // legacy behavior at this point, and it doesn't matter if you're + // using meteor.testModule anyway (recommended). + if (! isTest) { + sourceReadOptions.exclude.push( + ...TEST_FILENAME_REGEXPS, + ); + } + + } else { + // If we're not running `meteor test` (and meteor.testModule is + // not defined in package.json), ignore all test files. + sourceReadOptions.exclude.push( + ...APP_TEST_FILENAME_REGEXPS, + ...TEST_FILENAME_REGEXPS, + ); + } + } + + if (isApp) { + // In the app, server/ directories are ignored by client builds, and + // client/ directories are ignored by server builds. In packages, + // these directories should not matter (#10393). + anyLevelExcludes.push( + archinfo.matches(arch, "os") + ? /^client\/$/ + : /^server\/$/ + ); } anyLevelExcludes.push( - archinfo.matches(arch, "os") - ? /^client\/$/ - : /^server\/$/, ...sourceReadOptions.exclude, ); @@ -1155,9 +1260,10 @@ _.extend(PackageSource.prototype, { const baseCacheKey = JSON.stringify({ isApp, - arch, sourceRoot: self.sourceRoot, excludes: anyLevelExcludes, + names: sourceReadOptions.names, + include: sourceReadOptions.include }, (key, value) => { if (_.isRegExp(value)) { return [value.source, value.flags]; @@ -1199,13 +1305,13 @@ _.extend(PackageSource.prototype, { return array; } - function find(dir, depth, inNodeModules) { + function find(dir, depth, { inNodeModules = false, cache = false } = {}) { // Remove trailing slash. dir = dir.replace(/\/$/, ""); // If we're in a node_modules directory, cache the results of the // find function for the duration of the process. - const cacheKey = inNodeModules && makeCacheKey(dir); + let cacheKey = inNodeModules && cache && makeCacheKey(dir); if (cacheKey && cacheKey in self._findSourcesCache) { return self._findSourcesCache[cacheKey]; @@ -1224,18 +1330,36 @@ _.extend(PackageSource.prototype, { } } - const readOptions = inNodeModules - ? nodeModulesReadOptions - : sourceReadOptions; + let readOptions = sourceReadOptions; + if (inNodeModules) { + // This is an array because (in some rare cases) an npm package + // may have nested package.json files with additional properties. + const pkgJsonArray = optimisticLookupPackageJsonArray(self.sourceRoot, dir); + + // If a package.json file with a "name" property is found, it will + // always be the first in the array. + const pkgJson = pkgJsonArray[0]; + + if (pkgJson && pkgJson.name && + nodeModulesToRecompile.has(pkgJson.name)) { + // Avoid caching node_modules code recompiled by Meteor. + cacheKey = false; + } else { + readOptions = nodeModulesReadOptions; + } + } const sources = _.difference( - self._readAndWatchDirectory(dir, watchSet, readOptions), + self._readAndWatchDirectory(dir, inNodeModules ? null : watchSet, readOptions), depth > 0 ? [] : controlFiles ); - const subdirectories = self._readAndWatchDirectory(dir, watchSet, { - include: [/\/$/], - exclude: depth > 0 + const subdirectories = self._readAndWatchDirectory( + dir, + inNodeModules ? null : watchSet, + { + include: [/\/$/], + exclude: depth > 0 ? anyLevelExcludes : topLevelExcludes }); @@ -1247,10 +1371,6 @@ _.extend(PackageSource.prototype, { subdirectories.forEach(subdir => { if (/(^|\/)node_modules\/$/.test(subdir)) { - if (! inNodeModules) { - sourceArch.localNodeModulesDirs[subdir] = true; - } - // Defer handling node_modules until after we handle all other // subdirectories, so that we know whether we need to descend // further. If sources is still empty after we handle everything @@ -1258,22 +1378,30 @@ _.extend(PackageSource.prototype, { // imported by anthing outside of it, so we can ignore it. nodeModulesDir = subdir; + // A "local" node_modules directory is one that's managed by the + // application developer using npm, rather than by Meteor using + // Npm.depends, which is available only in Meteor packages, and + // installs its dependencies into .npm/*/node_modules. Local + // node_modules directories may contain other nested node_modules + // directories, but we care about recording only the top-level + // node_modules directories here (hence !inNodeModules). + if (!inNodeModules && (isApp || !subdir.startsWith(".npm/"))) { + sourceArch.localNodeModulesDirs[subdir] = true; + } + } else { - sources.push(...find(subdir, depth + 1, inNodeModules)); + sources.push(...find(subdir, depth + 1, { inNodeModules, cache: !inNodeModules })); } }); - if (isApp && - nodeModulesDir && - (! inNodeModules || sources.length > 0)) { + if (nodeModulesDir && (!inNodeModules || sources.length > 0)) { // If we found a node_modules subdirectory above, and either we // are not already inside another node_modules directory or we // found source files elsewhere in this directory or its other - // subdirectories, and we're building an app (as opposed to a - // Meteor package), continue searching this node_modules - // directory, so that any non-.js(on) files it contains can be - // imported by the app (#6037). - sources.push(...find(nodeModulesDir, depth + 1, true)); + // subdirectories, continue searching this node_modules directory, + // so that any non-.js(on) files it contains can be imported by + // the app (#6037). + sources.push(...find(nodeModulesDir, depth + 1, { inNodeModules: true, cache: !inNodeModules})); } delete dotMeteorIgnoreFiles[dir]; diff --git a/tools/isobuild/resolver.js b/tools/isobuild/resolver.ts similarity index 65% rename from tools/isobuild/resolver.js rename to tools/isobuild/resolver.ts index bcfb717fa2..0092f20fb4 100644 --- a/tools/isobuild/resolver.js +++ b/tools/isobuild/resolver.ts @@ -1,13 +1,10 @@ import { isString, isObject, - isFunction, - each, has, } from "underscore"; -import { sha1 } from "../fs/watch.js"; -import { matches as archMatches } from "../utils/archinfo.js"; +import { matches as archMatches, isLegacyArch } from "../utils/archinfo"; import { pathJoin, pathRelative, @@ -16,28 +13,18 @@ import { pathBasename, convertToOSPath, convertToPosixPath, -} from "../fs/files.js"; - -import LRU from "lru-cache"; - +} from "../fs/files"; +import { Stats } from "fs"; import { wrap } from "optimism"; import { optimisticStatOrNull, optimisticReadJsonOrNull, -} from "../fs/optimistic.js"; +} from "../fs/optimistic"; -const nativeModulesMap = Object.create(null); -const nativeNames = Object.keys(process.binding("natives")); - -// Node 0.10 does not include process as a built-in module, but later -// versions of Node do, and we provide a stub for it on the client. -nativeNames.push("process"); - -nativeNames.forEach(id => { - if (id.startsWith("internal/")) { - return; - } +const nativeModulesMap: Record = Object.create(null); +const nativeNames = require('module').builtinModules; +nativeNames.forEach((id: string) => { // When a native Node module is imported, we register a dependency on a // meteor-node-stubs/deps/* module of the same name, so that the // necessary stub modules will be included in the bundle. This alternate @@ -46,34 +33,53 @@ nativeNames.forEach(id => { nativeModulesMap[id] = "meteor-node-stubs/deps/" + id; }); -const resolverCache = new LRU({ - max: Math.pow(2, 12) -}); +export type ResolverOptions = { + sourceRoot: string; + targetArch: string; + extensions: string[]; + nodeModulesPaths: string[]; + caller?: string; +} + +export type Resolution = { + stat: Stats; + path: string; + packageJsonMap?: Record>; + id?: string; +} | "missing" | null export default class Resolver { - static getOrCreate(options) { - const key = JSON.stringify(options); - let resolver = resolverCache.get(key); - if (! resolver) { - resolverCache.set(key, resolver = new Resolver(options)); + static getOrCreate = wrap(function (options: ResolverOptions) { + return new Resolver(options); + }, { + makeCacheKey(options) { + return JSON.stringify(options); } - return resolver; - } + }); + + private sourceRoot: string; + private targetArch: string; + private extensions: string[]; + private nodeModulesPaths: string[]; + private mainFields: string[]; + + public statOrNull = optimisticStatOrNull as (path: string) => Stats | null; constructor({ sourceRoot, targetArch, extensions = [".js", ".json"], nodeModulesPaths = [], - }) { + }: ResolverOptions) { this.sourceRoot = sourceRoot; this.extensions = extensions; this.targetArch = targetArch; this.nodeModulesPaths = nodeModulesPaths; this.statOrNull = optimisticStatOrNull; + const { resolve } = this; this.resolve = wrap((id, absParentPath) => { - return this._resolve(id, absParentPath); + return resolve.call(this, id, absParentPath); }, { makeCacheKey(id, absParentPath) { // Only the directory of the absParentPath matters for caching. @@ -81,39 +87,57 @@ export default class Resolver { } }); - this._cacheMethod("_findPkgJsonSubsetForPath"); - this._cacheMethod("_getPkgJsonSubsetForDir"); + const { + findPkgJsonSubsetForPath, + getPkgJsonSubsetForDir, + } = this; + + this.findPkgJsonSubsetForPath = wrap( + path => findPkgJsonSubsetForPath.call(this, path)); + + this.getPkgJsonSubsetForDir = wrap( + path => getPkgJsonSubsetForDir.call(this, path)); + + if (archMatches(this.targetArch, "web")) { + if (isLegacyArch(this.targetArch)) { + // The legacy bundle prefers the "main" field over the "module" + // field, since many npm packages ship modern syntax other than + // import/export in their "module" dependency trees. + this.mainFields = ["browser", "main", "module"]; + } else { + this.mainFields = ["browser", "module", "main"]; + } + } else { + this.mainFields = ["main"]; + } } - _cacheMethod(name) { - const original = this[name]; - this[name] = wrap( - (...args) => original.apply(this, args) - ); - } - - static isTopLevel(id) { + static isTopLevel(id: string) { return "./".indexOf(id.charAt(0)) < 0; } - static isNative(id) { + static isNative(id: string): boolean { return has(nativeModulesMap, id); } - static getNativeStubId(id) { + static getNativeStubId(id: string) { return nativeModulesMap[id] || null; } // Resolve the given module identifier to an object { path, stat } or // null, relative to an absolute parent path. The _seenDirPaths // parameter is for internal use only and should be ommitted. - _resolve(id, absParentPath, _seenDirPaths) { + public resolve( + id: string, + absParentPath: string, + _seenDirPaths?: Set, + ): Resolution { let resolved = - this._resolveAbsolute(id, absParentPath) || - this._resolveRelative(id, absParentPath) || - this._resolveNodeModule(id, absParentPath); + this.resolveAbsolute(id, absParentPath) || + this.resolveRelative(id, absParentPath) || + this.resolveNodeModule(id, absParentPath); - if (typeof resolved === "string") { + if (resolved === "missing") { // The _resolveNodeModule method can return "missing" to indicate // that the ImportScanner should look elsewhere for this module, // such as in the app node_modules directory. @@ -122,7 +146,7 @@ export default class Resolver { let packageJsonMap = null; - while (resolved && resolved.stat.isDirectory()) { + while (resolved && resolved.stat && resolved.stat.isDirectory()) { let dirPath = resolved.path; _seenDirPaths = _seenDirPaths || new Set; @@ -132,23 +156,27 @@ export default class Resolver { if (! _seenDirPaths.has(dirPath)) { _seenDirPaths.add(dirPath); - const found = this._getPkgJsonSubsetForDir(dirPath); + const found = this.getPkgJsonSubsetForDir(dirPath); + const foundPkgJsonMain = found && this.mainFields.some(name => { + const value = found.pkg[name]; + if (isString(value)) { + // The "main" field of package.json does not have to begin with ./ + // to be considered relative, so first we try simply appending it + // to the directory path before falling back to a full resolve, + // which might return a package from a node_modules directory. + resolved = this.joinAndStat(dirPath, value) || + this.resolve(value, found.path, _seenDirPaths); + return resolved && typeof resolved === "object"; + } + return false; + }); - // The "main" field of package.json does not have to begin with ./ - // to be considered relative, so first we try simply appending it - // to the directory path before falling back to a full resolve, - // which might return a package from a node_modules directory. - resolved = found && - isString(found.main) && - (this._joinAndStat(dirPath, found.main) || - this._resolve(found.main, found.path, _seenDirPaths)); - - if (resolved && typeof resolved === "object") { + if (foundPkgJsonMain && found) { if (! resolved.packageJsonMap) { resolved.packageJsonMap = Object.create(null); } - resolved.packageJsonMap[found.path] = found.pkg; + resolved.packageJsonMap![found.path] = found.pkg; // The resolution above may have returned a directory, so we // merge resolved.packageJsonMap into packageJsonMap so that we @@ -182,7 +210,7 @@ export default class Resolver { // there's very little chance an `index.js` file will be a // directory. However, in principle it is remotely possible that a // file called `index.js` could be a directory instead of a file. - resolved = this._joinAndStat(dirPath, "index"); + resolved = this.joinAndStat(dirPath, "index"); } if (resolved) { @@ -193,13 +221,13 @@ export default class Resolver { // If the package.json file that governs resolved.path has a // "browser" field, include it in resolved.packageJsonMap so that // the ImportScanner can register the appropriate browser aliases. - const pkgJsonInfo = this._findPkgJsonSubsetForPath(resolved.path); + const pkgJsonInfo = this.findPkgJsonSubsetForPath(resolved.path); if (pkgJsonInfo && isObject(pkgJsonInfo.pkg.browser)) { if (! resolved.packageJsonMap) { resolved.packageJsonMap = Object.create(null); } - resolved.packageJsonMap[pkgJsonInfo.path] = pkgJsonInfo.pkg; + resolved.packageJsonMap![pkgJsonInfo.path] = pkgJsonInfo.pkg; } resolved.id = convertToPosixPath( @@ -211,15 +239,15 @@ export default class Resolver { return resolved; } - _joinAndStat(...joinArgs) { - const joined = pathJoin(...joinArgs); + public joinAndStat(...joinArgs: string[]) { + const joined: string = pathJoin(...joinArgs); const path = pathNormalize(joined); const exactStat = this.statOrNull(path); const exactResult = exactStat && { path, stat: exactStat }; - let result = null; + let result: Resolution = null; - if (exactResult && exactStat.isFile()) { + if (exactResult && exactStat && exactStat.isFile()) { result = exactResult; } else { // No point in trying alternate file extensions if the parent @@ -237,7 +265,7 @@ export default class Resolver { } } - if (! result && exactResult && exactStat.isDirectory()) { + if (! result && exactResult && exactStat && exactStat.isDirectory()) { // After trying all available file extensions, fall back to the // original result if it was a directory. result = exactResult; @@ -246,18 +274,20 @@ export default class Resolver { return result; } - _resolveAbsolute(id, absParentPath) { - return id.charAt(0) === "/" && - this._joinAndStat(this.sourceRoot, id.slice(1)); + private resolveAbsolute(id: string, _absParentPath: string): Resolution { + return id.charAt(0) === "/" + && this.joinAndStat(this.sourceRoot, id.slice(1)) + || null; } - _resolveRelative(id, absParentPath) { + private resolveRelative(id: string, absParentPath: string): Resolution { if (id.charAt(0) === ".") { - return this._joinAndStat(absParentPath, "..", id); + return this.joinAndStat(absParentPath, "..", id); } + return null; } - _resolveNodeModule(id, absParentPath) { + private resolveNodeModule(id: string, absParentPath: string): Resolution { if (! Resolver.isTopLevel(id)) { return null; } @@ -269,7 +299,7 @@ export default class Resolver { return null; } - let sourceRoot; + let sourceRoot: string | undefined; const relParentPath = pathRelative(this.sourceRoot, absParentPath); if (! relParentPath.startsWith("..")) { // If the file is contained by this.sourceRoot, then it's safe to @@ -299,7 +329,7 @@ export default class Resolver { dir = pathDirname(dir); } - while (! (resolved = this._joinAndStat(dir, "node_modules", id))) { + while (! (resolved = this.joinAndStat(dir, "node_modules", id))) { if (dir === sourceRoot) { break; } @@ -318,12 +348,12 @@ export default class Resolver { // After checking any local node_modules directories, fall back to // the package NPM directory, if one was specified. this.nodeModulesPaths.some(path => { - return resolved = this._joinAndStat(path, id); + return resolved = this.joinAndStat(path, id); }); } // If the dependency is still not resolved, it might be handled by the - // fallback function defined in meteor/packages/modules/modules.js, or + // fallback function defined in meteor/packages/modules-runtime/[modern|legacy|server].js, or // it might be imported in code that will never run on this platform, // so there is always the possibility that its absence is not actually // a problem. As much as we might like to issue warnings about missing @@ -333,7 +363,7 @@ export default class Resolver { return resolved || "missing"; } - _getPkgJsonSubsetForDir(dirPath) { + private getPkgJsonSubsetForDir(dirPath: string) { const pkgJsonPath = pathJoin(dirPath, "package.json"); const pkg = optimisticReadJsonOrNull(pkgJsonPath); if (! pkg) { @@ -342,7 +372,7 @@ export default class Resolver { // Output a JS module that exports just the "name", "version", "main", // and "browser" properties (if defined) from the package.json file. - const pkgSubset = {}; + const pkgSubset: Partial = {}; if (has(pkg, "name")) { pkgSubset.name = pkg.name; @@ -352,38 +382,27 @@ export default class Resolver { pkgSubset.version = pkg.version; } - let main; - function tryMain(name) { + this.mainFields.forEach(name => { const value = pkg[name]; - - if (isString(value)) { - main = main || value; - } - if (isString(value) || isObject(value)) { pkgSubset[name] = value; } - } - - if (archMatches(this.targetArch, "web")) { - tryMain("browser"); - } - - tryMain("main"); + }); return { path: pkgJsonPath, pkg: pkgSubset, - main, }; } - _findPkgJsonSubsetForPath(path) { + private findPkgJsonSubsetForPath( + path: string, + ): ReturnType { const stat = this.statOrNull(path); if (stat && stat.isDirectory()) { - const found = this._getPkgJsonSubsetForDir(path); + const found = this.getPkgJsonSubsetForDir(path); if (found) { return found; } @@ -403,15 +422,13 @@ export default class Resolver { return null; } - return this._findPkgJsonSubsetForPath(parentDir); + return this.findPkgJsonSubsetForPath(parentDir); } }; -import { Profile } from "../tool-env/profile.js"; -each(Resolver.prototype, (value, key) => { +import { Profile } from "../tool-env/profile"; +const Rp = Resolver.prototype as any; +Object.keys(Rp).forEach(key => { if (key === "constructor") return; - Resolver.prototype[key] = Profile( - `Resolver#${key}`, - Resolver.prototype[key] - ); + Rp[key] = Profile(`Resolver#${key}`, Rp[key]); }); diff --git a/tools/isobuild/source-arch.js b/tools/isobuild/source-arch.js index 342e27e7a6..e51cf4c147 100644 --- a/tools/isobuild/source-arch.js +++ b/tools/isobuild/source-arch.js @@ -1,5 +1,5 @@ import {isString, isFunction} from 'underscore'; -import {WatchSet} from '../fs/watch.js'; +import {WatchSet} from '../fs/watch'; function reportMissingOption(name) { throw new Error(`must provide options.${name} when creating SourceArch`); diff --git a/tools/isobuild/unibuild.js b/tools/isobuild/unibuild.js index d3bc27a1a4..fbe18faf11 100644 --- a/tools/isobuild/unibuild.js +++ b/tools/isobuild/unibuild.js @@ -1,10 +1,10 @@ "use strict"; import _ from "underscore"; -import files from "../fs/files.js"; -import { WatchSet, sha1 } from "../fs/watch.js"; +import files from "../fs/files"; +import { WatchSet, sha1 } from "../fs/watch"; import { NodeModulesDirectory } from "./bundler.js"; -import * as archinfo from "../utils/archinfo.js"; +import * as archinfo from "../utils/archinfo"; function rejectBadPath(p) { if (p.indexOf("..") >= 0) { diff --git a/tools/meteor-services/auth.js b/tools/meteor-services/auth.js index cfd097fe81..6c76c606d1 100644 --- a/tools/meteor-services/auth.js +++ b/tools/meteor-services/auth.js @@ -1,6 +1,6 @@ var _ = require('underscore'); var utils = require('../utils/utils.js'); -var files = require('../fs/files.js'); +var files = require('../fs/files'); var config = require('./config.js'); var httpHelpers = require('../utils/http-helpers.js'); var fiberHelpers = require('../utils/fiber-helpers.js'); diff --git a/tools/meteor-services/config.js b/tools/meteor-services/config.js index a569c5dc65..489e3d5961 100644 --- a/tools/meteor-services/config.js +++ b/tools/meteor-services/config.js @@ -4,13 +4,13 @@ import { getCurrentToolsDir, getHomeDir, inCheckout, -} from '../fs/files.js'; +} from '../fs/files'; import tropohouse from '../packaging/tropohouse.js'; -// A few functions in the `meteor` tool talk to MDG servers: primarily -// checking for updates, logging into your Meteor account, and -// deploying apps to the MDG free hosting sandbox, publishing packages, -// getting an ssh access to a build farm. These functions need +// A few functions in the `meteor` tool talk to Meteor Software servers: +// primarily checking for updates, logging into your Meteor account, and +// deploying apps to the Meteor Software free hosting sandbox, publishing +// packages, getting an ssh access to a build farm. These functions need // configuration. // Base URL for Meteor Accounts OAuth services. Endpoints include /authorize diff --git a/tools/meteor-services/deploy.js b/tools/meteor-services/deploy.js index 3ed42961b2..08881fa098 100644 --- a/tools/meteor-services/deploy.js +++ b/tools/meteor-services/deploy.js @@ -9,7 +9,10 @@ import { createTarGzStream, getSettings, mkdtemp, -} from '../fs/files.js'; + changeTempDirStatus, + exists, + findGitCommitHash, +} from '../fs/files'; import { request } from '../utils/http-helpers.js'; import buildmessage from '../utils/buildmessage.js'; import { @@ -21,7 +24,7 @@ import { } from './auth.js'; import { recordPackages } from './stats.js'; import { Console } from '../console/console.js'; -import { Profile } from '../tool-env/profile.js'; +import { Profile } from '../tool-env/profile'; function sleepForMilliseconds(millisecondsToWait) { return new Promise(function(resolve) { @@ -33,8 +36,8 @@ const hasOwn = Object.prototype.hasOwnProperty; const CAPABILITIES = ['showDeployMessages', 'canTransferAuthorization']; -// Make a synchronous RPC to the "classic" MDG deploy API. The deploy -// API has the following contract: +// Make a synchronous RPC to the "classic" Meteor Software deploy API. The +// deploy API has the following contract: // // - Parameters are always sent in the query string. // - A tarball can be sent in the body (when deploying an app). @@ -45,7 +48,7 @@ const CAPABILITIES = ['showDeployMessages', 'canTransferAuthorization']; // provide a human-readable error message in the body. // - URLs are of the form "/[operation]/[site]". // - Body encodings are always utf8. -// - Meteor Accounts auth is possible using first-party MDG cookies +// - Meteor Accounts auth is possible using first-party Meteor Software cookies // (rather than OAuth). // // Options include: @@ -428,12 +431,13 @@ async function pollForDeploy(pollingState, versionId, site) { // keep polling as per usual – this may have just been a whiff from Galaxy. // We do the retry here because we might hit an error if we try to parse the // result of the version-status call below. - Console.warn(versionStatusResult.errorMessage || 'Unexpected error from Galaxy'); pollingState.errors++; + const errorMessage = versionStatusResult.errorMessage || 'Unexpected error from Galaxy'; if (pollingState.errors >= pollingState.maxErrors) { - Console.error(versionStatusResult.errorMessage); + Console.error(`Error checking deploy status; giving up: ${errorMessage}`); return 1; } else if (new Date() < deadline) { + Console.warn(`Error checking deploy status; will retry: ${errorMessage}`); await sleepForMilliseconds(pollIntervalMs); return await pollForDeploy(pollingState, versionId, site); } @@ -468,6 +472,8 @@ async function pollForDeploy(pollingState, versionId, site) { // - buildOptions: the 'buildOptions' argument to the bundler // - rawOptions: any unknown options that were passed to the command line tool // - waitForDeploy: whether to poll Galaxy after upload for deploy status +// - isCacheBuildEnabled: Reuses the build already created if the git commit +// hash is the same // - deployPollingTimeoutMs: user overridden timeout for polling Galaxy // for deploy status export async function bundleAndDeploy(options) { @@ -516,10 +522,49 @@ export async function bundleAndDeploy(options) { return 1; } - var buildDir = mkdtemp('build_tar'); - var bundlePath = pathJoin(buildDir, 'bundle'); + const projectDir = options.projectContext.getProjectLocalDirectory(''); + const gitCommitHash = process.env.METEOR_GIT_COMMIT_HASH || findGitCommitHash(projectDir); - Console.info('Preparing to deploy your app...'); + const buildCache = options.projectContext.getBuildCache(); + let isCacheBuildValid = options.isCacheBuildEnabled; + if (options.isCacheBuildEnabled) { + if (!buildCache || + !exists(buildCache.buildDir) || + !exists(buildCache.bundlePath) || + !buildCache.gitCommitHash || + !gitCommitHash || + buildCache.gitCommitHash !== gitCommitHash) { + Console.warn(`We don't have a valid build cache so a new build will be performed.`); + isCacheBuildValid = false; + } + } + + function getBuildDirAndBundlePath() { + if (isCacheBuildValid) { + return buildCache; + } + + const buildDir = mkdtemp('build_tar'); + if (options.isCacheBuildEnabled) { + changeTempDirStatus(buildDir, false); + Console.info(`The --cache-build was used so the build folder (${buildDir}) will not be deleted on exit...`); + } + const bundlePath = pathJoin(buildDir, 'bundle'); + return { buildDir, bundlePath }; + } + + const {buildDir, bundlePath} = getBuildDirAndBundlePath(); + + if (options.isCacheBuildEnabled) { + Console.info('Saving build in cache (--cache-build)...'); + options.projectContext.saveBuildCache({ + buildDir, + bundlePath, + gitCommitHash + }); + } + + Console.info('Preparing to build your app...'); var settings = null; var messages = buildmessage.capture({ @@ -532,16 +577,21 @@ export async function bundleAndDeploy(options) { }); if (! messages.hasMessages()) { - var bundler = require('../isobuild/bundler.js'); - var bundleResult = bundler.bundle({ - projectContext: options.projectContext, - outputPath: bundlePath, - buildOptions: options.buildOptions, - }); + if(isCacheBuildValid) { + Console.info('Skipping build (--cache-build)...'); + } else { + const bundler = require('../isobuild/bundler.js'); - if (bundleResult.errors) { - messages = bundleResult.errors; + const bundleResult = bundler.bundle({ + projectContext: options.projectContext, + outputPath: bundlePath, + buildOptions: options.buildOptions, + }); + + if (bundleResult.errors) { + messages = bundleResult.errors; + } } } @@ -559,6 +609,7 @@ export async function bundleAndDeploy(options) { }); } + Console.info('Preparing to upload your app...'); const result = buildmessage.enterJob({ title: "uploading" }, Profile("upload bundle", function () { @@ -592,6 +643,7 @@ export async function bundleAndDeploy(options) { // build / deploy succeed. We indicate that Meteor should poll for version // status by including a newVersionId in the payload. if (options.waitForDeploy && result.payload.newVersionId) { + Console.info('Waiting for deployment updates from Galaxy...'); return await pollForDeploymentSuccess( result.payload.newVersionId, options.deployPollingTimeoutMs, @@ -781,9 +833,9 @@ export function changeAuthorized(site, action, username) { } const verbs = { - add: "added", - remove: "removed", - transfer: "transferred" + add: "added to", + remove: "removed from", + transfer: "transferred to" }; Console.info(`${site}: ${verbs[action]} ${username}`); return 0; diff --git a/tools/meteor-services/service-connection.js b/tools/meteor-services/service-connection.js index 7cbc80af12..643810036c 100644 --- a/tools/meteor-services/service-connection.js +++ b/tools/meteor-services/service-connection.js @@ -1,6 +1,6 @@ var _ = require("underscore"); import { loadIsopackage } from '../tool-env/isopackets.js'; -var files = require('../fs/files.js'); +var files = require('../fs/files'); var fiberHelpers = require("../utils/fiber-helpers.js"); // Wrapper to manage a connection to a DDP service. The main difference between diff --git a/tools/meteor-services/stats.js b/tools/meteor-services/stats.js index 4c277e94a8..bf02f116eb 100644 --- a/tools/meteor-services/stats.js +++ b/tools/meteor-services/stats.js @@ -2,7 +2,7 @@ var Fiber = require("fibers"); var _ = require("underscore"); var config = require('./config.js'); -var files = require('../fs/files.js'); +var files = require('../fs/files'); var auth = require('./auth.js'); var ServiceConnection = require('./service-connection.js'); var httpHelpers = require('../utils/http-helpers.js'); diff --git a/tools/packaging/catalog/catalog-local.js b/tools/packaging/catalog/catalog-local.js index 3a1ba50150..3368108aa1 100644 --- a/tools/packaging/catalog/catalog-local.js +++ b/tools/packaging/catalog/catalog-local.js @@ -1,14 +1,14 @@ var _ = require('underscore'); var buildmessage = require('../../utils/buildmessage.js'); -var files = require('../../fs/files.js'); -var watch = require('../../fs/watch.js'); +var files = require('../../fs/files'); +var watch = require('../../fs/watch'); var PackageSource = require('../../isobuild/package-source.js'); import { KNOWN_ISOBUILD_FEATURE_PACKAGES } from '../../isobuild/compiler.js'; import { sync as glob } from "glob"; -import { Profile } from "../../tool-env/profile.js"; +import { Profile } from "../../tool-env/profile"; import { optimisticHashOrNull, -} from "../../fs/optimistic.js"; +} from "../../fs/optimistic"; // LocalCatalog represents packages located in the application's // package directory, other package directories specified via an diff --git a/tools/packaging/catalog/catalog-remote.js b/tools/packaging/catalog/catalog-remote.js index 7ed5aa10c1..41c1bad686 100644 --- a/tools/packaging/catalog/catalog-remote.js +++ b/tools/packaging/catalog/catalog-remote.js @@ -1,17 +1,17 @@ var _ = require('underscore'); var sqlite3 = require('sqlite3'); -var files = require('../../fs/files.js'); +var files = require('../../fs/files'); var utils = require('../../utils/utils.js'); var buildmessage = require('../../utils/buildmessage.js'); var config = require('../../meteor-services/config.js'); -var archinfo = require('../../utils/archinfo.js'); +var archinfo = require('../../utils/archinfo'); var Console = require('../../console/console.js').Console; var tropohouse = require('../tropohouse.js'); var packageClient = require('../package-client.js'); var VersionParser = require('../package-version-parser.js'); -var Profile = require('../../tool-env/profile.js').Profile; +var Profile = require('../../tool-env/profile').Profile; // XXX: Rationalize these flags. Maybe use the logger? var DEBUG_SQL = !!process.env.METEOR_DEBUG_SQL; @@ -536,14 +536,11 @@ _.extend(RemoteCatalog.prototype, { self.db = null; }, - getVersion: function (name, version) { + getVersion: function (packageName, version) { var result = this._contentQuery( "SELECT content FROM versions WHERE packageName=? AND version=?", - [name, version]); - if(!result || result.length === 0) { - return null; - } - return result[0]; + [packageName, version]); + return filterExactRows(result, { packageName, version }); }, // As getVersion, but returns info on the latest version of the @@ -658,9 +655,7 @@ _.extend(RemoteCatalog.prototype, { var self = this; var result = self._contentQuery( "SELECT content FROM releaseTracks WHERE name=?", name); - if (!result || result.length === 0) - return null; - return result[0]; + return filterExactRows(result, { name }); }, getReleaseVersion: function (track, version) { @@ -668,9 +663,7 @@ _.extend(RemoteCatalog.prototype, { var result = self._contentQuery( "SELECT content FROM releaseVersions WHERE track=? AND version=?", [track, version]); - if (!result || result.length === 0) - return null; - return result[0]; + return filterExactRows(result, { track, version }); }, // Used by make-bootstrap-tarballs. Only should be used on catalogs that are @@ -996,6 +989,29 @@ _.extend(RemoteCatalog.prototype, { } }); +// SQLite has a bizarre philosophy about automaticaly converting between +// different data types, such as strings and floating point numbers: +// https://www.sqlite.org/quirks.html#flexible_typing +// +// This means querying for the string "1.10" in a given column can return +// rows where the column is actually the string "1.1", since SQLite thinks +// you might be talking about the number 1.1 rather than the string you +// actually requested. +// +// This "feature" first became a problem for Meteor after we published +// Meteor 1.10, which caused SQLite to return multiple rows for the +// getReleaseVersion query, including both 1.10 and 1.1.1 (ancient). +// +// While this policy seems completely indefensible, the SQLite project +// does not consider it a bug, which forces us to work around it by +// double-checking the queried results with this helper function: +function filterExactRows(rows, requirements) { + const keys = Object.keys(requirements); + return rows && rows.filter(row => { + return keys.every(key => row[key] === requirements[key]); + })[0] || null; +} + exports.RemoteCatalog = RemoteCatalog; // We put this constant here because we don't have any better place that would otherwise cause a cycle diff --git a/tools/packaging/package-client.js b/tools/packaging/package-client.js index 592b7b17b7..17f9d3a9d6 100644 --- a/tools/packaging/package-client.js +++ b/tools/packaging/package-client.js @@ -3,7 +3,7 @@ var _ = require('underscore'); var config = require('../meteor-services/config.js'); var httpHelpers = require('../utils/http-helpers.js'); var release = require('./release.js'); -var files = require('../fs/files.js'); +var files = require('../fs/files'); var utils = require('../utils/utils.js'); var buildmessage = require('../utils/buildmessage.js'); var compiler = require('../isobuild/compiler.js'); @@ -11,7 +11,7 @@ var authClient = require('../meteor-services/auth-client.js'); var catalog = require('./catalog/catalog.js'); var projectContextModule = require('../project-context.js'); var colonConverter = require('../utils/colon-converter.js'); -var Profile = require('../tool-env/profile.js').Profile; +var Profile = require('../tool-env/profile').Profile; import { requestGarbageCollection } from "../utils/gc.js"; diff --git a/tools/packaging/release.js b/tools/packaging/release.js index c951100393..794ac644ef 100644 --- a/tools/packaging/release.js +++ b/tools/packaging/release.js @@ -1,6 +1,6 @@ var _ = require('underscore'); -var files = require('../fs/files.js'); +var files = require('../fs/files'); var catalog = require('./catalog/catalog.js'); var release = exports; diff --git a/tools/packaging/tropohouse.js b/tools/packaging/tropohouse.js index 97cde9670f..0bc685bdc5 100644 --- a/tools/packaging/tropohouse.js +++ b/tools/packaging/tropohouse.js @@ -1,8 +1,8 @@ var _ = require("underscore"); -var files = require('../fs/files.js'); +var files = require('../fs/files'); var utils = require('../utils/utils.js'); var httpHelpers = require('../utils/http-helpers.js'); -var archinfo = require('../utils/archinfo.js'); +var archinfo = require('../utils/archinfo'); var catalog = require('./catalog/catalog.js'); var Isopack = require('../isobuild/isopack.js').Isopack; var config = require('../meteor-services/config.js'); diff --git a/tools/packaging/updater.js b/tools/packaging/updater.js index 77de994e6a..35b96d6fb5 100644 --- a/tools/packaging/updater.js +++ b/tools/packaging/updater.js @@ -2,12 +2,12 @@ var _ = require('underscore'); var runLog = require('../runners/run-log.js'); var catalog = require('./catalog/catalog.js'); -var archinfo = require('../utils/archinfo.js'); +var archinfo = require('../utils/archinfo'); var isopack = require('../isobuild/isopack.js'); var buildmessage = require('../utils/buildmessage.js'); var Console = require('../console/console.js').Console; var auth = require('../meteor-services/auth.js'); -var files = require('../fs/files.js'); +var files = require('../fs/files'); var tropohouse = require('./tropohouse.js'); var release = require('./release.js'); diff --git a/tools/packaging/warehouse.js b/tools/packaging/warehouse.js index 5f46ae0278..fcccd45111 100644 --- a/tools/packaging/warehouse.js +++ b/tools/packaging/warehouse.js @@ -39,7 +39,7 @@ var os = require("os"); var _ = require("underscore"); -var files = require('../fs/files.js'); +var files = require('../fs/files'); var httpHelpers = require('../utils/http-helpers.js'); var fiberHelpers = require('../utils/fiber-helpers.js'); var utils = require('../utils/utils.js'); diff --git a/tools/project-context.js b/tools/project-context.js index c3a1195055..467c1e48bb 100644 --- a/tools/project-context.js +++ b/tools/project-context.js @@ -1,32 +1,36 @@ var assert = require("assert"); var _ = require('underscore'); -var archinfo = require('./utils/archinfo.js'); +var archinfo = require('./utils/archinfo'); var buildmessage = require('./utils/buildmessage.js'); var catalog = require('./packaging/catalog/catalog.js'); var catalogLocal = require('./packaging/catalog/catalog-local.js'); var Console = require('./console/console.js').Console; -var files = require('./fs/files.js'); +var files = require('./fs/files'); var isopackCacheModule = require('./isobuild/isopack-cache.js'); import { loadIsopackage } from './tool-env/isopackets.js'; var packageMapModule = require('./packaging/package-map.js'); var release = require('./packaging/release.js'); var tropohouse = require('./packaging/tropohouse.js'); var utils = require('./utils/utils.js'); -var watch = require('./fs/watch.js'); -var Profile = require('./tool-env/profile.js').Profile; +var watch = require('./fs/watch'); +var Profile = require('./tool-env/profile').Profile; import { KNOWN_ISOBUILD_FEATURE_PACKAGES } from './isobuild/compiler.js'; import { optimisticReadJsonOrNull, optimisticHashOrNull, -} from "./fs/optimistic.js"; +} from "./fs/optimistic"; import { mapWhereToArches, -} from "./isobuild/package-api.js"; +} from "./utils/archinfo"; -import Resolver from "./isobuild/resolver.js"; +import Resolver from "./isobuild/resolver"; + +const CAN_DELAY_LEGACY_BUILD = ! JSON.parse( + process.env.METEOR_DISALLOW_DELAYED_LEGACY_BUILD || "false" +); // The ProjectContext represents all the context associated with an app: // metadata files in the `.meteor` directory, the choice of package versions @@ -621,6 +625,27 @@ _.extend(ProjectContext.prototype, { ); }, + getBuildCache() { + try { + return JSON.parse(files.readFile(files.pathJoin( + this.projectLocalDir, + "build-cache.json" + ))); + } catch (e) { + return null; + } + }, + + saveBuildCache(buildCache) { + files.writeFileAtomically( + files.pathJoin( + this.projectLocalDir, + "build-cache.json" + ), + JSON.stringify(buildCache) + "\n" + ); + }, + // When running test-packages for an app with local packages, this // method will return the original app dir, as opposed to the temporary // testRunnerAppDir created for the tests. @@ -1310,7 +1335,8 @@ _.extend(exports.PlatformList.prototype, { }, canDelayBuildingArch(arch) { - return arch === "web.browser.legacy"; + return CAN_DELAY_LEGACY_BUILD && + arch === "web.browser.legacy"; } }); @@ -1644,9 +1670,47 @@ export class MeteorConfig { } } - // Call this first if you plan to call getMainModuleForArch multiple + getNodeModulesToRecompileByArch() { + const packageNamesByArch = Object.create(null); + const recompile = this.get("nodeModules", "recompile"); + + if (recompile && typeof recompile === "object") { + const get = arch => packageNamesByArch[arch] || ( + packageNamesByArch[arch] = new Set); + + Object.keys(recompile).forEach(packageName => { + const info = recompile[packageName]; + if (! info) return; + if (info === true) { + get("web").add(packageName); + get("os").add(packageName); + } else if (typeof info === "string") { + mapWhereToArches(info).forEach(arch => { + get(arch).add(packageName); + }); + } else if (Array.isArray(info)) { + info.forEach(where => { + mapWhereToArches(where).forEach(arch => { + get(arch).add(packageName); + }); + }); + } + }); + } + + return packageNamesByArch; + } + + getNodeModulesToRecompile( + arch, + packageNamesByArch = this.getNodeModulesToRecompileByArch(), + ) { + return packageNamesByArch[arch]; + } + + // Call this first if you plan to call getMainModule multiple // times, so that you can avoid repeating this work each time. - getMainModulesByArch(arch) { + getMainModulesByArch() { return this._getEntryModulesByArch("mainModule"); } @@ -1654,24 +1718,24 @@ export class MeteorConfig { // that architecture. For example, if this.config.mainModule.client is // defined, then because mapWhereToArch("client") === "web", and "web" // matches web.browser, return this.config.mainModule.client. - getMainModuleForArch( + getMainModule( arch, mainModulesByArch = this.getMainModulesByArch(), ) { - return this._getEntryModuleForArch(arch, mainModulesByArch); + return this._getEntryModule(arch, mainModulesByArch); } // Analogous to getMainModulesByArch, except for this.config.testModule. - getTestModulesByArch(arch) { + getTestModulesByArch() { return this._getEntryModulesByArch("testModule"); } - // Analogous to getMainModuleForArch, except for this.config.testModule. - getTestModuleForArch( + // Analogous to getMainModule, except for this.config.testModule. + getTestModule( arch, testModulesByArch = this.getTestModulesByArch(), ) { - return this._getEntryModuleForArch(arch, testModulesByArch); + return this._getEntryModule(arch, testModulesByArch); } _getEntryModulesByArch(...keys) { @@ -1698,7 +1762,7 @@ export class MeteorConfig { return entryModulesByArch; } - _getEntryModuleForArch( + _getEntryModule( arch, entryModulesByArch, ) { diff --git a/tools/runners/run-all.js b/tools/runners/run-all.js index 137688a66b..1c46b8ef57 100644 --- a/tools/runners/run-all.js +++ b/tools/runners/run-all.js @@ -1,6 +1,6 @@ const _ = require('underscore'); -const files = require('../fs/files.js'); +const files = require('../fs/files'); const buildmessage = require('../utils/buildmessage.js'); const utils = require('../utils/utils.js'); const runLog = require('./run-log.js'); @@ -302,7 +302,6 @@ class Runner { exports.run = function (options) { var runOptions = _.clone(options); var once = runOptions.once; - delete runOptions.once; var promise = new Promise(function (resolve) { runOptions.onFailure = function () { diff --git a/tools/runners/run-app.js b/tools/runners/run-app.js index cd77f06c53..c5aaf49ba3 100644 --- a/tools/runners/run-app.js +++ b/tools/runners/run-app.js @@ -2,20 +2,20 @@ var _ = require('underscore'); var Fiber = require('fibers'); const uuid = require("uuid"); var fiberHelpers = require('../utils/fiber-helpers.js'); -var files = require('../fs/files.js'); -var watch = require('../fs/watch.js'); +var files = require('../fs/files'); +var watch = require('../fs/watch'); var bundler = require('../isobuild/bundler.js'); var buildmessage = require('../utils/buildmessage.js'); var runLog = require('./run-log.js'); var stats = require('../meteor-services/stats.js'); var Console = require('../console/console.js').Console; var catalog = require('../packaging/catalog/catalog.js'); -var Profile = require('../tool-env/profile.js').Profile; +var Profile = require('../tool-env/profile').Profile; var release = require('../packaging/release.js'); import { pluginVersionsFromStarManifest } from '../cordova/index.js'; import { CordovaBuilder } from '../cordova/builder.js'; -import { closeAllWatchers } from "../fs/safe-watcher.js"; -import { eachline } from "../utils/eachline.js"; +import { closeAllWatchers } from "../fs/safe-watcher"; +import { eachline } from "../utils/eachline"; import { loadIsopackage } from '../tool-env/isopackets.js'; const hasOwn = Object.prototype.hasOwnProperty; @@ -23,13 +23,13 @@ const hasOwn = Object.prototype.hasOwnProperty; // Parse out s as if it were a bash command line. var bashParse = function (s) { if (s.search("\"") !== -1 || s.search("'") !== -1) { - throw new Error("Meteor cannot currently handle quoted NODE_OPTIONS"); + throw new Error("Meteor cannot currently handle quoted SERVER_NODE_OPTIONS"); } return _.without(s.split(/\s+/), ''); }; var getNodeOptionsFromEnvironment = function () { - return bashParse(process.env.NODE_OPTIONS || ""); + return bashParse(process.env.SERVER_NODE_OPTIONS || ""); }; /////////////////////////////////////////////////////////////////////////////// @@ -72,6 +72,7 @@ var AppProcess = function (options) { self.inspect = options.inspect; self.settings = options.settings; self.testMetadata = options.testMetadata; + self.autoRestart = options.autoRestart; self.proc = null; self.madeExitCallback = false; @@ -197,6 +198,7 @@ _.extend(AppProcess.prototype, { delete env.BIND_IP; } env.APP_ID = self.projectContext.appIdentifier; + env.METEOR_AUTO_RESTART = self.autoRestart; // We run the server behind our own proxy, so we need to increment // the HTTP forwarded count. @@ -298,7 +300,7 @@ _.extend(AppProcess.prototype, { // for connections. // // - Other options: port, mongoUrl, oplogUrl, buildOptions, rootUrl, -// settingsFile, program, proxy, recordPackageUsage +// settingsFile, program, proxy, recordPackageUsage, once // // To use, construct an instance of AppRunner, and then call start() to start it // running. To stop it, either return false from onRunEnd, or call stop(). (But @@ -357,6 +359,7 @@ var AppRunner = function (options) { self.testMetadata = options.testMetadata; self.inspect = options.inspect; self.proxy = options.proxy; + self.autoRestart = !options.once; self.watchForChanges = options.watchForChanges === undefined ? true : options.watchForChanges; self.onRunEnd = options.onRunEnd; @@ -576,6 +579,10 @@ _.extend(AppRunner.prototype, { // Permit delayed bundling of client architectures if the // console is interactive. allowDelayedClientBuilds: ! Console.isHeadless(), + + // None of the targets are used during full rebuilds + // so we can safely build in place on Windows + forceInPlaceBuild: !cachedServerWatchSet }); }); @@ -694,6 +701,7 @@ _.extend(AppRunner.prototype, { Promise.await(self.runPromise); var runPromise = self.runPromise = self._makePromise("run"); + var listenPromise = self._makePromise("listen"); // Run the program options.beforeRun && options.beforeRun(); @@ -719,10 +727,12 @@ _.extend(AppRunner.prototype, { self.proxy.setMode("proxy"); options.onListen && options.onListen(); self._resolvePromise("start"); + self._resolvePromise("listen"); }, nodeOptions: getNodeOptionsFromEnvironment(), settings: settings, testMetadata: self.testMetadata, + autoRestart: self.autoRestart, }); if (options.firstRun && self._beforeStartPromise) { @@ -761,6 +771,14 @@ _.extend(AppRunner.prototype, { var serverWatcher; var clientWatcher; + appProcess.proc.onMessage("shell-server", message => { + if (message && message.command === "reload") { + self._resolvePromise("run", { outcome: "changed" }); + } else { + return Promise.reject("Unsupported shell command: " + message); + } + }); + if (self.watchForChanges) { serverWatcher = new watch.Watcher({ watchSet: serverWatchSet, @@ -768,20 +786,29 @@ _.extend(AppRunner.prototype, { self._resolvePromise("run", { outcome: 'changed' }); - } + }, + includePotentiallyUnusedFiles: false, + async: true, }); } var setupClientWatcher = function () { clientWatcher && clientWatcher.stop(); clientWatcher = new watch.Watcher({ - watchSet: bundleResult.clientWatchSet, - onChange: function () { - var outcome = watch.isUpToDate(serverWatchSet) + watchSet: bundleResult.clientWatchSet, + onChange: function () { + // Pass false for the includePotentiallyUnusedFiles parameter (which + // defaults to true) to avoid restarting the server due to changes in + // files that were not used by the server bundle. This assumes we have + // already called PackageSourceBatch.computeJsOutputFilesMap and + // _watchOutputFiles to finalize the usage statuses of potentially + // unused files in serverWatchSet, which is a safe assumption here. + var outcome = watch.isUpToDate(serverWatchSet, false) ? 'changed-refreshable' // only a client asset has changed : 'changed'; // both a client and server asset changed self._resolvePromise('run', { outcome: outcome }); - } + }, + async: true }); }; if (self.watchForChanges && canRefreshClient) { @@ -835,7 +862,13 @@ _.extend(AppRunner.prototype, { Console.enableProgressDisplay(false); - const postStartupResult = runPostStartupCallbacks(bundleResult); + const postStartupResult = Promise.race([ + listenPromise, + runPromise + ]).then(() => { + return runPostStartupCallbacks(bundleResult); + }).await(); + if (postStartupResult) return postStartupResult; // Wait for either the process to exit, or (if watchForChanges) a @@ -892,19 +925,9 @@ _.extend(AppRunner.prototype, { _fiber: function () { var self = this; - - var crashCount = 0; - var crashTimer = null; var firstRun = true; while (true) { - - var resetCrashCount = function () { - crashTimer = setTimeout(function () { - crashCount = 0; - }, 8000); - }; - var runResult = self._runOnce({ onListen: function () { if (! self.noRestartBanner && ! firstRun) { @@ -912,16 +935,10 @@ _.extend(AppRunner.prototype, { Console.enableProgressDisplay(false); } }, - beforeRun: resetCrashCount, firstRun: firstRun }); firstRun = false; - clearTimeout(crashTimer); - if (runResult.outcome !== "terminated") { - crashCount = 0; - } - var wantExit = self.onRunEnd ? !self.onRunEnd(runResult) : false; if (wantExit || self.exitPromise || runResult.outcome === "stopped") { break; @@ -958,11 +975,6 @@ _.extend(AppRunner.prototype, { // explanation should already have been logged } - crashCount ++; - if (crashCount < 3) { - continue; - } - if (self.watchForChanges) { runLog.log("Your application is crashing. " + "Waiting for file change.", diff --git a/tools/runners/run-mongo.js b/tools/runners/run-mongo.js index e4d10a35b6..ed4e7a3ff1 100644 --- a/tools/runners/run-mongo.js +++ b/tools/runners/run-mongo.js @@ -1,6 +1,7 @@ -var files = require('../fs/files.js'); +import { MongoExitCodes } from '../utils/mongo-exit-codes'; + +var files = require('../fs/files'); var utils = require('../utils/utils.js'); -var mongoExitCodes = require('../utils/mongo-exit-codes.js'); var fiberHelpers = require('../utils/fiber-helpers.js'); var runLog = require('./run-log.js'); var child_process = require('child_process'); @@ -22,7 +23,7 @@ var runMongoShell = function (url) { var auth = mongoUrl.auth && mongoUrl.auth.split(':'); var ssl = require('querystring').parse(mongoUrl.query).ssl === "true"; - var args = ['--quiet']; + var args = []; if (ssl) { args.push('--ssl'); } @@ -55,12 +56,31 @@ function spawnMongod(mongodPath, port, dbPath, replSetName) { // initializes faster. (Not recommended for production!) '--oplogSize', '8', '--replSet', replSetName, - '--noauth' + '--noauth', + + // Starting with version 4.0.8/4.1.10, MongoDB performs a step down + // procedure if the primary receives a SIGTERM signal + // (https://jira.mongodb.org/browse/SERVER-38994). During this procedure, + // the process doesn't shut down for up to ten seconds until a secondary + // becomes the new primary. Since Meteor starts a single-node replica set, + // this is unnecessary because there are no secondaries. The following + // parameter disables the step down. This will be the default for single- + // node replica sets in MongoDB 4.3 (relevant commit: https://git.io/JeNkT), + // so the parameter can be removed in the future. + '--setParameter', 'waitForStepDownOnNonCommandShutdown=false' ]; // Use mmapv1 on 32bit platforms, as our binary doesn't support WT if (process.arch === 'ia32') { args.push('--storageEngine', 'mmapv1', '--smallfiles'); + } else if (process.platform !== 'linux') { + // MongoDB 4, which we use on 64-bit systems, displays a banner in the + // Mongo shell about a free monitoring service, which can be disabled + // with this flag. However, the custom Linux build (see MONGO_BASE_URL + // in scripts/generate-dev-bundle.sh) neither displays the banner nor + // supports the flag, so it's safe/important to avoid passing the flag + // to mongod on 64-bit linux. + args.push('--enableFreeMonitoring', 'off'); } return child_process.spawn(mongodPath, args, { @@ -185,12 +205,30 @@ if (process.platform === 'win32') { 'else ps ax; fi'; } + // If the child process output includes unicode, make sure it's + // handled properly. + const { + LANG = "en_US.UTF-8", + LC_ALL = LANG, + LANGUAGE = LANG, + // Remainder of process.env without above properties. + ...env + } = process.env; + + // Make sure all three properties are set to the same value, which + // defaults to "en_US.UTF-8" or whatever LANG was already set to. + Object.assign(env, { LANG, LC_ALL, LANGUAGE }); + child_process.exec( psScript, - // we don't want this to randomly fail just because you're running lots of - // processes. 10MB should be more than ps ax will ever spit out; the default - // is 200K, which at least one person hit (#2158). - {maxBuffer: 1024 * 1024 * 10}, + { + env, + // we don't want this to randomly fail just because you're running + // lots of processes. 10MB should be more than ps ax will ever + // spit out; the default is 200K, which at least one person hit + // (#2158). + maxBuffer: 1024 * 1024 * 10, + }, function (error, stdout, stderr) { if (error) { promise.reject( @@ -657,62 +695,29 @@ var launchMongo = function (options) { return; } - let wasJustSecondary = false; + let writableTimestamp = Date.now(); - // XXX timeout eventually? + // Wait until the primary is writable. If it isn't writable after one + // minute, throw an error and report the replica set status. while (!stopped) { - var status = yieldingMethod( - db.admin(), 'command', {replSetGetStatus: 1}); + const { ismaster } = yieldingMethod(db.admin(), "command", { + isMaster: 1 + }); - // See https://docs.mongodb.com/manual/reference/replica-states/ - // for information on various states + if (ismaster) { + break; + } else if (Date.now() - writableTimestamp > 60000) { + const status = yieldingMethod(db.admin(), "command", { + replSetGetStatus: 1 + }); - // Are any of the members starting up or recovering? - if (_.any(status.members, function (member) { - return member.stateStr === 'STARTUP' || - member.stateStr === 'STARTUP2' || - member.stateStr === 'RECOVERING'; - })) { - utils.sleepMs(20); - continue; + throw new Error( + "Primary not writable after one minute. Last replica set status: " + + JSON.stringify(status) + ); } - const firstMemberState = status.members[0].stateStr; - - // Is the intended primary currently a secondary? (It passes through - // that phase briefly.) - if (firstMemberState === 'SECONDARY') { - utils.sleepMs(20); - wasJustSecondary = true; - continue; - } - - // Mongo 3.2 introduced a new heartbeatIntervalMillis property - // on replica sets, used during "primary" negotiation. - // - // If the first member was _just_ promoted, we'll wait until - // the heartbeat interval has elapsed before proceeding since - // the decision is not official until the heartbeat has elapsed. - if (firstMemberState === 'PRIMARY' && wasJustSecondary) { - wasJustSecondary = false; - utils.sleepMs(status.heartbeatIntervalMillis); - continue; - } - - // Anything else for the intended primary is probably an error. - if (firstMemberState !== 'PRIMARY') { - throw Error("Unexpected Mongo status: " + JSON.stringify(status)); - } - - // Anything but secondary for the other members is probably an error. - for (var i = 1; i < status.members.length; ++i) { - if (status.members[i].stateStr !== 'SECONDARY') { - throw Error("Unexpected Mongo secondary status: " + - JSON.stringify(status)); - } - } - - break; + utils.sleepMs(50); } client.close(true /* means "the app is closing the connection" */); @@ -924,7 +929,7 @@ _.extend(MRp, { // Too many restarts, too quicky. It's dead. Print friendly // diagnostics and give up. - var explanation = mongoExitCodes.Codes[code]; + var explanation = MongoExitCodes[code]; var message = "Can't start Mongo server."; if (explanation && explanation.symbol === 'EXIT_UNCAUGHT' && @@ -933,9 +938,13 @@ _.extend(MRp, { "Looks like you are out of free disk space under .meteor/local."; } else if (explanation) { message += "\n" + explanation.longText; + } else if (process.platform === 'win32') { + message += "\n\n" + + "Check how to troubleshoot here " + + "https://docs.meteor.com/windows.html#cant-start-mongo-server"; } - if (explanation === mongoExitCodes.EXIT_NET_ERROR) { + if (explanation && explanation.symbol === 'EXIT_NET_ERROR') { message += "\n\n" + "Check for other processes listening on port " + self.port + "\n" + "or other Meteor instances running in the same project."; diff --git a/tools/runners/run-proxy.js b/tools/runners/run-proxy.js index 1be4d33dd6..3aa0513072 100644 --- a/tools/runners/run-proxy.js +++ b/tools/runners/run-proxy.js @@ -1,3 +1,4 @@ +var Anser = require("anser"); var _ = require('underscore'); var runLog = require('./run-log.js'); @@ -95,6 +96,15 @@ _.extend(Proxy.prototype, { // client->proxy connection has an error, though this may change; see // discussion at https://github.com/nodejitsu/node-http-proxy/pull/488 self.proxy.on('error', function (err, req, resOrSocket) { + if (err.code === 'HPE_HEADER_OVERFLOW') { + const logMessage = 'Error during proxy to server communication ' + + 'due to the header size exceeding Node\'s currently ' + + 'configured limit. This limit is configurable with a command ' + + 'line option (https://nodejs.org/api/cli.html#cli_max_http_header_size_size ' + + 'and https://docs.meteor.com/commandline.html#meteorrun).'; + runLog.log(logMessage); + } + if (resOrSocket instanceof http.ServerResponse) { if (!resOrSocket.headersSent) { // Return a 503, but only if we haven't already written headers (or @@ -251,7 +261,7 @@ function showErrorPage(res) {
      `);
       
             _.each(runLog.getLog(), function (item) {
      -        res.write(escapeEntities(item.message) + "\n");
      +        res.write(Anser.ansiToHtml(Anser.escapeForHtml(item.message)) + "\n");
             });
       
             res.write(`
      @@ -261,22 +271,4 @@ function showErrorPage(res) { res.end(); } -// Copied from packages/blaze/preamble.js -function escapeEntities(str) { - const escapeMap = { - "<": "<", - ">": ">", - '"': """, - "'": "'", - "`": "`", /* IE allows backtick-delimited attributes?? */ - "&": "&" - }; - - const escapeChar = function(c) { - return escapeMap[c]; - }; - - return str.replace(/[&<>"'`]/g, escapeChar); -} - exports.Proxy = Proxy; diff --git a/tools/runners/run-selenium.js b/tools/runners/run-selenium.js index 34d1f7fd43..55a2fd4ffe 100644 --- a/tools/runners/run-selenium.js +++ b/tools/runners/run-selenium.js @@ -1,6 +1,6 @@ var _ = require('underscore'); var Fiber = require('fibers'); -var files = require('../fs/files.js'); +var files = require('../fs/files'); var runLog = require('./run-log.js'); var utils = require('../utils/utils.js'); diff --git a/tools/shell-client.js b/tools/shell-client.js deleted file mode 100644 index 14931559dc..0000000000 --- a/tools/shell-client.js +++ /dev/null @@ -1,216 +0,0 @@ -var assert = require("assert"); -var fs = require("fs"); -var path = require("path"); -var net = require("net"); -var chalk = require("chalk"); -var EOL = require("os").EOL; -import { isEmacs } from "./utils/utils.js"; - -// These two values (EXITING_MESSAGE and getInfoFile) must match the -// values used by the shell-server package. -var EXITING_MESSAGE = "Shell exiting..."; -function getInfoFile(shellDir) { - return path.join(shellDir, "info.json"); -} - -// Invoked by the process running `meteor shell` to attempt to connect to -// the server via the socket file. -exports.connect = function connect(shellDir) { - new Client(shellDir).connect(); -}; - -function Client(shellDir) { - var self = this; - assert.ok(self instanceof Client); - - self.shellDir = shellDir; - self.exitOnClose = false; - self.firstTimeConnecting = true; - self.connected = false; - self.reconnectCount = 0; -} - -var Cp = Client.prototype; - -Cp.reconnect = function reconnect(delay) { - var self = this; - - // Display the "Server unavailable" warning only on the third attempt - // to reconnect, so it doesn't get shown for successful reconnects. - if (++self.reconnectCount === 3) { - console.error(chalk.yellow( - "Server unavailable (waiting to reconnect)" - )); - } - - if (!self.reconnectTimer) { - self.reconnectTimer = setTimeout(function() { - delete self.reconnectTimer; - self.connect(); - }, delay || 100); - } -}; - -Cp.connect = function connect() { - var self = this; - var infoFile = getInfoFile(self.shellDir); - - fs.readFile(infoFile, "utf8", function(err, json) { - if (err) { - return self.reconnect(); - } - - try { - var info = JSON.parse(json); - } catch (err) { - return self.reconnect(); - } - - if (info.status !== "enabled") { - if (self.firstTimeConnecting) { - return self.reconnect(); - } - - if (info.reason) { - console.error(info.reason); - } - - console.error(EXITING_MESSAGE); - process.exit(0); - } - - self.setUpSocket( - net.connect(info.port, "127.0.0.1"), - info.key - ); - }); -}; - -Cp.setUpSocketForSingleUse = function (sock, key) { - sock.on("connect", function () { - const inputBuffers = []; - process.stdin.on("data", buffer => inputBuffers.push(buffer)); - process.stdin.on("end", () => { - sock.write(JSON.stringify({ - evaluateAndExit: { - // Make sure the entire command is written as a string within a - // JSON object, so that the server can easily tell when it has - // received the whole command. - command: Buffer.concat(inputBuffers).toString("utf8") - }, - terminal: false, - key: key - }) + "\n"); - }); - }); - - const outputBuffers = []; - sock.on("data", buffer => outputBuffers.push(buffer)); - sock.on("close", function () { - var output = JSON.parse(Buffer.concat(outputBuffers)); - if (output.error) { - console.error(output.error); - process.exit(output.code); - } else { - process.stdout.write(JSON.stringify(output.result) + "\n"); - process.exit(0); - } - }); -}; - -Cp.setUpSocket = function setUpSocket(sock, key) { - const self = this; - - if (! process.stdin.isTTY) { - return self.setUpSocketForSingleUse(sock, key); - } - - // Put STDIN into "flowing mode": - // http://nodejs.org/api/stream.html#stream_compatibility_with_older_node_versions - process.stdin.resume(); - - function onConnect() { - self.firstTimeConnecting = false; - self.reconnectCount = 0; - self.connected = true; - - // Sending a JSON-stringified options object (even just an empty - // object) over the socket is required to start the REPL session. - sock.write(JSON.stringify({ - columns: process.stdout.columns, - terminal: ! isEmacs(), - key: key - }) + "\n"); - - process.stderr.write(shellBanner()); - process.stdin.pipe(sock); - if (process.stdin.setRawMode) { // https://github.com/joyent/node/issues/8204 - process.stdin.setRawMode(true); - } - } - - function onClose() { - tearDown(); - - // If we received the special EXITING_MESSAGE just before the socket - // closed, then exit the shell instead of reconnecting. - if (self.exitOnClose) { - process.exit(0); - } else { - self.reconnect(); - } - } - - function onError(err) { - tearDown(); - self.reconnect(); - } - - function tearDown() { - self.connected = false; - if (process.stdin.setRawMode) { // https://github.com/joyent/node/issues/8204 - process.stdin.setRawMode(false); - } - process.stdin.unpipe(sock); - sock.unpipe(process.stdout); - sock.removeListener("connect", onConnect); - sock.removeListener("close", onClose); - sock.removeListener("error", onError); - sock.end(); - } - - sock.pipe(process.stdout); - - require("./utils/eachline.js").eachline(sock, function (line) { - self.exitOnClose = line.indexOf(EXITING_MESSAGE) >= 0; - }); - - sock.on("connect", onConnect); - sock.on("close", onClose); - sock.on("error", onError); -}; - -function shellBanner() { - var bannerLines = [ - "", - "Welcome to the server-side interactive shell!" - ]; - - if (! isEmacs()) { - // Tab completion sadly does not work in Emacs. - bannerLines.push( - "", - "Tab completion is enabled for global variables." - ); - } - - bannerLines.push( - "", - "Type .reload to restart the server and the shell.", - "Type .exit to disconnect from the server and leave the shell.", - "Type .help for additional help.", - EOL - ); - - return chalk.green(bannerLines.join(EOL)); -} diff --git a/tools/shell-client.ts b/tools/shell-client.ts new file mode 100644 index 0000000000..344b7b3957 --- /dev/null +++ b/tools/shell-client.ts @@ -0,0 +1,217 @@ +import * as fs from "fs"; +import * as path from "path"; +import * as net from "net"; +import { isEmacs } from "./utils/utils"; +import { eachline } from "./utils/eachline"; + +const chalk = require("chalk"); +const EOL = require("os").EOL; + +// These two values (EXITING_MESSAGE and getInfoFile) must match the +// values used by the shell-server package. +const EXITING_MESSAGE = "Shell exiting..."; + +function getInfoFile(shellDir: string): string { + return path.join(shellDir, "info.json"); +} + +// Invoked by the process running `meteor shell` to attempt to connect to +// the server via the socket file. +export function connect(shellDir: string) { + new Client(shellDir).connect(); +} + +class Client { + public connected = false; + + private exitOnClose = false; + private firstTimeConnecting = true; + private reconnectCount = 0; + private reconnectTimer?: NodeJS.Timeout; + + constructor(public shellDir: string) {} + + reconnect(delay: number = 100) { + // Display the "Server unavailable" warning only on the third attempt + // to reconnect, so it doesn't get shown for successful reconnects. + if (++this.reconnectCount === 3) { + console.error(chalk.yellow( + "Server unavailable (waiting to reconnect)" + )); + } + + if (!this.reconnectTimer) { + this.reconnectTimer = setTimeout(() => { + delete this.reconnectTimer; + this.connect(); + }, delay); + } + }; + + connect() { + const infoFile = getInfoFile(this.shellDir); + + fs.readFile(infoFile, "utf8", (err, json) => { + if (err) { + return this.reconnect(); + } + + let info; + try { + info = JSON.parse(json); + } catch (err) { + return this.reconnect(); + } + + if (info.status !== "enabled") { + if (this.firstTimeConnecting) { + return this.reconnect(); + } + + if (info.reason) { + console.error(info.reason); + } + + console.error(EXITING_MESSAGE); + process.exit(0); + } + + this.setUpSocket( + net.connect(info.port, "127.0.0.1"), + info.key + ); + }); + }; + + setUpSocketForSingleUse(sock: net.Socket, key: string) { + sock.on("connect", function () { + const inputBuffers: Buffer[] = []; + process.stdin.on("data", buffer => inputBuffers.push(buffer)); + process.stdin.on("end", () => { + sock.write(JSON.stringify({ + evaluateAndExit: { + // Make sure the entire command is written as a string within a + // JSON object, so that the server can easily tell when it has + // received the whole command. + command: Buffer.concat(inputBuffers).toString("utf8") + }, + terminal: false, + key: key + }) + "\n"); + }); + }); + + const outputBuffers: Buffer[] = []; + sock.on("data", buffer => outputBuffers.push(buffer)); + sock.on("close", function () { + const output = JSON.parse(Buffer.concat(outputBuffers)); + if (output.error) { + console.error(output.error); + process.exit(output.code); + } else { + process.stdout.write(JSON.stringify(output.result) + "\n"); + process.exit(0); + } + }); + }; + + setUpSocket(sock: net.Socket, key: string) { + if (!process.stdin.isTTY) { + return this.setUpSocketForSingleUse(sock, key); + } + + // Put STDIN into "flowing mode": + // http://nodejs.org/api/stream.html#stream_compatibility_with_older_node_versions + process.stdin.resume(); + + const onConnect = () => { + this.firstTimeConnecting = false; + this.reconnectCount = 0; + this.connected = true; + + // Sending a JSON-stringified options object (even just an empty + // object) over the socket is required to start the REPL session. + sock.write(JSON.stringify({ + columns: process.stdout.columns, + terminal: !isEmacs(), + key: key + }) + "\n"); + + process.stderr.write(shellBanner()); + process.stdin.pipe(sock); + if (process.stdin.setRawMode) { // https://github.com/joyent/node/issues/8204 + process.stdin.setRawMode(true); + } + } + + const onClose = () => { + tearDown(); + + // If we received the special EXITING_MESSAGE just before the socket + // closed, then exit the shell instead of reconnecting. + if (this.exitOnClose) { + process.exit(0); + } else { + this.reconnect(); + } + } + + const onError = () => { + tearDown(); + this.reconnect(); + } + + const tearDown = () => { + this.connected = false; + + if (process.stdin.setRawMode) { // https://github.com/joyent/node/issues/8204 + process.stdin.setRawMode(false); + } + + process.stdin.unpipe(sock); + sock.unpipe(process.stdout); + sock.removeListener("connect", onConnect); + sock.removeListener("close", onClose); + sock.removeListener("error", onError); + sock.end(); + } + + sock.pipe(process.stdout); + + eachline(sock, (line: string) => { + this.exitOnClose = line.indexOf(EXITING_MESSAGE) >= 0; + return undefined as unknown as string; + }); + + sock.on("connect", onConnect); + sock.on("close", onClose); + sock.on("error", onError); + }; +} + + + +function shellBanner(): string { + const bannerLines = [ + "", + "Welcome to the server-side interactive shell!" + ]; + + if (!isEmacs()) { + // Tab completion sadly does not work in Emacs. + bannerLines.push( + "", + "Tab completion is enabled for global variables." + ); + } + + bannerLines.push( + "", + "Type .reload to restart the server and the shell.", + "Type .exit to disconnect from the server and leave the shell.", + "Type .help for additional help.", + EOL + ); + + return chalk.green(bannerLines.join(EOL)); +} diff --git a/tools/static-assets/README.md b/tools/static-assets/README.md index 6e3707c578..090b5250d0 100644 --- a/tools/static-assets/README.md +++ b/tools/static-assets/README.md @@ -4,7 +4,7 @@ Files here are designed to be copied to the output destination of a Meteor CLI command. Sometimes, for code sharing, the JS files can be imported by parts of the tool -(like `mini-files.js` - it is shared between built apps and tool). +(like `mini-files.ts` - it is shared between built apps and tool). ## skel - App Skeleton diff --git a/tools/static-assets/server/boot.js b/tools/static-assets/server/boot.js index 67ea154e21..6e78d35170 100644 --- a/tools/static-assets/server/boot.js +++ b/tools/static-assets/server/boot.js @@ -5,12 +5,12 @@ var Future = require("fibers/future"); var sourcemap_support = require('source-map-support'); var bootUtils = require('./boot-utils.js'); -var files = require('./mini-files.js'); +var files = require('./mini-files'); var npmRequire = require('./npm-require.js').require; -var Profile = require('./profile.js').Profile; +var Profile = require('./profile').Profile; // This code is duplicated in tools/main.js. -var MIN_NODE_VERSION = 'v8.0.0'; +var MIN_NODE_VERSION = 'v12.0.0'; var hasOwn = Object.prototype.hasOwnProperty; @@ -27,12 +27,21 @@ var serverJson = require("./server-json.js"); var configJson = JSON.parse(fs.readFileSync(path.resolve(serverDir, 'config.json'), 'utf8')); +var programsDir = path.dirname(serverDir); +var buildDir = path.dirname(programsDir); +var starJson = JSON.parse(fs.readFileSync(path.join(buildDir, "star.json"))); + // Set up environment __meteor_bootstrap__ = { startupHooks: [], serverDir: serverDir, - configJson: configJson }; -__meteor_runtime_config__ = { meteorRelease: configJson.meteorRelease }; + configJson: configJson +}; + +__meteor_runtime_config__ = { + meteorRelease: configJson.meteorRelease, + gitCommitHash: starJson.gitCommitHash +}; if (!process.env.APP_ID) { process.env.APP_ID = configJson.appId; @@ -46,7 +55,7 @@ const meteorDebugFuture = function maybeWaitForDebuggerToAttach() { if (meteorDebugFuture) { - const { pause } = require("./debug.js"); + const { pause } = require("./debug"); const pauseThresholdMs = 50; const pollIntervalMs = 500; const waitStartTimeMs = +new Date; @@ -196,7 +205,6 @@ var specialArgPaths = { "packages/dynamic-import.js": function (file) { var dynamicImportInfo = {}; - var programsDir = path.dirname(serverDir); var clientArchs = configJson.clientArchs || Object.keys(configJson.clientPaths); @@ -361,6 +369,9 @@ var loadServerBundles = Profile("Load server bundles", function () { var filePath = path.join(serverDir, fileInfo.assets[assetPath]); return files.convertToOSPath(filePath); }, + getServerDir: function() { + return serverDir; + } }; var wrapParts = ["(function(Npm,Assets"]; diff --git a/tools/static-assets/server/debug.js b/tools/static-assets/server/debug.ts similarity index 89% rename from tools/static-assets/server/debug.js rename to tools/static-assets/server/debug.ts index 4532ae43e6..eab1bd39ff 100644 --- a/tools/static-assets/server/debug.js +++ b/tools/static-assets/server/debug.ts @@ -1,8 +1,7 @@ - -exports.pause = function () { +export function pause() { // The debugger pauses here when you run `meteor debug`, so that you can // set breakpoints or add `debugger` statements to your server code // before the code begins executing. Once you have set any breakpoints // you wish to set, click the |▶ button to continue. debugger; -}; \ No newline at end of file +} diff --git a/tools/static-assets/server/mini-files.js b/tools/static-assets/server/mini-files.ts similarity index 50% rename from tools/static-assets/server/mini-files.js rename to tools/static-assets/server/mini-files.ts index c2a0639c81..39684b361f 100644 --- a/tools/static-assets/server/mini-files.js +++ b/tools/static-assets/server/mini-files.ts @@ -1,7 +1,5 @@ -var _ = require("underscore"); -var os = require("os"); -var path = require("path"); -var assert = require("assert"); +import path from "path"; +import { release, EOL } from "os"; // All of these functions are attached to files.js for the tool; // they live here because we need them in boot.js as well to avoid duplicating @@ -11,17 +9,15 @@ var assert = require("assert"); // synchronously" functions from files.js; this is intentional, because we want // to make it very hard to accidentally use fs.*Sync functions in the app server // after bootup (since they block all concurrency!) -var files = module.exports; // Detect that we are on a Windows-like Filesystem, such as that in a WSL // (Windows Subsystem for Linux) even if it otherwise looks like we're on Unix. // https://github.com/Microsoft/BashOnWindows/issues/423#issuecomment-221627364 -var isWindowsLikeFilesystem = function () { - return process.platform === "win32" || - (os.release().indexOf("Microsoft") > -1); -}; +export function isWindowsLikeFilesystem() { + return process.platform === "win32" || release().indexOf("Microsoft") >= 0; +} -var toPosixPath = function (p, partialPath) { +export function toPosixPath(p: string, partialPath: boolean = false) { // Sometimes, you can have a path like \Users\IEUser on windows, and this // actually means you want C:\Users\IEUser if (p[0] === "\\" && (! partialPath)) { @@ -35,9 +31,11 @@ var toPosixPath = function (p, partialPath) { } return p; -}; +} -var toDosPath = function (p, partialPath) { +export const convertToPosixPath = toPosixPath; + +export function toDosPath(p: string, partialPath: boolean = false) { if (p[0] === '/' && ! partialPath) { if (! /^\/[A-Za-z](\/|$)/.test(p)) throw new Error("Surprising path: " + p); @@ -48,88 +46,76 @@ var toDosPath = function (p, partialPath) { p = p.replace(/\//g, '\\'); return p; -}; +} +export const convertToWindowsPath = toDosPath; -var convertToOSPath = function (standardPath, partialPath) { +export function convertToOSPath(standardPath: string, partialPath: boolean = false) { if (process.platform === "win32") { return toDosPath(standardPath, partialPath); } - return standardPath; -}; +} -var convertToStandardPath = function (osPath, partialPath) { +export function convertToStandardPath(osPath: string, partialPath: boolean = false) { if (process.platform === "win32") { return toPosixPath(osPath, partialPath); } - return osPath; } -var convertToOSLineEndings = function (fileContents) { - return fileContents.replace(/\n/g, os.EOL); -}; +export function convertToOSLineEndings(fileContents: string) { + return fileContents.replace(/\n/g, EOL); +} -var convertToStandardLineEndings = function (fileContents) { +export function convertToStandardLineEndings(fileContents: string) { // Convert all kinds of end-of-line chars to linuxy "\n". return fileContents.replace(new RegExp("\r\n", "g"), "\n") .replace(new RegExp("\r", "g"), "\n"); -}; +} + // Return the Unicode Normalization Form of the passed in path string, using // "Normalization Form Canonical Composition" -const unicodeNormalizePath = (path) => { +export function unicodeNormalizePath(path: string) { return (path) ? path.normalize('NFC') : path; -}; +} // wrappings for path functions that always run as they were on unix (using // forward slashes) -var wrapPathFunction = function (name, partialPaths) { - var f = path[name]; - assert.strictEqual(typeof f, "function"); - - return function (/* args */) { +export function wrapPathFunction< + TArgs extends any[], + TResult, + F extends (...args: TArgs) => TResult, +>( + f: F, + partialPath: boolean = false, +): F { + return function wrapper() { if (process.platform === 'win32') { - var args = _.toArray(arguments); - args = _.map(args, function (p, i) { + const result = f.apply(path, Array.prototype.map.call( + arguments, // if partialPaths is turned on (for path.join mostly) // forget about conversion of absolute paths for Windows - return toDosPath(p, partialPaths); - }); + p => toDosPath(p, partialPath), + ) as TArgs); - var result = f.apply(path, args); - if (typeof result === "string") { - result = toPosixPath(result, partialPaths); - } - - return result; + return typeof result === "string" + ? toPosixPath(result, partialPath) + : result; } + return f.apply(path, arguments as any); + } as F; +} - return f.apply(path, arguments); - }; -}; - -files.pathJoin = wrapPathFunction("join", true); -files.pathNormalize = wrapPathFunction("normalize"); -files.pathRelative = wrapPathFunction("relative"); -files.pathResolve = wrapPathFunction("resolve"); -files.pathDirname = wrapPathFunction("dirname"); -files.pathBasename = wrapPathFunction("basename"); -files.pathExtname = wrapPathFunction("extname"); -// The path.isAbsolute function is implemented in Node v4. -files.pathIsAbsolute = wrapPathFunction("isAbsolute"); -files.pathSep = '/'; -files.pathDelimiter = ':'; -files.pathOsDelimiter = path.delimiter; - -files.isWindowsLikeFilesystem = isWindowsLikeFilesystem; - -files.convertToStandardPath = convertToStandardPath; -files.convertToOSPath = convertToOSPath; -files.convertToWindowsPath = toDosPath; -files.convertToPosixPath = toPosixPath; - -files.convertToStandardLineEndings = convertToStandardLineEndings; -files.convertToOSLineEndings = convertToOSLineEndings; -files.unicodeNormalizePath = unicodeNormalizePath; +export const pathJoin = wrapPathFunction(path.join, true); +export const pathNormalize = wrapPathFunction(path.normalize); +export const pathRelative = wrapPathFunction(path.relative); +export const pathResolve = wrapPathFunction(path.resolve); +export const pathDirname = wrapPathFunction(path.dirname); +export const pathBasename = wrapPathFunction(path.basename); +export const pathExtname = wrapPathFunction(path.extname); +export const pathIsAbsolute = wrapPathFunction(path.isAbsolute); +export const pathSep = '/'; +export const pathDelimiter = ':'; +export const pathOsDelimiter = path.delimiter; diff --git a/tools/static-assets/server/npm-require.js b/tools/static-assets/server/npm-require.js index a508254124..da0879d933 100644 --- a/tools/static-assets/server/npm-require.js +++ b/tools/static-assets/server/npm-require.js @@ -2,7 +2,7 @@ var assert = require("assert"); var fs = require("fs"); var path = require("path"); var _ = require('underscore'); -var files = require('./mini-files.js'); +var files = require('./mini-files'); var serverJson = require("./server-json.js"); var topLevelIdPattern = /^[^./]/; diff --git a/tools/static-assets/server/runtime.js b/tools/static-assets/server/runtime.js new file mode 100644 index 0000000000..7ef324ae65 --- /dev/null +++ b/tools/static-assets/server/runtime.js @@ -0,0 +1,43 @@ +const Module = module.constructor; +const Mp = Module.prototype; + +Mp.resolve = function (id) { + return Module._resolveFilename(id, this); +}; + +// Enable the module.{watch,export,...} runtime API needed by Reify. +require("reify/lib/runtime").enable(Mp); + +const moduleLoad = Mp.load; +Mp.load = function (filename) { + const result = moduleLoad.apply(this, arguments); + if (typeof this.runSetters === "function") { + // Make sure we call module.runSetters (or module.runModuleSetters, a + // legacy synonym) whenever a module finishes loading. + this.runSetters(); + } + return result; +}; + +const resolved = Promise.resolve(); +Mp.dynamicImport = function (id) { + return resolved.then(() => require(id)); +}; + +const reifyBabelParse = require("reify/lib/parsers/babel").parse; +const reifyCompile = require("reify/lib/compiler").compile; +const _compile = Mp._compile; +Mp._compile = function (content, filename) { + try { + const result = reifyCompile(content, { + parse: reifyBabelParse, + generateLetDeclarations: false, + ast: false, + }); + if (!result.identical) { + content = result.code; + } + } finally { + return _compile.call(this, content, filename); + } +}; diff --git a/tools/static-assets/skel-apollo/.gitignore b/tools/static-assets/skel-apollo/.gitignore new file mode 100644 index 0000000000..c2658d7d1b --- /dev/null +++ b/tools/static-assets/skel-apollo/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/examples/other/client-info/.meteor/.gitignore b/tools/static-assets/skel-apollo/.meteor/.gitignore similarity index 100% rename from examples/other/client-info/.meteor/.gitignore rename to tools/static-assets/skel-apollo/.meteor/.gitignore diff --git a/tools/static-assets/skel-apollo/.meteor/packages b/tools/static-assets/skel-apollo/.meteor/packages new file mode 100644 index 0000000000..ed6cce950a --- /dev/null +++ b/tools/static-assets/skel-apollo/.meteor/packages @@ -0,0 +1,21 @@ +# Meteor packages used by this project, one per line. +# Check this file (and the other files in this directory) into your repository. +# +# 'meteor add' and 'meteor remove' will edit this file for you, +# but you can also edit it by hand. + +meteor-base # Packages every Meteor app needs to have +mobile-experience # Packages for a great mobile UX +mongo # The database Meteor supports right now +reactive-var # Reactive variable for tracker + +standard-minifier-css # CSS minifier run for production mode +standard-minifier-js # JS minifier run for production mode +es5-shim # ECMAScript 5 compatibility for older browsers +ecmascript # Enable ECMAScript2015+ syntax in app code +typescript # Enable TypeScript syntax in .ts and .tsx modules +shell-server # Server-side component of the `meteor shell` command + +static-html # Define static page content in .html files +apollo # Basic Apollo integration for Meteor apps +swydo:graphql # Import .graphql files diff --git a/examples/other/parties/.meteor/platforms b/tools/static-assets/skel-apollo/.meteor/platforms similarity index 100% rename from examples/other/parties/.meteor/platforms rename to tools/static-assets/skel-apollo/.meteor/platforms diff --git a/tools/static-assets/skel-apollo/client/main.css b/tools/static-assets/skel-apollo/client/main.css new file mode 100644 index 0000000000..7f354f0fa7 --- /dev/null +++ b/tools/static-assets/skel-apollo/client/main.css @@ -0,0 +1,4 @@ +body { + padding: 10px; + font-family: sans-serif; +} diff --git a/tools/static-assets/skel-apollo/client/main.html b/tools/static-assets/skel-apollo/client/main.html new file mode 100644 index 0000000000..b62c0b83d0 --- /dev/null +++ b/tools/static-assets/skel-apollo/client/main.html @@ -0,0 +1,7 @@ + + Apollo Skeleton + + + +
      + diff --git a/tools/static-assets/skel-apollo/client/main.jsx b/tools/static-assets/skel-apollo/client/main.jsx new file mode 100644 index 0000000000..a42cee8ff3 --- /dev/null +++ b/tools/static-assets/skel-apollo/client/main.jsx @@ -0,0 +1,8 @@ +import React from 'react'; +import { Meteor } from 'meteor/meteor'; +import { render } from 'react-dom'; +import { App } from '/imports/ui/App'; + +Meteor.startup(() => { + render(, document.getElementById('react-target')); +}); diff --git a/tools/static-assets/skel-apollo/imports/api/links.js b/tools/static-assets/skel-apollo/imports/api/links.js new file mode 100644 index 0000000000..050c508eae --- /dev/null +++ b/tools/static-assets/skel-apollo/imports/api/links.js @@ -0,0 +1,3 @@ +import { Mongo } from 'meteor/mongo'; + +export const LinksCollection = new Mongo.Collection('links'); diff --git a/tools/static-assets/skel-apollo/imports/apollo/schema.graphql b/tools/static-assets/skel-apollo/imports/apollo/schema.graphql new file mode 100644 index 0000000000..d081209cbc --- /dev/null +++ b/tools/static-assets/skel-apollo/imports/apollo/schema.graphql @@ -0,0 +1,10 @@ +type Link { + _id: ID! + title: String + url: String +} + +type Query { + getLink (id: ID!): Link + getLinks: [Link] +} diff --git a/tools/static-assets/skel-apollo/imports/ui/App.jsx b/tools/static-assets/skel-apollo/imports/ui/App.jsx new file mode 100644 index 0000000000..7ebf0cb3a0 --- /dev/null +++ b/tools/static-assets/skel-apollo/imports/ui/App.jsx @@ -0,0 +1,31 @@ +import React from 'react'; +import { InMemoryCache, ApolloProvider, ApolloClient, ApolloLink } from '@apollo/client'; +import { BatchHttpLink } from '@apollo/client/link/batch-http' +// import { MeteorAccountsLink } from 'meteor/apollo' +import { Hello } from './Hello.jsx'; +import { Info } from './Info.jsx'; + +const cache = new InMemoryCache().restore(window.__APOLLO_STATE__); + +const link = ApolloLink.from([ + // MeteorAccountsLink(), + new BatchHttpLink({ + uri: '/graphql' + }) +]); + +const client = new ApolloClient({ + uri: '/graphql', + cache, + link, +}); + +export const App = () => ( + +
      +

      Welcome to Meteor! ☄

      + + +
      +
      +); diff --git a/tools/static-assets/skel-apollo/imports/ui/Hello.jsx b/tools/static-assets/skel-apollo/imports/ui/Hello.jsx new file mode 100644 index 0000000000..15e0f185ac --- /dev/null +++ b/tools/static-assets/skel-apollo/imports/ui/Hello.jsx @@ -0,0 +1,16 @@ +import React, { useState } from 'react'; + +export const Hello = () => { + const [counter, setCounter] = useState(0); + + const increment = () => { + setCounter(counter + 1); + }; + + return ( +
      + +

      You've pressed the button {counter} times.

      +
      + ); +}; diff --git a/tools/static-assets/skel-apollo/imports/ui/Info.jsx b/tools/static-assets/skel-apollo/imports/ui/Info.jsx new file mode 100644 index 0000000000..a7073c4839 --- /dev/null +++ b/tools/static-assets/skel-apollo/imports/ui/Info.jsx @@ -0,0 +1,31 @@ +import React from 'react'; +import { useQuery } from '@apollo/client'; +import { gql } from 'apollo-boost'; + +const GET_LINKS = gql` + { + links: getLinks { + _id + title + url + } + } +`; + +export const Info = () => { + const { loading, error, data } = useQuery(GET_LINKS); + + if (loading) return

      Loading...

      ; + if (error) return

      Error ⁉️

      ; + + return ( +
      +

      Learn Meteor!

      + +
      + ); +}; diff --git a/tools/static-assets/skel-apollo/package.json b/tools/static-assets/skel-apollo/package.json new file mode 100644 index 0000000000..7570e30d88 --- /dev/null +++ b/tools/static-assets/skel-apollo/package.json @@ -0,0 +1,27 @@ +{ + "name": "~name~", + "private": true, + "scripts": { + "start": "meteor run", + "test": "meteor test --once --driver-package meteortesting:mocha", + "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", + "visualize": "meteor --production --extra-packages bundle-visualizer" + }, + "dependencies": { + "@apollo/client": "^3.1.5", + "@babel/runtime": "^7.11.2", + "apollo-boost": "^0.4.9", + "apollo-server-express": "^2.17.0", + "graphql": "^15.3.0", + "meteor-node-stubs": "^1.0.1", + "react": "^16.13.1", + "react-dom": "^16.13.1" + }, + "meteor": { + "mainModule": { + "client": "client/main.jsx", + "server": "server/main.js" + }, + "testModule": "tests/main.js" + } +} diff --git a/tools/static-assets/skel-apollo/server/apollo.js b/tools/static-assets/skel-apollo/server/apollo.js new file mode 100644 index 0000000000..77b5ac4b9f --- /dev/null +++ b/tools/static-assets/skel-apollo/server/apollo.js @@ -0,0 +1,25 @@ +import { ApolloServer } from 'apollo-server-express'; +import { WebApp } from 'meteor/webapp'; +import { getUser } from 'meteor/apollo'; +import { LinksCollection } from '/imports/api/links'; +import typeDefs from '/imports/apollo/schema.graphql'; + +const resolvers = { + Query: { + getLink: (obj, { id }) => LinksCollection.findOne(id), + getLinks: () => LinksCollection.find().fetch() + } +}; + +const server = new ApolloServer({ + typeDefs, + resolvers, + context: async ({ req }) => ({ + user: await getUser(req.headers.authorization) + }) +}); + +server.applyMiddleware({ + app: WebApp.connectHandlers, + cors: true +}); diff --git a/tools/static-assets/skel-apollo/server/main.js b/tools/static-assets/skel-apollo/server/main.js new file mode 100644 index 0000000000..adc22c3c7b --- /dev/null +++ b/tools/static-assets/skel-apollo/server/main.js @@ -0,0 +1,32 @@ +import { Meteor } from 'meteor/meteor'; +import { LinksCollection } from '/imports/api/links'; +import './apollo' + +function insertLink({ title, url }) { + LinksCollection.insert({title, url, createdAt: new Date()}); +} + +Meteor.startup(() => { + // If the Links collection is empty, add some data. + if (LinksCollection.find().count() === 0) { + insertLink({ + title: 'Do the Tutorial', + url: 'https://www.meteor.com/tutorials/react/creating-an-app' + }); + + insertLink({ + title: 'Follow the Guide', + url: 'http://guide.meteor.com' + }); + + insertLink({ + title: 'Read the Docs', + url: 'https://docs.meteor.com' + }); + + insertLink({ + title: 'Discussions', + url: 'https://forums.meteor.com' + }); + } +}); diff --git a/tools/static-assets/skel-apollo/tests/main.js b/tools/static-assets/skel-apollo/tests/main.js new file mode 100644 index 0000000000..ea7a8da1e1 --- /dev/null +++ b/tools/static-assets/skel-apollo/tests/main.js @@ -0,0 +1,20 @@ +import assert from "assert"; + +describe("~name~", function () { + it("package.json has correct name", async function () { + const { name } = await import("../package.json"); + assert.strictEqual(name, "~name~"); + }); + + if (Meteor.isClient) { + it("client is not server", function () { + assert.strictEqual(Meteor.isServer, false); + }); + } + + if (Meteor.isServer) { + it("server is not client", function () { + assert.strictEqual(Meteor.isClient, false); + }); + } +}); diff --git a/tools/static-assets/skel-bare/.meteor/packages b/tools/static-assets/skel-bare/.meteor/packages index 1dacd59dda..62bedd2c00 100644 --- a/tools/static-assets/skel-bare/.meteor/packages +++ b/tools/static-assets/skel-bare/.meteor/packages @@ -15,4 +15,5 @@ standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode es5-shim # ECMAScript 5 compatibility for older browsers ecmascript # Enable ECMAScript2015+ syntax in app code +typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command diff --git a/tools/static-assets/skel-bare/package.json b/tools/static-assets/skel-bare/package.json index 12c1493b65..2b970219fd 100644 --- a/tools/static-assets/skel-bare/package.json +++ b/tools/static-assets/skel-bare/package.json @@ -5,7 +5,7 @@ "start": "meteor run" }, "dependencies": { - "@babel/runtime": "^7.0.0", - "meteor-node-stubs": "^0.4.1" + "@babel/runtime": "^7.11.2", + "meteor-node-stubs": "^1.0.1" } } diff --git a/tools/static-assets/skel-full/.meteor/packages b/tools/static-assets/skel-full/.meteor/packages index 31294f8311..8f6a2ce1df 100644 --- a/tools/static-assets/skel-full/.meteor/packages +++ b/tools/static-assets/skel-full/.meteor/packages @@ -8,6 +8,7 @@ meteor-base # Packages every Meteor app needs to have mobile-experience # Packages for a great mobile UX mongo # The database Meteor supports right now blaze-html-templates # Compile .html files into Meteor Blaze views +jquery # Wrapper package for npm-installed jquery reactive-var # Reactive variable for tracker tracker # Meteor's client-side reactive programming library @@ -15,11 +16,11 @@ standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode es5-shim # ECMAScript 5 compatibility for older browsers ecmascript # Enable ECMAScript2015+ syntax in app code +typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command -kadira:flow-router # FlowRouter is a very simple router for Meteor -kadira:blaze-layout # Layout manager for blaze (works well with FlowRouter) -less # Leaner CSS language +ostrio:flow-router-extra # FlowRouter is a very simple router for Meteor +less # Leaner CSS language meteortesting:mocha # A package for writing and running your meteor app and package tests with mocha johanbrook:publication-collector # Test a Meteor publication by collecting its output diff --git a/tools/static-assets/skel-full/imports/startup/client/routes.js b/tools/static-assets/skel-full/imports/startup/client/routes.js index df5f472d6d..4b109cb30b 100644 --- a/tools/static-assets/skel-full/imports/startup/client/routes.js +++ b/tools/static-assets/skel-full/imports/startup/client/routes.js @@ -1,5 +1,4 @@ -import { FlowRouter } from 'meteor/kadira:flow-router'; -import { BlazeLayout } from 'meteor/kadira:blaze-layout'; +import { FlowRouter } from 'meteor/ostrio:flow-router-extra'; // Import needed templates import '../../ui/layouts/body/body.js'; @@ -10,12 +9,12 @@ import '../../ui/pages/not-found/not-found.js'; FlowRouter.route('/', { name: 'App.home', action() { - BlazeLayout.render('App_body', { main: 'App_home' }); + this.render('App_body', 'App_home'); }, }); FlowRouter.notFound = { action() { - BlazeLayout.render('App_body', { main: 'App_notFound' }); + this.render('App_body', 'App_notFound'); }, }; diff --git a/tools/static-assets/skel-full/imports/ui/layouts/body/body.html b/tools/static-assets/skel-full/imports/ui/layouts/body/body.html index 4a8480d6c3..40e3cd9a99 100644 --- a/tools/static-assets/skel-full/imports/ui/layouts/body/body.html +++ b/tools/static-assets/skel-full/imports/ui/layouts/body/body.html @@ -1,3 +1,3 @@ diff --git a/tools/static-assets/skel-full/package.json b/tools/static-assets/skel-full/package.json index 2564b5537b..6a7d7a5c0a 100644 --- a/tools/static-assets/skel-full/package.json +++ b/tools/static-assets/skel-full/package.json @@ -6,10 +6,11 @@ "test": "meteor test --once --driver-package meteortesting:mocha" }, "dependencies": { - "@babel/runtime": "^7.0.0", - "meteor-node-stubs": "^0.4.1" + "@babel/runtime": "^7.11.2", + "jquery": "^3.5.1", + "meteor-node-stubs": "^1.0.1" }, "devDependencies": { - "chai": "^4.1.2" + "chai": "^4.2.0" } } diff --git a/tools/static-assets/skel-minimal/.meteor/packages b/tools/static-assets/skel-minimal/.meteor/packages index 341bbfc93a..8ddd70b7d2 100644 --- a/tools/static-assets/skel-minimal/.meteor/packages +++ b/tools/static-assets/skel-minimal/.meteor/packages @@ -10,6 +10,7 @@ standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode es5-shim # ECMAScript 5 compatibility for older browsers ecmascript # Enable ECMAScript2015+ syntax in app code +typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command webapp # Serves a Meteor app over HTTP server-render # Support for server-side rendering diff --git a/tools/static-assets/skel-minimal/package.json b/tools/static-assets/skel-minimal/package.json index 9525e7f7d1..ab8fbad718 100644 --- a/tools/static-assets/skel-minimal/package.json +++ b/tools/static-assets/skel-minimal/package.json @@ -8,8 +8,8 @@ "visualize": "meteor --production --extra-packages bundle-visualizer" }, "dependencies": { - "@babel/runtime": "^7.0.0", - "meteor-node-stubs": "^0.4.1" + "@babel/runtime": "^7.11.2", + "meteor-node-stubs": "^1.0.1" }, "meteor": { "mainModule": { diff --git a/tools/static-assets/skel-react/.meteor/packages b/tools/static-assets/skel-react/.meteor/packages index 1405595e1b..3319ee0005 100644 --- a/tools/static-assets/skel-react/.meteor/packages +++ b/tools/static-assets/skel-react/.meteor/packages @@ -13,6 +13,7 @@ standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode es5-shim # ECMAScript 5 compatibility for older browsers ecmascript # Enable ECMAScript2015+ syntax in app code +typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command autopublish # Publish all data to the clients (for prototyping) diff --git a/tools/static-assets/skel-react/client/main.jsx b/tools/static-assets/skel-react/client/main.jsx index e3b8986233..a42cee8ff3 100644 --- a/tools/static-assets/skel-react/client/main.jsx +++ b/tools/static-assets/skel-react/client/main.jsx @@ -1,8 +1,8 @@ import React from 'react'; import { Meteor } from 'meteor/meteor'; import { render } from 'react-dom'; -import App from '/imports/ui/App' +import { App } from '/imports/ui/App'; Meteor.startup(() => { - render(, document.getElementById('react-target')); + render(, document.getElementById('react-target')); }); diff --git a/tools/static-assets/skel-react/imports/api/links.js b/tools/static-assets/skel-react/imports/api/links.js index 27352f85ff..050c508eae 100644 --- a/tools/static-assets/skel-react/imports/api/links.js +++ b/tools/static-assets/skel-react/imports/api/links.js @@ -1,3 +1,3 @@ import { Mongo } from 'meteor/mongo'; -export default Links = new Mongo.Collection('links'); +export const LinksCollection = new Mongo.Collection('links'); diff --git a/tools/static-assets/skel-react/imports/ui/App.jsx b/tools/static-assets/skel-react/imports/ui/App.jsx index 0a835e8831..6f7340caf9 100644 --- a/tools/static-assets/skel-react/imports/ui/App.jsx +++ b/tools/static-assets/skel-react/imports/ui/App.jsx @@ -1,13 +1,11 @@ import React from 'react'; -import Hello from './Hello.jsx'; -import Info from './Info.jsx'; +import { Hello } from './Hello.jsx'; +import { Info } from './Info.jsx'; -const App = () => ( +export const App = () => (

      Welcome to Meteor!

      - - + +
      ); - -export default App; diff --git a/tools/static-assets/skel-react/imports/ui/Hello.jsx b/tools/static-assets/skel-react/imports/ui/Hello.jsx index 71f1349e65..15e0f185ac 100644 --- a/tools/static-assets/skel-react/imports/ui/Hello.jsx +++ b/tools/static-assets/skel-react/imports/ui/Hello.jsx @@ -1,22 +1,16 @@ -import React, { Component } from 'react'; +import React, { useState } from 'react'; -export default class Hello extends Component { - state = { - counter: 0, - } +export const Hello = () => { + const [counter, setCounter] = useState(0); - increment() { - this.setState({ - counter: this.state.counter + 1 - }); - } + const increment = () => { + setCounter(counter + 1); + }; - render() { - return ( -
      - -

      You've pressed the button {this.state.counter} times.

      -
      - ); - } -} + return ( +
      + +

      You've pressed the button {counter} times.

      +
      + ); +}; diff --git a/tools/static-assets/skel-react/imports/ui/Info.jsx b/tools/static-assets/skel-react/imports/ui/Info.jsx index dcc5da77b8..62a0100d67 100644 --- a/tools/static-assets/skel-react/imports/ui/Info.jsx +++ b/tools/static-assets/skel-react/imports/ui/Info.jsx @@ -1,32 +1,20 @@ -import React, { Component } from 'react'; -import { withTracker } from 'meteor/react-meteor-data'; -import Links from '../api/links'; +import React from 'react'; +import { useTracker } from 'meteor/react-meteor-data'; +import { LinksCollection } from '../api/links'; -class Info extends Component { - render() { - const links = this.props.links.map( - link => this.makeLink(link) - ); +export const Info = () => { + const links = useTracker(() => { + return LinksCollection.find().fetch(); + }); - return ( -
      -

      Learn Meteor!

      -
        { links }
      -
      - ); - } - - makeLink(link) { - return ( -
    • - {link.title} -
    • - ); - } -} - -export default InfoContainer = withTracker(() => { - return { - links: Links.find().fetch(), - }; -})(Info); + return ( +
      +

      Learn Meteor!

      + +
      + ); +}; diff --git a/tools/static-assets/skel-react/package.json b/tools/static-assets/skel-react/package.json index 08fcde47f1..e3b8f06f69 100644 --- a/tools/static-assets/skel-react/package.json +++ b/tools/static-assets/skel-react/package.json @@ -8,10 +8,10 @@ "visualize": "meteor --production --extra-packages bundle-visualizer" }, "dependencies": { - "@babel/runtime": "^7.0.0", - "meteor-node-stubs": "^0.4.1", - "react": "^16.5.0", - "react-dom": "^16.5.0" + "@babel/runtime": "^7.11.2", + "meteor-node-stubs": "^1.0.1", + "react": "^16.13.1", + "react-dom": "^16.13.1" }, "meteor": { "mainModule": { diff --git a/tools/static-assets/skel-react/server/main.js b/tools/static-assets/skel-react/server/main.js index e120ad56f7..13e6a4f815 100644 --- a/tools/static-assets/skel-react/server/main.js +++ b/tools/static-assets/skel-react/server/main.js @@ -1,31 +1,31 @@ import { Meteor } from 'meteor/meteor'; -import Links from '/imports/api/links'; +import { LinksCollection } from '/imports/api/links'; -function insertLink(title, url) { - Links.insert({ title, url, createdAt: new Date() }); +function insertLink({ title, url }) { + LinksCollection.insert({title, url, createdAt: new Date()}); } Meteor.startup(() => { // If the Links collection is empty, add some data. - if (Links.find().count() === 0) { - insertLink( - 'Do the Tutorial', - 'https://www.meteor.com/tutorials/react/creating-an-app' - ); + if (LinksCollection.find().count() === 0) { + insertLink({ + title: 'Do the Tutorial', + url: 'https://www.meteor.com/tutorials/react/creating-an-app' + }); - insertLink( - 'Follow the Guide', - 'http://guide.meteor.com' - ); + insertLink({ + title: 'Follow the Guide', + url: 'http://guide.meteor.com' + }); - insertLink( - 'Read the Docs', - 'https://docs.meteor.com' - ); + insertLink({ + title: 'Read the Docs', + url: 'https://docs.meteor.com' + }); - insertLink( - 'Discussions', - 'https://forums.meteor.com' - ); + insertLink({ + title: 'Discussions', + url: 'https://forums.meteor.com' + }); } }); diff --git a/tools/static-assets/skel-typescript/.gitignore b/tools/static-assets/skel-typescript/.gitignore new file mode 100644 index 0000000000..c2658d7d1b --- /dev/null +++ b/tools/static-assets/skel-typescript/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/examples/other/defer-in-inactive-tab/.meteor/.gitignore b/tools/static-assets/skel-typescript/.meteor/.gitignore similarity index 100% rename from examples/other/defer-in-inactive-tab/.meteor/.gitignore rename to tools/static-assets/skel-typescript/.meteor/.gitignore diff --git a/tools/static-assets/skel-typescript/.meteor/packages b/tools/static-assets/skel-typescript/.meteor/packages new file mode 100644 index 0000000000..3319ee0005 --- /dev/null +++ b/tools/static-assets/skel-typescript/.meteor/packages @@ -0,0 +1,22 @@ +# Meteor packages used by this project, one per line. +# Check this file (and the other files in this directory) into your repository. +# +# 'meteor add' and 'meteor remove' will edit this file for you, +# but you can also edit it by hand. + +meteor-base # Packages every Meteor app needs to have +mobile-experience # Packages for a great mobile UX +mongo # The database Meteor supports right now +reactive-var # Reactive variable for tracker + +standard-minifier-css # CSS minifier run for production mode +standard-minifier-js # JS minifier run for production mode +es5-shim # ECMAScript 5 compatibility for older browsers +ecmascript # Enable ECMAScript2015+ syntax in app code +typescript # Enable TypeScript syntax in .ts and .tsx modules +shell-server # Server-side component of the `meteor shell` command + +autopublish # Publish all data to the clients (for prototyping) +insecure # Allow all DB writes from clients (for prototyping) +static-html # Define static page content in .html files +react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/examples/other/wordplay/.meteor/platforms b/tools/static-assets/skel-typescript/.meteor/platforms similarity index 100% rename from examples/other/wordplay/.meteor/platforms rename to tools/static-assets/skel-typescript/.meteor/platforms diff --git a/tools/static-assets/skel-typescript/client/main.css b/tools/static-assets/skel-typescript/client/main.css new file mode 100644 index 0000000000..7f354f0fa7 --- /dev/null +++ b/tools/static-assets/skel-typescript/client/main.css @@ -0,0 +1,4 @@ +body { + padding: 10px; + font-family: sans-serif; +} diff --git a/tools/static-assets/skel-typescript/client/main.html b/tools/static-assets/skel-typescript/client/main.html new file mode 100644 index 0000000000..27c3712e54 --- /dev/null +++ b/tools/static-assets/skel-typescript/client/main.html @@ -0,0 +1,7 @@ + + ~name~ + + + +
      + diff --git a/tools/static-assets/skel-typescript/client/main.tsx b/tools/static-assets/skel-typescript/client/main.tsx new file mode 100644 index 0000000000..5e9849b062 --- /dev/null +++ b/tools/static-assets/skel-typescript/client/main.tsx @@ -0,0 +1,8 @@ +import React from 'react'; +import { Meteor } from 'meteor/meteor'; +import { render } from 'react-dom'; +import { App } from '/imports/ui/App' + +Meteor.startup(() => { + render(, document.getElementById('react-target')); +}); diff --git a/tools/static-assets/skel-typescript/imports/api/links.ts b/tools/static-assets/skel-typescript/imports/api/links.ts new file mode 100644 index 0000000000..ec0bf4631f --- /dev/null +++ b/tools/static-assets/skel-typescript/imports/api/links.ts @@ -0,0 +1,10 @@ +import { Mongo } from 'meteor/mongo'; + +export interface Link { + _id?: string; + title: string; + url: string; + createdAt: Date; +} + +export const LinksCollection = new Mongo.Collection('links'); diff --git a/tools/static-assets/skel-typescript/imports/ui/App.tsx b/tools/static-assets/skel-typescript/imports/ui/App.tsx new file mode 100644 index 0000000000..d354e1b352 --- /dev/null +++ b/tools/static-assets/skel-typescript/imports/ui/App.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import { Hello } from './Hello'; +import { Info } from './Info'; + +export const App = () => ( +
      +

      Welcome to Meteor!

      + + +
      +); diff --git a/tools/static-assets/skel-typescript/imports/ui/Hello.tsx b/tools/static-assets/skel-typescript/imports/ui/Hello.tsx new file mode 100644 index 0000000000..15e0f185ac --- /dev/null +++ b/tools/static-assets/skel-typescript/imports/ui/Hello.tsx @@ -0,0 +1,16 @@ +import React, { useState } from 'react'; + +export const Hello = () => { + const [counter, setCounter] = useState(0); + + const increment = () => { + setCounter(counter + 1); + }; + + return ( +
      + +

      You've pressed the button {counter} times.

      +
      + ); +}; diff --git a/tools/static-assets/skel-typescript/imports/ui/Info.tsx b/tools/static-assets/skel-typescript/imports/ui/Info.tsx new file mode 100644 index 0000000000..3bcf685386 --- /dev/null +++ b/tools/static-assets/skel-typescript/imports/ui/Info.tsx @@ -0,0 +1,24 @@ +import React from 'react'; +import { useTracker } from 'meteor/react-meteor-data'; +import { LinksCollection, Link } from '../api/links'; + +export const Info = () => { + const links = useTracker(() => { + return LinksCollection.find().fetch(); + }); + + const makeLink = (link: Link) => { + return ( +
    • + {link.title} +
    • + ); + } + + return ( +
      +

      Learn Meteor!

      +
        {links.map(makeLink)}
      +
      + ); +}; diff --git a/tools/static-assets/skel-typescript/package.json b/tools/static-assets/skel-typescript/package.json new file mode 100644 index 0000000000..976e5c8d12 --- /dev/null +++ b/tools/static-assets/skel-typescript/package.json @@ -0,0 +1,30 @@ +{ + "name": "~name~", + "private": true, + "scripts": { + "start": "meteor run", + "test": "meteor test --once --driver-package meteortesting:mocha", + "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", + "visualize": "meteor --production --extra-packages bundle-visualizer" + }, + "dependencies": { + "@babel/runtime": "^7.11.2", + "meteor-node-stubs": "^1.0.1", + "react": "^16.13.1", + "react-dom": "^16.13.1" + }, + "devDependencies": { + "@types/meteor": "^1.4.49", + "@types/mocha": "^8.0.3", + "@types/react": "^16.9.49", + "@types/react-dom": "^16.9.8", + "typescript": "^4.0.2" + }, + "meteor": { + "mainModule": { + "client": "client/main.tsx", + "server": "server/main.ts" + }, + "testModule": "tests/main.ts" + } +} diff --git a/tools/static-assets/skel-typescript/server/main.ts b/tools/static-assets/skel-typescript/server/main.ts new file mode 100644 index 0000000000..d4cdc49249 --- /dev/null +++ b/tools/static-assets/skel-typescript/server/main.ts @@ -0,0 +1,31 @@ +import { Meteor } from 'meteor/meteor'; +import { LinksCollection } from '/imports/api/links'; + +function insertLink(title: string, url: string) { + LinksCollection.insert({ title, url, createdAt: new Date() }); +} + +Meteor.startup(() => { + // If the Links collection is empty, add some data. + if (LinksCollection.find().count() === 0) { + insertLink( + 'Do the Tutorial', + 'https://www.meteor.com/tutorials/react/creating-an-app' + ); + + insertLink( + 'Follow the Guide', + 'http://guide.meteor.com' + ); + + insertLink( + 'Read the Docs', + 'https://docs.meteor.com' + ); + + insertLink( + 'Discussions', + 'https://forums.meteor.com' + ); + } +}); diff --git a/tools/static-assets/skel-typescript/tests/main.ts b/tools/static-assets/skel-typescript/tests/main.ts new file mode 100644 index 0000000000..7c3722128b --- /dev/null +++ b/tools/static-assets/skel-typescript/tests/main.ts @@ -0,0 +1,21 @@ +import { Meteor } from 'meteor/meteor'; +import assert from 'assert'; + +describe('~name~', function () { + it('package.json has correct name', async function () { + const { name } = await import('../package.json'); + assert.strictEqual(name, '~name~'); + }); + + if (Meteor.isClient) { + it('client is not server', function () { + assert.strictEqual(Meteor.isServer, false); + }); + } + + if (Meteor.isServer) { + it('server is not client', function () { + assert.strictEqual(Meteor.isClient, false); + }); + } +}); diff --git a/tools/static-assets/skel-typescript/tsconfig.json b/tools/static-assets/skel-typescript/tsconfig.json new file mode 100644 index 0000000000..4be740cec2 --- /dev/null +++ b/tools/static-assets/skel-typescript/tsconfig.json @@ -0,0 +1,40 @@ +{ + "compilerOptions": { + /* Basic Options */ + "target": "es2018", + "module": "esNext", + "lib": ["esnext", "dom"], + "allowJs": true, + "checkJs": false, + "jsx": "preserve", + "incremental": true, + "noEmit": true, + + /* Strict Type-Checking Options */ + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + + /* Additional Checks */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": false, + "noFallthroughCasesInSwitch": false, + + /* Module Resolution Options */ + "baseUrl": ".", + "paths": { + /* Support absolute /imports/* with a leading '/' */ + "/*": ["*"] + }, + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node", "mocha"], + "esModuleInterop": true, + "preserveSymlinks": true + }, + "exclude": [ + "./.meteor/**", + "./packages/**" + ] +} diff --git a/tools/static-assets/skel-vue/.gitignore b/tools/static-assets/skel-vue/.gitignore new file mode 100644 index 0000000000..c2658d7d1b --- /dev/null +++ b/tools/static-assets/skel-vue/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/examples/other/domrange-grid/.meteor/.gitignore b/tools/static-assets/skel-vue/.meteor/.gitignore similarity index 100% rename from examples/other/domrange-grid/.meteor/.gitignore rename to tools/static-assets/skel-vue/.meteor/.gitignore diff --git a/tools/static-assets/skel-vue/.meteor/packages b/tools/static-assets/skel-vue/.meteor/packages new file mode 100644 index 0000000000..83be6b3a62 --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/packages @@ -0,0 +1,24 @@ +# Meteor packages used by this project, one per line. +# Check this file (and the other files in this directory) into your repository. +# +# 'meteor add' and 'meteor remove' will edit this file for you, +# but you can also edit it by hand. + +meteor-base # Packages every Meteor app needs to have +mobile-experience # Packages for a great mobile UX +mongo # The database Meteor supports right now +reactive-var # Reactive variable for tracker + +standard-minifier-css # CSS minifier run for production mode +standard-minifier-js # JS minifier run for production mode +es5-shim # ECMAScript 5 compatibility for older browsers +ecmascript # Enable ECMAScript2015+ syntax in app code +typescript # Enable TypeScript syntax in .ts and .tsx modules +shell-server # Server-side component of the `meteor shell` command + +tracker # Dependency tracker to allow reactive callbacks +static-html # Define static page content in .html files +akryum:vue-component # Vue-CLI template to publish components + +meteortesting:mocha # A package for writing and running your meteor app and package tests with mocha +johanbrook:publication-collector # Test a Meteor publication by collecting its output diff --git a/tools/static-assets/skel-vue/.meteor/platforms b/tools/static-assets/skel-vue/.meteor/platforms new file mode 100644 index 0000000000..efeba1b50c --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/platforms @@ -0,0 +1,2 @@ +server +browser diff --git a/tools/static-assets/skel-vue/client/main.html b/tools/static-assets/skel-vue/client/main.html new file mode 100644 index 0000000000..99c3dfb74c --- /dev/null +++ b/tools/static-assets/skel-vue/client/main.html @@ -0,0 +1,7 @@ + + ~name~ + + + +
      + diff --git a/tools/static-assets/skel-vue/client/main.js b/tools/static-assets/skel-vue/client/main.js new file mode 100644 index 0000000000..665c6aa1b1 --- /dev/null +++ b/tools/static-assets/skel-vue/client/main.js @@ -0,0 +1,12 @@ +import Vue from 'vue' + +import '../imports/ui/plugins' + +import App from '../imports/ui/App.vue' + +Meteor.startup(() => { + new Vue({ + el: '#app', + ...App, + }) +}) diff --git a/tools/static-assets/skel-vue/imports/api/collections/Links.js b/tools/static-assets/skel-vue/imports/api/collections/Links.js new file mode 100644 index 0000000000..de6a43c4a4 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/api/collections/Links.js @@ -0,0 +1,3 @@ +import { Mongo } from 'meteor/mongo'; + +export default new Mongo.Collection('links'); diff --git a/tools/static-assets/skel-vue/imports/api/collections/Links.tests.js b/tools/static-assets/skel-vue/imports/api/collections/Links.tests.js new file mode 100644 index 0000000000..ce178512d0 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/api/collections/Links.tests.js @@ -0,0 +1,24 @@ +// Tests for the behavior of the links collection +// +// https://guide.meteor.com/testing.html + +import { Meteor } from 'meteor/meteor'; +import { assert } from 'chai'; +import Links from './Links.js'; + +if (Meteor.isServer) { + describe('links collection', function () { + it('insert correctly', function () { + const linkId = Links.insert({ + title: 'meteor homepage', + url: 'https://www.meteor.com', + }); + const added = Links.find({ _id: linkId }); + const collectionName = added._getCollectionName(); + const count = added.count(); + + assert.equal(collectionName, 'links'); + assert.equal(count, 1); + }); + }); +} diff --git a/tools/static-assets/skel-vue/imports/api/fixtures.js b/tools/static-assets/skel-vue/imports/api/fixtures.js new file mode 100644 index 0000000000..f629f5ca0b --- /dev/null +++ b/tools/static-assets/skel-vue/imports/api/fixtures.js @@ -0,0 +1,32 @@ +import { Meteor } from 'meteor/meteor'; +import Links from './collections/Links.js'; + +Meteor.startup(() => { + // if the Links collection is empty + if (Links.find().count() === 0) { + const data = [ + { + title: 'Do the Tutorial', + url: 'https://www.meteor.com/try', + createdAt: new Date(), + }, + { + title: 'Follow the Guide', + url: 'http://guide.meteor.com', + createdAt: new Date(), + }, + { + title: 'Read the Docs', + url: 'https://docs.meteor.com', + createdAt: new Date(), + }, + { + title: 'Discussions', + url: 'https://forums.meteor.com', + createdAt: new Date(), + }, + ]; + + data.forEach(link => Links.insert(link)); + } +}); diff --git a/tools/static-assets/skel-vue/imports/api/methods/createLink.js b/tools/static-assets/skel-vue/imports/api/methods/createLink.js new file mode 100644 index 0000000000..876f710978 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/api/methods/createLink.js @@ -0,0 +1,16 @@ +import { Meteor } from 'meteor/meteor'; +import { check } from 'meteor/check'; +import Links from '../collections/Links.js'; + +Meteor.methods({ + 'createLink'(title, url) { + check(url, String); + check(title, String); + + return Links.insert({ + url, + title, + createdAt: new Date(), + }); + }, +}); diff --git a/tools/static-assets/skel-vue/imports/api/methods/createLink.tests.js b/tools/static-assets/skel-vue/imports/api/methods/createLink.tests.js new file mode 100644 index 0000000000..d899a7338f --- /dev/null +++ b/tools/static-assets/skel-vue/imports/api/methods/createLink.tests.js @@ -0,0 +1,20 @@ +import { Meteor } from 'meteor/meteor'; +import { assert } from 'chai'; +import Links from '../collections/Links.js'; +import './methods.js'; + +if (Meteor.isServer) { + describe('method: createLink', function () { + beforeEach(function () { + Links.remove({}); + }); + + it('can add a new link', function () { + const addLink = Meteor.server.method_handlers['createLink']; + + addLink.apply({}, ['meteor.com', 'https://www.meteor.com']); + + assert.equal(Links.find().count(), 1); + }); + }); +} diff --git a/tools/static-assets/skel-vue/imports/api/methods/index.js b/tools/static-assets/skel-vue/imports/api/methods/index.js new file mode 100644 index 0000000000..c52403a2e8 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/api/methods/index.js @@ -0,0 +1 @@ +import './createLink' diff --git a/tools/static-assets/skel-vue/imports/api/publications/index.js b/tools/static-assets/skel-vue/imports/api/publications/index.js new file mode 100644 index 0000000000..d161b580e7 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/api/publications/index.js @@ -0,0 +1 @@ +import './links' diff --git a/tools/static-assets/skel-vue/imports/api/publications/links.js b/tools/static-assets/skel-vue/imports/api/publications/links.js new file mode 100644 index 0000000000..f085d75045 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/api/publications/links.js @@ -0,0 +1,6 @@ +import { Meteor } from 'meteor/meteor'; +import Links from '../collections/Links.js'; + +Meteor.publish('links', function () { + return Links.find(); +}); diff --git a/tools/static-assets/skel-vue/imports/api/publications/links.tests.js b/tools/static-assets/skel-vue/imports/api/publications/links.tests.js new file mode 100644 index 0000000000..37f337c869 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/api/publications/links.tests.js @@ -0,0 +1,22 @@ +import { assert } from 'chai' +import { PublicationCollector } from 'meteor/johanbrook:publication-collector' +import Links from '../collections/Links.js' +import './publications.js' + +describe('Publish links', function () { + beforeEach(function () { + Links.remove({}) + Links.insert({ + title: 'meteor homepage', + url: 'https://www.meteor.com' + }) + }) + + it('sends all links', function (done) { + const collector = new PublicationCollector() + collector.collect('links', (collections) => { + assert.equal(collections.links.length, 1) + done() + }) + }) +}) diff --git a/tools/static-assets/skel-vue/imports/ui/App.vue b/tools/static-assets/skel-vue/imports/ui/App.vue new file mode 100644 index 0000000000..e126098ccb --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/App.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/tools/static-assets/skel-vue/imports/ui/components/Hello.vue b/tools/static-assets/skel-vue/imports/ui/components/Hello.vue new file mode 100644 index 0000000000..64947eb06a --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/components/Hello.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/tools/static-assets/skel-vue/imports/ui/components/Info.vue b/tools/static-assets/skel-vue/imports/ui/components/Info.vue new file mode 100644 index 0000000000..376d60562b --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/components/Info.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/tools/static-assets/skel-vue/imports/ui/plugins.js b/tools/static-assets/skel-vue/imports/ui/plugins.js new file mode 100644 index 0000000000..eb976c92e5 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/plugins.js @@ -0,0 +1,4 @@ +import Vue from 'vue' +import VueMeteorTracker from 'vue-meteor-tracker' + +Vue.use(VueMeteorTracker) diff --git a/tools/static-assets/skel-vue/package.json b/tools/static-assets/skel-vue/package.json new file mode 100644 index 0000000000..1ebafa95e1 --- /dev/null +++ b/tools/static-assets/skel-vue/package.json @@ -0,0 +1,23 @@ +{ + "name": "~name~", + "private": true, + "scripts": { + "start": "meteor run", + "test": "meteor test --once --driver-package meteortesting:mocha", + "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", + "visualize": "meteor --production --extra-packages bundle-visualizer" + }, + "dependencies": { + "@babel/runtime": "^7.11.2", + "meteor-node-stubs": "^1.0.1", + "vue": "^2.6.12", + "vue-meteor-tracker": "^2.0.0-beta.5" + }, + "meteor": { + "mainModule": { + "client": "client/main.js", + "server": "server/main.js" + }, + "testModule": "tests/main.js" + } +} diff --git a/tools/static-assets/skel-vue/server/main.js b/tools/static-assets/skel-vue/server/main.js new file mode 100644 index 0000000000..42950618b6 --- /dev/null +++ b/tools/static-assets/skel-vue/server/main.js @@ -0,0 +1,3 @@ +import '../imports/api/fixtures' +import '../imports/api/methods' +import '../imports/api/publications' diff --git a/tools/static-assets/skel-vue/tests/main.js b/tools/static-assets/skel-vue/tests/main.js new file mode 100644 index 0000000000..6d2a32e09d --- /dev/null +++ b/tools/static-assets/skel-vue/tests/main.js @@ -0,0 +1,20 @@ +import assert from "assert"; + +describe("skel", function () { + it("package.json has correct name", async function () { + const { name } = await import("../package.json"); + assert.strictEqual(name, "skel"); + }); + + if (Meteor.isClient) { + it("client is not server", function () { + assert.strictEqual(Meteor.isServer, false); + }); + } + + if (Meteor.isServer) { + it("server is not client", function () { + assert.strictEqual(Meteor.isClient, false); + }); + } +}); diff --git a/tools/static-assets/skel/.meteor/packages b/tools/static-assets/skel/.meteor/packages index 18f8d45d89..c7d0ab6546 100644 --- a/tools/static-assets/skel/.meteor/packages +++ b/tools/static-assets/skel/.meteor/packages @@ -7,7 +7,8 @@ meteor-base # Packages every Meteor app needs to have mobile-experience # Packages for a great mobile UX mongo # The database Meteor supports right now -blaze-html-templates@1.0.4 # Compile .html files into Meteor Blaze views +blaze-html-templates # Compile .html files into Meteor Blaze views +jquery # Wrapper package for npm-installed jquery reactive-var # Reactive variable for tracker tracker # Meteor's client-side reactive programming library @@ -15,6 +16,7 @@ standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode es5-shim # ECMAScript 5 compatibility for older browsers ecmascript # Enable ECMAScript2015+ syntax in app code +typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command autopublish # Publish all data to the clients (for prototyping) diff --git a/tools/static-assets/skel/package.json b/tools/static-assets/skel/package.json index 9525e7f7d1..61bcd56b35 100644 --- a/tools/static-assets/skel/package.json +++ b/tools/static-assets/skel/package.json @@ -8,8 +8,9 @@ "visualize": "meteor --production --extra-packages bundle-visualizer" }, "dependencies": { - "@babel/runtime": "^7.0.0", - "meteor-node-stubs": "^0.4.1" + "@babel/runtime": "^7.11.2", + "jquery": "^3.5.1", + "meteor-node-stubs": "^1.0.1" }, "meteor": { "mainModule": { diff --git a/tools/tests/apps/app-config/package-lock.json b/tools/tests/apps/app-config/package-lock.json index cadbb82a17..38cde11c9c 100644 --- a/tools/tests/apps/app-config/package-lock.json +++ b/tools/tests/apps/app-config/package-lock.json @@ -4,20 +4,19 @@ "lockfileVersion": 1, "dependencies": { "@babel/runtime": { - "version": "7.0.0-beta.46", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0-beta.46.tgz", - "integrity": "sha512-/3a3USMKk54BEHhDgY8rtxtaQOs4bp4aQwo6SDtdwmrXmgSgEusWuXNX5oIs/nwzmTD9o8wz2EyAjA+uHDMmJA==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.0.tgz", + "integrity": "sha512-2xsuyZ0R0RBFwjgae5NpXk8FcfH4qovj5cEM5VEeB7KXnKqzaisIu2HSV/mCEISolJJuR4wkViUGYujA8MH9tw==", "requires": { - "core-js": "2.5.6", - "regenerator-runtime": "0.11.1" + "regenerator-runtime": "^0.13.2" } }, "agent-base": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz", - "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", "requires": { - "es6-promisify": "5.0.0" + "es6-promisify": "^5.0.0" } }, "async-limiter": { @@ -35,65 +34,81 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, - "core-js": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", - "integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ==" - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "es6-promise": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", - "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", + "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==" }, "es6-promisify": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "requires": { - "es6-promise": "4.2.4" + "es6-promise": "^4.0.3" } }, "extract-zip": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", - "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", + "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", "requires": { - "concat-stream": "1.6.0", + "concat-stream": "1.6.2", "debug": "2.6.9", - "mkdirp": "0.5.0", + "mkdirp": "0.5.1", "yauzl": "2.4.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "fd-slicer": { @@ -101,7 +116,7 @@ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", "requires": { - "pend": "1.2.0" + "pend": "~1.2.0" } }, "fs.realpath": { @@ -110,16 +125,16 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "https-proxy-agent": { @@ -127,16 +142,16 @@ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", "requires": { - "agent-base": "4.2.0", - "debug": "3.1.0" + "agent-base": "^4.1.0", + "debug": "^3.1.0" }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } } } @@ -146,8 +161,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -161,42 +176,42 @@ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "meteor-node-stubs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-0.4.1.tgz", - "integrity": "sha512-UO2OStvLOKoApmOdIP5eCqoLaa/ritMXRg4ffJVdkNLEsczzPvTjgC0Mxk4cM4R8MZkwll90FYgjDf5qUTJdMA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.0.0.tgz", + "integrity": "sha512-QJwyv23wyXD3uEMzk5Xr/y5ezoVlCbHvBbrgdkVadn84dmifLRbs0PtD6EeNw5NLIk+SQSfxld7IMdEsneGz5w==", "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.1.4", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "0.0.1", - "os-browserify": "0.2.1", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.1", - "string_decoder": "1.1.1", - "timers-browserify": "1.4.2", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", - "vm-browserify": "0.0.4" + "assert": "^1.4.1", + "browserify-zlib": "^0.2.0", + "buffer": "^5.2.1", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.12.0", + "domain-browser": "^1.2.0", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.0", + "process": "^0.11.10", + "punycode": "^2.1.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^3.3.0", + "stream-browserify": "^2.0.2", + "stream-http": "^3.0.0", + "string_decoder": "^1.2.0", + "timers-browserify": "^2.0.10", + "tty-browserify": "0.0.1", + "url": "^0.11.0", + "util": "^0.11.1", + "vm-browserify": "^1.1.0" }, "dependencies": { "asn1.js": { "version": "4.10.1", "bundled": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.1", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -204,6 +219,15 @@ "bundled": true, "requires": { "util": "0.10.3" + }, + "dependencies": { + "util": { + "version": "0.10.3", + "bundled": true, + "requires": { + "inherits": "2.0.1" + } + } } }, "base64-js": { @@ -222,67 +246,67 @@ "version": "1.2.0", "bundled": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.1", - "safe-buffer": "5.1.2" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { "version": "1.0.1", "bundled": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.1", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { - "version": "1.0.1", + "version": "1.0.2", "bundled": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.1" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { "version": "4.0.1", "bundled": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { "version": "4.0.4", "bundled": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.0", - "inherits": "2.0.1", - "parse-asn1": "5.1.1" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { - "version": "0.1.4", + "version": "0.2.0", "bundled": true, "requires": { - "pako": "0.2.9" + "pako": "~1.0.5" } }, "buffer": { - "version": "4.9.1", + "version": "5.2.1", "bundled": true, "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.11", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" } }, "buffer-xor": { @@ -297,15 +321,15 @@ "version": "1.0.4", "bundled": true, "requires": { - "inherits": "2.0.1", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "console-browserify": { "version": "1.1.0", "bundled": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -320,48 +344,48 @@ "version": "4.0.3", "bundled": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { "version": "1.2.0", "bundled": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.1", - "md5.js": "1.3.4", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { "version": "1.1.7", "bundled": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.1", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "crypto-browserify": { "version": "3.12.0", "bundled": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.1", - "pbkdf2": "3.0.16", - "public-encrypt": "4.0.2", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "date-now": { @@ -372,17 +396,17 @@ "version": "1.0.0", "bundled": true, "requires": { - "inherits": "2.0.1", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "diffie-hellman": { "version": "5.0.3", "bundled": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "domain-browser": { @@ -390,44 +414,44 @@ "bundled": true }, "elliptic": { - "version": "6.4.0", + "version": "6.4.1", "bundled": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.1", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "events": { - "version": "1.1.1", + "version": "3.0.0", "bundled": true }, "evp_bytestokey": { "version": "1.0.3", "bundled": true, "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "hash-base": { "version": "3.0.4", "bundled": true, "requires": { - "inherits": "2.0.1", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { - "version": "1.1.3", + "version": "1.1.7", "bundled": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" }, "dependencies": { "inherits": { @@ -440,21 +464,17 @@ "version": "1.0.1", "bundled": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "https-browserify": { - "version": "0.0.1", + "version": "1.0.0", "bundled": true }, "ieee754": { - "version": "1.1.11", - "bundled": true - }, - "indexof": { - "version": "0.0.1", + "version": "1.1.13", "bundled": true }, "inherits": { @@ -466,19 +486,20 @@ "bundled": true }, "md5.js": { - "version": "1.3.4", + "version": "1.3.5", "bundled": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.1" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "miller-rabin": { "version": "4.0.1", "bundled": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "minimalistic-assert": { @@ -490,37 +511,38 @@ "bundled": true }, "os-browserify": { - "version": "0.2.1", + "version": "0.3.0", "bundled": true }, "pako": { - "version": "0.2.9", + "version": "1.0.10", "bundled": true }, "parse-asn1": { - "version": "5.1.1", + "version": "5.1.4", "bundled": true, "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.16" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, "path-browserify": { - "version": "0.0.0", + "version": "1.0.0", "bundled": true }, "pbkdf2": { - "version": "3.0.16", + "version": "3.0.17", "bundled": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "process": { @@ -532,18 +554,19 @@ "bundled": true }, "public-encrypt": { - "version": "4.0.2", + "version": "4.0.3", "bundled": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "punycode": { - "version": "1.4.1", + "version": "2.1.1", "bundled": true }, "querystring": { @@ -555,31 +578,27 @@ "bundled": true }, "randombytes": { - "version": "2.0.6", + "version": "2.1.0", "bundled": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { "version": "1.0.4", "bundled": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "readable-stream": { - "version": "2.3.6", + "version": "3.3.0", "bundled": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "dependencies": { "inherits": { @@ -592,61 +611,88 @@ "version": "2.0.2", "bundled": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.1" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "safe-buffer": { "version": "5.1.2", "bundled": true }, + "setimmediate": { + "version": "1.0.5", + "bundled": true + }, "sha.js": { "version": "2.4.11", "bundled": true, "requires": { - "inherits": "2.0.1", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "stream-browserify": { - "version": "2.0.1", + "version": "2.0.2", "bundled": true, "requires": { - "inherits": "2.0.1", - "readable-stream": "2.3.6" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "bundled": true + } + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "stream-http": { - "version": "2.8.1", + "version": "3.0.0", "bundled": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.1", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^3.0.6", + "xtend": "^4.0.0" } }, "string_decoder": { - "version": "1.1.1", + "version": "1.2.0", "bundled": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "timers-browserify": { - "version": "1.4.2", + "version": "2.0.10", "bundled": true, "requires": { - "process": "0.11.10" + "setimmediate": "^1.0.4" } }, - "to-arraybuffer": { - "version": "1.0.1", - "bundled": true - }, "tty-browserify": { - "version": "0.0.0", + "version": "0.0.1", "bundled": true }, "url": { @@ -664,10 +710,16 @@ } }, "util": { - "version": "0.10.3", + "version": "0.11.1", "bundled": true, "requires": { - "inherits": "2.0.1" + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "bundled": true + } } }, "util-deprecate": { @@ -675,11 +727,8 @@ "bundled": true }, "vm-browserify": { - "version": "0.0.4", - "bundled": true, - "requires": { - "indexof": "0.0.1" - } + "version": "1.1.0", + "bundled": true }, "xtend": { "version": "4.0.1", @@ -688,16 +737,16 @@ } }, "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==" }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -706,24 +755,24 @@ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "mkdirp": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", - "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "requires": { "minimist": "0.0.8" } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "path-is-absolute": { @@ -742,9 +791,9 @@ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "proxy-from-env": { "version": "1.0.0", @@ -752,18 +801,18 @@ "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=" }, "puppeteer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.3.0.tgz", - "integrity": "sha512-wx10aPQPpGJVxdB6yoDSLm9p4rCwARUSLMVV0bx++owuqkvviXKyiFM3EWsywaFmjOKNPXacIjplF7xhHiFP3w==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.13.0.tgz", + "integrity": "sha512-LUXgvhjfB/P6IOUDAKxOcbCz9ISwBLL9UpKghYrcBDwrOGx1m60y0iN2M64mdAUbT4+7oZM5DTxOW7equa2fxQ==", "requires": { - "debug": "2.6.9", - "extract-zip": "1.6.6", - "https-proxy-agent": "2.2.1", - "mime": "1.6.0", - "progress": "2.0.0", - "proxy-from-env": "1.0.0", - "rimraf": "2.6.2", - "ws": "3.3.3" + "debug": "^4.1.0", + "extract-zip": "^1.6.6", + "https-proxy-agent": "^2.2.1", + "mime": "^2.0.3", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^2.6.1", + "ws": "^6.1.0" } }, "readable-stream": { @@ -771,39 +820,39 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "requires": { - "glob": "7.1.2" + "glob": "^7.1.3" } }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "typedarray": { @@ -811,11 +860,6 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -827,13 +871,11 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.0.tgz", + "integrity": "sha512-deZYUNlt2O4buFCa3t5bKLf8A7FPP/TVjwOeVNpw818Ma5nk4MLXls2eoEGS39o8119QIYxTrTDoPQ5B/gTD6w==", "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", - "ultron": "1.1.1" + "async-limiter": "~1.0.0" } }, "yauzl": { @@ -841,7 +883,7 @@ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", "requires": { - "fd-slicer": "1.0.1" + "fd-slicer": "~1.0.1" } } } diff --git a/tools/tests/apps/app-config/package.json b/tools/tests/apps/app-config/package.json index 84b05eecfd..496fed2b9d 100644 --- a/tools/tests/apps/app-config/package.json +++ b/tools/tests/apps/app-config/package.json @@ -5,8 +5,8 @@ "start": "meteor run" }, "dependencies": { - "@babel/runtime": "^7.0.0-beta.56", - "meteor-node-stubs": "^0.4.1", + "@babel/runtime": "^7.5.0", + "meteor-node-stubs": "^1.0.1", "puppeteer": "^1.6.2" }, "meteor": { diff --git a/tools/tests/apps/app-prints-pid/package.json b/tools/tests/apps/app-prints-pid/package.json new file mode 100644 index 0000000000..7213252a4a --- /dev/null +++ b/tools/tests/apps/app-prints-pid/package.json @@ -0,0 +1,14 @@ +{ + "name": "app-prints-pid", + "private": true, + "dependencies": { + "@babel/runtime": "^7.5.0", + "meteor-node-stubs": "^1.0.1" + }, + "meteor": { + "mainModule": { + "client": false, + "server": "print.js" + } + } +} diff --git a/tools/tests/apps/client-refresh/.gitignore b/tools/tests/apps/client-refresh/.gitignore new file mode 100644 index 0000000000..40b878db5b --- /dev/null +++ b/tools/tests/apps/client-refresh/.gitignore @@ -0,0 +1 @@ +node_modules/ \ No newline at end of file diff --git a/tools/tests/apps/client-refresh/.meteor/.finished-upgraders b/tools/tests/apps/client-refresh/.meteor/.finished-upgraders new file mode 100644 index 0000000000..c07b6ff75a --- /dev/null +++ b/tools/tests/apps/client-refresh/.meteor/.finished-upgraders @@ -0,0 +1,19 @@ +# This file contains information which helps Meteor properly upgrade your +# app when you run 'meteor update'. You should check it into version control +# with your project. + +notices-for-0.9.0 +notices-for-0.9.1 +0.9.4-platform-file +notices-for-facebook-graph-api-2 +1.2.0-standard-minifiers-package +1.2.0-meteor-platform-split +1.2.0-cordova-changes +1.2.0-breaking-changes +1.3.0-split-minifiers-package +1.4.0-remove-old-dev-bundle-link +1.4.1-add-shell-server-package +1.4.3-split-account-service-packages +1.5-add-dynamic-import-package +1.7-split-underscore-from-meteor-base +1.8.3-split-jquery-from-blaze diff --git a/examples/other/login-demo/.meteor/.gitignore b/tools/tests/apps/client-refresh/.meteor/.gitignore similarity index 100% rename from examples/other/login-demo/.meteor/.gitignore rename to tools/tests/apps/client-refresh/.meteor/.gitignore diff --git a/tools/tests/apps/client-refresh/.meteor/.id b/tools/tests/apps/client-refresh/.meteor/.id new file mode 100644 index 0000000000..bb9b430463 --- /dev/null +++ b/tools/tests/apps/client-refresh/.meteor/.id @@ -0,0 +1,7 @@ +# This file contains a token that is unique to your project. +# Check it into your repository along with the rest of this directory. +# It can be used for purposes such as: +# - ensuring you don't accidentally deploy one app on top of another +# - providing package authors with aggregated statistics + +hc942wajsktj.cez67ut1n9qo diff --git a/tools/tests/apps/client-refresh/.meteor/packages b/tools/tests/apps/client-refresh/.meteor/packages new file mode 100644 index 0000000000..3e7e57d3b9 --- /dev/null +++ b/tools/tests/apps/client-refresh/.meteor/packages @@ -0,0 +1,18 @@ +# Meteor packages used by this project, one per line. +# Check this file (and the other files in this directory) into your repository. +# +# 'meteor add' and 'meteor remove' will edit this file for you, +# but you can also edit it by hand. + +meteor # Shared foundation for all Meteor packages +static-html # Define static page content in .html files +standard-minifier-css # CSS minifier run for production mode +standard-minifier-js # JS minifier run for production mode +es5-shim # ECMAScript 5 compatibility for older browsers +ecmascript # Enable ECMAScript2015+ syntax in app code +typescript # Enable TypeScript syntax in .ts and .tsx modules +shell-server # Server-side component of the `meteor shell` command +webapp # Serves a Meteor app over HTTP +server-render # Support for server-side rendering +test-package +autoupdate diff --git a/tools/tests/apps/client-refresh/.meteor/platforms b/tools/tests/apps/client-refresh/.meteor/platforms new file mode 100644 index 0000000000..efeba1b50c --- /dev/null +++ b/tools/tests/apps/client-refresh/.meteor/platforms @@ -0,0 +1,2 @@ +server +browser diff --git a/examples/other/domrange-grid/.meteor/release b/tools/tests/apps/client-refresh/.meteor/release similarity index 100% rename from examples/other/domrange-grid/.meteor/release rename to tools/tests/apps/client-refresh/.meteor/release diff --git a/tools/tests/apps/client-refresh/.meteor/versions b/tools/tests/apps/client-refresh/.meteor/versions new file mode 100644 index 0000000000..087c94fa51 --- /dev/null +++ b/tools/tests/apps/client-refresh/.meteor/versions @@ -0,0 +1,54 @@ +autoupdate@1.6.0 +babel-compiler@7.4.0-beta182.17 +babel-runtime@1.4.0-beta182.17 +base64@1.0.12 +blaze-tools@1.0.10 +boilerplate-generator@1.6.0 +caching-compiler@1.2.1 +caching-html-compiler@1.1.3 +callback-hook@1.1.0 +check@1.3.1 +ddp@1.4.0 +ddp-client@2.3.3 +ddp-common@1.4.0 +ddp-server@2.3.0 +diff-sequence@1.1.1 +dynamic-import@0.5.1 +ecmascript@0.13.0-beta182.17 +ecmascript-runtime@0.7.0 +ecmascript-runtime-client@0.9.0-beta182.17 +ecmascript-runtime-server@0.8.0-beta182.17 +ejson@1.1.0 +es5-shim@4.8.0 +fetch@0.1.1 +html-tools@1.0.11 +htmljs@1.0.11 +id-map@1.1.0 +inter-process-messaging@0.1.0 +logging@1.1.20 +meteor@1.9.3 +minifier-css@1.4.2 +minifier-js@2.4.1 +modern-browsers@0.1.4 +modules@0.14.0-beta182.17 +modules-runtime@0.11.0-beta182.17 +mongo-id@1.0.7 +promise@0.11.2 +random@1.1.0 +reload@1.3.0 +retry@1.1.0 +routepolicy@1.1.0 +server-render@0.3.1 +shell-server@0.4.0 +socket-stream-client@0.2.2 +spacebars-compiler@1.1.3 +standard-minifier-css@1.5.3 +standard-minifier-js@2.4.1 +static-html@1.2.2 +templating-tools@1.1.2 +test-package@0.0.1 +tracker@1.2.0 +typescript@3.5.2-beta182.17 +underscore@1.0.10 +webapp@1.7.4 +webapp-hashing@1.0.9 diff --git a/tools/tests/apps/client-refresh/client/main.css b/tools/tests/apps/client-refresh/client/main.css new file mode 100644 index 0000000000..7f354f0fa7 --- /dev/null +++ b/tools/tests/apps/client-refresh/client/main.css @@ -0,0 +1,4 @@ +body { + padding: 10px; + font-family: sans-serif; +} diff --git a/tools/tests/apps/client-refresh/client/main.html b/tools/tests/apps/client-refresh/client/main.html new file mode 100644 index 0000000000..19789db4de --- /dev/null +++ b/tools/tests/apps/client-refresh/client/main.html @@ -0,0 +1,21 @@ + + Minimal Meteor app + + + +

      Minimal Meteor app

      +

      + This Meteor app uses as few Meteor packages as possible, to keep the + client JavaScript bundle as small as possible. +

      + + + +

      Learn Meteor!

      + + diff --git a/tools/tests/apps/client-refresh/client/main.js b/tools/tests/apps/client-refresh/client/main.js new file mode 100644 index 0000000000..4d7e4c693d --- /dev/null +++ b/tools/tests/apps/client-refresh/client/main.js @@ -0,0 +1,2 @@ +import "../imports/both"; +console.log(module.id, 0); diff --git a/tools/tests/apps/client-refresh/imports/both.js b/tools/tests/apps/client-refresh/imports/both.js new file mode 100644 index 0000000000..8489e56285 --- /dev/null +++ b/tools/tests/apps/client-refresh/imports/both.js @@ -0,0 +1,2 @@ +import "some-package"; +console.log(module.id, 0); diff --git a/tools/tests/apps/client-refresh/imports/node_modules/some-package/index.js b/tools/tests/apps/client-refresh/imports/node_modules/some-package/index.js new file mode 100644 index 0000000000..652a4168ea --- /dev/null +++ b/tools/tests/apps/client-refresh/imports/node_modules/some-package/index.js @@ -0,0 +1 @@ +console.log(module.id, 0); diff --git a/tools/tests/apps/client-refresh/package.json b/tools/tests/apps/client-refresh/package.json new file mode 100644 index 0000000000..deb708bb19 --- /dev/null +++ b/tools/tests/apps/client-refresh/package.json @@ -0,0 +1,20 @@ +{ + "name": "client-refresh", + "private": true, + "scripts": { + "start": "meteor run", + "test": "meteor test --once --driver-package meteortesting:mocha", + "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", + "visualize": "meteor --production --extra-packages bundle-visualizer" + }, + "dependencies": { + "@babel/runtime": "^7.5.5", + "meteor-node-stubs": "^1.0.1" + }, + "meteor": { + "mainModule": { + "client": "client/main.js", + "server": "server/main.js" + } + } +} diff --git a/tools/tests/apps/client-refresh/packages/test-package/README.md b/tools/tests/apps/client-refresh/packages/test-package/README.md new file mode 100644 index 0000000000..8bb51bc3bf --- /dev/null +++ b/tools/tests/apps/client-refresh/packages/test-package/README.md @@ -0,0 +1,2 @@ +Helper package for testing that changes to files that are not used by the +server bundle do not trigger a server restart. diff --git a/tools/tests/apps/client-refresh/packages/test-package/both.js b/tools/tests/apps/client-refresh/packages/test-package/both.js new file mode 100644 index 0000000000..652a4168ea --- /dev/null +++ b/tools/tests/apps/client-refresh/packages/test-package/both.js @@ -0,0 +1 @@ +console.log(module.id, 0); diff --git a/tools/tests/apps/client-refresh/packages/test-package/client.js b/tools/tests/apps/client-refresh/packages/test-package/client.js new file mode 100644 index 0000000000..8e148648bb --- /dev/null +++ b/tools/tests/apps/client-refresh/packages/test-package/client.js @@ -0,0 +1,2 @@ +import "./both"; +console.log(module.id, 0); diff --git a/tools/tests/apps/client-refresh/packages/test-package/package.js b/tools/tests/apps/client-refresh/packages/test-package/package.js new file mode 100644 index 0000000000..d001a1fb7b --- /dev/null +++ b/tools/tests/apps/client-refresh/packages/test-package/package.js @@ -0,0 +1,12 @@ +Package.describe({ + name: 'test-package', + version: '0.0.1', + summary: '', + documentation: 'README.md' +}); + +Package.onUse(function(api) { + api.use('ecmascript'); + api.mainModule('client.js', 'client'); + api.mainModule('server.js', 'server'); +}); diff --git a/tools/tests/apps/client-refresh/packages/test-package/server.js b/tools/tests/apps/client-refresh/packages/test-package/server.js new file mode 100644 index 0000000000..8e148648bb --- /dev/null +++ b/tools/tests/apps/client-refresh/packages/test-package/server.js @@ -0,0 +1,2 @@ +import "./both"; +console.log(module.id, 0); diff --git a/tools/tests/apps/client-refresh/server/main.js b/tools/tests/apps/client-refresh/server/main.js new file mode 100644 index 0000000000..4d7e4c693d --- /dev/null +++ b/tools/tests/apps/client-refresh/server/main.js @@ -0,0 +1,2 @@ +import "../imports/both"; +console.log(module.id, 0); diff --git a/tools/tests/apps/compiler-plugin-static-html-error/.meteor/.finished-upgraders b/tools/tests/apps/compiler-plugin-static-html-error/.meteor/.finished-upgraders new file mode 100644 index 0000000000..c07b6ff75a --- /dev/null +++ b/tools/tests/apps/compiler-plugin-static-html-error/.meteor/.finished-upgraders @@ -0,0 +1,19 @@ +# This file contains information which helps Meteor properly upgrade your +# app when you run 'meteor update'. You should check it into version control +# with your project. + +notices-for-0.9.0 +notices-for-0.9.1 +0.9.4-platform-file +notices-for-facebook-graph-api-2 +1.2.0-standard-minifiers-package +1.2.0-meteor-platform-split +1.2.0-cordova-changes +1.2.0-breaking-changes +1.3.0-split-minifiers-package +1.4.0-remove-old-dev-bundle-link +1.4.1-add-shell-server-package +1.4.3-split-account-service-packages +1.5-add-dynamic-import-package +1.7-split-underscore-from-meteor-base +1.8.3-split-jquery-from-blaze diff --git a/tools/tests/apps/compiler-plugin-static-html-error/.meteor/packages b/tools/tests/apps/compiler-plugin-static-html-error/.meteor/packages index 90bb03902f..52841ee183 100644 --- a/tools/tests/apps/compiler-plugin-static-html-error/.meteor/packages +++ b/tools/tests/apps/compiler-plugin-static-html-error/.meteor/packages @@ -2,5 +2,10 @@ # # 'meteor add' and 'meteor remove' will edit this file for you, # but you can also edit it by hand. -meteor-base +meteor-base@1.4.0 static-html +standard-minifier-css +standard-minifier-js +shell-server +dynamic-import +underscore diff --git a/tools/tests/apps/compiler-plugin-static-html-error/.meteor/release b/tools/tests/apps/compiler-plugin-static-html-error/.meteor/release index 621e94f0ec..97064e1993 100644 --- a/tools/tests/apps/compiler-plugin-static-html-error/.meteor/release +++ b/tools/tests/apps/compiler-plugin-static-html-error/.meteor/release @@ -1 +1 @@ -none +METEOR@1.8.1 diff --git a/tools/tests/apps/compiler-plugin-static-html-error/.meteor/versions b/tools/tests/apps/compiler-plugin-static-html-error/.meteor/versions index 8e4831fde0..2112029aa3 100644 --- a/tools/tests/apps/compiler-plugin-static-html-error/.meteor/versions +++ b/tools/tests/apps/compiler-plugin-static-html-error/.meteor/versions @@ -1,53 +1,55 @@ -autoupdate@1.2.2-plugins.0 -babel-compiler@5.8.3-plugins.0_5 -babel-runtime@0.1.2 -base64@1.0.4-plugins.0 -binary-heap@1.0.4-plugins.0 -blaze@2.1.3-plugins.0 -blaze-tools@1.0.4-plugins.0 -boilerplate-generator@1.0.4-plugins.0 -caching-compiler@1.0.0-plugins.1 -caching-html-compiler@1.0.0 -callback-hook@1.0.4-plugins.0 -check@1.0.6-plugins.0 -ddp@1.2.0-plugins.0 -ddp-client@1.2.0-plugins.0 -ddp-common@1.2.0-plugins.0 -ddp-server@1.2.0-plugins.1 -deps@1.0.8-plugins.0 -diff-sequence@1.0.0-plugins.0 -ecmascript@0.1.3-plugins.1 -ejson@1.0.7-plugins.0 -geojson-utils@1.0.4-plugins.0 -html-tools@1.0.5-plugins.0 -htmljs@1.0.5-plugins.0 -http@1.1.1-plugins.0 -id-map@1.0.4-plugins.0 -jquery@1.11.3-plugins.0_3 -json@1.0.4-plugins.0 -logging@1.0.8-plugins.0 -meteor@1.1.7-plugins.1 -minifiers@1.1.6-plugins.0 -minimongo@1.0.9-plugins.0 -mongo@1.1.1-plugins.0 -mongo-id@1.0.0-plugins.0 -npm-mongo@1.4.32-plugins.0_1 -observe-sequence@1.0.7-plugins.0 -ordered-dict@1.0.4-plugins.0 -promise@0.4.2-plugins.0 -random@1.0.4-plugins.0 -reactive-var@1.0.6-plugins.0 -reload@1.1.4-plugins.0 -retry@1.0.4-plugins.0 -routepolicy@1.0.6-plugins.0 -spacebars@1.0.7-plugins.0 -spacebars-compiler@1.0.7-plugins.1 -static-html@1.0.12 -templating@1.1.2-plugins.1 -templating-tools@0.0.1 -tracker@1.0.8-plugins.0 -ui@1.0.7-plugins.0 -underscore@1.0.4-plugins.0 -url@1.0.5-plugins.0 -webapp@1.2.1-plugins.0 -webapp-hashing@1.0.4-plugins.0 +autoupdate@1.6.0 +babel-compiler@7.3.4 +babel-runtime@1.3.0 +base64@1.0.12 +blaze-tools@1.0.10 +boilerplate-generator@1.6.0 +caching-compiler@1.2.1 +caching-html-compiler@1.1.3 +callback-hook@1.1.0 +check@1.3.1 +ddp@1.4.0 +ddp-client@2.3.3 +ddp-common@1.4.0 +ddp-server@2.3.0 +deps@1.0.12 +diff-sequence@1.1.1 +dynamic-import@0.5.1 +ecmascript@0.12.7 +ecmascript-runtime@0.7.0 +ecmascript-runtime-client@0.8.0 +ecmascript-runtime-server@0.7.1 +ejson@1.1.0 +es5-shim@4.8.0 +fetch@0.1.1 +hot-code-push@1.0.4 +html-tools@1.0.11 +htmljs@1.0.11 +id-map@1.1.0 +inter-process-messaging@0.1.0 +livedata@1.0.18 +logging@1.1.20 +meteor@1.9.3 +meteor-base@1.4.0 +minifier-css@1.4.2 +minifier-js@2.4.1 +modern-browsers@0.1.4 +modules@0.13.0 +modules-runtime@0.10.3 +mongo-id@1.0.7 +promise@0.11.2 +random@1.1.0 +reload@1.3.0 +retry@1.1.0 +routepolicy@1.1.0 +shell-server@0.4.0 +socket-stream-client@0.2.2 +spacebars-compiler@1.1.3 +standard-minifier-css@1.5.3 +standard-minifier-js@2.4.1 +static-html@1.2.2 +templating-tools@1.1.2 +tracker@1.2.0 +underscore@1.0.10 +webapp@1.7.4 +webapp-hashing@1.0.9 diff --git a/tools/tests/apps/compiler-plugin-static-html/.meteor/.finished-upgraders b/tools/tests/apps/compiler-plugin-static-html/.meteor/.finished-upgraders new file mode 100644 index 0000000000..c07b6ff75a --- /dev/null +++ b/tools/tests/apps/compiler-plugin-static-html/.meteor/.finished-upgraders @@ -0,0 +1,19 @@ +# This file contains information which helps Meteor properly upgrade your +# app when you run 'meteor update'. You should check it into version control +# with your project. + +notices-for-0.9.0 +notices-for-0.9.1 +0.9.4-platform-file +notices-for-facebook-graph-api-2 +1.2.0-standard-minifiers-package +1.2.0-meteor-platform-split +1.2.0-cordova-changes +1.2.0-breaking-changes +1.3.0-split-minifiers-package +1.4.0-remove-old-dev-bundle-link +1.4.1-add-shell-server-package +1.4.3-split-account-service-packages +1.5-add-dynamic-import-package +1.7-split-underscore-from-meteor-base +1.8.3-split-jquery-from-blaze diff --git a/tools/tests/apps/compiler-plugin-static-html/.meteor/packages b/tools/tests/apps/compiler-plugin-static-html/.meteor/packages index 90bb03902f..52841ee183 100644 --- a/tools/tests/apps/compiler-plugin-static-html/.meteor/packages +++ b/tools/tests/apps/compiler-plugin-static-html/.meteor/packages @@ -2,5 +2,10 @@ # # 'meteor add' and 'meteor remove' will edit this file for you, # but you can also edit it by hand. -meteor-base +meteor-base@1.4.0 static-html +standard-minifier-css +standard-minifier-js +shell-server +dynamic-import +underscore diff --git a/tools/tests/apps/compiler-plugin-static-html/.meteor/release b/tools/tests/apps/compiler-plugin-static-html/.meteor/release index 621e94f0ec..97064e1993 100644 --- a/tools/tests/apps/compiler-plugin-static-html/.meteor/release +++ b/tools/tests/apps/compiler-plugin-static-html/.meteor/release @@ -1 +1 @@ -none +METEOR@1.8.1 diff --git a/tools/tests/apps/compiler-plugin-static-html/.meteor/versions b/tools/tests/apps/compiler-plugin-static-html/.meteor/versions index 8e4831fde0..2112029aa3 100644 --- a/tools/tests/apps/compiler-plugin-static-html/.meteor/versions +++ b/tools/tests/apps/compiler-plugin-static-html/.meteor/versions @@ -1,53 +1,55 @@ -autoupdate@1.2.2-plugins.0 -babel-compiler@5.8.3-plugins.0_5 -babel-runtime@0.1.2 -base64@1.0.4-plugins.0 -binary-heap@1.0.4-plugins.0 -blaze@2.1.3-plugins.0 -blaze-tools@1.0.4-plugins.0 -boilerplate-generator@1.0.4-plugins.0 -caching-compiler@1.0.0-plugins.1 -caching-html-compiler@1.0.0 -callback-hook@1.0.4-plugins.0 -check@1.0.6-plugins.0 -ddp@1.2.0-plugins.0 -ddp-client@1.2.0-plugins.0 -ddp-common@1.2.0-plugins.0 -ddp-server@1.2.0-plugins.1 -deps@1.0.8-plugins.0 -diff-sequence@1.0.0-plugins.0 -ecmascript@0.1.3-plugins.1 -ejson@1.0.7-plugins.0 -geojson-utils@1.0.4-plugins.0 -html-tools@1.0.5-plugins.0 -htmljs@1.0.5-plugins.0 -http@1.1.1-plugins.0 -id-map@1.0.4-plugins.0 -jquery@1.11.3-plugins.0_3 -json@1.0.4-plugins.0 -logging@1.0.8-plugins.0 -meteor@1.1.7-plugins.1 -minifiers@1.1.6-plugins.0 -minimongo@1.0.9-plugins.0 -mongo@1.1.1-plugins.0 -mongo-id@1.0.0-plugins.0 -npm-mongo@1.4.32-plugins.0_1 -observe-sequence@1.0.7-plugins.0 -ordered-dict@1.0.4-plugins.0 -promise@0.4.2-plugins.0 -random@1.0.4-plugins.0 -reactive-var@1.0.6-plugins.0 -reload@1.1.4-plugins.0 -retry@1.0.4-plugins.0 -routepolicy@1.0.6-plugins.0 -spacebars@1.0.7-plugins.0 -spacebars-compiler@1.0.7-plugins.1 -static-html@1.0.12 -templating@1.1.2-plugins.1 -templating-tools@0.0.1 -tracker@1.0.8-plugins.0 -ui@1.0.7-plugins.0 -underscore@1.0.4-plugins.0 -url@1.0.5-plugins.0 -webapp@1.2.1-plugins.0 -webapp-hashing@1.0.4-plugins.0 +autoupdate@1.6.0 +babel-compiler@7.3.4 +babel-runtime@1.3.0 +base64@1.0.12 +blaze-tools@1.0.10 +boilerplate-generator@1.6.0 +caching-compiler@1.2.1 +caching-html-compiler@1.1.3 +callback-hook@1.1.0 +check@1.3.1 +ddp@1.4.0 +ddp-client@2.3.3 +ddp-common@1.4.0 +ddp-server@2.3.0 +deps@1.0.12 +diff-sequence@1.1.1 +dynamic-import@0.5.1 +ecmascript@0.12.7 +ecmascript-runtime@0.7.0 +ecmascript-runtime-client@0.8.0 +ecmascript-runtime-server@0.7.1 +ejson@1.1.0 +es5-shim@4.8.0 +fetch@0.1.1 +hot-code-push@1.0.4 +html-tools@1.0.11 +htmljs@1.0.11 +id-map@1.1.0 +inter-process-messaging@0.1.0 +livedata@1.0.18 +logging@1.1.20 +meteor@1.9.3 +meteor-base@1.4.0 +minifier-css@1.4.2 +minifier-js@2.4.1 +modern-browsers@0.1.4 +modules@0.13.0 +modules-runtime@0.10.3 +mongo-id@1.0.7 +promise@0.11.2 +random@1.1.0 +reload@1.3.0 +retry@1.1.0 +routepolicy@1.1.0 +shell-server@0.4.0 +socket-stream-client@0.2.2 +spacebars-compiler@1.1.3 +standard-minifier-css@1.5.3 +standard-minifier-js@2.4.1 +static-html@1.2.2 +templating-tools@1.1.2 +tracker@1.2.0 +underscore@1.0.10 +webapp@1.7.4 +webapp-hashing@1.0.9 diff --git a/tools/tests/apps/css-injection-test/package.json b/tools/tests/apps/css-injection-test/package.json new file mode 100644 index 0000000000..d4769f47d0 --- /dev/null +++ b/tools/tests/apps/css-injection-test/package.json @@ -0,0 +1,18 @@ +{ + "name": "css-injection-test", + "private": true, + "scripts": { + "start": "meteor run", + "test": "meteor test --once --driver-package meteortesting:mocha", + "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", + "visualize": "meteor --production --extra-packages bundle-visualizer" + }, + "dependencies": { + "@babel/runtime": "^7.3.4", + "jquery": "^3.3.1", + "meteor-node-stubs": "^0.4.1" + }, + "meteor": { + "mainModule": "css-injection-test.js" + } +} diff --git a/tools/tests/apps/custom-minifier/.meteor/.id b/tools/tests/apps/custom-minifier/.meteor/.id new file mode 100644 index 0000000000..3bf60f5efd --- /dev/null +++ b/tools/tests/apps/custom-minifier/.meteor/.id @@ -0,0 +1,7 @@ +# This file contains a token that is unique to your project. +# Check it into your repository along with the rest of this directory. +# It can be used for purposes such as: +# - ensuring you don't accidentally deploy one app on top of another +# - providing package authors with aggregated statistics + +vyz4yyird5v9.f7frwm532zko diff --git a/tools/tests/apps/custom-minifier/.meteor/packages b/tools/tests/apps/custom-minifier/.meteor/packages index d745212402..e510bc7b61 100644 --- a/tools/tests/apps/custom-minifier/.meteor/packages +++ b/tools/tests/apps/custom-minifier/.meteor/packages @@ -1,4 +1,5 @@ meteor-base custom-minifier -blaze-html-templates ecmascript +jquery +static-html diff --git a/examples/unfinished/accounts-ui-viewer/.meteor/platforms b/tools/tests/apps/custom-minifier/.meteor/platforms similarity index 100% rename from examples/unfinished/accounts-ui-viewer/.meteor/platforms rename to tools/tests/apps/custom-minifier/.meteor/platforms diff --git a/tools/tests/apps/custom-minifier/.meteor/versions b/tools/tests/apps/custom-minifier/.meteor/versions new file mode 100644 index 0000000000..0aacfc62db --- /dev/null +++ b/tools/tests/apps/custom-minifier/.meteor/versions @@ -0,0 +1,51 @@ +autoupdate@1.6.0 +babel-compiler@7.4.1 +babel-runtime@1.4.0 +base64@1.0.12 +blaze-tools@1.0.10 +boilerplate-generator@1.6.0 +caching-compiler@1.2.1 +caching-html-compiler@1.1.3 +callback-hook@1.2.0 +check@1.3.1 +custom-minifier@0.0.1 +ddp@1.4.0 +ddp-client@2.3.3 +ddp-common@1.4.0 +ddp-server@2.3.0 +diff-sequence@1.1.1 +dynamic-import@0.5.1 +ecmascript@0.13.0 +ecmascript-runtime@0.7.0 +ecmascript-runtime-client@0.9.0 +ecmascript-runtime-server@0.8.0 +ejson@1.1.0 +es5-shim@4.8.0 +fetch@0.1.1 +hot-code-push@1.0.4 +html-tools@1.0.11 +htmljs@1.0.11 +id-map@1.1.0 +inter-process-messaging@0.1.0 +jquery@1.12.1 +livedata@1.0.18 +logging@1.1.20 +meteor@1.9.3 +meteor-base@1.4.0 +modern-browsers@0.1.4 +modules@0.14.0 +modules-runtime@0.11.0 +mongo-id@1.0.7 +promise@0.11.2 +random@1.1.0 +reload@1.3.0 +retry@1.1.0 +routepolicy@1.1.0 +socket-stream-client@0.2.2 +spacebars-compiler@1.1.3 +static-html@1.2.2 +templating-tools@1.1.2 +tracker@1.2.0 +underscore@1.0.10 +webapp@1.7.5 +webapp-hashing@1.0.9 diff --git a/tools/tests/apps/custom-minifier/package.json b/tools/tests/apps/custom-minifier/package.json new file mode 100644 index 0000000000..fb6dc51905 --- /dev/null +++ b/tools/tests/apps/custom-minifier/package.json @@ -0,0 +1,18 @@ +{ + "name": "custom-minifiers", + "private": true, + "scripts": { + "start": "meteor run", + "test": "meteor test --once --driver-package meteortesting:mocha", + "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", + "visualize": "meteor --production --extra-packages bundle-visualizer" + }, + "dependencies": { + "@babel/runtime": "^7.7.4", + "jquery": "^3.4.1", + "meteor-node-stubs": "^1.0.1" + }, + "meteor": { + "mainModule": "code.js" + } +} diff --git a/tools/tests/apps/dev-bundle-bin-commands/package.json b/tools/tests/apps/dev-bundle-bin-commands/package.json index aa6a606e08..80f3d838d1 100644 --- a/tools/tests/apps/dev-bundle-bin-commands/package.json +++ b/tools/tests/apps/dev-bundle-bin-commands/package.json @@ -7,7 +7,7 @@ "exit-normally": "echo \"This script will exit normally\" && exit 0" }, "dependencies": { - "@babel/runtime": "^7.0.0-beta.56", - "meteor-node-stubs": "^0.4.1" + "@babel/runtime": "^7.5.0", + "meteor-node-stubs": "^1.0.1" } } diff --git a/tools/tests/apps/dynamic-import/.meteor/.finished-upgraders b/tools/tests/apps/dynamic-import/.meteor/.finished-upgraders index 4538749ab8..c07b6ff75a 100644 --- a/tools/tests/apps/dynamic-import/.meteor/.finished-upgraders +++ b/tools/tests/apps/dynamic-import/.meteor/.finished-upgraders @@ -16,3 +16,4 @@ notices-for-facebook-graph-api-2 1.4.3-split-account-service-packages 1.5-add-dynamic-import-package 1.7-split-underscore-from-meteor-base +1.8.3-split-jquery-from-blaze diff --git a/tools/tests/apps/dynamic-import/.meteor/packages b/tools/tests/apps/dynamic-import/.meteor/packages index d913ee4980..b74a849e52 100644 --- a/tools/tests/apps/dynamic-import/.meteor/packages +++ b/tools/tests/apps/dynamic-import/.meteor/packages @@ -5,24 +5,24 @@ # but you can also edit it by hand. meteor-base@1.4.0 # Packages every Meteor app needs to have -mobile-experience@1.0.5 # Packages for a great mobile UX -mongo@1.6.0 # The database Meteor supports right now +mobile-experience@1.1.0 # Packages for a great mobile UX +mongo@1.9.0 # The database Meteor supports right now blaze-html-templates@1.0.4 # Compile .html files into Meteor Blaze views reactive-var@1.0.11 # Reactive variable for tracker -jquery@1.11.10 # Helpful client-side library tracker@1.2.0 # Meteor's client-side reactive programming library -standard-minifier-css@1.5.0 # CSS minifier run for production mode -standard-minifier-js@2.4.0 # JS minifier run for production mode +standard-minifier-css@1.6.0 # CSS minifier run for production mode +standard-minifier-js@2.6.0 # JS minifier run for production mode es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers. -ecmascript@0.12.0 # Enable ECMAScript2015+ syntax in app code -shell-server@0.4.0 # Server-side component of the `meteor shell` command +ecmascript@0.14.2 # Enable ECMAScript2015+ syntax in app code +shell-server@0.5.0 # Server-side component of the `meteor shell` command autopublish@1.0.7 # Publish all data to the clients (for prototyping) insecure@1.0.7 # Allow all DB writes from clients (for prototyping) -dynamic-import@0.5.0 +dynamic-import@0.5.1 lazy-test-package helper-package user:colon-name underscore@1.0.10 -fetch@0.1.0 +fetch@0.1.1 +jquery diff --git a/tools/tests/apps/dynamic-import/.meteor/release b/tools/tests/apps/dynamic-import/.meteor/release index e76dedee10..d259781110 100644 --- a/tools/tests/apps/dynamic-import/.meteor/release +++ b/tools/tests/apps/dynamic-import/.meteor/release @@ -1 +1 @@ -METEOR@1.8 +METEOR@1.10.1 diff --git a/tools/tests/apps/dynamic-import/.meteor/versions b/tools/tests/apps/dynamic-import/.meteor/versions index c34f9857dc..a99df3012b 100644 --- a/tools/tests/apps/dynamic-import/.meteor/versions +++ b/tools/tests/apps/dynamic-import/.meteor/versions @@ -1,34 +1,34 @@ allow-deny@1.1.0 autopublish@1.0.7 -autoupdate@1.5.0 -babel-compiler@7.2.1 -babel-runtime@1.3.0 -base64@1.0.11 +autoupdate@1.6.0 +babel-compiler@7.5.3 +babel-runtime@1.5.0 +base64@1.0.12 binary-heap@1.0.11 -blaze@2.3.3 +blaze@2.3.4 blaze-html-templates@1.1.2 blaze-tools@1.0.10 -boilerplate-generator@1.6.0 -caching-compiler@1.2.0 +boilerplate-generator@1.7.0 +caching-compiler@1.2.1 caching-html-compiler@1.1.3 -callback-hook@1.1.0 +callback-hook@1.3.0 check@1.3.1 -coffeescript@2.3.1_2 -coffeescript-compiler@2.3.1_2 +coffeescript@2.4.1 +coffeescript-compiler@2.4.1 ddp@1.4.0 ddp-client@2.3.3 ddp-common@1.4.0 -ddp-server@2.2.0 +ddp-server@2.3.1 deps@1.0.12 -diff-sequence@1.1.0 -dynamic-import@0.5.0 -ecmascript@0.12.1 +diff-sequence@1.1.1 +dynamic-import@0.5.1 +ecmascript@0.14.3 ecmascript-runtime@0.7.0 -ecmascript-runtime-client@0.8.0 -ecmascript-runtime-server@0.7.1 -ejson@1.1.0 +ecmascript-runtime-client@0.10.0 +ecmascript-runtime-server@0.9.0 +ejson@1.1.1 es5-shim@4.8.0 -fetch@0.1.0 +fetch@0.1.1 geojson-utils@1.0.10 helper-package@0.0.1 hot-code-push@1.0.4 @@ -36,41 +36,41 @@ html-tools@1.0.11 htmljs@1.0.11 id-map@1.1.0 insecure@1.0.7 -inter-process-messaging@0.1.0 -jquery@1.11.11 -launch-screen@1.1.1 +inter-process-messaging@0.1.1 +jquery@3.0.0 +launch-screen@1.2.0 lazy-test-package@0.0.1 livedata@1.0.18 logging@1.1.20 -meteor@1.9.2 +meteor@1.9.3 meteor-base@1.4.0 -minifier-css@1.4.0 -minifier-js@2.4.0 -minimongo@1.4.5 -mobile-experience@1.0.5 -mobile-status-bar@1.0.14 -modern-browsers@0.1.2 -modules@0.13.0 -modules-runtime@0.10.2 -mongo@1.6.0 -mongo-decimal@0.1.0 +minifier-css@1.5.0 +minifier-js@2.6.0 +minimongo@1.5.0 +mobile-experience@1.1.0 +mobile-status-bar@1.1.0 +modern-browsers@0.1.5 +modules@0.15.0 +modules-runtime@0.12.0 +mongo@1.9.1 +mongo-decimal@0.1.1 mongo-dev-server@1.1.0 mongo-id@1.0.7 -npm-mongo@3.1.1 +npm-mongo@3.7.0 observe-sequence@1.0.16 ordered-dict@1.1.0 -promise@0.11.1 -random@1.1.0 +promise@0.11.2 +random@1.2.0 reactive-var@1.0.11 -reload@1.2.0 +reload@1.3.0 retry@1.1.0 routepolicy@1.1.0 -shell-server@0.4.0 -socket-stream-client@0.2.2 +shell-server@0.5.0 +socket-stream-client@0.2.3 spacebars@1.0.15 spacebars-compiler@1.1.3 -standard-minifier-css@1.5.1 -standard-minifier-js@2.4.0 +standard-minifier-css@1.6.0 +standard-minifier-js@2.6.0 templating@1.3.2 templating-compiler@1.3.3 templating-runtime@1.3.2 @@ -79,5 +79,5 @@ tracker@1.2.0 ui@1.0.13 underscore@1.0.10 user:colon-name@0.0.1 -webapp@1.7.0 +webapp@1.9.0 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/dynamic-import/package-lock.json b/tools/tests/apps/dynamic-import/package-lock.json index bce0f7b9a9..53af0c9685 100644 --- a/tools/tests/apps/dynamic-import/package-lock.json +++ b/tools/tests/apps/dynamic-import/package-lock.json @@ -4,47 +4,45 @@ "lockfileVersion": 1, "dependencies": { "@babel/runtime": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.2.tgz", - "integrity": "sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "requires": { - "regenerator-runtime": "^0.12.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" - } + "regenerator-runtime": "^0.13.4" + } + }, + "@types/mime-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz", + "integrity": "sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM=" + }, + "@wry/context": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.5.1.tgz", + "integrity": "sha512-VfPjm79RbzEYZigvZFk7DdvYX+8Qb57xOZw8m2iaAmgmBMNhGDN5yKGiplubX958oFAQMXfaftgTa/VFnu2CsQ==", + "requires": { + "tslib": "^1.9.3" } }, "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==" }, "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "requires": { - "es6-promisify": "^5.0.0" - } + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" }, "arson": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/arson/-/arson-0.2.6.tgz", "integrity": "sha512-wVRnIfjOaCWu3jrf3j1CU/eotDf7tuM34cBswo32EwyLPaMiaWgETfROdYVv47VWEbWSOaZaDnkypGQtQduLbw==" }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, "balanced-match": { "version": "1.0.0", @@ -60,6 +58,11 @@ "concat-map": "0.0.1" } }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -81,54 +84,28 @@ "typedarray": "^0.0.6" } }, - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { - "ms": "2.0.0" - } - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "es6-promise": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", - "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" + "ms": "^2.1.1" } }, "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", - "mkdirp": "0.5.1", - "yauzl": "2.4.1" + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" }, "dependencies": { "debug": { @@ -138,27 +115,18 @@ "requires": { "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - }, "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "requires": { "pend": "~1.2.0" } @@ -169,9 +137,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -182,20 +150,12 @@ } }, "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", "requires": { - "agent-base": "^4.1.0", - "debug": "^3.1.0" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "agent-base": "5", + "debug": "4" } }, "inflight": { @@ -208,28 +168,19 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } + "jquery": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", + "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" }, "js-tokens": { "version": "4.0.0", @@ -244,43 +195,34 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "lru-cache": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", - "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=", - "requires": { - "pseudomap": "^1.0.1", - "yallist": "^2.0.0" - } - }, "meteor-node-stubs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-0.4.1.tgz", - "integrity": "sha512-UO2OStvLOKoApmOdIP5eCqoLaa/ritMXRg4ffJVdkNLEsczzPvTjgC0Mxk4cM4R8MZkwll90FYgjDf5qUTJdMA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.0.0.tgz", + "integrity": "sha512-QJwyv23wyXD3uEMzk5Xr/y5ezoVlCbHvBbrgdkVadn84dmifLRbs0PtD6EeNw5NLIk+SQSfxld7IMdEsneGz5w==", "requires": { "assert": "^1.4.1", - "browserify-zlib": "^0.1.4", - "buffer": "^4.9.1", + "browserify-zlib": "^0.2.0", + "buffer": "^5.2.1", "console-browserify": "^1.1.0", "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.7", - "events": "^1.1.1", - "https-browserify": "0.0.1", - "os-browserify": "^0.2.1", - "path-browserify": "0.0.0", - "process": "^0.11.9", - "punycode": "^1.4.1", + "crypto-browserify": "^3.12.0", + "domain-browser": "^1.2.0", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.0", + "process": "^0.11.10", + "punycode": "^2.1.1", "querystring-es3": "^0.2.1", - "readable-stream": "^2.3.6", - "stream-browserify": "^2.0.1", - "stream-http": "^2.8.0", - "string_decoder": "^1.1.0", - "timers-browserify": "^1.4.2", - "tty-browserify": "0.0.0", + "readable-stream": "^3.3.0", + "stream-browserify": "^2.0.2", + "stream-http": "^3.0.0", + "string_decoder": "^1.2.0", + "timers-browserify": "^2.0.10", + "tty-browserify": "0.0.1", "url": "^0.11.0", - "util": "^0.10.3", - "vm-browserify": "0.0.4" + "util": "^0.11.1", + "vm-browserify": "^1.1.0" }, "dependencies": { "asn1.js": { @@ -297,6 +239,15 @@ "bundled": true, "requires": { "util": "0.10.3" + }, + "dependencies": { + "util": { + "version": "0.10.3", + "bundled": true, + "requires": { + "inherits": "2.0.1" + } + } } }, "base64-js": { @@ -333,12 +284,13 @@ } }, "browserify-des": { - "version": "1.0.1", + "version": "1.0.2", "bundled": true, "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", - "inherits": "^2.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -363,19 +315,18 @@ } }, "browserify-zlib": { - "version": "0.1.4", + "version": "0.2.0", "bundled": true, "requires": { - "pako": "~0.2.0" + "pako": "~1.0.5" } }, "buffer": { - "version": "4.9.1", + "version": "5.2.1", "bundled": true, "requires": { "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "ieee754": "^1.1.4" } }, "buffer-xor": { @@ -483,7 +434,7 @@ "bundled": true }, "elliptic": { - "version": "6.4.0", + "version": "6.4.1", "bundled": true, "requires": { "bn.js": "^4.4.0", @@ -496,7 +447,7 @@ } }, "events": { - "version": "1.1.1", + "version": "3.0.0", "bundled": true }, "evp_bytestokey": { @@ -516,11 +467,11 @@ } }, "hash.js": { - "version": "1.1.3", + "version": "1.1.7", "bundled": true, "requires": { "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "^1.0.1" }, "dependencies": { "inherits": { @@ -539,15 +490,11 @@ } }, "https-browserify": { - "version": "0.0.1", + "version": "1.0.0", "bundled": true }, "ieee754": { - "version": "1.1.11", - "bundled": true - }, - "indexof": { - "version": "0.0.1", + "version": "1.1.13", "bundled": true }, "inherits": { @@ -559,11 +506,12 @@ "bundled": true }, "md5.js": { - "version": "1.3.4", + "version": "1.3.5", "bundled": true, "requires": { "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "miller-rabin": { @@ -583,30 +531,31 @@ "bundled": true }, "os-browserify": { - "version": "0.2.1", + "version": "0.3.0", "bundled": true }, "pako": { - "version": "0.2.9", + "version": "1.0.10", "bundled": true }, "parse-asn1": { - "version": "5.1.1", + "version": "5.1.4", "bundled": true, "requires": { "asn1.js": "^4.0.0", "browserify-aes": "^1.0.0", "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, "path-browserify": { - "version": "0.0.0", + "version": "1.0.0", "bundled": true }, "pbkdf2": { - "version": "3.0.16", + "version": "3.0.17", "bundled": true, "requires": { "create-hash": "^1.1.2", @@ -625,18 +574,19 @@ "bundled": true }, "public-encrypt": { - "version": "4.0.2", + "version": "4.0.3", "bundled": true, "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1" + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "punycode": { - "version": "1.4.1", + "version": "2.1.1", "bundled": true }, "querystring": { @@ -648,7 +598,7 @@ "bundled": true }, "randombytes": { - "version": "2.0.6", + "version": "2.1.0", "bundled": true, "requires": { "safe-buffer": "^5.1.0" @@ -663,16 +613,12 @@ } }, "readable-stream": { - "version": "2.3.6", + "version": "3.3.0", "bundled": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "dependencies": { "inherits": { @@ -693,6 +639,10 @@ "version": "5.1.2", "bundled": true }, + "setimmediate": { + "version": "1.0.5", + "bundled": true + }, "sha.js": { "version": "2.4.11", "bundled": true, @@ -702,44 +652,67 @@ } }, "stream-browserify": { - "version": "2.0.1", + "version": "2.0.2", "bundled": true, "requires": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "bundled": true + } + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "stream-http": { - "version": "2.8.1", + "version": "3.0.0", "bundled": true, "requires": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", - "readable-stream": "^2.3.3", - "to-arraybuffer": "^1.0.0", + "readable-stream": "^3.0.6", "xtend": "^4.0.0" } }, "string_decoder": { - "version": "1.1.1", + "version": "1.2.0", "bundled": true, "requires": { "safe-buffer": "~5.1.0" } }, "timers-browserify": { - "version": "1.4.2", + "version": "2.0.10", "bundled": true, "requires": { - "process": "~0.11.0" + "setimmediate": "^1.0.4" } }, - "to-arraybuffer": { - "version": "1.0.1", - "bundled": true - }, "tty-browserify": { - "version": "0.0.0", + "version": "0.0.1", "bundled": true }, "url": { @@ -757,10 +730,16 @@ } }, "util": { - "version": "0.10.3", + "version": "0.11.1", "bundled": true, "requires": { - "inherits": "2.0.1" + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "bundled": true + } } }, "util-deprecate": { @@ -768,11 +747,8 @@ "bundled": true }, "vm-browserify": { - "version": "0.0.4", - "bundled": true, - "requires": { - "indexof": "0.0.1" - } + "version": "1.1.0", + "bundled": true }, "xtend": { "version": "4.0.1", @@ -781,9 +757,22 @@ } }, "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==" + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" + }, + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" + }, + "mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "requires": { + "mime-db": "1.43.0" + } }, "minimatch": { "version": "3.0.4", @@ -794,36 +783,27 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "moment": { - "version": "2.22.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", - "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "object-assign": { "version": "4.1.1", @@ -839,11 +819,11 @@ } }, "optimism": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.3.3.tgz", - "integrity": "sha1-BjDrmir90bGLBS5MmOEplL6U3xI=", + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.11.5.tgz", + "integrity": "sha512-twCHmBb64DYzEZ8A3O+TLCuF/RmZPBhXPQYv4agoiALRLlW9SidMzd7lwUP9mL0jOZhzhnBmb8ajqA00ECo/7g==", "requires": { - "lru-cache": "~4.0.1" + "@wry/context": "^0.5.0" } }, "path-is-absolute": { @@ -862,72 +842,66 @@ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=" - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" - } + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "prop-types": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" } }, "proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=" - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "puppeteer": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.6.2.tgz", - "integrity": "sha512-KBgMr/ZdwIwDQWTqcAlGhnQ2Vd6p+o5B89H60XUfdmCpia2KViSZsdRjvrf2wYOxXSrpYx6OuCBzV7ppLuNjNg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-2.1.1.tgz", + "integrity": "sha512-LWzaDVQkk1EPiuYeTOj+CZRIjda4k2s5w4MK4xoH2+kgWV/SDlkYHmxatDdtYrciHUKSXTsGgPgPP8ILVdBsxg==", "requires": { - "debug": "^3.1.0", + "@types/mime-types": "^2.1.0", + "debug": "^4.1.0", "extract-zip": "^1.6.6", - "https-proxy-agent": "^2.2.1", + "https-proxy-agent": "^4.0.0", "mime": "^2.0.3", - "progress": "^2.0.0", + "mime-types": "^2.1.25", + "progress": "^2.0.1", "proxy-from-env": "^1.0.0", "rimraf": "^2.6.1", - "ws": "^5.1.1" + "ws": "^6.1.0" } }, "react": { - "version": "16.4.2", - "resolved": "https://registry.npmjs.org/react/-/react-16.4.2.tgz", - "integrity": "sha512-dMv7YrbxO4y2aqnvA7f/ik9ibeLSHQJTI6TrYAenPSaQ6OXfb+Oti+oJiy8WBxgRzlKatYqtCjphTgDSCEiWFg==", + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", + "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", "requires": { - "fbjs": "^0.8.16", "loose-envify": "^1.1.0", "object-assign": "^4.1.1", - "prop-types": "^15.6.0" + "prop-types": "^15.6.2" } }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -939,16 +913,16 @@ } }, "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" } }, "safe-buffer": { @@ -956,16 +930,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -974,30 +938,25 @@ "safe-buffer": "~5.1.0" } }, + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, - "ua-parser-js": { - "version": "0.7.18", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.18.tgz", - "integrity": "sha512-LtzwHlVHwFGTptfNSgezHp7WUlwiqb0gA9AALRbKaERfxwJoiX0A73QbTToxteIAuIaFshhgIZfqK8s7clqgnA==" - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.2.tgz", + "integrity": "sha512-vy9V/+pKG+5ZTYKf+VcphF5Oc6EFiu3W8Nv3P3zIh0EqVI80ZxOzuPfe9EHjkFNvf8+xuTHVeei4Drydlx4zjw==" }, "wrappy": { "version": "1.0.2", @@ -1005,24 +964,20 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", "requires": { "async-limiter": "~1.0.0" } }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "requires": { - "fd-slicer": "~1.0.1" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } } } diff --git a/tools/tests/apps/dynamic-import/package.json b/tools/tests/apps/dynamic-import/package.json index e9dcc58101..e4219cab81 100644 --- a/tools/tests/apps/dynamic-import/package.json +++ b/tools/tests/apps/dynamic-import/package.json @@ -6,16 +6,17 @@ "test": "TEST_BROWSER_DRIVER=puppeteer meteor test --full-app --driver-package meteortesting:mocha" }, "dependencies": { - "@babel/runtime": "^7.1.2", - "acorn": "^4.0.11", - "arson": "^0.2.3", - "meteor-node-stubs": "^0.4.1", - "moment": "^2.17.1", - "optimism": "^0.3.3", - "private": "^0.1.7", - "puppeteer": "^1.6.2", - "react": "^16.0.0", - "regenerator-runtime": "^0.11.1", - "uuid": "^3.1.0" + "@babel/runtime": "^7.9.2", + "acorn": "^7.1.1", + "arson": "^0.2.6", + "jquery": "^3.4.1", + "meteor-node-stubs": "^1.0.1", + "moment": "^2.24.0", + "optimism": "^0.11.5", + "private": "^0.1.8", + "puppeteer": "^2.1.1", + "react": "^16.13.1", + "regenerator-runtime": "^0.13.5", + "uuid": "^7.0.2" } } diff --git a/tools/tests/apps/dynamic-import/tests.js b/tools/tests/apps/dynamic-import/tests.js index a0dcfc82ad..3dd68d24ee 100644 --- a/tools/tests/apps/dynamic-import/tests.js +++ b/tools/tests/apps/dynamic-import/tests.js @@ -206,7 +206,7 @@ describe("dynamic import(...)", function () { it("can import module.exports = {...}-style modules", () => { return import("./imports/module-exports-esModule").then(m => { assert.strictEqual(typeof m, "object"); - assert.deepEqual(m, {}); + assert.deepEqual(Object.keys(m), []); }); }); @@ -230,9 +230,10 @@ describe("dynamic import(...)", function () { }); it("should track dynamic peer imports from packages (#9187)", () => { + const absId = require.resolve("optimism"); const version = require( "meteor/dynamic-import/dynamic-versions.js" - ).get("/node_modules/optimism/lib/index.js"); + ).get(absId); if (Meteor.isClient) { assert.strictEqual(typeof version, "string"); @@ -246,15 +247,15 @@ describe("dynamic import(...)", function () { }); it('should support object-valued package.json "browser" fields', () => { - return import("uuid").then(({ default: uuid }) => { + return import("uuid").then(({ v4: uuid }) => { const id = uuid(); assert.strictEqual(typeof id, "string"); assert.strictEqual(id.split("-").length, 5); if (Meteor.isClient) { assert.strictEqual( - require.resolve("uuid/lib/rng.js"), - "/node_modules/uuid/lib/rng-browser.js" + require.resolve("uuid/dist/esm-node/index.js"), + "/node_modules/uuid/dist/esm-browser/index.js" ); const uuidPkgJsonId = ["uuid", "package.json"].join("/"); const { browser } = require(uuidPkgJsonId); diff --git a/tools/tests/apps/git-commit-hash/.gitignore b/tools/tests/apps/git-commit-hash/.gitignore new file mode 100644 index 0000000000..40b878db5b --- /dev/null +++ b/tools/tests/apps/git-commit-hash/.gitignore @@ -0,0 +1 @@ +node_modules/ \ No newline at end of file diff --git a/tools/tests/apps/git-commit-hash/.meteor/.finished-upgraders b/tools/tests/apps/git-commit-hash/.meteor/.finished-upgraders new file mode 100644 index 0000000000..c07b6ff75a --- /dev/null +++ b/tools/tests/apps/git-commit-hash/.meteor/.finished-upgraders @@ -0,0 +1,19 @@ +# This file contains information which helps Meteor properly upgrade your +# app when you run 'meteor update'. You should check it into version control +# with your project. + +notices-for-0.9.0 +notices-for-0.9.1 +0.9.4-platform-file +notices-for-facebook-graph-api-2 +1.2.0-standard-minifiers-package +1.2.0-meteor-platform-split +1.2.0-cordova-changes +1.2.0-breaking-changes +1.3.0-split-minifiers-package +1.4.0-remove-old-dev-bundle-link +1.4.1-add-shell-server-package +1.4.3-split-account-service-packages +1.5-add-dynamic-import-package +1.7-split-underscore-from-meteor-base +1.8.3-split-jquery-from-blaze diff --git a/examples/other/parties/.meteor/.gitignore b/tools/tests/apps/git-commit-hash/.meteor/.gitignore similarity index 100% rename from examples/other/parties/.meteor/.gitignore rename to tools/tests/apps/git-commit-hash/.meteor/.gitignore diff --git a/examples/unfinished/accounts-ui-viewer/.meteor/.id b/tools/tests/apps/git-commit-hash/.meteor/.id similarity index 92% rename from examples/unfinished/accounts-ui-viewer/.meteor/.id rename to tools/tests/apps/git-commit-hash/.meteor/.id index ca1973bfa3..b92c6c71e9 100644 --- a/examples/unfinished/accounts-ui-viewer/.meteor/.id +++ b/tools/tests/apps/git-commit-hash/.meteor/.id @@ -4,4 +4,4 @@ # - ensuring you don't accidentally deploy one app on top of another # - providing package authors with aggregated statistics -wllgu394zq2.rrlkgpniscl +xh4qomttjyd.znxg6je45aan diff --git a/tools/tests/apps/git-commit-hash/.meteor/packages b/tools/tests/apps/git-commit-hash/.meteor/packages new file mode 100644 index 0000000000..341bbfc93a --- /dev/null +++ b/tools/tests/apps/git-commit-hash/.meteor/packages @@ -0,0 +1,15 @@ +# Meteor packages used by this project, one per line. +# Check this file (and the other files in this directory) into your repository. +# +# 'meteor add' and 'meteor remove' will edit this file for you, +# but you can also edit it by hand. + +meteor # Shared foundation for all Meteor packages +static-html # Define static page content in .html files +standard-minifier-css # CSS minifier run for production mode +standard-minifier-js # JS minifier run for production mode +es5-shim # ECMAScript 5 compatibility for older browsers +ecmascript # Enable ECMAScript2015+ syntax in app code +shell-server # Server-side component of the `meteor shell` command +webapp # Serves a Meteor app over HTTP +server-render # Support for server-side rendering diff --git a/tools/tests/apps/git-commit-hash/.meteor/platforms b/tools/tests/apps/git-commit-hash/.meteor/platforms new file mode 100644 index 0000000000..efeba1b50c --- /dev/null +++ b/tools/tests/apps/git-commit-hash/.meteor/platforms @@ -0,0 +1,2 @@ +server +browser diff --git a/examples/other/login-demo/.meteor/release b/tools/tests/apps/git-commit-hash/.meteor/release similarity index 100% rename from examples/other/login-demo/.meteor/release rename to tools/tests/apps/git-commit-hash/.meteor/release diff --git a/tools/tests/apps/git-commit-hash/.meteor/versions b/tools/tests/apps/git-commit-hash/.meteor/versions new file mode 100644 index 0000000000..a10ed1d9c8 --- /dev/null +++ b/tools/tests/apps/git-commit-hash/.meteor/versions @@ -0,0 +1,39 @@ +babel-compiler@7.2.4 +babel-runtime@1.3.0 +base64@1.0.11 +blaze-tools@1.0.10 +boilerplate-generator@1.6.0 +caching-compiler@1.2.1 +caching-html-compiler@1.1.3 +dynamic-import@0.5.1 +ecmascript@0.12.4 +ecmascript-runtime@0.7.0 +ecmascript-runtime-client@0.8.0 +ecmascript-runtime-server@0.7.1 +ejson@1.1.0 +es5-shim@4.8.0 +fetch@0.1.0 +html-tools@1.0.11 +htmljs@1.0.11 +inter-process-messaging@0.1.0 +logging@1.1.20 +meteor@1.9.3 +minifier-css@1.4.1 +minifier-js@2.4.0 +modern-browsers@0.1.4-beta181.16 +modules@0.13.0 +modules-runtime@0.10.3 +promise@0.11.2 +random@1.1.0 +routepolicy@1.1.0 +server-render@0.3.1 +shell-server@0.4.0 +spacebars-compiler@1.1.3 +standard-minifier-css@1.5.2 +standard-minifier-js@2.4.0 +static-html@1.2.2 +templating-tools@1.1.2 +tracker@1.2.0 +underscore@1.0.10 +webapp@1.7.3-beta181.16 +webapp-hashing@1.0.9 diff --git a/tools/tests/apps/git-commit-hash/client/main.css b/tools/tests/apps/git-commit-hash/client/main.css new file mode 100644 index 0000000000..7f354f0fa7 --- /dev/null +++ b/tools/tests/apps/git-commit-hash/client/main.css @@ -0,0 +1,4 @@ +body { + padding: 10px; + font-family: sans-serif; +} diff --git a/tools/tests/apps/git-commit-hash/client/main.html b/tools/tests/apps/git-commit-hash/client/main.html new file mode 100644 index 0000000000..19789db4de --- /dev/null +++ b/tools/tests/apps/git-commit-hash/client/main.html @@ -0,0 +1,21 @@ + + Minimal Meteor app + + + +

      Minimal Meteor app

      +

      + This Meteor app uses as few Meteor packages as possible, to keep the + client JavaScript bundle as small as possible. +

      + + + +

      Learn Meteor!

      + + diff --git a/tools/tests/apps/git-commit-hash/client/main.js b/tools/tests/apps/git-commit-hash/client/main.js new file mode 100644 index 0000000000..ef66448599 --- /dev/null +++ b/tools/tests/apps/git-commit-hash/client/main.js @@ -0,0 +1 @@ +console.log(`Greetings from ${module.id}!`); diff --git a/tools/tests/apps/git-commit-hash/package-lock.json b/tools/tests/apps/git-commit-hash/package-lock.json new file mode 100644 index 0000000000..3c5c232326 --- /dev/null +++ b/tools/tests/apps/git-commit-hash/package-lock.json @@ -0,0 +1,880 @@ +{ + "name": "git-commit-hash", + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@babel/runtime": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.0.tgz", + "integrity": "sha512-2xsuyZ0R0RBFwjgae5NpXk8FcfH4qovj5cEM5VEeB7KXnKqzaisIu2HSV/mCEISolJJuR4wkViUGYujA8MH9tw==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "es6-promise": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", + "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==" + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "^4.0.3" + } + }, + "extract-zip": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", + "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "requires": { + "concat-stream": "1.6.2", + "debug": "2.6.9", + "mkdirp": "0.5.1", + "yauzl": "2.4.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "requires": { + "pend": "~1.2.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "https-proxy-agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "meteor-node-stubs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.0.0.tgz", + "integrity": "sha512-QJwyv23wyXD3uEMzk5Xr/y5ezoVlCbHvBbrgdkVadn84dmifLRbs0PtD6EeNw5NLIk+SQSfxld7IMdEsneGz5w==", + "requires": { + "assert": "^1.4.1", + "browserify-zlib": "^0.2.0", + "buffer": "^5.2.1", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.12.0", + "domain-browser": "^1.2.0", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.0", + "process": "^0.11.10", + "punycode": "^2.1.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^3.3.0", + "stream-browserify": "^2.0.2", + "stream-http": "^3.0.0", + "string_decoder": "^1.2.0", + "timers-browserify": "^2.0.10", + "tty-browserify": "0.0.1", + "url": "^0.11.0", + "util": "^0.11.1", + "vm-browserify": "^1.1.0" + }, + "dependencies": { + "asn1.js": { + "version": "4.10.1", + "bundled": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "bundled": true, + "requires": { + "util": "0.10.3" + }, + "dependencies": { + "util": { + "version": "0.10.3", + "bundled": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "base64-js": { + "version": "1.3.0", + "bundled": true + }, + "bn.js": { + "version": "4.11.8", + "bundled": true + }, + "brorand": { + "version": "1.1.0", + "bundled": true + }, + "browserify-aes": { + "version": "1.2.0", + "bundled": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "bundled": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "bundled": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "bundled": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "bundled": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "bundled": true, + "requires": { + "pako": "~1.0.5" + } + }, + "buffer": { + "version": "5.2.1", + "bundled": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-xor": { + "version": "1.0.3", + "bundled": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "bundled": true + }, + "cipher-base": { + "version": "1.0.4", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "console-browserify": { + "version": "1.1.0", + "bundled": true, + "requires": { + "date-now": "^0.1.4" + } + }, + "constants-browserify": { + "version": "1.0.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "create-ecdh": { + "version": "4.0.3", + "bundled": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "bundled": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "bundled": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "bundled": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "date-now": { + "version": "0.1.4", + "bundled": true + }, + "des.js": { + "version": "1.0.0", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "diffie-hellman": { + "version": "5.0.3", + "bundled": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "domain-browser": { + "version": "1.2.0", + "bundled": true + }, + "elliptic": { + "version": "6.4.1", + "bundled": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "events": { + "version": "3.0.0", + "bundled": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "bundled": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "hash-base": { + "version": "3.0.4", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "bundled": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "bundled": true + } + } + }, + "hmac-drbg": { + "version": "1.0.1", + "bundled": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "https-browserify": { + "version": "1.0.0", + "bundled": true + }, + "ieee754": { + "version": "1.1.13", + "bundled": true + }, + "inherits": { + "version": "2.0.1", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "md5.js": { + "version": "1.3.5", + "bundled": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "bundled": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "bundled": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "bundled": true + }, + "os-browserify": { + "version": "0.3.0", + "bundled": true + }, + "pako": { + "version": "1.0.10", + "bundled": true + }, + "parse-asn1": { + "version": "5.1.4", + "bundled": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "path-browserify": { + "version": "1.0.0", + "bundled": true + }, + "pbkdf2": { + "version": "3.0.17", + "bundled": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "process": { + "version": "0.11.10", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true + }, + "public-encrypt": { + "version": "4.0.3", + "bundled": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "punycode": { + "version": "2.1.1", + "bundled": true + }, + "querystring": { + "version": "0.2.0", + "bundled": true + }, + "querystring-es3": { + "version": "0.2.1", + "bundled": true + }, + "randombytes": { + "version": "2.1.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "bundled": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "readable-stream": { + "version": "3.3.0", + "bundled": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "bundled": true + } + } + }, + "ripemd160": { + "version": "2.0.2", + "bundled": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "setimmediate": { + "version": "1.0.5", + "bundled": true + }, + "sha.js": { + "version": "2.4.11", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "stream-browserify": { + "version": "2.0.2", + "bundled": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "bundled": true + } + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-http": { + "version": "3.0.0", + "bundled": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^3.0.6", + "xtend": "^4.0.0" + } + }, + "string_decoder": { + "version": "1.2.0", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "timers-browserify": { + "version": "2.0.10", + "bundled": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "tty-browserify": { + "version": "0.0.1", + "bundled": true + }, + "url": { + "version": "0.11.0", + "bundled": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "bundled": true + } + } + }, + "util": { + "version": "0.11.1", + "bundled": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "bundled": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "vm-browserify": { + "version": "1.1.0", + "bundled": true + }, + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + }, + "mime": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=" + }, + "puppeteer": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.6.2.tgz", + "integrity": "sha512-KBgMr/ZdwIwDQWTqcAlGhnQ2Vd6p+o5B89H60XUfdmCpia2KViSZsdRjvrf2wYOxXSrpYx6OuCBzV7ppLuNjNg==", + "requires": { + "debug": "^3.1.0", + "extract-zip": "^1.6.6", + "https-proxy-agent": "^2.2.1", + "mime": "^2.0.3", + "progress": "^2.0.0", + "proxy-from-env": "^1.0.0", + "rimraf": "^2.6.1", + "ws": "^5.1.1" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "regenerator-runtime": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "requires": { + "fd-slicer": "~1.0.1" + } + } + } +} diff --git a/tools/tests/apps/git-commit-hash/package.json b/tools/tests/apps/git-commit-hash/package.json new file mode 100644 index 0000000000..6cdf07806d --- /dev/null +++ b/tools/tests/apps/git-commit-hash/package.json @@ -0,0 +1,20 @@ +{ + "name": "git-commit-hash", + "private": true, + "scripts": { + "start": "meteor run", + "test": "TEST_BROWSER_DRIVER=puppeteer meteor test --once --full-app --driver-package meteortesting:mocha" + }, + "dependencies": { + "@babel/runtime": "^7.5.0", + "meteor-node-stubs": "^1.0.1", + "puppeteer": "^1.6.2" + }, + "meteor": { + "mainModule": { + "client": "client/main.js", + "server": "server/main.js" + }, + "testModule": "tests/main.js" + } +} diff --git a/tools/tests/apps/git-commit-hash/server/main.js b/tools/tests/apps/git-commit-hash/server/main.js new file mode 100644 index 0000000000..a7504fcb96 --- /dev/null +++ b/tools/tests/apps/git-commit-hash/server/main.js @@ -0,0 +1,6 @@ +import { Meteor } from "meteor/meteor"; + +Meteor.startup(() => { + const { gitCommitHash } = __meteor_runtime_config__; + console.log("__meteor_runtime_config__.gitCommitHash: " + gitCommitHash); +}); diff --git a/tools/tests/apps/git-commit-hash/tests/main.js b/tools/tests/apps/git-commit-hash/tests/main.js new file mode 100644 index 0000000000..93c59b7bea --- /dev/null +++ b/tools/tests/apps/git-commit-hash/tests/main.js @@ -0,0 +1,27 @@ +import assert from "assert"; + +const gitShaPattern = /^[0-9a-z]{40}$/; + +describe("git-commit-hash", function () { + it("package.json has correct name", async function () { + const { name } = await import("../package.json"); + assert.strictEqual(name, "git-commit-hash"); + }); + + it("Meteor.gitCommitHash is defined", function () { + assert.strictEqual(typeof Meteor.gitCommitHash, "string"); + assert(gitShaPattern.test(Meteor.gitCommitHash), Meteor.gitCommitHash); + }); + + if (Meteor.isClient) { + it("client is not server", function () { + assert.strictEqual(Meteor.isServer, false); + }); + } + + if (Meteor.isServer) { + it("server is not client", function () { + assert.strictEqual(Meteor.isClient, false); + }); + } +}); diff --git a/tools/tests/apps/hot-code-push-test/hot-code-push-test.js b/tools/tests/apps/hot-code-push-test/hot-code-push-test.js index 649dd98dbc..a78116cdbb 100644 --- a/tools/tests/apps/hot-code-push-test/hot-code-push-test.js +++ b/tools/tests/apps/hot-code-push-test/hot-code-push-test.js @@ -3,7 +3,7 @@ if (Meteor.isClient) { var maybeCall = function () { var A = Package.autoupdate.Autoupdate; - if (A._ClientVersions.findOne() && ! A.newClientAvailable()) { + if (A._clientVersions.hasVersions() && ! A.newClientAvailable()) { Meteor.call("clientLoad", typeof jsVar === 'undefined' ? 'undefined' : jsVar, typeof packageVar === 'undefined' ? 'undefined' : packageVar, diff --git a/tools/tests/apps/link-config-npm-package/.gitignore b/tools/tests/apps/link-config-npm-package/.gitignore new file mode 100644 index 0000000000..40b878db5b --- /dev/null +++ b/tools/tests/apps/link-config-npm-package/.gitignore @@ -0,0 +1 @@ +node_modules/ \ No newline at end of file diff --git a/tools/tests/apps/link-config-npm-package/.meteor/.finished-upgraders b/tools/tests/apps/link-config-npm-package/.meteor/.finished-upgraders new file mode 100644 index 0000000000..c07b6ff75a --- /dev/null +++ b/tools/tests/apps/link-config-npm-package/.meteor/.finished-upgraders @@ -0,0 +1,19 @@ +# This file contains information which helps Meteor properly upgrade your +# app when you run 'meteor update'. You should check it into version control +# with your project. + +notices-for-0.9.0 +notices-for-0.9.1 +0.9.4-platform-file +notices-for-facebook-graph-api-2 +1.2.0-standard-minifiers-package +1.2.0-meteor-platform-split +1.2.0-cordova-changes +1.2.0-breaking-changes +1.3.0-split-minifiers-package +1.4.0-remove-old-dev-bundle-link +1.4.1-add-shell-server-package +1.4.3-split-account-service-packages +1.5-add-dynamic-import-package +1.7-split-underscore-from-meteor-base +1.8.3-split-jquery-from-blaze diff --git a/examples/other/quiescence/.meteor/.gitignore b/tools/tests/apps/link-config-npm-package/.meteor/.gitignore similarity index 100% rename from examples/other/quiescence/.meteor/.gitignore rename to tools/tests/apps/link-config-npm-package/.meteor/.gitignore diff --git a/tools/tests/apps/link-config-npm-package/.meteor/.id b/tools/tests/apps/link-config-npm-package/.meteor/.id new file mode 100644 index 0000000000..f5afcb55c2 --- /dev/null +++ b/tools/tests/apps/link-config-npm-package/.meteor/.id @@ -0,0 +1,7 @@ +# This file contains a token that is unique to your project. +# Check it into your repository along with the rest of this directory. +# It can be used for purposes such as: +# - ensuring you don't accidentally deploy one app on top of another +# - providing package authors with aggregated statistics + +j09yfxg8pwz74.sw6lv8bt1n0m diff --git a/tools/tests/apps/link-config-npm-package/.meteor/packages b/tools/tests/apps/link-config-npm-package/.meteor/packages new file mode 100644 index 0000000000..341bbfc93a --- /dev/null +++ b/tools/tests/apps/link-config-npm-package/.meteor/packages @@ -0,0 +1,15 @@ +# Meteor packages used by this project, one per line. +# Check this file (and the other files in this directory) into your repository. +# +# 'meteor add' and 'meteor remove' will edit this file for you, +# but you can also edit it by hand. + +meteor # Shared foundation for all Meteor packages +static-html # Define static page content in .html files +standard-minifier-css # CSS minifier run for production mode +standard-minifier-js # JS minifier run for production mode +es5-shim # ECMAScript 5 compatibility for older browsers +ecmascript # Enable ECMAScript2015+ syntax in app code +shell-server # Server-side component of the `meteor shell` command +webapp # Serves a Meteor app over HTTP +server-render # Support for server-side rendering diff --git a/tools/tests/apps/link-config-npm-package/.meteor/platforms b/tools/tests/apps/link-config-npm-package/.meteor/platforms new file mode 100644 index 0000000000..efeba1b50c --- /dev/null +++ b/tools/tests/apps/link-config-npm-package/.meteor/platforms @@ -0,0 +1,2 @@ +server +browser diff --git a/examples/unfinished/atoms/.meteor/release b/tools/tests/apps/link-config-npm-package/.meteor/release similarity index 100% rename from examples/unfinished/atoms/.meteor/release rename to tools/tests/apps/link-config-npm-package/.meteor/release diff --git a/tools/tests/apps/link-config-npm-package/.meteor/versions b/tools/tests/apps/link-config-npm-package/.meteor/versions new file mode 100644 index 0000000000..91816ff622 --- /dev/null +++ b/tools/tests/apps/link-config-npm-package/.meteor/versions @@ -0,0 +1,39 @@ +babel-compiler@7.2.0-rc171.6 +babel-runtime@1.3.0-rc171.6 +base64@1.0.11 +blaze-tools@1.0.10 +boilerplate-generator@1.6.0-rc171.6 +caching-compiler@1.2.0-rc171.6 +caching-html-compiler@1.1.3 +dynamic-import@0.5.0-rc171.6 +ecmascript@0.12.0-rc171.6 +ecmascript-runtime@0.7.0 +ecmascript-runtime-client@0.8.0-rc171.6 +ecmascript-runtime-server@0.7.1 +ejson@1.1.0 +es5-shim@4.8.0 +fetch@0.1.0 +html-tools@1.0.11 +htmljs@1.0.11 +inter-process-messaging@0.1.0-rc171.6 +logging@1.1.20 +meteor@1.9.2 +minifier-css@1.3.1 +minifier-js@2.4.0-rc171.6 +modern-browsers@0.1.2 +modules@0.13.0-rc171.6 +modules-runtime@0.10.2 +promise@0.11.1 +random@1.1.0 +routepolicy@1.1.0-rc171.6 +server-render@0.3.1 +shell-server@0.4.0 +spacebars-compiler@1.1.3 +standard-minifier-css@1.4.1 +standard-minifier-js@2.4.0-rc171.6 +static-html@1.2.2 +templating-tools@1.1.2 +tracker@1.2.0 +underscore@1.0.10 +webapp@1.7.0-rc171.6 +webapp-hashing@1.0.9 diff --git a/tools/tests/apps/link-config-npm-package/main.js b/tools/tests/apps/link-config-npm-package/main.js new file mode 100644 index 0000000000..a2b1d76e5d --- /dev/null +++ b/tools/tests/apps/link-config-npm-package/main.js @@ -0,0 +1 @@ +console.log("main", require("config").id); diff --git a/tools/tests/apps/link-config-npm-package/package.json b/tools/tests/apps/link-config-npm-package/package.json new file mode 100644 index 0000000000..8edcc43842 --- /dev/null +++ b/tools/tests/apps/link-config-npm-package/package.json @@ -0,0 +1,21 @@ +{ + "name": "link-config-npm-package", + "private": true, + "scripts": { + "start": "meteor run", + "test": "meteor test --once --driver-package meteortesting:mocha", + "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", + "visualize": "meteor --production --extra-packages bundle-visualizer" + }, + "dependencies": { + "@babel/runtime": "^7.5.0", + "config": "file:../config-package", + "meteor-node-stubs": "^1.0.1" + }, + "meteor": { + "mainModule": { + "client": false, + "server": "main.js" + } + } +} diff --git a/tools/tests/apps/linked-external-npm-package/.meteor/.finished-upgraders b/tools/tests/apps/linked-external-npm-package/.meteor/.finished-upgraders index 4538749ab8..c07b6ff75a 100644 --- a/tools/tests/apps/linked-external-npm-package/.meteor/.finished-upgraders +++ b/tools/tests/apps/linked-external-npm-package/.meteor/.finished-upgraders @@ -16,3 +16,4 @@ notices-for-facebook-graph-api-2 1.4.3-split-account-service-packages 1.5-add-dynamic-import-package 1.7-split-underscore-from-meteor-base +1.8.3-split-jquery-from-blaze diff --git a/tools/tests/apps/linked-external-npm-package/package.json b/tools/tests/apps/linked-external-npm-package/package.json index 6e26e15a63..c1c79161f8 100644 --- a/tools/tests/apps/linked-external-npm-package/package.json +++ b/tools/tests/apps/linked-external-npm-package/package.json @@ -8,9 +8,9 @@ "visualize": "meteor --production --extra-packages bundle-visualizer" }, "dependencies": { - "@babel/runtime": "^7.0.0", + "@babel/runtime": "^7.5.0", "external-package": "file:../external-package", - "meteor-node-stubs": "^0.4.1" + "meteor-node-stubs": "^1.0.1" }, "meteor": { "mainModule": { diff --git a/tools/tests/apps/meteor-ignore/package-lock.json b/tools/tests/apps/meteor-ignore/package-lock.json index 2420e5e56a..241f13beb5 100644 --- a/tools/tests/apps/meteor-ignore/package-lock.json +++ b/tools/tests/apps/meteor-ignore/package-lock.json @@ -4,56 +4,50 @@ "lockfileVersion": 1, "dependencies": { "@babel/runtime": { - "version": "7.0.0-beta.46", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0-beta.46.tgz", - "integrity": "sha512-/3a3USMKk54BEHhDgY8rtxtaQOs4bp4aQwo6SDtdwmrXmgSgEusWuXNX5oIs/nwzmTD9o8wz2EyAjA+uHDMmJA==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.0.tgz", + "integrity": "sha512-2xsuyZ0R0RBFwjgae5NpXk8FcfH4qovj5cEM5VEeB7KXnKqzaisIu2HSV/mCEISolJJuR4wkViUGYujA8MH9tw==", "requires": { - "core-js": "2.5.5", - "regenerator-runtime": "0.11.1" + "regenerator-runtime": "^0.13.2" } }, - "core-js": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz", - "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=" - }, "meteor-node-stubs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-0.4.1.tgz", - "integrity": "sha512-UO2OStvLOKoApmOdIP5eCqoLaa/ritMXRg4ffJVdkNLEsczzPvTjgC0Mxk4cM4R8MZkwll90FYgjDf5qUTJdMA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.0.0.tgz", + "integrity": "sha512-QJwyv23wyXD3uEMzk5Xr/y5ezoVlCbHvBbrgdkVadn84dmifLRbs0PtD6EeNw5NLIk+SQSfxld7IMdEsneGz5w==", "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.1.4", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "0.0.1", - "os-browserify": "0.2.1", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.1", - "string_decoder": "1.1.1", - "timers-browserify": "1.4.2", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", - "vm-browserify": "0.0.4" + "assert": "^1.4.1", + "browserify-zlib": "^0.2.0", + "buffer": "^5.2.1", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.12.0", + "domain-browser": "^1.2.0", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.0", + "process": "^0.11.10", + "punycode": "^2.1.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^3.3.0", + "stream-browserify": "^2.0.2", + "stream-http": "^3.0.0", + "string_decoder": "^1.2.0", + "timers-browserify": "^2.0.10", + "tty-browserify": "0.0.1", + "url": "^0.11.0", + "util": "^0.11.1", + "vm-browserify": "^1.1.0" }, "dependencies": { "asn1.js": { "version": "4.10.1", "bundled": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.1", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -61,6 +55,15 @@ "bundled": true, "requires": { "util": "0.10.3" + }, + "dependencies": { + "util": { + "version": "0.10.3", + "bundled": true, + "requires": { + "inherits": "2.0.1" + } + } } }, "base64-js": { @@ -79,67 +82,67 @@ "version": "1.2.0", "bundled": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.1", - "safe-buffer": "5.1.2" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { "version": "1.0.1", "bundled": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.1", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { - "version": "1.0.1", + "version": "1.0.2", "bundled": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.1" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { "version": "4.0.1", "bundled": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { "version": "4.0.4", "bundled": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.0", - "inherits": "2.0.1", - "parse-asn1": "5.1.1" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { - "version": "0.1.4", + "version": "0.2.0", "bundled": true, "requires": { - "pako": "0.2.9" + "pako": "~1.0.5" } }, "buffer": { - "version": "4.9.1", + "version": "5.2.1", "bundled": true, "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.11", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" } }, "buffer-xor": { @@ -154,15 +157,15 @@ "version": "1.0.4", "bundled": true, "requires": { - "inherits": "2.0.1", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "console-browserify": { "version": "1.1.0", "bundled": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -177,48 +180,48 @@ "version": "4.0.3", "bundled": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { "version": "1.2.0", "bundled": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.1", - "md5.js": "1.3.4", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { "version": "1.1.7", "bundled": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.1", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "crypto-browserify": { "version": "3.12.0", "bundled": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.1", - "pbkdf2": "3.0.16", - "public-encrypt": "4.0.2", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "date-now": { @@ -229,17 +232,17 @@ "version": "1.0.0", "bundled": true, "requires": { - "inherits": "2.0.1", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "diffie-hellman": { "version": "5.0.3", "bundled": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "domain-browser": { @@ -247,44 +250,44 @@ "bundled": true }, "elliptic": { - "version": "6.4.0", + "version": "6.4.1", "bundled": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.1", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "events": { - "version": "1.1.1", + "version": "3.0.0", "bundled": true }, "evp_bytestokey": { "version": "1.0.3", "bundled": true, "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "hash-base": { "version": "3.0.4", "bundled": true, "requires": { - "inherits": "2.0.1", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { - "version": "1.1.3", + "version": "1.1.7", "bundled": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" }, "dependencies": { "inherits": { @@ -297,21 +300,17 @@ "version": "1.0.1", "bundled": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "https-browserify": { - "version": "0.0.1", + "version": "1.0.0", "bundled": true }, "ieee754": { - "version": "1.1.11", - "bundled": true - }, - "indexof": { - "version": "0.0.1", + "version": "1.1.13", "bundled": true }, "inherits": { @@ -323,19 +322,20 @@ "bundled": true }, "md5.js": { - "version": "1.3.4", + "version": "1.3.5", "bundled": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.1" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "miller-rabin": { "version": "4.0.1", "bundled": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "minimalistic-assert": { @@ -347,37 +347,38 @@ "bundled": true }, "os-browserify": { - "version": "0.2.1", + "version": "0.3.0", "bundled": true }, "pako": { - "version": "0.2.9", + "version": "1.0.10", "bundled": true }, "parse-asn1": { - "version": "5.1.1", + "version": "5.1.4", "bundled": true, "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.16" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, "path-browserify": { - "version": "0.0.0", + "version": "1.0.0", "bundled": true }, "pbkdf2": { - "version": "3.0.16", + "version": "3.0.17", "bundled": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "process": { @@ -389,18 +390,19 @@ "bundled": true }, "public-encrypt": { - "version": "4.0.2", + "version": "4.0.3", "bundled": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "punycode": { - "version": "1.4.1", + "version": "2.1.1", "bundled": true }, "querystring": { @@ -412,31 +414,27 @@ "bundled": true }, "randombytes": { - "version": "2.0.6", + "version": "2.1.0", "bundled": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { "version": "1.0.4", "bundled": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "readable-stream": { - "version": "2.3.6", + "version": "3.3.0", "bundled": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "dependencies": { "inherits": { @@ -449,61 +447,88 @@ "version": "2.0.2", "bundled": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.1" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "safe-buffer": { "version": "5.1.2", "bundled": true }, + "setimmediate": { + "version": "1.0.5", + "bundled": true + }, "sha.js": { "version": "2.4.11", "bundled": true, "requires": { - "inherits": "2.0.1", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "stream-browserify": { - "version": "2.0.1", + "version": "2.0.2", "bundled": true, "requires": { - "inherits": "2.0.1", - "readable-stream": "2.3.6" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "bundled": true + } + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "stream-http": { - "version": "2.8.1", + "version": "3.0.0", "bundled": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.1", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^3.0.6", + "xtend": "^4.0.0" } }, "string_decoder": { - "version": "1.1.1", + "version": "1.2.0", "bundled": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "timers-browserify": { - "version": "1.4.2", + "version": "2.0.10", "bundled": true, "requires": { - "process": "0.11.10" + "setimmediate": "^1.0.4" } }, - "to-arraybuffer": { - "version": "1.0.1", - "bundled": true - }, "tty-browserify": { - "version": "0.0.0", + "version": "0.0.1", "bundled": true }, "url": { @@ -521,10 +546,16 @@ } }, "util": { - "version": "0.10.3", + "version": "0.11.1", "bundled": true, "requires": { - "inherits": "2.0.1" + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "bundled": true + } } }, "util-deprecate": { @@ -532,11 +563,8 @@ "bundled": true }, "vm-browserify": { - "version": "0.0.4", - "bundled": true, - "requires": { - "indexof": "0.0.1" - } + "version": "1.1.0", + "bundled": true }, "xtend": { "version": "4.0.1", @@ -545,9 +573,9 @@ } }, "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" } } } diff --git a/tools/tests/apps/meteor-ignore/package.json b/tools/tests/apps/meteor-ignore/package.json index b78d28f124..4216ec2e1c 100644 --- a/tools/tests/apps/meteor-ignore/package.json +++ b/tools/tests/apps/meteor-ignore/package.json @@ -5,7 +5,7 @@ "start": "meteor run" }, "dependencies": { - "@babel/runtime": "^7.0.0-beta.56", - "meteor-node-stubs": "^0.4.1" + "@babel/runtime": "^7.5.0", + "meteor-node-stubs": "^1.0.1" } } diff --git a/tools/tests/apps/modules/.meteor/.finished-upgraders b/tools/tests/apps/modules/.meteor/.finished-upgraders index 8f397c7dad..bc5b50f7cd 100644 --- a/tools/tests/apps/modules/.meteor/.finished-upgraders +++ b/tools/tests/apps/modules/.meteor/.finished-upgraders @@ -17,3 +17,4 @@ notices-for-facebook-graph-api-2 1.4.3-split-account-service-packages 1.5-add-dynamic-import-package 1.7-split-underscore-from-meteor-base +1.8.3-split-jquery-from-blaze diff --git a/tools/tests/apps/modules/.meteor/packages b/tools/tests/apps/modules/.meteor/packages index 896ae88aa3..2f92a7e262 100644 --- a/tools/tests/apps/modules/.meteor/packages +++ b/tools/tests/apps/modules/.meteor/packages @@ -5,25 +5,26 @@ # but you can also edit it by hand. meteor-base@1.4.0 # Packages every Meteor app needs to have -mobile-experience@1.0.5 # Packages for a great mobile UX -mongo@1.6.0 # The database Meteor supports right now +mobile-experience@1.1.0 # Packages for a great mobile UX +mongo@1.9.0 # The database Meteor supports right now blaze-html-templates # Compile .html files into Meteor Blaze views -session@1.1.8 # Client-side reactive dictionary for your app -jquery@1.11.10 # Helpful client-side library +session@1.2.0 # Client-side reactive dictionary for your app +jquery # Helpful client-side library tracker@1.2.0 # Meteor's client-side reactive programming library es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers. -ecmascript@0.12.0 # Enable ECMAScript2015+ syntax in app code +ecmascript@0.14.2 # Enable ECMAScript2015+ syntax in app code coffeescript modules-test-package -standard-minifier-css@1.5.0 -standard-minifier-js@2.4.0 +standard-minifier-css@1.6.0 +standard-minifier-js@2.6.0 client-only-ecmascript modules-test-plugin -shell-server@0.4.0 -dynamic-import@0.5.0 +shell-server@0.5.0 +dynamic-import@0.5.1 underscore@1.0.10 import-local-json-module akryum:vue-component dummy-compiler +typescript diff --git a/tools/tests/apps/modules/.meteor/release b/tools/tests/apps/modules/.meteor/release index e76dedee10..d259781110 100644 --- a/tools/tests/apps/modules/.meteor/release +++ b/tools/tests/apps/modules/.meteor/release @@ -1 +1 @@ -METEOR@1.8 +METEOR@1.10.1 diff --git a/tools/tests/apps/modules/imports/.babelrc b/tools/tests/apps/modules/imports/.babelrc index e99cbde580..b18c977ecb 100644 --- a/tools/tests/apps/modules/imports/.babelrc +++ b/tools/tests/apps/modules/imports/.babelrc @@ -3,13 +3,11 @@ "development": { "plugins": [ "proposal-do-expressions", - "proposal-optional-chaining" ] }, "production": { "plugins": [ "proposal-do-expressions", - "proposal-optional-chaining" ] } } diff --git a/tools/tests/apps/modules/imports/imported.tests.js b/tools/tests/apps/modules/imports/imported.tests.js new file mode 100644 index 0000000000..5db10f22c0 --- /dev/null +++ b/tools/tests/apps/modules/imports/imported.tests.js @@ -0,0 +1,9 @@ +import assert from "assert"; + +export const name = module.id.split("/").pop(); + +describe(name, () => { + it("should be imported", () => { + assert.strictEqual(name, "imported.tests.js"); + }); +}); diff --git a/tools/tests/apps/modules/imports/links/acorn/.npmignore b/tools/tests/apps/modules/imports/links/acorn/.npmignore new file mode 100644 index 0000000000..0e574439e0 --- /dev/null +++ b/tools/tests/apps/modules/imports/links/acorn/.npmignore @@ -0,0 +1,3 @@ +.tern-* +/rollup.config.* +/src diff --git a/tools/tests/apps/modules/imports/links/acorn/CHANGELOG.md b/tools/tests/apps/modules/imports/links/acorn/CHANGELOG.md new file mode 100644 index 0000000000..93837a91a1 --- /dev/null +++ b/tools/tests/apps/modules/imports/links/acorn/CHANGELOG.md @@ -0,0 +1,580 @@ +## 6.4.1 (2020-03-09) + +### Bug fixes + +More carefully check for valid UTF16 surrogate pairs in regexp validator. + +## 7.1.1 (2020-03-01) + +### Bug fixes + +Treat `\8` and `\9` as invalid escapes in template strings. + +Allow unicode escapes in property names that are keywords. + +Don't error on an exponential operator expression as argument to `await`. + +More carefully check for valid UTF16 surrogate pairs in regexp validator. + +## 7.1.0 (2019-09-24) + +### Bug fixes + +Disallow trailing object literal commas when ecmaVersion is less than 5. + +### New features + +Add a static `acorn` property to the `Parser` class that contains the entire module interface, to allow plugins to access the instance of the library that they are acting on. + +## 7.0.0 (2019-08-13) + +### Breaking changes + +Changes the node format for dynamic imports to use the `ImportExpression` node type, as defined in [ESTree](https://github.com/estree/estree/blob/master/es2020.md#importexpression). + +Makes 10 (ES2019) the default value for the `ecmaVersion` option. + +## 6.3.0 (2019-08-12) + +### New features + +`sourceType: "module"` can now be used even when `ecmaVersion` is less than 6, to parse module-style code that otherwise conforms to an older standard. + +## 6.2.1 (2019-07-21) + +### Bug fixes + +Fix bug causing Acorn to treat some characters as identifier characters that shouldn't be treated as such. + +Fix issue where setting the `allowReserved` option to `"never"` allowed reserved words in some circumstances. + +## 6.2.0 (2019-07-04) + +### Bug fixes + +Improve valid assignment checking in `for`/`in` and `for`/`of` loops. + +Disallow binding `let` in patterns. + +### New features + +Support bigint syntax with `ecmaVersion` >= 11. + +Support dynamic `import` syntax with `ecmaVersion` >= 11. + +Upgrade to Unicode version 12. + +## 6.1.1 (2019-02-27) + +### Bug fixes + +Fix bug that caused parsing default exports of with names to fail. + +## 6.1.0 (2019-02-08) + +### Bug fixes + +Fix scope checking when redefining a `var` as a lexical binding. + +### New features + +Split up `parseSubscripts` to use an internal `parseSubscript` method to make it easier to extend with plugins. + +## 6.0.7 (2019-02-04) + +### Bug fixes + +Check that exported bindings are defined. + +Don't treat `\u180e` as a whitespace character. + +Check for duplicate parameter names in methods. + +Don't allow shorthand properties when they are generators or async methods. + +Forbid binding `await` in async arrow function's parameter list. + +## 6.0.6 (2019-01-30) + +### Bug fixes + +The content of class declarations and expressions is now always parsed in strict mode. + +Don't allow `let` or `const` to bind the variable name `let`. + +Treat class declarations as lexical. + +Don't allow a generator function declaration as the sole body of an `if` or `else`. + +Ignore `"use strict"` when after an empty statement. + +Allow string line continuations with special line terminator characters. + +Treat `for` bodies as part of the `for` scope when checking for conflicting bindings. + +Fix bug with parsing `yield` in a `for` loop initializer. + +Implement special cases around scope checking for functions. + +## 6.0.5 (2019-01-02) + +### Bug fixes + +Fix TypeScript type for `Parser.extend` and add `allowAwaitOutsideFunction` to options type. + +Don't treat `let` as a keyword when the next token is `{` on the next line. + +Fix bug that broke checking for parentheses around an object pattern in a destructuring assignment when `preserveParens` was on. + +## 6.0.4 (2018-11-05) + +### Bug fixes + +Further improvements to tokenizing regular expressions in corner cases. + +## 6.0.3 (2018-11-04) + +### Bug fixes + +Fix bug in tokenizing an expression-less return followed by a function followed by a regular expression. + +Remove stray symlink in the package tarball. + +## 6.0.2 (2018-09-26) + +### Bug fixes + +Fix bug where default expressions could fail to parse inside an object destructuring assignment expression. + +## 6.0.1 (2018-09-14) + +### Bug fixes + +Fix wrong value in `version` export. + +## 6.0.0 (2018-09-14) + +### Bug fixes + +Better handle variable-redefinition checks for catch bindings and functions directly under if statements. + +Forbid `new.target` in top-level arrow functions. + +Fix issue with parsing a regexp after `yield` in some contexts. + +### New features + +The package now comes with TypeScript definitions. + +### Breaking changes + +The default value of the `ecmaVersion` option is now 9 (2018). + +Plugins work differently, and will have to be rewritten to work with this version. + +The loose parser and walker have been moved into separate packages (`acorn-loose` and `acorn-walk`). + +## 5.7.3 (2018-09-10) + +### Bug fixes + +Fix failure to tokenize regexps after expressions like `x.of`. + +Better error message for unterminated template literals. + +## 5.7.2 (2018-08-24) + +### Bug fixes + +Properly handle `allowAwaitOutsideFunction` in for statements. + +Treat function declarations at the top level of modules like let bindings. + +Don't allow async function declarations as the only statement under a label. + +## 5.7.0 (2018-06-15) + +### New features + +Upgraded to Unicode 11. + +## 5.6.0 (2018-05-31) + +### New features + +Allow U+2028 and U+2029 in string when ECMAVersion >= 10. + +Allow binding-less catch statements when ECMAVersion >= 10. + +Add `allowAwaitOutsideFunction` option for parsing top-level `await`. + +## 5.5.3 (2018-03-08) + +### Bug fixes + +A _second_ republish of the code in 5.5.1, this time with yarn, to hopefully get valid timestamps. + +## 5.5.2 (2018-03-08) + +### Bug fixes + +A republish of the code in 5.5.1 in an attempt to solve an issue with the file timestamps in the npm package being 0. + +## 5.5.1 (2018-03-06) + +### Bug fixes + +Fix misleading error message for octal escapes in template strings. + +## 5.5.0 (2018-02-27) + +### New features + +The identifier character categorization is now based on Unicode version 10. + +Acorn will now validate the content of regular expressions, including new ES9 features. + +## 5.4.0 (2018-02-01) + +### Bug fixes + +Disallow duplicate or escaped flags on regular expressions. + +Disallow octal escapes in strings in strict mode. + +### New features + +Add support for async iteration. + +Add support for object spread and rest. + +## 5.3.0 (2017-12-28) + +### Bug fixes + +Fix parsing of floating point literals with leading zeroes in loose mode. + +Allow duplicate property names in object patterns. + +Don't allow static class methods named `prototype`. + +Disallow async functions directly under `if` or `else`. + +Parse right-hand-side of `for`/`of` as an assignment expression. + +Stricter parsing of `for`/`in`. + +Don't allow unicode escapes in contextual keywords. + +### New features + +Parsing class members was factored into smaller methods to allow plugins to hook into it. + +## 5.2.1 (2017-10-30) + +### Bug fixes + +Fix a token context corruption bug. + +## 5.2.0 (2017-10-30) + +### Bug fixes + +Fix token context tracking for `class` and `function` in property-name position. + +Make sure `%*` isn't parsed as a valid operator. + +Allow shorthand properties `get` and `set` to be followed by default values. + +Disallow `super` when not in callee or object position. + +### New features + +Support [`directive` property](https://github.com/estree/estree/compare/b3de58c9997504d6fba04b72f76e6dd1619ee4eb...1da8e603237144f44710360f8feb7a9977e905e0) on directive expression statements. + +## 5.1.2 (2017-09-04) + +### Bug fixes + +Disable parsing of legacy HTML-style comments in modules. + +Fix parsing of async methods whose names are keywords. + +## 5.1.1 (2017-07-06) + +### Bug fixes + +Fix problem with disambiguating regexp and division after a class. + +## 5.1.0 (2017-07-05) + +### Bug fixes + +Fix tokenizing of regexps in an object-desctructuring `for`/`of` loop and after `yield`. + +Parse zero-prefixed numbers with non-octal digits as decimal. + +Allow object/array patterns in rest parameters. + +Don't error when `yield` is used as a property name. + +Allow `async` as a shorthand object property. + +### New features + +Implement the [template literal revision proposal](https://github.com/tc39/proposal-template-literal-revision) for ES9. + +## 5.0.3 (2017-04-01) + +### Bug fixes + +Fix spurious duplicate variable definition errors for named functions. + +## 5.0.2 (2017-03-30) + +### Bug fixes + +A binary operator after a parenthesized arrow expression is no longer incorrectly treated as an error. + +## 5.0.0 (2017-03-28) + +### Bug fixes + +Raise an error for duplicated lexical bindings. + +Fix spurious error when an assignement expression occurred after a spread expression. + +Accept regular expressions after `of` (in `for`/`of`), `yield` (in a generator), and braced arrow functions. + +Allow labels in front or `var` declarations, even in strict mode. + +### Breaking changes + +Parse declarations following `export default` as declaration nodes, not expressions. This means that class and function declarations nodes can now have `null` as their `id`. + +## 4.0.11 (2017-02-07) + +### Bug fixes + +Allow all forms of member expressions to be parenthesized as lvalue. + +## 4.0.10 (2017-02-07) + +### Bug fixes + +Don't expect semicolons after default-exported functions or classes, even when they are expressions. + +Check for use of `'use strict'` directives in non-simple parameter functions, even when already in strict mode. + +## 4.0.9 (2017-02-06) + +### Bug fixes + +Fix incorrect error raised for parenthesized simple assignment targets, so that `(x) = 1` parses again. + +## 4.0.8 (2017-02-03) + +### Bug fixes + +Solve spurious parenthesized pattern errors by temporarily erring on the side of accepting programs that our delayed errors don't handle correctly yet. + +## 4.0.7 (2017-02-02) + +### Bug fixes + +Accept invalidly rejected code like `(x).y = 2` again. + +Don't raise an error when a function _inside_ strict code has a non-simple parameter list. + +## 4.0.6 (2017-02-02) + +### Bug fixes + +Fix exponential behavior (manifesting itself as a complete hang for even relatively small source files) introduced by the new 'use strict' check. + +## 4.0.5 (2017-02-02) + +### Bug fixes + +Disallow parenthesized pattern expressions. + +Allow keywords as export names. + +Don't allow the `async` keyword to be parenthesized. + +Properly raise an error when a keyword contains a character escape. + +Allow `"use strict"` to appear after other string literal expressions. + +Disallow labeled declarations. + +## 4.0.4 (2016-12-19) + +### Bug fixes + +Fix crash when `export` was followed by a keyword that can't be +exported. + +## 4.0.3 (2016-08-16) + +### Bug fixes + +Allow regular function declarations inside single-statement `if` branches in loose mode. Forbid them entirely in strict mode. + +Properly parse properties named `async` in ES2017 mode. + +Fix bug where reserved words were broken in ES2017 mode. + +## 4.0.2 (2016-08-11) + +### Bug fixes + +Don't ignore period or 'e' characters after octal numbers. + +Fix broken parsing for call expressions in default parameter values of arrow functions. + +## 4.0.1 (2016-08-08) + +### Bug fixes + +Fix false positives in duplicated export name errors. + +## 4.0.0 (2016-08-07) + +### Breaking changes + +The default `ecmaVersion` option value is now 7. + +A number of internal method signatures changed, so plugins might need to be updated. + +### Bug fixes + +The parser now raises errors on duplicated export names. + +`arguments` and `eval` can now be used in shorthand properties. + +Duplicate parameter names in non-simple argument lists now always produce an error. + +### New features + +The `ecmaVersion` option now also accepts year-style version numbers +(2015, etc). + +Support for `async`/`await` syntax when `ecmaVersion` is >= 8. + +Support for trailing commas in call expressions when `ecmaVersion` is >= 8. + +## 3.3.0 (2016-07-25) + +### Bug fixes + +Fix bug in tokenizing of regexp operator after a function declaration. + +Fix parser crash when parsing an array pattern with a hole. + +### New features + +Implement check against complex argument lists in functions that enable strict mode in ES7. + +## 3.2.0 (2016-06-07) + +### Bug fixes + +Improve handling of lack of unicode regexp support in host +environment. + +Properly reject shorthand properties whose name is a keyword. + +### New features + +Visitors created with `visit.make` now have their base as _prototype_, rather than copying properties into a fresh object. + +## 3.1.0 (2016-04-18) + +### Bug fixes + +Properly tokenize the division operator directly after a function expression. + +Allow trailing comma in destructuring arrays. + +## 3.0.4 (2016-02-25) + +### Fixes + +Allow update expressions as left-hand-side of the ES7 exponential operator. + +## 3.0.2 (2016-02-10) + +### Fixes + +Fix bug that accidentally made `undefined` a reserved word when parsing ES7. + +## 3.0.0 (2016-02-10) + +### Breaking changes + +The default value of the `ecmaVersion` option is now 6 (used to be 5). + +Support for comprehension syntax (which was dropped from the draft spec) has been removed. + +### Fixes + +`let` and `yield` are now “contextual keywords”, meaning you can mostly use them as identifiers in ES5 non-strict code. + +A parenthesized class or function expression after `export default` is now parsed correctly. + +### New features + +When `ecmaVersion` is set to 7, Acorn will parse the exponentiation operator (`**`). + +The identifier character ranges are now based on Unicode 8.0.0. + +Plugins can now override the `raiseRecoverable` method to override the way non-critical errors are handled. + +## 2.7.0 (2016-01-04) + +### Fixes + +Stop allowing rest parameters in setters. + +Disallow `y` rexexp flag in ES5. + +Disallow `\00` and `\000` escapes in strict mode. + +Raise an error when an import name is a reserved word. + +## 2.6.2 (2015-11-10) + +### Fixes + +Don't crash when no options object is passed. + +## 2.6.0 (2015-11-09) + +### Fixes + +Add `await` as a reserved word in module sources. + +Disallow `yield` in a parameter default value for a generator. + +Forbid using a comma after a rest pattern in an array destructuring. + +### New features + +Support parsing stdin in command-line tool. + +## 2.5.0 (2015-10-27) + +### Fixes + +Fix tokenizer support in the command-line tool. + +Stop allowing `new.target` outside of functions. + +Remove legacy `guard` and `guardedHandler` properties from try nodes. + +Stop allowing multiple `__proto__` properties on an object literal in strict mode. + +Don't allow rest parameters to be non-identifier patterns. + +Check for duplicate paramter names in arrow functions. diff --git a/tools/tests/apps/modules/imports/links/acorn/README.md b/tools/tests/apps/modules/imports/links/acorn/README.md new file mode 100644 index 0000000000..585f2736fc --- /dev/null +++ b/tools/tests/apps/modules/imports/links/acorn/README.md @@ -0,0 +1,270 @@ +# Acorn + +A tiny, fast JavaScript parser written in JavaScript. + +## Community + +Acorn is open source software released under an +[MIT license](https://github.com/acornjs/acorn/blob/master/acorn/LICENSE). + +You are welcome to +[report bugs](https://github.com/acornjs/acorn/issues) or create pull +requests on [github](https://github.com/acornjs/acorn). For questions +and discussion, please use the +[Tern discussion forum](https://discuss.ternjs.net). + +## Installation + +The easiest way to install acorn is from [`npm`](https://www.npmjs.com/): + +```sh +npm install acorn +``` + +Alternately, you can download the source and build acorn yourself: + +```sh +git clone https://github.com/acornjs/acorn.git +cd acorn +npm install +``` + +## Interface + +**parse**`(input, options)` is the main interface to the library. The +`input` parameter is a string, `options` can be undefined or an object +setting some of the options listed below. The return value will be an +abstract syntax tree object as specified by the [ESTree +spec](https://github.com/estree/estree). + +```javascript +let acorn = require("acorn"); +console.log(acorn.parse("1 + 1")); +``` + +When encountering a syntax error, the parser will raise a +`SyntaxError` object with a meaningful message. The error object will +have a `pos` property that indicates the string offset at which the +error occurred, and a `loc` object that contains a `{line, column}` +object referring to that same position. + +Options can be provided by passing a second argument, which should be +an object containing any of these fields: + +- **ecmaVersion**: Indicates the ECMAScript version to parse. Must be + either 3, 5, 6 (2015), 7 (2016), 8 (2017), 9 (2018), 10 (2019) or 11 + (2020, partial support). This influences support for strict mode, + the set of reserved words, and support for new syntax features. + Default is 10. + + **NOTE**: Only 'stage 4' (finalized) ECMAScript features are being + implemented by Acorn. Other proposed new features can be implemented + through plugins. + +- **sourceType**: Indicate the mode the code should be parsed in. Can be + either `"script"` or `"module"`. This influences global strict mode + and parsing of `import` and `export` declarations. + + **NOTE**: If set to `"module"`, then static `import` / `export` syntax + will be valid, even if `ecmaVersion` is less than 6. + +- **onInsertedSemicolon**: If given a callback, that callback will be + called whenever a missing semicolon is inserted by the parser. The + callback will be given the character offset of the point where the + semicolon is inserted as argument, and if `locations` is on, also a + `{line, column}` object representing this position. + +- **onTrailingComma**: Like `onInsertedSemicolon`, but for trailing + commas. + +- **allowReserved**: If `false`, using a reserved word will generate + an error. Defaults to `true` for `ecmaVersion` 3, `false` for higher + versions. When given the value `"never"`, reserved words and + keywords can also not be used as property names (as in Internet + Explorer's old parser). + +- **allowReturnOutsideFunction**: By default, a return statement at + the top level raises an error. Set this to `true` to accept such + code. + +- **allowImportExportEverywhere**: By default, `import` and `export` + declarations can only appear at a program's top level. Setting this + option to `true` allows them anywhere where a statement is allowed. + +- **allowAwaitOutsideFunction**: By default, `await` expressions can + only appear inside `async` functions. Setting this option to + `true` allows to have top-level `await` expressions. They are + still not allowed in non-`async` functions, though. + +- **allowHashBang**: When this is enabled (off by default), if the + code starts with the characters `#!` (as in a shellscript), the + first line will be treated as a comment. + +- **locations**: When `true`, each node has a `loc` object attached + with `start` and `end` subobjects, each of which contains the + one-based line and zero-based column numbers in `{line, column}` + form. Default is `false`. + +- **onToken**: If a function is passed for this option, each found + token will be passed in same format as tokens returned from + `tokenizer().getToken()`. + + If array is passed, each found token is pushed to it. + + Note that you are not allowed to call the parser from the + callback—that will corrupt its internal state. + +- **onComment**: If a function is passed for this option, whenever a + comment is encountered the function will be called with the + following parameters: + + - `block`: `true` if the comment is a block comment, false if it + is a line comment. + - `text`: The content of the comment. + - `start`: Character offset of the start of the comment. + - `end`: Character offset of the end of the comment. + + When the `locations` options is on, the `{line, column}` locations + of the comment’s start and end are passed as two additional + parameters. + + If array is passed for this option, each found comment is pushed + to it as object in Esprima format: + + ```javascript + { + "type": "Line" | "Block", + "value": "comment text", + "start": Number, + "end": Number, + // If `locations` option is on: + "loc": { + "start": {line: Number, column: Number} + "end": {line: Number, column: Number} + }, + // If `ranges` option is on: + "range": [Number, Number] + } + ``` + + Note that you are not allowed to call the parser from the + callback—that will corrupt its internal state. + +- **ranges**: Nodes have their start and end characters offsets + recorded in `start` and `end` properties (directly on the node, + rather than the `loc` object, which holds line/column data. To also + add a + [semi-standardized](https://bugzilla.mozilla.org/show_bug.cgi?id=745678) + `range` property holding a `[start, end]` array with the same + numbers, set the `ranges` option to `true`. + +- **program**: It is possible to parse multiple files into a single + AST by passing the tree produced by parsing the first file as the + `program` option in subsequent parses. This will add the toplevel + forms of the parsed file to the "Program" (top) node of an existing + parse tree. + +- **sourceFile**: When the `locations` option is `true`, you can pass + this option to add a `source` attribute in every node’s `loc` + object. Note that the contents of this option are not examined or + processed in any way; you are free to use whatever format you + choose. + +- **directSourceFile**: Like `sourceFile`, but a `sourceFile` property + will be added (regardless of the `location` option) directly to the + nodes, rather than the `loc` object. + +- **preserveParens**: If this option is `true`, parenthesized expressions + are represented by (non-standard) `ParenthesizedExpression` nodes + that have a single `expression` property containing the expression + inside parentheses. + +**parseExpressionAt**`(input, offset, options)` will parse a single +expression in a string, and return its AST. It will not complain if +there is more of the string left after the expression. + +**tokenizer**`(input, options)` returns an object with a `getToken` +method that can be called repeatedly to get the next token, a `{start, +end, type, value}` object (with added `loc` property when the +`locations` option is enabled and `range` property when the `ranges` +option is enabled). When the token's type is `tokTypes.eof`, you +should stop calling the method, since it will keep returning that same +token forever. + +In ES6 environment, returned result can be used as any other +protocol-compliant iterable: + +```javascript +for (let token of acorn.tokenizer(str)) { + // iterate over the tokens +} + +// transform code to array of tokens: +var tokens = [...acorn.tokenizer(str)]; +``` + +**tokTypes** holds an object mapping names to the token type objects +that end up in the `type` properties of tokens. + +**getLineInfo**`(input, offset)` can be used to get a `{line, +column}` object for a given program string and offset. + +### The `Parser` class + +Instances of the **`Parser`** class contain all the state and logic +that drives a parse. It has static methods `parse`, +`parseExpressionAt`, and `tokenizer` that match the top-level +functions by the same name. + +When extending the parser with plugins, you need to call these methods +on the extended version of the class. To extend a parser with plugins, +you can use its static `extend` method. + +```javascript +var acorn = require("acorn"); +var jsx = require("acorn-jsx"); +var JSXParser = acorn.Parser.extend(jsx()); +JSXParser.parse("foo()"); +``` + +The `extend` method takes any number of plugin values, and returns a +new `Parser` class that includes the extra parser logic provided by +the plugins. + +## Command line interface + +The `bin/acorn` utility can be used to parse a file from the command +line. It accepts as arguments its input file and the following +options: + +- `--ecma3|--ecma5|--ecma6|--ecma7|--ecma8|--ecma9|--ecma10`: Sets the ECMAScript version + to parse. Default is version 9. + +- `--module`: Sets the parsing mode to `"module"`. Is set to `"script"` otherwise. + +- `--locations`: Attaches a "loc" object to each node with "start" and + "end" subobjects, each of which contains the one-based line and + zero-based column numbers in `{line, column}` form. + +- `--allow-hash-bang`: If the code starts with the characters #! (as + in a shellscript), the first line will be treated as a comment. + +- `--compact`: No whitespace is used in the AST output. + +- `--silent`: Do not output the AST, just return the exit status. + +- `--help`: Print the usage information and quit. + +The utility spits out the syntax tree as JSON data. + +## Existing plugins + + - [`acorn-jsx`](https://github.com/RReverser/acorn-jsx): Parse [Facebook JSX syntax extensions](https://github.com/facebook/jsx) + +Plugins for ECMAScript proposals: + + - [`acorn-stage3`](https://github.com/acornjs/acorn-stage3): Parse most stage 3 proposals, bundling: + - [`acorn-class-fields`](https://github.com/acornjs/acorn-class-fields): Parse [class fields proposal](https://github.com/tc39/proposal-class-fields) + - [`acorn-import-meta`](https://github.com/acornjs/acorn-import-meta): Parse [import.meta proposal](https://github.com/tc39/proposal-import-meta) + - [`acorn-numeric-separator`](https://github.com/acornjs/acorn-numeric-separator): Parse [numeric separator proposal](https://github.com/tc39/proposal-numeric-separator) + - [`acorn-private-methods`](https://github.com/acornjs/acorn-private-methods): parse [private methods, getters and setters proposal](https://github.com/tc39/proposal-private-methods)n diff --git a/tools/tests/apps/modules/imports/links/acorn/package.json b/tools/tests/apps/modules/imports/links/acorn/package.json index 1b47c365cc..ad2b4564c2 100644 --- a/tools/tests/apps/modules/imports/links/acorn/package.json +++ b/tools/tests/apps/modules/imports/links/acorn/package.json @@ -2,50 +2,28 @@ "name": "acorn", "description": "ECMAScript parser", "homepage": "https://github.com/acornjs/acorn", - "main": "src/index.js", - "version": "5.5.3", - "engines": { - "node": ">=0.4.0" - }, + "module": "src/index.js", + "version": "7.1.1", + "engines": {"node": ">=0.4.0"}, "maintainers": [ { "name": "Marijn Haverbeke", "email": "marijnh@gmail.com", - "web": "http://marijnhaverbeke.nl" + "web": "https://marijnhaverbeke.nl" }, { "name": "Ingvar Stepanyan", "email": "me@rreverser.com", - "web": "http://rreverser.com/" + "web": "https://rreverser.com/" + }, + { + "name": "Adrian Heine", + "web": "http://adrianheine.de" } ], "repository": { "type": "git", "url": "https://github.com/acornjs/acorn.git" }, - "license": "MIT", - "scripts": { - "prepare": "npm test", - "test": "node test/run.js && node test/lint.js", - "pretest": "npm run build:main && npm run build:loose", - "test:test262": "node bin/run_test262.js", - "build": "npm run build:main && npm run build:walk && npm run build:loose && npm run build:bin", - "build:main": "rollup -c rollup/config.main.js", - "build:walk": "rollup -c rollup/config.walk.js", - "build:loose": "rollup -c rollup/config.loose.js && rollup -c rollup/config.loose_es.js", - "lint": "eslint src/" - }, - "devDependencies": { - "eslint": "^4.10.0", - "eslint-config-standard": "^10.2.1", - "eslint-plugin-import": "^2.2.0", - "eslint-plugin-node": "^5.2.1", - "eslint-plugin-promise": "^3.5.0", - "eslint-plugin-standard": "^3.0.1", - "rollup": "^0.45.0", - "rollup-plugin-buble": "^0.16.0", - "test262": "git+https://github.com/tc39/test262.git#18c1e799a01cc976695983b61e225ce7959bdd91", - "test262-parser-runner": "^0.3.1", - "unicode-10.0.0": "^0.7.5" - } + "license": "MIT" } diff --git a/tools/tests/apps/modules/imports/links/acorn/src/.eslintrc b/tools/tests/apps/modules/imports/links/acorn/src/.eslintrc index e636ee75db..181c1b3692 100644 --- a/tools/tests/apps/modules/imports/links/acorn/src/.eslintrc +++ b/tools/tests/apps/modules/imports/links/acorn/src/.eslintrc @@ -7,8 +7,8 @@ ], "rules": { "curly": "off", - "eqeqeq": "off", - "indent": ["error", 2, { "SwitchCase": 0, "VariableDeclarator": 2, "CallExpression": { arguments: "off" } }], + "eqeqeq": ["error", "always", { "null": "ignore" }], + "indent": ["error", 2, { "SwitchCase": 0, "VariableDeclarator": 2, "CallExpression": { "arguments": "off" } }], "new-parens": "off", "no-case-declarations": "off", "no-cond-assign": "off", @@ -25,7 +25,8 @@ "space-before-function-paren": ["error", "never"] }, "globals": { - "Packages": false + "Packages": false, + "BigInt": false }, "plugins": [ "import" diff --git a/tools/tests/apps/modules/imports/links/acorn/src/bin/acorn.js b/tools/tests/apps/modules/imports/links/acorn/src/bin/acorn.js index d5fe42521a..9a6712c874 100644 --- a/tools/tests/apps/modules/imports/links/acorn/src/bin/acorn.js +++ b/tools/tests/apps/modules/imports/links/acorn/src/bin/acorn.js @@ -6,7 +6,7 @@ let infile, forceFile, silent = false, compact = false, tokenize = false const options = {} function help(status) { - const print = (status == 0) ? console.log : console.error + const print = (status === 0) ? console.log : console.error print("usage: " + basename(process.argv[1]) + " [--ecma3|--ecma5|--ecma6|--ecma7|--ecma8|--ecma9|...|--ecma2015|--ecma2016|--ecma2017|--ecma2018|...]") print(" [--tokenize] [--locations] [---allow-hash-bang] [--compact] [--silent] [--module] [--help] [--] [infile]") process.exit(status) @@ -14,15 +14,15 @@ function help(status) { for (let i = 2; i < process.argv.length; ++i) { const arg = process.argv[i] - if ((arg == "-" || arg[0] != "-") && !infile) infile = arg - else if (arg == "--" && !infile && i + 2 == process.argv.length) forceFile = infile = process.argv[++i] - else if (arg == "--locations") options.locations = true - else if (arg == "--allow-hash-bang") options.allowHashBang = true - else if (arg == "--silent") silent = true - else if (arg == "--compact") compact = true - else if (arg == "--help") help(0) - else if (arg == "--tokenize") tokenize = true - else if (arg == "--module") options.sourceType = "module" + if ((arg === "-" || arg[0] !== "-") && !infile) infile = arg + else if (arg === "--" && !infile && i + 2 === process.argv.length) forceFile = infile = process.argv[++i] + else if (arg === "--locations") options.locations = true + else if (arg === "--allow-hash-bang") options.allowHashBang = true + else if (arg === "--silent") silent = true + else if (arg === "--compact") compact = true + else if (arg === "--help") help(0) + else if (arg === "--tokenize") tokenize = true + else if (arg === "--module") options.sourceType = "module" else { let match = arg.match(/^--ecma(\d+)$/) if (match) @@ -43,16 +43,16 @@ function run(code) { do { token = tokenizer.getToken() result.push(token) - } while (token.type != acorn.tokTypes.eof) + } while (token.type !== acorn.tokTypes.eof) } } catch (e) { - console.error(e.message) + console.error(infile && infile !== "-" ? e.message.replace(/\(\d+:\d+\)$/, m => m.slice(0, 1) + infile + " " + m.slice(1)) : e.message) process.exit(1) } if (!silent) console.log(JSON.stringify(result, null, compact ? null : 2)) } -if (forceFile || infile && infile != "-") { +if (forceFile || infile && infile !== "-") { run(readFile(infile, "utf8")) } else { let code = "" diff --git a/tools/tests/apps/modules/imports/links/acorn/src/expression.js b/tools/tests/apps/modules/imports/links/acorn/src/expression.js index 79cd9b559f..a50ea7531e 100644 --- a/tools/tests/apps/modules/imports/links/acorn/src/expression.js +++ b/tools/tests/apps/modules/imports/links/acorn/src/expression.js @@ -20,6 +20,7 @@ import {types as tt} from "./tokentype" import {Parser} from "./state" import {DestructuringErrors} from "./parseutil" import {lineBreak} from "./whitespace" +import {functionFlags, SCOPE_ARROW, SCOPE_SUPER, SCOPE_DIRECT_SUPER, BIND_OUTSIDE, BIND_VAR} from "./scopeflags" const pp = Parser.prototype @@ -43,9 +44,11 @@ pp.checkPropClash = function(prop, propHash, refDestructuringErrors) { if (this.options.ecmaVersion >= 6) { if (name === "__proto__" && kind === "init") { if (propHash.proto) { - if (refDestructuringErrors && refDestructuringErrors.doubleProto < 0) refDestructuringErrors.doubleProto = key.start - // Backwards-compat kludge. Can be removed in version 6.0 - else this.raiseRecoverable(key.start, "Redefinition of __proto__ property") + if (refDestructuringErrors) { + if (refDestructuringErrors.doubleProto < 0) + refDestructuringErrors.doubleProto = key.start + // Backwards-compat kludge. Can be removed in version 6.0 + } else this.raiseRecoverable(key.start, "Redefinition of __proto__ property") } propHash.proto = true } @@ -103,7 +106,12 @@ pp.parseExpression = function(noIn, refDestructuringErrors) { // operators like `+=`. pp.parseMaybeAssign = function(noIn, refDestructuringErrors, afterLeftParse) { - if (this.inGenerator && this.isContextual("yield")) return this.parseYield() + if (this.isContextual("yield")) { + if (this.inGenerator) return this.parseYield(noIn) + // The tokenizer will assume an expression is allowed after + // `yield`, but this isn't that kind of yield + else this.exprAllowed = false + } let ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1 if (refDestructuringErrors) { @@ -116,7 +124,7 @@ pp.parseMaybeAssign = function(noIn, refDestructuringErrors, afterLeftParse) { } let startPos = this.start, startLoc = this.startLoc - if (this.type == tt.parenL || this.type == tt.name) + if (this.type === tt.parenL || this.type === tt.name) this.potentialArrowAt = this.start let left = this.parseMaybeConditional(noIn, refDestructuringErrors) if (afterLeftParse) left = afterLeftParse.call(this, left, startPos, startLoc) @@ -124,8 +132,11 @@ pp.parseMaybeAssign = function(noIn, refDestructuringErrors, afterLeftParse) { let node = this.startNodeAt(startPos, startLoc) node.operator = this.value node.left = this.type === tt.eq ? this.toAssignable(left, false, refDestructuringErrors) : left - if (!ownDestructuringErrors) DestructuringErrors.call(refDestructuringErrors) - refDestructuringErrors.shorthandAssign = -1 // reset because shorthand default was used correctly + if (!ownDestructuringErrors) { + refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1 + } + if (refDestructuringErrors.shorthandAssign >= node.left.start) + refDestructuringErrors.shorthandAssign = -1 // reset because shorthand default was used correctly this.checkLVal(left) this.next() node.right = this.parseMaybeAssign(noIn) @@ -161,7 +172,7 @@ pp.parseExprOps = function(noIn, refDestructuringErrors) { let startPos = this.start, startLoc = this.startLoc let expr = this.parseMaybeUnary(refDestructuringErrors, false) if (this.checkExpressionErrors(refDestructuringErrors)) return expr - return expr.start == startPos && expr.type === "ArrowFunctionExpression" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, noIn) + return expr.start === startPos && expr.type === "ArrowFunctionExpression" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, noIn) } // Parse binary operators with the operator precedence parsing @@ -198,7 +209,7 @@ pp.buildBinary = function(startPos, startLoc, left, right, op, logical) { pp.parseMaybeUnary = function(refDestructuringErrors, sawUnary) { let startPos = this.start, startLoc = this.startLoc, expr - if (this.inAsync && this.isContextual("await")) { + if (this.isContextual("await") && (this.inAsync || (!this.inFunction && this.options.allowAwaitOutsideFunction))) { expr = this.parseAwait() sawUnary = true } else if (this.type.prefix) { @@ -239,8 +250,8 @@ pp.parseMaybeUnary = function(refDestructuringErrors, sawUnary) { pp.parseExprSubscripts = function(refDestructuringErrors) { let startPos = this.start, startLoc = this.startLoc let expr = this.parseExprAtom(refDestructuringErrors) - let skipArrowSubscripts = expr.type === "ArrowFunctionExpression" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== ")" - if (this.checkExpressionErrors(refDestructuringErrors) || skipArrowSubscripts) return expr + if (expr.type === "ArrowFunctionExpression" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== ")") + return expr let result = this.parseSubscripts(expr, startPos, startLoc) if (refDestructuringErrors && result.type === "MemberExpression") { if (refDestructuringErrors.parenthesizedAssign >= result.start) refDestructuringErrors.parenthesizedAssign = -1 @@ -251,64 +262,82 @@ pp.parseExprSubscripts = function(refDestructuringErrors) { pp.parseSubscripts = function(base, startPos, startLoc, noCalls) { let maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === "Identifier" && base.name === "async" && - this.lastTokEnd == base.end && !this.canInsertSemicolon() && this.input.slice(base.start, base.end) === "async" - for (let computed;;) { - if ((computed = this.eat(tt.bracketL)) || this.eat(tt.dot)) { - let node = this.startNodeAt(startPos, startLoc) - node.object = base - node.property = computed ? this.parseExpression() : this.parseIdent(true) - node.computed = !!computed - if (computed) this.expect(tt.bracketR) - base = this.finishNode(node, "MemberExpression") - } else if (!noCalls && this.eat(tt.parenL)) { - let refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos - this.yieldPos = 0 - this.awaitPos = 0 - let exprList = this.parseExprList(tt.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors) - if (maybeAsyncArrow && !this.canInsertSemicolon() && this.eat(tt.arrow)) { - this.checkPatternErrors(refDestructuringErrors, false) - this.checkYieldAwaitInDefaultParams() - this.yieldPos = oldYieldPos - this.awaitPos = oldAwaitPos - return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true) - } - this.checkExpressionErrors(refDestructuringErrors, true) - this.yieldPos = oldYieldPos || this.yieldPos - this.awaitPos = oldAwaitPos || this.awaitPos - let node = this.startNodeAt(startPos, startLoc) - node.callee = base - node.arguments = exprList - base = this.finishNode(node, "CallExpression") - } else if (this.type === tt.backQuote) { - let node = this.startNodeAt(startPos, startLoc) - node.tag = base - node.quasi = this.parseTemplate({isTagged: true}) - base = this.finishNode(node, "TaggedTemplateExpression") - } else { - return base - } + this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 && + this.potentialArrowAt === base.start + while (true) { + let element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow) + if (element === base || element.type === "ArrowFunctionExpression") return element + base = element } } +pp.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow) { + let computed = this.eat(tt.bracketL) + if (computed || this.eat(tt.dot)) { + let node = this.startNodeAt(startPos, startLoc) + node.object = base + node.property = computed ? this.parseExpression() : this.parseIdent(this.options.allowReserved !== "never") + node.computed = !!computed + if (computed) this.expect(tt.bracketR) + base = this.finishNode(node, "MemberExpression") + } else if (!noCalls && this.eat(tt.parenL)) { + let refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos + this.yieldPos = 0 + this.awaitPos = 0 + this.awaitIdentPos = 0 + let exprList = this.parseExprList(tt.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors) + if (maybeAsyncArrow && !this.canInsertSemicolon() && this.eat(tt.arrow)) { + this.checkPatternErrors(refDestructuringErrors, false) + this.checkYieldAwaitInDefaultParams() + if (this.awaitIdentPos > 0) + this.raise(this.awaitIdentPos, "Cannot use 'await' as identifier inside an async function") + this.yieldPos = oldYieldPos + this.awaitPos = oldAwaitPos + this.awaitIdentPos = oldAwaitIdentPos + return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true) + } + this.checkExpressionErrors(refDestructuringErrors, true) + this.yieldPos = oldYieldPos || this.yieldPos + this.awaitPos = oldAwaitPos || this.awaitPos + this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos + let node = this.startNodeAt(startPos, startLoc) + node.callee = base + node.arguments = exprList + base = this.finishNode(node, "CallExpression") + } else if (this.type === tt.backQuote) { + let node = this.startNodeAt(startPos, startLoc) + node.tag = base + node.quasi = this.parseTemplate({isTagged: true}) + base = this.finishNode(node, "TaggedTemplateExpression") + } + return base +} + // Parse an atomic expression — either a single token that is an // expression, an expression started by a keyword like `function` or // `new`, or an expression wrapped in punctuation like `()`, `[]`, // or `{}`. pp.parseExprAtom = function(refDestructuringErrors) { - let node, canBeArrow = this.potentialArrowAt == this.start + // If a division operator appears in an expression position, the + // tokenizer got confused, and we force it to read a regexp instead. + if (this.type === tt.slash) this.readRegexp() + + let node, canBeArrow = this.potentialArrowAt === this.start switch (this.type) { case tt._super: - if (!this.inFunction) - this.raise(this.start, "'super' outside of function or class") + if (!this.allowSuper) + this.raise(this.start, "'super' keyword outside a method") node = this.startNode() this.next() + if (this.type === tt.parenL && !this.allowDirectSuper) + this.raise(node.start, "super() call outside constructor of a subclass") // The `super` keyword can appear at below: // SuperProperty: // super [ Expression ] // super . IdentifierName // SuperCall: - // super Arguments + // super ( Arguments ) if (this.type !== tt.dot && this.type !== tt.bracketL && this.type !== tt.parenL) this.unexpected() return this.finishNode(node, "Super") @@ -320,14 +349,14 @@ pp.parseExprAtom = function(refDestructuringErrors) { case tt.name: let startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc - let id = this.parseIdent(this.type !== tt.name) + let id = this.parseIdent(false) if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === "async" && !this.canInsertSemicolon() && this.eat(tt._function)) - return this.parseFunction(this.startNodeAt(startPos, startLoc), false, false, true) + return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true) if (canBeArrow && !this.canInsertSemicolon()) { if (this.eat(tt.arrow)) return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false) if (this.options.ecmaVersion >= 8 && id.name === "async" && this.type === tt.name && !containsEsc) { - id = this.parseIdent() + id = this.parseIdent(false) if (this.canInsertSemicolon() || !this.eat(tt.arrow)) this.unexpected() return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true) @@ -373,7 +402,7 @@ pp.parseExprAtom = function(refDestructuringErrors) { case tt._function: node = this.startNode() this.next() - return this.parseFunction(node, false) + return this.parseFunction(node, 0) case tt._class: return this.parseClass(this.startNode(), false) @@ -384,15 +413,53 @@ pp.parseExprAtom = function(refDestructuringErrors) { case tt.backQuote: return this.parseTemplate() + case tt._import: + if (this.options.ecmaVersion >= 11) { + return this.parseExprImport() + } else { + return this.unexpected() + } + default: this.unexpected() } } +pp.parseExprImport = function() { + const node = this.startNode() + this.next() // skip `import` + switch (this.type) { + case tt.parenL: + return this.parseDynamicImport(node) + default: + this.unexpected() + } +} + +pp.parseDynamicImport = function(node) { + this.next() // skip `(` + + // Parse node.source. + node.source = this.parseMaybeAssign() + + // Verify ending. + if (!this.eat(tt.parenR)) { + const errorPos = this.start + if (this.eat(tt.comma) && this.eat(tt.parenR)) { + this.raiseRecoverable(errorPos, "Trailing comma is not allowed in import()") + } else { + this.unexpected(errorPos) + } + } + + return this.finishNode(node, "ImportExpression") +} + pp.parseLiteral = function(value) { let node = this.startNode() node.value = value node.raw = this.input.slice(this.start, this.end) + if (node.raw.charCodeAt(node.raw.length - 1) === 110) node.bigint = node.raw.slice(0, -1) this.next() return this.finishNode(node, "Literal") } @@ -414,6 +481,7 @@ pp.parseParenAndDistinguishExpression = function(canBeArrow) { let refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart this.yieldPos = 0 this.awaitPos = 0 + // Do not save awaitIdentPos to allow checking awaits nested in parameters while (this.type !== tt.parenR) { first ? first = false : this.expect(tt.comma) if (allowTrailingComma && this.afterTrailingComma(tt.parenR, true)) { @@ -482,6 +550,7 @@ pp.parseParenArrowList = function(startPos, startLoc, exprList) { const empty = [] pp.parseNew = function() { + if (this.containsEsc) this.raiseRecoverable(this.start, "Escape sequence in keyword new") let node = this.startNode() let meta = this.parseIdent(true) if (this.options.ecmaVersion >= 6 && this.eat(tt.dot)) { @@ -490,12 +559,15 @@ pp.parseNew = function() { node.property = this.parseIdent(true) if (node.property.name !== "target" || containsEsc) this.raiseRecoverable(node.property.start, "The only valid meta property for new is new.target") - if (!this.inFunction) + if (!this.inNonArrowFunction()) this.raiseRecoverable(node.start, "new.target can only be used in functions") return this.finishNode(node, "MetaProperty") } - let startPos = this.start, startLoc = this.startLoc + let startPos = this.start, startLoc = this.startLoc, isImport = this.type === tt._import node.callee = this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true) + if (isImport && node.callee.type === "ImportExpression") { + this.raise(startPos, "Cannot use new with import()") + } if (this.eat(tt.parenL)) node.arguments = this.parseExprList(tt.parenR, this.options.ecmaVersion >= 8, false) else node.arguments = empty return this.finishNode(node, "NewExpression") @@ -531,6 +603,7 @@ pp.parseTemplate = function({isTagged = false} = {}) { let curElt = this.parseTemplateElement({isTagged}) node.quasis = [curElt] while (!curElt.tail) { + if (this.type === tt.eof) this.raise(this.pos, "Unterminated template literal") this.expect(tt.dollarBraceL) node.expressions.push(this.parseExpression()) this.expect(tt.braceR) @@ -555,7 +628,7 @@ pp.parseObj = function(isPattern, refDestructuringErrors) { while (!this.eat(tt.braceR)) { if (!first) { this.expect(tt.comma) - if (this.afterTrailingComma(tt.braceR)) break + if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(tt.braceR)) break } else first = false const prop = this.parseProperty(isPattern, refDestructuringErrors) @@ -631,7 +704,7 @@ pp.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos } else if (!isPattern && !containsEsc && this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === "Identifier" && (prop.key.name === "get" || prop.key.name === "set") && - (this.type != tt.comma && this.type != tt.braceR)) { + (this.type !== tt.comma && this.type !== tt.braceR)) { if (isGenerator || isAsync) this.unexpected() prop.kind = prop.key.name this.parsePropertyName(prop) @@ -648,7 +721,10 @@ pp.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos this.raiseRecoverable(prop.value.params[0].start, "Setter cannot use rest params") } } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === "Identifier") { + if (isGenerator || isAsync) this.unexpected() this.checkUnreserved(prop.key) + if (prop.key.name === "await" && !this.awaitIdentPos) + this.awaitIdentPos = startPos prop.kind = "init" if (isPattern) { prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key) @@ -674,26 +750,21 @@ pp.parsePropertyName = function(prop) { prop.computed = false } } - return prop.key = this.type === tt.num || this.type === tt.string ? this.parseExprAtom() : this.parseIdent(true) + return prop.key = this.type === tt.num || this.type === tt.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== "never") } // Initialize empty function node. pp.initFunction = function(node) { node.id = null - if (this.options.ecmaVersion >= 6) { - node.generator = false - node.expression = false - } - if (this.options.ecmaVersion >= 8) - node.async = false + if (this.options.ecmaVersion >= 6) node.generator = node.expression = false + if (this.options.ecmaVersion >= 8) node.async = false } // Parse object or class method. -pp.parseMethod = function(isGenerator, isAsync) { - let node = this.startNode(), oldInGen = this.inGenerator, oldInAsync = this.inAsync, - oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldInFunc = this.inFunction +pp.parseMethod = function(isGenerator, isAsync, allowDirectSuper) { + let node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos this.initFunction(node) if (this.options.ecmaVersion >= 6) @@ -701,57 +772,47 @@ pp.parseMethod = function(isGenerator, isAsync) { if (this.options.ecmaVersion >= 8) node.async = !!isAsync - this.inGenerator = node.generator - this.inAsync = node.async this.yieldPos = 0 this.awaitPos = 0 - this.inFunction = true - this.enterFunctionScope() + this.awaitIdentPos = 0 + this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0)) this.expect(tt.parenL) node.params = this.parseBindingList(tt.parenR, false, this.options.ecmaVersion >= 8) this.checkYieldAwaitInDefaultParams() - this.parseFunctionBody(node, false) + this.parseFunctionBody(node, false, true) - this.inGenerator = oldInGen - this.inAsync = oldInAsync this.yieldPos = oldYieldPos this.awaitPos = oldAwaitPos - this.inFunction = oldInFunc + this.awaitIdentPos = oldAwaitIdentPos return this.finishNode(node, "FunctionExpression") } // Parse arrow function expression with given parameters. pp.parseArrowExpression = function(node, params, isAsync) { - let oldInGen = this.inGenerator, oldInAsync = this.inAsync, - oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldInFunc = this.inFunction + let oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos - this.enterFunctionScope() + this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW) this.initFunction(node) - if (this.options.ecmaVersion >= 8) - node.async = !!isAsync + if (this.options.ecmaVersion >= 8) node.async = !!isAsync - this.inGenerator = false - this.inAsync = node.async this.yieldPos = 0 this.awaitPos = 0 - this.inFunction = true + this.awaitIdentPos = 0 node.params = this.toAssignableList(params, true) - this.parseFunctionBody(node, true) + this.parseFunctionBody(node, true, false) - this.inGenerator = oldInGen - this.inAsync = oldInAsync this.yieldPos = oldYieldPos this.awaitPos = oldAwaitPos - this.inFunction = oldInFunc + this.awaitIdentPos = oldAwaitIdentPos return this.finishNode(node, "ArrowFunctionExpression") } // Parse function body and check parameters. -pp.parseFunctionBody = function(node, isArrowFunction) { +pp.parseFunctionBody = function(node, isArrowFunction, isMethod) { let isExpression = isArrowFunction && this.type !== tt.braceL let oldStrict = this.strict, useStrict = false @@ -777,19 +838,15 @@ pp.parseFunctionBody = function(node, isArrowFunction) { // Add the params to varDeclaredNames to ensure that an error is thrown // if a let/const declaration in the function clashes with one of the params. - this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && this.isSimpleParamList(node.params)) - node.body = this.parseBlock(false) + this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params)) + // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval' + if (this.strict && node.id) this.checkLVal(node.id, BIND_OUTSIDE) + node.body = this.parseBlock(false, undefined, useStrict && !oldStrict) node.expression = false this.adaptDirectivePrologue(node.body.body) this.labels = oldLabels } - this.exitFunctionScope() - - if (this.strict && node.id) { - // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval' - this.checkLVal(node.id, "none") - } - this.strict = oldStrict + this.exitScope() } pp.isSimpleParamList = function(params) { @@ -804,7 +861,7 @@ pp.isSimpleParamList = function(params) { pp.checkParams = function(node, allowDuplicates) { let nameHash = {} for (let param of node.params) - this.checkLVal(param, "var", allowDuplicates ? null : nameHash) + this.checkLVal(param, BIND_VAR, allowDuplicates ? null : nameHash) } // Parses a comma-separated list of expressions, and returns them as @@ -838,17 +895,17 @@ pp.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructur pp.checkUnreserved = function({start, end, name}) { if (this.inGenerator && name === "yield") - this.raiseRecoverable(start, "Can not use 'yield' as identifier inside a generator") + this.raiseRecoverable(start, "Cannot use 'yield' as identifier inside a generator") if (this.inAsync && name === "await") - this.raiseRecoverable(start, "Can not use 'await' as identifier inside an async function") - if (this.isKeyword(name)) + this.raiseRecoverable(start, "Cannot use 'await' as identifier inside an async function") + if (this.keywords.test(name)) this.raise(start, `Unexpected keyword '${name}'`) if (this.options.ecmaVersion < 6 && - this.input.slice(start, end).indexOf("\\") != -1) return + this.input.slice(start, end).indexOf("\\") !== -1) return const re = this.strict ? this.reservedWordsStrict : this.reservedWords if (re.test(name)) { if (!this.inAsync && name === "await") - this.raiseRecoverable(start, "Can not use keyword 'await' outside an async function") + this.raiseRecoverable(start, "Cannot use keyword 'await' outside an async function") this.raiseRecoverable(start, `The keyword '${name}' is reserved`) } } @@ -859,7 +916,6 @@ pp.checkUnreserved = function({start, end, name}) { pp.parseIdent = function(liberal, isBinding) { let node = this.startNode() - if (liberal && this.options.allowReserved == "never") liberal = false if (this.type === tt.name) { node.name = this.value } else if (this.type.keyword) { @@ -876,25 +932,29 @@ pp.parseIdent = function(liberal, isBinding) { } else { this.unexpected() } - this.next() + this.next(!!liberal) this.finishNode(node, "Identifier") - if (!liberal) this.checkUnreserved(node) + if (!liberal) { + this.checkUnreserved(node) + if (node.name === "await" && !this.awaitIdentPos) + this.awaitIdentPos = node.start + } return node } // Parses yield expression inside generator. -pp.parseYield = function() { +pp.parseYield = function(noIn) { if (!this.yieldPos) this.yieldPos = this.start let node = this.startNode() this.next() - if (this.type == tt.semi || this.canInsertSemicolon() || (this.type != tt.star && !this.type.startsExpr)) { + if (this.type === tt.semi || this.canInsertSemicolon() || (this.type !== tt.star && !this.type.startsExpr)) { node.delegate = false node.argument = null } else { node.delegate = this.eat(tt.star) - node.argument = this.parseMaybeAssign() + node.argument = this.parseMaybeAssign(noIn) } return this.finishNode(node, "YieldExpression") } @@ -904,6 +964,6 @@ pp.parseAwait = function() { let node = this.startNode() this.next() - node.argument = this.parseMaybeUnary(null, true) + node.argument = this.parseMaybeUnary(null, false) return this.finishNode(node, "AwaitExpression") } diff --git a/tools/tests/apps/modules/imports/links/acorn/src/identifier.js b/tools/tests/apps/modules/imports/links/acorn/src/identifier.js index 5b6553b604..0d7c3d1364 100644 --- a/tools/tests/apps/modules/imports/links/acorn/src/identifier.js +++ b/tools/tests/apps/modules/imports/links/acorn/src/identifier.js @@ -14,6 +14,7 @@ const ecma5AndLessKeywords = "break case catch continue debugger default do else export const keywords = { 5: ecma5AndLessKeywords, + "5module": ecma5AndLessKeywords + " export import", 6: ecma5AndLessKeywords + " const class extends export import super" } @@ -26,9 +27,8 @@ export const keywordRelationalOperator = /^in(stanceof)?$/ // are only applied when a character is found to actually have a // code point above 128. // Generated by `bin/generate-identifier-regex.js`. - -let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08bd\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312e\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fea\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab65\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc" -let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d4-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2-\u1cf4\u1cf7-\u1cf9\u1dc0-\u1df9\u1dfb-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua900-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f" +let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08c7\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\u9ffc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7ca\ua7f5-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc" +let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d3-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf\u1ac0\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1df9\u1dfb-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f" const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]") const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]") @@ -42,10 +42,10 @@ nonASCIIidentifierStartChars = nonASCIIidentifierChars = null // generated by bin/generate-identifier-regex.js // eslint-disable-next-line comma-spacing -const astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,26,45,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,785,52,76,44,33,24,27,35,42,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,54,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,86,25,391,63,32,0,257,0,11,39,8,0,22,0,12,39,3,3,55,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,698,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,881,68,12,0,67,12,65,1,31,6124,20,754,9486,286,82,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,4149,196,60,67,1213,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42710,42,4148,12,221,3,5761,15,7472,3104,541] +const astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,107,20,28,22,13,52,76,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,230,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,35,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,190,0,80,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8952,286,50,2,18,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,2357,44,11,6,17,0,370,43,1301,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42717,35,4148,12,221,3,5761,15,7472,3104,541,1507,4938] // eslint-disable-next-line comma-spacing -const astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,1306,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,52,0,13,2,49,13,10,2,4,9,83,11,7,0,161,11,6,9,7,3,57,0,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,87,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,423,9,280,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,19719,9,135,4,60,6,26,9,1016,45,17,3,19723,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,2214,6,110,6,6,9,792487,239] +const astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,154,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,135,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,262,6,10,9,419,13,1495,6,110,6,6,9,4759,9,787719,239] // This has a complexity linear to the value of the code. The // assumption is that looking up astral identifier characters is diff --git a/tools/tests/apps/modules/imports/links/acorn/src/index.js b/tools/tests/apps/modules/imports/links/acorn/src/index.js index aaf664da6b..f466a3b9fc 100644 --- a/tools/tests/apps/modules/imports/links/acorn/src/index.js +++ b/tools/tests/apps/modules/imports/links/acorn/src/index.js @@ -12,11 +12,6 @@ // // [ghbt]: https://github.com/acornjs/acorn/issues // -// This file defines the main parser interface. The library also comes -// with a [error-tolerant parser][dammit] and an -// [abstract syntax tree walker][walk], defined in other files. -// -// [dammit]: acorn_loose.js // [walk]: util/walk.js import {Parser} from "./state" @@ -27,17 +22,58 @@ import "./expression" import "./location" import "./scope" -export {Parser, plugins} from "./state" -export {defaultOptions} from "./options" -export {Position, SourceLocation, getLineInfo} from "./locutil" -export {Node} from "./node" -export {TokenType, types as tokTypes, keywords as keywordTypes} from "./tokentype" -export {TokContext, types as tokContexts} from "./tokencontext" -export {isIdentifierChar, isIdentifierStart} from "./identifier" -export {Token} from "./tokenize" -export {isNewLine, lineBreak, lineBreakG, nonASCIIwhitespace} from "./whitespace" +import {defaultOptions} from "./options" +import {Position, SourceLocation, getLineInfo} from "./locutil" +import {Node} from "./node" +import {TokenType, types as tokTypes, keywords as keywordTypes} from "./tokentype" +import {TokContext, types as tokContexts} from "./tokencontext" +import {isIdentifierChar, isIdentifierStart} from "./identifier" +import {Token} from "./tokenize" +import {isNewLine, lineBreak, lineBreakG, nonASCIIwhitespace} from "./whitespace" -export const version = "5.5.3" +export const version = "7.1.0" +export { + Parser, + defaultOptions, + Position, + SourceLocation, + getLineInfo, + Node, + TokenType, + tokTypes, + keywordTypes, + TokContext, + tokContexts, + isIdentifierChar, + isIdentifierStart, + Token, + isNewLine, + lineBreak, + lineBreakG, + nonASCIIwhitespace +} + +Parser.acorn = { + Parser, + version, + defaultOptions, + Position, + SourceLocation, + getLineInfo, + Node, + TokenType, + tokTypes, + keywordTypes, + TokContext, + tokContexts, + isIdentifierChar, + isIdentifierStart, + Token, + isNewLine, + lineBreak, + lineBreakG, + nonASCIIwhitespace +} // The main exported interface (under `self.acorn` when in the // browser) is a `parse` function that takes a code string and @@ -47,7 +83,7 @@ export const version = "5.5.3" // [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API export function parse(input, options) { - return new Parser(options, input).parse() + return Parser.parse(input, options) } // This function tries to parse a single expression at a given @@ -55,24 +91,12 @@ export function parse(input, options) { // that embed JavaScript expressions. export function parseExpressionAt(input, pos, options) { - let p = new Parser(options, input, pos) - p.nextToken() - return p.parseExpression() + return Parser.parseExpressionAt(input, pos, options) } // Acorn is organized as a tokenizer and a recursive-descent parser. // The `tokenizer` export provides an interface to the tokenizer. export function tokenizer(input, options) { - return new Parser(options, input) -} - -// This is a terrible kludge to support the existing, pre-ES6 -// interface where the loose parser module retroactively adds exports -// to this module. -export let parse_dammit, LooseParser, pluginsLoose // eslint-disable-line camelcase -export function addLooseExports(parse, Parser, plugins) { - parse_dammit = parse // eslint-disable-line camelcase - LooseParser = Parser - pluginsLoose = plugins + return Parser.tokenizer(input, options) } diff --git a/tools/tests/apps/modules/imports/links/acorn/src/loose/expression.js b/tools/tests/apps/modules/imports/links/acorn/src/loose/expression.js deleted file mode 100644 index b6c5ddbcb2..0000000000 --- a/tools/tests/apps/modules/imports/links/acorn/src/loose/expression.js +++ /dev/null @@ -1,582 +0,0 @@ -import {LooseParser} from "./state" -import {isDummy} from "./parseutil" -import {tokTypes as tt} from "../index" - -const lp = LooseParser.prototype - -lp.checkLVal = function(expr) { - if (!expr) return expr - switch (expr.type) { - case "Identifier": - case "MemberExpression": - return expr - - case "ParenthesizedExpression": - expr.expression = this.checkLVal(expr.expression) - return expr - - default: - return this.dummyIdent() - } -} - -lp.parseExpression = function(noIn) { - let start = this.storeCurrentPos() - let expr = this.parseMaybeAssign(noIn) - if (this.tok.type === tt.comma) { - let node = this.startNodeAt(start) - node.expressions = [expr] - while (this.eat(tt.comma)) node.expressions.push(this.parseMaybeAssign(noIn)) - return this.finishNode(node, "SequenceExpression") - } - return expr -} - -lp.parseParenExpression = function() { - this.pushCx() - this.expect(tt.parenL) - let val = this.parseExpression() - this.popCx() - this.expect(tt.parenR) - return val -} - -lp.parseMaybeAssign = function(noIn) { - if (this.toks.isContextual("yield")) { - let node = this.startNode() - this.next() - if (this.semicolon() || this.canInsertSemicolon() || (this.tok.type != tt.star && !this.tok.type.startsExpr)) { - node.delegate = false - node.argument = null - } else { - node.delegate = this.eat(tt.star) - node.argument = this.parseMaybeAssign() - } - return this.finishNode(node, "YieldExpression") - } - - let start = this.storeCurrentPos() - let left = this.parseMaybeConditional(noIn) - if (this.tok.type.isAssign) { - let node = this.startNodeAt(start) - node.operator = this.tok.value - node.left = this.tok.type === tt.eq ? this.toAssignable(left) : this.checkLVal(left) - this.next() - node.right = this.parseMaybeAssign(noIn) - return this.finishNode(node, "AssignmentExpression") - } - return left -} - -lp.parseMaybeConditional = function(noIn) { - let start = this.storeCurrentPos() - let expr = this.parseExprOps(noIn) - if (this.eat(tt.question)) { - let node = this.startNodeAt(start) - node.test = expr - node.consequent = this.parseMaybeAssign() - node.alternate = this.expect(tt.colon) ? this.parseMaybeAssign(noIn) : this.dummyIdent() - return this.finishNode(node, "ConditionalExpression") - } - return expr -} - -lp.parseExprOps = function(noIn) { - let start = this.storeCurrentPos() - let indent = this.curIndent, line = this.curLineStart - return this.parseExprOp(this.parseMaybeUnary(false), start, -1, noIn, indent, line) -} - -lp.parseExprOp = function(left, start, minPrec, noIn, indent, line) { - if (this.curLineStart != line && this.curIndent < indent && this.tokenStartsLine()) return left - let prec = this.tok.type.binop - if (prec != null && (!noIn || this.tok.type !== tt._in)) { - if (prec > minPrec) { - let node = this.startNodeAt(start) - node.left = left - node.operator = this.tok.value - this.next() - if (this.curLineStart != line && this.curIndent < indent && this.tokenStartsLine()) { - node.right = this.dummyIdent() - } else { - let rightStart = this.storeCurrentPos() - node.right = this.parseExprOp(this.parseMaybeUnary(false), rightStart, prec, noIn, indent, line) - } - this.finishNode(node, /&&|\|\|/.test(node.operator) ? "LogicalExpression" : "BinaryExpression") - return this.parseExprOp(node, start, minPrec, noIn, indent, line) - } - } - return left -} - -lp.parseMaybeUnary = function(sawUnary) { - let start = this.storeCurrentPos(), expr - if (this.options.ecmaVersion >= 8 && this.inAsync && this.toks.isContextual("await")) { - expr = this.parseAwait() - sawUnary = true - } else if (this.tok.type.prefix) { - let node = this.startNode(), update = this.tok.type === tt.incDec - if (!update) sawUnary = true - node.operator = this.tok.value - node.prefix = true - this.next() - node.argument = this.parseMaybeUnary(true) - if (update) node.argument = this.checkLVal(node.argument) - expr = this.finishNode(node, update ? "UpdateExpression" : "UnaryExpression") - } else if (this.tok.type === tt.ellipsis) { - let node = this.startNode() - this.next() - node.argument = this.parseMaybeUnary(sawUnary) - expr = this.finishNode(node, "SpreadElement") - } else { - expr = this.parseExprSubscripts() - while (this.tok.type.postfix && !this.canInsertSemicolon()) { - let node = this.startNodeAt(start) - node.operator = this.tok.value - node.prefix = false - node.argument = this.checkLVal(expr) - this.next() - expr = this.finishNode(node, "UpdateExpression") - } - } - - if (!sawUnary && this.eat(tt.starstar)) { - let node = this.startNodeAt(start) - node.operator = "**" - node.left = expr - node.right = this.parseMaybeUnary(false) - return this.finishNode(node, "BinaryExpression") - } - - return expr -} - -lp.parseExprSubscripts = function() { - let start = this.storeCurrentPos() - return this.parseSubscripts(this.parseExprAtom(), start, false, this.curIndent, this.curLineStart) -} - -lp.parseSubscripts = function(base, start, noCalls, startIndent, line) { - for (;;) { - if (this.curLineStart != line && this.curIndent <= startIndent && this.tokenStartsLine()) { - if (this.tok.type == tt.dot && this.curIndent == startIndent) - --startIndent - else - return base - } - - let maybeAsyncArrow = base.type === "Identifier" && base.name === "async" && !this.canInsertSemicolon() - - if (this.eat(tt.dot)) { - let node = this.startNodeAt(start) - node.object = base - if (this.curLineStart != line && this.curIndent <= startIndent && this.tokenStartsLine()) - node.property = this.dummyIdent() - else - node.property = this.parsePropertyAccessor() || this.dummyIdent() - node.computed = false - base = this.finishNode(node, "MemberExpression") - } else if (this.tok.type == tt.bracketL) { - this.pushCx() - this.next() - let node = this.startNodeAt(start) - node.object = base - node.property = this.parseExpression() - node.computed = true - this.popCx() - this.expect(tt.bracketR) - base = this.finishNode(node, "MemberExpression") - } else if (!noCalls && this.tok.type == tt.parenL) { - let exprList = this.parseExprList(tt.parenR) - if (maybeAsyncArrow && this.eat(tt.arrow)) - return this.parseArrowExpression(this.startNodeAt(start), exprList, true) - let node = this.startNodeAt(start) - node.callee = base - node.arguments = exprList - base = this.finishNode(node, "CallExpression") - } else if (this.tok.type == tt.backQuote) { - let node = this.startNodeAt(start) - node.tag = base - node.quasi = this.parseTemplate() - base = this.finishNode(node, "TaggedTemplateExpression") - } else { - return base - } - } -} - -lp.parseExprAtom = function() { - let node - switch (this.tok.type) { - case tt._this: - case tt._super: - let type = this.tok.type === tt._this ? "ThisExpression" : "Super" - node = this.startNode() - this.next() - return this.finishNode(node, type) - - case tt.name: - let start = this.storeCurrentPos() - let id = this.parseIdent() - let isAsync = false - if (id.name === "async" && !this.canInsertSemicolon()) { - if (this.eat(tt._function)) - return this.parseFunction(this.startNodeAt(start), false, true) - if (this.tok.type === tt.name) { - id = this.parseIdent() - isAsync = true - } - } - return this.eat(tt.arrow) ? this.parseArrowExpression(this.startNodeAt(start), [id], isAsync) : id - - case tt.regexp: - node = this.startNode() - let val = this.tok.value - node.regex = {pattern: val.pattern, flags: val.flags} - node.value = val.value - node.raw = this.input.slice(this.tok.start, this.tok.end) - this.next() - return this.finishNode(node, "Literal") - - case tt.num: case tt.string: - node = this.startNode() - node.value = this.tok.value - node.raw = this.input.slice(this.tok.start, this.tok.end) - this.next() - return this.finishNode(node, "Literal") - - case tt._null: case tt._true: case tt._false: - node = this.startNode() - node.value = this.tok.type === tt._null ? null : this.tok.type === tt._true - node.raw = this.tok.type.keyword - this.next() - return this.finishNode(node, "Literal") - - case tt.parenL: - let parenStart = this.storeCurrentPos() - this.next() - let inner = this.parseExpression() - this.expect(tt.parenR) - if (this.eat(tt.arrow)) { - // (a,)=>a // SequenceExpression makes dummy in the last hole. Drop the dummy. - let params = inner.expressions || [inner] - if (params.length && isDummy(params[params.length - 1])) - params.pop() - return this.parseArrowExpression(this.startNodeAt(parenStart), params) - } - if (this.options.preserveParens) { - let par = this.startNodeAt(parenStart) - par.expression = inner - inner = this.finishNode(par, "ParenthesizedExpression") - } - return inner - - case tt.bracketL: - node = this.startNode() - node.elements = this.parseExprList(tt.bracketR, true) - return this.finishNode(node, "ArrayExpression") - - case tt.braceL: - return this.parseObj() - - case tt._class: - return this.parseClass(false) - - case tt._function: - node = this.startNode() - this.next() - return this.parseFunction(node, false) - - case tt._new: - return this.parseNew() - - case tt.backQuote: - return this.parseTemplate() - - default: - return this.dummyIdent() - } -} - -lp.parseNew = function() { - let node = this.startNode(), startIndent = this.curIndent, line = this.curLineStart - let meta = this.parseIdent(true) - if (this.options.ecmaVersion >= 6 && this.eat(tt.dot)) { - node.meta = meta - node.property = this.parseIdent(true) - return this.finishNode(node, "MetaProperty") - } - let start = this.storeCurrentPos() - node.callee = this.parseSubscripts(this.parseExprAtom(), start, true, startIndent, line) - if (this.tok.type == tt.parenL) { - node.arguments = this.parseExprList(tt.parenR) - } else { - node.arguments = [] - } - return this.finishNode(node, "NewExpression") -} - -lp.parseTemplateElement = function() { - let elem = this.startNode() - - // The loose parser accepts invalid unicode escapes even in untagged templates. - if (this.tok.type === tt.invalidTemplate) { - elem.value = { - raw: this.tok.value, - cooked: null - } - } else { - elem.value = { - raw: this.input.slice(this.tok.start, this.tok.end).replace(/\r\n?/g, "\n"), - cooked: this.tok.value - } - } - this.next() - elem.tail = this.tok.type === tt.backQuote - return this.finishNode(elem, "TemplateElement") -} - -lp.parseTemplate = function() { - let node = this.startNode() - this.next() - node.expressions = [] - let curElt = this.parseTemplateElement() - node.quasis = [curElt] - while (!curElt.tail) { - this.next() - node.expressions.push(this.parseExpression()) - if (this.expect(tt.braceR)) { - curElt = this.parseTemplateElement() - } else { - curElt = this.startNode() - curElt.value = {cooked: "", raw: ""} - curElt.tail = true - this.finishNode(curElt, "TemplateElement") - } - node.quasis.push(curElt) - } - this.expect(tt.backQuote) - return this.finishNode(node, "TemplateLiteral") -} - -lp.parseObj = function() { - let node = this.startNode() - node.properties = [] - this.pushCx() - let indent = this.curIndent + 1, line = this.curLineStart - this.eat(tt.braceL) - if (this.curIndent + 1 < indent) { indent = this.curIndent; line = this.curLineStart } - while (!this.closes(tt.braceR, indent, line)) { - let prop = this.startNode(), isGenerator, isAsync, start - if (this.options.ecmaVersion >= 9 && this.eat(tt.ellipsis)) { - prop.argument = this.parseMaybeAssign() - node.properties.push(this.finishNode(prop, "SpreadElement")) - this.eat(tt.comma) - continue - } - if (this.options.ecmaVersion >= 6) { - start = this.storeCurrentPos() - prop.method = false - prop.shorthand = false - isGenerator = this.eat(tt.star) - } - this.parsePropertyName(prop) - if (this.toks.isAsyncProp(prop)) { - isAsync = true - isGenerator = this.options.ecmaVersion >= 9 && this.eat(tt.star) - this.parsePropertyName(prop) - } else { - isAsync = false - } - if (isDummy(prop.key)) { if (isDummy(this.parseMaybeAssign())) this.next(); this.eat(tt.comma); continue } - if (this.eat(tt.colon)) { - prop.kind = "init" - prop.value = this.parseMaybeAssign() - } else if (this.options.ecmaVersion >= 6 && (this.tok.type === tt.parenL || this.tok.type === tt.braceL)) { - prop.kind = "init" - prop.method = true - prop.value = this.parseMethod(isGenerator, isAsync) - } else if (this.options.ecmaVersion >= 5 && prop.key.type === "Identifier" && - !prop.computed && (prop.key.name === "get" || prop.key.name === "set") && - (this.tok.type != tt.comma && this.tok.type != tt.braceR && this.tok.type != tt.eq)) { - prop.kind = prop.key.name - this.parsePropertyName(prop) - prop.value = this.parseMethod(false) - } else { - prop.kind = "init" - if (this.options.ecmaVersion >= 6) { - if (this.eat(tt.eq)) { - let assign = this.startNodeAt(start) - assign.operator = "=" - assign.left = prop.key - assign.right = this.parseMaybeAssign() - prop.value = this.finishNode(assign, "AssignmentExpression") - } else { - prop.value = prop.key - } - } else { - prop.value = this.dummyIdent() - } - prop.shorthand = true - } - node.properties.push(this.finishNode(prop, "Property")) - this.eat(tt.comma) - } - this.popCx() - if (!this.eat(tt.braceR)) { - // If there is no closing brace, make the node span to the start - // of the next token (this is useful for Tern) - this.last.end = this.tok.start - if (this.options.locations) this.last.loc.end = this.tok.loc.start - } - return this.finishNode(node, "ObjectExpression") -} - -lp.parsePropertyName = function(prop) { - if (this.options.ecmaVersion >= 6) { - if (this.eat(tt.bracketL)) { - prop.computed = true - prop.key = this.parseExpression() - this.expect(tt.bracketR) - return - } else { - prop.computed = false - } - } - let key = (this.tok.type === tt.num || this.tok.type === tt.string) ? this.parseExprAtom() : this.parseIdent() - prop.key = key || this.dummyIdent() -} - -lp.parsePropertyAccessor = function() { - if (this.tok.type === tt.name || this.tok.type.keyword) return this.parseIdent() -} - -lp.parseIdent = function() { - let name = this.tok.type === tt.name ? this.tok.value : this.tok.type.keyword - if (!name) return this.dummyIdent() - let node = this.startNode() - this.next() - node.name = name - return this.finishNode(node, "Identifier") -} - -lp.initFunction = function(node) { - node.id = null - node.params = [] - if (this.options.ecmaVersion >= 6) { - node.generator = false - node.expression = false - } - if (this.options.ecmaVersion >= 8) - node.async = false -} - -// Convert existing expression atom to assignable pattern -// if possible. - -lp.toAssignable = function(node, binding) { - if (!node || node.type == "Identifier" || (node.type == "MemberExpression" && !binding)) { - // Okay - } else if (node.type == "ParenthesizedExpression") { - this.toAssignable(node.expression, binding) - } else if (this.options.ecmaVersion < 6) { - return this.dummyIdent() - } else if (node.type == "ObjectExpression") { - node.type = "ObjectPattern" - for (let prop of node.properties) - this.toAssignable(prop, binding) - } else if (node.type == "ArrayExpression") { - node.type = "ArrayPattern" - this.toAssignableList(node.elements, binding) - } else if (node.type == "Property") { - this.toAssignable(node.value, binding) - } else if (node.type == "SpreadElement") { - node.type = "RestElement" - this.toAssignable(node.argument, binding) - } else if (node.type == "AssignmentExpression") { - node.type = "AssignmentPattern" - delete node.operator - } else { - return this.dummyIdent() - } - return node -} - -lp.toAssignableList = function(exprList, binding) { - for (let expr of exprList) - this.toAssignable(expr, binding) - return exprList -} - -lp.parseFunctionParams = function(params) { - params = this.parseExprList(tt.parenR) - return this.toAssignableList(params, true) -} - -lp.parseMethod = function(isGenerator, isAsync) { - let node = this.startNode(), oldInAsync = this.inAsync - this.initFunction(node) - if (this.options.ecmaVersion >= 6) - node.generator = !!isGenerator - if (this.options.ecmaVersion >= 8) - node.async = !!isAsync - this.inAsync = node.async - node.params = this.parseFunctionParams() - node.body = this.parseBlock() - this.toks.adaptDirectivePrologue(node.body.body) - this.inAsync = oldInAsync - return this.finishNode(node, "FunctionExpression") -} - -lp.parseArrowExpression = function(node, params, isAsync) { - let oldInAsync = this.inAsync - this.initFunction(node) - if (this.options.ecmaVersion >= 8) - node.async = !!isAsync - this.inAsync = node.async - node.params = this.toAssignableList(params, true) - node.expression = this.tok.type !== tt.braceL - if (node.expression) { - node.body = this.parseMaybeAssign() - } else { - node.body = this.parseBlock() - this.toks.adaptDirectivePrologue(node.body.body) - } - this.inAsync = oldInAsync - return this.finishNode(node, "ArrowFunctionExpression") -} - -lp.parseExprList = function(close, allowEmpty) { - this.pushCx() - let indent = this.curIndent, line = this.curLineStart, elts = [] - this.next() // Opening bracket - while (!this.closes(close, indent + 1, line)) { - if (this.eat(tt.comma)) { - elts.push(allowEmpty ? null : this.dummyIdent()) - continue - } - let elt = this.parseMaybeAssign() - if (isDummy(elt)) { - if (this.closes(close, indent, line)) break - this.next() - } else { - elts.push(elt) - } - this.eat(tt.comma) - } - this.popCx() - if (!this.eat(close)) { - // If there is no closing brace, make the node span to the start - // of the next token (this is useful for Tern) - this.last.end = this.tok.start - if (this.options.locations) this.last.loc.end = this.tok.loc.start - } - return elts -} - -lp.parseAwait = function() { - let node = this.startNode() - this.next() - node.argument = this.parseMaybeUnary() - return this.finishNode(node, "AwaitExpression") -} diff --git a/tools/tests/apps/modules/imports/links/acorn/src/loose/index.js b/tools/tests/apps/modules/imports/links/acorn/src/loose/index.js deleted file mode 100644 index a698061a8b..0000000000 --- a/tools/tests/apps/modules/imports/links/acorn/src/loose/index.js +++ /dev/null @@ -1,47 +0,0 @@ -// Acorn: Loose parser -// -// This module provides an alternative parser (`parse_dammit`) that -// exposes that same interface as `parse`, but will try to parse -// anything as JavaScript, repairing syntax error the best it can. -// There are circumstances in which it will raise an error and give -// up, but they are very rare. The resulting AST will be a mostly -// valid JavaScript AST (as per the [Mozilla parser API][api], except -// that: -// -// - Return outside functions is allowed -// -// - Label consistency (no conflicts, break only to existing labels) -// is not enforced. -// -// - Bogus Identifier nodes with a name of `"✖"` are inserted whenever -// the parser got too confused to return anything meaningful. -// -// [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API -// -// The expected use for this is to *first* try `acorn.parse`, and only -// if that fails switch to `parse_dammit`. The loose parser might -// parse badly indented code incorrectly, so **don't** use it as -// your default parser. -// -// Quite a lot of acorn.js is duplicated here. The alternative was to -// add a *lot* of extra cruft to that file, making it less readable -// and slower. Copying and editing the code allowed me to make -// invasive changes and simplifications without creating a complicated -// tangle. - -import {addLooseExports, defaultOptions} from "../index" -import {LooseParser, pluginsLoose} from "./state" -import "./tokenize" -import "./statement" -import "./expression" - -export {LooseParser, pluginsLoose} from "./state" - -defaultOptions.tabSize = 4 - -// eslint-disable-next-line camelcase -export function parse_dammit(input, options) { - return new LooseParser(input, options).parse() -} - -addLooseExports(parse_dammit, LooseParser, pluginsLoose) diff --git a/tools/tests/apps/modules/imports/links/acorn/src/loose/parseutil.js b/tools/tests/apps/modules/imports/links/acorn/src/loose/parseutil.js deleted file mode 100644 index b620fdaf0a..0000000000 --- a/tools/tests/apps/modules/imports/links/acorn/src/loose/parseutil.js +++ /dev/null @@ -1 +0,0 @@ -export function isDummy(node) { return node.name == "✖" } diff --git a/tools/tests/apps/modules/imports/links/acorn/src/loose/state.js b/tools/tests/apps/modules/imports/links/acorn/src/loose/state.js deleted file mode 100644 index da068edb51..0000000000 --- a/tools/tests/apps/modules/imports/links/acorn/src/loose/state.js +++ /dev/null @@ -1,170 +0,0 @@ -import {tokenizer, SourceLocation, tokTypes as tt, Node, lineBreak, isNewLine} from "../index" - -function noop() {} - -// Registered plugins -export const pluginsLoose = {} - -export class LooseParser { - constructor(input, options = {}) { - this.toks = tokenizer(input, options) - this.options = this.toks.options - this.input = this.toks.input - this.tok = this.last = {type: tt.eof, start: 0, end: 0} - this.tok.validateRegExpFlags = noop - this.tok.validateRegExpPattern = noop - if (this.options.locations) { - let here = this.toks.curPosition() - this.tok.loc = new SourceLocation(this.toks, here, here) - } - this.ahead = [] // Tokens ahead - this.context = [] // Indentation contexted - this.curIndent = 0 - this.curLineStart = 0 - this.nextLineStart = this.lineEnd(this.curLineStart) + 1 - this.inAsync = false - // Load plugins - this.options.pluginsLoose = options.pluginsLoose || {} - this.loadPlugins(this.options.pluginsLoose) - } - - startNode() { - return new Node(this.toks, this.tok.start, this.options.locations ? this.tok.loc.start : null) - } - - storeCurrentPos() { - return this.options.locations ? [this.tok.start, this.tok.loc.start] : this.tok.start - } - - startNodeAt(pos) { - if (this.options.locations) { - return new Node(this.toks, pos[0], pos[1]) - } else { - return new Node(this.toks, pos) - } - } - - finishNode(node, type) { - node.type = type - node.end = this.last.end - if (this.options.locations) - node.loc.end = this.last.loc.end - if (this.options.ranges) - node.range[1] = this.last.end - return node - } - - dummyNode(type) { - let dummy = this.startNode() - dummy.type = type - dummy.end = dummy.start - if (this.options.locations) - dummy.loc.end = dummy.loc.start - if (this.options.ranges) - dummy.range[1] = dummy.start - this.last = {type: tt.name, start: dummy.start, end: dummy.start, loc: dummy.loc} - return dummy - } - - dummyIdent() { - let dummy = this.dummyNode("Identifier") - dummy.name = "✖" - return dummy - } - - dummyString() { - let dummy = this.dummyNode("Literal") - dummy.value = dummy.raw = "✖" - return dummy - } - - eat(type) { - if (this.tok.type === type) { - this.next() - return true - } else { - return false - } - } - - isContextual(name) { - return this.tok.type === tt.name && this.tok.value === name - } - - eatContextual(name) { - return this.tok.value === name && this.eat(tt.name) - } - - canInsertSemicolon() { - return this.tok.type === tt.eof || this.tok.type === tt.braceR || - lineBreak.test(this.input.slice(this.last.end, this.tok.start)) - } - - semicolon() { - return this.eat(tt.semi) - } - - expect(type) { - if (this.eat(type)) return true - for (let i = 1; i <= 2; i++) { - if (this.lookAhead(i).type == type) { - for (let j = 0; j < i; j++) this.next() - return true - } - } - } - - pushCx() { - this.context.push(this.curIndent) - } - - popCx() { - this.curIndent = this.context.pop() - } - - lineEnd(pos) { - while (pos < this.input.length && !isNewLine(this.input.charCodeAt(pos))) ++pos - return pos - } - - indentationAfter(pos) { - for (let count = 0;; ++pos) { - let ch = this.input.charCodeAt(pos) - if (ch === 32) ++count - else if (ch === 9) count += this.options.tabSize - else return count - } - } - - closes(closeTok, indent, line, blockHeuristic) { - if (this.tok.type === closeTok || this.tok.type === tt.eof) return true - return line != this.curLineStart && this.curIndent < indent && this.tokenStartsLine() && - (!blockHeuristic || this.nextLineStart >= this.input.length || - this.indentationAfter(this.nextLineStart) < indent) - } - - tokenStartsLine() { - for (let p = this.tok.start - 1; p >= this.curLineStart; --p) { - let ch = this.input.charCodeAt(p) - if (ch !== 9 && ch !== 32) return false - } - return true - } - - extend(name, f) { - this[name] = f(this[name]) - } - - loadPlugins(pluginConfigs) { - for (let name in pluginConfigs) { - let plugin = pluginsLoose[name] - if (!plugin) throw new Error("Plugin '" + name + "' not found") - plugin(this, pluginConfigs[name]) - } - } - - parse() { - this.next() - return this.parseTopLevel() - } -} diff --git a/tools/tests/apps/modules/imports/links/acorn/src/loose/statement.js b/tools/tests/apps/modules/imports/links/acorn/src/loose/statement.js deleted file mode 100644 index aa30696c41..0000000000 --- a/tools/tests/apps/modules/imports/links/acorn/src/loose/statement.js +++ /dev/null @@ -1,459 +0,0 @@ -import {LooseParser} from "./state" -import {isDummy} from "./parseutil" -import {getLineInfo, tokTypes as tt} from "../index" - -const lp = LooseParser.prototype - -lp.parseTopLevel = function() { - let node = this.startNodeAt(this.options.locations ? [0, getLineInfo(this.input, 0)] : 0) - node.body = [] - while (this.tok.type !== tt.eof) node.body.push(this.parseStatement()) - this.toks.adaptDirectivePrologue(node.body) - this.last = this.tok - if (this.options.ecmaVersion >= 6) { - node.sourceType = this.options.sourceType - } - return this.finishNode(node, "Program") -} - -lp.parseStatement = function() { - let starttype = this.tok.type, node = this.startNode(), kind - - if (this.toks.isLet()) { - starttype = tt._var - kind = "let" - } - - switch (starttype) { - case tt._break: case tt._continue: - this.next() - let isBreak = starttype === tt._break - if (this.semicolon() || this.canInsertSemicolon()) { - node.label = null - } else { - node.label = this.tok.type === tt.name ? this.parseIdent() : null - this.semicolon() - } - return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement") - - case tt._debugger: - this.next() - this.semicolon() - return this.finishNode(node, "DebuggerStatement") - - case tt._do: - this.next() - node.body = this.parseStatement() - node.test = this.eat(tt._while) ? this.parseParenExpression() : this.dummyIdent() - this.semicolon() - return this.finishNode(node, "DoWhileStatement") - - case tt._for: - this.next() // `for` keyword - let isAwait = this.options.ecmaVersion >= 9 && this.inAsync && this.eatContextual("await") - - this.pushCx() - this.expect(tt.parenL) - if (this.tok.type === tt.semi) return this.parseFor(node, null) - let isLet = this.toks.isLet() - if (isLet || this.tok.type === tt._var || this.tok.type === tt._const) { - let init = this.parseVar(true, isLet ? "let" : this.tok.value) - if (init.declarations.length === 1 && (this.tok.type === tt._in || this.isContextual("of"))) { - if (this.options.ecmaVersion >= 9 && this.tok.type !== tt._in) { - node.await = isAwait - } - return this.parseForIn(node, init) - } - return this.parseFor(node, init) - } - let init = this.parseExpression(true) - if (this.tok.type === tt._in || this.isContextual("of")) { - if (this.options.ecmaVersion >= 9 && this.tok.type !== tt._in) { - node.await = isAwait - } - return this.parseForIn(node, this.toAssignable(init)) - } - return this.parseFor(node, init) - - case tt._function: - this.next() - return this.parseFunction(node, true) - - case tt._if: - this.next() - node.test = this.parseParenExpression() - node.consequent = this.parseStatement() - node.alternate = this.eat(tt._else) ? this.parseStatement() : null - return this.finishNode(node, "IfStatement") - - case tt._return: - this.next() - if (this.eat(tt.semi) || this.canInsertSemicolon()) node.argument = null - else { node.argument = this.parseExpression(); this.semicolon() } - return this.finishNode(node, "ReturnStatement") - - case tt._switch: - let blockIndent = this.curIndent, line = this.curLineStart - this.next() - node.discriminant = this.parseParenExpression() - node.cases = [] - this.pushCx() - this.expect(tt.braceL) - - let cur - while (!this.closes(tt.braceR, blockIndent, line, true)) { - if (this.tok.type === tt._case || this.tok.type === tt._default) { - let isCase = this.tok.type === tt._case - if (cur) this.finishNode(cur, "SwitchCase") - node.cases.push(cur = this.startNode()) - cur.consequent = [] - this.next() - if (isCase) cur.test = this.parseExpression() - else cur.test = null - this.expect(tt.colon) - } else { - if (!cur) { - node.cases.push(cur = this.startNode()) - cur.consequent = [] - cur.test = null - } - cur.consequent.push(this.parseStatement()) - } - } - if (cur) this.finishNode(cur, "SwitchCase") - this.popCx() - this.eat(tt.braceR) - return this.finishNode(node, "SwitchStatement") - - case tt._throw: - this.next() - node.argument = this.parseExpression() - this.semicolon() - return this.finishNode(node, "ThrowStatement") - - case tt._try: - this.next() - node.block = this.parseBlock() - node.handler = null - if (this.tok.type === tt._catch) { - let clause = this.startNode() - this.next() - this.expect(tt.parenL) - clause.param = this.toAssignable(this.parseExprAtom(), true) - this.expect(tt.parenR) - clause.body = this.parseBlock() - node.handler = this.finishNode(clause, "CatchClause") - } - node.finalizer = this.eat(tt._finally) ? this.parseBlock() : null - if (!node.handler && !node.finalizer) return node.block - return this.finishNode(node, "TryStatement") - - case tt._var: - case tt._const: - return this.parseVar(false, kind || this.tok.value) - - case tt._while: - this.next() - node.test = this.parseParenExpression() - node.body = this.parseStatement() - return this.finishNode(node, "WhileStatement") - - case tt._with: - this.next() - node.object = this.parseParenExpression() - node.body = this.parseStatement() - return this.finishNode(node, "WithStatement") - - case tt.braceL: - return this.parseBlock() - - case tt.semi: - this.next() - return this.finishNode(node, "EmptyStatement") - - case tt._class: - return this.parseClass(true) - - case tt._import: - return this.parseImport() - - case tt._export: - return this.parseExport() - - default: - if (this.toks.isAsyncFunction()) { - this.next() - this.next() - return this.parseFunction(node, true, true) - } - let expr = this.parseExpression() - if (isDummy(expr)) { - this.next() - if (this.tok.type === tt.eof) return this.finishNode(node, "EmptyStatement") - return this.parseStatement() - } else if (starttype === tt.name && expr.type === "Identifier" && this.eat(tt.colon)) { - node.body = this.parseStatement() - node.label = expr - return this.finishNode(node, "LabeledStatement") - } else { - node.expression = expr - this.semicolon() - return this.finishNode(node, "ExpressionStatement") - } - } -} - -lp.parseBlock = function() { - let node = this.startNode() - this.pushCx() - this.expect(tt.braceL) - let blockIndent = this.curIndent, line = this.curLineStart - node.body = [] - while (!this.closes(tt.braceR, blockIndent, line, true)) - node.body.push(this.parseStatement()) - this.popCx() - this.eat(tt.braceR) - return this.finishNode(node, "BlockStatement") -} - -lp.parseFor = function(node, init) { - node.init = init - node.test = node.update = null - if (this.eat(tt.semi) && this.tok.type !== tt.semi) node.test = this.parseExpression() - if (this.eat(tt.semi) && this.tok.type !== tt.parenR) node.update = this.parseExpression() - this.popCx() - this.expect(tt.parenR) - node.body = this.parseStatement() - return this.finishNode(node, "ForStatement") -} - -lp.parseForIn = function(node, init) { - let type = this.tok.type === tt._in ? "ForInStatement" : "ForOfStatement" - this.next() - node.left = init - node.right = this.parseExpression() - this.popCx() - this.expect(tt.parenR) - node.body = this.parseStatement() - return this.finishNode(node, type) -} - -lp.parseVar = function(noIn, kind) { - let node = this.startNode() - node.kind = kind - this.next() - node.declarations = [] - do { - let decl = this.startNode() - decl.id = this.options.ecmaVersion >= 6 ? this.toAssignable(this.parseExprAtom(), true) : this.parseIdent() - decl.init = this.eat(tt.eq) ? this.parseMaybeAssign(noIn) : null - node.declarations.push(this.finishNode(decl, "VariableDeclarator")) - } while (this.eat(tt.comma)) - if (!node.declarations.length) { - let decl = this.startNode() - decl.id = this.dummyIdent() - node.declarations.push(this.finishNode(decl, "VariableDeclarator")) - } - if (!noIn) this.semicolon() - return this.finishNode(node, "VariableDeclaration") -} - -lp.parseClass = function(isStatement) { - let node = this.startNode() - this.next() - if (this.tok.type === tt.name) node.id = this.parseIdent() - else if (isStatement === true) node.id = this.dummyIdent() - else node.id = null - node.superClass = this.eat(tt._extends) ? this.parseExpression() : null - node.body = this.startNode() - node.body.body = [] - this.pushCx() - let indent = this.curIndent + 1, line = this.curLineStart - this.eat(tt.braceL) - if (this.curIndent + 1 < indent) { indent = this.curIndent; line = this.curLineStart } - while (!this.closes(tt.braceR, indent, line)) { - if (this.semicolon()) continue - let method = this.startNode(), isGenerator, isAsync - if (this.options.ecmaVersion >= 6) { - method.static = false - isGenerator = this.eat(tt.star) - } - this.parsePropertyName(method) - if (isDummy(method.key)) { if (isDummy(this.parseMaybeAssign())) this.next(); this.eat(tt.comma); continue } - if (method.key.type === "Identifier" && !method.computed && method.key.name === "static" && - (this.tok.type != tt.parenL && this.tok.type != tt.braceL)) { - method.static = true - isGenerator = this.eat(tt.star) - this.parsePropertyName(method) - } else { - method.static = false - } - if (!method.computed && - method.key.type === "Identifier" && method.key.name === "async" && this.tok.type !== tt.parenL && - !this.canInsertSemicolon()) { - isAsync = true - isGenerator = this.options.ecmaVersion >= 9 && this.eat(tt.star) - this.parsePropertyName(method) - } else { - isAsync = false - } - if (this.options.ecmaVersion >= 5 && method.key.type === "Identifier" && - !method.computed && (method.key.name === "get" || method.key.name === "set") && - this.tok.type !== tt.parenL && this.tok.type !== tt.braceL) { - method.kind = method.key.name - this.parsePropertyName(method) - method.value = this.parseMethod(false) - } else { - if (!method.computed && !method.static && !isGenerator && !isAsync && ( - method.key.type === "Identifier" && method.key.name === "constructor" || - method.key.type === "Literal" && method.key.value === "constructor")) { - method.kind = "constructor" - } else { - method.kind = "method" - } - method.value = this.parseMethod(isGenerator, isAsync) - } - node.body.body.push(this.finishNode(method, "MethodDefinition")) - } - this.popCx() - if (!this.eat(tt.braceR)) { - // If there is no closing brace, make the node span to the start - // of the next token (this is useful for Tern) - this.last.end = this.tok.start - if (this.options.locations) this.last.loc.end = this.tok.loc.start - } - this.semicolon() - this.finishNode(node.body, "ClassBody") - return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression") -} - -lp.parseFunction = function(node, isStatement, isAsync) { - let oldInAsync = this.inAsync - this.initFunction(node) - if (this.options.ecmaVersion >= 6) { - node.generator = this.eat(tt.star) - } - if (this.options.ecmaVersion >= 8) { - node.async = !!isAsync - } - if (this.tok.type === tt.name) node.id = this.parseIdent() - else if (isStatement === true) node.id = this.dummyIdent() - this.inAsync = node.async - node.params = this.parseFunctionParams() - node.body = this.parseBlock() - this.toks.adaptDirectivePrologue(node.body.body) - this.inAsync = oldInAsync - return this.finishNode(node, isStatement ? "FunctionDeclaration" : "FunctionExpression") -} - -lp.parseExport = function() { - let node = this.startNode() - this.next() - if (this.eat(tt.star)) { - node.source = this.eatContextual("from") ? this.parseExprAtom() : this.dummyString() - return this.finishNode(node, "ExportAllDeclaration") - } - if (this.eat(tt._default)) { - // export default (function foo() {}) // This is FunctionExpression. - let isAsync - if (this.tok.type === tt._function || (isAsync = this.toks.isAsyncFunction())) { - let fNode = this.startNode() - this.next() - if (isAsync) this.next() - node.declaration = this.parseFunction(fNode, "nullableID", isAsync) - } else if (this.tok.type === tt._class) { - node.declaration = this.parseClass("nullableID") - } else { - node.declaration = this.parseMaybeAssign() - this.semicolon() - } - return this.finishNode(node, "ExportDefaultDeclaration") - } - if (this.tok.type.keyword || this.toks.isLet() || this.toks.isAsyncFunction()) { - node.declaration = this.parseStatement() - node.specifiers = [] - node.source = null - } else { - node.declaration = null - node.specifiers = this.parseExportSpecifierList() - node.source = this.eatContextual("from") ? this.parseExprAtom() : null - this.semicolon() - } - return this.finishNode(node, "ExportNamedDeclaration") -} - -lp.parseImport = function() { - let node = this.startNode() - this.next() - if (this.tok.type === tt.string) { - node.specifiers = [] - node.source = this.parseExprAtom() - } else { - let elt - if (this.tok.type === tt.name && this.tok.value !== "from") { - elt = this.startNode() - elt.local = this.parseIdent() - this.finishNode(elt, "ImportDefaultSpecifier") - this.eat(tt.comma) - } - node.specifiers = this.parseImportSpecifierList() - node.source = this.eatContextual("from") && this.tok.type == tt.string ? this.parseExprAtom() : this.dummyString() - if (elt) node.specifiers.unshift(elt) - } - this.semicolon() - return this.finishNode(node, "ImportDeclaration") -} - -lp.parseImportSpecifierList = function() { - let elts = [] - if (this.tok.type === tt.star) { - let elt = this.startNode() - this.next() - elt.local = this.eatContextual("as") ? this.parseIdent() : this.dummyIdent() - elts.push(this.finishNode(elt, "ImportNamespaceSpecifier")) - } else { - let indent = this.curIndent, line = this.curLineStart, continuedLine = this.nextLineStart - this.pushCx() - this.eat(tt.braceL) - if (this.curLineStart > continuedLine) continuedLine = this.curLineStart - while (!this.closes(tt.braceR, indent + (this.curLineStart <= continuedLine ? 1 : 0), line)) { - let elt = this.startNode() - if (this.eat(tt.star)) { - elt.local = this.eatContextual("as") ? this.parseIdent() : this.dummyIdent() - this.finishNode(elt, "ImportNamespaceSpecifier") - } else { - if (this.isContextual("from")) break - elt.imported = this.parseIdent() - if (isDummy(elt.imported)) break - elt.local = this.eatContextual("as") ? this.parseIdent() : elt.imported - this.finishNode(elt, "ImportSpecifier") - } - elts.push(elt) - this.eat(tt.comma) - } - this.eat(tt.braceR) - this.popCx() - } - return elts -} - -lp.parseExportSpecifierList = function() { - let elts = [] - let indent = this.curIndent, line = this.curLineStart, continuedLine = this.nextLineStart - this.pushCx() - this.eat(tt.braceL) - if (this.curLineStart > continuedLine) continuedLine = this.curLineStart - while (!this.closes(tt.braceR, indent + (this.curLineStart <= continuedLine ? 1 : 0), line)) { - if (this.isContextual("from")) break - let elt = this.startNode() - elt.local = this.parseIdent() - if (isDummy(elt.local)) break - elt.exported = this.eatContextual("as") ? this.parseIdent() : elt.local - this.finishNode(elt, "ExportSpecifier") - elts.push(elt) - this.eat(tt.comma) - } - this.eat(tt.braceR) - this.popCx() - return elts -} diff --git a/tools/tests/apps/modules/imports/links/acorn/src/loose/tokenize.js b/tools/tests/apps/modules/imports/links/acorn/src/loose/tokenize.js deleted file mode 100644 index 619b6ee9e4..0000000000 --- a/tools/tests/apps/modules/imports/links/acorn/src/loose/tokenize.js +++ /dev/null @@ -1,111 +0,0 @@ -import {tokTypes as tt, Token, isNewLine, SourceLocation, getLineInfo, lineBreakG} from "../index" -import {LooseParser} from "./state" - -const lp = LooseParser.prototype - -function isSpace(ch) { - return (ch < 14 && ch > 8) || ch === 32 || ch === 160 || isNewLine(ch) -} - -lp.next = function() { - this.last = this.tok - if (this.ahead.length) - this.tok = this.ahead.shift() - else - this.tok = this.readToken() - - if (this.tok.start >= this.nextLineStart) { - while (this.tok.start >= this.nextLineStart) { - this.curLineStart = this.nextLineStart - this.nextLineStart = this.lineEnd(this.curLineStart) + 1 - } - this.curIndent = this.indentationAfter(this.curLineStart) - } -} - -lp.readToken = function() { - for (;;) { - try { - this.toks.next() - if (this.toks.type === tt.dot && - this.input.substr(this.toks.end, 1) === "." && - this.options.ecmaVersion >= 6) { - this.toks.end++ - this.toks.type = tt.ellipsis - } - return new Token(this.toks) - } catch (e) { - if (!(e instanceof SyntaxError)) throw e - - // Try to skip some text, based on the error message, and then continue - let msg = e.message, pos = e.raisedAt, replace = true - if (/unterminated/i.test(msg)) { - pos = this.lineEnd(e.pos + 1) - if (/string/.test(msg)) { - replace = {start: e.pos, end: pos, type: tt.string, value: this.input.slice(e.pos + 1, pos)} - } else if (/regular expr/i.test(msg)) { - let re = this.input.slice(e.pos, pos) - try { re = new RegExp(re) } catch (e) { /* ignore compilation error due to new syntax */ } - replace = {start: e.pos, end: pos, type: tt.regexp, value: re} - } else if (/template/.test(msg)) { - replace = { - start: e.pos, - end: pos, - type: tt.template, - value: this.input.slice(e.pos, pos) - } - } else { - replace = false - } - } else if (/invalid (unicode|regexp|number)|expecting unicode|octal literal|is reserved|directly after number|expected number in radix/i.test(msg)) { - while (pos < this.input.length && !isSpace(this.input.charCodeAt(pos))) ++pos - } else if (/character escape|expected hexadecimal/i.test(msg)) { - while (pos < this.input.length) { - let ch = this.input.charCodeAt(pos++) - if (ch === 34 || ch === 39 || isNewLine(ch)) break - } - } else if (/unexpected character/i.test(msg)) { - pos++ - replace = false - } else if (/regular expression/i.test(msg)) { - replace = true - } else { - throw e - } - this.resetTo(pos) - if (replace === true) replace = {start: pos, end: pos, type: tt.name, value: "✖"} - if (replace) { - if (this.options.locations) - replace.loc = new SourceLocation( - this.toks, - getLineInfo(this.input, replace.start), - getLineInfo(this.input, replace.end)) - return replace - } - } - } -} - -lp.resetTo = function(pos) { - this.toks.pos = pos - let ch = this.input.charAt(pos - 1) - this.toks.exprAllowed = !ch || /[[{(,;:?/*=+\-~!|&%^<>]/.test(ch) || - /[enwfd]/.test(ch) && - /\b(case|else|return|throw|new|in|(instance|type)?of|delete|void)$/.test(this.input.slice(pos - 10, pos)) - - if (this.options.locations) { - this.toks.curLine = 1 - this.toks.lineStart = lineBreakG.lastIndex = 0 - let match - while ((match = lineBreakG.exec(this.input)) && match.index < pos) { - ++this.toks.curLine - this.toks.lineStart = match.index + match[0].length - } - } -} - -lp.lookAhead = function(n) { - while (n > this.ahead.length) - this.ahead.push(this.readToken()) - return this.ahead[n - 1] -} diff --git a/tools/tests/apps/modules/imports/links/acorn/src/lval.js b/tools/tests/apps/modules/imports/links/acorn/src/lval.js index 0fc1bc5284..8ad4b26390 100644 --- a/tools/tests/apps/modules/imports/links/acorn/src/lval.js +++ b/tools/tests/apps/modules/imports/links/acorn/src/lval.js @@ -1,6 +1,7 @@ import {types as tt} from "./tokentype" import {Parser} from "./state" import {has} from "./util" +import {BIND_NONE, BIND_OUTSIDE, BIND_LEXICAL} from "./scopeflags" const pp = Parser.prototype @@ -12,7 +13,7 @@ pp.toAssignable = function(node, isBinding, refDestructuringErrors) { switch (node.type) { case "Identifier": if (this.inAsync && node.name === "await") - this.raise(node.start, "Can not use 'await' as identifier inside an async function") + this.raise(node.start, "Cannot use 'await' as identifier inside an async function") break case "ObjectPattern": @@ -40,7 +41,7 @@ pp.toAssignable = function(node, isBinding, refDestructuringErrors) { break case "Property": - // AssignmentProperty has type == "Property" + // AssignmentProperty has type === "Property" if (node.kind !== "init") this.raise(node.key.start, "Object pattern can't contain getter or setter") this.toAssignable(node.value, isBinding) break @@ -69,7 +70,7 @@ pp.toAssignable = function(node, isBinding, refDestructuringErrors) { break case "ParenthesizedExpression": - this.toAssignable(node.expression, isBinding) + this.toAssignable(node.expression, isBinding, refDestructuringErrors) break case "MemberExpression": @@ -185,9 +186,11 @@ pp.parseMaybeDefault = function(startPos, startLoc, left) { // 'let' indicating that the lval creates a lexical ('let' or 'const') binding // 'none' indicating that the binding should be checked for illegal identifiers, but not for duplicate references -pp.checkLVal = function(expr, bindingType, checkClashes) { +pp.checkLVal = function(expr, bindingType = BIND_NONE, checkClashes) { switch (expr.type) { case "Identifier": + if (bindingType === BIND_LEXICAL && expr.name === "let") + this.raiseRecoverable(expr.start, "let is disallowed as a lexically bound name") if (this.strict && this.reservedWordsStrictBind.test(expr.name)) this.raiseRecoverable(expr.start, (bindingType ? "Binding " : "Assigning to ") + expr.name + " in strict mode") if (checkClashes) { @@ -195,19 +198,7 @@ pp.checkLVal = function(expr, bindingType, checkClashes) { this.raiseRecoverable(expr.start, "Argument name clash") checkClashes[expr.name] = true } - if (bindingType && bindingType !== "none") { - if ( - bindingType === "var" && !this.canDeclareVarName(expr.name) || - bindingType !== "var" && !this.canDeclareLexicalName(expr.name) - ) { - this.raiseRecoverable(expr.start, `Identifier '${expr.name}' has already been declared`) - } - if (bindingType === "var") { - this.declareVarName(expr.name) - } else { - this.declareLexicalName(expr.name) - } - } + if (bindingType !== BIND_NONE && bindingType !== BIND_OUTSIDE) this.declareName(expr.name, bindingType, expr.start) break case "MemberExpression": @@ -220,7 +211,7 @@ pp.checkLVal = function(expr, bindingType, checkClashes) { break case "Property": - // AssignmentProperty has type == "Property" + // AssignmentProperty has type === "Property" this.checkLVal(expr.value, bindingType, checkClashes) break diff --git a/tools/tests/apps/modules/imports/links/acorn/src/options.js b/tools/tests/apps/modules/imports/links/acorn/src/options.js index 9dda44ae88..807251fdfd 100644 --- a/tools/tests/apps/modules/imports/links/acorn/src/options.js +++ b/tools/tests/apps/modules/imports/links/acorn/src/options.js @@ -5,18 +5,19 @@ import {SourceLocation} from "./locutil" // the parser process. These options are recognized: export const defaultOptions = { - // `ecmaVersion` indicates the ECMAScript version to parse. Must - // be either 3, 5, 6 (2015), 7 (2016), or 8 (2017). This influences support - // for strict mode, the set of reserved words, and support for - // new syntax features. The default is 7. - ecmaVersion: 7, + // `ecmaVersion` indicates the ECMAScript version to parse. Must be + // either 3, 5, 6 (2015), 7 (2016), 8 (2017), 9 (2018), or 10 + // (2019). This influences support for strict mode, the set of + // reserved words, and support for new syntax features. The default + // is 10. + ecmaVersion: 10, // `sourceType` indicates the mode the code should be parsed in. // Can be either `"script"` or `"module"`. This influences global // strict mode and parsing of `import` and `export` declarations. sourceType: "script", // `onInsertedSemicolon` can be a callback that will be called // when a semicolon is automatically inserted. It will be passed - // th position of the comma as an offset, and if `locations` is + // the position of the comma as an offset, and if `locations` is // enabled, it is given the location as a `{line, column}` object // as second argument. onInsertedSemicolon: null, @@ -34,6 +35,9 @@ export const defaultOptions = { // When enabled, import/export statements are not constrained to // appearing at the top of the program. allowImportExportEverywhere: false, + // When enabled, await identifiers are allowed to appear at the top-level scope, + // but they are still not allowed in non-async functions. + allowAwaitOutsideFunction: false, // When enabled, hashbang directive in the beginning of file // is allowed and treated as a line comment. allowHashBang: false, @@ -82,8 +86,7 @@ export const defaultOptions = { directSourceFile: null, // When enabled, parenthesized expressions are represented by // (non-standard) ParenthesizedExpression nodes - preserveParens: false, - plugins: {} + preserveParens: false } // Interpret and default an options object diff --git a/tools/tests/apps/modules/imports/links/acorn/src/parseutil.js b/tools/tests/apps/modules/imports/links/acorn/src/parseutil.js index e1736372e5..98e35237f5 100644 --- a/tools/tests/apps/modules/imports/links/acorn/src/parseutil.js +++ b/tools/tests/apps/modules/imports/links/acorn/src/parseutil.js @@ -6,15 +6,29 @@ const pp = Parser.prototype // ## Parser utilities -const literal = /^(?:'((?:\\.|[^'])*?)'|"((?:\\.|[^"])*?)"|;)/ +const literal = /^(?:'((?:\\.|[^'])*?)'|"((?:\\.|[^"])*?)")/ pp.strictDirective = function(start) { for (;;) { + // Try to find string literal. skipWhiteSpace.lastIndex = start start += skipWhiteSpace.exec(this.input)[0].length let match = literal.exec(this.input.slice(start)) if (!match) return false - if ((match[1] || match[2]) == "use strict") return true + if ((match[1] || match[2]) === "use strict") { + skipWhiteSpace.lastIndex = start + match[0].length + let spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length + let next = this.input.charAt(end) + return next === ";" || next === "}" || + (lineBreak.test(spaceAfter[0]) && + !(/[(`.[+\-/*%<>=,?^&]/.test(next) || next === "!" && this.input.charAt(end + 1) === "=")) + } start += match[0].length + + // Skip semicolon, if any. + skipWhiteSpace.lastIndex = start + start += skipWhiteSpace.exec(this.input)[0].length + if (this.input[start] === ";") + start++ } } @@ -74,7 +88,7 @@ pp.semicolon = function() { } pp.afterTrailingComma = function(tokType, notNext) { - if (this.type == tokType) { + if (this.type === tokType) { if (this.options.onTrailingComma) this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc) if (!notNext) diff --git a/tools/tests/apps/modules/imports/links/acorn/src/regexp.js b/tools/tests/apps/modules/imports/links/acorn/src/regexp.js index c5953e3012..605bce5203 100644 --- a/tools/tests/apps/modules/imports/links/acorn/src/regexp.js +++ b/tools/tests/apps/modules/imports/links/acorn/src/regexp.js @@ -1,6 +1,7 @@ import {isIdentifierStart, isIdentifierChar} from "./identifier.js" import {Parser} from "./state.js" import UNICODE_PROPERTY_VALUES from "./unicode-property-data.js" +import {has} from "./util.js" const pp = Parser.prototype @@ -8,6 +9,7 @@ export class RegExpValidationState { constructor(parser) { this.parser = parser this.validFlags = `gim${parser.options.ecmaVersion >= 6 ? "uy" : ""}${parser.options.ecmaVersion >= 9 ? "s" : ""}` + this.unicodeProperties = UNICODE_PROPERTY_VALUES[parser.options.ecmaVersion >= 11 ? 11 : parser.options.ecmaVersion] this.source = "" this.flags = "" this.start = 0 @@ -48,7 +50,8 @@ export class RegExpValidationState { if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) { return c } - return (c << 10) + s.charCodeAt(i + 1) - 0x35FDC00 + const next = s.charCodeAt(i + 1) + return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c } nextIndex(i) { @@ -57,8 +60,9 @@ export class RegExpValidationState { if (i >= l) { return l } - const c = s.charCodeAt(i) - if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) { + let c = s.charCodeAt(i), next + if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l || + (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) { return i + 1 } return i + 2 @@ -103,7 +107,7 @@ pp.validateRegExpFlags = function(state) { for (let i = 0; i < flags.length; i++) { const flag = flags.charAt(i) - if (validFlags.indexOf(flag) == -1) { + if (validFlags.indexOf(flag) === -1) { this.raise(state.start, "Invalid regular expression flag") } if (flags.indexOf(flag, i + 1) > -1) { @@ -150,7 +154,7 @@ pp.regexp_pattern = function(state) { if (state.eat(0x29 /* ) */)) { state.raise("Unmatched ')'") } - if (state.eat(0x5D /* [ */) || state.eat(0x7D /* } */)) { + if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) { state.raise("Lone quantifier brackets") } } @@ -784,14 +788,14 @@ pp.regexp_eatUnicodePropertyValueExpression = function(state) { return false } pp.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) { - if (!UNICODE_PROPERTY_VALUES.hasOwnProperty(name) || UNICODE_PROPERTY_VALUES[name].indexOf(value) === -1) { + if (!has(state.unicodeProperties.nonBinary, name)) state.raise("Invalid property name") - } + if (!state.unicodeProperties.nonBinary[name].test(value)) + state.raise("Invalid property value") } pp.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) { - if (UNICODE_PROPERTY_VALUES.$LONE.indexOf(nameOrValue) === -1) { + if (!state.unicodeProperties.binary.test(nameOrValue)) state.raise("Invalid property name") - } } // UnicodePropertyName :: @@ -835,7 +839,7 @@ pp.regexp_eatCharacterClass = function(state) { if (state.eat(0x5B /* [ */)) { state.eat(0x5E /* ^ */) this.regexp_classRanges(state) - if (state.eat(0x5D /* [ */)) { + if (state.eat(0x5D /* ] */)) { return true } // Unreachable since it threw "unterminated regular expression" error before. @@ -883,7 +887,7 @@ pp.regexp_eatClassAtom = function(state) { } const ch = state.current() - if (ch !== 0x5D /* [ */) { + if (ch !== 0x5D /* ] */) { state.lastIntValue = ch state.advance() return true diff --git a/tools/tests/apps/modules/imports/links/acorn/src/scope.js b/tools/tests/apps/modules/imports/links/acorn/src/scope.js index eab0002c04..b0b9866611 100644 --- a/tools/tests/apps/modules/imports/links/acorn/src/scope.js +++ b/tools/tests/apps/modules/imports/links/acorn/src/scope.js @@ -1,74 +1,95 @@ import {Parser} from "./state" -import {has} from "./util" +import {SCOPE_VAR, SCOPE_FUNCTION, SCOPE_TOP, SCOPE_ARROW, SCOPE_SIMPLE_CATCH, BIND_LEXICAL, BIND_SIMPLE_CATCH, BIND_FUNCTION} from "./scopeflags" const pp = Parser.prototype -// Object.assign polyfill -const assign = Object.assign || function(target, ...sources) { - for (let source of sources) { - for (const key in source) { - if (has(source, key)) { - target[key] = source[key] - } - } +class Scope { + constructor(flags) { + this.flags = flags + // A list of var-declared names in the current lexical scope + this.var = [] + // A list of lexically-declared names in the current lexical scope + this.lexical = [] + // A list of lexically-declared FunctionDeclaration names in the current lexical scope + this.functions = [] } - return target } // The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names. -pp.enterFunctionScope = function() { - // var: a hash of var-declared names in the current lexical scope - // lexical: a hash of lexically-declared names in the current lexical scope - // childVar: a hash of var-declared names in all child lexical scopes of the current lexical scope (within the current function scope) - // parentLexical: a hash of lexically-declared names in all parent lexical scopes of the current lexical scope (within the current function scope) - this.scopeStack.push({var: {}, lexical: {}, childVar: {}, parentLexical: {}}) +pp.enterScope = function(flags) { + this.scopeStack.push(new Scope(flags)) } -pp.exitFunctionScope = function() { +pp.exitScope = function() { this.scopeStack.pop() } -pp.enterLexicalScope = function() { - const parentScope = this.scopeStack[this.scopeStack.length - 1] - const childScope = {var: {}, lexical: {}, childVar: {}, parentLexical: {}} - - this.scopeStack.push(childScope) - assign(childScope.parentLexical, parentScope.lexical, parentScope.parentLexical) +// The spec says: +// > At the top level of a function, or script, function declarations are +// > treated like var declarations rather than like lexical declarations. +pp.treatFunctionsAsVarInScope = function(scope) { + return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP) } -pp.exitLexicalScope = function() { - const childScope = this.scopeStack.pop() - const parentScope = this.scopeStack[this.scopeStack.length - 1] - - assign(parentScope.childVar, childScope.var, childScope.childVar) +pp.declareName = function(name, bindingType, pos) { + let redeclared = false + if (bindingType === BIND_LEXICAL) { + const scope = this.currentScope() + redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1 + scope.lexical.push(name) + if (this.inModule && (scope.flags & SCOPE_TOP)) + delete this.undefinedExports[name] + } else if (bindingType === BIND_SIMPLE_CATCH) { + const scope = this.currentScope() + scope.lexical.push(name) + } else if (bindingType === BIND_FUNCTION) { + const scope = this.currentScope() + if (this.treatFunctionsAsVar) + redeclared = scope.lexical.indexOf(name) > -1 + else + redeclared = scope.lexical.indexOf(name) > -1 || scope.var.indexOf(name) > -1 + scope.functions.push(name) + } else { + for (let i = this.scopeStack.length - 1; i >= 0; --i) { + const scope = this.scopeStack[i] + if (scope.lexical.indexOf(name) > -1 && !((scope.flags & SCOPE_SIMPLE_CATCH) && scope.lexical[0] === name) || + !this.treatFunctionsAsVarInScope(scope) && scope.functions.indexOf(name) > -1) { + redeclared = true + break + } + scope.var.push(name) + if (this.inModule && (scope.flags & SCOPE_TOP)) + delete this.undefinedExports[name] + if (scope.flags & SCOPE_VAR) break + } + } + if (redeclared) this.raiseRecoverable(pos, `Identifier '${name}' has already been declared`) } -/** - * A name can be declared with `var` if there are no variables with the same name declared with `let`/`const` - * in the current lexical scope or any of the parent lexical scopes in this function. - */ -pp.canDeclareVarName = function(name) { - const currentScope = this.scopeStack[this.scopeStack.length - 1] - - return !has(currentScope.lexical, name) && !has(currentScope.parentLexical, name) +pp.checkLocalExport = function(id) { + // scope.functions must be empty as Module code is always strict. + if (this.scopeStack[0].lexical.indexOf(id.name) === -1 && + this.scopeStack[0].var.indexOf(id.name) === -1) { + this.undefinedExports[id.name] = id + } } -/** - * A name can be declared with `let`/`const` if there are no variables with the same name declared with `let`/`const` - * in the current scope, and there are no variables with the same name declared with `var` in the current scope or in - * any child lexical scopes in this function. - */ -pp.canDeclareLexicalName = function(name) { - const currentScope = this.scopeStack[this.scopeStack.length - 1] - - return !has(currentScope.lexical, name) && !has(currentScope.var, name) && !has(currentScope.childVar, name) +pp.currentScope = function() { + return this.scopeStack[this.scopeStack.length - 1] } -pp.declareVarName = function(name) { - this.scopeStack[this.scopeStack.length - 1].var[name] = true +pp.currentVarScope = function() { + for (let i = this.scopeStack.length - 1;; i--) { + let scope = this.scopeStack[i] + if (scope.flags & SCOPE_VAR) return scope + } } -pp.declareLexicalName = function(name) { - this.scopeStack[this.scopeStack.length - 1].lexical[name] = true +// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`. +pp.currentThisScope = function() { + for (let i = this.scopeStack.length - 1;; i--) { + let scope = this.scopeStack[i] + if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) return scope + } } diff --git a/tools/tests/apps/modules/imports/links/acorn/src/scopeflags.js b/tools/tests/apps/modules/imports/links/acorn/src/scopeflags.js new file mode 100644 index 0000000000..ccb16ecc48 --- /dev/null +++ b/tools/tests/apps/modules/imports/links/acorn/src/scopeflags.js @@ -0,0 +1,24 @@ +// Each scope gets a bitset that may contain these flags +export const + SCOPE_TOP = 1, + SCOPE_FUNCTION = 2, + SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION, + SCOPE_ASYNC = 4, + SCOPE_GENERATOR = 8, + SCOPE_ARROW = 16, + SCOPE_SIMPLE_CATCH = 32, + SCOPE_SUPER = 64, + SCOPE_DIRECT_SUPER = 128 + +export function functionFlags(async, generator) { + return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0) +} + +// Used in checkLVal and declareName to determine the type of a binding +export const + BIND_NONE = 0, // Not a binding + BIND_VAR = 1, // Var-style binding + BIND_LEXICAL = 2, // Let- or const-style binding + BIND_FUNCTION = 3, // Function declaration + BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding + BIND_OUTSIDE = 5 // Special case for function names as bound inside the function diff --git a/tools/tests/apps/modules/imports/links/acorn/src/state.js b/tools/tests/apps/modules/imports/links/acorn/src/state.js index 185fe28648..eb4e0e1208 100644 --- a/tools/tests/apps/modules/imports/links/acorn/src/state.js +++ b/tools/tests/apps/modules/imports/links/acorn/src/state.js @@ -2,29 +2,24 @@ import {reservedWords, keywords} from "./identifier" import {types as tt} from "./tokentype" import {lineBreak} from "./whitespace" import {getOptions} from "./options" - -// Registered plugins -export const plugins = {} - -function keywordRegexp(words) { - return new RegExp("^(?:" + words.replace(/ /g, "|") + ")$") -} +import {wordsRegexp} from "./util" +import {SCOPE_TOP, SCOPE_FUNCTION, SCOPE_ASYNC, SCOPE_GENERATOR, SCOPE_SUPER, SCOPE_DIRECT_SUPER} from "./scopeflags" export class Parser { constructor(options, input, startPos) { this.options = options = getOptions(options) this.sourceFile = options.sourceFile - this.keywords = keywordRegexp(keywords[options.ecmaVersion >= 6 ? 6 : 5]) + this.keywords = wordsRegexp(keywords[options.ecmaVersion >= 6 ? 6 : options.sourceType === "module" ? "5module" : 5]) let reserved = "" - if (!options.allowReserved) { + if (options.allowReserved !== true) { for (let v = options.ecmaVersion;; v--) if (reserved = reservedWords[v]) break - if (options.sourceType == "module") reserved += " await" + if (options.sourceType === "module") reserved += " await" } - this.reservedWords = keywordRegexp(reserved) + this.reservedWords = wordsRegexp(reserved) let reservedStrict = (reserved ? reserved + " " : "") + reservedWords.strict - this.reservedWordsStrict = keywordRegexp(reservedStrict) - this.reservedWordsStrictBind = keywordRegexp(reservedStrict + " " + reservedWords.strictBind) + this.reservedWordsStrict = wordsRegexp(reservedStrict) + this.reservedWordsStrictBind = wordsRegexp(reservedStrict + " " + reservedWords.strictBind) this.input = String(input) // Used to signal to callers of `readWord1` whether the word @@ -32,9 +27,6 @@ export class Parser { // escape sequences must not be interpreted as keywords. this.containsEsc = false - // Load plugins - this.loadPlugins(options.plugins) - // Set up token state // The current position of the tokenizer in the input. @@ -75,12 +67,12 @@ export class Parser { // Used to signify the start of a potential arrow function this.potentialArrowAt = -1 - // Flags to track whether we are in a function, a generator, an async function. - this.inFunction = this.inGenerator = this.inAsync = false // Positions to delayed-check that yield/await does not exist in default parameters. - this.yieldPos = this.awaitPos = 0 + this.yieldPos = this.awaitPos = this.awaitIdentPos = 0 // Labels in scope. this.labels = [] + // Thus-far undefined exports. + this.undefinedExports = {} // If enabled, skip leading hashbang line. if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === "#!") @@ -88,31 +80,45 @@ export class Parser { // Scope tracking for duplicate variable names (see scope.js) this.scopeStack = [] - this.enterFunctionScope() + this.enterScope(SCOPE_TOP) // For RegExp validation this.regexpState = null } - // DEPRECATED Kept for backwards compatibility until 3.0 in case a plugin uses them - isKeyword(word) { return this.keywords.test(word) } - isReservedWord(word) { return this.reservedWords.test(word) } - - extend(name, f) { - this[name] = f(this[name]) - } - - loadPlugins(pluginConfigs) { - for (let name in pluginConfigs) { - let plugin = plugins[name] - if (!plugin) throw new Error("Plugin '" + name + "' not found") - plugin(this, pluginConfigs[name]) - } - } - parse() { let node = this.options.program || this.startNode() this.nextToken() return this.parseTopLevel(node) } + + get inFunction() { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 } + get inGenerator() { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 } + get inAsync() { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 } + get allowSuper() { return (this.currentThisScope().flags & SCOPE_SUPER) > 0 } + get allowDirectSuper() { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 } + get treatFunctionsAsVar() { return this.treatFunctionsAsVarInScope(this.currentScope()) } + + // Switch to a getter for 7.0.0. + inNonArrowFunction() { return (this.currentThisScope().flags & SCOPE_FUNCTION) > 0 } + + static extend(...plugins) { + let cls = this + for (let i = 0; i < plugins.length; i++) cls = plugins[i](cls) + return cls + } + + static parse(input, options) { + return new this(options, input).parse() + } + + static parseExpressionAt(input, pos, options) { + let parser = new this(options, input, pos) + parser.nextToken() + return parser.parseExpression() + } + + static tokenizer(input, options) { + return new this(options, input) + } } diff --git a/tools/tests/apps/modules/imports/links/acorn/src/statement.js b/tools/tests/apps/modules/imports/links/acorn/src/statement.js index 2612125df3..8c7e171a9f 100644 --- a/tools/tests/apps/modules/imports/links/acorn/src/statement.js +++ b/tools/tests/apps/modules/imports/links/acorn/src/statement.js @@ -4,6 +4,7 @@ import {lineBreak, skipWhiteSpace} from "./whitespace" import {isIdentifierStart, isIdentifierChar, keywordRelationalOperator} from "./identifier" import {has} from "./util" import {DestructuringErrors} from "./parseutil" +import {functionFlags, SCOPE_SIMPLE_CATCH, BIND_SIMPLE_CATCH, BIND_LEXICAL, BIND_VAR, BIND_FUNCTION} from "./scopeflags" const pp = Parser.prototype @@ -18,25 +19,33 @@ pp.parseTopLevel = function(node) { let exports = {} if (!node.body) node.body = [] while (this.type !== tt.eof) { - let stmt = this.parseStatement(true, true, exports) + let stmt = this.parseStatement(null, true, exports) node.body.push(stmt) } + if (this.inModule) + for (let name of Object.keys(this.undefinedExports)) + this.raiseRecoverable(this.undefinedExports[name].start, `Export '${name}' is not defined`) this.adaptDirectivePrologue(node.body) this.next() - if (this.options.ecmaVersion >= 6) { - node.sourceType = this.options.sourceType - } + node.sourceType = this.options.sourceType return this.finishNode(node, "Program") } const loopLabel = {kind: "loop"}, switchLabel = {kind: "switch"} -pp.isLet = function() { +pp.isLet = function(context) { if (this.options.ecmaVersion < 6 || !this.isContextual("let")) return false skipWhiteSpace.lastIndex = this.pos let skip = skipWhiteSpace.exec(this.input) let next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next) - if (nextCh === 91 || nextCh == 123) return true // '{' and '[' + // For ambiguous cases, determine if a LexicalDeclaration (or only a + // Statement) is allowed here. If context is not empty then only a Statement + // is allowed. However, `let [` is an explicit negative lookahead for + // ExpressionStatement, so special-case it first. + if (nextCh === 91) return true // '[' + if (context) return false + + if (nextCh === 123) return true // '{' if (isIdentifierStart(nextCh, true)) { let pos = next + 1 while (isIdentifierChar(this.input.charCodeAt(pos), true)) ++pos @@ -58,7 +67,7 @@ pp.isAsyncFunction = function() { let next = this.pos + skip[0].length return !lineBreak.test(this.input.slice(this.pos, next)) && this.input.slice(next, next + 8) === "function" && - (next + 8 == this.input.length || !isIdentifierChar(this.input.charAt(next + 8))) + (next + 8 === this.input.length || !isIdentifierChar(this.input.charAt(next + 8))) } // Parse a single statement. @@ -68,10 +77,10 @@ pp.isAsyncFunction = function() { // `if (foo) /blah/.exec(foo)`, where looking at the previous token // does not help. -pp.parseStatement = function(declaration, topLevel, exports) { +pp.parseStatement = function(context, topLevel, exports) { let starttype = this.type, node = this.startNode(), kind - if (this.isLet()) { + if (this.isLet(context)) { starttype = tt._var kind = "let" } @@ -86,10 +95,13 @@ pp.parseStatement = function(declaration, topLevel, exports) { case tt._do: return this.parseDoStatement(node) case tt._for: return this.parseForStatement(node) case tt._function: - if (!declaration && this.options.ecmaVersion >= 6) this.unexpected() - return this.parseFunctionStatement(node, false) + // Function as sole body of either an if statement or a labeled statement + // works, but not when it is part of a labeled statement that is the sole + // body of an if statement. + if ((context && (this.strict || context !== "if" && context !== "label")) && this.options.ecmaVersion >= 6) this.unexpected() + return this.parseFunctionStatement(node, false, !context) case tt._class: - if (!declaration) this.unexpected() + if (context) this.unexpected() return this.parseClass(node, true) case tt._if: return this.parseIfStatement(node) case tt._return: return this.parseReturnStatement(node) @@ -98,14 +110,22 @@ pp.parseStatement = function(declaration, topLevel, exports) { case tt._try: return this.parseTryStatement(node) case tt._const: case tt._var: kind = kind || this.value - if (!declaration && kind != "var") this.unexpected() + if (context && kind !== "var") this.unexpected() return this.parseVarStatement(node, kind) case tt._while: return this.parseWhileStatement(node) case tt._with: return this.parseWithStatement(node) - case tt.braceL: return this.parseBlock() + case tt.braceL: return this.parseBlock(true, node) case tt.semi: return this.parseEmptyStatement(node) case tt._export: case tt._import: + if (this.options.ecmaVersion > 10 && starttype === tt._import) { + skipWhiteSpace.lastIndex = this.pos + let skip = skipWhiteSpace.exec(this.input) + let next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next) + if (nextCh === 40) // '(' + return this.parseExpressionStatement(node, this.parseExpression()) + } + if (!this.options.allowImportExportEverywhere) { if (!topLevel) this.raise(this.start, "'import' and 'export' may only appear at the top level") @@ -121,20 +141,20 @@ pp.parseStatement = function(declaration, topLevel, exports) { // Identifier node, we switch to interpreting it as a label. default: if (this.isAsyncFunction()) { - if (!declaration) this.unexpected() + if (context) this.unexpected() this.next() - return this.parseFunctionStatement(node, true) + return this.parseFunctionStatement(node, true, !context) } let maybeName = this.value, expr = this.parseExpression() if (starttype === tt.name && expr.type === "Identifier" && this.eat(tt.colon)) - return this.parseLabeledStatement(node, maybeName, expr) + return this.parseLabeledStatement(node, maybeName, expr, context) else return this.parseExpressionStatement(node, expr) } } pp.parseBreakContinueStatement = function(node, keyword) { - let isBreak = keyword == "break" + let isBreak = keyword === "break" this.next() if (this.eat(tt.semi) || this.insertSemicolon()) node.label = null else if (this.type !== tt.name) this.unexpected() @@ -166,7 +186,7 @@ pp.parseDebuggerStatement = function(node) { pp.parseDoStatement = function(node) { this.next() this.labels.push(loopLabel) - node.body = this.parseStatement(false) + node.body = this.parseStatement("do") this.labels.pop() this.expect(tt._while) node.test = this.parseParenExpression() @@ -187,9 +207,9 @@ pp.parseDoStatement = function(node) { pp.parseForStatement = function(node) { this.next() - let awaitAt = (this.options.ecmaVersion >= 9 && this.inAsync && this.eatContextual("await")) ? this.lastTokStart : -1 + let awaitAt = (this.options.ecmaVersion >= 9 && (this.inAsync || (!this.inFunction && this.options.allowAwaitOutsideFunction)) && this.eatContextual("await")) ? this.lastTokStart : -1 this.labels.push(loopLabel) - this.enterLexicalScope() + this.enterScope(0) this.expect(tt.parenL) if (this.type === tt.semi) { if (awaitAt > -1) this.unexpected(awaitAt) @@ -201,8 +221,7 @@ pp.parseForStatement = function(node) { this.next() this.parseVar(init, true, kind) this.finishNode(init, "VariableDeclaration") - if ((this.type === tt._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) && init.declarations.length === 1 && - !(kind !== "var" && init.declarations[0].init)) { + if ((this.type === tt._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) && init.declarations.length === 1) { if (this.options.ecmaVersion >= 9) { if (this.type === tt._in) { if (awaitAt > -1) this.unexpected(awaitAt) @@ -231,17 +250,17 @@ pp.parseForStatement = function(node) { return this.parseFor(node, init) } -pp.parseFunctionStatement = function(node, isAsync) { +pp.parseFunctionStatement = function(node, isAsync, declarationPosition) { this.next() - return this.parseFunction(node, true, false, isAsync) + return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync) } pp.parseIfStatement = function(node) { this.next() node.test = this.parseParenExpression() // allow function declarations in branches, but only in non-strict mode - node.consequent = this.parseStatement(!this.strict && this.type == tt._function) - node.alternate = this.eat(tt._else) ? this.parseStatement(!this.strict && this.type == tt._function) : null + node.consequent = this.parseStatement("if") + node.alternate = this.eat(tt._else) ? this.parseStatement("if") : null return this.finishNode(node, "IfStatement") } @@ -265,14 +284,14 @@ pp.parseSwitchStatement = function(node) { node.cases = [] this.expect(tt.braceL) this.labels.push(switchLabel) - this.enterLexicalScope() + this.enterScope(0) // Statements under must be grouped (by label) in SwitchCase // nodes. `cur` is used to keep the node that we are currently // adding statements to. let cur - for (let sawDefault = false; this.type != tt.braceR;) { + for (let sawDefault = false; this.type !== tt.braceR;) { if (this.type === tt._case || this.type === tt._default) { let isCase = this.type === tt._case if (cur) this.finishNode(cur, "SwitchCase") @@ -289,10 +308,10 @@ pp.parseSwitchStatement = function(node) { this.expect(tt.colon) } else { if (!cur) this.unexpected() - cur.consequent.push(this.parseStatement(true)) + cur.consequent.push(this.parseStatement(null)) } } - this.exitLexicalScope() + this.exitScope() if (cur) this.finishNode(cur, "SwitchCase") this.next() // Closing brace this.labels.pop() @@ -319,13 +338,19 @@ pp.parseTryStatement = function(node) { if (this.type === tt._catch) { let clause = this.startNode() this.next() - this.expect(tt.parenL) - clause.param = this.parseBindingAtom() - this.enterLexicalScope() - this.checkLVal(clause.param, "let") - this.expect(tt.parenR) + if (this.eat(tt.parenL)) { + clause.param = this.parseBindingAtom() + let simple = clause.param.type === "Identifier" + this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0) + this.checkLVal(clause.param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL) + this.expect(tt.parenR) + } else { + if (this.options.ecmaVersion < 10) this.unexpected() + clause.param = null + this.enterScope(0) + } clause.body = this.parseBlock(false) - this.exitLexicalScope() + this.exitScope() node.handler = this.finishNode(clause, "CatchClause") } node.finalizer = this.eat(tt._finally) ? this.parseBlock() : null @@ -345,7 +370,7 @@ pp.parseWhileStatement = function(node) { this.next() node.test = this.parseParenExpression() this.labels.push(loopLabel) - node.body = this.parseStatement(false) + node.body = this.parseStatement("while") this.labels.pop() return this.finishNode(node, "WhileStatement") } @@ -354,7 +379,7 @@ pp.parseWithStatement = function(node) { if (this.strict) this.raise(this.start, "'with' in strict mode") this.next() node.object = this.parseParenExpression() - node.body = this.parseStatement(false) + node.body = this.parseStatement("with") return this.finishNode(node, "WithStatement") } @@ -363,25 +388,21 @@ pp.parseEmptyStatement = function(node) { return this.finishNode(node, "EmptyStatement") } -pp.parseLabeledStatement = function(node, maybeName, expr) { +pp.parseLabeledStatement = function(node, maybeName, expr, context) { for (let label of this.labels) if (label.name === maybeName) this.raise(expr.start, "Label '" + maybeName + "' is already declared") let kind = this.type.isLoop ? "loop" : this.type === tt._switch ? "switch" : null for (let i = this.labels.length - 1; i >= 0; i--) { let label = this.labels[i] - if (label.statementStart == node.start) { + if (label.statementStart === node.start) { // Update information about previous labels on this node label.statementStart = this.start label.kind = kind } else break } this.labels.push({name: maybeName, kind, statementStart: this.start}) - node.body = this.parseStatement(true) - if (node.body.type == "ClassDeclaration" || - node.body.type == "VariableDeclaration" && node.body.kind != "var" || - node.body.type == "FunctionDeclaration" && (this.strict || node.body.generator)) - this.raiseRecoverable(node.body.start, "Invalid labeled declaration") + node.body = this.parseStatement(context ? context.indexOf("label") === -1 ? context + "label" : context : "label") this.labels.pop() node.label = expr return this.finishNode(node, "LabeledStatement") @@ -397,20 +418,17 @@ pp.parseExpressionStatement = function(node, expr) { // strict"` declarations when `allowStrict` is true (used for // function bodies). -pp.parseBlock = function(createNewLexicalScope = true) { - let node = this.startNode() +pp.parseBlock = function(createNewLexicalScope = true, node = this.startNode(), exitStrict) { node.body = [] this.expect(tt.braceL) - if (createNewLexicalScope) { - this.enterLexicalScope() - } - while (!this.eat(tt.braceR)) { - let stmt = this.parseStatement(true) + if (createNewLexicalScope) this.enterScope(0) + while (this.type !== tt.braceR) { + let stmt = this.parseStatement(null) node.body.push(stmt) } - if (createNewLexicalScope) { - this.exitLexicalScope() - } + if (exitStrict) this.strict = false + this.next() + if (createNewLexicalScope) this.exitScope() return this.finishNode(node, "BlockStatement") } @@ -425,8 +443,8 @@ pp.parseFor = function(node, init) { this.expect(tt.semi) node.update = this.type === tt.parenR ? null : this.parseExpression() this.expect(tt.parenR) - this.exitLexicalScope() - node.body = this.parseStatement(false) + node.body = this.parseStatement("for") + this.exitScope() this.labels.pop() return this.finishNode(node, "ForStatement") } @@ -435,21 +453,36 @@ pp.parseFor = function(node, init) { // same from parser's perspective. pp.parseForIn = function(node, init) { - let type = this.type === tt._in ? "ForInStatement" : "ForOfStatement" + const isForIn = this.type === tt._in this.next() - if (type == "ForInStatement") { - if (init.type === "AssignmentPattern" || - (init.type === "VariableDeclaration" && init.declarations[0].init != null && - (this.strict || init.declarations[0].id.type !== "Identifier"))) - this.raise(init.start, "Invalid assignment in for-in loop head") + + if ( + init.type === "VariableDeclaration" && + init.declarations[0].init != null && + ( + !isForIn || + this.options.ecmaVersion < 8 || + this.strict || + init.kind !== "var" || + init.declarations[0].id.type !== "Identifier" + ) + ) { + this.raise( + init.start, + `${ + isForIn ? "for-in" : "for-of" + } loop variable declaration may not have an initializer` + ) + } else if (init.type === "AssignmentPattern") { + this.raise(init.start, "Invalid left-hand side in for-loop") } node.left = init - node.right = type == "ForInStatement" ? this.parseExpression() : this.parseMaybeAssign() + node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign() this.expect(tt.parenR) - this.exitLexicalScope() - node.body = this.parseStatement(false) + node.body = this.parseStatement("for") + this.exitScope() this.labels.pop() - return this.finishNode(node, type) + return this.finishNode(node, isForIn ? "ForInStatement" : "ForOfStatement") } // Parse a list of variable declarations. @@ -464,7 +497,7 @@ pp.parseVar = function(node, isFor, kind) { decl.init = this.parseMaybeAssign(isFor) } else if (kind === "const" && !(this.type === tt._in || (this.options.ecmaVersion >= 6 && this.isContextual("of")))) { this.unexpected() - } else if (decl.id.type != "Identifier" && !(isFor && (this.type === tt._in || this.isContextual("of")))) { + } else if (decl.id.type !== "Identifier" && !(isFor && (this.type === tt._in || this.isContextual("of")))) { this.raise(this.lastTokEnd, "Complex binding patterns require an initialization value") } else { decl.init = null @@ -476,48 +509,52 @@ pp.parseVar = function(node, isFor, kind) { } pp.parseVarId = function(decl, kind) { - decl.id = this.parseBindingAtom(kind) - this.checkLVal(decl.id, kind, false) + decl.id = this.parseBindingAtom() + this.checkLVal(decl.id, kind === "var" ? BIND_VAR : BIND_LEXICAL, false) } -// Parse a function declaration or literal (depending on the -// `isStatement` parameter). +const FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4 -pp.parseFunction = function(node, isStatement, allowExpressionBody, isAsync) { +// Parse a function declaration or literal (depending on the +// `statement & FUNC_STATEMENT`). + +// Remove `allowExpressionBody` for 7.0.0, as it is only called with false +pp.parseFunction = function(node, statement, allowExpressionBody, isAsync) { this.initFunction(node) - if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) + if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) { + if (this.type === tt.star && (statement & FUNC_HANGING_STATEMENT)) + this.unexpected() node.generator = this.eat(tt.star) + } if (this.options.ecmaVersion >= 8) node.async = !!isAsync - if (isStatement) { - node.id = isStatement === "nullableID" && this.type != tt.name ? null : this.parseIdent() - if (node.id) { - this.checkLVal(node.id, "var") - } + if (statement & FUNC_STATEMENT) { + node.id = (statement & FUNC_NULLABLE_ID) && this.type !== tt.name ? null : this.parseIdent() + if (node.id && !(statement & FUNC_HANGING_STATEMENT)) + // If it is a regular function declaration in sloppy mode, then it is + // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding + // mode depends on properties of the current scope (see + // treatFunctionsAsVar). + this.checkLVal(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION) } - let oldInGen = this.inGenerator, oldInAsync = this.inAsync, - oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldInFunc = this.inFunction - this.inGenerator = node.generator - this.inAsync = node.async + let oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos this.yieldPos = 0 this.awaitPos = 0 - this.inFunction = true - this.enterFunctionScope() + this.awaitIdentPos = 0 + this.enterScope(functionFlags(node.async, node.generator)) - if (!isStatement) - node.id = this.type == tt.name ? this.parseIdent() : null + if (!(statement & FUNC_STATEMENT)) + node.id = this.type === tt.name ? this.parseIdent() : null this.parseFunctionParams(node) - this.parseFunctionBody(node, allowExpressionBody) + this.parseFunctionBody(node, allowExpressionBody, false) - this.inGenerator = oldInGen - this.inAsync = oldInAsync this.yieldPos = oldYieldPos this.awaitPos = oldAwaitPos - this.inFunction = oldInFunc - return this.finishNode(node, isStatement ? "FunctionDeclaration" : "FunctionExpression") + this.awaitIdentPos = oldAwaitIdentPos + return this.finishNode(node, (statement & FUNC_STATEMENT) ? "FunctionDeclaration" : "FunctionExpression") } pp.parseFunctionParams = function(node) { @@ -532,24 +569,34 @@ pp.parseFunctionParams = function(node) { pp.parseClass = function(node, isStatement) { this.next() + // ecma-262 14.6 Class Definitions + // A class definition is always strict mode code. + const oldStrict = this.strict + this.strict = true + this.parseClassId(node, isStatement) this.parseClassSuper(node) let classBody = this.startNode() let hadConstructor = false classBody.body = [] this.expect(tt.braceL) - while (!this.eat(tt.braceR)) { - const member = this.parseClassMember(classBody) - if (member && member.type === "MethodDefinition" && member.kind === "constructor") { - if (hadConstructor) this.raise(member.start, "Duplicate constructor in the same class") - hadConstructor = true + while (this.type !== tt.braceR) { + const element = this.parseClassElement(node.superClass !== null) + if (element) { + classBody.body.push(element) + if (element.type === "MethodDefinition" && element.kind === "constructor") { + if (hadConstructor) this.raise(element.start, "Duplicate constructor in the same class") + hadConstructor = true + } } } + this.strict = oldStrict + this.next() node.body = this.finishNode(classBody, "ClassBody") return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression") } -pp.parseClassMember = function(classBody) { +pp.parseClassElement = function(constructorAllowsSuper) { if (this.eat(tt.semi)) return null let method = this.startNode() @@ -581,16 +628,18 @@ pp.parseClassMember = function(classBody) { } if (!method.key) this.parsePropertyName(method) let {key} = method + let allowsDirectSuper = false if (!method.computed && !method.static && (key.type === "Identifier" && key.name === "constructor" || key.type === "Literal" && key.value === "constructor")) { if (method.kind !== "method") this.raise(key.start, "Constructor can't have get/set modifier") if (isGenerator) this.raise(key.start, "Constructor can't be a generator") if (isAsync) this.raise(key.start, "Constructor can't be an async method") method.kind = "constructor" + allowsDirectSuper = constructorAllowsSuper } else if (method.static && key.type === "Identifier" && key.name === "prototype") { this.raise(key.start, "Classes may not have a static property named prototype") } - this.parseClassMethod(classBody, method, isGenerator, isAsync) + this.parseClassMethod(method, isGenerator, isAsync, allowsDirectSuper) if (method.kind === "get" && method.value.params.length !== 0) this.raiseRecoverable(method.value.start, "getter should have no params") if (method.kind === "set" && method.value.params.length !== 1) @@ -600,13 +649,21 @@ pp.parseClassMember = function(classBody) { return method } -pp.parseClassMethod = function(classBody, method, isGenerator, isAsync) { - method.value = this.parseMethod(isGenerator, isAsync) - classBody.body.push(this.finishNode(method, "MethodDefinition")) +pp.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) { + method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper) + return this.finishNode(method, "MethodDefinition") } pp.parseClassId = function(node, isStatement) { - node.id = this.type === tt.name ? this.parseIdent() : isStatement === true ? this.unexpected() : null + if (this.type === tt.name) { + node.id = this.parseIdent() + if (isStatement) + this.checkLVal(node.id, BIND_LEXICAL, false) + } else { + if (isStatement === true) + this.unexpected() + node.id = null + } } pp.parseClassSuper = function(node) { @@ -619,6 +676,14 @@ pp.parseExport = function(node, exports) { this.next() // export * from '...' if (this.eat(tt.star)) { + if (this.options.ecmaVersion >= 11) { + if (this.eatContextual("as")) { + node.exported = this.parseIdent(true) + this.checkExport(exports, node.exported.name, this.lastTokStart) + } else { + node.exported = null + } + } this.expectContextual("from") if (this.type !== tt.string) this.unexpected() node.source = this.parseExprAtom() @@ -632,7 +697,7 @@ pp.parseExport = function(node, exports) { let fNode = this.startNode() this.next() if (isAsync) this.next() - node.declaration = this.parseFunction(fNode, "nullableID", false, isAsync) + node.declaration = this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync) } else if (this.type === tt._class) { let cNode = this.startNode() node.declaration = this.parseClass(cNode, "nullableID") @@ -644,7 +709,7 @@ pp.parseExport = function(node, exports) { } // export var|const|let|function|class ... if (this.shouldParseExportStatement()) { - node.declaration = this.parseStatement(true) + node.declaration = this.parseStatement(null) if (node.declaration.type === "VariableDeclaration") this.checkVariableExport(exports, node.declaration.declarations) else @@ -658,9 +723,11 @@ pp.parseExport = function(node, exports) { if (this.type !== tt.string) this.unexpected() node.source = this.parseExprAtom() } else { - // check for keywords used as local names for (let spec of node.specifiers) { + // check for keywords used as local names this.checkUnreserved(spec.local) + // check if export is defined + this.checkLocalExport(spec.local) } node.source = null @@ -679,22 +746,22 @@ pp.checkExport = function(exports, name, pos) { pp.checkPatternExport = function(exports, pat) { let type = pat.type - if (type == "Identifier") + if (type === "Identifier") this.checkExport(exports, pat.name, pat.start) - else if (type == "ObjectPattern") + else if (type === "ObjectPattern") for (let prop of pat.properties) this.checkPatternExport(exports, prop) - else if (type == "ArrayPattern") + else if (type === "ArrayPattern") for (let elt of pat.elements) { if (elt) this.checkPatternExport(exports, elt) } - else if (type == "Property") + else if (type === "Property") this.checkPatternExport(exports, pat.value) - else if (type == "AssignmentPattern") + else if (type === "AssignmentPattern") this.checkPatternExport(exports, pat.left) - else if (type == "RestElement") + else if (type === "RestElement") this.checkPatternExport(exports, pat.argument) - else if (type == "ParenthesizedExpression") + else if (type === "ParenthesizedExpression") this.checkPatternExport(exports, pat.expression) } @@ -759,7 +826,7 @@ pp.parseImportSpecifiers = function() { // import defaultObj, { x, y as z } from '...' let node = this.startNode() node.local = this.parseIdent() - this.checkLVal(node.local, "let") + this.checkLVal(node.local, BIND_LEXICAL) nodes.push(this.finishNode(node, "ImportDefaultSpecifier")) if (!this.eat(tt.comma)) return nodes } @@ -768,7 +835,7 @@ pp.parseImportSpecifiers = function() { this.next() this.expectContextual("as") node.local = this.parseIdent() - this.checkLVal(node.local, "let") + this.checkLVal(node.local, BIND_LEXICAL) nodes.push(this.finishNode(node, "ImportNamespaceSpecifier")) return nodes } @@ -787,7 +854,7 @@ pp.parseImportSpecifiers = function() { this.checkUnreserved(node.imported) node.local = node.imported } - this.checkLVal(node.local, "let") + this.checkLVal(node.local, BIND_LEXICAL) nodes.push(this.finishNode(node, "ImportSpecifier")) } return nodes diff --git a/tools/tests/apps/modules/imports/links/acorn/src/tokencontext.js b/tools/tests/apps/modules/imports/links/acorn/src/tokencontext.js index 18dda85ce6..1ff5556879 100644 --- a/tools/tests/apps/modules/imports/links/acorn/src/tokencontext.js +++ b/tools/tests/apps/modules/imports/links/acorn/src/tokencontext.js @@ -45,13 +45,13 @@ pp.braceIsBlock = function(prevType) { // The check for `tt.name && exprAllowed` detects whether we are // after a `yield` or `of` construct. See the `updateContext` for // `tt.name`. - if (prevType === tt._return || prevType == tt.name && this.exprAllowed) + if (prevType === tt._return || prevType === tt.name && this.exprAllowed) return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) - if (prevType === tt._else || prevType === tt.semi || prevType === tt.eof || prevType === tt.parenR || prevType == tt.arrow) + if (prevType === tt._else || prevType === tt.semi || prevType === tt.eof || prevType === tt.parenR || prevType === tt.arrow) return true - if (prevType == tt.braceL) + if (prevType === tt.braceL) return parent === types.b_stat - if (prevType == tt._var || prevType == tt.name) + if (prevType === tt._var || prevType === tt._const || prevType === tt.name) return false return !this.exprAllowed } @@ -67,7 +67,7 @@ pp.inGeneratorContext = function() { pp.updateContext = function(prevType) { let update, type = this.type - if (type.keyword && prevType == tt.dot) + if (type.keyword && prevType === tt.dot) this.exprAllowed = false else if (update = type.updateContext) update.call(this, prevType) @@ -78,7 +78,7 @@ pp.updateContext = function(prevType) { // Token-specific context update code tt.parenR.updateContext = tt.braceR.updateContext = function() { - if (this.context.length == 1) { + if (this.context.length === 1) { this.exprAllowed = true return } @@ -111,6 +111,7 @@ tt.incDec.updateContext = function() { tt._function.updateContext = tt._class.updateContext = function(prevType) { if (prevType.beforeExpr && prevType !== tt.semi && prevType !== tt._else && + !(prevType === tt._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) && !((prevType === tt.colon || prevType === tt.braceL) && this.curContext() === types.b_stat)) this.context.push(types.f_expr) else @@ -127,7 +128,7 @@ tt.backQuote.updateContext = function() { } tt.star.updateContext = function(prevType) { - if (prevType == tt._function) { + if (prevType === tt._function) { let index = this.context.length - 1 if (this.context[index] === types.f_expr) this.context[index] = types.f_expr_gen @@ -139,9 +140,9 @@ tt.star.updateContext = function(prevType) { tt.name.updateContext = function(prevType) { let allowed = false - if (this.options.ecmaVersion >= 6) { - if (this.value == "of" && !this.exprAllowed || - this.value == "yield" && this.inGeneratorContext()) + if (this.options.ecmaVersion >= 6 && prevType !== tt.dot) { + if (this.value === "of" && !this.exprAllowed || + this.value === "yield" && this.inGeneratorContext()) allowed = true } this.exprAllowed = allowed diff --git a/tools/tests/apps/modules/imports/links/acorn/src/tokenize.js b/tools/tests/apps/modules/imports/links/acorn/src/tokenize.js index 3afb8386f2..835fdcd962 100644 --- a/tools/tests/apps/modules/imports/links/acorn/src/tokenize.js +++ b/tools/tests/apps/modules/imports/links/acorn/src/tokenize.js @@ -28,7 +28,9 @@ const pp = Parser.prototype // Move to the next token -pp.next = function() { +pp.next = function(ignoreEscapeSequenceInKeyword) { + if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc) + this.raiseRecoverable(this.start, "Escape sequence in keyword " + this.type.keyword) if (this.options.onToken) this.options.onToken(new Token(this)) @@ -219,7 +221,7 @@ pp.readToken_mult_modulo_exp = function(code) { // '%*' let tokentype = code === 42 ? tt.star : tt.modulo // exponentiation operator ** and **= - if (this.options.ecmaVersion >= 7 && code == 42 && next === 42) { + if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) { ++size tokentype = tt.starstar next = this.input.charCodeAt(this.pos + 2) @@ -245,7 +247,7 @@ pp.readToken_caret = function() { // '^' pp.readToken_plus_min = function(code) { // '+-' let next = this.input.charCodeAt(this.pos + 1) if (next === code) { - if (next == 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) == 62 && + if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 && (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) { // A `-->` line comment this.skipLineComment(3) @@ -266,8 +268,8 @@ pp.readToken_lt_gt = function(code) { // '<>' if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp(tt.assign, size + 1) return this.finishOp(tt.bitShift, size) } - if (next == 33 && code == 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) == 45 && - this.input.charCodeAt(this.pos + 3) == 45) { + if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 && + this.input.charCodeAt(this.pos + 3) === 45) { // `