diff --git a/.env b/.env new file mode 100644 index 00000000..56106905 --- /dev/null +++ b/.env @@ -0,0 +1,125 @@ +# T-Pot config file. Do not remove. + +############################################### +# T-Pot Base Settings - Adjust to your needs. # +############################################### + +# Set Web usernames and passwords here. This section will be used to create / update the Nginx password file nginxpasswd. +# : This is the default +# : +# Use 'htpasswd -n -b "username" "password" | base64 -w0' to create the WEB_USER if you want to manually deploy T-Pot, run 'install.sh' to automatically add a user during installation, or 'genuser.sh' if you just want to add a web user. +# Example: 'htpasswd -n -b "tsec" "tsec" | base64 -w0' will print dHNlYzokYXByMSRYUnE2SC5rbiRVRjZQM1VVQmJVNWJUQmNmSGRuUFQxCgo= +# Copy the string and replace WEB_USER=dHNlYzokYXByMSRYUnE2SC5rbiRVRjZQM1VVQmJVNWJUQmNmSGRuUFQxCgo= +# Multiple users are possible: +# WEB_USER=dHNlYzokYXByMSRYUnE2SC5rbiRVRjZQM1VVQmJVNWJUQmNmSGRuUFQxCgo= dHNlYzokYXByMSR6VUFHVWdmOCRROXI3a09CTjFjY3lCeU1DTloyanEvCgo= +WEB_USER= + +# Set Logstash Web usernames and passwords here. This section will be used to create / update the Nginx password file lswebpasswd. +# The Lostsash Web usernames are used for T-Pot log ingestion via Logstash, each sensor should have its own user. +# : This is empty by default. +# <'htpasswd encoded usernames / passwords'>: +# Use 'htpasswd -n -b "username" "password" | base64 -w0' to create the LS_WEB_USER if you want to manually deploy the sensor. +# Example: 'htpasswd -n -b "sensor" "sensor" | base64 -w0' will print c2Vuc29yOiRhcHIxJGVpMHdzUmdYJHNyWHF4UG53ZzZqWUc3aEFaUWxrWDEKCg== +# Copy the string and replace / add LS_WEB_USER=c2Vuc29yOiRhcHIxJGVpMHdzUmdYJHNyWHF4UG53ZzZqWUc3aEFaUWxrWDEKCg== +# Multiple users are possible: +# LS_WEB_USER=c2Vuc29yMTokYXByMSQ5aXhNRk5yMCR6d3F2dGFwQ2x0cFBhU1pqMm9ZemYxCgo= c2Vuc29yMjokYXByMSRtYTlOS1J2NCQvU3dsVVBMeW5RaVIyM3pyWVAzOUkwCgo= +LS_WEB_USER= + +# T-Pot Blackhole +# ENABLED: T-Pot will download a db of known mass scanners and nullroute them. +# Be aware, this will put T-Pot off the map for stealth reasons and +# you will get less traffic. Routes will be active until next reboot +# and will be re-added with every T-Pot start until disabled. +# DISABLED: This is the default and no stealth efforts are in place. +TPOT_BLACKHOLE=DISABLED + +# T-Pot Persistence +# on: This is the default. T-Pot will keep the honeypot logfiles and rotate +# with logrotate for 30 days. +# off: This is recommended for Raspberry Pi or setups with weaker CPUs or +# if you just do not need any of the logfiles. +TPOT_PERSISTENCE=on + +# T-Pot Type +# HIVE: This is the default and offers everything to connect T-Pot sensors. +# SENSOR: This needs to be used when running a sensor. Be aware to adjust all other +# settings as well. +# 1. You will need to copy compose/sensor.yml to ./docker-comopose.yml +# 2. From HIVE host you will need to copy ~/tpotce/data/nginx/cert/nginx.crt to +# your SENSOR host to ~/tpotce/data/hive.crt +# 3. On HIVE: Create a web user per SENSOR on HIVE and provide credentials below +# Create credentials with 'htpasswd ~/tpotce/data/nginx/conf/lswebpasswd ' +# 4. On SENSOR: Provide username / password from (3) for TPOT_HIVE_USER as base64 encoded string: +# "echo -n 'username:password' | base64 -w0" +TPOT_TYPE=HIVE + +# T-Pot Hive User (only relevant for SENSOR deployment) +# : This is empty by default. +# : Provide a base64 encoded string "echo -n 'username:password' | base64 -w0" +# i.e. TPOT_HIVE_USER='dXNlcm5hbWU6cGFzc3dvcmQ=' +TPOT_HIVE_USER= + +# T-Pot Hive IP (only relevant for SENSOR deployment) +# : This is empty by default. +# : This can be either a IP (i.e. 192.168.1.1) or a FQDN (i.e. foo.bar.local) +TPOT_HIVE_IP= + +# T-Pot AttackMap Text Output +# ENABLED: This is the default and the docker container map_data will print events to the console. +# DISABLED: Printing events to the console is disabled. +TPOT_ATTACKMAP_TEXT=ENABLED + +# T-Pot AttackMap Text Output Timezone +# UTC: (T-Pot default) This is usually the best option. +# Continent/City: In Linux you can check our timezone with `readlink` /etc/localtime or +# see the full list here: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones +# Examples: America/New_York, Asia/Taipei, Australia/Melbourne, Europe/Athens, Europe/Berlin +TPOT_ATTACKMAP_TEXT_TIMEZONE=UTC + +################################################################################### +# Honeypots / Tools settings +################################################################################### +# Some services / tools offer adjustments using ENVs which can be adjusted here. +################################################################################### + +# Suricata ET Pro ruleset +# OPEN: This is the default and will the ET Open ruleset +# OINKCODE: Replace OPEN with your Oinkcode to use the ET Pro ruleset +OINKCODE=OPEN + + +################################################################################### +# NEVER MAKE CHANGES TO THIS SECTION UNLESS YOU REALLY KNOW WHAT YOU ARE DOING!!! # +################################################################################### + +# docker.sock Path +TPOT_DOCKER_SOCK=/var/run/docker.sock + +# docker compose .env +TPOT_DOCKER_ENV=./.env + +# Docker-Compose file +TPOT_DOCKER_COMPOSE=./docker-compose.yml + +# T-Pot Docker Repo +# Depending on where you are located you may choose between DockerHub and GHCR +# dtagdevsec: This will use the DockerHub image registry +# ghcr.io/telekom-security: This will use the GitHub container registry +TPOT_REPO=dtagdevsec + +# T-Pot Version Tag +TPOT_VERSION=24.04 + +# T-Pot Pull Policy +# always: (T-Pot default) Compose implementations SHOULD always pull the image from the registry. +# never: Compose implementations SHOULD NOT pull the image from a registry and SHOULD rely on the platform cached image. +# missing: Compose implementations SHOULD pull the image only if it's not available in the platform cache. +# build: Compose implementations SHOULD build the image. Compose implementations SHOULD rebuild the image if already present. +TPOT_PULL_POLICY=always + +# T-Pot Data Path +TPOT_DATA_PATH=./data + +# OSType (linux, mac, win) +# Most docker features are available on linux +TPOT_OSTYPE=linux diff --git a/.github/ISSUE_TEMPLATE/bug-report-for-t-pot.md b/.github/ISSUE_TEMPLATE/bug-report-for-t-pot.md index 6eaabdc4..30f39ec5 100644 --- a/.github/ISSUE_TEMPLATE/bug-report-for-t-pot.md +++ b/.github/ISSUE_TEMPLATE/bug-report-for-t-pot.md @@ -1,37 +1,42 @@ --- -name: Bug report for T-Pot -about: Bug report for T-Pot +name: Bug report for T-Pot 24.04.x +about: Bug report for T-Pot 24.04.x title: '' labels: '' assignees: '' --- -Before you post your issue make sure it has not been answered yet and provide `basic support information` if you come to the conclusion it is a new issue. +# Successfully raise an issue +Before you post your issue make sure it has not been answered yet and provide **⚠️ BASIC SUPPORT INFORMATION** (as requested below) if you come to the conclusion it is a new issue. - πŸ” Use the [search function](https://github.com/dtag-dev-sec/tpotce/issues?utf8=%E2%9C%93&q=) first -- 🧐 Check our [WIKI](https://github.com/dtag-dev-sec/tpotce/wiki) -- πŸ“š Consult the documentation of πŸ’» [Debian](https://www.debian.org/doc/), 🐳 [Docker](https://docs.docker.com/), the 🦌 [ELK stack](https://www.elastic.co/guide/index.html) and the 🍯 [T-Pot Readme](https://github.com/dtag-dev-sec/tpotce/blob/master/README.md). -- **⚠️ Provide [basic support information](#info) or similiar information with regard to your issue or we can not help you and will close the issue without further notice** +- 🧐 Check our [Wiki](https://github.com/dtag-dev-sec/tpotce/wiki) and the [discussions](https://github.com/telekom-security/tpotce/discussions) +- πŸ“š Consult the documentation of πŸ’» your Linux OS, 🐳 [Docker](https://docs.docker.com/), the 🦌 [Elastic stack](https://www.elastic.co/guide/index.html) and the 🍯 [T-Pot Readme](https://github.com/dtag-dev-sec/tpotce/blob/master/README.md). +- **⚠️ Provide [BASIC SUPPORT INFORMATION](#-basic-support-information-commands-are-expected-to-run-as-root) or similar detailed information with regard to your issue or we will close the issue or convert it into a discussion without further interaction from the maintainers**.
-
-
-
+# ⚠️ Basic support information (commands are expected to run as `root`) - -## ⚠️ Basic support information (commands are expected to run as `root`) +**We happily take the time to improve T-Pot and take care of things, but we need you to take the time to create an issue that provides us with all the information we need.** -- What version of the OS are you currently using `lsb_release -a` and `uname -a`? -- What T-Pot version are you currently using? -- What edition (Standard, Nextgen, etc.) of T-Pot are you running? +- What OS are you T-Pot running on? +- What is the version of the OS `lsb_release -a` and `uname -a`? +- What T-Pot version are you currently using (only **T-Pot 24.04.x** is currently supported)? - What architecture are you running on (i.e. hardware, cloud, VM, etc.)? -- Did you have any problems during the install? If yes, please attach `/install.log` `/install.err`. +- Review the `~/install_tpot.log`, attach the log and highlight the errors. - How long has your installation been running? + - If it is a fresh install consult the documentation first. + - Most likely it is a port conflict or a remote dependency was unavailable. + - Retry a fresh installation and only open the issue if the error keeps coming up and is not resolved using the documentation as described [here](#how-to-raise-an-issue). - Did you install upgrades, packages or use the update script? - Did you modify any scripts or configs? If yes, please attach the changes. -- Please provide a screenshot of `glances` and `htop`. +- Please provide a screenshot of `htop` and `docker stats`. - How much free disk space is available (`df -h`)? - What is the current container status (`dps.sh`)? -- What is the status of the T-Pot service (`systemctl status tpot`)? -- What ports are being occupied? Stop T-Pot `systemctl stop tpot` and run `netstat -tulpen` +- On Linux: What is the status of the T-Pot service (`systemctl status tpot`)? +- What ports are being occupied? Stop T-Pot `systemctl stop tpot` and run `grc netstat -tulpen` + - Stop T-Pot `systemctl stop tpot` + - Run `grc netstat -tulpen` + - Run T-Pot manually with `docker compose -f ~/tpotce/docker-compose.yml up` and check for errors + - Stop execution with `CTRL-C` and `docker compose -f ~/tpotce/docker-compose.yml down -v` - If a single container shows as `DOWN` you can run `docker logs ` for the latest log entries diff --git a/.github/ISSUE_TEMPLATE/feature-request-for-t-pot.md b/.github/ISSUE_TEMPLATE/feature-request-for-t-pot.md index ff1ba956..81063643 100644 --- a/.github/ISSUE_TEMPLATE/feature-request-for-t-pot.md +++ b/.github/ISSUE_TEMPLATE/feature-request-for-t-pot.md @@ -1,6 +1,6 @@ --- -name: Feature request for T-Pot -about: Suggest an idea for T-Pot +name: Feature request for T-Pot 24.04.x +about: Suggest an idea for T-Pot 24.04.x title: '' labels: '' assignees: '' diff --git a/.github/ISSUE_TEMPLATE/general-issue-for-t-pot.md b/.github/ISSUE_TEMPLATE/general-issue-for-t-pot.md index e86a858b..648689df 100644 --- a/.github/ISSUE_TEMPLATE/general-issue-for-t-pot.md +++ b/.github/ISSUE_TEMPLATE/general-issue-for-t-pot.md @@ -1,39 +1,42 @@ --- -name: General issue for T-Pot -about: General issue for T-Pot +name: General issue for T-Pot 24.04.x +about: General issue for T-Pot 24.04.x title: '' labels: '' assignees: '' --- -πŸ—¨οΈ Please post your questions in [Discussions](https://github.com/telekom-security/tpotce/discussions) and keep the issues for **issues**. Thank you 😁.
- -Before you post your issue make sure it has not been answered yet and provide `basic support information` if you come to the conclusion it is a new issue. +# Successfully raise an issue +Before you post your issue make sure it has not been answered yet and provide **⚠️ BASIC SUPPORT INFORMATION** (as requested below) if you come to the conclusion it is a new issue. - πŸ” Use the [search function](https://github.com/dtag-dev-sec/tpotce/issues?utf8=%E2%9C%93&q=) first -- 🧐 Check our [WIKI](https://github.com/dtag-dev-sec/tpotce/wiki) -- πŸ“š Consult the documentation of πŸ’» [Debian](https://www.debian.org/doc/), 🐳 [Docker](https://docs.docker.com/), the 🦌 [ELK stack](https://www.elastic.co/guide/index.html) and the 🍯 [T-Pot Readme](https://github.com/dtag-dev-sec/tpotce/blob/master/README.md). -- **⚠️ Provide [basic support information](#info) or similiar information with regard to your issue or we can not help you and will close the issue without further notice** +- 🧐 Check our [Wiki](https://github.com/dtag-dev-sec/tpotce/wiki) and the [discussions](https://github.com/telekom-security/tpotce/discussions) +- πŸ“š Consult the documentation of πŸ’» your Linux OS, 🐳 [Docker](https://docs.docker.com/), the 🦌 [Elastic stack](https://www.elastic.co/guide/index.html) and the 🍯 [T-Pot Readme](https://github.com/dtag-dev-sec/tpotce/blob/master/README.md). +- **⚠️ Provide [BASIC SUPPORT INFORMATION](#-basic-support-information-commands-are-expected-to-run-as-root) or similar detailed information with regard to your issue or we will close the issue or convert it into a discussion without further interaction from the maintainers**.
-
-
-
+# ⚠️ Basic support information (commands are expected to run as `root`) - -## ⚠️ Basic support information (commands are expected to run as `root`) +**We happily take the time to improve T-Pot and take care of things, but we need you to take the time to create an issue that provides us with all the information we need.** -- What version of the OS are you currently using `lsb_release -a` and `uname -a`? -- What T-Pot version are you currently using? -- What edition (Standard, Nextgen, etc.) of T-Pot are you running? +- What OS are you T-Pot running on? +- What is the version of the OS `lsb_release -a` and `uname -a`? +- What T-Pot version are you currently using (only **T-Pot 24.04.x** is currently supported)? - What architecture are you running on (i.e. hardware, cloud, VM, etc.)? -- Did you have any problems during the install? If yes, please attach `/install.log` `/install.err`. +- Review the `~/install_tpot.log`, attach the log and highlight the errors. - How long has your installation been running? + - If it is a fresh install consult the documentation first. + - Most likely it is a port conflict or a remote dependency was unavailable. + - Retry a fresh installation and only open the issue if the error keeps coming up and is not resolved using the documentation as described [here](#how-to-raise-an-issue). - Did you install upgrades, packages or use the update script? - Did you modify any scripts or configs? If yes, please attach the changes. -- Please provide a screenshot of `glances` and `htop`. +- Please provide a screenshot of `htop` and `docker stats`. - How much free disk space is available (`df -h`)? - What is the current container status (`dps.sh`)? -- What is the status of the T-Pot service (`systemctl status tpot`)? -- What ports are being occupied? Stop T-Pot `systemctl stop tpot` and run `netstat -tulpen` +- On Linux: What is the status of the T-Pot service (`systemctl status tpot`)? +- What ports are being occupied? Stop T-Pot `systemctl stop tpot` and run `grc netstat -tulpen` + - Stop T-Pot `systemctl stop tpot` + - Run `grc netstat -tulpen` + - Run T-Pot manually with `docker compose -f ~/tpotce/docker-compose.yml up` and check for errors + - Stop execution with `CTRL-C` and `docker compose -f ~/tpotce/docker-compose.yml down -v` - If a single container shows as `DOWN` you can run `docker logs ` for the latest log entries diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..1a98f270 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# Ignore data folder +data/ +**/.DS_Store +.idea +install_tpot.log diff --git a/CHANGELOG.md b/CHANGELOG.md index cb5fcd5d..99c7f7fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,45 +1,36 @@ # Release Notes / Changelog -T-Pot 22.04.0 is probably the most feature rich release ever provided with long awaited (wanted!) features readily available after installation. +T-Pot 24.04.0 marks probably the largest change in the history of the project. While most of the changes have been made to the underlying platform some changes will be standing out in particular - a T-Pot ISO image will no longer be provided with the benefit that T-Pot will now run on multiple Linux distributions (Alma Linux, Debian, Fedora, OpenSuse, Raspbian, Rocky Linux, Ubuntu), Raspberry Pi (optimized) and macOS / Windows (limited). ## New Features -* **Distributed** Installation with **HIVE** and **HIVE_SENSOR** -* **ARM64** support for all provided Docker images -* **GeoIP Attack Map** visualizing Live Attacks on a dedicated webpage -* **Kibana Live Attack Map** visualizing Live Attacks from different **HIVE_SENSORS** -* **Blackhole** is a script trying to avoid mass scanner detection -* **Elasticvue** a web front end for browsing and interacting with an Elastic Search cluster -* **Ddospot** a honeypot for tracking and monitoring UDP-based Distributed Denial of Service (DDoS) attacks -* **Endlessh** is a SSH tarpit that very slowly sends an endless, random SSH banner -* **HellPot** is an endless honeypot based on Heffalump that sends unruly HTTP bots to hell -* **qHoneypots** 25 honeypots in a single container for monitoring network traffic, bots activities, and username \ password credentials -* **Redishoneypot** is a honeypot mimicking some of the Redis' functions -* **SentryPeer** a dedicated SIP honeypot -* **Index Lifecycle Management** for Elasticseach indices is now being used - -## Upgrades -* **Debian 11.x** is now being used for the T-Pot ISO images and required for post installs -* **Elastic Stack 8.x** is now provided as Docker images +* **Distributed** Installation is now using NGINX reverse proxy instead of SSH to transmit **HIVE_SENSOR** logs to **HIVE** +* **`deploy.sh`**, will make the deployment of sensor much easier and will automatically take care of the configuration. You only have to install the T-Pot sensor. +* **T-Pot Init** is the foundation for running T-Pot on multiple Linux distributions and will also ensure to restart containers with failed healthchecks using **autoheal** +* **T-Pot Installer** is now mostly Ansible based providing a universal playbook for the most common Linux distributions +* **T-Pot Uninstaller** allows to uninstall T-Pot, while not recommended for general usage, this comes in handy for testing purposes +* **T-Pot Customizer (`compose/customizer.py`)** is here to assist you in the creation of a customized `docker-compose.yml` +* **T-Pot Landing Page** has been redesigned and simplified +![T-Pot-WebUI](doc/tpotwebui.png) +* **Kibana Dashboards, Objects** fully refreshed in favor of Lens based objects +![Dashbaord](doc/kibana_a.png) +* **Wordpot** is added as new addition to the available honeypots within T-Pot and will run on `tcp/8080` by default. +* **Raspberry Pi** is now supported using a dedicated `mobile.yml` (why this is called mobile will be revealed soon!) +* **GeoIP Attack Map** is now aware of connects / disconnects and thus eliminating required reloads +* **Docker**, where possible, will now be installed directly from the Docker repositories to avoid any incompatibilities +* **`.env`** now provides a single configuration file for the T-Pot related settings +* **`genuser.sh`** can now be used to add new users to the T-Pot Landing Page as part of the T-Pot configuration file (`.env`) ## Updates -* **Honeypots** and **tools** were updated to their latest masters and releases +* **Honeypots** and **tools** were updated to their latest pushed code and / or releases +* Where possible Docker Images will now use Alpine 3.19 * Updates will be provided continuously through Docker Images updates ## Breaking Changes -* For security reasons all Py2.x honeypots with the need of PyPi packages have been removed: **HoneyPy**, **HoneySAP** and **RDPY** -* If you are upgrading from a previous version of T-Pot (20.06.x) you need to import the new Kibana objects or some of the functionality will be broken or will be unavailabe -* **Cyberchef** is now part of the Nginx Docker image, no longer as individual image -* **ElasticSearch Head** is superseded by **Elasticvue** and part the Nginx Docker image -* **Heimdall** is no longer supported and superseded with a new Bento based landing page -* **Elasticsearch Curator** is no longer supprted and superseded with **Index Lifecycle Policies** available through Kibana. +* There is no option to migrate a previous installation to T-Pot 24.04.0, you can try to transfer the old `data` folder to the new T-Pot installation, but a working environment depends on too many other factors outside of our control and a new installation is simply faster. +* Most of the support scripts were moved into the **T-Pot Init** image and are no longer available directly on the host. +* Cockpit is no longer available as part of T-Pot itself. However, where supported, you can simply install the `cockpit` package. # Thanks & Credits -* @ghenry, for some fun late night debugging and of course SentryPeer! -* @giga-a, for adding much appreciated features (i.e. JSON logging, -X-Forwarded-For, etc.) and of course qHoneypots! * @sp3t3rs, @trixam, for their backend and ews support! -* @tadashi-oya, for spotting some errors and propose fixes! -* @tmariuss, @shaderecker for their cloud contributions! -* @vorband, for much appreciated and helpful insights regarding the GeoIP Attack Map! -* @yunginnanet, on not giving up on squashing a bug and of course Hellpot! +* @shark4ce for taking the time to test, debug and offer a solution #1472. ... and many others from the T-Pot community by opening valued issues and discussions, suggesting ideas and thus helping to improve T-Pot! \ No newline at end of file diff --git a/CITATION.cff b/CITATION.cff index 36d6f3ba..657506a1 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -2,7 +2,7 @@ # Visit https://bit.ly/cffinit to generate yours today! cff-version: 1.2.0 -title: T-Pot +title: T-Pot 24.04.0 message: >- If you use this software, please cite it using the metadata from this file. @@ -20,8 +20,8 @@ authors: identifiers: - type: url value: >- - https://github.com/telekom-security/tpotce/releases/tag/22.04.0 - description: T-Pot Release 22.04.0 + https://github.com/telekom-security/tpotce/releases/tag/24.04.0 + description: T-Pot Release 24.04.0 repository-code: 'https://github.com/telekom-security/tpotce' abstract: >- T-Pot is the all in one, optionally distributed, multiarch @@ -38,6 +38,6 @@ keywords: - docker - elk license: GPL-3.0 -commit: af09aa96b184f873ec83da4e7380762a0a5ce416 -version: 22.04.0 -date-released: '2022-04-12' \ No newline at end of file +commit: release +version: 24.04.0 +date-released: '2024-04-22' diff --git a/README.md b/README.md index 3319508f..e07022d1 100644 --- a/README.md +++ b/README.md @@ -6,83 +6,84 @@ T-Pot is the all in one, optionally distributed, multiarch (amd64, arm64) honeyp

# TL;DR -1. Meet the [system requirements](#system-requirements). The T-Pot installation needs at least 8-16 GB RAM and 128 GB free disk space as well as a working (outgoing non-filtered) internet connection. -2. Download the T-Pot ISO from [GitHub](https://github.com/telekom-security/tpotce/releases) according to your architecture (amd64, arm64) or [create it yourself](#create-your-own-iso-image). -3. Install the system in a [VM](#running-in-a-vm) or on [physical hardware](#running-on-hardware) with [internet access](#system-placement). -4. Enjoy your favorite beverage - [watch](https://sicherheitstacho.eu) and [analyze](#kibana-dashboard). -

+1. Meet the [system requirements](#system-requirements). The T-Pot installation needs at least 8-16 GB RAM, 128 GB free disk space as well as a working (outgoing non-filtered) internet connection. +2. [Download](#choose-your-distro) or use a running, supported distribution. +3. Install the ISO with as minimal packages / services as possible (`ssh` required) +4. Install `curl`: `$ sudo [apt, dnf, zypper] install curl` if not installed already +5. Run installer as non-root from `$HOME`: +``` +env bash -c "$(curl -sL https://github.com/telekom-security/tpotce/raw/master/install.sh)" +``` + * Follow instructions, read messages, check for possible port conflicts and reboot # Table of Contents -- [Disclaimer](#disclaimer) -- [Technical Concept](#technical-concept) - - [Technical Architecture](#technical-architecture) - - [Services](#services) - - [User Types](#user-types) -- [System Requirements](#system-requirements) - - [Running in a VM](#running-in-a-vm) - - [Running on Hardware](#running-on-hardware) - - [Running in a Cloud](#running-in-a-cloud) - - [Required Ports](#required-ports) -- [System Placement](#system-placement) -- [Installation](#installation) - - [ISO Based](#iso-based) - - [Download ISO Image](#download-iso-image) - - [Create your own ISO Image](#create-your-own-iso-image) - - [Post Install](#post-install) - - [Download Debian Netinstall Image](#download-debian-netinstall-image) - - [Post Install User Method](#post-install-user-method) - - [Post Install Auto Method](#post-install-auto-method) - - [T-Pot Installer](#t-pot-installer) - - [Installation Types](#installation-types) - - [Standalone](#standalone) - - [Distributed](#distributed) - - [Cloud Deployments](#cloud-deployments) - - [Ansible Deployment](#ansible-deployment) - - [Terraform Configuration](#terraform-configuration) -- [First Start](#first-start) - - [Standalone Start](#standalone-first-start) - - [Distributed Deployment](#distributed-deployment) - - [Community Data Submission](#community-data-submission) - - [Opt-In HPFEEDS Data Submission](#opt-in-hpfeeds-data-submission) -- [Remote Access and Tools](#remote-access-and-tools) - - [SSH and Cockpit](#ssh-and-cockpit) - - [T-Pot Landing Page](#t-pot-landing-page) - - [Kibana Dashboard](#kibana-dashboard) - - [Attack Map](#attack-map) - - [Cyberchef](#cyberchef) - - [Elasticvue](#elasticvue) - - [Spiderfoot](#spiderfoot) -- [Maintenance](#maintenance) - - [Updates](#updates) - - [Update from 20.06.x](#update-from-2006x) - - [Updates for 22.04.x](#updates-for-2204x) - - [Known Issues](#known-issues) - - [Grub Fails to Reconfigure](#grub-fails-to-reconfigure) - - [Docker Images Fail to Download](#docker-images-fail-to-download) - - [Network Interface Fails](#network-interface-fails) - - [Start T-Pot](#start-t-pot) - - [Stop T-Pot](#stop-t-pot) - - [T-Pot Data Folder](#t-pot-data-folder) - - [Log Persistence](#log-persistence) - - [Clean Up](#clean-up) - - [Show Containers](#show-containers) - - [Blackhole](#blackhole) - - [Add Users to Nginx (T-Pot WebUI)](#add-users-to-nginx-t-pot-webui) - - [Import and Export Kibana Objects](#import-and-export-kibana-objects) - - [Switch Editions](#switch-editions) - - [Redeploy Hive Sensor](#redeploy-hive-sensor) - - [Adjust tpot.yml](#adjust-tpotyml) - - [Enable Cockpit 2FA](#enable-cockpit-2fa) -- [Troubleshooting](#troubleshooting) - - [Logging](#logging) - - [Fail2Ban](#fail2ban) - - [RAM](#ram-and-storage) -- [Contact](#contact) - - [Issues](#issues) - - [Discussions](#discussions) -- [Licenses](#licenses) -- [Credits](#credits) -- [Testimonials](#testimonials) + +* [T-Pot - The All In One Multi Honeypot Platform](#t-pot---the-all-in-one-multi-honeypot-platform) +* [TL;DR](#tldr) +* [Table of Contents](#table-of-contents) +* [Disclaimer](#disclaimer) +* [Technical Concept](#technical-concept) + * [Technical Architecture](#technical-architecture) + * [Services](#services) + * [User Types](#user-types) +* [System Requirements](#system-requirements) + * [Running in a VM](#running-in-a-vm) + * [Running on Hardware](#running-on-hardware) + * [Running in a Cloud](#running-in-a-cloud) + * [Required Ports](#required-ports) +* [System Placement](#system-placement) +* [Installation](#installation) + * [Choose your distro](#choose-your-distro) + * [Raspberry Pi 4 (8GB) Support](#raspberry-pi-4-8gb-support) + * [Get and install T-Pot](#get-and-install-t-pot) + * [macOS & Windows](#macos--windows) + * [Installation Types](#installation-types) + * [Standard / HIVE](#standard--hive) + * [**Distributed**](#distributed) + * [Uninstall T-Pot](#uninstall-t-pot) +* [First Start](#first-start) + * [Standalone First Start](#standalone-first-start) + * [Distributed Deployment](#distributed-deployment) + * [Community Data Submission](#community-data-submission) + * [Opt-In HPFEEDS Data Submission](#opt-in-hpfeeds-data-submission) +* [Remote Access and Tools](#remote-access-and-tools) + * [SSH](#ssh) + * [T-Pot Landing Page](#t-pot-landing-page-) + * [Kibana Dashboard](#kibana-dashboard) + * [Attack Map](#attack-map) + * [Cyberchef](#cyberchef) + * [Elasticvue](#elasticvue) + * [Spiderfoot](#spiderfoot) +* [Configuration](#configuration) + * [T-Pot Config File](#t-pot-config-file) + * [Customize T-Pot Honeypots and Services](#customize-t-pot-honeypots-and-services) +* [Maintenance](#maintenance) + * [General Updates](#general-updates) + * [Update Script](#update-script) + * [Known Issues](#known-issues) + * [**Docker Images Fail to Download**](#docker-images-fail-to-download) + * [Start T-Pot](#start-t-pot) + * [Stop T-Pot](#stop-t-pot) + * [T-Pot Data Folder](#t-pot-data-folder) + * [Log Persistence](#log-persistence) + * [Factory Reset](#factory-reset) + * [Show Containers](#show-containers) + * [Blackhole](#blackhole) + * [Add Users to Nginx (T-Pot WebUI)](#add-users-to-nginx-t-pot-webui) + * [Import and Export Kibana Objects](#import-and-export-kibana-objects) + * [**Export**](#export) + * [**Import**](#import) +* [Troubleshooting](#troubleshooting) + * [Logs](#logs) + * [RAM and Storage](#ram-and-storage) +* [Contact](#contact) + * [Issues](#issues) + * [Discussions](#discussions) +* [Licenses](#licenses) +* [Credits](#credits) + * [The developers and development communities of](#the-developers-and-development-communities-of) +* [Testimonials](#testimonials) +

# Disclaimer @@ -90,12 +91,11 @@ T-Pot is the all in one, optionally distributed, multiarch (amd64, arm64) honeyp - For fast help research the [Issues](https://github.com/telekom-security/tpotce/issues) and [Discussions](https://github.com/telekom-security/tpotce/discussions). - The software is designed and offered with best effort in mind. As a community and open source project it uses lots of other open source software and may contain bugs and issues. Report responsibly. - Honeypots - by design - should not host any sensitive data. Make sure you don't add any. -- By default, your data is submitted to [Sicherheitstacho](https://www.sicherheitstacho.eu/start/main). You can disable this in the config (`/opt/tpot/etc/tpot.yml`) by [removing](#community-data-submission) the ewsposter section. But in this case sharing really is caring! +- By default, your data is submitted to [Sicherheitstacho](https://www.sicherheitstacho.eu/start/main). You can disable this in the config (`~/tpotce/docker-compose.yml`) by [removing](#community-data-submission) the `ewsposter` section. But in this case sharing really is caring!

# Technical Concept -T-Pot is based on the Debian 11 (Bullseye) Netinstaller and utilizes -[docker](https://www.docker.com/) and [docker-compose](https://docs.docker.com/compose/) to reach its goal of running as many tools as possible simultaneously and thus utilizing the host's hardware to its maximum. +T-Pot's main components have been moved into the `tpotinit` Docker image allowing T-Pot to now support multiple Linux distributions, even macOS and Windows (although both limited to the feature set of Docker Desktop). T-Pot uses [docker](https://www.docker.com/) and [docker compose](https://docs.docker.com/compose/) to reach its goal of running as many honeypots and tools as possible simultaneously and thus utilizing the host's hardware to its maximum.

T-Pot offers docker images for the following honeypots ... @@ -110,8 +110,8 @@ T-Pot offers docker images for the following honeypots ... * [elasticpot](https://gitlab.com/bontchev/elasticpot), * [endlessh](https://github.com/skeeto/endlessh), * [glutton](https://github.com/mushorg/glutton), -* [heralding](https://github.com/johnnykv/heralding), * [hellpot](https://github.com/yunginnanet/HellPot), +* [heralding](https://github.com/johnnykv/heralding), * [honeypots](https://github.com/qeeqbox/honeypots), * [honeytrap](https://github.com/armedpot/honeytrap/), * [ipphoney](https://gitlab.com/bontchev/ipphoney), @@ -121,10 +121,11 @@ T-Pot offers docker images for the following honeypots ... * [redishoneypot](https://github.com/cypwnpwnsocute/RedisHoneyPot), * [sentrypeer](https://github.com/SentryPeer/SentryPeer), * [snare](http://mushmush.org/), -* [tanner](http://mushmush.org/) +* [tanner](http://mushmush.org/), +* [wordpot](https://github.com/gbrindisi/wordpot) ... alongside the following tools ... -* [Cockpit](https://cockpit-project.org/running) for a lightweight and secure WebManagement and WebTerminal. +* [Autoheal](https://github.com/willfarrell/docker-autoheal) a tool to automatically restart containers with failed healthchecks. * [Cyberchef](https://gchq.github.io/CyberChef/) a web app for encryption, encoding, compression and data analysis. * [Elastic Stack](https://www.elastic.co/videos) to beautifully visualize all the events captured by T-Pot. * [Elasticvue](https://github.com/cars10/elasticvue/) a web front end for browsing and interacting with an Elasticsearch cluster. @@ -134,7 +135,7 @@ T-Pot offers docker images for the following honeypots ... * [Spiderfoot](https://github.com/smicallef/spiderfoot) an open source intelligence automation tool. * [Suricata](http://suricata-ids.org/) a Network Security Monitoring engine. -... to give you the best out-of-the-box experience possible and an easy-to-use multi-honeypot appliance. +... to give you the best out-of-the-box experience possible and an easy-to-use multi-honeypot system.

@@ -150,19 +151,18 @@ The individual Dockerfiles and configurations are located in the [docker folder] T-Pot offers a number of services which are basically divided into five groups: 1. System services provided by the OS * SSH for secure remote access. - * Cockpit for web based remote access, management and web terminal. 2. Elastic Stack * Elasticsearch for storing events. * Logstash for ingesting, receiving and sending events to Elasticsearch. * Kibana for displaying events on beautifully rendered dashboards. 3. Tools - * NGINX provides secure remote access (reverse proxy) to Kibana, CyberChef, Elasticvue, GeoIP AttackMap and Spiderfoot. + * NGINX provides secure remote access (reverse proxy) to Kibana, CyberChef, Elasticvue, GeoIP AttackMap, Spiderfoot and allows for T-Pot sensors to securely transmit event data to the T-Pot hive. * CyberChef a web app for encryption, encoding, compression and data analysis. * Elasticvue a web front end for browsing and interacting with an Elasticsearch cluster. * T-Pot Attack Map a beautifully animated attack map for T-Pot. * Spiderfoot an open source intelligence automation tool. 4. Honeypots - * A selection of the 22 available honeypots based on the selected edition and / or setup. + * A selection of the 23 available honeypots based on the selected `docker-compose.yml`. 5. Network Security Monitoring (NSM) * Fatt a pyshark based script for extracting network metadata and fingerprints from pcap files and live network traffic. * P0f is a tool for purely passive traffic fingerprinting. @@ -170,250 +170,210 @@ T-Pot offers a number of services which are basically divided into five groups:

## User Types -During the installation and during the usage of T-Pot there are two different types of accounts you will be working with. Make sure you know the differences of the different account types, since it is **by far** the most common reason for authentication errors and `fail2ban` lockouts. +During the installation and during the usage of T-Pot there are two different types of accounts you will be working with. Make sure you know the differences of the different account types, since it is **by far** the most common reason for authentication errors. -| Service | Account Type | Username / Group | Description | -| :--- | :--- | :--- | :--- | -| SSH, Cockpit | OS | `tsec` | On ISO based installations the user `tsec` is predefined. | -| SSH, Cockpit | OS | `` | Any other installation, the `` you chose during installation. | -| Nginx | BasicAuth | `` | `` you chose during the installation of T-Pot. | -| CyberChef | BasicAuth | `` | `` you chose during the installation of T-Pot. | -| Elasticvue | BasicAuth | `` | `` you chose during the installation of T-Pot. | -| Geoip Attack Map | BasicAuth | `` | `` you chose during the installation of T-Pot. | -| Spiderfoot | BasicAuth | `` | `` you chose during the installation of T-Pot. | -| T-Pot | OS | `tpot` | `tpot` this user / group is always reserved by the T-Pot services. | -| T-Pot Logs | OS | `tpotlogs` | `tpotlogs` this group is always reserved by the T-Pot services. | +| Service | Account Type | Username / Group | Description | +|:-----------------|:-------------|:-----------------|:-------------------------------------------------------------------| +| SSH | OS | `` | The user you chose during the installation of the OS. | +| Nginx | BasicAuth | `` | `` you chose during the installation of T-Pot. | +| CyberChef | BasicAuth | `` | `` you chose during the installation of T-Pot. | +| Elasticvue | BasicAuth | `` | `` you chose during the installation of T-Pot. | +| Geoip Attack Map | BasicAuth | `` | `` you chose during the installation of T-Pot. | +| Spiderfoot | BasicAuth | `` | `` you chose during the installation of T-Pot. | +| T-Pot | OS | `tpot` | `tpot` this user / group is always reserved by the T-Pot services. | +| T-Pot Logs | BasicAuth | `` | `LS_WEB_USER` are automatically managed. |

# System Requirements -Depending on the installation setup, edition, installing on [real hardware](#running-on-hardware), in a [virtual machine](#running-in-a-vm) or [cloud](#running-in-a-cloud) there are different kind of requirements to be met regarding OS, RAM, storage and network for a successful installation of T-Pot (you can always adjust `/opt/tpot/etc/tpot.yml` to your needs to overcome these requirements). +Depending on the [supported Linux distro images](#choose-your-distro), hive / sensor, installing on [real hardware](#running-on-hardware), in a [virtual machine](#running-in-a-vm) or other environments there are different kind of requirements to be met regarding OS, RAM, storage and network for a successful installation of T-Pot (you can always adjust `~/tpotce/docker-compose.yml` and `~/tpotce/.env`to your needs to overcome these requirements).

-| T-Pot Type | RAM | Storage | Description | -| :--- | :--- | :--- | :--- | -| Standalone | 8-16GB | >=128GB SSD | RAM requirements depend on the edition,
storage on how much data you want to persist. | -| Hive | >=8GB | >=256GB SSD | As a rule of thumb, the more sensors & data,
the more RAM and storage is needed. | -| Hive_Sensor | >=8GB | >=128GB SSD | Since honeypot logs are persisted (/data)
for 30 days, storage depends on attack volume. | -All T-Pot installations will require ... -- an IP address via DHCP +| T-Pot Type | RAM | Storage | Description | +|:-----------|:-----|:-----------|:-------------------------------------------------------------------------------------------------| +| Hive | 16GB | 256GB SSD | As a rule of thumb, the more sensors & data, the more RAM and storage is needed. | +| Sensor | 8GB | 128GB SSD | Since honeypot logs are persisted (~/tpotce/data) for 30 days, storage depends on attack volume. | + +T-Pot does require ... +- an IPv4 address via DHCP or statically assigned - a working, non-proxied, internet connection - -... for an installation to succeed. +... for a successful installation and operation.

-*If you need proxy support or static IP addresses please review the [Debian](https://www.debian.org/doc/index.en.html) and / or [Docker documentation](https://docs.docker.com/).* +*If you need proxy support or otherwise non-standard features, you should check the docs of the [supported Linux distro images](#choose-your-distro) and / or the [Docker documentation](https://docs.docker.com/).*

## Running in a VM -T-Pot is reported to run with the following hypervisors, however not each and every combination is tested. +All of the [supported Linux distro images](#choose-your-distro) will run in a VM which means T-Pot will just run fine. The following were tested / reported to work: * [UTM (Intel & Apple Silicon)](https://mac.getutm.app/) * [VirtualBox](https://www.virtualbox.org/) -* [VMWare vSphere / ESXi](https://kb.vmware.com/s/article/2107518) * [VMWare Fusion](https://www.vmware.com/products/fusion/fusion-evaluation.html) and [VMWare Workstation](https://www.vmware.com/products/workstation-pro.html) * KVM is reported to work as well. -***Some configuration hints:*** -- While Intel versions run stable, Apple Silicon (arm64) support for Debian has known issues which in UTM may require switching `Display` to `Console Only` during initial installation of T-Pot / Debian and afterwards back to `Full Graphics`. +***Some configuration / setup hints:*** +- While Intel versions run stable, Apple Silicon (arm64) support has known issues which in UTM may require switching `Display` to `Console Only` during initial installation of the OS and afterwards back to `Full Graphics`. - During configuration you may need to enable promiscuous mode for the network interface in order for fatt, suricata and p0f to work properly. - If you want to use a wifi card as a primary NIC for T-Pot, please be aware that not all network interface drivers support all wireless cards. In VirtualBox e.g. you have to choose the *"MT SERVER"* model of the NIC.

## Running on Hardware -T-Pot is tested on and known to run with ... -* IntelNUC series (only some tested) -* Some generic Intel hardware - -Since the number of possible hardware combinations is too high to make general recommendations. If you are unsure, you should test the hardware with the T-Pot ISO image or use the post install method. +T-Pot is only limited by the hardware support of the [supported Linux distro images](#choose-your-distro). It is recommended to check the HCL (hardware compatibility list) and test the supported distros with T-Pot before investing in dedicated hardware.

## Running in a Cloud T-Pot is tested on and known to run on ... * Telekom OTC using the post install method -* Amazon AWS using the post install method (somehow limited) +... others may work, but remain untested. -Some users report working installations on other clouds and hosters, i.e. Azure and GCP. Hardware requirements may be different. If you are unsure you should research [issues](https://github.com/telekom-security/tpotce/issues) and [discussions](https://github.com/telekom-security/tpotce/discussions) and run some functional tests. Cloud support is a community developed feature and hyperscalers are known to adjust linux images, so expect some necessary adjustments on your end. +Some users report working installations on other clouds and hosters, i.e. Azure and GCP. Hardware requirements may be different. If you are unsure you should research [issues](https://github.com/telekom-security/tpotce/issues) and [discussions](https://github.com/telekom-security/tpotce/discussions) and run some functional tests. With T-Pot 24.04.0 and forward we made sure to remove settings that were known to interfere with cloud based installations.

## Required Ports Besides the ports generally needed by the OS, i.e. obtaining a DHCP lease, DNS, etc. T-Pot will require the following ports for incoming / outgoing connections. Review the [T-Pot Architecture](#technical-architecture) for a visual representation. Also some ports will show up as duplicates, which is fine since used in different editions. -| Port | Protocol | Direction | Description | -| :--- | :--- | :--- | :--- | -| 80, 443 | tcp | outgoing | T-Pot Management: Install, Updates, Logs (i.e. Debian, GitHub, DockerHub, PyPi, Sicherheitstacho, etc. | -| 64294 | tcp | incoming | T-Pot Management: Access to Cockpit | -| 64295 | tcp | incoming | T-Pot Management: Access to SSH | -| 64297 | tcp | incoming | T-Pot Management Access to NGINX reverse proxy | -| 5555 | tcp | incoming | Honeypot: ADBHoney | -| 5000 | udp | incoming | Honeypot: CiscoASA | -| 8443 | tcp | incoming | Honeypot: CiscoASA | -| 443 | tcp | incoming | Honeypot: CitrixHoneypot | -| 80, 102, 502, 1025, 2404, 10001, 44818, 47808, 50100 | tcp | incoming | Honeypot: Conpot | -| 161, 623 | udp | incoming | Honeypot: Conpot | -| 22, 23 | tcp | incoming | Honeypot: Cowrie | -| 19, 53, 123, 1900 | udp| incoming | Honeypot: Ddospot | -| 11112 | tcp | incoming | Honeypot: Dicompot | -| 21, 42, 135, 443, 445, 1433, 1723, 1883, 3306, 8081 | tcp | incoming | Honeypot: Dionaea | -| 69 | udp | incoming | Honeypot: Dionaea | -| 9200 | tcp | incoming | Honeypot: Elasticpot | -| 22 | tcp | incoming | Honeypot: Endlessh | -| 21, 22, 23, 25, 80, 110, 143, 443, 993, 995, 1080, 5432, 5900 | tcp | incoming | Honeypot: Heralding | -| 21, 22, 23, 25, 80, 110, 143, 389, 443, 445, 1080, 1433, 1521, 3306, 5432, 5900, 6379, 8080, 9200, 11211 | tcp | incoming | Honeypot: qHoneypots | -| 53, 123, 161| udp | incoming | Honeypot: qHoneypots | -| 631 | tcp | incoming | Honeypot: IPPHoney | -| 80, 443, 8080, 9200, 25565 | tcp | incoming | Honeypot: Log4Pot | -| 25 | tcp | incoming | Honeypot: Mailoney | -| 2575 | tcp | incoming | Honeypot: Medpot | -| 6379 | tcp | incoming | Honeypot: Redishoneypot | -| 5060 | udp | incoming | Honeypot: SentryPeer | -| 80 | tcp | incoming | Honeypot: Snare (Tanner) | + +| Port | Protocol | Direction | Description | +|:--------------------------------------------------------------------------------------------------------------------------------------|:---------|:----------|:----------------------------------------------------------------------------------------------------| +| 80, 443 | tcp | outgoing | T-Pot Management: Install, Updates, Logs (i.e. OS, GitHub, DockerHub, Sicherheitstacho, etc. | +| 64294 | tcp | incoming | T-Pot Management: Sensor data transmission to hive (through NGINX reverse proxy) to 127.0.0.1:64305 | +| 64295 | tcp | incoming | T-Pot Management: Access to SSH | +| 64297 | tcp | incoming | T-Pot Management Access to NGINX reverse proxy | +| 5555 | tcp | incoming | Honeypot: ADBHoney | +| 5000 | udp | incoming | Honeypot: CiscoASA | +| 8443 | tcp | incoming | Honeypot: CiscoASA | +| 443 | tcp | incoming | Honeypot: CitrixHoneypot | +| 80, 102, 502, 1025, 2404, 10001, 44818, 47808, 50100 | tcp | incoming | Honeypot: Conpot | +| 161, 623 | udp | incoming | Honeypot: Conpot | +| 22, 23 | tcp | incoming | Honeypot: Cowrie | +| 19, 53, 123, 1900 | udp | incoming | Honeypot: Ddospot | +| 11112 | tcp | incoming | Honeypot: Dicompot | +| 21, 42, 135, 443, 445, 1433, 1723, 1883, 3306, 8081 | tcp | incoming | Honeypot: Dionaea | +| 69 | udp | incoming | Honeypot: Dionaea | +| 9200 | tcp | incoming | Honeypot: Elasticpot | +| 22 | tcp | incoming | Honeypot: Endlessh | +| 21, 22, 23, 25, 80, 110, 143, 443, 993, 995, 1080, 5432, 5900 | tcp | incoming | Honeypot: Heralding | +| 21, 22, 23, 25, 80, 110, 143, 389, 443, 445, 631, 1080, 1433, 1521, 3306, 3389, 5060, 5432, 5900, 6379, 6667, 8080, 9100, 9200, 11211 | tcp | incoming | Honeypot: qHoneypots | +| 53, 123, 161, 5060 | udp | incoming | Honeypot: qHoneypots | +| 631 | tcp | incoming | Honeypot: IPPHoney | +| 80, 443, 8080, 9200, 25565 | tcp | incoming | Honeypot: Log4Pot | +| 25 | tcp | incoming | Honeypot: Mailoney | +| 2575 | tcp | incoming | Honeypot: Medpot | +| 6379 | tcp | incoming | Honeypot: Redishoneypot | +| 5060 | tcp/udp | incoming | Honeypot: SentryPeer | +| 80 | tcp | incoming | Honeypot: Snare (Tanner) | +| 8090 | tcp | incoming | Honeypot: Wordpot | -Ports and availability of SaaS services may vary based on your geographical location. Also during the first install outgoing ICMP / TRACEROUTE is required additionally to find the closest and fastest mirror to you. +Ports and availability of SaaS services may vary based on your geographical location. -For some honeypots to reach full functionality (i.e. Cowrie or Log4Pot) outgoing connections are necessary as well, in order for them to download the attackers malware. Please see the individual honeypot's documentation to learn more by following the [links](#technical-concept) to their repositories. +For some honeypots to reach full functionality (i.e. Cowrie or Log4Pot) outgoing connections are necessary as well, in order for them to download the attacker's malware. Please see the individual honeypot's documentation to learn more by following the [links](#technical-concept) to their repositories.

# System Placement It is recommended to get yourself familiar with how T-Pot and the honeypots work before you start exposing towards the internet. For a quickstart run a T-Pot installation in a virtual machine.

-Once you are familiar with how things work you should choose a network you suspect intruders in or from (i.e. the internet). Otherwise T-Pot will most likely not capture any attacks (unless you want to prove a point)! For starters it is recommended to put T-Pot in an unfiltered zone, where all TCP and UDP traffic is forwarded to T-Pot's network interface. To avoid probing for T-Pot's management ports you can put T-Pot behind a firewall and forward all TCP / UDP traffic in the port range of 1-64000 to T-Pot while allowing access to ports > 64000 only from trusted IPs and / or only expose the [ports](#required-ports) relevant to your use-case. If you wish to catch malware traffic on unknown ports you should not limit the ports you forward since glutton and honeytrap dynamically bind any TCP port that is not covered by other honeypot daemons and thus give you a better representation of the risks your setup is exposed to. +Once you are familiar with how things work you should choose a network you suspect intruders in or from (i.e. the internet). Otherwise T-Pot will most likely not capture any attacks (unless you want to prove a point)! For starters it is recommended to put T-Pot in an unfiltered zone, where all TCP and UDP traffic is forwarded to T-Pot's network interface. To avoid probing for T-Pot's management ports you should put T-Pot behind a firewall and forward all TCP / UDP traffic in the port range of 1-64000 to T-Pot while allowing access to ports > 64000 only from trusted IPs and / or only expose the [ports](#required-ports) relevant to your use-case. If you wish to catch malware traffic on unknown ports you should not limit the ports you forward since glutton and honeytrap dynamically bind any TCP port that is not occupied by other honeypot daemons and thus give you a better representation of the risks your setup is exposed to.

# Installation -The T-Pot installation is offered in different variations. While the overall installation of T-Pot is straightforward it heavily depends on a working, non-proxied (unless you made modifications) up and running internet connection (also see [required outgoing ports](#required-ports)). If these conditions are not met the installation **will fail!** either during the execution of the Debian Installer, after the first reboot before the T-Pot Installer is starting up or while the T-Pot installer is trying to download all the necessary dependencies. +[Download](#choose-your-distro) one of the [supported Linux distro images](#choose-your-distro), follow the [TL;DR](#tldr) instructions or `git clone` the T-Pot repository and run the installer `~/tpotce/install.sh`. Running T-Pot on top of a running and supported Linux system is possible, but a clean installation is recommended to avoid port conflicts with running services. The T-Pot installer will require direct access to the internet as described [here](#required-ports).

-## ISO Based -Installing T-Pot based on an ISO image is basically the same routine as with any other ISO based Linux distribution. Running on hardware You copy the ISO file to an USB drive (i.e. with [Etcher](https://github.com/balena-io/etcher)) and boot into the Debian installer and choose to install **T-Pot** or you mount the ISO image as a virtual drive in one of the supported [hypervisors](#running-in-a-vm). +## Choose your distro +Choose a supported distro of your choice. It is recommended to use the minimum / netiso installers linked below and only install a minimalistic set of packages. SSH is mandatory or you will not be able to connect to the machine remotely. + +| Distribution Name | x64 | arm64 | +|:--------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------| +| [Alma Linux Boot](https://almalinux.org) | [download](https://repo.almalinux.org/almalinux/9.3/isos/x86_64/AlmaLinux-9.3-x86_64-boot.iso) | [download](https://repo.almalinux.org/almalinux/9.3/isos/aarch64/AlmaLinux-9.3-aarch64-boot.iso) | +| [Debian Netinst](https://www.debian.org/index.en.html) | [download](https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.5.0-amd64-netinst.iso) | [download](https://cdimage.debian.org/debian-cd/current/arm64/iso-cd/debian-12.5.0-arm64-netinst.iso) | +| [Fedora Netinst](https://fedoraproject.org) | [download](https://download.fedoraproject.org/pub/fedora/linux/releases/39/Server/x86_64/iso/Fedora-Server-netinst-x86_64-39-1.5.iso) | [download](https://download.fedoraproject.org/pub/fedora/linux/releases/39/Server/aarch64/iso/Fedora-Server-netinst-aarch64-39-1.5.iso) | +| [OpenSuse Tumbleweed Network Image](https://www.opensuse.org) | [download](https://download.opensuse.org/tumbleweed/iso/openSUSE-Tumbleweed-NET-x86_64-Current.iso) | [download](https://download.opensuse.org/ports/aarch64/tumbleweed/iso/openSUSE-Tumbleweed-NET-aarch64-Current.iso) | +| [Rocky Linux Boot](https://rockylinux.org) | [download](https://download.rockylinux.org/pub/rocky/9/isos/x86_64/Rocky-9.3-x86_64-boot.iso) | [download](https://download.rockylinux.org/pub/rocky/9/isos/aarch64/Rocky-9.3-aarch64-boot.iso) | +| [Ubuntu Live Server](https://ubuntu.com) | [download](https://releases.ubuntu.com/22.04.4/ubuntu-22.04.4-live-server-amd64.iso) | [download](https://cdimage.ubuntu.com/releases/22.04/release/ubuntu-22.04.4-live-server-arm64.iso) | + +
+ +## Raspberry Pi 4 (8GB) Support +| Distribution Name | arm64 | +|:-----------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------| +| [Raspberry Pi OS (**64Bit, Lite**)](https://www.raspberrypi.com) | [download](https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-03-15/2024-03-15-raspios-bookworm-arm64-lite.img.xz) | +

- -### **Download ISO Image** -On the [T-Pot release page](https://github.com/telekom-security/tpotce/releases) you will find two prebuilt ISO images for download `tpot_amd64.iso` and `tpot_arm64.iso`. Both are based on Debian 11 for x64 / arm64 based hardware. So far ARM64 support is limited, but works mostly fine with [UTM](#running-in-a-vm) based VMs on Apple Silicon (M1x) Macs. +## Get and install T-Pot +1. Clone the GitHub repository: `$ git clone https://github.com/telekom-security/tpotce` or follow the [TL;DR](#tldr) and skip this section. +2. Change into the **tpotce/** folder: `$ cd tpotce` +3. Run the installer as non-root: `$ ./install.sh`: + * ⚠️ ***Depending on your Linux distribution of choice the installer will:*** + * Change the SSH port to `tcp/64295` + * Disable the DNS Stub Listener to avoid port conflicts with honeypots + * Set SELinux to Monitor Mode + * Set the firewall target for the public zone to ACCEPT + * Add Docker's repository and install Docker + * Install recommended packages + * Remove packages known to cause issues + * Add the current user to the docker group (allow docker interaction without `sudo`) + * Add `dps` and `dpsw` aliases (`grc docker ps -a`, `watch -c "grc --colour=on docker ps -a`) + * Add `la`, `ll` and `ls` aliases (for `exa`, a improved `ls` command) + * Add `mi` (for `micro`, a great alternative to `vi` and / or `nano`) + * Display open ports on the host (compare with T-Pot [required](https://github.com/telekom-security/tpotce#required-ports) ports) + * Add and enable `tpot.service` to `/etc/systemd/system` so T-Pot can automatically start and stop +4. Follow the installer instructions, you will have to enter your user (`sudo` or `root`) password at least once +5. Check the installer messages for errors and open ports that might cause port conflicts +6. Reboot: `$ sudo reboot`

-### **Create your own ISO Image** -In case you want to modify T-Pot for your environment or simply want to take things into your own hands you can use the [ISO Creator](https://github.com/telekom-security/tpotce) to build your own ISO image. - -**Requirements to create the ISO image:** -- Debian 11 as host system (others *may* work, but *remain* untested) -- 4GB of free RAM -- 32GB of free storage -- A working internet connection - -**Steps to create the ISO image:** - -1. Clone the repository and enter it. -``` -git clone https://github.com/telekom-security/tpotce -cd tpotce -``` -2. Run `makeiso.sh` to build the ISO image. -The script will download and install dependencies necessary to build the image. It will further download the Debian Netiso installer image (~50-150MB) which T-Pot is based on. -``` -sudo ./makeiso.sh -``` -3. After a successful build, you will find the ISO image `tpot_[amd64,arm64].iso` along with a SHA256 checksum `tpot_[amd64,arm64].sha256` based on your architecture choice in your folder. -

- -## Post Install -In some cases it is necessary to install T-Pot after you installed Debian, i.e. your provider does not offer you the option of an ISO based installation, you need special drivers for your hardware to work, or you want to experiment with ARM64 hardware that is not supported by the ISO image. In that case you can clone the T-Pot repository on your own. Make sure you understand the different [user types](#user-types) before setting up your OS. -

- -### **Download Debian Netinstall Image** -Since T-Pot is based on the Debian Netinstall Image ([amd64](http://ftp.debian.org/debian/dists/bullseye/main/installer-amd64/current/images/netboot/mini.iso), [arm64](http://ftp.debian.org/debian/dists/bullseye/main/installer-arm64/current/images/netboot/mini.iso)) it is heavily recommended you use this image, too, if possible. It is very lightweight and only offers to install core services. -

- -### **Post Install User Method** -The post install method must be executed by the `root` (`sudo su -`, `su -`), just follow the following steps: - -``` -git clone https://github.com/telekom-security/tpotce -cd tpotce/iso/installer/ -./install.sh --type=user -``` - -The installation will now start, you can now move on to the [T-Pot Installer](#t-pot-installer) section. -

- -### **Post-Install Auto Method** -You can also let the installer run automatically if you provide your own `tpot.conf`. An example is available in `tpotce/iso/installer/tpot.conf.dist`. This should make things easier in case you want to automate the installation i.e. with **Ansible**. - -Just follow these steps while adjusting `tpot.conf` to your needs: - -``` -git clone https://github.com/telekom-security/tpotce -cd tpotce/iso/installer/ -cp tpot.conf.dist tpot.conf -./install.sh --type=auto --conf=tpot.conf -``` -

- -# T-Pot Installer -Usage of the T-Pot Installer is mostly self explanatory, since the installer will guide you through the setup process. Depending on your installation method [ISO Based](#iso-based) or [Post Install](#post-install) you will be asked to create a password for the user `tsec` and / or create a `` and password. Make sure to remember the username and passwords you understand their meanings outlined in [User Types](#user-types). -

+## macOS & Windows +Sometimes it is just nice if you can spin up a T-Pot instance on macOS or Windows, i.e. for development, testing or just the fun of it. As Docker Desktop is rather limited not all honeypot types or T-Pot features are supported. Also remember, by default the macOS and Windows firewall are blocking access from remote, so testing is limited to the host. For production it is recommended to run T-Pot on [Linux](#choose-your-distro).
+To get things up and running just follow these steps: +1. Install Docker Desktop for [macOS](https://docs.docker.com/desktop/install/mac-install/) or [Windows](https://docs.docker.com/desktop/install/windows-install/). +2. Clone the GitHub repository: `git clone https://github.com/telekom-security/tpotce` +3. Go to: `cd ~/tpotce` +4. Copy `cp compose/mac_win.yml ./docker-compose.yml` +5. Create a `WEB_USER` by running `~/tpotce/genuser.sh` +6. Adjust the `.env` file by changing `TPOT_OSTYPE=linux` to either `mac` or `win`: + ``` + # OSType (linux, mac, win) + # Most docker features are available on linux + TPOT_OSTYPE=mac + ``` +7. You have to ensure on your own there are no port conflicts keeping T-Pot from starting up. +8. Start T-Pot: `docker compose up` or `docker compose up -d` if you want T-Pot to run in the background. +9. Stop T-Pot: `CTRL-C` (it if was running in the foreground) and / or `docker compose down -v` to stop T-Pot entirely. ## Installation Types -In the past T-Pot was only available as a [standalone](#standalone) solution with all services, tools, honeypots, etc. installed on to a single machine. Based on demand T-Pot now also offers a [distributed](#distributed) solution. While the standalone solution does not require additional explanation the distributed option requires you to select different editions (or flavors). -

-### **Standalone** -With T-Pot Standalone all services, tools, honeypots, etc. will be installed on to a single host. Make sure to meet the [system requirements](#system-requirements). You can choose from various predefined T-Pot editions (or flavors) depending on your personal use-case (you can always adjust `/opt/tpot/etc/tpot.yml` to your needs). +### Standard / HIVE +With T-Pot Standard / HIVE all services, tools, honeypots, etc. will be installed on to a single host which also serves as a HIVE endpoint. Make sure to meet the [system requirements](#system-requirements). You can adjust `~/tpotce/docker-compose.yml` to your personal use-case or create your very own configuration using `~/tpotce/compose/customizer.py` for a tailored T-Pot experience to your needs. Once the installation is finished you can proceed to [First Start](#first-start).

### **Distributed** The distributed version of T-Pot requires at least two hosts -- the T-Pot **HIVE**, which will host the Elastic Stack and T-Pot tools (install this first!), -- and a T-Pot **HIVE_SENSOR**, which will host the honeypots and transmit log data to the **HIVE's** Elastic Stack. - -To finalize the **HIVE_SENSOR** installation continue to [Distributed Deployment](#distributed-deployment). +- the T-Pot **HIVE**, the standard installation of T-Pot (install this first!), +- and a T-Pot **SENSOR**, which will host only the honeypots, some tools and transmit log data to the **HIVE**. +- The **SENSOR** will not start before finalizing the **SENSOR** installation as described in [Distributed Deployment](#distributed-deployment).

-## Cloud Deployments -Located in the [`cloud`](cloud) folder. -Currently there are examples for Ansible & Terraform. -If you would like to contribute, you can add other cloud deployments like Chef or Puppet or extend current methods with other cloud providers. +## Uninstall T-Pot +Uninstallation of T-Pot is only available on the [supported Linux distros](#choose-your-distro).
+To uninstall T-Pot run `~/tpotce/uninstall.sh` and follow the uninstaller instructions, you will have to enter your password at least once.
+Once the uninstall is finished reboot the machine `sudo reboot`

-*Please note*: Cloud providers usually offer adjusted Debian OS images, which might not be compatible with T-Pot. There is no cloud provider support provided of any kind. -

- -### **Ansible Deployment** -You can find an [Ansible](https://www.ansible.com/) based T-Pot deployment in the [`cloud/ansible`](cloud/ansible) folder. -The Playbook in the [`cloud/ansible/openstack`](cloud/ansible/openstack) folder is reusable for all **OpenStack** clouds out of the box. - -It first creates all resources (security group, network, subnet, router), deploys one (or more) new servers and then installs and configures T-Pot on them. - -You can have a look at the Playbook and easily adapt the deploy role for other [cloud providers](https://docs.ansible.com/ansible/latest/scenario_guides/cloud_guides.html). Check out [Ansible Galaxy](https://galaxy.ansible.com/search?keywords=&order_by=-relevance&page=1&deprecated=false&type=collection&tags=cloud) for more cloud collections. - -*Please note*: Cloud providers usually offer adjusted Debian OS images, which might not be compatible with T-Pot. There is no cloud provider support provided of any kind. -

- -### **Terraform Configuration** -You can find a [Terraform](https://www.terraform.io/) configuration in the [`cloud/terraform`](cloud/terraform) folder. -This can be used to launch a virtual machine, bootstrap any dependencies and install T-Pot in a single step. - -Configurations for **Amazon Web Services** (AWS) and **Open Telekom Cloud** (OTC) are currently included. -This can easily be extended to support other [Terraform providers](https://registry.terraform.io/browse/providers?category=public-cloud%2Ccloud-automation%2Cinfrastructure). - -*Please note*: Cloud providers usually offer adjusted Debian OS images, which might not be compatible with T-Pot. There is no cloud provider support provided of any kind. -

- # First Start -Once the T-Pot Installer successfully finishes, the system will automatically reboot and you will be presented with the T-Pot login screen. Logins are according to the [User Types](#user-types): +Once the T-Pot Installer successfully finishes, the system needs to be rebooted (`sudo reboot`). Once rebooted you can log into the system using the user you setup during the installation of the system. Logins are according to the [User Types](#user-types): -- user: **[`tsec` or ``]** +- user: **[``]** - pass: **[password]** -You can login from your browser and access Cockpit: `https://:64294` or via SSH to access the command line: `ssh -l [tsec,] -p 64295 `: +You can login via SSH to access the command line: `ssh -l -p 64295 `: -- user: **[`tsec` or ``]** -- pass: **[password]** +- user: **[``]** +- pass: **[password, ssh key recommended]** -You can also login from your browser and access the Nginx (T-Pot Web UI and tools): `https://:64297` -- user: **[``]** +You can also login from your browser and access the T-Pot WebUI and tools: `https://:64297` +- user: **[``]** - pass: **[password]**

@@ -422,30 +382,52 @@ There is not much to do except to login and check via `dps.sh` if all services a

## Distributed Deployment -With the distributed deployment firstly login to **HIVE** and the **HIVE_SENSOR** and check via `dps.sh` if all services and honeypots are starting up correctly. Once you have confirmed everything is working fine you need to deploy the **HIVE_SENSOR** to the **HIVE** in order to transmit honeypot logs to the Elastic Stack. +Once you have rebooted the **SENSOR** as instructed by the installer you can continue with the distributed deployment by logging into **HIVE** and go to `cd ~/tpotce` folder. + +If you have not done already generate a SSH key to securely login to the **SENSOR** and to allow `Ansible` to run a playbook on the sensor: +1. Run `ssh-keygen`, follow the instructions and leave the passphrase empty: + ``` + Generating public/private rsa key pair. + Enter file in which to save the key (/home//.ssh/id_rsa): + Enter passphrase (empty for no passphrase): + Enter same passphrase again: + Your identification has been saved in /home//.ssh/id_rsa + Your public key has been saved in /home//.ssh/id_rsa.pub + ``` +2. Deploy the key to the SENSOR by running `ssh-copy-id -p 64295 @)`: + ``` + /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home//.ssh/id_rsa.pub" + The authenticity of host '[]:64295 ([]:64295)' can't be stablished. + ED25519 key fingerprint is SHA256:naIDxFiw/skPJadTcgmWZQtgt+CdfRbUCoZn5RmkOnQ. + This key is not known by any other names. + Are you sure you want to continue connecting (yes/no/[fingerprint])? yes + /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed + /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys + @172.20.254.124's password: + + Number of key(s) added: 1 + + Now try logging into the machine, with: "ssh -p '64295' '@'" + and check to make sure that only the key(s) you wanted were added. + ``` +3. As suggested follow the instructions to test the connection `ssh -p '64295' '@'`. +4. Once the key is successfully deployed run `./deploy.sh` and follow the instructions.

-For **deployment** simply keep the **HIVE** login data ready and follow these steps while the `deploy.sh` script will setup the **HIVE** and **HIVE_SENSOR** for securely shipping and receiving logs: -``` -sudo su - -deploy.sh -``` - -The script will ask for the **HIVE** login data, the **HIVE** IP address, will create SSH keys accordingly and deploy them securely over a SSH connection to the **HIVE**. On the **HIVE** machine a user with the **HIVE_SENSOR** hostname is created, belonging to a user group `tpotlogs` which may only open a SSH tunnel via port `64295` and transmit Logstash logs to port `127.0.0.1:64305`, with no permission to login on a shell. You may review the config in `/etc/ssh/sshd_config` and the corresponding `autossh` settings in `docker/elk/logstash/dist/entrypoint.sh`. Settings and keys are stored in `/data/elk/logstash` and loaded as part of `/opt/tpot/etc/tpot.yml`. -

- - ## Community Data Submission -T-Pot is provided in order to make it accessible to all interested in honeypots. By default, the captured data is submitted to a community backend. This community backend uses the data to feed [Sicherheitstacho](https://sicherheitstacho.eu). -You may opt out of the submission by removing the `# Ewsposter service` from `/opt/tpot/etc/tpot.yml` by following these steps: +T-Pot is provided in order to make it accessible to everyone interested in honeypots. By default, the captured data is submitted to a community backend. This community backend uses the data to feed [Sicherheitstacho](https://sicherheitstacho.eu). +You may opt out of the submission by removing the `# Ewsposter service` from `~/tpotce/docker-compose.yml` by following these steps: 1. Stop T-Pot services: `systemctl stop tpot` -2. Open `tpot.yml`: `vi /opt/tpot/etc/tpot.yml` -3. Remove the following lines, save and exit vi (`:x!`): +2. Open `~/tpotce/docker-compose.yml`: `micro ~/tpotce/docker-compose.yml` +3. Remove the following lines, save and exit micro (`CTRL+Q`): ``` # Ewsposter service ewsposter: container_name: ewsposter restart: always + depends_on: + tpotinit: + condition: service_healthy networks: - ewsposter_local environment: @@ -457,12 +439,11 @@ You may opt out of the submission by removing the `# Ewsposter service` from `/o - EWS_HPFEEDS_SECRET=secret - EWS_HPFEEDS_TLSCERT=false - EWS_HPFEEDS_FORMAT=json - env_file: - - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/ewsposter:2203" + image: ${TPOT_REPO}/ewsposter:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} volumes: - - /data:/data - - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip + - ${TPOT_DATA_PATH}:/data + - ${TPOT_DATA_PATH}/ews/conf/ews.ip:/opt/ewsposter/ews.ip ``` 4. Start T-Pot services: `systemctl start tpot` @@ -470,39 +451,28 @@ It is encouraged not to disable the data submission as it is the main purpose of

## Opt-In HPFEEDS Data Submission -As an Opt-In it is now possible to also share T-Pot data with 3rd party HPFEEDS brokers. -If you want to share your T-Pot data you simply have to register an account with a 3rd party broker with its own benefits towards the community. You simply run `hpfeeds_optin.sh` which will ask for your credentials. It will automatically update `/opt/tpot/etc/tpot.yml` to deliver events to your desired broker. - -The script can accept a config file as an argument, e.g. `./hpfeeds_optin.sh --conf=hpfeeds.cfg` - -Your current config will also be stored in `/data/ews/conf/hpfeeds.cfg` where you can review or change it. -Be sure to apply any changes by running `./hpfeeds_optin.sh --conf=/data/ews/conf/hpfeeds.cfg`. -No worries: Your old config gets backed up in `/data/ews/conf/hpfeeds.cfg.old` - -Of course you can also rerun the `hpfeeds_optin.sh` script to change and apply your settings interactively. +As an Opt-In it is possible to share T-Pot data with 3rd party HPFEEDS brokers. +1. Follow the instructions [here](#community-data-submission) to stop the T-Pot services and open `~/tpotce/docker-compose.yml`. +2. Scroll down to the `ewsposter` section and adjust the HPFEEDS settings to your needs. +3. If you need to add a CA certificate add it to `~/tpotce/data/ews/conf` and set `EWS_HPFEEDS_TLSCERT=/data/ews/conf/`. +4. Start T-Pot services: `systemctl start tpot`.

- # Remote Access and Tools -T-Pot comes with some pre-installed services and tools which will make some of your research tasks or accessing T-Pot remote a lot easier. +Remote access to your host / T-Pot is possible with SSH (on **`tcp/64295`**) and some services and tools come with T-Pot to make some of your research tasks a lot easier.

-## SSH and Cockpit -According to the [User Types](#user-types) you can login from your browser and access Cockpit: `https://:64294` or via SSH to access the command line: `ssh -l [tsec,] -p 64295 `: +## SSH +According to the [User Types](#user-types) you can login via SSH to access the command line: `ssh -l -p 64295 `: -- user: **[`tsec` or ``]** +- user: **[``]** - pass: **[password]** - -Especially if you do not have a SSH client at hand and still want to access the machine with a command line option you can do so by accessing Cockpit. You can also add two factor authentication to Cockpit just by running `2fa.sh` on the command line. - -![Cockpit Overview](doc/cockpit_a.png) -![Cockpit Terminal](doc/cockpit_b.png)

## T-Pot Landing Page According to the [User Types](#user-types) you can open the T-Pot Landing Page from your browser via `https://:64297`: -- user: **[``]** +- user: **[``]** - pass: **[password]** ![T-Pot-WebUI](doc/tpotwebui.png) @@ -515,7 +485,7 @@ On the T-Pot Landing Page just click on `Kibana` and you will be forwarded to Ki

## Attack Map -On the T-Pot Landing Page just click on `Attack Map` and you will be forwarded to the Attack Map. Since the Attack Map utilizes web sockets you need to re-enter the `` credentials. +On the T-Pot Landing Page just click on `Attack Map` and you will be forwarded to the Attack Map. Since the Attack Map utilizes web sockets you may need to re-enter the `` credentials. ![AttackMap](doc/attackmap.png)

@@ -538,51 +508,67 @@ On the T-Pot Landing Page just click on `Spiderfoot` and you will be forwarded t ![Spiderfoot](doc/spiderfoot.png)

+# Configuration + +## T-Pot Config File +T-Pot offers a configuration file providing variables not only for the docker services (i.e. honeypots and tools) but also for the docker compose environment. The configuration file is hidden in `~/tpoce/.env`. There is also an example file (`env.example`) which holds the default configuration.
+Before the first start run `~/tpotce/genuser.sh` or setup the `WEB_USER` manually as described [here](#add-users-to-nginx-t-pot-webui). + +## Customize T-Pot Honeypots and Services + +In `~/tpotce/compose` you will find everything you need to adjust the T-Pot Standard / HIVE installation: +``` +customizer.py +mac_win.yml +mini.yml +mobile.yml +raspberry_showcase.yml +sensor.yml +standard.yml +tpot_services.yml +``` +The `.yml` files are docker compose files, each representing a different set of honeypots and tools with `tpot_services.yml` being a template for `customizer.py` to create a customized docker compose file.

+To activate a compose file follow these steps: +1. Stop T-Pot with `systemctl stop tpot`. +2. Copy the docker compose file `cp ~/tpotce/compose/ ~/tpotce/docker-compose.yml`. +3. Start T-Pot with `systemctl start tpot`. + +To create your customized docker compose file: +1. Go to `cd ~/tpotce/compose`. +2. Run `python3 customizer.py`. +3. The script will guide you through the process of creating your own `docker-compose.yml`. As some honeypots and services occupy the same ports it will check if any port conflicts are present and notify regarding the conflicting services. You then can resolve them manually by adjusting `docker-compose-custom.yml` or re-run the script. +4. Stop T-Pot with `systemctl stop tpot`. +5. Copy the custom docker compose file: `cp docker-compose-custom.yml ~/tpotce` and `cd ~/tpotce`. +6. Check if everything works by running `docker-compose -f docker-compose-custom.yml up`. In case of errors follow the [Docker Compose Specification](https://docs.docker.com/compose/compose-file/) for mitigation. Most likely it is just a port conflict you can adjust by editing the docker compose file. +6. If everything works just fine press `CTRL-C` to stop the containers and run `docker-compose -f docker-compose-custom.yml down -v`. +7. Replace docker compose file with the new and successfully tested customized docker compose file `mv ~/tpotce/docker-compose-custom.yml ~/tpotce/docker-compose.yml`. +8. Start T-Pot with `systemctl start tpot`. +

# Maintenance -T-Pot is designed to be low maintenance. Basically there is nothing you have to do but let it run, however you should read this section closely. +T-Pot is designed to be low maintenance. Since almost everything is provided through docker images there is basically nothing you have to do but let it run. We will upgrade the docker images regularly to reduce the risks of compromise; however you should read this section closely.

+Should an update fail, opening an issue or a discussion will help to improve things in the future, but the offered solution will ***always*** be to perform a ***fresh install*** as we simply ***cannot*** provide any support for lost data!

-## Updates -While security updates are installed automatically by the OS and docker images are pulled once per day (`/etc/crontab`) to check for updated images, T-Pot offers the option to be updated to the latest master and / or upgrade a previous version. Updating and upgrading always introduces the risk of losing your data, so it is heavily encouraged to backup your machine before proceeding. +## General Updates +T-Pot security depends on the updates provided for the [supported Linux distro images](#choose-your-distro). Make sure to review the OS documentation and ensure updates are installed regularly by the OS. By default (`~/tpotce/.env`) `TPOT_PULL_POLICY=always` will ensure that at every T-Pot start docker will check for new docker images and download them before creating the containers.

-Should an update fail, opening an issue or a discussion will help to improve things in the future, but the solution will always be to perform a ***fresh install*** as we simply ***cannot*** provide any support for lost data! -
-## ***If you made any relevant changes to the T-Pot config files make sure to create a backup first!*** -## ***Updates may have unforeseen consequences. Create a backup of the machine or the files with the most value to your work!*** -
+ +## Update Script +T-Pot releases are offered through GitHub and can be pulled using `~/tpotce/update.sh`.
+***If you made any relevant changes to the T-Pot config files make sure to create a backup first!***
+***Updates may have unforeseen consequences. Create a backup of the machine or the files most valuable to your work!***
The update script will ... - ***mercilessly*** overwrite local changes to be in sync with the T-Pot master branch - - upgrade the system to the latest packages available for the installed Debian version - - update all resources to be in sync with the T-Pot master branch - - ensure all T-Pot relevant system files will be patched / copied into the original T-Pot state - - restore your custom ews.cfg and HPFEED settings from `/data/ews/conf` - - -### **Update from 20.06.x** -Due to massive changes in Elasticsearch automated updates from 20.06.x are no longer available. If you have not upgraded already a fresh install with 22.04.x is required. - - -### **Updates for 22.04.x** -If you are already running T-Pot 22.04.x you simply run the update script ***after you backed up any relevant data***: -``` -sudo su - -cd /opt/tpot/ -./update.sh -``` + - create a full backup of the `~/tpotce` folder + - update all files in `~/tpotce` to be in sync with the T-Pot master branch + - restore your custom `ews.cfg` from `~/tpotce/data/ews/conf` and the T-Pot configuration (`~/tpotce/.env`). ## Known Issues The following issues are known, simply follow the described steps to solve them.

-### **Grub Fails to Reconfigure** -In some cases Grub fails to reconfigure, follow these commands to correct that error: -``` -sudo su - -DEBIAN_FRONTEND=dialog dpkg --configure grub-pc -``` - ### **Docker Images Fail to Download** Some time ago Docker introduced download [rate limits](https://docs.docker.com/docker-hub/download-rate-limit/#:~:text=Docker%20Hub%20limits%20the%20number,pulls%20per%206%20hour%20period.). If you are frequently downloading Docker images via a single or shared IP, the IP address might have exhausted the Docker download rate limit. Login to your Docker account to extend the rate limit. ``` @@ -590,100 +576,66 @@ sudo su - docker login ``` -### **Network Interface Fails** -After the installation it is possible your network interfaces are using a different naming scheme (`ens` => `eth`). In this case you need to adjust `/etc/network/interfaces` to reflect your NIC. - -Example: -``` -# This file describes the network interfaces available on your system -# and how to activate them. For more information, see interfaces(5). - -source /etc/network/interfaces.d/* - -# The loopback network interface -auto lo -iface lo inet loopback - -# The primary network interface -auto ens33 -iface ens33 inet dhcp -``` - -`ifconfig` / `ip a` revealed the interface is now named `eth0`, so you need to adjust `interfaces` accordingly: -``` -# This file describes the network interfaces available on your system -# and how to activate them. For more information, see interfaces(5). - -source /etc/network/interfaces.d/* - -# The loopback network interface -auto lo -iface lo inet loopback - -# The primary network interface -auto eth0 -iface eth0 inet dhcp -``` - +### **T-Pot Networking Fails** +T-Pot is designed to only run on machines with a single NIC. T-Pot will try to grab the interface with the default route, however it is not guaranteed that this will always succeed. At best use T-Pot on machines with only a single NIC. ## Start T-Pot -The T-Pot service automatically starts and stops on each reboot (which occurs once on a daily basis as setup in `/etc/crontab` during installation). +The T-Pot service automatically starts and stops on each reboot (which occurs once on a daily basis as setup in `sudo crontab -l` during installation).
-If you want to manually start the T-Pot service you can do so via `systemctl start tpot` and observe via `dps.sh 1` the startup of the containers. +If you want to manually start the T-Pot service you can do so via `systemctl start tpot` and observe via `dpsw` the startup of the containers.

## Stop T-Pot -The T-Pot service automatically starts and stops on each reboot (which occurs once on a daily basis as setup in `/etc/crontab` during installation). +The T-Pot service automatically starts and stops on each reboot (which occurs once on a daily basis as setup in `sudo crontab -l` during installation).
-If you want to manually stop the T-Pot service you can do so via `systemctl stop tpot` and observe via `dps.sh 1` the shutdown of the containers. +If you want to manually stop the T-Pot service you can do so via `systemctl stop tpot` and observe via `dpsw` the shutdown of the containers.

## T-Pot Data Folder -All persistent log files from the honeypots, tools and T-Pot related services are stored in `/data`. This includes collected artifacts which are not transmitted to the Elastic Stack. +All persistent log files from the honeypots, tools and T-Pot related services are stored in `~/tpotce/data`. This includes collected artifacts which are not transmitted to the Elastic Stack.

## Log Persistence -All log data stored in the [T-Pot Data Folder](#t-pot-data-folder) will be persisted for 30 days by default. The persistence for the log files can be changed in `/opt/tpot/etc/logrotate/logrotate.conf`. +All log data stored in the [T-Pot Data Folder](#t-pot-data-folder) will be persisted for 30 days by default.
-Elasticsearch indices are handled by the `tpot` Index Lifecycle Policy which can be adjusted directly in Kibana. +Elasticsearch indices are handled by the `tpot` Index Lifecycle Policy which can be adjusted directly in Kibana (make sure to "Include managed system policies"). ![IndexManagement1](doc/kibana_b.png)

- By default the `tpot` Index Lifecycle Policy keeps the indices for 30 days. This offers a good balance between storage and speed. However you may adjust the policy to your needs. ![IndexManagement2](doc/kibana_c.png)

-## Clean Up +## Factory Reset All log data stored in the [T-Pot Data Folder](#t-pot-data-folder) (except for Elasticsearch indices, of course) can be erased by running `clean.sh`. +Sometimes things might break beyond repair and it has never been easier to reset a T-Pot to factory defaults (make sure to enter `cd ~/tpotce`). +1. Stop T-Pot using `systemctl stop tpot`. +2. Move / Backup the `~/tpotce/data` folder to a safe place (this is optional, just in case). +3. Delete the `~/tpotce/data` folder using `sudo rm -rf ~/tpotce/data`. +4. Reset T-Pot to the last fetched commit: +``` +cd ~/tpotce/ +git reset --hard +``` +5. Now you can run `~/tpotce/install.sh`.

## Show Containers -You can show all T-Pot relevant containers by running `dps.sh` or `dps.sh [interval]`. The `interval (s)` will re-run `dps.sh` automatically. You may also run `glances` which will also give you more insight into system usage and available resources while still showing the containers running. +You can show all T-Pot relevant containers by running `dps` or `dpsw [interval]`. The `interval (s)` will re-run `dps.sh` periodically.

## Blackhole -Some users reported they wanted to have the option to run T-Pot in some sort of stealth mode without permanent visits of publicly known scanners and thus reducing the possibility of being exposed. While this is of course always a cat and mouse game T-Pot now offers a blackhole feature that is null routing all requests from [known mass scanners](https://raw.githubusercontent.com/stamparm/maltrail/master/trails/static/mass_scanner.txt) while still catching the events through Suricata. +Blackhole will run T-Pot in kind of a stealth mode manner without permanent visits of publicly known scanners and thus reducing the possibility of being exposed. While this is of course always a cat and mouse game the blackhole feature is null routing all requests from [known mass scanners](https://raw.githubusercontent.com/stamparm/maltrail/master/trails/static/mass_scanner.txt) while still catching the events through Suricata.
-The feature is activated by running `blackhole.sh add` which will download the mass scanner ip list, add the blackhole routes and re-add keep them active until `blackhole.sh del` permanently removes them. +The feature is activated by setting `TPOT_BLACKHOLE=DISABLED` in `~/tpotce/.env`, then run `systemctl stop tpot` and `systemctl start tpot` or `sudo reboot`.
-Enabling this feature will drastically reduce some attackers visibility and consequently result in less activity. However as already mentioned it is neither a guarantee for being completely stealth nor will it prevent fingerprinting of some honeypot services. +Enabling this feature will drastically reduce attackers visibility and consequently result in less activity. However as already mentioned it is neither a guarantee for being completely stealth nor will it prevent fingerprinting of some honeypot services.

## Add Users to Nginx (T-Pot WebUI) -Nginx (T-Pot WebUI) allows to add as many `` accounts as you want (according to the [User Types](#user-types)). - -To add a new user just follow these steps: -``` -sudo su - -systemctl stop tpot -htpasswd /data/nginx/conf/nginxpasswd -> New password: -> Re-type new password: -> Adding password for user foobar -systemctl start tpot -``` -If you want to remove users you just modify `nginxpasswd` with `vi` or any other editor, remove the corresponding line and restart T-Pot again. +Nginx (T-Pot WebUI) allows you to add as many `` accounts as you want (according to the [User Types](#user-types)).
+To **add** a new user run `~/tpotce/genuser.sh` which will also update the accounts without the need to restart T-Pot.
+To **remove** users open `~/tpotce/.env`, locate `WEB_USER` and remove the corresponding base64 string (to decode: `echo | base64 -d`, or open CyberChef and load "From Base64" recipe). For the changes to take effect you need to restart T-Pot using `systemctl stop tpot` and `systemctl start tpot` or `sudo reboot`.

## Import and Export Kibana Objects @@ -698,134 +650,58 @@ Some T-Pot updates will require you to update the Kibana objects. Either to supp This will export a NDJSON file with all your objects. Always run a full export to make sure all references are included. ### **Import** -1. [Download the NDJSON file](https://github.com/dtag-dev-sec/tpotce/blob/master/etc/objects/kibana_export.ndjson.zip) and unzip it. +1. [Download the NDJSON file](https://github.com/dtag-dev-sec/tpotce/blob/master/docker/tpotinit/dist/etc/objects/kibana_export.ndjson.zip) and unzip it. 2. Go to Kibana 3. Click on "Stack Management" 4. Click on "Saved Objects" 5. Click on "Import" and leave the defaults (check for existing objects and automatically overwrite conflicts) if you did not make personal changes to the Kibana objects. -6. Browse NDJSON file +6. Browse for NDJSON file When asked: "If any of the objects already exist, do you want to automatically overwrite them?" you answer with "Yes, overwrite all".

-## Switch Editions -You can switch between T-Pot editions (flavors) by running `tped.sh`. -

- -## Redeploy Hive Sensor -In case you need to re-deploy your Hive Sensor, i.e. the IP of your Hive has changed or you want to move the Hive Sensor to a new Hive, you simply follow these commands: -``` -sudo su - -systemctl stop tpot -rm /data/elk/logstash/* -deploy.sh -reboot -``` -

- -## Adjust tpot.yml -Maybe the available T-Pot editions do not apply to your use-case or you need a different set of honeypots. You can adjust `/opt/tpot/etc/tpot.yml` to your own preference. If you need examples of how this works, just follow the configuration of the existing editions (docker-compose files) in `/opt/tpot/etc/compose` and follow the [Docker Compose Specification](https://docs.docker.com/compose/compose-file/). -``` -sudo su - -systemctl stop tpot -vi /opt/tpot/etc/tpot.yml -docker-compose -f /opt/tpot/etc/tpot.yml up (to see if everything works, CTRL+C) -docker-compose -f /opt/tpot/etc/tpot.yml down -v -systemctl start tpot -``` -

- -## Enable Cockpit 2FA -You can enable two-factor-authentication for Cockpit by running `2fa.sh`. -

- # Troubleshooting Generally T-Pot is offered ***as is*** without any commitment regarding support. Issues and discussions can be opened, but be prepared to include basic necessary info, so the community is able to help.

-## Logging -* Check if your containers are running correctly: `dps.sh` - -* Check if your system resources are not exhausted: `htop`, `glances` - +## Logs +* Check if your containers are running correctly: `dps` +* Check if your system resources are not exhausted: `htop`, `docker stats` * Check if there is a port conflict: ``` systemctl stop tpot grc netstat -tulpen -vi /opt/tpot/etc/tpot.yml up -docker-compose -f /opt/tpot/etc/tpot.yml up +mi ~/tpotce/docker-compose.yml +docker-compose -f ~/tpotce/docker-compose.yml up CTRL+C -docker-compose -f /opt/tpot/etc/tpot.yml down -v +docker-compose -f ~/tpotce/docker-compose.yml down -v ``` - -* Check container logs: `docker logs -f ` - -* Check if you were locked out by [fail2ban](#fail2ban). -

- -## Fail2Ban -If you cannot login there are probably three possible reasons: -1. You need to review [User Types](#user-types) and understand the different users. -2. You are trying to SSH into T-Pot, but use `tcp/22` instead of `tcp/64295` or were using the incorrect user for Cockpit or Nginx (T-Pot WebUI). -3. You had too many wrong attempts from the above and got locked out by `fail2ban`. - -To resolve Fail2Ban lockouts run `fail2ban-client status`: - -``` -fail2ban-client status -Status -|- Number of jail: 3 -nginx-http-auth, pam-generic, sshd -``` - -`nginx-http-auth` refers to missed BasicAuth login attempts (Nginx / T-Pot WebUI) on `tcp/64295` - -`sshd` refers to missed OS SSH login attempts on `tcp/64295` - -`pam-generic` refers to missed OS Cockpit login attempts on `tcp/64294` - -Check all jails, i.e. `sshd`: - -``` -fail2ban-client status sshd -Status for the jail: sshd -|- Filter -| |- Currently failed: 0 -| |- Total failed: 0 -| `- File list: /var/log/auth.log -`- Actions - |- Currently banned: 0 - |- Total banned: 0 - `- Banned IP list: -``` - -If there are any banned IPs you can unban these with `fail2ban-client unban --all` or `fail2ban-client unban `. +* Check individual container logs: `docker logs -f ` +* Check `tpotinit` log: `cat ~/tpotce/data/tpotinit.log`

## RAM and Storage -The Elastic Stack is hungry for RAM, specifically `logstash` and `elasticsearch`. If the Elastic Stack is unavailable, does not receive any logs or simply keeps crashing it is most likely a RAM or Storage issue. +The Elastic Stack is hungry for RAM, specifically `logstash` and `elasticsearch`. If the Elastic Stack is unavailable, does not receive any logs or simply keeps crashing it is most likely a RAM or storage issue.
While T-Pot keeps trying to restart the services / containers run `docker logs -f ` (either `logstash` or `elasticsearch`) and check if there are any warnings or failures involving RAM. -Storage failures can be identified easier via `htop` or `glances`. +Storage failures can be identified easier via `htop`.

# Contact T-Pot is provided ***as is*** open source ***without*** any commitment regarding support ([see the disclaimer](#disclaimer)). -If you are a company or institution and wish a personal contact aside from [issues](#issues) and [discussions](#discussions) please get in contact with our [sales team](https://www.t-systems.com/de/en/security). - If you are a security researcher and want to responsibly report an issue please get in touch with our [CERT](https://www.telekom.com/en/corporate-responsibility/data-protection-data-security/security/details/introducing-deutsche-telekom-cert-358316).

## Issues Please report issues (errors) on our [GitHub Issues](https://github.com/telekom-security/tpotce/issues), but [troubleshoot](#troubleshooting) first. Issues not providing information to address the error will be closed or converted into [discussions](#discussions). -Feel free to use the search function, it is possible a similar issue has been addressed already, with the solution just a search away. +Use the search function first, it is possible a similar issue has been addressed or discussed already, with the solution just a search away.

## Discussions General questions, ideas, show & tell, etc. can be addressed on our [GitHub Discussions](https://github.com/telekom-security/tpotce/discussions). -Feel free to use the search function, it is possible a similar discussion has been opened already, with an answer just a search away. +Use the search function, it is possible a similar discussion has been opened already, with an answer just a search away.

# Licenses @@ -833,27 +709,24 @@ The software that T-Pot is built on uses the following licenses.
GPLv2: [conpot](https://github.com/mushorg/conpot/blob/master/LICENSE.txt), [dionaea](https://github.com/DinoTools/dionaea/blob/master/LICENSE), [honeytrap](https://github.com/armedpot/honeytrap/blob/master/LICENSE), [suricata](http://suricata-ids.org/about/open-source/)
GPLv3: [adbhoney](https://github.com/huuck/ADBHoney), [elasticpot](https://gitlab.com/bontchev/elasticpot/-/blob/master/LICENSE), [ewsposter](https://github.com/telekom-security/ews/), [log4pot](https://github.com/thomaspatzke/Log4Pot/blob/master/LICENSE), [fatt](https://github.com/0x4D31/fatt/blob/master/LICENSE), [heralding](https://github.com/johnnykv/heralding/blob/master/LICENSE.txt), [ipphoney](https://gitlab.com/bontchev/ipphoney/-/blob/master/LICENSE), [redishoneypot](https://github.com/cypwnpwnsocute/RedisHoneyPot/blob/main/LICENSE), [sentrypeer](https://github.com/SentryPeer/SentryPeer/blob/main/LICENSE.GPL-3.0-only), [snare](https://github.com/mushorg/snare/blob/master/LICENSE), [tanner](https://github.com/mushorg/snare/blob/master/LICENSE)
Apache 2 License: [cyberchef](https://github.com/gchq/CyberChef/blob/master/LICENSE), [dicompot](https://github.com/nsmfoo/dicompot/blob/master/LICENSE), [elasticsearch](https://github.com/elasticsearch/elasticsearch/blob/master/LICENSE.txt), [logstash](https://github.com/elasticsearch/logstash/blob/master/LICENSE), [kibana](https://github.com/elasticsearch/kibana/blob/master/LICENSE.md), [docker](https://github.com/docker/docker/blob/master/LICENSE) -
MIT license: [ciscoasa](https://github.com/Cymmetria/ciscoasa_honeypot/blob/master/LICENSE), [ddospot](https://github.com/aelth/ddospot/blob/master/LICENSE), [elasticvue](https://github.com/cars10/elasticvue/blob/master/LICENSE), [glutton](https://github.com/mushorg/glutton/blob/master/LICENSE), [hellpot](https://github.com/yunginnanet/HellPot/blob/master/LICENSE), [maltrail](https://github.com/stamparm/maltrail/blob/master/LICENSE) +
MIT license: [autoheal](https://github.com/willfarrell/docker-autoheal?tab=MIT-1-ov-file#readme), [ciscoasa](https://github.com/Cymmetria/ciscoasa_honeypot/blob/master/LICENSE), [ddospot](https://github.com/aelth/ddospot/blob/master/LICENSE), [elasticvue](https://github.com/cars10/elasticvue/blob/master/LICENSE), [glutton](https://github.com/mushorg/glutton/blob/master/LICENSE), [hellpot](https://github.com/yunginnanet/HellPot/blob/master/LICENSE), [maltrail](https://github.com/stamparm/maltrail/blob/master/LICENSE)
Unlicense: [endlessh](https://github.com/skeeto/endlessh/blob/master/UNLICENSE) -
Other: [citrixhoneypot](https://github.com/MalwareTech/CitrixHoneypot#licencing-agreement-malwaretech-public-licence), [cowrie](https://github.com/cowrie/cowrie/blob/master/LICENSE.rst), [mailoney](https://github.com/awhitehatter/mailoney), [Debian licensing](https://www.debian.org/legal/licenses/), [Elastic License](https://www.elastic.co/licensing/elastic-license) +
Other: [citrixhoneypot](https://github.com/MalwareTech/CitrixHoneypot#licencing-agreement-malwaretech-public-licence), [cowrie](https://github.com/cowrie/cowrie/blob/master/LICENSE.rst), [mailoney](https://github.com/awhitehatter/mailoney), [Elastic License](https://www.elastic.co/licensing/elastic-license), [Wordpot](https://github.com/gbrindisi/wordpot)
AGPL-3.0: [honeypots](https://github.com/qeeqbox/honeypots/blob/main/LICENSE) +
[Public Domain (CC)](https://creativecommons.org/publicdomain/zero/1.0/): [Harvard Dataverse](https://dataverse.harvard.edu/dataverse/harvard/?q=dicom)

# Credits -Without open source and the fruitful development community (we are proud to be a part of), T-Pot would not have been possible! Our thanks are extended but not limited to the following people and organizations: +Without open source and the development community we are proud to be a part of, T-Pot would not have been possible! Our thanks are extended but not limited to the following people and organizations: ### The developers and development communities of * [adbhoney](https://github.com/huuck/ADBHoney/graphs/contributors) -* [apt-fast](https://github.com/ilikenwf/apt-fast/graphs/contributors) -* [bento](https://github.com/migueravila/Bento/graphs/contributors) * [ciscoasa](https://github.com/Cymmetria/ciscoasa_honeypot/graphs/contributors) * [citrixhoneypot](https://github.com/MalwareTech/CitrixHoneypot/graphs/contributors) -* [cockpit](https://github.com/cockpit-project/cockpit/graphs/contributors) * [conpot](https://github.com/mushorg/conpot/graphs/contributors) * [cowrie](https://github.com/cowrie/cowrie/graphs/contributors) * [ddospot](https://github.com/aelth/ddospot/graphs/contributors) -* [debian](http://www.debian.org/) * [dicompot](https://github.com/nsmfoo/dicompot/graphs/contributors) * [dionaea](https://github.com/DinoTools/dionaea/graphs/contributors) * [docker](https://github.com/docker/docker/graphs/contributors) @@ -877,22 +750,23 @@ Without open source and the fruitful development community (we are proud to be a * [medpot](https://github.com/schmalle/medpot/graphs/contributors) * [p0f](http://lcamtuf.coredump.cx/p0f3/) * [redishoneypot](https://github.com/cypwnpwnsocute/RedisHoneyPot/graphs/contributors) -* [sentrypeer](https://github.com/SentryPeer/SentryPeer/graphs/contributors), +* [sentrypeer](https://github.com/SentryPeer/SentryPeer/graphs/contributors) * [spiderfoot](https://github.com/smicallef/spiderfoot) * [snare](https://github.com/mushorg/snare/graphs/contributors) * [tanner](https://github.com/mushorg/tanner/graphs/contributors) * [suricata](https://github.com/inliniac/suricata/graphs/contributors) +* [wordpot](https://github.com/gbrindisi/wordpot) **The following companies and organizations** -* [debian](https://www.debian.org/) * [docker](https://www.docker.com/) * [elastic.io](https://www.elastic.co/) * [honeynet project](https://www.honeynet.org/) -* [intel](http://www.intel.com) **... and of course ***you*** for joining the community!**

+Thank you for playing πŸ’– + # Testimonials One of the greatest feedback we have gotten so far is by one of the Conpot developers:
***"[...] I highly recommend T-Pot which is ... it's not exactly a swiss army knife .. it's more like a swiss army soldier, equipped with a swiss army knife. Inside a tank. A swiss tank. [...]"*** @@ -901,3 +775,5 @@ And from @robcowart (creator of [ElastiFlow](https://github.com/robcowart/elasti ***"#TPot is one of the most well put together turnkey honeypot solutions. It is a must-have for anyone wanting to analyze and understand the behavior of malicious actors and the threat they pose to your organization."***

**Thank you!** + +![Alt](https://repobeats.axiom.co/api/embed/642a1032ac85996c81b12cf9f6393103058b8a04.svg "Repobeats analytics image") diff --git a/SECURITY.md b/SECURITY.md index 56c91e75..2612f151 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,19 +2,22 @@ ## Supported Versions -| Version | Supported | -| ------- | ------------------ | -| 22.04.x | :white_check_mark: | +| Version | Supported | +|-------|--------------------| +| 24.04 | :white_check_mark: | ## Reporting a Vulnerability -We take security of T-Pot very seriously. If one of T-Pot's components is affected, it is most likely that a upstream component we rely on is involved, such as a honeypot, docker image, tool or package. Together we will find the best possible way to remedy the situation. +We prioritize the security of T-Pot highly. Often, vulnerabilities in T-Pot components stem from upstream dependencies, including honeypots, Docker images, tools, or packages. We are committed to working together to resolve any issues effectively. -Before you submit a possible vulnerability, please ensure you have done the following: -1. You have checked the documentation, issues and discussions if the detected behavior is typical and does not revolve around other issues. I.e. Cowrie will be detected with outgoing conncection requests or T-Pot opening all possible TCP ports which Honeytrap enabled install flavors will do as a feature. -2. You have identified the vulnerable component and isolated your finding (honeypot, docker image, tool, package, etc.). -3. You have a detailed description including log files, possibly debug files, with all steps necessary for us to reproduce / trigger the behaviour or vulnerability. At best you already have a possible solution, hotfix, fix or patch to remedy the situation and want to submit a PR. -4. You have checked if the possible vulnerability is known upstream. If a fix / patch is already available, please provide the necessary info. +Please follow these steps before reporting a potential vulnerability: -We will get back to you as fast as possible. In case you think this is an emergency for the whole T-Pot community feel free to speed things up by **responsibly** informing our [CERT](https://www.telekom.com/en/corporate-responsibility/data-protection-data-security/security/details/introducing-deutsche-telekom-cert-358316). +1. Verify that the behavior you've observed isn't already documented as a normal aspect or unrelated issue of T-Pot. For example, Cowrie may initiate outgoing connections, or T-Pot might open all possible TCP portsβ€”a feature enabled by Honeytrap. +2. Clearly identify which component is vulnerable (e.g., a specific honeypot, Docker image, tool, package) and isolate the issue. +3. Provide a detailed description of the issue, including log and, if available, debug files. Include all steps necessary to reproduce the vulnerability. If you have a proposed solution, hotfix, or patch, please be prepared to submit a pull request (PR). +4. Check whether the vulnerability is already known upstream. If there is an existing fix or patch, include that information in your report. + +This approach ensures a thorough and efficient resolution process. + +We aim to respond as quickly as possible. If you believe the issue poses an immediate threat to the entire T-Pot community, you can expedite the process by responsibly alerting our [CERT](https://www.telekom.com/en/corporate-responsibility/data-protection-data-security/security/details/introducing-deutsche-telekom-cert-358316). diff --git a/bin/2fa.sh b/bin/2fa.sh deleted file mode 100755 index bbd82c8f..00000000 --- a/bin/2fa.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash - -# Make sure script is started as non-root. -myWHOAMI=$(whoami) -if [ "$myWHOAMI" = "root" ] - then - echo "Need to run as non-root ..." - echo "" - exit -fi - -# set vars, check deps -myPAM_COCKPIT_FILE="/etc/pam.d/cockpit" -if ! [ -s "$myPAM_COCKPIT_FILE" ]; - then - echo "### Cockpit PAM module config does not exist. Something went wrong." - echo "" - exit 1 -fi -myPAM_COCKPIT_GA=" - -# google authenticator for two-factor -auth required pam_google_authenticator.so -" -myAUTHENTICATOR=$(which google-authenticator) -if [ "$myAUTHENTICATOR" == "" ]; - then - echo "### Could not locate google-authenticator, trying to install (if asked provide root password)." - echo "" - sudo apt-get update - sudo apt-get install -y libpam-google-authenticator - exec "$1" "$2" - exit 1 -fi - - -# write PAM changes -function fuWRITE_PAM_CHANGES { - myCHECK=$(cat $myPAM_COCKPIT_FILE | grep -c "google") - if ! [ "$myCHECK" == "0" ]; - then - echo "### PAM config already enabled. Skipped." - echo "" - else - echo "### Updating PAM config for Cockpit (if asked provide root password)." - echo "$myPAM_COCKPIT_GA" | sudo tee -a $myPAM_COCKPIT_FILE - sudo systemctl restart cockpit - fi -} - -# create 2fa -function fuGEN_TOKEN { - echo "### Now generating token for Google Authenticator." - echo "" - google-authenticator -t -d -r 3 -R 30 -w 17 -} - - -# main -echo "### This script will enable Two Factor Authentication for Cockpit." -echo "" -echo "### Please download one of the many authenticator apps from the appstore of your choice." -echo "" -while true; - do - read -p "### Ready to start (y/n)? " myANSWER - case $myANSWER in - [Yy]* ) echo "### OK. Starting ..."; break;; - [Nn]* ) echo "### Exiting."; exit;; - esac -done - -fuWRITE_PAM_CHANGES -fuGEN_TOKEN - -echo "Done. Re-run this script by every user who needs Cockpit access." -echo "" diff --git a/bin/backup_es_folders.sh b/bin/backup_es_folders.sh deleted file mode 100755 index 3d15261b..00000000 --- a/bin/backup_es_folders.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/bash -# Run as root only. -myWHOAMI=$(whoami) -if [ "$myWHOAMI" != "root" ]; - then - echo "Need to run as root ..." - exit -fi - -if [ "$1" == "" ] || [ "$1" != "all" ] && [ "$1" != "base" ]; - then - echo "Usage: backup_es_folders [all, base]" - echo " all = backup all ES folder" - echo " base = backup only Kibana index". - echo - exit -fi - -# Backup all ES relevant folders -# Make sure ES is available -myES="http://127.0.0.1:64298/" -myESSTATUS=$(curl -s -XGET ''$myES'_cluster/health' | jq '.' | grep -c green) -if ! [ "$myESSTATUS" = "1" ] - then - echo "### Elasticsearch is not available, try starting via 'systemctl start tpot'." - exit - else - echo "### Elasticsearch is available, now continuing." - echo -fi - -# Set vars -myCOUNT=1 -myDATE=$(date +%Y%m%d%H%M) -myELKPATH="/data/elk/data" -myKIBANAINDEXNAME=$(curl -s -XGET ''$myES'_cat/indices/.kibana' | awk '{ print $4 }') -myKIBANAINDEXPATH=$myELKPATH/indices/$myKIBANAINDEXNAME - -# Let's ensure normal operation on exit or if interrupted ... -function fuCLEANUP { - ### Start ELK - systemctl start tpot - echo "### Now starting T-Pot ..." -} -trap fuCLEANUP EXIT - -# Stop T-Pot to lift db lock -echo "### Now stopping T-Pot" -systemctl stop tpot -sleep 2 - -# Backup DB in 2 flavors -echo "### Now backing up Elasticsearch folders ..." -if [ "$1" == "all" ]; - then - tar cvfz "elkall_"$myDATE".tgz" $myELKPATH -elif [ "$1" == "base" ]; - then - tar cvfz "elkbase_"$myDATE".tgz" $myKIBANAINDEXPATH -fi - diff --git a/bin/dps.sh b/bin/dps.sh deleted file mode 100755 index b5969435..00000000 --- a/bin/dps.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/bash - -# Run as root only. -myWHOAMI=$(whoami) -if [ "$myWHOAMI" != "root" ] - then - echo "Need to run as root ..." - exit -fi - -myPARAM="$1" -if [[ $myPARAM =~ ^([1-9]|[1-9][0-9]|[1-9][0-9][0-9])$ ]]; - then - watch --color -n $myPARAM "$0" - exit -fi - -# Show current status of T-Pot containers -myCONTAINERS="$(cat /opt/tpot/etc/tpot.yml | grep -v '#' | grep container_name | cut -d: -f2 | sort | tr -d " ")" -myRED="" -myGREEN="" -myBLUE="" -myWHITE="" -myMAGENTA="" - -# Blackhole Status -myBLACKHOLE_STATUS=$(ip r | grep "blackhole" -c) -if [ "$myBLACKHOLE_STATUS" -gt "500" ]; - then - myBLACKHOLE_STATUS="${myGREEN}ENABLED" - else - myBLACKHOLE_STATUS="${myRED}DISABLED" -fi - -function fuGETTPOT_STATUS { -# T-Pot Status -myTPOT_STATUS=$(systemctl status tpot | grep "Active" | awk '{ print $2 }') -if [ "$myTPOT_STATUS" == "active" ]; - then - echo "${myGREEN}ACTIVE" - else - echo "${myRED}INACTIVE" -fi -} - -function fuGETSTATUS { -grc --colour=on docker ps -f status=running -f status=exited --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep -v "NAME" | sort -} - -function fuGETSYS { -printf "[ ========| System |======== ]\n" -printf "${myBLUE}%+11s ${myWHITE}%-20s\n" "DATE: " "$(date)" -printf "${myBLUE}%+11s ${myWHITE}%-20s\n" "UPTIME: " "$(grc --colour=on uptime)" -printf "${myMAGENTA}%+11s %-20s\n" "T-POT: " "$(fuGETTPOT_STATUS)" -printf "${myMAGENTA}%+11s %-20s\n" "BLACKHOLE: " "$myBLACKHOLE_STATUS${myWHITE}" -echo -} - - myDPS=$(fuGETSTATUS) - myDPSNAMES=$(echo "$myDPS" | awk '{ print $1 }' | sort) - fuGETSYS - printf "%-21s %-28s %s\n" "NAME" "STATUS" "PORTS" - if [ "$myDPS" != "" ]; - then - echo "$myDPS" - fi - for i in $myCONTAINERS; do - myAVAIL=$(echo "$myDPSNAMES" | grep -o "$i" | uniq | wc -l) - if [ "$myAVAIL" = "0" ]; - then - printf "%-28s %-28s\n" "$myRED$i" "DOWN$myWHITE" - fi - done diff --git a/bin/tpdclean.sh b/bin/tpdclean.sh deleted file mode 100755 index 7ae50398..00000000 --- a/bin/tpdclean.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash -# T-Pot Compose and Container Cleaner -# Set colors -myRED="" -myGREEN="" -myWHITE="" - -# Only run with command switch -if [ "$1" != "-y" ]; then - echo $myRED"### WARNING"$myWHITE - echo "" - echo $myRED"###### This script is only intended for the tpot.service."$myWHITE - echo $myRED"###### Run first and then ."$myWHITE - echo $myRED"###### Be aware, all T-Pot container volumes and images will be removed."$myWHITE - echo "" - echo $myRED"### WARNING "$myWHITE - echo - exit -fi - -# Remove old containers, images and volumes -docker-compose -f /opt/tpot/etc/tpot.yml down -v >> /dev/null 2>&1 -docker-compose -f /opt/tpot/etc/tpot.yml rm -v >> /dev/null 2>&1 -docker network rm $(docker network ls -q) >> /dev/null 2>&1 -docker volume rm $(docker volume ls -q) >> /dev/null 2>&1 -docker rm -v $(docker ps -aq) >> /dev/null 2>&1 -docker rmi $(docker images | grep "" | awk '{print $3}') >> /dev/null 2>&1 -docker rmi $(docker images | grep "2203" | awk '{print $3}') >> /dev/null 2>&1 -exit 0 diff --git a/bin/tped.sh b/bin/tped.sh deleted file mode 100755 index 1eadbdff..00000000 --- a/bin/tped.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash - -# Run as root only. -myWHOAMI=$(whoami) -if [ "$myWHOAMI" != "root" ] - then - echo "Need to run as root ..." - exit -fi - -# set backtitle, get filename -myBACKTITLE="T-Pot Edition Selection Tool" -myYMLS=$(cd /opt/tpot/etc/compose/ && ls -1 *.yml) -myLINK="/opt/tpot/etc/tpot.yml" - -# Let's load docker images in parallel -function fuPULLIMAGES { -local myTPOTCOMPOSE="/opt/tpot/etc/tpot.yml" -for name in $(cat $myTPOTCOMPOSE | grep -v '#' | grep image | cut -d'"' -f2 | uniq) - do - docker pull $name & - done -wait -echo -} - -# setup menu -for i in $myYMLS; - do - myITEMS+="$i $(echo $i | cut -d "." -f1 | tr [:lower:] [:upper:]) " -done -myEDITION=$(dialog --backtitle "$myBACKTITLE" --menu "Select T-Pot Edition" 18 50 1 $myITEMS 3>&1 1>&2 2>&3 3>&-) -if [ "$myEDITION" == "" ]; - then - echo "Have a nice day!" - exit -fi -dialog --backtitle "$myBACKTITLE" --title "[ Activate now? ]" --yesno "\n$myEDITION" 7 50 -myOK=$? -if [ "$myOK" == "0" ]; - then - echo "OK - Activating and downloading latest images." - systemctl stop tpot - if [ "$(docker ps -aq)" != "" ]; - then - docker stop $(docker ps -aq) - docker rm $(docker ps -aq) - fi - rm -f $myLINK - ln -s /opt/tpot/etc/compose/$myEDITION $myLINK - fuPULLIMAGES - systemctl start tpot - echo "Done. Use \"dps.sh\" for monitoring" - else - echo "Have a nice day!" -fi diff --git a/bin/updateip.sh b/bin/updateip.sh deleted file mode 100755 index c63a3e64..00000000 --- a/bin/updateip.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/bash -# Let's add the first local ip to the /etc/issue and external ip to ews.ip file -# If the external IP cannot be detected, the internal IP will be inherited. -source /etc/environment -myCHECKIFSENSOR=$(head -n 1 /opt/tpot/etc/tpot.yml | grep "Sensor" | wc -l) -myUUID=$(lsblk -o MOUNTPOINT,UUID | grep -e "^/ " | awk '{ print $2 }') -myLOCALIP=$(hostname -I | awk '{ print $1 }') -myEXTIP=$(/opt/tpot/bin/myip.sh) -if [ "$myEXTIP" = "" ]; - then - myEXTIP=$myLOCALIP - myEXTIP_LAT="49.865835022498125" - myEXTIP_LONG="8.62606472775735" - else - myEXTIP_LOC=$(curl -s ipinfo.io/$myEXTIP/loc) - myEXTIP_LAT=$(echo "$myEXTIP_LOC" | cut -f1 -d",") - myEXTIP_LONG=$(echo "$myEXTIP_LOC" | cut -f2 -d",") -fi - -# Load Blackhole routes if enabled -myBLACKHOLE_FILE1="/etc/blackhole/mass_scanner.txt" -myBLACKHOLE_FILE2="/etc/blackhole/mass_scanner_cidr.txt" -if [ -f "$myBLACKHOLE_FILE1" ] || [ -f "$myBLACKHOLE_FILE2" ]; - then - /opt/tpot/bin/blackhole.sh add -fi - -myBLACKHOLE_STATUS=$(ip r | grep "blackhole" -c) -if [ "$myBLACKHOLE_STATUS" -gt "500" ]; - then - myBLACKHOLE_STATUS="| BLACKHOLE: [ ENABLED ]" - else - myBLACKHOLE_STATUS="| BLACKHOLE: [ DISABLED ]" -fi - -mySSHUSER=$(cat /etc/passwd | grep 1000 | cut -d ':' -f1) - -# Export -export myUUID -export myLOCALIP -export myEXTIP -export myEXTIP_LAT -export myEXTIP_LONG -export myBLACKHOLE_STATUS -export mySSHUSER - -# Build issue -echo "" > /etc/issue -toilet -f ivrit -F metal --filter border:metal "T-Pot 22.04" | sed 's/\\/\\\\/g' >> /etc/issue -echo >> /etc/issue -echo ",---- [ \n ] [ \d ] [ \t ]" >> /etc/issue -echo "|" >> /etc/issue -echo "| IP: $myLOCALIP ($myEXTIP)" >> /etc/issue -echo "| SSH: ssh -l tsec -p 64295 $myLOCALIP" >> /etc/issue -if [ "$myCHECKIFSENSOR" == "0" ]; - then - echo "| WEB: https://$myLOCALIP:64297" >> /etc/issue -fi -echo "| ADMIN: https://$myLOCALIP:64294" >> /etc/issue -echo "$myBLACKHOLE_STATUS" >> /etc/issue -echo "|" >> /etc/issue -echo "\`----" >> /etc/issue -echo >> /etc/issue -tee /data/ews/conf/ews.ip << EOF -[MAIN] -ip = $myEXTIP -EOF -tee /opt/tpot/etc/compose/elk_environment << EOF -HONEY_UUID=$myUUID -MY_EXTIP=$myEXTIP -MY_EXTIP_LAT=$myEXTIP_LAT -MY_EXTIP_LONG=$myEXTIP_LONG -MY_INTIP=$myLOCALIP -MY_HOSTNAME=$HOSTNAME -EOF - -if [ -s "/data/elk/logstash/ls_environment" ]; - then - source /data/elk/logstash/ls_environment - tee -a /opt/tpot/etc/compose/elk_environment << EOF -MY_TPOT_TYPE=$MY_TPOT_TYPE -MY_SENSOR_PRIVATEKEYFILE=$MY_SENSOR_PRIVATEKEYFILE -MY_HIVE_USERNAME=$MY_HIVE_USERNAME -MY_HIVE_IP=$MY_HIVE_IP -EOF -fi - -chown tpot:tpot /data/ews/conf/ews.ip -chmod 770 /data/ews/conf/ews.ip diff --git a/cloud/.gitignore b/cloud/.gitignore deleted file mode 100644 index f50f50f8..00000000 --- a/cloud/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Ansible -*.retry - -# Terraform -**/.terraform -**/terraform.* - -# OpenStack clouds -**/clouds.yaml -**/secure.yaml diff --git a/cloud/ansible/README.md b/cloud/ansible/README.md deleted file mode 100644 index 5be6a912..00000000 --- a/cloud/ansible/README.md +++ /dev/null @@ -1,257 +0,0 @@ -# T-Pot Ansible - -Here you can find a ready-to-use solution for your automated T-Pot deployment using [Ansible](https://www.ansible.com/). -It consists of an Ansible Playbook with multiple roles, which is reusable for all [OpenStack](https://www.openstack.org/) based clouds (e.g. Open Telekom Cloud, Orange Cloud, Telefonica Open Cloud, OVH) out of the box. -Apart from that you can easily adapt the deploy role to use other [cloud providers](https://docs.ansible.com/ansible/latest/scenario_guides/cloud_guides.html). Check out [Ansible Galaxy](https://galaxy.ansible.com/search?keywords=&order_by=-relevance&page=1&deprecated=false&type=collection&tags=cloud) for more cloud collections. - -The Playbook first creates all resources (security group, network, subnet, router), deploys one (or more) new servers and then installs and configures T-Pot on them. - -This example showcases the deployment on our own OpenStack based Public Cloud Offering [Open Telekom Cloud](https://open-telekom-cloud.com/en). - -# Table of contents -- [Preparation of Ansible Master](#ansible-master) - - [Ansible Installation](#ansible) - - [OpenStack Collection Installation](#collection) - - [Agent Forwarding](#agent-forwarding) -- [Preparations in Open Telekom Cloud Console](#preparation) - - [Create new project](#project) - - [Create API user](#api-user) - - [Import Key Pair](#key-pair) -- [Clone Git Repository](#clone-git) -- [Settings and recommended values](#settings) - - [clouds.yaml](#clouds-yaml) - - [Ansible remote user](#remote-user) - - [Number of instances to deploy](#number) - - [Instance settings](#instance-settings) - - [User password](#user-password) - - [Configure `tpot.conf.dist`](#tpot-conf) - - [Optional: Custom `ews.cfg`](#ews-cfg) - - [Optional: Custom HPFEEDS](#hpfeeds) -- [Deploying a T-Pot](#deploy) -- [Further documentation](#documentation) - - -# Preparation of Ansible Master -You can either run the Ansible Playbook locally on your Linux or macOS machine or you can use an ECS (Elastic Cloud Server) on Open Telekom Cloud, which I did. -I used Ubuntu 18.04 for my Ansible Master Server, but other OSes are fine too. -Ansible works over the SSH Port, so you don't have to add any special rules to your Security Group. - - -## Ansible Installation -:warning: Ansible 2.10 or newer is required! - -Example for Ubuntu 18.04: - -At first we update the system: -`sudo apt update` -`sudo apt dist-upgrade` - -Then we need to add the repository and install Ansible: -`sudo apt-add-repository --yes --update ppa:ansible/ansible` -`sudo apt install ansible` - -For other OSes and Distros have a look at the official [Ansible Documentation](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html). - -If your OS does not offer a recent version of Ansible (>= 2.10) you should consider [installing Ansible with pip](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#installing-ansible-with-pip). -In short (if you already have Python3/pip3 installed): -``` -pip3 install ansible -``` - - -## OpenStack Collection Installation -For interacting with OpenStack resources in Ansible, you need to install the collection from Ansible Galaxy: -`ansible-galaxy collection install openstack.cloud` - - -## Agent Forwarding -If you run the Ansible Playbook remotely on your Ansible Master Server, Agent Forwarding must be enabled in order to let Ansible connect to newly created machines. -- On Linux or macOS: - - Create or edit `~/.ssh/config` - ``` - Host ANSIBLE_MASTER_IP - ForwardAgent yes - ``` -- On Windows using Putty: -![Putty Agent Forwarding](doc/putty_agent_forwarding.png) - - -# Preparations in Open Telekom Cloud Console -(You can skip this if you have already set up a project and an API account with key pair) -(Just make sure you know the naming for everything, as you need to configure the Ansible variables.) - -Before we can start deploying, we have to prepare the Open Telekom Cloud tenant. -For that, go to the [Web Console](https://auth.otc.t-systems.com/authui/login) and log in with an admin user. - - -## Create new project -I strongly advise you to create a separate project for the T-Pots in your tenant. -In my case I named it `tpot`. - -![Create new project](doc/otc_1_project.gif) - - -## Create API user -The next step is to create a new user account, which is restricted to the project. -This ensures that the API access is limited to that project. - -![Create API user](doc/otc_2_user.gif) - - -## Import Key Pair -:warning: Now log in with the newly created API user account and select your project. - -![Login as API user](doc/otc_3_login.gif) - -Import your SSH public key. - -![Import SSH Public Key](doc/otc_4_import_key.gif) - - - -# Clone Git Repository -Clone the `tpotce` repository to your Ansible Master: -`git clone https://github.com/telekom-security/tpotce.git` -All Ansible related files are located in the [`cloud/ansible/openstack`](openstack) folder. - - -# Settings and recommended values -You can configure all aspects of your Elastic Cloud Server and T-Pot before using the Playbook: - - -## clouds.yaml -Located at [`openstack/clouds.yaml`](openstack/clouds.yaml). -Enter your Open Telekom Cloud API user credentials here (username, password, project name, user domain name): -``` -clouds: - open-telekom-cloud: - profile: otc - auth: - project_name: eu-de_your_project - username: your_api_user - password: your_password - user_domain_name: OTC-EU-DE-000000000010000XXXXX -``` -You can also perform different authentication methods like sourcing OpenStack OS_* environment variables or providing an inline dictionary. -For more information have a look in the [openstack.cloud.server](https://docs.ansible.com/ansible/latest/collections/openstack/cloud/server_module.html) Ansible module documentation. - -If you already have your own `clouds.yaml` file or have multiple clouds in there, you can specify which one to use in the `openstack/my_os_cloud.yaml` file: -``` -# Enter the name of your cloud to use from clouds.yaml -cloud: open-telekom-cloud -``` - - -## Ansible remote user -You may have to adjust the `remote_user` in the Ansible Playbook under [`openstack/deploy_tpot.yaml`](openstack/deploy_tpot.yaml) depending on your Debian base image (e.g. on Open Telekom Cloud the default Debian user is `linux`). - - -## Number of instances to deploy -You can adjust the number of VMs/T-Pots that you want to create in [`openstack/deploy_tpot.yaml`](openstack/deploy_tpot.yaml): -``` -loop: "{{ range(0, 1) }}" -``` -One instance is set as the default, increase to your liking. - - -## Instance settings -Located at [`openstack/roles/create_vm/vars/main.yaml`](openstack/roles/create_vm/vars/main.yaml). -Here you can customize your virtual machine specifications: - - Choose an availability zone. For Open Telekom Cloud reference see [here](https://docs.otc.t-systems.com/en-us/endpoint/index.html). - - Change the OS image (For T-Pot we need Debian) - - (Optional) Change the volume size - - Specify your key pair (:warning: Mandatory) - - (Optional) Change the instance type (flavor) - `s3.medium.8` corresponds to 1 vCPU and 8GB of RAM and is the minimum required flavor. - A full list of Open Telekom Cloud flavors can be found [here](https://docs.otc.t-systems.com/en-us/usermanual/ecs/en-us_topic_0177512565.html). - -``` -availability_zone: eu-de-03 -image: Standard_Debian_10_latest -volume_size: 128 -key_name: your-KeyPair -flavor: s3.medium.8 -``` - - -## User password -Located at [`openstack/roles/install/vars/main.yaml`](openstack/roles/install/vars/main.yaml). -Here you can set the password for your Debian user (**you should definitely change that**). -``` -user_password: LiNuXuSeRPaSs# -``` - - -## Configure `tpot.conf.dist` -The file is located in [`iso/installer/tpot.conf.dist`](/iso/installer/tpot.conf.dist). -Here you can choose: - - between the various T-Pot editions - - a username for the web interface - - a password for the web interface (**you should definitely change that**) - - -## Optional: Custom `ews.cfg` -Enable this by uncommenting the role in the [deploy_tpot.yaml](openstack/deploy_tpot.yaml) playbook. -``` -# - custom_ews -``` - -You can use a custom config file for `ewsposter`. -e.g. when you have your own credentials for delivering data to our [Sicherheitstacho](https://sicherheitstacho.eu/start/main). -You can find the `ews.cfg` template file here: [`openstack/roles/custom_ews/templates/ews.cfg`](openstack/roles/custom_ews/templates/ews.cfg) and adapt it for your needs. - -For setting custom credentials, these settings would be relevant for you (the rest of the file can stay as is): -``` -[MAIN] -... -contact = your_email_address -... - -[EWS] -... -username = your_username -token = your_token -... -``` - - -## Optional: Custom HPFEEDS -Enable this by uncommenting the role in the [deploy_tpot.yaml](openstack/deploy_tpot.yaml) playbook. -``` -# - custom_hpfeeds -``` - -You can specify custom HPFEEDS in [`openstack/roles/custom_hpfeeds/files/hpfeeds.cfg`](openstack/roles/custom_hpfeeds/files/hpfeeds.cfg). -That file contains the defaults (turned off) and you can adapt it for your needs, e.g. for SISSDEN: -``` -myENABLE=true -myHOST=hpfeeds.sissden.eu -myPORT=10000 -myCHANNEL=t-pot.events -myCERT=/opt/ewsposter/sissden.pem -myIDENT=your_user -mySECRET=your_secret -myFORMAT=json -``` - - -# Deploying a T-Pot :honey_pot::honeybee: -Now, after configuring everything, we can finally start deploying T-Pots! - -Go to the [`openstack`](openstack) folder and run the Ansible Playbook with: -`ansible-playbook deploy_tpot.yaml` -(Yes, it is as easy as that :smile:) - -If you are running on a machine which asks for a sudo password, you can use: -`ansible-playbook --ask-become-pass deploy_tpot.yaml` - -The Playbook will first install required packages on the Ansible Master and then deploy one (or more) new server instances. -After that, T-Pot gets installed and configured on them, optionally custom configs are applied and finally it reboots. - -Once this is done, you can proceed with connecting/logging in to the T-Pot according to the [documentation](https://github.com/telekom-security/tpotce#ssh-and-web-access). - - -# Further documentation -- [Ansible Documentation](https://docs.ansible.com/ansible/latest/) -- [openstack.cloud.server – Create/Delete Compute Instances from OpenStack](https://docs.ansible.com/ansible/latest/collections/openstack/cloud/server_module.html) -- [Open Telekom Cloud Help Center](https://docs.otc.t-systems.com/) diff --git a/cloud/ansible/doc/otc_1_project.gif b/cloud/ansible/doc/otc_1_project.gif deleted file mode 100644 index 3c97d353..00000000 Binary files a/cloud/ansible/doc/otc_1_project.gif and /dev/null differ diff --git a/cloud/ansible/doc/otc_2_user.gif b/cloud/ansible/doc/otc_2_user.gif deleted file mode 100644 index 15bc12f7..00000000 Binary files a/cloud/ansible/doc/otc_2_user.gif and /dev/null differ diff --git a/cloud/ansible/doc/otc_3_login.gif b/cloud/ansible/doc/otc_3_login.gif deleted file mode 100644 index af4a871a..00000000 Binary files a/cloud/ansible/doc/otc_3_login.gif and /dev/null differ diff --git a/cloud/ansible/doc/otc_4_import_key.gif b/cloud/ansible/doc/otc_4_import_key.gif deleted file mode 100644 index 1c0050f3..00000000 Binary files a/cloud/ansible/doc/otc_4_import_key.gif and /dev/null differ diff --git a/cloud/ansible/doc/putty_agent_forwarding.png b/cloud/ansible/doc/putty_agent_forwarding.png deleted file mode 100644 index fdfff05c..00000000 Binary files a/cloud/ansible/doc/putty_agent_forwarding.png and /dev/null differ diff --git a/cloud/ansible/openstack/ansible.cfg b/cloud/ansible/openstack/ansible.cfg deleted file mode 100644 index eab457fb..00000000 --- a/cloud/ansible/openstack/ansible.cfg +++ /dev/null @@ -1,6 +0,0 @@ -[defaults] -host_key_checking = false - -[ssh_connection] -scp_if_ssh = true -ssh_args = -o ServerAliveInterval=60 diff --git a/cloud/ansible/openstack/clouds.yaml b/cloud/ansible/openstack/clouds.yaml deleted file mode 100644 index c16bfcf3..00000000 --- a/cloud/ansible/openstack/clouds.yaml +++ /dev/null @@ -1,9 +0,0 @@ -clouds: - open-telekom-cloud: - profile: otc - region_name: eu-de - auth: - project_name: eu-de_your_project - username: your_api_user - password: your_password - user_domain_name: OTC-EU-DE-000000000010000XXXXX diff --git a/cloud/ansible/openstack/deploy_tpot.yaml b/cloud/ansible/openstack/deploy_tpot.yaml deleted file mode 100644 index 5e3ee05a..00000000 --- a/cloud/ansible/openstack/deploy_tpot.yaml +++ /dev/null @@ -1,30 +0,0 @@ -- name: Check host prerequisites - hosts: localhost - become: yes - roles: - - check - -- name: Deploy instances - hosts: localhost - vars_files: my_os_cloud.yaml - tasks: - - name: Create security group and network - ansible.builtin.include_role: - name: create_net - - name: Create one or more instances - ansible.builtin.include_role: - name: create_vm - loop: "{{ range(0, 1) }}" - loop_control: - extended: yes - -- name: Install T-Pot - hosts: tpot - remote_user: linux - become: yes - gather_facts: no - roles: - - install -# - custom_ews -# - custom_hpfeeds - - reboot diff --git a/cloud/ansible/openstack/my_os_cloud.yaml b/cloud/ansible/openstack/my_os_cloud.yaml deleted file mode 100644 index d3832f85..00000000 --- a/cloud/ansible/openstack/my_os_cloud.yaml +++ /dev/null @@ -1,2 +0,0 @@ -# Enter the name of your cloud to use from clouds.yaml -cloud: open-telekom-cloud diff --git a/cloud/ansible/openstack/requirements.yaml b/cloud/ansible/openstack/requirements.yaml deleted file mode 100644 index 986ae0e5..00000000 --- a/cloud/ansible/openstack/requirements.yaml +++ /dev/null @@ -1,2 +0,0 @@ -collections: -- name: openstack.cloud diff --git a/cloud/ansible/openstack/roles/check/tasks/main.yaml b/cloud/ansible/openstack/roles/check/tasks/main.yaml deleted file mode 100644 index 7242ee4c..00000000 --- a/cloud/ansible/openstack/roles/check/tasks/main.yaml +++ /dev/null @@ -1,19 +0,0 @@ -- name: Install dependencies - ansible.builtin.package: - name: - - gcc - - python3-dev - - python3-setuptools - - python3-pip - state: present - -- name: Install openstacksdk - ansible.builtin.pip: - name: openstacksdk - executable: pip3 - -- name: Check if agent forwarding is enabled - ansible.builtin.fail: - msg: Please enable agent forwarding to allow Ansible to connect to the remote host! - ignore_errors: yes - failed_when: lookup('env','SSH_AUTH_SOCK') == "" diff --git a/cloud/ansible/openstack/roles/create_net/tasks/main.yaml b/cloud/ansible/openstack/roles/create_net/tasks/main.yaml deleted file mode 100644 index 0d8b9449..00000000 --- a/cloud/ansible/openstack/roles/create_net/tasks/main.yaml +++ /dev/null @@ -1,33 +0,0 @@ -- name: Create security group - openstack.cloud.security_group: - cloud: "{{ cloud }}" - name: sg-tpot-ansible - description: Security Group for T-Pot - -- name: Add rules to security group - openstack.cloud.security_group_rule: - cloud: "{{ cloud }}" - security_group: sg-tpot-ansible - remote_ip_prefix: 0.0.0.0/0 - -- name: Create network - openstack.cloud.network: - cloud: "{{ cloud }}" - name: network-tpot-ansible - -- name: Create subnet - openstack.cloud.subnet: - cloud: "{{ cloud }}" - network_name: network-tpot-ansible - name: subnet-tpot-ansible - cidr: 192.168.0.0/24 - dns_nameservers: - - 100.125.4.25 - - 100.125.129.199 - -- name: Create router - openstack.cloud.router: - cloud: "{{ cloud }}" - name: router-tpot-ansible - interfaces: - - subnet-tpot-ansible diff --git a/cloud/ansible/openstack/roles/create_vm/tasks/main.yaml b/cloud/ansible/openstack/roles/create_vm/tasks/main.yaml deleted file mode 100644 index d7810a0d..00000000 --- a/cloud/ansible/openstack/roles/create_vm/tasks/main.yaml +++ /dev/null @@ -1,24 +0,0 @@ -- name: Generate T-Pot name - ansible.builtin.set_fact: - tpot_name: "t-pot-ansible-{{ lookup('password', '/dev/null chars=ascii_lowercase,digits length=6') }}" - -- name: Create instance {{ ansible_loop.index }} of {{ ansible_loop.length }} - openstack.cloud.server: - cloud: "{{ cloud }}" - name: "{{ tpot_name }}" - availability_zone: "{{ availability_zone }}" - image: "{{ image }}" - boot_from_volume: yes - volume_size: "{{ volume_size }}" - key_name: "{{ key_name }}" - auto_ip: yes - flavor: "{{ flavor }}" - security_groups: sg-tpot-ansible - network: network-tpot-ansible - register: tpot - -- name: Add instance to inventory - ansible.builtin.add_host: - hostname: "{{ tpot_name }}" - ansible_host: "{{ tpot.server.public_v4 }}" - groups: tpot diff --git a/cloud/ansible/openstack/roles/create_vm/vars/main.yaml b/cloud/ansible/openstack/roles/create_vm/vars/main.yaml deleted file mode 100644 index cd56d25f..00000000 --- a/cloud/ansible/openstack/roles/create_vm/vars/main.yaml +++ /dev/null @@ -1,5 +0,0 @@ -availability_zone: eu-de-03 -image: Standard_Debian_10_latest -volume_size: 128 -key_name: your-KeyPair -flavor: s3.medium.8 diff --git a/cloud/ansible/openstack/roles/custom_ews/tasks/main.yaml b/cloud/ansible/openstack/roles/custom_ews/tasks/main.yaml deleted file mode 100644 index fec93410..00000000 --- a/cloud/ansible/openstack/roles/custom_ews/tasks/main.yaml +++ /dev/null @@ -1,13 +0,0 @@ -- name: Copy ews configuration file - ansible.builtin.template: - src: ews.cfg - dest: /data/ews/conf - owner: root - group: root - mode: 0644 - -- name: Patching tpot.yml with custom ews configuration file - ansible.builtin.lineinfile: - path: /opt/tpot/etc/tpot.yml - insertafter: "/opt/ewsposter/ews.ip" - line: " - /data/ews/conf/ews.cfg:/opt/ewsposter/ews.cfg" diff --git a/cloud/ansible/openstack/roles/custom_ews/templates/ews.cfg b/cloud/ansible/openstack/roles/custom_ews/templates/ews.cfg deleted file mode 100644 index a775d04b..00000000 --- a/cloud/ansible/openstack/roles/custom_ews/templates/ews.cfg +++ /dev/null @@ -1,137 +0,0 @@ -[MAIN] -homedir = /opt/ewsposter/ -spooldir = /opt/ewsposter/spool/ -logdir = /opt/ewsposter/log/ -del_malware_after_send = false -send_malware = true -sendlimit = 500 -contact = your_email_address -proxy = -ip = - -[EWS] -ews = true -username = your_username -token = your_token -rhost_first = https://community.sicherheitstacho.eu/ews-0.1/alert/postSimpleMessage -rhost_second = https://community.sicherheitstacho.eu/ews-0.1/alert/postSimpleMessage -ignorecert = false - -[HPFEED] -hpfeed = %(EWS_HPFEEDS_ENABLE)s -host = %(EWS_HPFEEDS_HOST)s -port = %(EWS_HPFEEDS_PORT)s -channels = %(EWS_HPFEEDS_CHANNELS)s -ident = %(EWS_HPFEEDS_IDENT)s -secret= %(EWS_HPFEEDS_SECRET)s -# path/to/certificate for tls broker - or "false" for non-tls broker -tlscert = %(EWS_HPFEEDS_TLSCERT)s -# hpfeeds submission format: "ews" (xml) or "json" -hpfformat = %(EWS_HPFEEDS_FORMAT)s - -[EWSJSON] -json = false -jsondir = /data/ews/json/ - -[GLASTOPFV3] -glastopfv3 = true -nodeid = glastopfv3-{{ ansible_hostname }} -sqlitedb = /data/glastopf/db/glastopf.db -malwaredir = /data/glastopf/data/files/ - -[GLASTOPFV2] -glastopfv2 = false -nodeid = -mysqlhost = -mysqldb = -mysqluser = -mysqlpw = -malwaredir = - -[KIPPO] -kippo = false -nodeid = -mysqlhost = -mysqldb = -mysqluser = -mysqlpw = -malwaredir = - -[COWRIE] -cowrie = true -nodeid = cowrie-{{ ansible_hostname }} -logfile = /data/cowrie/log/cowrie.json - -[DIONAEA] -dionaea = true -nodeid = dionaea-{{ ansible_hostname }} -malwaredir = /data/dionaea/binaries/ -sqlitedb = /data/dionaea/log/dionaea.sqlite - -[HONEYTRAP] -honeytrap = true -nodeid = honeytrap-{{ ansible_hostname }} -newversion = true -payloaddir = /data/honeytrap/attacks/ -attackerfile = /data/honeytrap/log/attacker.log - -[RDPDETECT] -rdpdetect = false -nodeid = -iptableslog = -targetip = - -[EMOBILITY] -eMobility = false -nodeid = emobility-{{ ansible_hostname }} -logfile = /data/emobility/log/centralsystemEWS.log - -[CONPOT] -conpot = true -nodeid = conpot-{{ ansible_hostname }} -logfile = /data/conpot/log/conpot*.json - -[ELASTICPOT] -elasticpot = true -nodeid = elasticpot-{{ ansible_hostname }} -logfile = /data/elasticpot/log/elasticpot.log - -[SURICATA] -suricata = true -nodeid = suricata-{{ ansible_hostname }} -logfile = /data/suricata/log/eve.json - -[MAILONEY] -mailoney = true -nodeid = mailoney-{{ ansible_hostname }} -logfile = /data/mailoney/log/commands.log - -[RDPY] -rdpy = true -nodeid = rdpy-{{ ansible_hostname }} -logfile = /data/rdpy/log/rdpy.log - -[VNCLOWPOT] -vnclowpot = true -nodeid = vnclowpot-{{ ansible_hostname }} -logfile = /data/vnclowpot/log/vnclowpot.log - -[HERALDING] -heralding = true -nodeid = heralding-{{ ansible_hostname }} -logfile = /data/heralding/log/auth.csv - -[CISCOASA] -ciscoasa = true -nodeid = ciscoasa-{{ ansible_hostname }} -logfile = /data/ciscoasa/log/ciscoasa.log - -[TANNER] -tanner = true -nodeid = tanner-{{ ansible_hostname }} -logfile = /data/tanner/log/tanner_report.json - -[GLUTTON] -glutton = true -nodeid = glutton-{{ ansible_hostname }} -logfile = /data/glutton/log/glutton.log diff --git a/cloud/ansible/openstack/roles/custom_hpfeeds/files/hpfeeds.cfg b/cloud/ansible/openstack/roles/custom_hpfeeds/files/hpfeeds.cfg deleted file mode 100644 index 1b981fdd..00000000 --- a/cloud/ansible/openstack/roles/custom_hpfeeds/files/hpfeeds.cfg +++ /dev/null @@ -1,8 +0,0 @@ -myENABLE=false -myHOST=host -myPORT=port -myCHANNEL=channels -myCERT=false -myIDENT=user -mySECRET=secret -myFORMAT=json diff --git a/cloud/ansible/openstack/roles/custom_hpfeeds/tasks/main.yaml b/cloud/ansible/openstack/roles/custom_hpfeeds/tasks/main.yaml deleted file mode 100644 index fa479137..00000000 --- a/cloud/ansible/openstack/roles/custom_hpfeeds/tasks/main.yaml +++ /dev/null @@ -1,12 +0,0 @@ -- name: Copy hpfeeds configuration file - ansible.builtin.copy: - src: hpfeeds.cfg - dest: /data/ews/conf - owner: tpot - group: tpot - mode: 0770 - register: config - -- name: Applying hpfeeds settings - ansible.builtin.command: /opt/tpot/bin/hpfeeds_optin.sh --conf=/data/ews/conf/hpfeeds.cfg - when: config.changed == true diff --git a/cloud/ansible/openstack/roles/install/tasks/main.yaml b/cloud/ansible/openstack/roles/install/tasks/main.yaml deleted file mode 100644 index c525640c..00000000 --- a/cloud/ansible/openstack/roles/install/tasks/main.yaml +++ /dev/null @@ -1,48 +0,0 @@ -- name: Waiting for SSH connection - ansible.builtin.wait_for_connection: - -- name: Gathering facts - ansible.builtin.setup: - -- name: Cloning T-Pot install directory - ansible.builtin.git: - repo: "https://github.com/telekom-security/tpotce.git" - dest: /root/tpot - -- name: Prepare to set user password - ansible.builtin.set_fact: - user_name: "{{ ansible_user }}" - user_salt: "s0mew1ck3dTpoT" - no_log: true - -- name: Changing password for user {{ user_name }} - ansible.builtin.user: - name: "{{ ansible_user }}" - password: "{{ user_password | password_hash('sha512', user_salt) }}" - state: present - shell: /bin/bash - -- name: Copy T-Pot configuration file - ansible.builtin.copy: - src: ../../../../../../iso/installer/tpot.conf.dist - dest: /root/tpot.conf - owner: root - group: root - mode: 0644 - -- name: Install T-Pot on instance - be patient, this might take 15 to 30 minutes depending on the connection speed. - ansible.builtin.command: /root/tpot/iso/installer/install.sh --type=auto --conf=/root/tpot.conf - -- name: Delete T-Pot configuration file - ansible.builtin.file: - path: /root/tpot.conf - state: absent - -- name: Change unattended-upgrades to take default action - ansible.builtin.blockinfile: - dest: /etc/apt/apt.conf.d/50unattended-upgrades - block: | - Dpkg::Options { - "--force-confdef"; - "--force-confold"; - } diff --git a/cloud/ansible/openstack/roles/install/vars/main.yaml b/cloud/ansible/openstack/roles/install/vars/main.yaml deleted file mode 100644 index ce234a97..00000000 --- a/cloud/ansible/openstack/roles/install/vars/main.yaml +++ /dev/null @@ -1 +0,0 @@ -user_password: LiNuXuSeRPaSs# diff --git a/cloud/ansible/openstack/roles/reboot/tasks/main.yaml b/cloud/ansible/openstack/roles/reboot/tasks/main.yaml deleted file mode 100644 index 1d5ce5d5..00000000 --- a/cloud/ansible/openstack/roles/reboot/tasks/main.yaml +++ /dev/null @@ -1,16 +0,0 @@ -- name: Finally rebooting T-Pot - ansible.builtin.command: shutdown -r now - async: 1 - poll: 0 - -- name: Next login options - ansible.builtin.debug: - msg: - - "***** SSH Access:" - - "***** ssh {{ ansible_user }}@{{ ansible_host }} -p 64295" - - "" - - "***** Web UI:" - - "***** https://{{ ansible_host }}:64297" - - "" - - "***** Admin UI:" - - "***** https://{{ ansible_host }}:64294" diff --git a/cloud/azure/README.md b/cloud/azure/README.md deleted file mode 100644 index cf218089..00000000 --- a/cloud/azure/README.md +++ /dev/null @@ -1,71 +0,0 @@ - -# Azure T-Pot - -The following deployment template will deploy a Standard T-Pot server on a Azure VM on a Network\Subnet of your choosing. [Click here to learn more on T-Pot](https://github.com/telekom-security/tpotce) - -[![Deploy To Azure](https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/1-CONTRIBUTION-GUIDE/images/deploytoazure.svg?sanitize=true)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Ftelekom-security%2Ftpotce%2Fmaster%2Fcloud%2Fazure%2Fazuredeploy.json) -[![Deploy To Azure US Gov](https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/1-CONTRIBUTION-GUIDE/images/deploytoazuregov.svg?sanitize=true)](https://portal.azure.us/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Ftelekom-security%2Ftpotce%2Fmaster%2Fcloud%2Fazure%2Fazuredeploy.json) -[![Visualize](https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/1-CONTRIBUTION-GUIDE/images/visualizebutton.svg?sanitize=true)](http://armviz.io/#/?load=https%3A%2F%2Fraw.githubusercontent.com%2Ftelekom-security%2Ftpotce%2Fmaster%2Fcloud%2Fazure%2Fazuredeploy.json) - -## Install Instructions - - 1. Update the VM Name to reflect your naming convention and taxonomy. - 2. Place you Azure Virtual Network Resource Id *(Recommendation of - placement depending on goal, you may want to place in Hub Virtual - Network to detect activity from on-premise or other virtual - network spokes. You can also place in DMZ or isolated in a unique - virtual network exposed to direct internet.)* - 3. My Connection IP of a public ip address you are coming from to use dashboards and manage. - 4. Cloud Init B64 Encoded write your cloud init yaml contents and base 64 encode them into this string parameter. - -Cloud-Init Yaml Example before B64 Encoding: - - packages: - - git - - runcmd: - - curl -sS --retry 5 https://github.com - - git clone https://github.com/telekom-security/tpotce /root/tpot - - /root/tpot/iso/installer/install.sh --type=auto --conf=/root/tpot.conf - - rm /root/tpot.conf - - /sbin/shutdown -r now - - password: w3b$ecrets2! - chpasswd: - expire: false - - write_files: - - content: | - # tpot configuration file - myCONF_TPOT_FLAVOR='STANDARD' - myCONF_WEB_USER='webuser' - myCONF_WEB_PW='w3b$ecrets2!' - owner: root:root - path: /root/tpot.conf - permissions: '0600' - -Be sure to copy and update values like: - - - password: - - myCONF_TPOT_FLAVOR= (Different flavors as follows: [STANDARD, - HIVE, HIVE_SENSOR, INDUSTRIAL, LOG4J, MEDICAL, MINI, SENSOR] - **Recommend deploying STANDARD** if you are exploring first time) - - myCONF_WEB_USER= - - myCONF_WEB_PW= - -Once you update the cloud init yaml file locally then base 64 encode and paste this string to in the securestring parameter. - -B64 Example: - - I2Nsb3VkLWNvbmZpZwp0aW1lem9uZTogVVMvRWFzdGVybgoKcGFja2FnZXM6CiAgLSBnaXQKCnJ1bmNtZDoKICAtIGN1cmwgLXNTIC0tcmV0cnkgNSBodHRwczovL2dpdGh1Yi5jb20KICAtIGdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vdGVsZWtvbS1zZWN1cml0eS90cG90Y2UgL3Jvb3QvdHBvdAogIC0gL3Jvb3QvdHBvdC9pc28vaW5zdGFsbGVyL2luc3RhbGwuc2ggLS10eXBlPWF1dG8gLS1jb25mPS9yb290L3Rwb3QuY29uZgogIC0gcm0gL3Jvb3QvdHBvdC5jb25mCiAgLSAvc2Jpbi9zaHV0ZG93biAtciBub3cKCnBhc3N3b3JkOiB3M2IkZWNyZXRzMiEKY2hwYXNzd2Q6CiAgZXhwaXJlOiBmYWxzZQoKd3JpdGVfZmlsZXM6CiAgLSBjb250ZW50OiB8CiAgICAgICMgdHBvdCBjb25maWd1cmF0aW9uIGZpbGUKICAgICAgbXlDT05GX1RQT1RfRkxBVk9SPSdTVEFOREFSRCcKICAgICAgbXlDT05GX1dFQl9VU0VSPSd3ZWJ1c2VyJwogICAgICBteUNPTkZfV0VCX1BXPSd3M2IkZWNyZXRzMiEnCiAgICBvd25lcjogcm9vdDpyb290CiAgICBwYXRoOiAvcm9vdC90cG90LmNvbmYKICAgIHBlcm1pc3Npb25zOiAnMDYwMCc= - -Click review and create, deployment of VM should take less than 5 minutes, however Cloud-Init will take some time, **typically 15 minutes** before T-Pot services are up and running. - -## Post Install Instructions -Install **may take around 15 minutes** for services to come up. Check to make sure from your public IP you can connect to https://azurepuplicip:64297 you will be prompted for your username and password supplied in the B64 Cloud Init String you supplied for *myCONF_WEB_PW=* - -Review the [available honeypots architecture section](https://raw.githubusercontent.com/telekom-security/tpotce/master/doc/architecture.png) and [available ports](https://github.com/telekom-security/tpotce#required-ports) and poke a hole in the Network Security Group to expose the T-Pot to your on-premise network CIDR, or other Azure virtual network CIDRs, finally you can also expose a port to the public Internet for Threat Intelligence gathering. - -## Network Security Group -Please study the rules carefully. You may need to make some additional rules or modifications based on your needs and considerations. As an example if this is for internal private ip range detections you may want to remove rules and place a higher priority DENY rule preventing all the T-Pot ports and services being exposed internally, and then place a few ALLOW rules to your on-premise private ip address CIDR, other Hub Private IPs, and some Spoke Private IPs. -![enter image description here](https://raw.githubusercontent.com/telekom-security/tpotce/master/cloud/azure/images/nsg.png) diff --git a/cloud/azure/azuredeploy.json b/cloud/azure/azuredeploy.json deleted file mode 100644 index 00996ca8..00000000 --- a/cloud/azure/azuredeploy.json +++ /dev/null @@ -1,308 +0,0 @@ -{ - "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "VMName": { - "type": "string", - "metadata": { - "description": "VM Name and convention your company uses, be sure to entice naming EX. vm-fileshares-prod-eastus-003" - }, - "defaultValue": "vm-fileshares-prod-eastus-003" - }, - "virtualNetworkId": { - "type": "string", - "metadata": { - "description": "Virtual Network Resource ID to Deploy Azure VM into" - }, - "defaultValue": "/subscriptions/{SUBID}/resourceGroups/{RG NAME}/providers/Microsoft.Network/virtualNetworks/{VNET NAME}" - }, - "subnetName": { - "type": "string", - "metadata": { - "description": "Virtual Network Subnet Name to Deploy Azure VM into" - } - }, - "MyConnectionIP": { - "type": "string", - "minLength": 7, - "maxLength": 15, - "metadata": { - "description": "The Public IP I will be connecting from to administer and configure" - }, - "defaultValue": "XXX.XXX.XXX.XXX" - }, - "adminUsername": { - "type": "string", - "minLength": 1, - "defaultValue": "webuser", - "metadata": { - "description": "Admin user name for Linux VM" - } - }, - "authenticationType": { - "type": "string", - "defaultValue": "password", - "allowedValues": [ - "sshPublicKey", - "password" - ], - "metadata": { - "description": "Type of authentication to use on the Virtual Machine. SSH key is recommended." - } - }, - "adminPasswordOrKey": { - "type": "securestring", - "metadata": { - "description": "SSH Key or password for the Virtual Machine. SSH key is recommended." - } - }, - "CloudInitB64Encoded": { - "type": "securestring", - "metadata": { - "description": "Cloud Init Configuration as a Base 64 encoded string, decode to examine a few variables to change and encode and submit" - }, - "defaultValue": "I2Nsb3VkLWNvbmZpZwp0aW1lem9uZTogVVMvRWFzdGVybgoKcGFja2FnZXM6CiAgLSBnaXQKCnJ1bmNtZDoKICAtIGN1cmwgLXNTIC0tcmV0cnkgNSBodHRwczovL2dpdGh1Yi5jb20KICAtIGdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vdGVsZWtvbS1zZWN1cml0eS90cG90Y2UgL3Jvb3QvdHBvdAogIC0gL3Jvb3QvdHBvdC9pc28vaW5zdGFsbGVyL2luc3RhbGwuc2ggLS10eXBlPWF1dG8gLS1jb25mPS9yb290L3Rwb3QuY29uZgogIC0gcm0gL3Jvb3QvdHBvdC5jb25mCiAgLSAvc2Jpbi9zaHV0ZG93biAtciBub3cKCnBhc3N3b3JkOiB3M2IkZWNyZXRzMiEKY2hwYXNzd2Q6CiAgZXhwaXJlOiBmYWxzZQoKd3JpdGVfZmlsZXM6CiAgLSBjb250ZW50OiB8CiAgICAgICMgdHBvdCBjb25maWd1cmF0aW9uIGZpbGUKICAgICAgbXlDT05GX1RQT1RfRkxBVk9SPSdTVEFOREFSRCcKICAgICAgbXlDT05GX1dFQl9VU0VSPSd3ZWJ1c2VyJwogICAgICBteUNPTkZfV0VCX1BXPSd3M2IkZWNyZXRzMiEnCiAgICBvd25lcjogcm9vdDpyb290CiAgICBwYXRoOiAvcm9vdC90cG90LmNvbmYKICAgIHBlcm1pc3Npb25zOiAnMDYwMCc=" - } - }, - "variables": { - "vnetId": "[parameters('virtualNetworkId')]", - "subnetRef": "[concat(variables('vnetId'), '/subnets/', parameters('subnetName'))]", - "linuxConfiguration": { - "disablePasswordAuthentication": true, - "ssh": { - "publicKeys": [ - { - "path": "[format('/home/{0}/.ssh/authorized_keys', parameters('adminUsername'))]", - "keyData": "[parameters('adminPasswordOrKey')]" - } - ] - } - } - }, - "resources": [ - { - "name": "[concat(uniqueString(resourceGroup().id, deployment().name),'-nic')]", - "type": "Microsoft.Network/networkInterfaces", - "apiVersion": "2021-08-01", - "location": "[resourceGroup().location]", - "dependsOn": [ - "[resourceId('Microsoft.Network/networkSecurityGroups/', concat(uniqueString(resourceGroup().id, deployment().name),'-nsg'))]", - "[resourceId('Microsoft.Network/publicIpAddresses', concat(uniqueString(resourceGroup().id, deployment().name),'-pip'))]" - ], - "properties": { - "ipConfigurations": [ - { - "name": "ipconfig1", - "properties": { - "subnet": { - "id": "[variables('subnetRef')]" - }, - "privateIPAllocationMethod": "Dynamic", - "publicIpAddress": { - "id": "[resourceId(resourceGroup().name, 'Microsoft.Network/publicIpAddresses', concat(uniqueString(resourceGroup().id, deployment().name),'-pip'))]", - "properties": { - "deleteOption": "Detach" - } - } - } - } - ], - "enableAcceleratedNetworking": true, - "networkSecurityGroup": { - "id": "[resourceId('Microsoft.Network/networkSecurityGroups/', concat(uniqueString(resourceGroup().id, deployment().name),'-nsg'))]" - } - } - }, - { - "name": "[concat(uniqueString(resourceGroup().id, deployment().name),'-nsg')]", - "type": "Microsoft.Network/networkSecurityGroups", - "apiVersion": "2019-02-01", - "location": "[resourceGroup().location]", - "properties": { - "securityRules": [ - { - "name": "AllowAzureCloud22Inbound", - "properties": { - "protocol": "*", - "sourcePortRange": "*", - "destinationPortRange": "22", - "sourceAddressPrefix": "AzureCloud", - "destinationAddressPrefix": "*", - "access": "Allow", - "priority": 1011, - "direction": "Inbound", - "sourcePortRanges": [], - "destinationPortRanges": [], - "sourceAddressPrefixes": [], - "destinationAddressPrefixes": [] - } - }, - { - "name": "AllowCustom64294Inbound", - "properties": { - "protocol": "*", - "sourcePortRange": "*", - "destinationPortRange": "64294", - "sourceAddressPrefix": "[parameters('MyConnectionIP')]", - "destinationAddressPrefix": "*", - "access": "Allow", - "priority": 1021, - "direction": "Inbound", - "sourcePortRanges": [], - "destinationPortRanges": [], - "sourceAddressPrefixes": [], - "destinationAddressPrefixes": [] - } - }, - { - "name": "AllowSSHCustom64295Inbound", - "properties": { - "protocol": "*", - "sourcePortRange": "*", - "destinationPortRange": "64295", - "sourceAddressPrefix": "[parameters('MyConnectionIP')]", - "destinationAddressPrefix": "*", - "access": "Allow", - "priority": 1031, - "direction": "Inbound", - "sourcePortRanges": [], - "destinationPortRanges": [], - "sourceAddressPrefixes": [], - "destinationAddressPrefixes": [] - } - }, - { - "name": "AllowAzureCloud64295Inbound", - "properties": { - "protocol": "*", - "sourcePortRange": "*", - "destinationPortRange": "64295", - "sourceAddressPrefix": "AzureCloud", - "destinationAddressPrefix": "*", - "access": "Allow", - "priority": 1041, - "direction": "Inbound", - "sourcePortRanges": [], - "destinationPortRanges": [], - "sourceAddressPrefixes": [], - "destinationAddressPrefixes": [] - } - }, - { - "name": "AllowCustom64297Inbound", - "properties": { - "protocol": "*", - "sourcePortRange": "*", - "destinationPortRange": "64297", - "sourceAddressPrefix": "[parameters('MyConnectionIP')]", - "destinationAddressPrefix": "*", - "access": "Allow", - "priority": 1051, - "direction": "Inbound", - "sourcePortRanges": [], - "destinationPortRanges": [], - "sourceAddressPrefixes": [], - "destinationAddressPrefixes": [] - } - }, - { - "name": "AllowAllHomeOfficeCustomAnyInbound", - "properties": { - "protocol": "*", - "sourcePortRange": "*", - "destinationPortRange": "*", - "sourceAddressPrefix": "[parameters('MyConnectionIP')]", - "destinationAddressPrefix": "*", - "access": "Allow", - "priority": 1061, - "direction": "Inbound", - "sourcePortRanges": [], - "destinationPortRanges": [], - "sourceAddressPrefixes": [], - "destinationAddressPrefixes": [] - } - } - ] - } - }, - { - "name": "[concat(uniqueString(resourceGroup().id, deployment().name),'-pip')]", - "type": "Microsoft.Network/publicIpAddresses", - "apiVersion": "2020-08-01", - "location": "[resourceGroup().location]", - "properties": { - "publicIpAllocationMethod": "Static" - }, - "sku": { - "name": "Standard" - }, - "zones": [ - "1" - ] - }, - { - "name": "[parameters('VMName')]", - "type": "Microsoft.Compute/virtualMachines", - "apiVersion": "2022-03-01", - "location": "[resourceGroup().location]", - "dependsOn": [ - "[resourceId('Microsoft.Network/networkInterfaces', concat(uniqueString(resourceGroup().id, deployment().name),'-nic'))]" - ], - "properties": { - "hardwareProfile": { - "vmSize": "Standard_D4s_v3" - }, - "storageProfile": { - "osDisk": { - "createOption": "fromImage", - "managedDisk": { - "storageAccountType": "StandardSSD_LRS" - }, - "deleteOption": "Delete" - }, - "imageReference": { - "publisher": "debian", - "offer": "debian-11", - "sku": "11-gen2", - "version": "latest" - }, - "dataDisks": [ - { - "name": "[concat(parameters('VMName'),'-datadisk')]", - "diskSizeGB": 256, - "lun": 0, - "createOption": "Empty", - "caching": "ReadWrite" - } - ] - }, - "networkProfile": { - "networkInterfaces": [ - { - "id": "[resourceId('Microsoft.Network/networkInterfaces', concat(uniqueString(resourceGroup().id, deployment().name),'-nic'))]", - "properties": { - "deleteOption": "Delete" - } - } - ] - }, - "osProfile": { - "computerName": "[parameters('VMName')]", - "adminUsername": "[parameters('adminUsername')]", - "adminPassword": "[parameters('adminPasswordOrKey')]", - "linuxConfiguration": "[if(equals(parameters('authenticationType'), 'password'), null(), variables('linuxConfiguration'))]", - "customData": "[parameters('CloudInitB64Encoded')]" - }, - "diagnosticsProfile": { - "bootDiagnostics": { - "enabled": true - } - } - }, - "zones": [ - "1" - ] - } - ], - "outputs": {} -} diff --git a/cloud/azure/images/nsg.png b/cloud/azure/images/nsg.png deleted file mode 100644 index d343387d..00000000 Binary files a/cloud/azure/images/nsg.png and /dev/null differ diff --git a/cloud/terraform/README.md b/cloud/terraform/README.md deleted file mode 100644 index 8aaf2c5a..00000000 --- a/cloud/terraform/README.md +++ /dev/null @@ -1,129 +0,0 @@ -# T-Pot Terraform -This [Terraform](https://www.terraform.io/) configuration can be used to launch a virtual machine, bootstrap any dependencies and install T-Pot in a single step. -Configuration for Amazon Web Services (AWS) and Open Telekom Cloud (OTC) is currently included. -This can easily be extended to support other [Terraform providers](https://registry.terraform.io/browse/providers?category=public-cloud%2Ccloud-automation%2Cinfrastructure). - -[Cloud-init](https://cloudinit.readthedocs.io/en/latest/) is used to bootstrap the instance and install T-Pot on startup. - -# Table of Contents -- [What get's created](#what-created) - - [Amazon Web Services (AWS)](#what-created-aws) - - [Open Telekom Cloud (OTC)](#what-created-otc) -- [Prerequisites](#pre) - - [Amazon Web Services (AWS)](#pre-aws) - - [Open Telekom Cloud (OTC)](#pre-otc) -- [Terraform Variables](#variables) - - [Common configuration items](#variables-common) - - [Amazon Web Services (AWS)](#variables-aws) - - [Open Telekom Cloud (OTC)](#variables-otc) -- [Initialising](#initialising) -- [Applying the Configuration](#applying) -- [Connecting to the Instance](#connecting) - - -## What get's created - - -### Amazon Web Services (AWS) -* EC2 instance: - * t3.large (2 vCPUs, 8 GB RAM) - * 128 GB disk - * Debian 10 - * Public IP -* Security Group: - * TCP/UDP ports <= 64000 open to the Internet - * TCP ports 64294, 64295 and 64297 open to a chosen administrative IP - - -### Open Telekom Cloud (OTC) -* ECS instance: - * s3.medium.8 (1 vCPU, 8 GB RAM) - * 128 GB disk - * Debian 10 - * Public EIP -* Security Group - * All TCP/UDP ports are open to the Internet -* Virtual Private Cloud (VPC) and Subnet - - -## Prerequisites -* [Terraform](https://www.terraform.io/) 0.13 - - -### Amazon Web Services (AWS) -* AWS Account - * Existing VPC: VPC ID needs to be specified in `aws/variables.tf` - * Existing subnet: Subnet ID needs to be specified in `aws/variables.tf` - * Existing SSH key pair: Key name needs to be specified in `aws/variables.tf` -* AWS Authentication credentials should be [set using environment variables](https://www.terraform.io/docs/providers/aws/index.html#environment-variables) - - -### Open Telekom Cloud (OTC) -* OTC Account - * Existing SSH key pair: Key name needs to be specified in `otc/variables.tf` -* OTC Authentication credentials (Username, Password, Project Name, User Domain Name) can be set in the `otc/clouds.yaml` file - - -## Terraform Variables - - -### Common configuration items -These variables exist in `aws/variables.tf` and `otc/variables.tf` respectively. -Settings for cloud-init: -* `timezone` - Set the Server's timezone -* `linux_password`- Set a password for the Linux Operating System user (which is also used on the Admin UI) - -Settings for T-Pot: -* `tpot_flavor` - Set the flavor of the T-Pot (Available flavors are listed in the variable's description) -* `web_user` - Set a username for the T-Pot Kibana Dasboard -* `web_password` - Set a password for the T-Pot Kibana Dashboard - - -### Amazon Web Services (AWS) -In `aws/variables.tf`, you can change the additional variables: -* `admin_ip` - source IP address(es) that you will use to administer the system. Connections to TCP ports 64294, 64295 and 64297 will be allowed from this IP only. Multiple IPs or CIDR blocks can be specified in the format: `["127.0.0.1/32", "192.168.0.0/24"]` -* `ec2_vpc_id` - Specify an existing VPC ID -* `ec2_subnet_id` - Specify an existing Subnet ID -* `ec2_region` -* `ec2_ssh_key_name` - Specify an existing SSH key pair -* `ec2_instance_type` - - -### Open Telekom Cloud (OTC) -In `otc/variables.tf`, you can change the additional variables: -* `ecs_flavor` -* `ecs_disk_size` -* `availability_zone` -* `key_pair` - Specify an existing SSH key pair -* `eip_size` - -... and some more, but these are the most relevant. - - -## Initialising -The [`terraform init`](https://www.terraform.io/docs/commands/init.html) command is used to initialize a working directory containing Terraform configuration files. - -``` -$ cd aws -$ terraform init -``` -OR -``` -$ cd otc -$ terraform init -``` - - -## Applying the Configuration -The [`terraform apply`](https://www.terraform.io/docs/commands/apply.html) command is used to apply the changes required to reach the desired state of the configuration, or the pre-determined set of actions generated by a [`terraform plan`](https://www.terraform.io/docs/commands/plan.html) execution plan. - -``` -$ terraform apply -``` -This will create your infrastructure and start a Cloud Server. On startup, the Server gets bootstrapped with cloud-init and will install T-Pot. Once this is done, the server will reboot. - -If you want the remove the built infrastructure, you can run [`terraform destroy`](https://www.terraform.io/docs/commands/destroy.html) to delete it. - - -## Connecting to the Instance -When the installation is completed, you can proceed with connecting/logging in to the T-Pot according to the [documentation](https://github.com/telekom-security/tpotce#ssh-and-web-access). diff --git a/cloud/terraform/aws/.terraform.lock.hcl b/cloud/terraform/aws/.terraform.lock.hcl deleted file mode 100644 index d2366cb2..00000000 --- a/cloud/terraform/aws/.terraform.lock.hcl +++ /dev/null @@ -1,20 +0,0 @@ -# This file is maintained automatically by "terraform init". -# Manual edits may be lost in future updates. - -provider "registry.terraform.io/hashicorp/aws" { - version = "3.26.0" - constraints = "3.26.0" - hashes = [ - "h1:0i78FItlPeiomd+4ThZrtm56P5K33k7/6dnEe4ZePI0=", - "zh:26043eed36d070ca032cf04bc980c654a25821a8abc0c85e1e570e3935bbfcbb", - "zh:2fe68f3f78d23830a04d7fac3eda550eef1f627dfc130486f70a65dc5c254300", - "zh:3d66484c608c64678e639db25d63872783ce60363a1246e30317f21c9c23b84b", - "zh:46ffd755cfd4cf94fe66342797b5afdcef010a24e126c67fee141b357d393535", - "zh:5e96f24357e945c9067cf5e032ad1d003609629c956c2f9f642fefe714e74587", - "zh:60c27aca36bb63bf3e865c2193be80ca83b376581d00f9c220af4b013e163c4d", - "zh:896f0f22d19d41e71b22f9240b261714c3915b165ddefeb771e7734d69dc47ea", - "zh:90de9966cb2fd3e2f326df291595e55d2dd2d90e7d6dd085c2c8691dce82bdb4", - "zh:ad05a91a88ceb1d6de5a568f7cc0b0e5bc0a79f3da70bc28c1e7f3750e362d58", - "zh:e8c63f59c6465329e1f3357498face3dd7ef10a033df3c366a33aa9e94b46c01", - ] -} diff --git a/cloud/terraform/aws/main.tf b/cloud/terraform/aws/main.tf deleted file mode 100644 index 44185446..00000000 --- a/cloud/terraform/aws/main.tf +++ /dev/null @@ -1,66 +0,0 @@ -provider "aws" { - region = var.ec2_region -} - -resource "aws_security_group" "tpot" { - name = "T-Pot" - description = "T-Pot Honeypot" - vpc_id = var.ec2_vpc_id - ingress { - from_port = 0 - to_port = 64000 - protocol = "tcp" - cidr_blocks = ["0.0.0.0/0"] - } - ingress { - from_port = 0 - to_port = 64000 - protocol = "udp" - cidr_blocks = ["0.0.0.0/0"] - } - ingress { - from_port = 64294 - to_port = 64294 - protocol = "tcp" - cidr_blocks = var.admin_ip - } - ingress { - from_port = 64295 - to_port = 64295 - protocol = "tcp" - cidr_blocks = var.admin_ip - } - ingress { - from_port = 64297 - to_port = 64297 - protocol = "tcp" - cidr_blocks = var.admin_ip - } - egress { - from_port = 0 - to_port = 0 - protocol = "-1" - cidr_blocks = ["0.0.0.0/0"] - } - tags = { - Name = "T-Pot" - } -} - -resource "aws_instance" "tpot" { - ami = var.ec2_ami[var.ec2_region] - instance_type = var.ec2_instance_type - key_name = var.ec2_ssh_key_name - subnet_id = var.ec2_subnet_id - tags = { - Name = "T-Pot Honeypot" - } - root_block_device { - volume_type = "gp2" - volume_size = 128 - delete_on_termination = true - } - user_data = templatefile("../cloud-init.yaml", { timezone = var.timezone, password = var.linux_password, tpot_flavor = var.tpot_flavor, web_user = var.web_user, web_password = var.web_password }) - vpc_security_group_ids = [aws_security_group.tpot.id] - associate_public_ip_address = true -} diff --git a/cloud/terraform/aws/outputs.tf b/cloud/terraform/aws/outputs.tf deleted file mode 100644 index 753a893b..00000000 --- a/cloud/terraform/aws/outputs.tf +++ /dev/null @@ -1,12 +0,0 @@ -output "Admin_UI" { - value = "https://${aws_instance.tpot.public_dns}:64294/" -} - -output "SSH_Access" { - value = "ssh -i {private_key_file} -p 64295 admin@${aws_instance.tpot.public_dns}" -} - -output "Web_UI" { - value = "https://${aws_instance.tpot.public_dns}:64297/" -} - diff --git a/cloud/terraform/aws/variables.tf b/cloud/terraform/aws/variables.tf deleted file mode 100644 index 6b4ff656..00000000 --- a/cloud/terraform/aws/variables.tf +++ /dev/null @@ -1,93 +0,0 @@ -variable "admin_ip" { - default = ["127.0.0.1/32"] - description = "admin IP addresses in CIDR format" -} - -variable "ec2_vpc_id" { - description = "ID of AWS VPC" - default = "vpc-XXX" -} - -variable "ec2_subnet_id" { - description = "ID of AWS VPC subnet" - default = "subnet-YYY" -} - -variable "ec2_region" { - description = "AWS region to launch servers" - default = "eu-west-1" -} - -variable "ec2_ssh_key_name" { - default = "default" -} - -# https://aws.amazon.com/ec2/instance-types/ -# t3.large = 2 vCPU, 8 GiB RAM -variable "ec2_instance_type" { - default = "t3.large" -} - -# Refer to https://wiki.debian.org/Cloud/AmazonEC2Image/Bullseye -variable "ec2_ami" { - type = map(string) - default = { - "af-south-1" = "ami-0c372f041acae6d49" - "ap-east-1" = "ami-079b8d011d4655385" - "ap-northeast-1" = "ami-08dbbf1c0485a4aa8" - "ap-northeast-2" = "ami-0269fe7d013b8e2dd" - "ap-northeast-3" = "ami-0848d1e5fb6e3e3da" - "ap-south-1" = "ami-020d429f17c9f1d0a" - "ap-southeast-1" = "ami-09625a221230d9fe6" - "ap-southeast-2" = "ami-03cbc6cddb06af2c2" - "ca-central-1" = "ami-09125623b02302014" - "eu-central-1" = "ami-00c36c60f07e21791" - "eu-north-1" = "ami-052bea934e2d9dbfe" - "eu-south-1" = "ami-04e2bb16d37324719" - "eu-west-1" = "ami-0f87948fe2cf1b2a4" - "eu-west-2" = "ami-02ed1bc837487d535" - "eu-west-3" = "ami-080efd2add7e29430" - "me-south-1" = "ami-0dbde382c834c4a72" - "sa-east-1" = "ami-0a0792814cb068077" - "us-east-1" = "ami-05dd1b6e7ef6f8378" - "us-east-2" = "ami-04dd0542609808c50" - "us-west-1" = "ami-07af5f877b3db9f73" - "us-west-2" = "ami-0d0d8694ba492c02b" - } -} - -## cloud-init configuration ## -variable "timezone" { - default = "UTC" -} - -variable "linux_password" { - #default = "LiNuXuSeRPaSs#" - description = "Set a password for the default user" - - validation { - condition = length(var.linux_password) > 0 - error_message = "Please specify a password for the default user." - } -} - -## These will go in the generated tpot.conf file ## -variable "tpot_flavor" { - default = "STANDARD" - description = "Specify your tpot flavor [STANDARD, HIVE, HIVE_SENSOR, INDUSTRIAL, LOG4J, MEDICAL, MINI, SENSOR]" -} - -variable "web_user" { - default = "webuser" - description = "Set a username for the web user" -} - -variable "web_password" { - #default = "w3b$ecret" - description = "Set a password for the web user" - - validation { - condition = length(var.web_password) > 0 - error_message = "Please specify a password for the web user." - } -} diff --git a/cloud/terraform/aws/versions.tf b/cloud/terraform/aws/versions.tf deleted file mode 100644 index 9ae9023e..00000000 --- a/cloud/terraform/aws/versions.tf +++ /dev/null @@ -1,9 +0,0 @@ -terraform { - required_version = ">= 0.13" - required_providers { - aws = { - source = "hashicorp/aws" - version = "3.26.0" - } - } -} diff --git a/cloud/terraform/aws_multi_region/_provider.tf b/cloud/terraform/aws_multi_region/_provider.tf deleted file mode 100644 index 53b015f6..00000000 --- a/cloud/terraform/aws_multi_region/_provider.tf +++ /dev/null @@ -1,9 +0,0 @@ -provider "aws" { - alias = "eu-west-2" - region = "eu-west-2" -} - -provider "aws" { - alias = "us-west-1" - region = "us-west-1" -} diff --git a/cloud/terraform/aws_multi_region/main.tf b/cloud/terraform/aws_multi_region/main.tf deleted file mode 100644 index e3655383..00000000 --- a/cloud/terraform/aws_multi_region/main.tf +++ /dev/null @@ -1,27 +0,0 @@ -module "eu-west-2" { - source = "./modules/multi-region" - ec2_vpc_id = "vpc-xxxxxxxx" - ec2_subnet_id = "subnet-xxxxxxxx" - ec2_region = "eu-west-2" - tpot_name = "T-Pot Honeypot" - - linux_password = var.linux_password - web_password = var.web_password - providers = { - aws = aws.eu-west-2 - } -} - -module "us-west-1" { - source = "./modules/multi-region" - ec2_vpc_id = "vpc-xxxxxxxx" - ec2_subnet_id = "subnet-xxxxxxxx" - ec2_region = "us-west-1" - tpot_name = "T-Pot Honeypot" - - linux_password = var.linux_password - web_password = var.web_password - providers = { - aws = aws.us-west-1 - } -} diff --git a/cloud/terraform/aws_multi_region/modules/multi-region/main.tf b/cloud/terraform/aws_multi_region/modules/multi-region/main.tf deleted file mode 100644 index 18ad1f40..00000000 --- a/cloud/terraform/aws_multi_region/modules/multi-region/main.tf +++ /dev/null @@ -1,69 +0,0 @@ -variable "ec2_vpc_id" {} -variable "ec2_subnet_id" {} -variable "ec2_region" {} -variable "linux_password" {} -variable "web_password" {} -variable "tpot_name" {} - -resource "aws_security_group" "tpot" { - name = "T-Pot" - description = "T-Pot Honeypot" - vpc_id = var.ec2_vpc_id - ingress { - from_port = 0 - to_port = 64000 - protocol = "tcp" - cidr_blocks = ["0.0.0.0/0"] - } - ingress { - from_port = 0 - to_port = 64000 - protocol = "udp" - cidr_blocks = ["0.0.0.0/0"] - } - ingress { - from_port = 64294 - to_port = 64294 - protocol = "tcp" - cidr_blocks = var.admin_ip - } - ingress { - from_port = 64295 - to_port = 64295 - protocol = "tcp" - cidr_blocks = var.admin_ip - } - ingress { - from_port = 64297 - to_port = 64297 - protocol = "tcp" - cidr_blocks = var.admin_ip - } - egress { - from_port = 0 - to_port = 0 - protocol = "-1" - cidr_blocks = ["0.0.0.0/0"] - } - tags = { - Name = "T-Pot" - } -} - -resource "aws_instance" "tpot" { - ami = var.ec2_ami[var.ec2_region] - instance_type = var.ec2_instance_type - key_name = var.ec2_ssh_key_name - subnet_id = var.ec2_subnet_id - tags = { - Name = var.tpot_name - } - root_block_device { - volume_type = "gp2" - volume_size = 128 - delete_on_termination = true - } - user_data = templatefile("../cloud-init.yaml", { timezone = var.timezone, password = var.linux_password, tpot_flavor = var.tpot_flavor, web_user = var.web_user, web_password = var.web_password }) - vpc_security_group_ids = [aws_security_group.tpot.id] - associate_public_ip_address = true -} diff --git a/cloud/terraform/aws_multi_region/modules/multi-region/outputs.tf b/cloud/terraform/aws_multi_region/modules/multi-region/outputs.tf deleted file mode 100644 index 753a893b..00000000 --- a/cloud/terraform/aws_multi_region/modules/multi-region/outputs.tf +++ /dev/null @@ -1,12 +0,0 @@ -output "Admin_UI" { - value = "https://${aws_instance.tpot.public_dns}:64294/" -} - -output "SSH_Access" { - value = "ssh -i {private_key_file} -p 64295 admin@${aws_instance.tpot.public_dns}" -} - -output "Web_UI" { - value = "https://${aws_instance.tpot.public_dns}:64297/" -} - diff --git a/cloud/terraform/aws_multi_region/modules/multi-region/variables.tf b/cloud/terraform/aws_multi_region/modules/multi-region/variables.tf deleted file mode 100644 index 26a31b66..00000000 --- a/cloud/terraform/aws_multi_region/modules/multi-region/variables.tf +++ /dev/null @@ -1,57 +0,0 @@ -variable "admin_ip" { - default = ["127.0.0.1/32"] - description = "admin IP addresses in CIDR format" -} - -variable "ec2_ssh_key_name" { - default = "default" -} - -# https://aws.amazon.com/ec2/instance-types/ -variable "ec2_instance_type" { - default = "t3.xlarge" -} - -# Refer to https://wiki.debian.org/Cloud/AmazonEC2Image/Bullseye -variable "ec2_ami" { - type = map(string) - default = { - "af-south-1" = "ami-0c372f041acae6d49" - "ap-east-1" = "ami-079b8d011d4655385" - "ap-northeast-1" = "ami-08dbbf1c0485a4aa8" - "ap-northeast-2" = "ami-0269fe7d013b8e2dd" - "ap-northeast-3" = "ami-0848d1e5fb6e3e3da" - "ap-south-1" = "ami-020d429f17c9f1d0a" - "ap-southeast-1" = "ami-09625a221230d9fe6" - "ap-southeast-2" = "ami-03cbc6cddb06af2c2" - "ca-central-1" = "ami-09125623b02302014" - "eu-central-1" = "ami-00c36c60f07e21791" - "eu-north-1" = "ami-052bea934e2d9dbfe" - "eu-south-1" = "ami-04e2bb16d37324719" - "eu-west-1" = "ami-0f87948fe2cf1b2a4" - "eu-west-2" = "ami-02ed1bc837487d535" - "eu-west-3" = "ami-080efd2add7e29430" - "me-south-1" = "ami-0dbde382c834c4a72" - "sa-east-1" = "ami-0a0792814cb068077" - "us-east-1" = "ami-05dd1b6e7ef6f8378" - "us-east-2" = "ami-04dd0542609808c50" - "us-west-1" = "ami-07af5f877b3db9f73" - "us-west-2" = "ami-0d0d8694ba492c02b" - } -} - -## cloud-init configuration ## -variable "timezone" { - default = "UTC" -} - -## These will go in the generated tpot.conf file ## -variable "tpot_flavor" { - default = "STANDARD" - description = "Specify your tpot flavor [STANDARD, HIVE, HIVE_SENSOR, INDUSTRIAL, LOG4J, MEDICAL, MINI, SENSOR]" -} - -variable "web_user" { - default = "webuser" - description = "Set a username for the web user" -} diff --git a/cloud/terraform/aws_multi_region/modules/multi-region/versions.tf b/cloud/terraform/aws_multi_region/modules/multi-region/versions.tf deleted file mode 100644 index 5699714f..00000000 --- a/cloud/terraform/aws_multi_region/modules/multi-region/versions.tf +++ /dev/null @@ -1,9 +0,0 @@ -terraform { - required_version = ">= 0.13" - required_providers { - aws = { - source = "hashicorp/aws" - version = "3.72.0" - } - } -} diff --git a/cloud/terraform/aws_multi_region/outputs.tf b/cloud/terraform/aws_multi_region/outputs.tf deleted file mode 100644 index 845637d4..00000000 --- a/cloud/terraform/aws_multi_region/outputs.tf +++ /dev/null @@ -1,7 +0,0 @@ -output "eu-west-2_Web_UI" { - value = module.eu-west-2.Web_UI -} - -output "us-west-1_Web_UI" { - value = module.us-west-1.Web_UI -} diff --git a/cloud/terraform/aws_multi_region/variables.tf b/cloud/terraform/aws_multi_region/variables.tf deleted file mode 100644 index beb671a8..00000000 --- a/cloud/terraform/aws_multi_region/variables.tf +++ /dev/null @@ -1,19 +0,0 @@ -variable "linux_password" { - #default = "LiNuXuSeRP4Ss!" - description = "Set a password for the default user" - - validation { - condition = length(var.linux_password) > 0 - error_message = "Please specify a password for the default user." - } -} - -variable "web_password" { - #default = "w3b$ecret20" - description = "Set a password for the web user" - - validation { - condition = length(var.web_password) > 0 - error_message = "Please specify a password for the web user." - } -} diff --git a/cloud/terraform/cloud-init.yaml b/cloud/terraform/cloud-init.yaml deleted file mode 100644 index cd0277db..00000000 --- a/cloud/terraform/cloud-init.yaml +++ /dev/null @@ -1,26 +0,0 @@ -#cloud-config -timezone: ${timezone} - -packages: - - git - -runcmd: - - curl -sS --retry 5 https://github.com - - git clone https://github.com/telekom-security/tpotce /root/tpot - - /root/tpot/iso/installer/install.sh --type=auto --conf=/root/tpot.conf - - rm /root/tpot.conf - - /sbin/shutdown -r now - -password: ${password} -chpasswd: - expire: false - -write_files: - - content: | - # tpot configuration file - myCONF_TPOT_FLAVOR='${tpot_flavor}' - myCONF_WEB_USER='${web_user}' - myCONF_WEB_PW='${web_password}' - owner: root:root - path: /root/tpot.conf - permissions: '0600' diff --git a/cloud/terraform/otc/.terraform.lock.hcl b/cloud/terraform/otc/.terraform.lock.hcl deleted file mode 100644 index ce0226cc..00000000 --- a/cloud/terraform/otc/.terraform.lock.hcl +++ /dev/null @@ -1,38 +0,0 @@ -# This file is maintained automatically by "terraform init". -# Manual edits may be lost in future updates. - -provider "registry.terraform.io/hashicorp/random" { - version = "3.1.0" - constraints = "~> 3.1.0" - hashes = [ - "h1:BZMEPucF+pbu9gsPk0G0BHx7YP04+tKdq2MrRDF1EDM=", - "zh:2bbb3339f0643b5daa07480ef4397bd23a79963cc364cdfbb4e86354cb7725bc", - "zh:3cd456047805bf639fbf2c761b1848880ea703a054f76db51852008b11008626", - "zh:4f251b0eda5bb5e3dc26ea4400dba200018213654b69b4a5f96abee815b4f5ff", - "zh:7011332745ea061e517fe1319bd6c75054a314155cb2c1199a5b01fe1889a7e2", - "zh:738ed82858317ccc246691c8b85995bc125ac3b4143043219bd0437adc56c992", - "zh:7dbe52fac7bb21227acd7529b487511c91f4107db9cc4414f50d04ffc3cab427", - "zh:a3a9251fb15f93e4cfc1789800fc2d7414bbc18944ad4c5c98f466e6477c42bc", - "zh:a543ec1a3a8c20635cf374110bd2f87c07374cf2c50617eee2c669b3ceeeaa9f", - "zh:d9ab41d556a48bd7059f0810cf020500635bfc696c9fc3adab5ea8915c1d886b", - "zh:d9e13427a7d011dbd654e591b0337e6074eef8c3b9bb11b2e39eaaf257044fd7", - "zh:f7605bd1437752114baf601bdf6931debe6dc6bfe3006eb7e9bb9080931dca8a", - ] -} - -provider "registry.terraform.io/opentelekomcloud/opentelekomcloud" { - version = "1.23.6" - constraints = "~> 1.23.4" - hashes = [ - "h1:B/1Md957jWaDgFqsJDzmJc75KwL0eC/PCVuZ8HV5xSc=", - "zh:1aa79010869d082157fb44fc83c3bff4e40938ec0ca916f704d974c7f7ca39e4", - "zh:3155b8366828ce50231f69962b55df1e2261ed63c44bb64e2c950dd68769df1b", - "zh:4a909617aa96a6d8aead14f56996ad94e0a1cae9d28e8df1ddae19c2095ed337", - "zh:4f71046719632b4b90f88d29d8ba88915ee6ad66cd9d7ebe84a7459013e5003a", - "zh:67e4d10b2db79ad78ae2ec8d9dfac53c4721028f97f4436a7aa45e80b1beefd3", - "zh:7f12541fc5a3513e5522ff2bd5fee17d1e67bfe64f9ef59d03863fc7389e12ce", - "zh:86fadabfc8307cf6084a412ffc9c797ec94932d08bc663a3fcebf98101e951f6", - "zh:98744b39c2bfe3e8e6f929f750a689971071b257f3f066f669f93c8e0b76d179", - "zh:c363d41debb060804e2c6bd9cb50b4e8daa37362299e3ea74e187265cd85f2ca", - ] -} diff --git a/cloud/terraform/otc/clouds.yaml b/cloud/terraform/otc/clouds.yaml deleted file mode 100644 index 5eefd562..00000000 --- a/cloud/terraform/otc/clouds.yaml +++ /dev/null @@ -1,9 +0,0 @@ -clouds: - open-telekom-cloud: - region_name: eu-de - auth: - project_name: eu-de_your_project - username: your_api_user - password: your_password - user_domain_name: OTC-EU-DE-000000000010000XXXXX - auth_url: https://iam.eu-de.otc.t-systems.com/v3 diff --git a/cloud/terraform/otc/main.tf b/cloud/terraform/otc/main.tf deleted file mode 100644 index f3508f7a..00000000 --- a/cloud/terraform/otc/main.tf +++ /dev/null @@ -1,68 +0,0 @@ -data "opentelekomcloud_images_image_v2" "debian" { - name = "Standard_Debian_10_latest" -} - -resource "opentelekomcloud_networking_secgroup_v2" "secgroup_1" { - name = var.secgroup_name - description = var.secgroup_desc -} - -resource "opentelekomcloud_networking_secgroup_rule_v2" "secgroup_rule_1" { - direction = "ingress" - ethertype = "IPv4" - remote_ip_prefix = "0.0.0.0/0" - security_group_id = opentelekomcloud_networking_secgroup_v2.secgroup_1.id -} - -resource "opentelekomcloud_vpc_v1" "vpc_1" { - name = var.vpc_name - cidr = var.vpc_cidr -} - -resource "opentelekomcloud_vpc_subnet_v1" "subnet_1" { - name = var.subnet_name - cidr = var.subnet_cidr - vpc_id = opentelekomcloud_vpc_v1.vpc_1.id - - gateway_ip = var.subnet_gateway_ip - dns_list = ["100.125.4.25", "100.125.129.199"] -} - -resource "random_id" "tpot" { - byte_length = 6 - prefix = var.ecs_prefix -} - -resource "opentelekomcloud_ecs_instance_v1" "ecs_1" { - name = random_id.tpot.b64_url - image_id = data.opentelekomcloud_images_image_v2.debian.id - flavor = var.ecs_flavor - vpc_id = opentelekomcloud_vpc_v1.vpc_1.id - - nics { - network_id = opentelekomcloud_vpc_subnet_v1.subnet_1.id - } - - system_disk_size = var.ecs_disk_size - system_disk_type = "SAS" - security_groups = [opentelekomcloud_networking_secgroup_v2.secgroup_1.id] - availability_zone = var.availability_zone - key_name = var.key_pair - user_data = templatefile("../cloud-init.yaml", { timezone = var.timezone, password = var.linux_password, tpot_flavor = var.tpot_flavor, web_user = var.web_user, web_password = var.web_password }) -} - -resource "opentelekomcloud_vpc_eip_v1" "eip_1" { - publicip { - type = "5_bgp" - } - bandwidth { - name = "bandwidth-${random_id.tpot.b64_url}" - size = var.eip_size - share_type = "PER" - } -} - -resource "opentelekomcloud_compute_floatingip_associate_v2" "fip_1" { - floating_ip = opentelekomcloud_vpc_eip_v1.eip_1.publicip.0.ip_address - instance_id = opentelekomcloud_ecs_instance_v1.ecs_1.id -} diff --git a/cloud/terraform/otc/outputs.tf b/cloud/terraform/otc/outputs.tf deleted file mode 100644 index 96cc7922..00000000 --- a/cloud/terraform/otc/outputs.tf +++ /dev/null @@ -1,11 +0,0 @@ -output "Admin_UI" { - value = "https://${opentelekomcloud_vpc_eip_v1.eip_1.publicip.0.ip_address}:64294" -} - -output "SSH_Access" { - value = "ssh -p 64295 linux@${opentelekomcloud_vpc_eip_v1.eip_1.publicip.0.ip_address}" -} - -output "Web_UI" { - value = "https://${opentelekomcloud_vpc_eip_v1.eip_1.publicip.0.ip_address}:64297" -} diff --git a/cloud/terraform/otc/provider.tf b/cloud/terraform/otc/provider.tf deleted file mode 100644 index 462028fa..00000000 --- a/cloud/terraform/otc/provider.tf +++ /dev/null @@ -1,3 +0,0 @@ -provider "opentelekomcloud" { - cloud = "open-telekom-cloud" -} diff --git a/cloud/terraform/otc/variables.tf b/cloud/terraform/otc/variables.tf deleted file mode 100644 index 384ea00e..00000000 --- a/cloud/terraform/otc/variables.tf +++ /dev/null @@ -1,98 +0,0 @@ -## cloud-init configuration ## -variable "timezone" { - default = "UTC" -} - -variable "linux_password" { - #default = "LiNuXuSeRPaSs#" - description = "Set a password for the default user" - - validation { - condition = length(var.linux_password) > 0 - error_message = "Please specify a password for the default user." - } -} - -## Security Group ## -variable "secgroup_name" { - default = "sg-tpot" -} - -variable "secgroup_desc" { - default = "Security Group for T-Pot" -} - -## Virtual Private Cloud ## -variable "vpc_name" { - default = "vpc-tpot" -} - -variable "vpc_cidr" { - default = "192.168.0.0/16" -} - -## Subnet ## -variable "subnet_name" { - default = "subnet-tpot" -} - -variable "subnet_cidr" { - default = "192.168.0.0/24" -} - -variable "subnet_gateway_ip" { - default = "192.168.0.1" -} - -## Elastic Cloud Server ## -variable "ecs_prefix" { - default = "tpot-" -} - -variable "ecs_flavor" { - default = "s3.medium.8" -} - -variable "ecs_disk_size" { - default = "128" -} - -variable "availability_zone" { - default = "eu-de-03" -} - -variable "key_pair" { - #default = "" - description = "Specify your SSH key pair" - - validation { - condition = length(var.key_pair) > 0 - error_message = "Please specify a Key Pair." - } -} - -## Elastic IP ## -variable "eip_size" { - default = "100" -} - -## These will go in the generated tpot.conf file ## -variable "tpot_flavor" { - default = "STANDARD" - description = "Specify your tpot flavor [STANDARD, HIVE, HIVE_SENSOR, INDUSTRIAL, LOG4J, MEDICAL, MINI, SENSOR]" -} - -variable "web_user" { - default = "webuser" - description = "Set a username for the web user" -} - -variable "web_password" { - #default = "w3b$ecret" - description = "Set a password for the web user" - - validation { - condition = length(var.web_password) > 0 - error_message = "Please specify a password for the web user." - } -} diff --git a/cloud/terraform/otc/versions.tf b/cloud/terraform/otc/versions.tf deleted file mode 100644 index d5a6ae2a..00000000 --- a/cloud/terraform/otc/versions.tf +++ /dev/null @@ -1,13 +0,0 @@ -terraform { - required_version = ">= 0.13" - required_providers { - opentelekomcloud = { - source = "opentelekomcloud/opentelekomcloud" - version = "~> 1.23.4" - } - random = { - source = "hashicorp/random" - version = "~> 3.1.0" - } - } -} diff --git a/compose/customizer.py b/compose/customizer.py new file mode 100644 index 00000000..82f0dc9e --- /dev/null +++ b/compose/customizer.py @@ -0,0 +1,182 @@ +from datetime import datetime +import yaml + +version = \ +""" + ____ [T-Pot] _ ____ _ _ _ +/ ___| ___ _ ____ _(_) ___ ___ | __ ) _ _(_) | __| | ___ _ __ +\___ \ / _ \ '__\ \ / / |/ __/ _ \ | _ \| | | | | |/ _` |/ _ \ '__| + ___) | __/ | \ V /| | (_| __/ | |_) | |_| | | | (_| | __/ | +|____/ \___|_| \_/ |_|\___\___| |____/ \__,_|_|_|\__,_|\___|_| v0.21 + +# This script is intended for users who want to build a customized docker-compose.yml forT-Pot. +# T-Pot Service Builder will ask for all the docker services to be included in docker-compose.yml. +# The configuration file will be checked for conflicting ports. +# Port conflicts have to be resolve manually or re-running the script and excluding the conflicting services. +# Review the resulting docker-compose-custom.yml and adjust to your needs by (un)commenting the corresponding lines in the config. +""" + +header = \ +"""# T-Pot: CUSTOM EDITION +# Generated on: {current_date} +""" + +config_filename = "tpot_services.yml" +service_filename = "docker-compose-custom.yml" + + +def load_config(filename): + try: + with open(filename, 'r') as file: + config = yaml.safe_load(file) + except: + print_color(f"Error: {filename} not found. Exiting.", "red") + exit() + return config + + +def prompt_service_include(service_name): + while True: + try: + response = input(f"Include {service_name}? (y/n): ").strip().lower() + if response in ['y', 'n']: + return response == 'y' + else: + print_color("Please enter 'y' for yes or 'n' for no.", "red") + except KeyboardInterrupt: + print() + print_color("Interrupted by user. Exiting.", "red") + print() + exit() + + +def check_port_conflicts(selected_services): + all_ports = {} + conflict_ports = [] + + for service_name, config in selected_services.items(): + ports = config.get('ports', []) + for port in ports: + # Split the port mapping and take only the host port part + parts = port.split(':') + host_port = parts[1] if len(parts) == 3 else (parts[0] if parts[1].isdigit() else parts[1]) + + # Check for port conflict and associate it with the service name + if host_port in all_ports: + conflict_ports.append((service_name, host_port)) + if all_ports[host_port] not in [service for service, _ in conflict_ports]: + conflict_ports.append((all_ports[host_port], host_port)) + else: + all_ports[host_port] = service_name + + if conflict_ports: + print_color("[WARNING] - Port conflict(s) detected:", "red") + for service, port in conflict_ports: + print_color(f"{service}: {port}", "red") + return True + return False + + + +def print_color(text, color): + colors = { + "red": "\033[91m", + "green": "\033[92m", + "blue": "\033[94m", # Added blue + "magenta": "\033[95m", # Added magenta + "end": "\033[0m", + } + print(f"{colors[color]}{text}{colors['end']}") + +def enforce_dependencies(selected_services, services): + # If snare or any tanner services are selected, ensure all are enabled + tanner_services = {'snare', 'tanner', 'tanner_redis', 'tanner_phpox', 'tanner_api'} + if tanner_services.intersection(selected_services): + print_color("[OK] - For Snare / Tanner to work all required services have been added to your configuration.", "green") + for service in tanner_services: + selected_services[service] = services[service] + + # If kibana is enabled, also enable elasticsearch + if 'kibana' in selected_services: + selected_services['elasticsearch'] = services['elasticsearch'] + print_color("[OK] - Kibana requires Elasticsearch which has been added to your configuration.", "green") + + # If spiderfoot is enabled, also enable nginx + if 'spiderfoot' in selected_services: + selected_services['nginx'] = services['nginx'] + print_color("[OK] - Spiderfoot requires Nginx which has been added to your configuration.","green") + + + # If any map services are detected, enable logstash, elasticsearch, nginx, and all map services + map_services = {'map_web', 'map_redis', 'map_data'} + if map_services.intersection(selected_services): + print_color("[OK] - For AttackMap to work all required services have been added to your configuration.", "green") + for service in map_services.union({'elasticsearch', 'nginx'}): + selected_services[service] = services[service] + + # honeytrap and glutton cannot be active at the same time, always vote in favor of honeytrap + if 'honeytrap' in selected_services and 'glutton' in selected_services: + # Remove glutton and notify + del selected_services['glutton'] + print_color("[OK] - Honeytrap and Glutton cannot be active at the same time. Glutton has been removed from your configuration.","green") + + +def remove_unused_networks(selected_services, services, networks): + used_networks = set() + # Identify networks used by selected services + for service_name in selected_services: + service_config = services[service_name] + if 'networks' in service_config: + for network in service_config['networks']: + used_networks.add(network) + + # Remove unused networks + for network in list(networks): + if network not in used_networks: + del networks[network] + + +def main(): + config = load_config(config_filename) + + # Separate services and networks + services = config['services'] + networks = config.get('networks', {}) + selected_services = {'tpotinit': services['tpotinit'], + 'logstash': services['logstash']} # Always include tpotinit and logstash + + for service_name, service_config in services.items(): + if service_name not in selected_services: # Skip already included services + if prompt_service_include(service_name): + selected_services[service_name] = service_config + + # Enforce dependencies + enforce_dependencies(selected_services, services) + + # Remove unused networks based on selected services + remove_unused_networks(selected_services, services, networks) + + output_config = { + 'version': '3.9', + 'networks': networks, + 'services': selected_services, + } + + current_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + with open(service_filename, 'w') as file: + file.write(header.format(current_date=current_date)) + yaml.dump(output_config, file, default_flow_style=False, sort_keys=False, indent=2) + + if check_port_conflicts(selected_services): + print_color(f"[WARNING] - Adjust the conflicting ports in the {service_filename} or re-run the script and select services that do not occupy the same port(s).", + "red") + else: + print_color(f"[OK] - Custom {service_filename} has been generated without port conflicts.", "green") + print_color(f"Copy {service_filename} to ~/tpotce and test with: docker compose -f {service_filename} up", "blue") + print_color(f"If everything works, exit with CTRL-C and replace docker-compose.yml with the new config.", "blue") + + +if __name__ == "__main__": + print_color(version, "magenta") + main() diff --git a/preview/compose/mac_win.yml b/compose/mac_win.yml similarity index 94% rename from preview/compose/mac_win.yml rename to compose/mac_win.yml index 579af657..233818f0 100644 --- a/preview/compose/mac_win.yml +++ b/compose/mac_win.yml @@ -1,3 +1,4 @@ +# T-Pot: MAC_WIN version: '3.9' networks: @@ -21,24 +22,25 @@ networks: redishoneypot_local: sentrypeer_local: tanner_local: + wordpot_local: nginx_local: ewsposter_local: services: -############################################# +######################################## #### DEV -############################################## -#### T-Pot Light Init - Never delete this! -############################################## +######################################## +#### T-Pot Init - Never delete this! +######################################## # T-Pot Init Service tpotinit: container_name: tpotinit - build: docker/. env_file: - .env restart: always + stop_grace_period: 60s tmpfs: - /tmp/etc:uid=2000,gid=2000 - /tmp/:uid=2000,gid=2000 @@ -109,7 +111,7 @@ services: pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - ${TPOT_DATA_PATH}/citrixhoneypot/logs:/opt/citrixhoneypot/logs + - ${TPOT_DATA_PATH}/citrixhoneypot/log:/opt/citrixhoneypot/logs # Conpot IEC104 service conpot_IEC104: @@ -228,7 +230,7 @@ services: ports: - "22:22" - "23:23" - image: ${TPOT_REPO}/cowrie:${TPOT_VERSION} + image: ${TPOT_REPO}/cowrie:${TPOT_VERSION} pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: @@ -407,6 +409,7 @@ services: - mailoney_local ports: - "25:25" + - "587:25" image: ${TPOT_REPO}/mailoney:${TPOT_VERSION} pull_policy: ${TPOT_PULL_POLICY} read_only: true @@ -454,15 +457,13 @@ services: depends_on: tpotinit: condition: service_healthy -# SentryPeer offers to exchange bad actor data via DHT / P2P mode by setting the ENV to true (1) -# In some cases (i.e. internally deployed T-Pots) this might be confusing as SentryPeer will show -# the bad actors in its logs. Therefore this option is opt-in based. # environment: -# - SENTRYPEER_PEER_TO_PEER=0 +# - SENTRYPEER_PEER_TO_PEER=1 networks: - sentrypeer_local ports: # - "4222:4222/udp" + - "5060:5060/tcp" - "5060:5060/udp" # - "127.0.0.1:8082:8082" image: ${TPOT_REPO}/sentrypeer:${TPOT_VERSION} @@ -552,6 +553,22 @@ services: image: ${TPOT_REPO}/snare:${TPOT_VERSION} pull_policy: ${TPOT_PULL_POLICY} +# Wordpot service + wordpot: + container_name: wordpot + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - wordpot_local + ports: + - "8080:80" + image: ${TPOT_REPO}/wordpot:${TPOT_VERSION} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/wordpot/log:/opt/wordpot/logs/ + ################## #### NSM @@ -600,9 +617,8 @@ services: tpotinit: condition: service_healthy environment: - # For ET Pro ruleset replace "OPEN" with your OINKCODE - - OINKCODE=OPEN - # Loading externel Rules from URL + - OINKCODE=${OINKCODE:-OPEN} # Default to OPEN if unset or NULL (value provided by T-Pot .env) + # Loading external Rules from URL # - FROMURL="https://username:password@yoururl.com|https://username:password@otherurl.com" network_mode: "host" cap_add: @@ -616,7 +632,7 @@ services: ################## -#### Tools +#### Tools ################## #### ELK @@ -676,6 +692,11 @@ services: - nginx_local environment: - LS_JAVA_OPTS=-Xms1024m -Xmx1024m + - TPOT_TYPE=${TPOT_TYPE:-HIVE} + - TPOT_HIVE_USER=${TPOT_HIVE_USER} + - TPOT_HIVE_IP=${TPOT_HIVE_IP} + ports: + - "127.0.0.1:64305:64305" mem_limit: 2g image: ${TPOT_REPO}/logstash:${TPOT_VERSION} pull_policy: ${TPOT_PULL_POLICY} @@ -726,6 +747,8 @@ services: - nginx_local environment: - MAP_COMMAND=DataServer_v2.py + - TPOT_ATTACKMAP_TEXT=${TPOT_ATTACKMAP_TEXT} + - TZ=${TPOT_ATTACKMAP_TEXT_TIMEZONE} stop_signal: SIGKILL tty: true image: ${TPOT_REPO}/map:${TPOT_VERSION} @@ -761,7 +784,6 @@ services: container_name: nginx restart: always environment: - - COCKPIT=${COCKPIT} - TPOT_OSTYPE=${TPOT_OSTYPE} depends_on: tpotinit: @@ -778,7 +800,6 @@ services: - nginx_local ports: - "64297:64297" - - "127.0.0.1:64304:64304" image: ${TPOT_REPO}/nginx:${TPOT_VERSION} pull_policy: ${TPOT_PULL_POLICY} read_only: true diff --git a/etc/compose/nextgen.yml b/compose/mini.yml similarity index 52% rename from etc/compose/nextgen.yml rename to compose/mini.yml index 93ae1e4d..777b8348 100644 --- a/etc/compose/nextgen.yml +++ b/compose/mini.yml @@ -1,31 +1,49 @@ -# T-Pot (NextGen) -# Do not erase ports sections, these are used by /opt/tpot/bin/rules.sh to setup iptables ACCEPT rules for NFQ (honeytrap / glutton) -version: '2.3' +# T-Pot: MINI +version: '3.9' networks: adbhoney_local: ciscoasa_local: - citrixhoneypot_local: conpot_local_IEC104: conpot_local_guardian_ast: conpot_local_ipmi: conpot_local_kamstrup_382: - ddospot_local: dicompot_local: - dionaea_local: - elasticpot_local: - endlessh_local: - hellpot_local: - heralding_local: - ipphoney_local: - mailoney_local: + honeypots_local: medpot_local: - redishoneypot_local: - ewsposter_local: spiderfoot_local: + ewsposter_local: services: +######################################### +#### DEV +######################################### +#### T-Pot Init - Never delete this! +######################################### + +# T-Pot Init Service + tpotinit: + container_name: tpotinit + env_file: + - .env + restart: always + stop_grace_period: 60s + tmpfs: + - /tmp/etc:uid=2000,gid=2000 + - /tmp/:uid=2000,gid=2000 + network_mode: "host" + cap_add: + - NET_ADMIN + image: ${TPOT_REPO}/tpotinit:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DOCKER_COMPOSE}:/tmp/tpot/docker-compose.yml:ro + - ${TPOT_DATA_PATH}/blackhole:/etc/blackhole + - ${TPOT_DATA_PATH}:/data + - /var/run/docker.sock:/var/run/docker.sock:ro + + ################## #### Honeypots ################## @@ -34,20 +52,27 @@ services: adbhoney: container_name: adbhoney restart: always + depends_on: + tpotinit: + condition: service_healthy networks: - adbhoney_local ports: - "5555:5555" - image: "dtagdevsec/adbhoney:2204" + image: ${TPOT_REPO}/adbhoney:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/adbhoney/log:/opt/adbhoney/log - - /data/adbhoney/downloads:/opt/adbhoney/dl + - ${TPOT_DATA_PATH}/adbhoney/log:/opt/adbhoney/log + - ${TPOT_DATA_PATH}/adbhoney/downloads:/opt/adbhoney/dl # Ciscoasa service ciscoasa: container_name: ciscoasa restart: always + depends_on: + tpotinit: + condition: service_healthy tmpfs: - /tmp/ciscoasa:uid=2000,gid=2000 networks: @@ -55,28 +80,19 @@ services: ports: - "5000:5000/udp" - "8443:8443" - image: "dtagdevsec/ciscoasa:2204" + image: ${TPOT_REPO}/ciscoasa:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/ciscoasa/log:/var/log/ciscoasa - -# CitrixHoneypot service - citrixhoneypot: - container_name: citrixhoneypot - restart: always - networks: - - citrixhoneypot_local - ports: - - "443:443" - image: "dtagdevsec/citrixhoneypot:2204" - read_only: true - volumes: - - /data/citrixhoneypot/logs:/opt/citrixhoneypot/logs + - ${TPOT_DATA_PATH}/ciscoasa/log:/var/log/ciscoasa # Conpot IEC104 service conpot_IEC104: container_name: conpot_iec104 restart: always + depends_on: + tpotinit: + condition: service_healthy environment: - CONPOT_CONFIG=/etc/conpot/conpot.cfg - CONPOT_JSON_LOG=/var/log/conpot/conpot_IEC104.json @@ -90,15 +106,19 @@ services: ports: - "161:161/udp" - "2404:2404" - image: "dtagdevsec/conpot:2204" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/conpot/log:/var/log/conpot + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot # Conpot guardian_ast service conpot_guardian_ast: container_name: conpot_guardian_ast restart: always + depends_on: + tpotinit: + condition: service_healthy environment: - CONPOT_CONFIG=/etc/conpot/conpot.cfg - CONPOT_JSON_LOG=/var/log/conpot/conpot_guardian_ast.json @@ -111,15 +131,19 @@ services: - conpot_local_guardian_ast ports: - "10001:10001" - image: "dtagdevsec/conpot:2204" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/conpot/log:/var/log/conpot + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot # Conpot ipmi conpot_ipmi: container_name: conpot_ipmi restart: always + depends_on: + tpotinit: + condition: service_healthy environment: - CONPOT_CONFIG=/etc/conpot/conpot.cfg - CONPOT_JSON_LOG=/var/log/conpot/conpot_ipmi.json @@ -132,15 +156,19 @@ services: - conpot_local_ipmi ports: - "623:623/udp" - image: "dtagdevsec/conpot:2204" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/conpot/log:/var/log/conpot + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot # Conpot kamstrup_382 conpot_kamstrup_382: container_name: conpot_kamstrup_382 restart: always + depends_on: + tpotinit: + condition: service_healthy environment: - CONPOT_CONFIG=/etc/conpot/conpot.cfg - CONPOT_JSON_LOG=/var/log/conpot/conpot_kamstrup_382.json @@ -154,226 +182,119 @@ services: ports: - "1025:1025" - "50100:50100" - image: "dtagdevsec/conpot:2204" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/conpot/log:/var/log/conpot - -# Ddospot service - ddospot: - container_name: ddospot - restart: always - networks: - - ddospot_local - ports: - - "19:19/udp" - - "53:53/udp" - - "123:123/udp" -# - "161:161/udp" - - "1900:1900/udp" - image: "dtagdevsec/ddospot:2204" - read_only: true - volumes: - - /data/ddospot/log:/opt/ddospot/ddospot/logs - - /data/ddospot/bl:/opt/ddospot/ddospot/bl - - /data/ddospot/db:/opt/ddospot/ddospot/db + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot # Dicompot service # Get the Horos Client for testing: https://horosproject.org/ -# Get Dicom images (CC BY 3.0): https://www.cancerimagingarchive.net/collections/ +# Get Dicom images (CC BY 3.0): https://www.cancerimagingarchive.net/collections/ # Put images (which must be in Dicom DCM format or it will not work!) into /data/dicompot/images dicompot: container_name: dicompot restart: always + depends_on: + tpotinit: + condition: service_healthy networks: - dicompot_local ports: - "11112:11112" - image: "dtagdevsec/dicompot:2204" + image: ${TPOT_REPO}/dicompot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/dicompot/log:/var/log/dicompot -# - /data/dicompot/images:/opt/dicompot/images + - ${TPOT_DATA_PATH}/dicompot/log:/var/log/dicompot +# - ${TPOT_DATA_PATH}/dicompot/images:/opt/dicompot/images -# Dionaea service - dionaea: - container_name: dionaea +# Honeypots service + honeypots: + container_name: honeypots stdin_open: true tty: true restart: always - networks: - - dionaea_local - ports: - - "20:20" - - "21:21" - - "42:42" - - "69:69/udp" - - "81:81" - - "135:135" - # - "443:443" - - "445:445" - - "1433:1433" - - "1723:1723" - - "1883:1883" - - "3306:3306" - # - "5060:5060" - # - "5060:5060/udp" - # - "5061:5061" - - "27017:27017" - image: "dtagdevsec/dionaea:2204" - read_only: true - volumes: - - /data/dionaea/roots/ftp:/opt/dionaea/var/dionaea/roots/ftp - - /data/dionaea/roots/tftp:/opt/dionaea/var/dionaea/roots/tftp - - /data/dionaea/roots/www:/opt/dionaea/var/dionaea/roots/www - - /data/dionaea/roots/upnp:/opt/dionaea/var/dionaea/roots/upnp - - /data/dionaea:/opt/dionaea/var/dionaea - - /data/dionaea/binaries:/opt/dionaea/var/dionaea/binaries - - /data/dionaea/log:/opt/dionaea/var/log - - /data/dionaea/rtp:/opt/dionaea/var/dionaea/rtp - -# ElasticPot service - elasticpot: - container_name: elasticpot - restart: always - networks: - - elasticpot_local - ports: - - "9200:9200" - image: "dtagdevsec/elasticpot:2204" - read_only: true - volumes: - - /data/elasticpot/log:/opt/elasticpot/log - -# Endlessh service - endlessh: - container_name: endlessh - restart: always - networks: - - endlessh_local - ports: - - "22:2222" - image: "dtagdevsec/endlessh:2204" - read_only: true - volumes: - - /data/endlessh/log:/var/log/endlessh - -# Glutton service - glutton: - container_name: glutton - restart: always + depends_on: + tpotinit: + condition: service_healthy tmpfs: - - /var/lib/glutton:uid=2000,gid=2000 - - /run:uid=2000,gid=2000 + - /tmp:uid=2000,gid=2000 + networks: + - honeypots_local + ports: + - "21:21" + - "22:22" + - "23:23" + - "25:25" + - "53:53/udp" + - "80:80" + - "110:110" + - "123:123" + - "143:143" + - "161:161" + - "389:389" + - "443:443" + - "445:445" + - "631:631" + - "1080:1080" + - "1433:1433" + - "1521:1521" + - "3306:3306" + - "3389:3389" + - "5060:5060/tcp" + - "5060:5060/udp" + - "5432:5432" + - "5900:5900" + - "6379:6379" + - "6667:6667" + - "8080:8080" + - "9100:9100" + - "9200:9200" + - "11211:11211" + image: ${TPOT_REPO}/honeypots:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/honeypots/log:/var/log/honeypots + +# Honeytrap service + honeytrap: + container_name: honeytrap + restart: always + depends_on: + tpotinit: + condition: service_healthy + tmpfs: + - /tmp/honeytrap:uid=2000,gid=2000 network_mode: "host" cap_add: - NET_ADMIN - image: "dtagdevsec/glutton:2204" + image: ${TPOT_REPO}/honeytrap:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/glutton/log:/var/log/glutton -# - /root/tpotce/docker/glutton/dist/rules.yaml:/opt/glutton/rules/rules.yaml - -# Heralding service - heralding: - container_name: heralding - restart: always - tmpfs: - - /tmp/heralding:uid=2000,gid=2000 - networks: - - heralding_local - ports: - # - "21:21" - # - "22:22" - # - "23:23" - # - "25:25" - # - "80:80" - - "110:110" - - "143:143" - # - "443:443" - - "465:465" - - "993:993" - - "995:995" - # - "3306:3306" - # - "3389:3389" - - "1080:1080" - - "5432:5432" - - "5900:5900" - image: "dtagdevsec/heralding:2204" - read_only: true - volumes: - - /data/heralding/log:/var/log/heralding - -# Ipphoney service - ipphoney: - container_name: ipphoney - restart: always - networks: - - ipphoney_local - ports: - - "631:631" - image: "dtagdevsec/ipphoney:2204" - read_only: true - volumes: - - /data/ipphoney/log:/opt/ipphoney/log - -# Mailoney service - mailoney: - container_name: mailoney - restart: always - environment: - - HPFEEDS_SERVER= - - HPFEEDS_IDENT=user - - HPFEEDS_SECRET=pass - - HPFEEDS_PORT=20000 - - HPFEEDS_CHANNELPREFIX=prefix - networks: - - mailoney_local - ports: - - "25:25" - image: "dtagdevsec/mailoney:2204" - read_only: true - volumes: - - /data/mailoney/log:/opt/mailoney/logs + - ${TPOT_DATA_PATH}/honeytrap/attacks:/opt/honeytrap/var/attacks + - ${TPOT_DATA_PATH}/honeytrap/downloads:/opt/honeytrap/var/downloads + - ${TPOT_DATA_PATH}/honeytrap/log:/opt/honeytrap/var/log # Medpot service medpot: container_name: medpot restart: always + depends_on: + tpotinit: + condition: service_healthy networks: - medpot_local ports: - "2575:2575" - image: "dtagdevsec/medpot:2204" + image: ${TPOT_REPO}/medpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/medpot/log/:/var/log/medpot + - ${TPOT_DATA_PATH}/medpot/log/:/var/log/medpot -# Redishoneypot service - redishoneypot: - container_name: redishoneypot - restart: always - networks: - - redishoneypot_local - ports: - - "6379:6379" - image: "dtagdevsec/redishoneypot:2204" - read_only: true - volumes: - - /data/redishoneypot/log:/var/log/redishoneypot - -# Hellpot service - hellpot: - container_name: hellpot - restart: always - networks: - - hellpot_local - ports: - - "80:8080" - image: "dtagdevsec/hellpot:2204" - read_only: true - volumes: - - /data/hellpot/log:/var/log/hellpot ################## #### NSM @@ -383,46 +304,57 @@ services: fatt: container_name: fatt restart: always + depends_on: + tpotinit: + condition: service_healthy network_mode: "host" cap_add: - NET_ADMIN - SYS_NICE - NET_RAW - image: "dtagdevsec/fatt:2204" + image: ${TPOT_REPO}/fatt:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} volumes: - - /data/fatt/log:/opt/fatt/log + - ${TPOT_DATA_PATH}/fatt/log:/opt/fatt/log # P0f service p0f: container_name: p0f restart: always + depends_on: + tpotinit: + condition: service_healthy network_mode: "host" - image: "dtagdevsec/p0f:2204" + image: ${TPOT_REPO}/p0f:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/p0f/log:/var/log/p0f + - ${TPOT_DATA_PATH}/p0f/log:/var/log/p0f # Suricata service suricata: container_name: suricata restart: always + depends_on: + tpotinit: + condition: service_healthy environment: - # For ET Pro ruleset replace "OPEN" with your OINKCODE - - OINKCODE=OPEN - # Loading externel Rules from URL + - OINKCODE=${OINKCODE:-OPEN} # Default to OPEN if unset or NULL (value provided by T-Pot .env) + # Loading external Rules from URL # - FROMURL="https://username:password@yoururl.com|https://username:password@otherurl.com" network_mode: "host" cap_add: - NET_ADMIN - SYS_NICE - NET_RAW - image: "dtagdevsec/suricata:2204" + image: ${TPOT_REPO}/suricata:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} volumes: - - /data/suricata/log:/var/log/suricata + - ${TPOT_DATA_PATH}/suricata/log:/var/log/suricata ################## -#### Tools +#### Tools ################## #### ELK @@ -430,6 +362,9 @@ services: elasticsearch: container_name: elasticsearch restart: always + depends_on: + tpotinit: + condition: service_healthy environment: - bootstrap.memory_lock=true - ES_JAVA_OPTS=-Xms2048m -Xmx2048m @@ -446,9 +381,10 @@ services: mem_limit: 4g ports: - "127.0.0.1:64298:9200" - image: "dtagdevsec/elasticsearch:2204" + image: ${TPOT_REPO}/elasticsearch:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} volumes: - - /data:/data + - ${TPOT_DATA_PATH}:/data ## Kibana service kibana: @@ -460,46 +396,57 @@ services: mem_limit: 1g ports: - "127.0.0.1:64296:5601" - image: "dtagdevsec/kibana:2204" + image: ${TPOT_REPO}/kibana:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} ## Logstash service logstash: container_name: logstash restart: always - environment: - - LS_JAVA_OPTS=-Xms1024m -Xmx1024m depends_on: elasticsearch: condition: service_healthy - env_file: - - /opt/tpot/etc/compose/elk_environment + environment: + - LS_JAVA_OPTS=-Xms1024m -Xmx1024m + - TPOT_TYPE=${TPOT_TYPE:-HIVE} + - TPOT_HIVE_USER=${TPOT_HIVE_USER} + - TPOT_HIVE_IP=${TPOT_HIVE_IP} + ports: + - "127.0.0.1:64305:64305" mem_limit: 2g - image: "dtagdevsec/logstash:2204" + image: ${TPOT_REPO}/logstash:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} volumes: - - /data:/data + - ${TPOT_DATA_PATH}:/data ## Map Redis Service map_redis: container_name: map_redis restart: always + depends_on: + tpotinit: + condition: service_healthy stop_signal: SIGKILL tty: true - image: "dtagdevsec/redis:2204" + image: ${TPOT_REPO}/redis:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true ## Map Web Service map_web: container_name: map_web restart: always + depends_on: + tpotinit: + condition: service_healthy environment: - MAP_COMMAND=AttackMapServer.py - env_file: - - /opt/tpot/etc/compose/elk_environment stop_signal: SIGKILL tty: true ports: - "127.0.0.1:64299:64299" - image: "dtagdevsec/map:2204" + image: ${TPOT_REPO}/map:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} ## Map Data Service map_data: @@ -510,17 +457,21 @@ services: condition: service_healthy environment: - MAP_COMMAND=DataServer_v2.py - env_file: - - /opt/tpot/etc/compose/elk_environment + - TPOT_ATTACKMAP_TEXT=${TPOT_ATTACKMAP_TEXT} + - TZ=${TPOT_ATTACKMAP_TEXT_TIMEZONE} stop_signal: SIGKILL tty: true - image: "dtagdevsec/map:2204" + image: ${TPOT_REPO}/map:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} #### /ELK # Ewsposter service ewsposter: container_name: ewsposter restart: always + depends_on: + tpotinit: + condition: service_healthy networks: - ewsposter_local environment: @@ -532,17 +483,21 @@ services: - EWS_HPFEEDS_SECRET=secret - EWS_HPFEEDS_TLSCERT=false - EWS_HPFEEDS_FORMAT=json - env_file: - - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/ewsposter:2204" + image: ${TPOT_REPO}/ewsposter:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} volumes: - - /data:/data - - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip + - ${TPOT_DATA_PATH}:/data + - ${TPOT_DATA_PATH}/ews/conf/ews.ip:/opt/ewsposter/ews.ip # Nginx service nginx: container_name: nginx restart: always + environment: + - TPOT_OSTYPE=${TPOT_OSTYPE} + depends_on: + tpotinit: + condition: service_healthy tmpfs: - /var/tmp/nginx/client_body - /var/tmp/nginx/proxy @@ -552,24 +507,29 @@ services: - /run - /var/lib/nginx/tmp:uid=100,gid=82 network_mode: "host" - # ports: - # - "64297:64297" - # - "127.0.0.1:64304:64304" - image: "dtagdevsec/nginx:2204" + ports: + - "64297:64297" + image: ${TPOT_REPO}/nginx:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/nginx/cert/:/etc/nginx/cert/:ro - - /data/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro - - /data/nginx/log/:/var/log/nginx/ + - ${TPOT_DATA_PATH}/nginx/cert/:/etc/nginx/cert/:ro + - ${TPOT_DATA_PATH}/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro + - ${TPOT_DATA_PATH}/nginx/conf/lswebpasswd:/etc/nginx/lswebpasswd:ro + - ${TPOT_DATA_PATH}/nginx/log/:/var/log/nginx/ # Spiderfoot service spiderfoot: container_name: spiderfoot restart: always + depends_on: + tpotinit: + condition: service_healthy networks: - spiderfoot_local ports: - "127.0.0.1:64303:8080" - image: "dtagdevsec/spiderfoot:2204" + image: ${TPOT_REPO}/spiderfoot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} volumes: - - /data/spiderfoot:/home/spiderfoot/.spiderfoot + - ${TPOT_DATA_PATH}/spiderfoot:/home/spiderfoot/.spiderfoot diff --git a/compose/mobile.yml b/compose/mobile.yml new file mode 100644 index 00000000..ddb1de2d --- /dev/null +++ b/compose/mobile.yml @@ -0,0 +1,628 @@ +# T-Pot: MOBILE +# Note: This docker compose file has been adjusted to limit the number of tools, services and honeypots to run +# T-Pot on a Raspberry Pi 4 (8GB of RAM). +# The standard docker compose file should work mostly fine (depending on traffic) if you do not enable a +# desktop environment such as LXDE and meet the minimum requirements of 8GB RAM. +version: '3.9' + +networks: + ciscoasa_local: + citrixhoneypot_local: + conpot_local_IEC104: + conpot_local_ipmi: + conpot_local_kamstrup_382: + cowrie_local: + dicompot_local: + dionaea_local: + elasticpot_local: + heralding_local: + ipphoney_local: + log4pot_local: + mailoney_local: + medpot_local: + redishoneypot_local: + sentrypeer_local: + tanner_local: + wordpot_local: + ewsposter_local: + +services: + +######################################### +#### DEV +######################################### +#### T-Pot Init - Never delete this! +######################################### + +# T-Pot Init Service + tpotinit: + container_name: tpotinit + env_file: + - .env + restart: always + stop_grace_period: 60s + tmpfs: + - /tmp/etc:uid=2000,gid=2000 + - /tmp/:uid=2000,gid=2000 + network_mode: "host" + cap_add: + - NET_ADMIN + image: ${TPOT_REPO}/tpotinit:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DOCKER_COMPOSE}:/tmp/tpot/docker-compose.yml:ro + - ${TPOT_DATA_PATH}/blackhole:/etc/blackhole + - ${TPOT_DATA_PATH}:/data + - /var/run/docker.sock:/var/run/docker.sock:ro + +################## +#### Honeypots +################## + +# Ciscoasa service + ciscoasa: + container_name: ciscoasa + restart: always + depends_on: + logstash: + condition: service_healthy + tmpfs: + - /tmp/ciscoasa:uid=2000,gid=2000 + networks: + - ciscoasa_local + ports: + - "5000:5000/udp" + - "8443:8443" + image: ${TPOT_REPO}/ciscoasa:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/ciscoasa/log:/var/log/ciscoasa + +# CitrixHoneypot service + citrixhoneypot: + container_name: citrixhoneypot + restart: always + depends_on: + logstash: + condition: service_healthy + networks: + - citrixhoneypot_local + ports: + - "443:443" + image: ${TPOT_REPO}/citrixhoneypot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/citrixhoneypot/log:/opt/citrixhoneypot/logs + +# Conpot IEC104 service + conpot_IEC104: + container_name: conpot_iec104 + restart: always + depends_on: + logstash: + condition: service_healthy + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_IEC104.json + - CONPOT_LOG=/var/log/conpot/conpot_IEC104.log + - CONPOT_TEMPLATE=IEC104 + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_IEC104 + ports: + - "161:161/udp" + - "2404:2404" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot + +# Conpot ipmi + conpot_ipmi: + container_name: conpot_ipmi + restart: always + depends_on: + logstash: + condition: service_healthy + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_ipmi.json + - CONPOT_LOG=/var/log/conpot/conpot_ipmi.log + - CONPOT_TEMPLATE=ipmi + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_ipmi + ports: + - "623:623/udp" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot + +# Conpot kamstrup_382 + conpot_kamstrup_382: + container_name: conpot_kamstrup_382 + restart: always + depends_on: + logstash: + condition: service_healthy + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_kamstrup_382.json + - CONPOT_LOG=/var/log/conpot/conpot_kamstrup_382.log + - CONPOT_TEMPLATE=kamstrup_382 + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_kamstrup_382 + ports: + - "1025:1025" + - "50100:50100" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot + +# Cowrie service + cowrie: + container_name: cowrie + restart: always + depends_on: + logstash: + condition: service_healthy + tmpfs: + - /tmp/cowrie:uid=2000,gid=2000 + - /tmp/cowrie/data:uid=2000,gid=2000 + networks: + - cowrie_local + ports: + - "22:22" + - "23:23" + image: ${TPOT_REPO}/cowrie:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/cowrie/downloads:/home/cowrie/cowrie/dl + - ${TPOT_DATA_PATH}/cowrie/keys:/home/cowrie/cowrie/etc + - ${TPOT_DATA_PATH}/cowrie/log:/home/cowrie/cowrie/log + - ${TPOT_DATA_PATH}/cowrie/log/tty:/home/cowrie/cowrie/log/tty + +# Dicompot service +# Get the Horos Client for testing: https://horosproject.org/ +# Get Dicom images (CC BY 3.0): https://www.cancerimagingarchive.net/collections/ +# Put images (which must be in Dicom DCM format or it will not work!) into /data/dicompot/images + dicompot: + container_name: dicompot + restart: always + depends_on: + logstash: + condition: service_healthy + networks: + - dicompot_local + ports: + - "11112:11112" + image: ${TPOT_REPO}/dicompot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/dicompot/log:/var/log/dicompot +# - ${TPOT_DATA_PATH}/dicompot/images:/opt/dicompot/images + +# Dionaea service + dionaea: + container_name: dionaea + stdin_open: true + tty: true + restart: always + depends_on: + logstash: + condition: service_healthy + networks: + - dionaea_local + ports: + - "20:20" + - "21:21" + - "42:42" + - "69:69/udp" + - "81:81" + - "135:135" + # - "443:443" + - "445:445" + - "1433:1433" + - "1723:1723" + - "1883:1883" + - "3306:3306" + # - "5060:5060" + # - "5060:5060/udp" + # - "5061:5061" + - "27017:27017" + image: ${TPOT_REPO}/dionaea:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/dionaea/roots/ftp:/opt/dionaea/var/dionaea/roots/ftp + - ${TPOT_DATA_PATH}/dionaea/roots/tftp:/opt/dionaea/var/dionaea/roots/tftp + - ${TPOT_DATA_PATH}/dionaea/roots/www:/opt/dionaea/var/dionaea/roots/www + - ${TPOT_DATA_PATH}/dionaea/roots/upnp:/opt/dionaea/var/dionaea/roots/upnp + - ${TPOT_DATA_PATH}/dionaea:/opt/dionaea/var/dionaea + - ${TPOT_DATA_PATH}/dionaea/binaries:/opt/dionaea/var/dionaea/binaries + - ${TPOT_DATA_PATH}/dionaea/log:/opt/dionaea/var/log + - ${TPOT_DATA_PATH}/dionaea/rtp:/opt/dionaea/var/dionaea/rtp + +# ElasticPot service + elasticpot: + container_name: elasticpot + restart: always + depends_on: + logstash: + condition: service_healthy + networks: + - elasticpot_local + ports: + - "9200:9200" + image: ${TPOT_REPO}/elasticpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/elasticpot/log:/opt/elasticpot/log + +# Heralding service + heralding: + container_name: heralding + restart: always + depends_on: + logstash: + condition: service_healthy + tmpfs: + - /tmp/heralding:uid=2000,gid=2000 + networks: + - heralding_local + ports: + # - "21:21" + # - "22:22" + # - "23:23" + # - "25:25" + # - "80:80" + - "110:110" + - "143:143" + # - "443:443" + - "465:465" + - "993:993" + - "995:995" + # - "3306:3306" + # - "3389:3389" + - "1080:1080" + - "5432:5432" + - "5900:5900" + image: ${TPOT_REPO}/heralding:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/heralding/log:/var/log/heralding + +# Honeytrap service + honeytrap: + container_name: honeytrap + restart: always + depends_on: + logstash: + condition: service_healthy + tmpfs: + - /tmp/honeytrap:uid=2000,gid=2000 + network_mode: "host" + cap_add: + - NET_ADMIN + image: ${TPOT_REPO}/honeytrap:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/honeytrap/attacks:/opt/honeytrap/var/attacks + - ${TPOT_DATA_PATH}/honeytrap/downloads:/opt/honeytrap/var/downloads + - ${TPOT_DATA_PATH}/honeytrap/log:/opt/honeytrap/var/log + +# Ipphoney service + ipphoney: + container_name: ipphoney + restart: always + depends_on: + logstash: + condition: service_healthy + networks: + - ipphoney_local + ports: + - "631:631" + image: ${TPOT_REPO}/ipphoney:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/ipphoney/log:/opt/ipphoney/log + +# Mailoney service + mailoney: + container_name: mailoney + restart: always + depends_on: + logstash: + condition: service_healthy + environment: + - HPFEEDS_SERVER= + - HPFEEDS_IDENT=user + - HPFEEDS_SECRET=pass + - HPFEEDS_PORT=20000 + - HPFEEDS_CHANNELPREFIX=prefix + networks: + - mailoney_local + ports: + - "25:25" + - "587:25" + image: ${TPOT_REPO}/mailoney:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/mailoney/log:/opt/mailoney/logs + +# Log4pot service + log4pot: + container_name: log4pot + restart: always + depends_on: + logstash: + condition: service_healthy + tmpfs: + - /tmp:uid=2000,gid=2000 + networks: + - log4pot_local + ports: + # - "80:8080" + # - "443:8080" + - "8080:8080" + # - "9200:8080" + - "25565:8080" + image: ${TPOT_REPO}/log4pot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/log4pot/log:/var/log/log4pot/log + - ${TPOT_DATA_PATH}/log4pot/payloads:/var/log/log4pot/payloads + +# Medpot service + medpot: + container_name: medpot + restart: always + depends_on: + logstash: + condition: service_healthy + networks: + - medpot_local + ports: + - "2575:2575" + image: ${TPOT_REPO}/medpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/medpot/log/:/var/log/medpot + +# Redishoneypot service + redishoneypot: + container_name: redishoneypot + restart: always + depends_on: + logstash: + condition: service_healthy + networks: + - redishoneypot_local + ports: + - "6379:6379" + image: ${TPOT_REPO}/redishoneypot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/redishoneypot/log:/var/log/redishoneypot + +# SentryPeer service + sentrypeer: + container_name: sentrypeer + restart: always + depends_on: + logstash: + condition: service_healthy +# environment: +# - SENTRYPEER_PEER_TO_PEER=1 + networks: + - sentrypeer_local + ports: +# - "4222:4222/udp" + - "5060:5060/tcp" + - "5060:5060/udp" +# - "127.0.0.1:8082:8082" + image: ${TPOT_REPO}/sentrypeer:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/sentrypeer/log:/var/log/sentrypeer + +#### Snare / Tanner +## Tanner Redis Service + tanner_redis: + container_name: tanner_redis + restart: always + depends_on: + logstash: + condition: service_healthy + tty: true + networks: + - tanner_local + image: ${TPOT_REPO}/redis:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + +## PHP Sandbox service + tanner_phpox: + container_name: tanner_phpox + restart: always + depends_on: + logstash: + condition: service_healthy + tty: true + networks: + - tanner_local + image: ${TPOT_REPO}/phpox:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + +## Tanner API Service + tanner_api: + container_name: tanner_api + restart: always + depends_on: + - tanner_redis + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: ${TPOT_REPO}/tanner:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/tanner/log:/var/log/tanner + command: tannerapi + +## Tanner Service + tanner: + container_name: tanner + restart: always + depends_on: + - tanner_api + - tanner_phpox + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: ${TPOT_REPO}/tanner:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + command: tanner + read_only: true + volumes: + - ${TPOT_DATA_PATH}/tanner/log:/var/log/tanner + - ${TPOT_DATA_PATH}/tanner/files:/opt/tanner/files + +## Snare Service + snare: + container_name: snare + restart: always + depends_on: + - tanner + tty: true + networks: + - tanner_local + ports: + - "80:80" + image: ${TPOT_REPO}/snare:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + +# Wordpot service + wordpot: + container_name: wordpot + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - wordpot_local + ports: + - "8080:80" + image: ${TPOT_REPO}/wordpot:${TPOT_VERSION} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/wordpot/log:/opt/wordpot/logs/ + + +################## +#### Tools +################## + +#### ELK +## Elasticsearch service + elasticsearch: + container_name: elasticsearch + restart: always + depends_on: + tpotinit: + condition: service_healthy + environment: + - bootstrap.memory_lock=true + - ES_JAVA_OPTS=-Xms2048m -Xmx2048m + - ES_TMPDIR=/tmp + cap_add: + - IPC_LOCK + ulimits: + memlock: + soft: -1 + hard: -1 + nofile: + soft: 65536 + hard: 65536 + mem_limit: 4g + ports: + - "127.0.0.1:64298:9200" + image: ${TPOT_REPO}/elasticsearch:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DATA_PATH}:/data + +## Logstash service + logstash: + container_name: logstash + restart: always + depends_on: + elasticsearch: + condition: service_healthy + environment: + - LS_JAVA_OPTS=-Xms1024m -Xmx1024m + - TPOT_TYPE=${TPOT_TYPE:-HIVE} + - TPOT_HIVE_USER=${TPOT_HIVE_USER} + - TPOT_HIVE_IP=${TPOT_HIVE_IP} + ports: + - "127.0.0.1:64305:64305" + mem_limit: 2g + image: ${TPOT_REPO}/logstash:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DATA_PATH}:/data +#### /ELK + +# Ewsposter service + ewsposter: + container_name: ewsposter + restart: always + depends_on: + logstash: + condition: service_healthy + networks: + - ewsposter_local + environment: + - EWS_HPFEEDS_ENABLE=false + - EWS_HPFEEDS_HOST=host + - EWS_HPFEEDS_PORT=port + - EWS_HPFEEDS_CHANNELS=channels + - EWS_HPFEEDS_IDENT=user + - EWS_HPFEEDS_SECRET=secret + - EWS_HPFEEDS_TLSCERT=false + - EWS_HPFEEDS_FORMAT=json + image: ${TPOT_REPO}/ewsposter:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DATA_PATH}:/data + - ${TPOT_DATA_PATH}/ews/conf/ews.ip:/opt/ewsposter/ews.ip diff --git a/compose/raspberry_showcase.yml b/compose/raspberry_showcase.yml new file mode 100644 index 00000000..1dabc0fe --- /dev/null +++ b/compose/raspberry_showcase.yml @@ -0,0 +1,628 @@ +# T-Pot: MOBILE +# Note: This docker compose file has been adjusted to limit the number of tools, services and honeypots to run +# T-Pot on a Raspberry Pi 4 (8GB of RAM). +# The standard docker compose file should work mostly fine (depending on traffic) if you do not enable a +# desktop environment such as LXDE and meet the minimum requirements of 8GB RAM. +version: '3.9' + +networks: + ciscoasa_local: + citrixhoneypot_local: + conpot_local_IEC104: + conpot_local_ipmi: + conpot_local_kamstrup_382: + cowrie_local: + dicompot_local: + dionaea_local: + elasticpot_local: + heralding_local: + ipphoney_local: + log4pot_local: + mailoney_local: + medpot_local: + redishoneypot_local: + sentrypeer_local: + tanner_local: + wordpot_local: + ewsposter_local: + +services: + +######################################### +#### DEV +######################################### +#### T-Pot Init - Never delete this! +######################################### + +# T-Pot Init Service + tpotinit: + container_name: tpotinit + env_file: + - .env + restart: always + stop_grace_period: 60s + tmpfs: + - /tmp/etc:uid=2000,gid=2000 + - /tmp/:uid=2000,gid=2000 + network_mode: "host" + cap_add: + - NET_ADMIN + image: ${TPOT_REPO}/tpotinit:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DOCKER_COMPOSE}:/tmp/tpot/docker-compose.yml:ro + - ${TPOT_DATA_PATH}/blackhole:/etc/blackhole + - ${TPOT_DATA_PATH}:/data + - /var/run/docker.sock:/var/run/docker.sock:ro + +################## +#### Honeypots +################## + +# Ciscoasa service + ciscoasa: + container_name: ciscoasa + restart: always + depends_on: + logstash: + condition: service_healthy + tmpfs: + - /tmp/ciscoasa:uid=2000,gid=2000 + networks: + - ciscoasa_local + ports: + - "5000:5000/udp" + - "8443:8443" + image: ${TPOT_REPO}/ciscoasa:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/ciscoasa/log:/var/log/ciscoasa + +# CitrixHoneypot service + citrixhoneypot: + container_name: citrixhoneypot + restart: always + depends_on: + logstash: + condition: service_healthy + networks: + - citrixhoneypot_local + ports: + - "443:443" + image: ${TPOT_REPO}/citrixhoneypot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/citrixhoneypot/log:/opt/citrixhoneypot/logs + +# Conpot IEC104 service + conpot_IEC104: + container_name: conpot_iec104 + restart: always + depends_on: + logstash: + condition: service_healthy + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_IEC104.json + - CONPOT_LOG=/var/log/conpot/conpot_IEC104.log + - CONPOT_TEMPLATE=IEC104 + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_IEC104 + ports: + - "161:161/udp" + - "2404:2404" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot + +# Conpot ipmi + conpot_ipmi: + container_name: conpot_ipmi + restart: always + depends_on: + logstash: + condition: service_healthy + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_ipmi.json + - CONPOT_LOG=/var/log/conpot/conpot_ipmi.log + - CONPOT_TEMPLATE=ipmi + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_ipmi + ports: + - "623:623/udp" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot + +# Conpot kamstrup_382 + conpot_kamstrup_382: + container_name: conpot_kamstrup_382 + restart: always + depends_on: + logstash: + condition: service_healthy + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_kamstrup_382.json + - CONPOT_LOG=/var/log/conpot/conpot_kamstrup_382.log + - CONPOT_TEMPLATE=kamstrup_382 + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_kamstrup_382 + ports: + - "1025:1025" + - "50100:50100" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot + +# Cowrie service + cowrie: + container_name: cowrie + restart: always + depends_on: + logstash: + condition: service_healthy + tmpfs: + - /tmp/cowrie:uid=2000,gid=2000 + - /tmp/cowrie/data:uid=2000,gid=2000 + networks: + - cowrie_local + ports: + - "22:22" + - "23:23" + image: ${TPOT_REPO}/cowrie:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/cowrie/downloads:/home/cowrie/cowrie/dl + - ${TPOT_DATA_PATH}/cowrie/keys:/home/cowrie/cowrie/etc + - ${TPOT_DATA_PATH}/cowrie/log:/home/cowrie/cowrie/log + - ${TPOT_DATA_PATH}/cowrie/log/tty:/home/cowrie/cowrie/log/tty + +# Dicompot service +# Get the Horos Client for testing: https://horosproject.org/ +# Get Dicom images (CC BY 3.0): https://www.cancerimagingarchive.net/collections/ +# Put images (which must be in Dicom DCM format or it will not work!) into /data/dicompot/images + dicompot: + container_name: dicompot + restart: always + depends_on: + logstash: + condition: service_healthy + networks: + - dicompot_local + ports: + - "11112:11112" + image: ${TPOT_REPO}/dicompot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/dicompot/log:/var/log/dicompot +# - ${TPOT_DATA_PATH}/dicompot/images:/opt/dicompot/images + +# Dionaea service + dionaea: + container_name: dionaea + stdin_open: true + tty: true + restart: always + depends_on: + logstash: + condition: service_healthy + networks: + - dionaea_local + ports: + - "20:20" + - "21:21" + - "42:42" + - "69:69/udp" + - "81:81" + - "135:135" + # - "443:443" + - "445:445" + - "1433:1433" + - "1723:1723" + - "1883:1883" + - "3306:3306" + # - "5060:5060" + # - "5060:5060/udp" + # - "5061:5061" + - "27017:27017" + image: ${TPOT_REPO}/dionaea:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/dionaea/roots/ftp:/opt/dionaea/var/dionaea/roots/ftp + - ${TPOT_DATA_PATH}/dionaea/roots/tftp:/opt/dionaea/var/dionaea/roots/tftp + - ${TPOT_DATA_PATH}/dionaea/roots/www:/opt/dionaea/var/dionaea/roots/www + - ${TPOT_DATA_PATH}/dionaea/roots/upnp:/opt/dionaea/var/dionaea/roots/upnp + - ${TPOT_DATA_PATH}/dionaea:/opt/dionaea/var/dionaea + - ${TPOT_DATA_PATH}/dionaea/binaries:/opt/dionaea/var/dionaea/binaries + - ${TPOT_DATA_PATH}/dionaea/log:/opt/dionaea/var/log + - ${TPOT_DATA_PATH}/dionaea/rtp:/opt/dionaea/var/dionaea/rtp + +# ElasticPot service + elasticpot: + container_name: elasticpot + restart: always + depends_on: + logstash: + condition: service_healthy + networks: + - elasticpot_local + ports: + - "9200:9200" + image: ${TPOT_REPO}/elasticpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/elasticpot/log:/opt/elasticpot/log + +# Heralding service + heralding: + container_name: heralding + restart: always + depends_on: + logstash: + condition: service_healthy + tmpfs: + - /tmp/heralding:uid=2000,gid=2000 + networks: + - heralding_local + ports: + # - "21:21" + # - "22:22" + # - "23:23" + # - "25:25" + # - "80:80" + - "110:110" + - "143:143" + # - "443:443" + - "465:465" + - "993:993" + - "995:995" + # - "3306:3306" + # - "3389:3389" + - "1080:1080" + - "5432:5432" + - "5900:5900" + image: ${TPOT_REPO}/heralding:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/heralding/log:/var/log/heralding + +# Honeytrap service + honeytrap: + container_name: honeytrap + restart: always + depends_on: + logstash: + condition: service_healthy + tmpfs: + - /tmp/honeytrap:uid=2000,gid=2000 + network_mode: "host" + cap_add: + - NET_ADMIN + image: ${TPOT_REPO}/honeytrap:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/honeytrap/attacks:/opt/honeytrap/var/attacks + - ${TPOT_DATA_PATH}/honeytrap/downloads:/opt/honeytrap/var/downloads + - ${TPOT_DATA_PATH}/honeytrap/log:/opt/honeytrap/var/log + +# Ipphoney service + ipphoney: + container_name: ipphoney + restart: always + depends_on: + logstash: + condition: service_healthy + networks: + - ipphoney_local + ports: + - "631:631" + image: ${TPOT_REPO}/ipphoney:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/ipphoney/log:/opt/ipphoney/log + +# Mailoney service + mailoney: + container_name: mailoney + restart: always + depends_on: + logstash: + condition: service_healthy + environment: + - HPFEEDS_SERVER= + - HPFEEDS_IDENT=user + - HPFEEDS_SECRET=pass + - HPFEEDS_PORT=20000 + - HPFEEDS_CHANNELPREFIX=prefix + networks: + - mailoney_local + ports: + - "25:25" + - "587:25" + image: ${TPOT_REPO}/mailoney:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/mailoney/log:/opt/mailoney/logs + +# Log4pot service + log4pot: + container_name: log4pot + restart: always + depends_on: + logstash: + condition: service_healthy + tmpfs: + - /tmp:uid=2000,gid=2000 + networks: + - log4pot_local + ports: + # - "80:8080" + # - "443:8080" + - "8080:8080" + # - "9200:8080" + - "25565:8080" + image: ${TPOT_REPO}/log4pot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/log4pot/log:/var/log/log4pot/log + - ${TPOT_DATA_PATH}/log4pot/payloads:/var/log/log4pot/payloads + +# Medpot service + medpot: + container_name: medpot + restart: always + depends_on: + logstash: + condition: service_healthy + networks: + - medpot_local + ports: + - "2575:2575" + image: ${TPOT_REPO}/medpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/medpot/log/:/var/log/medpot + +# Redishoneypot service + redishoneypot: + container_name: redishoneypot + restart: always + depends_on: + logstash: + condition: service_healthy + networks: + - redishoneypot_local + ports: + - "6379:6379" + image: ${TPOT_REPO}/redishoneypot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/redishoneypot/log:/var/log/redishoneypot + +# SentryPeer service + sentrypeer: + container_name: sentrypeer + restart: always + depends_on: + logstash: + condition: service_healthy +# environment: +# - SENTRYPEER_PEER_TO_PEER=1 + networks: + - sentrypeer_local + ports: +# - "4222:4222/udp" + - "5060:5060/tcp" + - "5060:5060/udp" +# - "127.0.0.1:8082:8082" + image: ${TPOT_REPO}/sentrypeer:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/sentrypeer/log:/var/log/sentrypeer + +#### Snare / Tanner +## Tanner Redis Service + tanner_redis: + container_name: tanner_redis + restart: always + depends_on: + logstash: + condition: service_healthy + tty: true + networks: + - tanner_local + image: ${TPOT_REPO}/redis:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + +## PHP Sandbox service + tanner_phpox: + container_name: tanner_phpox + restart: always + depends_on: + logstash: + condition: service_healthy + tty: true + networks: + - tanner_local + image: ${TPOT_REPO}/phpox:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + +## Tanner API Service + tanner_api: + container_name: tanner_api + restart: always + depends_on: + - tanner_redis + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: ${TPOT_REPO}/tanner:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/tanner/log:/var/log/tanner + command: tannerapi + +## Tanner Service + tanner: + container_name: tanner + restart: always + depends_on: + - tanner_api + - tanner_phpox + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: ${TPOT_REPO}/tanner:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + command: tanner + read_only: true + volumes: + - ${TPOT_DATA_PATH}/tanner/log:/var/log/tanner + - ${TPOT_DATA_PATH}/tanner/files:/opt/tanner/files + +## Snare Service + snare: + container_name: snare + restart: always + depends_on: + - tanner + tty: true + networks: + - tanner_local + ports: + - "80:80" + image: ${TPOT_REPO}/snare:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + +# Wordpot service + wordpot: + container_name: wordpot + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - wordpot_local + ports: + - "82:80" + image: ${TPOT_REPO}/wordpot:${TPOT_VERSION} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/wordpot/log:/opt/wordpot/logs/ + + +################## +#### Tools +################## + +#### ELK +## Elasticsearch service + elasticsearch: + container_name: elasticsearch + restart: always + depends_on: + tpotinit: + condition: service_healthy + environment: + - bootstrap.memory_lock=true + - ES_JAVA_OPTS=-Xms2048m -Xmx2048m + - ES_TMPDIR=/tmp + cap_add: + - IPC_LOCK + ulimits: + memlock: + soft: -1 + hard: -1 + nofile: + soft: 65536 + hard: 65536 + mem_limit: 4g + ports: + - "127.0.0.1:64298:9200" + image: ${TPOT_REPO}/elasticsearch:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DATA_PATH}:/data + +## Logstash service + logstash: + container_name: logstash + restart: always + depends_on: + elasticsearch: + condition: service_healthy + environment: + - LS_JAVA_OPTS=-Xms1024m -Xmx1024m + - TPOT_TYPE=${TPOT_TYPE:-HIVE} + - TPOT_HIVE_USER=${TPOT_HIVE_USER} + - TPOT_HIVE_IP=${TPOT_HIVE_IP} + ports: + - "127.0.0.1:64305:64305" + mem_limit: 2g + image: ${TPOT_REPO}/logstash:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DATA_PATH}:/data +#### /ELK + +# Ewsposter service + ewsposter: + container_name: ewsposter + restart: always + depends_on: + logstash: + condition: service_healthy + networks: + - ewsposter_local + environment: + - EWS_HPFEEDS_ENABLE=false + - EWS_HPFEEDS_HOST=host + - EWS_HPFEEDS_PORT=port + - EWS_HPFEEDS_CHANNELS=channels + - EWS_HPFEEDS_IDENT=user + - EWS_HPFEEDS_SECRET=secret + - EWS_HPFEEDS_TLSCERT=false + - EWS_HPFEEDS_FORMAT=json + image: ${TPOT_REPO}/ewsposter:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DATA_PATH}:/data + - ${TPOT_DATA_PATH}/ews/conf/ews.ip:/opt/ewsposter/ews.ip diff --git a/etc/compose/standard.yml b/compose/sensor.yml similarity index 53% rename from etc/compose/standard.yml rename to compose/sensor.yml index d5025e17..d300dc44 100644 --- a/etc/compose/standard.yml +++ b/compose/sensor.yml @@ -1,6 +1,5 @@ -# T-Pot (Standard) -# Do not erase ports sections, these are used by /opt/tpot/bin/rules.sh to setup iptables ACCEPT rules for NFQ (honeytrap / glutton) -version: '2.3' +# T-Pot: SENSOR +version: '3.9' networks: adbhoney_local: @@ -20,13 +19,40 @@ networks: mailoney_local: medpot_local: redishoneypot_local: - tanner_local: - ewsposter_local: sentrypeer_local: - spiderfoot_local: + tanner_local: + wordpot_local: + ewsposter_local: services: +######################################### +#### DEV +######################################### +#### T-Pot Init - Never delete this! +######################################### + +# T-Pot Init Service + tpotinit: + container_name: tpotinit + env_file: + - .env + restart: always + stop_grace_period: 60s + tmpfs: + - /tmp/etc:uid=2000,gid=2000 + - /tmp/:uid=2000,gid=2000 + network_mode: "host" + cap_add: + - NET_ADMIN + image: ${TPOT_REPO}/tpotinit:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DOCKER_COMPOSE}:/tmp/tpot/docker-compose.yml:ro + - ${TPOT_DATA_PATH}/blackhole:/etc/blackhole + - ${TPOT_DATA_PATH}:/data + - /var/run/docker.sock:/var/run/docker.sock:ro + ################## #### Honeypots ################## @@ -35,20 +61,27 @@ services: adbhoney: container_name: adbhoney restart: always + depends_on: + tpotinit: + condition: service_healthy networks: - adbhoney_local ports: - "5555:5555" - image: "dtagdevsec/adbhoney:2204" + image: ${TPOT_REPO}/adbhoney:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/adbhoney/log:/opt/adbhoney/log - - /data/adbhoney/downloads:/opt/adbhoney/dl + - ${TPOT_DATA_PATH}/adbhoney/log:/opt/adbhoney/log + - ${TPOT_DATA_PATH}/adbhoney/downloads:/opt/adbhoney/dl # Ciscoasa service ciscoasa: container_name: ciscoasa restart: always + depends_on: + tpotinit: + condition: service_healthy tmpfs: - /tmp/ciscoasa:uid=2000,gid=2000 networks: @@ -56,28 +89,36 @@ services: ports: - "5000:5000/udp" - "8443:8443" - image: "dtagdevsec/ciscoasa:2204" + image: ${TPOT_REPO}/ciscoasa:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/ciscoasa/log:/var/log/ciscoasa + - ${TPOT_DATA_PATH}/ciscoasa/log:/var/log/ciscoasa # CitrixHoneypot service citrixhoneypot: container_name: citrixhoneypot restart: always + depends_on: + tpotinit: + condition: service_healthy networks: - citrixhoneypot_local ports: - "443:443" - image: "dtagdevsec/citrixhoneypot:2204" + image: ${TPOT_REPO}/citrixhoneypot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/citrixhoneypot/logs:/opt/citrixhoneypot/logs + - ${TPOT_DATA_PATH}/citrixhoneypot/log:/opt/citrixhoneypot/logs # Conpot IEC104 service conpot_IEC104: container_name: conpot_iec104 restart: always + depends_on: + tpotinit: + condition: service_healthy environment: - CONPOT_CONFIG=/etc/conpot/conpot.cfg - CONPOT_JSON_LOG=/var/log/conpot/conpot_IEC104.json @@ -91,15 +132,19 @@ services: ports: - "161:161/udp" - "2404:2404" - image: "dtagdevsec/conpot:2204" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/conpot/log:/var/log/conpot + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot # Conpot guardian_ast service conpot_guardian_ast: container_name: conpot_guardian_ast restart: always + depends_on: + tpotinit: + condition: service_healthy environment: - CONPOT_CONFIG=/etc/conpot/conpot.cfg - CONPOT_JSON_LOG=/var/log/conpot/conpot_guardian_ast.json @@ -112,15 +157,19 @@ services: - conpot_local_guardian_ast ports: - "10001:10001" - image: "dtagdevsec/conpot:2204" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/conpot/log:/var/log/conpot + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot # Conpot ipmi conpot_ipmi: container_name: conpot_ipmi restart: always + depends_on: + tpotinit: + condition: service_healthy environment: - CONPOT_CONFIG=/etc/conpot/conpot.cfg - CONPOT_JSON_LOG=/var/log/conpot/conpot_ipmi.json @@ -133,15 +182,19 @@ services: - conpot_local_ipmi ports: - "623:623/udp" - image: "dtagdevsec/conpot:2204" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/conpot/log:/var/log/conpot + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot # Conpot kamstrup_382 conpot_kamstrup_382: container_name: conpot_kamstrup_382 restart: always + depends_on: + tpotinit: + condition: service_healthy environment: - CONPOT_CONFIG=/etc/conpot/conpot.cfg - CONPOT_JSON_LOG=/var/log/conpot/conpot_kamstrup_382.json @@ -155,35 +208,43 @@ services: ports: - "1025:1025" - "50100:50100" - image: "dtagdevsec/conpot:2204" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/conpot/log:/var/log/conpot + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot # Cowrie service cowrie: container_name: cowrie restart: always + depends_on: + tpotinit: + condition: service_healthy tmpfs: - - /tmp/cowrie:uid=2000,gid=2000 - - /tmp/cowrie/data:uid=2000,gid=2000 + - /tmp/cowrie:uid=2000,gid=2000 + - /tmp/cowrie/data:uid=2000,gid=2000 networks: - - cowrie_local + - cowrie_local ports: - - "22:22" - - "23:23" - image: "dtagdevsec/cowrie:2204" + - "22:22" + - "23:23" + image: ${TPOT_REPO}/cowrie:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/cowrie/downloads:/home/cowrie/cowrie/dl - - /data/cowrie/keys:/home/cowrie/cowrie/etc - - /data/cowrie/log:/home/cowrie/cowrie/log - - /data/cowrie/log/tty:/home/cowrie/cowrie/log/tty + - ${TPOT_DATA_PATH}/cowrie/downloads:/home/cowrie/cowrie/dl + - ${TPOT_DATA_PATH}/cowrie/keys:/home/cowrie/cowrie/etc + - ${TPOT_DATA_PATH}/cowrie/log:/home/cowrie/cowrie/log + - ${TPOT_DATA_PATH}/cowrie/log/tty:/home/cowrie/cowrie/log/tty # Ddospot service ddospot: container_name: ddospot restart: always + depends_on: + tpotinit: + condition: service_healthy networks: - ddospot_local ports: @@ -192,12 +253,13 @@ services: - "123:123/udp" # - "161:161/udp" - "1900:1900/udp" - image: "dtagdevsec/ddospot:2204" + image: ${TPOT_REPO}/ddospot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/ddospot/log:/opt/ddospot/ddospot/logs - - /data/ddospot/bl:/opt/ddospot/ddospot/bl - - /data/ddospot/db:/opt/ddospot/ddospot/db + - ${TPOT_DATA_PATH}/ddospot/log:/opt/ddospot/ddospot/logs + - ${TPOT_DATA_PATH}/ddospot/bl:/opt/ddospot/ddospot/bl + - ${TPOT_DATA_PATH}/ddospot/db:/opt/ddospot/ddospot/db # Dicompot service # Get the Horos Client for testing: https://horosproject.org/ @@ -206,15 +268,19 @@ services: dicompot: container_name: dicompot restart: always + depends_on: + tpotinit: + condition: service_healthy networks: - dicompot_local ports: - "11112:11112" - image: "dtagdevsec/dicompot:2204" + image: ${TPOT_REPO}/dicompot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/dicompot/log:/var/log/dicompot -# - /data/dicompot/images:/opt/dicompot/images + - ${TPOT_DATA_PATH}/dicompot/log:/var/log/dicompot +# - ${TPOT_DATA_PATH}/dicompot/images:/opt/dicompot/images # Dionaea service dionaea: @@ -222,6 +288,9 @@ services: stdin_open: true tty: true restart: always + depends_on: + tpotinit: + condition: service_healthy networks: - dionaea_local ports: @@ -241,35 +310,43 @@ services: # - "5060:5060/udp" # - "5061:5061" - "27017:27017" - image: "dtagdevsec/dionaea:2204" + image: ${TPOT_REPO}/dionaea:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/dionaea/roots/ftp:/opt/dionaea/var/dionaea/roots/ftp - - /data/dionaea/roots/tftp:/opt/dionaea/var/dionaea/roots/tftp - - /data/dionaea/roots/www:/opt/dionaea/var/dionaea/roots/www - - /data/dionaea/roots/upnp:/opt/dionaea/var/dionaea/roots/upnp - - /data/dionaea:/opt/dionaea/var/dionaea - - /data/dionaea/binaries:/opt/dionaea/var/dionaea/binaries - - /data/dionaea/log:/opt/dionaea/var/log - - /data/dionaea/rtp:/opt/dionaea/var/dionaea/rtp + - ${TPOT_DATA_PATH}/dionaea/roots/ftp:/opt/dionaea/var/dionaea/roots/ftp + - ${TPOT_DATA_PATH}/dionaea/roots/tftp:/opt/dionaea/var/dionaea/roots/tftp + - ${TPOT_DATA_PATH}/dionaea/roots/www:/opt/dionaea/var/dionaea/roots/www + - ${TPOT_DATA_PATH}/dionaea/roots/upnp:/opt/dionaea/var/dionaea/roots/upnp + - ${TPOT_DATA_PATH}/dionaea:/opt/dionaea/var/dionaea + - ${TPOT_DATA_PATH}/dionaea/binaries:/opt/dionaea/var/dionaea/binaries + - ${TPOT_DATA_PATH}/dionaea/log:/opt/dionaea/var/log + - ${TPOT_DATA_PATH}/dionaea/rtp:/opt/dionaea/var/dionaea/rtp # ElasticPot service elasticpot: container_name: elasticpot restart: always + depends_on: + tpotinit: + condition: service_healthy networks: - elasticpot_local ports: - "9200:9200" - image: "dtagdevsec/elasticpot:2204" + image: ${TPOT_REPO}/elasticpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/elasticpot/log:/opt/elasticpot/log + - ${TPOT_DATA_PATH}/elasticpot/log:/opt/elasticpot/log # Heralding service heralding: container_name: heralding restart: always + depends_on: + tpotinit: + condition: service_healthy tmpfs: - /tmp/heralding:uid=2000,gid=2000 networks: @@ -291,44 +368,56 @@ services: - "1080:1080" - "5432:5432" - "5900:5900" - image: "dtagdevsec/heralding:2204" + image: ${TPOT_REPO}/heralding:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/heralding/log:/var/log/heralding + - ${TPOT_DATA_PATH}/heralding/log:/var/log/heralding # Honeytrap service honeytrap: container_name: honeytrap restart: always + depends_on: + tpotinit: + condition: service_healthy tmpfs: - /tmp/honeytrap:uid=2000,gid=2000 network_mode: "host" cap_add: - NET_ADMIN - image: "dtagdevsec/honeytrap:2204" + image: ${TPOT_REPO}/honeytrap:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/honeytrap/attacks:/opt/honeytrap/var/attacks - - /data/honeytrap/downloads:/opt/honeytrap/var/downloads - - /data/honeytrap/log:/opt/honeytrap/var/log + - ${TPOT_DATA_PATH}/honeytrap/attacks:/opt/honeytrap/var/attacks + - ${TPOT_DATA_PATH}/honeytrap/downloads:/opt/honeytrap/var/downloads + - ${TPOT_DATA_PATH}/honeytrap/log:/opt/honeytrap/var/log # Ipphoney service ipphoney: container_name: ipphoney restart: always + depends_on: + tpotinit: + condition: service_healthy networks: - ipphoney_local ports: - "631:631" - image: "dtagdevsec/ipphoney:2204" + image: ${TPOT_REPO}/ipphoney:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/ipphoney/log:/opt/ipphoney/log + - ${TPOT_DATA_PATH}/ipphoney/log:/opt/ipphoney/log # Mailoney service mailoney: container_name: mailoney restart: always + depends_on: + tpotinit: + condition: service_healthy environment: - HPFEEDS_SERVER= - HPFEEDS_IDENT=user @@ -339,127 +428,165 @@ services: - mailoney_local ports: - "25:25" - image: "dtagdevsec/mailoney:2204" + - "587:25" + image: ${TPOT_REPO}/mailoney:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/mailoney/log:/opt/mailoney/logs + - ${TPOT_DATA_PATH}/mailoney/log:/opt/mailoney/logs # Medpot service medpot: container_name: medpot restart: always + depends_on: + tpotinit: + condition: service_healthy networks: - medpot_local ports: - "2575:2575" - image: "dtagdevsec/medpot:2204" + image: ${TPOT_REPO}/medpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/medpot/log/:/var/log/medpot + - ${TPOT_DATA_PATH}/medpot/log/:/var/log/medpot # Redishoneypot service redishoneypot: container_name: redishoneypot restart: always + depends_on: + tpotinit: + condition: service_healthy networks: - redishoneypot_local ports: - "6379:6379" - image: "dtagdevsec/redishoneypot:2204" + image: ${TPOT_REPO}/redishoneypot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/redishoneypot/log:/var/log/redishoneypot + - ${TPOT_DATA_PATH}/redishoneypot/log:/var/log/redishoneypot # SentryPeer service sentrypeer: container_name: sentrypeer restart: always -# SentryPeer offers to exchange bad actor data via DHT / P2P mode by setting the ENV to true (1) -# In some cases (i.e. internally deployed T-Pots) this might be confusing as SentryPeer will show -# the bad actors in its logs. Therefore this option is opt-in based. + depends_on: + tpotinit: + condition: service_healthy # environment: -# - SENTRYPEER_PEER_TO_PEER=0 +# - SENTRYPEER_PEER_TO_PEER=1 networks: - sentrypeer_local ports: # - "4222:4222/udp" + - "5060:5060/tcp" - "5060:5060/udp" # - "127.0.0.1:8082:8082" - image: "dtagdevsec/sentrypeer:2204" + image: ${TPOT_REPO}/sentrypeer:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/sentrypeer/log:/var/log/sentrypeer + - ${TPOT_DATA_PATH}/sentrypeer/log:/var/log/sentrypeer #### Snare / Tanner ## Tanner Redis Service tanner_redis: container_name: tanner_redis restart: always + depends_on: + tpotinit: + condition: service_healthy tty: true networks: - tanner_local - image: "dtagdevsec/redis:2204" + image: ${TPOT_REPO}/redis:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true ## PHP Sandbox service tanner_phpox: container_name: tanner_phpox restart: always + depends_on: + tpotinit: + condition: service_healthy tty: true networks: - tanner_local - image: "dtagdevsec/phpox:2204" + image: ${TPOT_REPO}/phpox:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true ## Tanner API Service tanner_api: container_name: tanner_api restart: always + depends_on: + - tanner_redis tmpfs: - /tmp/tanner:uid=2000,gid=2000 tty: true networks: - tanner_local - image: "dtagdevsec/tanner:2204" + image: ${TPOT_REPO}/tanner:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/tanner/log:/var/log/tanner + - ${TPOT_DATA_PATH}/tanner/log:/var/log/tanner command: tannerapi - depends_on: - - tanner_redis ## Tanner Service tanner: container_name: tanner restart: always + depends_on: + - tanner_api + - tanner_phpox tmpfs: - /tmp/tanner:uid=2000,gid=2000 tty: true networks: - tanner_local - image: "dtagdevsec/tanner:2204" + image: ${TPOT_REPO}/tanner:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} command: tanner read_only: true volumes: - - /data/tanner/log:/var/log/tanner - - /data/tanner/files:/opt/tanner/files - depends_on: - - tanner_api -# - tanner_web - - tanner_phpox + - ${TPOT_DATA_PATH}/tanner/log:/var/log/tanner + - ${TPOT_DATA_PATH}/tanner/files:/opt/tanner/files ## Snare Service snare: container_name: snare restart: always + depends_on: + - tanner tty: true networks: - tanner_local ports: - "80:80" - image: "dtagdevsec/snare:2204" + image: ${TPOT_REPO}/snare:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + +# Wordpot service + wordpot: + container_name: wordpot + restart: always depends_on: - - tanner + tpotinit: + condition: service_healthy + networks: + - wordpot_local + ports: + - "8080:80" + image: ${TPOT_REPO}/wordpot:${TPOT_VERSION} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/wordpot/log:/opt/wordpot/logs/ ################## @@ -470,144 +597,90 @@ services: fatt: container_name: fatt restart: always + depends_on: + tpotinit: + condition: service_healthy network_mode: "host" cap_add: - NET_ADMIN - SYS_NICE - NET_RAW - image: "dtagdevsec/fatt:2204" + image: ${TPOT_REPO}/fatt:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} volumes: - - /data/fatt/log:/opt/fatt/log + - ${TPOT_DATA_PATH}/fatt/log:/opt/fatt/log # P0f service p0f: container_name: p0f restart: always + depends_on: + tpotinit: + condition: service_healthy network_mode: "host" - image: "dtagdevsec/p0f:2204" + image: ${TPOT_REPO}/p0f:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - /data/p0f/log:/var/log/p0f + - ${TPOT_DATA_PATH}/p0f/log:/var/log/p0f # Suricata service suricata: container_name: suricata restart: always + depends_on: + tpotinit: + condition: service_healthy environment: - # For ET Pro ruleset replace "OPEN" with your OINKCODE - - OINKCODE=OPEN - # Loading externel Rules from URL + - OINKCODE=${OINKCODE:-OPEN} # Default to OPEN if unset or NULL (value provided by T-Pot .env) + # Loading external Rules from URL # - FROMURL="https://username:password@yoururl.com|https://username:password@otherurl.com" network_mode: "host" cap_add: - NET_ADMIN - SYS_NICE - NET_RAW - image: "dtagdevsec/suricata:2204" + image: ${TPOT_REPO}/suricata:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} volumes: - - /data/suricata/log:/var/log/suricata + - ${TPOT_DATA_PATH}/suricata/log:/var/log/suricata ################## -#### Tools +#### Tools ################## #### ELK -## Elasticsearch service - elasticsearch: - container_name: elasticsearch - restart: always - environment: - - bootstrap.memory_lock=true - - ES_JAVA_OPTS=-Xms2048m -Xmx2048m - - ES_TMPDIR=/tmp - cap_add: - - IPC_LOCK - ulimits: - memlock: - soft: -1 - hard: -1 - nofile: - soft: 65536 - hard: 65536 - mem_limit: 4g - ports: - - "127.0.0.1:64298:9200" - image: "dtagdevsec/elasticsearch:2204" - volumes: - - /data:/data - -## Kibana service - kibana: - container_name: kibana - restart: always - depends_on: - elasticsearch: - condition: service_healthy - mem_limit: 1g - ports: - - "127.0.0.1:64296:5601" - image: "dtagdevsec/kibana:2204" ## Logstash service logstash: container_name: logstash restart: always + depends_on: + tpotinit: + condition: service_healthy environment: - LS_JAVA_OPTS=-Xms1024m -Xmx1024m - depends_on: - elasticsearch: - condition: service_healthy - env_file: - - /opt/tpot/etc/compose/elk_environment - mem_limit: 2g - image: "dtagdevsec/logstash:2204" - volumes: - - /data:/data - -## Map Redis Service - map_redis: - container_name: map_redis - restart: always - stop_signal: SIGKILL - tty: true - image: "dtagdevsec/redis:2204" - read_only: true - -## Map Web Service - map_web: - container_name: map_web - restart: always - environment: - - MAP_COMMAND=AttackMapServer.py - env_file: - - /opt/tpot/etc/compose/elk_environment - stop_signal: SIGKILL - tty: true + - TPOT_TYPE=${TPOT_TYPE:-HIVE} + - TPOT_HIVE_USER=${TPOT_HIVE_USER} + - TPOT_HIVE_IP=${TPOT_HIVE_IP} ports: - - "127.0.0.1:64299:64299" - image: "dtagdevsec/map:2204" + - "127.0.0.1:64305:64305" + mem_limit: 2g + image: ${TPOT_REPO}/logstash:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DATA_PATH}:/data -## Map Data Service - map_data: - container_name: map_data - restart: always - depends_on: - elasticsearch: - condition: service_healthy - environment: - - MAP_COMMAND=DataServer_v2.py - env_file: - - /opt/tpot/etc/compose/elk_environment - stop_signal: SIGKILL - tty: true - image: "dtagdevsec/map:2204" #### /ELK # Ewsposter service ewsposter: container_name: ewsposter restart: always + depends_on: + tpotinit: + condition: service_healthy networks: - ewsposter_local environment: @@ -619,44 +692,8 @@ services: - EWS_HPFEEDS_SECRET=secret - EWS_HPFEEDS_TLSCERT=false - EWS_HPFEEDS_FORMAT=json - env_file: - - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/ewsposter:2204" + image: ${TPOT_REPO}/ewsposter:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} volumes: - - /data:/data - - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip - -# Nginx service - nginx: - container_name: nginx - restart: always - tmpfs: - - /var/tmp/nginx/client_body - - /var/tmp/nginx/proxy - - /var/tmp/nginx/fastcgi - - /var/tmp/nginx/uwsgi - - /var/tmp/nginx/scgi - - /run - - /var/lib/nginx/tmp:uid=100,gid=82 - network_mode: "host" - # ports: - # - "64297:64297" - # - "127.0.0.1:64304:64304" - image: "dtagdevsec/nginx:2204" - read_only: true - volumes: - - /data/nginx/cert/:/etc/nginx/cert/:ro - - /data/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro - - /data/nginx/log/:/var/log/nginx/ - -# Spiderfoot service - spiderfoot: - container_name: spiderfoot - restart: always - networks: - - spiderfoot_local - ports: - - "127.0.0.1:64303:8080" - image: "dtagdevsec/spiderfoot:2204" - volumes: - - /data/spiderfoot:/home/spiderfoot/.spiderfoot + - ${TPOT_DATA_PATH}:/data + - ${TPOT_DATA_PATH}/ews/conf/ews.ip:/opt/ewsposter/ews.ip diff --git a/preview/compose/standard.yml b/compose/standard.yml similarity index 94% rename from preview/compose/standard.yml rename to compose/standard.yml index c5e7e8c4..165fc68b 100644 --- a/preview/compose/standard.yml +++ b/compose/standard.yml @@ -1,3 +1,4 @@ +# T-Pot: STANDARD version: '3.9' networks: @@ -21,23 +22,24 @@ networks: sentrypeer_local: tanner_local: spiderfoot_local: + wordpot_local: ewsposter_local: services: -############################################## +######################################### #### DEV -############################################## -#### T-Pot Light Init - Never delete this! -############################################## +######################################### +#### T-Pot Init - Never delete this! +######################################### # T-Pot Init Service tpotinit: container_name: tpotinit - build: docker/. env_file: - .env restart: always + stop_grace_period: 60s tmpfs: - /tmp/etc:uid=2000,gid=2000 - /tmp/:uid=2000,gid=2000 @@ -50,6 +52,7 @@ services: - ${TPOT_DOCKER_COMPOSE}:/tmp/tpot/docker-compose.yml:ro - ${TPOT_DATA_PATH}/blackhole:/etc/blackhole - ${TPOT_DATA_PATH}:/data + - /var/run/docker.sock:/var/run/docker.sock:ro ################## @@ -109,7 +112,7 @@ services: pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - ${TPOT_DATA_PATH}/citrixhoneypot/logs:/opt/citrixhoneypot/logs + - ${TPOT_DATA_PATH}/citrixhoneypot/log:/opt/citrixhoneypot/logs # Conpot IEC104 service conpot_IEC104: @@ -427,6 +430,7 @@ services: - mailoney_local ports: - "25:25" + - "587:25" image: ${TPOT_REPO}/mailoney:${TPOT_VERSION} pull_policy: ${TPOT_PULL_POLICY} read_only: true @@ -474,15 +478,13 @@ services: depends_on: tpotinit: condition: service_healthy -# SentryPeer offers to exchange bad actor data via DHT / P2P mode by setting the ENV to true (1) -# In some cases (i.e. internally deployed T-Pots) this might be confusing as SentryPeer will show -# the bad actors in its logs. Therefore this option is opt-in based. # environment: -# - SENTRYPEER_PEER_TO_PEER=0 +# - SENTRYPEER_PEER_TO_PEER=1 networks: - sentrypeer_local ports: # - "4222:4222/udp" + - "5060:5060/tcp" - "5060:5060/udp" # - "127.0.0.1:8082:8082" image: ${TPOT_REPO}/sentrypeer:${TPOT_VERSION} @@ -572,6 +574,22 @@ services: image: ${TPOT_REPO}/snare:${TPOT_VERSION} pull_policy: ${TPOT_PULL_POLICY} +# Wordpot service + wordpot: + container_name: wordpot + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - wordpot_local + ports: + - "8080:80" + image: ${TPOT_REPO}/wordpot:${TPOT_VERSION} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/wordpot/log:/opt/wordpot/logs/ + ################## #### NSM @@ -616,9 +634,8 @@ services: tpotinit: condition: service_healthy environment: - # For ET Pro ruleset replace "OPEN" with your OINKCODE - - OINKCODE=OPEN - # Loading externel Rules from URL + - OINKCODE=${OINKCODE:-OPEN} # Default to OPEN if unset or NULL (value provided by T-Pot .env) + # Loading external Rules from URL # - FROMURL="https://username:password@yoururl.com|https://username:password@otherurl.com" network_mode: "host" cap_add: @@ -686,6 +703,11 @@ services: condition: service_healthy environment: - LS_JAVA_OPTS=-Xms1024m -Xmx1024m + - TPOT_TYPE=${TPOT_TYPE:-HIVE} + - TPOT_HIVE_USER=${TPOT_HIVE_USER} + - TPOT_HIVE_IP=${TPOT_HIVE_IP} + ports: + - "127.0.0.1:64305:64305" mem_limit: 2g image: ${TPOT_REPO}/logstash:${TPOT_VERSION} pull_policy: ${TPOT_PULL_POLICY} @@ -730,6 +752,8 @@ services: condition: service_healthy environment: - MAP_COMMAND=DataServer_v2.py + - TPOT_ATTACKMAP_TEXT=${TPOT_ATTACKMAP_TEXT} + - TZ=${TPOT_ATTACKMAP_TEXT_TIMEZONE} stop_signal: SIGKILL tty: true image: ${TPOT_REPO}/map:${TPOT_VERSION} @@ -765,7 +789,6 @@ services: container_name: nginx restart: always environment: - - COCKPIT=${COCKPIT} - TPOT_OSTYPE=${TPOT_OSTYPE} depends_on: tpotinit: @@ -781,13 +804,13 @@ services: network_mode: "host" ports: - "64297:64297" - - "127.0.0.1:64304:64304" image: ${TPOT_REPO}/nginx:${TPOT_VERSION} pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - ${TPOT_DATA_PATH}/nginx/cert/:/etc/nginx/cert/:ro - ${TPOT_DATA_PATH}/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro + - ${TPOT_DATA_PATH}/nginx/conf/lswebpasswd:/etc/nginx/lswebpasswd:ro - ${TPOT_DATA_PATH}/nginx/log/:/var/log/nginx/ # Spiderfoot service diff --git a/compose/tpot_services.yml b/compose/tpot_services.yml new file mode 100644 index 00000000..8005f0ef --- /dev/null +++ b/compose/tpot_services.yml @@ -0,0 +1,961 @@ +# T-Pot: Docker Services Base Configuration +# This is only to be used with the T-Pot Customizer +# Editing the contents may result in broken custom configurations! + +networks: + adbhoney_local: + ciscoasa_local: + citrixhoneypot_local: + conpot_local_IEC104: + conpot_local_guardian_ast: + conpot_local_ipmi: + conpot_local_kamstrup_382: + cowrie_local: + ddospot_local: + dicompot_local: + dionaea_local: + elasticpot_local: + endlessh_local: + hellpot_local: + heralding_local: + honeypots_local: + ipphoney_local: + log4pot_local: + mailoney_local: + medpot_local: + redishoneypot_local: + sentrypeer_local: + tanner_local: + wordpot_local: + spiderfoot_local: + ewsposter_local: + +services: + +######################################### +#### DEV +######################################### +#### T-Pot Init - Never delete this! +######################################### + +# T-Pot Init Service + tpotinit: + container_name: tpotinit + env_file: + - .env + restart: always + stop_grace_period: 60s + tmpfs: + - /tmp/etc:uid=2000,gid=2000 + - /tmp/:uid=2000,gid=2000 + network_mode: "host" + cap_add: + - NET_ADMIN + image: ${TPOT_REPO}/tpotinit:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DOCKER_COMPOSE}:/tmp/tpot/docker-compose.yml:ro + - ${TPOT_DATA_PATH}/blackhole:/etc/blackhole + - ${TPOT_DATA_PATH}:/data + - /var/run/docker.sock:/var/run/docker.sock:ro + +################## +#### Honeypots +################## + +# Adbhoney service + adbhoney: + container_name: adbhoney + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - adbhoney_local + ports: + - "5555:5555" + image: ${TPOT_REPO}/adbhoney:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/adbhoney/log:/opt/adbhoney/log + - ${TPOT_DATA_PATH}/adbhoney/downloads:/opt/adbhoney/dl + +# Ciscoasa service + ciscoasa: + container_name: ciscoasa + restart: always + depends_on: + tpotinit: + condition: service_healthy + tmpfs: + - /tmp/ciscoasa:uid=2000,gid=2000 + networks: + - ciscoasa_local + ports: + - "5000:5000/udp" + - "8443:8443" + image: ${TPOT_REPO}/ciscoasa:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/ciscoasa/log:/var/log/ciscoasa + +# CitrixHoneypot service + citrixhoneypot: + container_name: citrixhoneypot + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - citrixhoneypot_local + ports: + - "443:443" + image: ${TPOT_REPO}/citrixhoneypot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/citrixhoneypot/log:/opt/citrixhoneypot/logs + +# Conpot IEC104 service + conpot_IEC104: + container_name: conpot_iec104 + restart: always + depends_on: + tpotinit: + condition: service_healthy + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_IEC104.json + - CONPOT_LOG=/var/log/conpot/conpot_IEC104.log + - CONPOT_TEMPLATE=IEC104 + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_IEC104 + ports: + - "161:161/udp" + - "2404:2404" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot + +# Conpot guardian_ast service + conpot_guardian_ast: + container_name: conpot_guardian_ast + restart: always + depends_on: + tpotinit: + condition: service_healthy + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_guardian_ast.json + - CONPOT_LOG=/var/log/conpot/conpot_guardian_ast.log + - CONPOT_TEMPLATE=guardian_ast + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_guardian_ast + ports: + - "10001:10001" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot + +# Conpot ipmi + conpot_ipmi: + container_name: conpot_ipmi + restart: always + depends_on: + tpotinit: + condition: service_healthy + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_ipmi.json + - CONPOT_LOG=/var/log/conpot/conpot_ipmi.log + - CONPOT_TEMPLATE=ipmi + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_ipmi + ports: + - "623:623/udp" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot + +# Conpot kamstrup_382 + conpot_kamstrup_382: + container_name: conpot_kamstrup_382 + restart: always + depends_on: + tpotinit: + condition: service_healthy + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_kamstrup_382.json + - CONPOT_LOG=/var/log/conpot/conpot_kamstrup_382.log + - CONPOT_TEMPLATE=kamstrup_382 + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_kamstrup_382 + ports: + - "1025:1025" + - "50100:50100" + image: ${TPOT_REPO}/conpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/conpot/log:/var/log/conpot + +# Cowrie service + cowrie: + container_name: cowrie + restart: always + depends_on: + tpotinit: + condition: service_healthy + tmpfs: + - /tmp/cowrie:uid=2000,gid=2000 + - /tmp/cowrie/data:uid=2000,gid=2000 + networks: + - cowrie_local + ports: + - "22:22" + - "23:23" + image: ${TPOT_REPO}/cowrie:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/cowrie/downloads:/home/cowrie/cowrie/dl + - ${TPOT_DATA_PATH}/cowrie/keys:/home/cowrie/cowrie/etc + - ${TPOT_DATA_PATH}/cowrie/log:/home/cowrie/cowrie/log + - ${TPOT_DATA_PATH}/cowrie/log/tty:/home/cowrie/cowrie/log/tty + +# Ddospot service + ddospot: + container_name: ddospot + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - ddospot_local + ports: + - "19:19/udp" + - "53:53/udp" + - "123:123/udp" +# - "161:161/udp" + - "1900:1900/udp" + image: ${TPOT_REPO}/ddospot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/ddospot/log:/opt/ddospot/ddospot/logs + - ${TPOT_DATA_PATH}/ddospot/bl:/opt/ddospot/ddospot/bl + - ${TPOT_DATA_PATH}/ddospot/db:/opt/ddospot/ddospot/db + +# Dicompot service +# Get the Horos Client for testing: https://horosproject.org/ +# Get Dicom images (CC BY 3.0): https://www.cancerimagingarchive.net/collections/ +# Put images (which must be in Dicom DCM format or it will not work!) into /data/dicompot/images + dicompot: + container_name: dicompot + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - dicompot_local + ports: + - "11112:11112" + image: ${TPOT_REPO}/dicompot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/dicompot/log:/var/log/dicompot +# - ${TPOT_DATA_PATH}/dicompot/images:/opt/dicompot/images + +# Dionaea service + dionaea: + container_name: dionaea + stdin_open: true + tty: true + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - dionaea_local + ports: + - "20:20" + - "21:21" + - "42:42" + - "69:69/udp" + - "81:81" + - "135:135" + # - "443:443" + - "445:445" + - "1433:1433" + - "1723:1723" + - "1883:1883" + - "3306:3306" + # - "5060:5060" + # - "5060:5060/udp" + # - "5061:5061" + - "27017:27017" + image: ${TPOT_REPO}/dionaea:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/dionaea/roots/ftp:/opt/dionaea/var/dionaea/roots/ftp + - ${TPOT_DATA_PATH}/dionaea/roots/tftp:/opt/dionaea/var/dionaea/roots/tftp + - ${TPOT_DATA_PATH}/dionaea/roots/www:/opt/dionaea/var/dionaea/roots/www + - ${TPOT_DATA_PATH}/dionaea/roots/upnp:/opt/dionaea/var/dionaea/roots/upnp + - ${TPOT_DATA_PATH}/dionaea:/opt/dionaea/var/dionaea + - ${TPOT_DATA_PATH}/dionaea/binaries:/opt/dionaea/var/dionaea/binaries + - ${TPOT_DATA_PATH}/dionaea/log:/opt/dionaea/var/log + - ${TPOT_DATA_PATH}/dionaea/rtp:/opt/dionaea/var/dionaea/rtp + +# ElasticPot service + elasticpot: + container_name: elasticpot + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - elasticpot_local + ports: + - "9200:9200" + image: ${TPOT_REPO}/elasticpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/elasticpot/log:/opt/elasticpot/log + +# Endlessh service + endlessh: + container_name: endlessh + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - endlessh_local + ports: + - "22:2222" + image: ${TPOT_REPO}/endlessh:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/endlessh/log:/var/log/endlessh + +# # Glutton service + # glutton: + # container_name: glutton + # restart: always + # depends_on: + # tpotinit: + # condition: service_healthy + # tmpfs: + # - /var/lib/glutton:uid=2000,gid=2000 + # - /run:uid=2000,gid=2000 + # network_mode: "host" + # cap_add: + # - NET_ADMIN + # image: ${TPOT_REPO}/glutton:${TPOT_VERSION} + # pull_policy: ${TPOT_PULL_POLICY} + # read_only: true + # volumes: + # - ${TPOT_DATA_PATH}/glutton/log:/var/log/glutton + # - ${TPOT_DATA_PATH}/glutton/payloads:/opt/glutton/payloads + +# Hellpot service + hellpot: + container_name: hellpot + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - hellpot_local + ports: + - "80:8080" + image: ${TPOT_REPO}/hellpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/hellpot/log:/var/log/hellpot + +# Heralding service + heralding: + container_name: heralding + restart: always + depends_on: + tpotinit: + condition: service_healthy + tmpfs: + - /tmp/heralding:uid=2000,gid=2000 + networks: + - heralding_local + ports: + # - "21:21" + # - "22:22" + # - "23:23" + # - "25:25" + # - "80:80" + - "110:110" + - "143:143" + # - "443:443" + - "465:465" + - "993:993" + - "995:995" + # - "3306:3306" + # - "3389:3389" + - "1080:1080" + - "5432:5432" + - "5900:5900" + image: ${TPOT_REPO}/heralding:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/heralding/log:/var/log/heralding + +# Honeypots service + honeypots: + container_name: honeypots + stdin_open: true + tty: true + restart: always + depends_on: + tpotinit: + condition: service_healthy + tmpfs: + - /tmp:uid=2000,gid=2000 + networks: + - honeypots_local + ports: + - "21:21" + - "22:22" + - "23:23" + - "25:25" + - "53:53/udp" + - "80:80" + - "110:110" + - "123:123" + - "143:143" + - "161:161" + - "389:389" + - "443:443" + - "445:445" + - "631:631" + - "1080:1080" + - "1433:1433" + - "1521:1521" + - "3306:3306" + - "3389:3389" + - "5060:5060" + - "5432:5432" + - "5900:5900" + - "6379:6379" + - "6667:6667" + - "8080:8080" + - "9100:9100" + - "9200:9200" + - "11211:11211" + image: ${TPOT_REPO}/honeypots:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/honeypots/log:/var/log/honeypots + +# Honeytrap service + honeytrap: + container_name: honeytrap + restart: always + depends_on: + tpotinit: + condition: service_healthy + tmpfs: + - /tmp/honeytrap:uid=2000,gid=2000 + network_mode: "host" + cap_add: + - NET_ADMIN + image: ${TPOT_REPO}/honeytrap:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/honeytrap/attacks:/opt/honeytrap/var/attacks + - ${TPOT_DATA_PATH}/honeytrap/downloads:/opt/honeytrap/var/downloads + - ${TPOT_DATA_PATH}/honeytrap/log:/opt/honeytrap/var/log + +# Ipphoney service + ipphoney: + container_name: ipphoney + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - ipphoney_local + ports: + - "631:631" + image: ${TPOT_REPO}/ipphoney:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/ipphoney/log:/opt/ipphoney/log + +# Log4pot service + log4pot: + container_name: log4pot + restart: always + depends_on: + tpotinit: + condition: service_healthy + tmpfs: + - /tmp:uid=2000,gid=2000 + networks: + - log4pot_local + ports: + - "80:8080" + - "443:8080" + - "8080:8080" + - "9200:8080" + - "25565:8080" + image: ${TPOT_REPO}/log4pot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/log4pot/log:/var/log/log4pot/log + - ${TPOT_DATA_PATH}/log4pot/payloads:/var/log/log4pot/payloads + +# Mailoney service + mailoney: + container_name: mailoney + restart: always + depends_on: + tpotinit: + condition: service_healthy + environment: + - HPFEEDS_SERVER= + - HPFEEDS_IDENT=user + - HPFEEDS_SECRET=pass + - HPFEEDS_PORT=20000 + - HPFEEDS_CHANNELPREFIX=prefix + networks: + - mailoney_local + ports: + - "25:25" + - "587:25" + image: ${TPOT_REPO}/mailoney:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/mailoney/log:/opt/mailoney/logs + +# Medpot service + medpot: + container_name: medpot + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - medpot_local + ports: + - "2575:2575" + image: ${TPOT_REPO}/medpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/medpot/log/:/var/log/medpot + +# Redishoneypot service + redishoneypot: + container_name: redishoneypot + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - redishoneypot_local + ports: + - "6379:6379" + image: ${TPOT_REPO}/redishoneypot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/redishoneypot/log:/var/log/redishoneypot + +# SentryPeer service + sentrypeer: + container_name: sentrypeer + restart: always + depends_on: + tpotinit: + condition: service_healthy +# environment: +# - SENTRYPEER_PEER_TO_PEER=1 + networks: + - sentrypeer_local + ports: +# - "4222:4222/udp" + - "5060:5060/tcp" + - "5060:5060/udp" +# - "127.0.0.1:8082:8082" + image: ${TPOT_REPO}/sentrypeer:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/sentrypeer/log:/var/log/sentrypeer + +#### Snare / Tanner +## Tanner Redis Service + tanner_redis: + container_name: tanner_redis + restart: always + depends_on: + tpotinit: + condition: service_healthy + tty: true + networks: + - tanner_local + image: ${TPOT_REPO}/redis:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + +## PHP Sandbox service + tanner_phpox: + container_name: tanner_phpox + restart: always + depends_on: + tpotinit: + condition: service_healthy + tty: true + networks: + - tanner_local + image: ${TPOT_REPO}/phpox:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + +## Tanner API service + tanner_api: + container_name: tanner_api + restart: always + depends_on: + - tanner_redis + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: ${TPOT_REPO}/tanner:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/tanner/log:/var/log/tanner + command: tannerapi + +## Tanner service + tanner: + container_name: tanner + restart: always + depends_on: + - tanner_api + - tanner_phpox + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: ${TPOT_REPO}/tanner:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + command: tanner + read_only: true + volumes: + - ${TPOT_DATA_PATH}/tanner/log:/var/log/tanner + - ${TPOT_DATA_PATH}/tanner/files:/opt/tanner/files + +## Snare service + snare: + container_name: snare + restart: always + depends_on: + - tanner + tty: true + networks: + - tanner_local + ports: + - "80:80" + image: ${TPOT_REPO}/snare:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + +# Wordpot service + wordpot: + container_name: wordpot + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - wordpot_local + ports: + - "80:80" + image: ${TPOT_REPO}/wordpot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/wordpot/log:/opt/wordpot/logs/ + + +################## +#### NSM +################## + +# Fatt service + fatt: + container_name: fatt + restart: always + depends_on: + tpotinit: + condition: service_healthy + network_mode: "host" + cap_add: + - NET_ADMIN + - SYS_NICE + - NET_RAW + image: ${TPOT_REPO}/fatt:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DATA_PATH}/fatt/log:/opt/fatt/log + +# P0f service + p0f: + container_name: p0f + restart: always + depends_on: + tpotinit: + condition: service_healthy + network_mode: "host" + image: ${TPOT_REPO}/p0f:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/p0f/log:/var/log/p0f + +# Suricata service + suricata: + container_name: suricata + restart: always + depends_on: + tpotinit: + condition: service_healthy + environment: + - OINKCODE=${OINKCODE:-OPEN} # Default to OPEN if unset or NULL (value provided by T-Pot .env) + # Loading external Rules from URL + # - FROMURL="https://username:password@yoururl.com|https://username:password@otherurl.com" + network_mode: "host" + cap_add: + - NET_ADMIN + - SYS_NICE + - NET_RAW + image: ${TPOT_REPO}/suricata:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DATA_PATH}/suricata/log:/var/log/suricata + + +################## +#### Tools +################## + +#### ELK +## Elasticsearch service + elasticsearch: + container_name: elasticsearch + restart: always + depends_on: + tpotinit: + condition: service_healthy + environment: + - bootstrap.memory_lock=true + - ES_JAVA_OPTS=-Xms2048m -Xmx2048m + - ES_TMPDIR=/tmp + cap_add: + - IPC_LOCK + ulimits: + memlock: + soft: -1 + hard: -1 + nofile: + soft: 65536 + hard: 65536 + mem_limit: 4g + ports: + - "127.0.0.1:64298:9200" + image: ${TPOT_REPO}/elasticsearch:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DATA_PATH}:/data + +## Kibana service + kibana: + container_name: kibana + restart: always + depends_on: + elasticsearch: + condition: service_healthy + mem_limit: 1g + ports: + - "127.0.0.1:64296:5601" + image: ${TPOT_REPO}/kibana:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + +## Logstash service + logstash: + container_name: logstash + restart: always + depends_on: + elasticsearch: + condition: service_healthy + environment: + - LS_JAVA_OPTS=-Xms1024m -Xmx1024m + - TPOT_TYPE=${TPOT_TYPE:-HIVE} + - TPOT_HIVE_USER=${TPOT_HIVE_USER} + - TPOT_HIVE_IP=${TPOT_HIVE_IP} + ports: + - "127.0.0.1:64305:64305" + mem_limit: 2g + image: ${TPOT_REPO}/logstash:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DATA_PATH}:/data + +## Map Redis Service + map_redis: + container_name: map_redis + restart: always + depends_on: + tpotinit: + condition: service_healthy + stop_signal: SIGKILL + tty: true + image: ${TPOT_REPO}/redis:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + +## Map Web Service + map_web: + container_name: map_web + restart: always + depends_on: + tpotinit: + condition: service_healthy + environment: + - MAP_COMMAND=AttackMapServer.py + stop_signal: SIGKILL + tty: true + ports: + - "127.0.0.1:64299:64299" + image: ${TPOT_REPO}/map:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + +## Map Data Service + map_data: + container_name: map_data + restart: always + depends_on: + elasticsearch: + condition: service_healthy + environment: + - MAP_COMMAND=DataServer_v2.py + - TPOT_ATTACKMAP_TEXT=${TPOT_ATTACKMAP_TEXT} + - TZ=${TPOT_ATTACKMAP_TEXT_TIMEZONE} + stop_signal: SIGKILL + tty: true + image: ${TPOT_REPO}/map:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} +#### /ELK + +# Ewsposter service + ewsposter: + container_name: ewsposter + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - ewsposter_local + environment: + - EWS_HPFEEDS_ENABLE=false + - EWS_HPFEEDS_HOST=host + - EWS_HPFEEDS_PORT=port + - EWS_HPFEEDS_CHANNELS=channels + - EWS_HPFEEDS_IDENT=user + - EWS_HPFEEDS_SECRET=secret + - EWS_HPFEEDS_TLSCERT=false + - EWS_HPFEEDS_FORMAT=json + image: ${TPOT_REPO}/ewsposter:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DATA_PATH}:/data + - ${TPOT_DATA_PATH}/ews/conf/ews.ip:/opt/ewsposter/ews.ip + +# Nginx service + nginx: + container_name: nginx + restart: always + environment: + - TPOT_OSTYPE=${TPOT_OSTYPE} + depends_on: + tpotinit: + condition: service_healthy + tmpfs: + - /var/tmp/nginx/client_body + - /var/tmp/nginx/proxy + - /var/tmp/nginx/fastcgi + - /var/tmp/nginx/uwsgi + - /var/tmp/nginx/scgi + - /run + - /var/lib/nginx/tmp:uid=100,gid=82 + network_mode: "host" + ports: + - "64297:64297" + image: ${TPOT_REPO}/nginx:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/nginx/cert/:/etc/nginx/cert/:ro + - ${TPOT_DATA_PATH}/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro + - ${TPOT_DATA_PATH}/nginx/conf/lswebpasswd:/etc/nginx/lswebpasswd:ro + - ${TPOT_DATA_PATH}/nginx/log/:/var/log/nginx/ + +# Spiderfoot service + spiderfoot: + container_name: spiderfoot + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - spiderfoot_local + ports: + - "127.0.0.1:64303:8080" + image: ${TPOT_REPO}/spiderfoot:${TPOT_VERSION} + pull_policy: ${TPOT_PULL_POLICY} + volumes: + - ${TPOT_DATA_PATH}/spiderfoot:/home/spiderfoot/.spiderfoot diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 00000000..d5733d5a --- /dev/null +++ b/deploy.sh @@ -0,0 +1,153 @@ +#!/usr/bin/env bash + +myANSIBLE_PORT=64295 +myANSIBLE_TPOT_PLAYBOOK="installer/install/deploy.yml" +myADJECTIVE=$(shuf -n1 installer/install/a.txt) +myNOUN=$(shuf -n1 installer/install/n.txt) +myENV_FILE="$HOME/tpotce/.env" + +myDEPLOY=$(cat << "EOF" + + ____ [ T-Pot ] ____ _ +/ ___| ___ _ __ ___ ___ _ __ | _ \ ___ _ __ | | ___ _ _ +\___ \ / _ \ _ \/ __|/ _ \| __| | | | |/ _ \ _ \| |/ _ \| | | | + ___) | __/ | | \__ \ (_) | | | |_| | __/ |_) | | (_) | |_| | +|____/ \___|_| |_|___/\___/|_| |____/ \___| .__/|_|\___/ \__, | + |_| |___/ + +EOF +) + +# Check if the script is running in a HIVE installation +if ! grep -q 'TPOT_TYPE=HIVE' "$HOME/tpotce/.env"; + then + echo "# This script is only supported on HIVE installations." + echo + exit 1 +fi + +# Check if running on a supported distribution +mySUPPORTED_DISTRIBUTIONS=("AlmaLinux" "Debian GNU/Linux" "Fedora Linux" "openSUSE Tumbleweed" "Raspbian GNU/Linux" "Rocky Linux" "Ubuntu") +myCURRENT_DISTRIBUTION=$(awk -F= '/^NAME/{print $2}' /etc/os-release | tr -d '"') + +if [[ ! " ${mySUPPORTED_DISTRIBUTIONS[@]} " =~ " ${myCURRENT_DISTRIBUTION} " ]]; + then + echo "# Only the following distributions are supported: AlmaLinux, Fedora, Debian, openSUSE Tumbleweed, Rocky Linux and Ubuntu." + echo + exit 1 +fi + +echo "${myDEPLOY}" +echo +echo "# This script will prepare a T-Pot SENSOR installation to transmit logs into this HIVE." +echo + +# Ask if a T-Pot SENSOR was installed +read -p "# Was a T-Pot SENSOR installed? (y/n): " mySENSOR_INSTALLED +if [[ ${mySENSOR_INSTALLED} != "y" ]]; + then + echo "# A T-Pot SENSOR must be installed to continue." + exit 1 +fi + +# Ask for the remote user +read -p "# Enter the remote username T-Pot SENSOR was installed with: " mySSHUSER +if [[ ${mySSHUSER} == "" ]]; + then + echo "# You need to enter a user. Aborting." + exit 1 +fi + +# Validate IP/domain name loop +while true; do + read -p "# Enter the IP/domain name of the SENSOR: " mySENSOR_IP + if [[ ${mySENSOR_IP} =~ ^([a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*\.[a-zA-Z]{2,})|(([0-9]{1,3}\.){3}[0-9]{1,3})$ ]]; + then + break + else + echo "# Invalid IP/domain. Please enter a valid IP or domain name." + fi +done + +# Check if ssh key has been deployed +read -p "# Has a SSH key been deployed to the SENSOR? (y/n): " mySSHKEY_DEPLOYED +if [[ ${mySSHKEY_DEPLOYED} != "y" ]]; + then + echo "# Generate a SSH key using 'ssh-keygen' and deploy it to the SENSOR (Example: ssh-copy-id -p 64295 ${mySSHUSER}@${mySENSOR_IP})." + exit 1 +fi + +# Validate IP/domain name of HIVE +while true; do + read -p "# Enter the IP/domain name of this HIVE: " myTPOT_HIVE_IP + if [[ ${myTPOT_HIVE_IP} =~ ^([a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*\.[a-zA-Z]{2,})|(([0-9]{1,3}\.){3}[0-9]{1,3})$ ]]; + then + break + else + echo "# Invalid IP/domain. Please enter a valid IP or domain name." + fi +done + +# Create a random SENSOR user name that is easily readable +myLS_WEB_USER="sensor-${myADJECTIVE}-${myNOUN}" + +# Create a random password +myLS_WEB_PW=$(tr -dc 'a-zA-Z0-9' < /dev/urandom | fold -w 32 | head -n 1) + +# Create myLS_WEB_USER_ENC +myLS_WEB_USER_ENC=$(htpasswd -b -n "${myLS_WEB_USER}" "${myLS_WEB_PW}") +myLS_WEB_USER_ENC_B64=$(echo -n "${myLS_WEB_USER_ENC}" | base64 -w0) + +# Create myTPOT_HIVE_USER, since this is for Logstash on the SENSOR, it needs to directly base64 encoded +myTPOT_HIVE_USER=$(echo -n "${myLS_WEB_USER}:${myLS_WEB_PW}" | base64 -w0) + +# Print credentials +echo "# The following SENSOR credentials have been created:" +echo "# New SENSOR username: ${myLS_WEB_USER}" +echo "# New SENSOR passowrd: ${myLS_WEB_PW}" +echo "# New htpasswd encoded credentials: ${myLS_WEB_USER_ENC}" +echo "# New htpasswd credentials base64 encoded: ${myLS_WEB_USER_ENC_B64}" +echo "# New SENSOR credentials base64 encoded: ${myTPOT_HIVE_USER}" +echo +echo "# Ansible will ask for the β€˜BECOME passwordβ€˜ which is typically the password you ’sudo’ with on the SENSOR." +echo "# The password will allow Ansible to run a reboot via sudo on the SENSOR." +echo + +# Read LS_WEB_USER from file +myENV_LS_WEB_USER=$(grep "^LS_WEB_USER=" "${myENV_FILE}" | sed 's/^LS_WEB_USER=//g' | tr -d "\"'") + +# Add the new SENSOR user +if [ "${myENV_LS_WEB_USER}" == "" ]; + then + myENV_LS_WEB_USER="${myLS_WEB_USER_ENC_B64}" + else + myENV_LS_WEB_USER="${myENV_LS_WEB_USER} ${myLS_WEB_USER_ENC_B64}" +fi + +# Need to export for Ansible +export myTPOT_HIVE_USER +export myTPOT_HIVE_IP + +ANSIBLE_LOG_PATH=${HOME}/tpotce/data/deploy_sensor.log ansible-playbook ${myANSIBLE_TPOT_PLAYBOOK} -i ${mySENSOR_IP}, -c ssh -u ${mySSHUSER} --ask-become-pass -e "ansible_port=${myANSIBLE_PORT}" + +if [ "$?" == 0 ]; + then + # Update the T-Pot .env config and lswebpasswd (avoid the need to restart T-Pot) on the host + echo "# Updating SENSOR users on this HIVE and in the T-Pot .env config:" + sed -i "/^LS_WEB_USER=/c\LS_WEB_USER=$myENV_LS_WEB_USER" "${myENV_FILE}" + : > "${HOME}"/tpotce/data/nginx/conf/lswebpasswd + for i in $myENV_LS_WEB_USER; + do + if [[ -n $i ]]; + then + # Need to control newlines as they kept coming up for some reason + echo -n "$i" | base64 -d -w0 + echo + echo -n "$i" | base64 -d -w0 | tr -d '\n' >> ${HOME}/tpotce/data/nginx/conf/lswebpasswd + echo >> ${HOME}/tpotce/data/nginx/conf/lswebpasswd + fi + done +fi + +unset myTPOT_HIVE_USER +unset myTPOT_HIVE_IP diff --git a/doc/architecture.png b/doc/architecture.png index 3f02eaaa..c789920e 100644 Binary files a/doc/architecture.png and b/doc/architecture.png differ diff --git a/doc/attackmap.png b/doc/attackmap.png index 626f690c..7a53d899 100644 Binary files a/doc/attackmap.png and b/doc/attackmap.png differ diff --git a/doc/cockpit_a.png b/doc/cockpit_a.png deleted file mode 100644 index 12331090..00000000 Binary files a/doc/cockpit_a.png and /dev/null differ diff --git a/doc/cockpit_b.png b/doc/cockpit_b.png deleted file mode 100644 index 3a66cdde..00000000 Binary files a/doc/cockpit_b.png and /dev/null differ diff --git a/doc/kibana_a.png b/doc/kibana_a.png index 5e993e06..919ad334 100644 Binary files a/doc/kibana_a.png and b/doc/kibana_a.png differ diff --git a/doc/kibana_b.png b/doc/kibana_b.png index e1b21660..7be29c58 100644 Binary files a/doc/kibana_b.png and b/doc/kibana_b.png differ diff --git a/doc/kibana_c.png b/doc/kibana_c.png index d2886b5d..77394f3a 100644 Binary files a/doc/kibana_c.png and b/doc/kibana_c.png differ diff --git a/doc/tpotwebui.png b/doc/tpotwebui.png index f9bfc2dc..e16b109b 100644 Binary files a/doc/tpotwebui.png and b/doc/tpotwebui.png differ diff --git a/preview/docker-compose.yml b/docker-compose.yml similarity index 94% rename from preview/docker-compose.yml rename to docker-compose.yml index c5e7e8c4..165fc68b 100644 --- a/preview/docker-compose.yml +++ b/docker-compose.yml @@ -1,3 +1,4 @@ +# T-Pot: STANDARD version: '3.9' networks: @@ -21,23 +22,24 @@ networks: sentrypeer_local: tanner_local: spiderfoot_local: + wordpot_local: ewsposter_local: services: -############################################## +######################################### #### DEV -############################################## -#### T-Pot Light Init - Never delete this! -############################################## +######################################### +#### T-Pot Init - Never delete this! +######################################### # T-Pot Init Service tpotinit: container_name: tpotinit - build: docker/. env_file: - .env restart: always + stop_grace_period: 60s tmpfs: - /tmp/etc:uid=2000,gid=2000 - /tmp/:uid=2000,gid=2000 @@ -50,6 +52,7 @@ services: - ${TPOT_DOCKER_COMPOSE}:/tmp/tpot/docker-compose.yml:ro - ${TPOT_DATA_PATH}/blackhole:/etc/blackhole - ${TPOT_DATA_PATH}:/data + - /var/run/docker.sock:/var/run/docker.sock:ro ################## @@ -109,7 +112,7 @@ services: pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - - ${TPOT_DATA_PATH}/citrixhoneypot/logs:/opt/citrixhoneypot/logs + - ${TPOT_DATA_PATH}/citrixhoneypot/log:/opt/citrixhoneypot/logs # Conpot IEC104 service conpot_IEC104: @@ -427,6 +430,7 @@ services: - mailoney_local ports: - "25:25" + - "587:25" image: ${TPOT_REPO}/mailoney:${TPOT_VERSION} pull_policy: ${TPOT_PULL_POLICY} read_only: true @@ -474,15 +478,13 @@ services: depends_on: tpotinit: condition: service_healthy -# SentryPeer offers to exchange bad actor data via DHT / P2P mode by setting the ENV to true (1) -# In some cases (i.e. internally deployed T-Pots) this might be confusing as SentryPeer will show -# the bad actors in its logs. Therefore this option is opt-in based. # environment: -# - SENTRYPEER_PEER_TO_PEER=0 +# - SENTRYPEER_PEER_TO_PEER=1 networks: - sentrypeer_local ports: # - "4222:4222/udp" + - "5060:5060/tcp" - "5060:5060/udp" # - "127.0.0.1:8082:8082" image: ${TPOT_REPO}/sentrypeer:${TPOT_VERSION} @@ -572,6 +574,22 @@ services: image: ${TPOT_REPO}/snare:${TPOT_VERSION} pull_policy: ${TPOT_PULL_POLICY} +# Wordpot service + wordpot: + container_name: wordpot + restart: always + depends_on: + tpotinit: + condition: service_healthy + networks: + - wordpot_local + ports: + - "8080:80" + image: ${TPOT_REPO}/wordpot:${TPOT_VERSION} + read_only: true + volumes: + - ${TPOT_DATA_PATH}/wordpot/log:/opt/wordpot/logs/ + ################## #### NSM @@ -616,9 +634,8 @@ services: tpotinit: condition: service_healthy environment: - # For ET Pro ruleset replace "OPEN" with your OINKCODE - - OINKCODE=OPEN - # Loading externel Rules from URL + - OINKCODE=${OINKCODE:-OPEN} # Default to OPEN if unset or NULL (value provided by T-Pot .env) + # Loading external Rules from URL # - FROMURL="https://username:password@yoururl.com|https://username:password@otherurl.com" network_mode: "host" cap_add: @@ -686,6 +703,11 @@ services: condition: service_healthy environment: - LS_JAVA_OPTS=-Xms1024m -Xmx1024m + - TPOT_TYPE=${TPOT_TYPE:-HIVE} + - TPOT_HIVE_USER=${TPOT_HIVE_USER} + - TPOT_HIVE_IP=${TPOT_HIVE_IP} + ports: + - "127.0.0.1:64305:64305" mem_limit: 2g image: ${TPOT_REPO}/logstash:${TPOT_VERSION} pull_policy: ${TPOT_PULL_POLICY} @@ -730,6 +752,8 @@ services: condition: service_healthy environment: - MAP_COMMAND=DataServer_v2.py + - TPOT_ATTACKMAP_TEXT=${TPOT_ATTACKMAP_TEXT} + - TZ=${TPOT_ATTACKMAP_TEXT_TIMEZONE} stop_signal: SIGKILL tty: true image: ${TPOT_REPO}/map:${TPOT_VERSION} @@ -765,7 +789,6 @@ services: container_name: nginx restart: always environment: - - COCKPIT=${COCKPIT} - TPOT_OSTYPE=${TPOT_OSTYPE} depends_on: tpotinit: @@ -781,13 +804,13 @@ services: network_mode: "host" ports: - "64297:64297" - - "127.0.0.1:64304:64304" image: ${TPOT_REPO}/nginx:${TPOT_VERSION} pull_policy: ${TPOT_PULL_POLICY} read_only: true volumes: - ${TPOT_DATA_PATH}/nginx/cert/:/etc/nginx/cert/:ro - ${TPOT_DATA_PATH}/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro + - ${TPOT_DATA_PATH}/nginx/conf/lswebpasswd:/etc/nginx/lswebpasswd:ro - ${TPOT_DATA_PATH}/nginx/log/:/var/log/nginx/ # Spiderfoot service diff --git a/docker/adbhoney/Dockerfile b/docker/adbhoney/Dockerfile index 1022609f..36ac7924 100644 --- a/docker/adbhoney/Dockerfile +++ b/docker/adbhoney/Dockerfile @@ -1,14 +1,15 @@ -FROM alpine:3.17 +FROM alpine:3.19 # # Include dist COPY dist/ /root/dist/ # # Install packages RUN apk --no-cache -U add \ - git \ - procps \ - py3-requests \ - python3 && \ + git \ + procps \ + py3-psutil \ + py3-requests \ + python3 && \ # # Install adbhoney from git git clone https://github.com/huuck/ADBHoney /opt/adbhoney && \ @@ -16,6 +17,7 @@ RUN apk --no-cache -U add \ # git checkout 2417a7a982f4fd527b3a048048df9a23178767ad && \ git checkout 42afd98611724ca3d694a48b694c957e8d953db4 && \ cp /root/dist/adbhoney.cfg /opt/adbhoney && \ + cp /root/dist/cpu_check.py / && \ sed -i 's/dst_ip/dest_ip/' /opt/adbhoney/adbhoney/core.py && \ sed -i 's/dst_port/dest_port/' /opt/adbhoney/adbhoney/core.py && \ # @@ -30,8 +32,8 @@ RUN apk --no-cache -U add \ # # Set workdir and start adbhoney STOPSIGNAL SIGINT -# Adbhoney sometimes hangs at 100% CPU usage, if detected process will be killed and container restarts per docker-compose settings -HEALTHCHECK CMD if [ $(ps -C mpv -p 1 -o %cpu | tail -n 1 | cut -f 1 -d ".") -gt 75 ]; then kill -2 1; else exit 0; fi +# Adbhoney sometimes hangs at 100% CPU usage, if detected container will become unhealthy and restarted by tpotinit +HEALTHCHECK --interval=5m --timeout=30s --retries=3 CMD python3 /cpu_check.py $(pgrep -of run.py) 99 USER adbhoney:adbhoney WORKDIR /opt/adbhoney/ CMD /usr/bin/python3 run.py diff --git a/docker/adbhoney/dist/cpu_check.py b/docker/adbhoney/dist/cpu_check.py new file mode 100644 index 00000000..bc465108 --- /dev/null +++ b/docker/adbhoney/dist/cpu_check.py @@ -0,0 +1,42 @@ +import psutil +import sys +import time + +if len(sys.argv) != 3: + print("Usage: cpu_check.py ") + sys.exit(1) + +try: + pid = int(sys.argv[1]) +except ValueError: + print("Please provide a valid integer value for the PID.") + sys.exit(1) + +try: + cpu_threshold = float(sys.argv[2]) +except ValueError: + print("Please provide a valid number for the CPU usage threshold.") + sys.exit(1) + +try: + target_process = psutil.Process(pid) +except psutil.NoSuchProcess: + print(f"No process with the PID {pid} was found.") + sys.exit(1) + +# Prepare to calculate the average CPU usage over 3 intervals of 1 second each +cpu_usages = [] +for _ in range(3): + cpu_usages.append(target_process.cpu_percent(interval=1)) + +# Calculate the average CPU usage +average_cpu_usage = sum(cpu_usages) / len(cpu_usages) +print(f"Average CPU Usage of PID {pid} over 3 seconds: {average_cpu_usage}%") + +# Check average CPU usage against the threshold +if average_cpu_usage >= cpu_threshold: + print(f"Average CPU usage of PID {pid} is above or equal to the threshold of {cpu_threshold}%.") + sys.exit(1) +else: + print(f"Average CPU usage of PID {pid} is below the threshold of {cpu_threshold}%. Exiting with code 0.") + sys.exit(0) diff --git a/docker/adbhoney/docker-compose.yml b/docker/adbhoney/docker-compose.yml index 7f2139f3..d726e685 100644 --- a/docker/adbhoney/docker-compose.yml +++ b/docker/adbhoney/docker-compose.yml @@ -16,8 +16,8 @@ services: - adbhoney_local ports: - "5555:5555" - image: "dtagdevsec/adbhoney:2204" + image: "dtagdevsec/adbhoney:24.04" read_only: true volumes: - - /data/adbhoney/log:/opt/adbhoney/log - - /data/adbhoney/downloads:/opt/adbhoney/dl + - $HOME/tpotce/data/adbhoney/log:/opt/adbhoney/log + - $HOME/tpotce/data/adbhoney/downloads:/opt/adbhoney/dl diff --git a/docker/builder.sh b/docker/builder.sh index 10582f03..9272f77d 100755 --- a/docker/builder.sh +++ b/docker/builder.sh @@ -1,10 +1,13 @@ #!/bin/bash +# Buildx Example: docker buildx build --platform linux/amd64,linux/arm64 -t username/demo:latest --push . + # Setup Vars myPLATFORMS="linux/amd64,linux/arm64" -myHUBORG="dtagdevsec" -myTAG="2204" -myIMAGESBASE="adbhoney ciscoasa citrixhoneypot conpot cowrie ddospot dicompot dionaea elasticpot endlessh ewsposter fatt glutton hellpot heralding honeypots honeytrap ipphoney log4pot mailoney medpot nginx p0f redishoneypot sentrypeer spiderfoot suricata wordpot" +myHUBORG_DOCKER="dtagdevsec" +myHUBORG_GITHUB="ghcr.io/telekom-security" +myTAG="24.04" +myIMAGESBASE="tpotinit adbhoney ciscoasa citrixhoneypot conpot cowrie ddospot dicompot dionaea elasticpot endlessh ewsposter fatt glutton hellpot heralding honeypots honeytrap ipphoney log4pot mailoney medpot nginx p0f redishoneypot sentrypeer spiderfoot suricata wordpot" myIMAGESELK="elasticsearch kibana logstash map" myIMAGESTANNER="phpox redis snare tanner" myBUILDERLOG="builder.log" @@ -23,9 +26,42 @@ fi docker buildx > /dev/null 2>&1 if [ "$?" == "1" ]; then - echo "### Build environment not setup. Run bin/setup_builder.sh" + echo "### Build environment not setup. Install docker engine from docker:" + echo "### https://docs.docker.com/engine/install/debian/" fi +# Let's ensure arm64 and amd64 are supported +echo "### Let's ensure ARM64 and AMD64 are supported ..." +myARCHITECTURES="amd64 arm64" +mySUPPORTED=$(docker buildx inspect --bootstrap) + +for i in $myARCHITECTURES; + do + if ! echo $mySUPPORTED | grep -q linux/$i; + then + echo "## Installing $i support ..." + docker run --privileged --rm tonistiigi/binfmt --install $i + docker buildx inspect --bootstrap + else + echo "## $i support detected!" + fi + done +echo + +# Let's ensure we have builder created with cache support +echo "### Checking for mybuilder ..." +if ! docker buildx ls | grep -q mybuilder; + then + echo "## Setting up mybuilder ..." + docker buildx create --name mybuilder + # Set as default, otherwise local cache is not supported + docker buildx use mybuilder + docker buildx inspect --bootstrap + else + echo "## Found mybuilder!" +fi +echo + # Only run with command switch if [ "$1" == "" ]; then echo "### T-Pot Multi Arch Image Builder." @@ -44,7 +80,12 @@ local myPUSHOPTION="$3" for myREPONAME in $myIMAGELIST; do echo -n "Now building: $myREPONAME in $myPATH$myREPONAME/." - docker buildx build --cache-from "type=local,src=$myBUILDCACHE" --cache-to "type=local,dest=$myBUILDCACHE" --platform $myPLATFORMS -t $myHUBORG/$myREPONAME:$myTAG $myPUSHOPTION $myPATH$myREPONAME/. >> $myBUILDERLOG 2>&1 + docker buildx build --cache-from "type=local,src=$myBUILDCACHE" \ + --cache-to "type=local,dest=$myBUILDCACHE" \ + --platform $myPLATFORMS \ + -t $myHUBORG_DOCKER/$myREPONAME:$myTAG \ + -t $myHUBORG_GITHUB/$myREPONAME:$myTAG \ + $myPUSHOPTION $myPATH$myREPONAME/. >> $myBUILDERLOG 2>&1 if [ "$?" != "0" ]; then echo " [ ERROR ] - Check logs!" @@ -76,4 +117,3 @@ if [ "$1" == "push" ]; fuBUILDIMAGES "elk/" "$myIMAGESELK" "--push" fuBUILDIMAGES "tanner/" "$myIMAGESTANNER" "--push" fi - diff --git a/docker/ciscoasa/Dockerfile b/docker/ciscoasa/Dockerfile index 4a057722..da7f2714 100644 --- a/docker/ciscoasa/Dockerfile +++ b/docker/ciscoasa/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.17 +FROM alpine:3.19 # # Include dist COPY dist/ /root/dist/ @@ -6,15 +6,15 @@ COPY dist/ /root/dist/ # Setup env and apt RUN apk --no-cache -U upgrade && \ apk --no-cache add build-base \ - git \ - libffi \ - libffi-dev \ - openssl \ - openssl-dev \ - py3-cryptography \ - py3-pip \ - python3 \ - python3-dev && \ + git \ + libffi \ + libffi-dev \ + openssl \ + openssl-dev \ + py3-cryptography \ + py3-pip \ + python3 \ + python3-dev && \ # # Setup user addgroup -g 2000 ciscoasa && \ @@ -27,7 +27,7 @@ RUN apk --no-cache -U upgrade && \ cd ciscoasa_honeypot && \ git checkout d6e91f1aab7fe6fc01fabf2046e76b68dd6dc9e2 && \ sed -i "s/git+git/git+https/g" requirements.txt && \ - pip3 install --no-cache-dir -r requirements.txt && \ + pip3 install --break-system-packages --no-cache-dir -r requirements.txt && \ cp /root/dist/asa_server.py /opt/ciscoasa_honeypot && \ chown -R ciscoasa:ciscoasa /opt/ciscoasa_honeypot && \ # diff --git a/docker/ciscoasa/docker-compose.yml b/docker/ciscoasa/docker-compose.yml index 228dc540..484bfb3e 100644 --- a/docker/ciscoasa/docker-compose.yml +++ b/docker/ciscoasa/docker-compose.yml @@ -19,7 +19,7 @@ services: ports: - "5000:5000/udp" - "8443:8443" - image: "dtagdevsec/ciscoasa:2204" + image: "dtagdevsec/ciscoasa:24.04" read_only: true volumes: - - /data/ciscoasa/log:/var/log/ciscoasa + - $HOME/tpotce/data/ciscoasa/log:/var/log/ciscoasa diff --git a/docker/citrixhoneypot/Dockerfile b/docker/citrixhoneypot/Dockerfile index 45e9ef9d..b51dd882 100644 --- a/docker/citrixhoneypot/Dockerfile +++ b/docker/citrixhoneypot/Dockerfile @@ -1,14 +1,14 @@ -FROM alpine:3.17 +FROM alpine:3.19 # # Install packages RUN apk --no-cache -U add \ - git \ - libcap \ - openssl \ - py3-pip \ - python3 && \ + git \ + libcap \ + openssl \ + py3-pip \ + python3 && \ # - pip3 install --no-cache-dir python-json-logger && \ + pip3 install --break-system-packages --no-cache-dir python-json-logger && \ # # Install CitrixHoneypot from GitHub git clone https://github.com/t3chn0m4g3/CitrixHoneypot /opt/citrixhoneypot && \ @@ -28,7 +28,7 @@ RUN apk --no-cache -U add \ addgroup -g 2000 citrixhoneypot && \ adduser -S -H -s /bin/ash -u 2000 -D -g 2000 citrixhoneypot && \ chown -R citrixhoneypot:citrixhoneypot /opt/citrixhoneypot && \ - setcap cap_net_bind_service=+ep /usr/bin/python3.10 && \ + setcap cap_net_bind_service=+ep $(readlink -f $(type -P python3)) && \ # # Clean up apk del --purge git \ diff --git a/docker/citrixhoneypot/docker-compose.yml b/docker/citrixhoneypot/docker-compose.yml index 7e3383f3..758ff5ab 100644 --- a/docker/citrixhoneypot/docker-compose.yml +++ b/docker/citrixhoneypot/docker-compose.yml @@ -16,7 +16,7 @@ services: - citrixhoneypot_local ports: - "443:443" - image: "dtagdevsec/citrixhoneypot:2204" + image: "dtagdevsec/citrixhoneypot:24.04" read_only: true volumes: - - /data/citrixhoneypot/logs:/opt/citrixhoneypot/logs + - $HOME/tpotce/data/citrixhoneypot/log:/opt/citrixhoneypot/logs diff --git a/docker/conpot/Dockerfile b/docker/conpot/Dockerfile index a84b07d9..792210d3 100644 --- a/docker/conpot/Dockerfile +++ b/docker/conpot/Dockerfile @@ -1,52 +1,56 @@ -FROM alpine:3.17 +FROM alpine:3.19 # # Include dist COPY dist/ /root/dist/ # # Setup apt RUN apk --no-cache -U add \ - build-base \ - cython \ - file \ - git \ - libev \ - libtool \ - libcap \ - libffi-dev \ - libxslt \ - libxslt-dev \ - mariadb-dev \ - pkgconfig \ - procps \ - python3 \ - python3-dev \ - py3-cffi \ - py3-cryptography \ - py3-freezegun \ - py3-gevent \ - py3-lxml \ - py3-natsort \ - py3-pip \ - py3-ply \ - py3-psutil \ - py3-pycryptodomex \ - py3-pytest \ - py3-requests \ - py3-pyserial \ - py3-setuptools \ - py3-slugify \ - py3-snmp \ - py3-sphinx \ - py3-wheel \ - py3-zope-event \ - py3-zope-interface \ - wget && \ + build-base \ + cython \ + file \ + git \ + libev \ + libtool \ + libcap \ + libffi-dev \ + libxslt \ + libxslt-dev \ + mariadb-dev \ + pkgconfig \ + procps \ + python3 \ + python3-dev \ + py3-cffi \ + py3-cryptography \ + py3-freezegun \ + py3-gevent \ + py3-lxml \ + py3-natsort \ + py3-pip \ + py3-ply \ + py3-psutil \ + py3-pycryptodomex \ + py3-pytest \ + py3-requests \ + py3-pyserial \ + py3-setuptools \ + py3-slugify \ + py3-snmp \ + py3-sphinx \ + py3-wheel \ + py3-zope-event \ + py3-zope-interface \ + wget && \ # # Setup ConPot + git clone https://github.com/t3chn0m4g3/cpppo /opt/cpppo && \ + cd /opt/cpppo && \ + pip3 install --break-system-packages --no-cache-dir --upgrade pip && \ + pip3 install --break-system-packages --no-cache-dir . && \ git clone https://github.com/mushorg/conpot /opt/conpot && \ cd /opt/conpot/ && \ - git checkout b3740505fd26d82473c0d7be405b372fa0f82575 && \ - #git checkout 1c2382ea290b611fdc6a0a5f9572c7504bcb616e && \ + git checkout 26c67d11b08a855a28e87abd186d959741f46c7f && \ + # git checkout b3740505fd26d82473c0d7be405b372fa0f82575 && \ # Change template default ports if <1024 sed -i 's/port="2121"/port="21"/' /opt/conpot/conpot/templates/default/ftp/ftp.xml && \ sed -i 's/port="8800"/port="80"/' /opt/conpot/conpot/templates/default/http/http.xml && \ @@ -58,17 +62,17 @@ RUN apk --no-cache -U add \ sed -i 's/port="16100"/port="161"/' /opt/conpot/conpot/templates/IEC104/snmp/snmp.xml && \ sed -i 's/port="6230"/port="623"/' /opt/conpot/conpot/templates/ipmi/ipmi/ipmi.xml && \ cp /root/dist/requirements.txt . && \ - pip3 install --no-cache-dir --upgrade pip && \ - pip3 install --no-cache-dir . && \ + pip3 install --break-system-packages --no-cache-dir . && \ cd / && \ rm -rf /opt/conpot /tmp/* /var/tmp/* && \ - setcap cap_net_bind_service=+ep /usr/bin/python3.10 && \ + setcap cap_net_bind_service=+ep $(readlink -f $(type -P python3)) && \ # # Get wireshark manuf db for scapy, setup configs, user, groups mkdir -p /etc/conpot /var/log/conpot /usr/share/wireshark && \ - wget https://github.com/wireshark/wireshark/raw/master/manuf -o /usr/share/wireshark/manuf && \ + wget https://www.wireshark.org/download/automated/data/manuf -o /usr/share/wireshark/manuf && \ cp /root/dist/conpot.cfg /etc/conpot/conpot.cfg && \ - cp -R /root/dist/templates /usr/lib/python3.10/site-packages/conpot/ && \ + cp -R /root/dist/templates /usr/lib/$(readlink -f $(type -P python3) | cut -f4 -d"/")/site-packages/conpot/ && \ + cp /root/dist/cpu_check.py / && \ addgroup -g 2000 conpot && \ adduser -S -s /bin/ash -u 2000 -D -g 2000 conpot && \ # @@ -90,7 +94,7 @@ RUN apk --no-cache -U add \ # # Start conpot STOPSIGNAL SIGINT -# Conpot sometimes hangs at 100% CPU usage, if detected process will be killed and container restarts per docker-compose settings -HEALTHCHECK CMD if [ $(ps -C mpv -p 1 -o %cpu | tail -n 1 | cut -f 1 -d ".") -gt 75 ]; then kill -2 1; else exit 0; fi +# Conpot sometimes hangs at 100% CPU usage, if detected container will become unhealthy and restarted by tpotinit +HEALTHCHECK --interval=5m --timeout=30s --retries=3 CMD python3 /cpu_check.py $(pgrep -of conpot) 99 USER conpot:conpot CMD exec /usr/bin/conpot --mibcache $CONPOT_TMP --temp_dir $CONPOT_TMP --template $CONPOT_TEMPLATE --logfile $CONPOT_LOG --config $CONPOT_CONFIG diff --git a/docker/conpot/dist/conpot.cfg b/docker/conpot/dist/conpot.cfg index e67d5d48..90633fa6 100644 --- a/docker/conpot/dist/conpot.cfg +++ b/docker/conpot/dist/conpot.cfg @@ -3,7 +3,7 @@ sensorid = conpot [virtual_file_system] data_fs_url = %(CONPOT_TMP)s -fs_url = tar:///usr/lib/python3.10/site-packages/conpot/data.tar +fs_url = tar:///usr/lib/python3.11/site-packages/conpot/data.tar [session] timeout = 30 diff --git a/docker/conpot/dist/cpu_check.py b/docker/conpot/dist/cpu_check.py new file mode 100644 index 00000000..bc465108 --- /dev/null +++ b/docker/conpot/dist/cpu_check.py @@ -0,0 +1,42 @@ +import psutil +import sys +import time + +if len(sys.argv) != 3: + print("Usage: cpu_check.py ") + sys.exit(1) + +try: + pid = int(sys.argv[1]) +except ValueError: + print("Please provide a valid integer value for the PID.") + sys.exit(1) + +try: + cpu_threshold = float(sys.argv[2]) +except ValueError: + print("Please provide a valid number for the CPU usage threshold.") + sys.exit(1) + +try: + target_process = psutil.Process(pid) +except psutil.NoSuchProcess: + print(f"No process with the PID {pid} was found.") + sys.exit(1) + +# Prepare to calculate the average CPU usage over 3 intervals of 1 second each +cpu_usages = [] +for _ in range(3): + cpu_usages.append(target_process.cpu_percent(interval=1)) + +# Calculate the average CPU usage +average_cpu_usage = sum(cpu_usages) / len(cpu_usages) +print(f"Average CPU Usage of PID {pid} over 3 seconds: {average_cpu_usage}%") + +# Check average CPU usage against the threshold +if average_cpu_usage >= cpu_threshold: + print(f"Average CPU usage of PID {pid} is above or equal to the threshold of {cpu_threshold}%.") + sys.exit(1) +else: + print(f"Average CPU usage of PID {pid} is below the threshold of {cpu_threshold}%. Exiting with code 0.") + sys.exit(0) diff --git a/docker/conpot/dist/requirements.txt b/docker/conpot/dist/requirements.txt index c9ef466b..debde891 100644 --- a/docker/conpot/dist/requirements.txt +++ b/docker/conpot/dist/requirements.txt @@ -12,9 +12,7 @@ bacpypes==0.17.0 pyghmi==1.4.1 mixbox modbus-tk -cpppo fs==2.3.0 tftpy # some freezegun versions broken -pycrypto sphinx_rtd_theme diff --git a/docker/conpot/docker-compose.yml b/docker/conpot/docker-compose.yml index 3e21b2b1..3a303b78 100644 --- a/docker/conpot/docker-compose.yml +++ b/docker/conpot/docker-compose.yml @@ -37,10 +37,10 @@ services: - "2121:21" - "44818:44818" - "47808:47808/udp" - image: "dtagdevsec/conpot:2204" + image: "dtagdevsec/conpot:24.04" read_only: true volumes: - - /data/conpot/log:/var/log/conpot + - $HOME/tpotce/data/conpot/log:/var/log/conpot # Conpot IEC104 service conpot_IEC104: @@ -61,10 +61,10 @@ services: ports: # - "161:161/udp" - "2404:2404" - image: "dtagdevsec/conpot:2204" + image: "dtagdevsec/conpot:24.04" read_only: true volumes: - - /data/conpot/log:/var/log/conpot + - $HOME/tpotce/data/conpot/log:/var/log/conpot # Conpot guardian_ast service conpot_guardian_ast: @@ -84,10 +84,10 @@ services: - conpot_local_guardian_ast ports: - "10001:10001" - image: "dtagdevsec/conpot:2204" + image: "dtagdevsec/conpot:24.04" read_only: true volumes: - - /data/conpot/log:/var/log/conpot + - $HOME/tpotce/data/conpot/log:/var/log/conpot # Conpot ipmi conpot_ipmi: @@ -107,10 +107,10 @@ services: - conpot_local_ipmi ports: - "623:623/udp" - image: "dtagdevsec/conpot:2204" + image: "dtagdevsec/conpot:24.04" read_only: true volumes: - - /data/conpot/log:/var/log/conpot + - $HOME/tpotce/data/conpot/log:/var/log/conpot # Conpot kamstrup_382 conpot_kamstrup_382: @@ -131,7 +131,7 @@ services: ports: - "1025:1025" - "50100:50100" - image: "dtagdevsec/conpot:2204" + image: "dtagdevsec/conpot:24.04" read_only: true volumes: - - /data/conpot/log:/var/log/conpot + - $HOME/tpotce/data/conpot/log:/var/log/conpot diff --git a/docker/cowrie/Dockerfile b/docker/cowrie/Dockerfile index 5b103c7a..1c2573b6 100644 --- a/docker/cowrie/Dockerfile +++ b/docker/cowrie/Dockerfile @@ -1,37 +1,37 @@ -FROM alpine:3.17 +FROM alpine:3.19 # # Include dist COPY dist/ /root/dist/ # # Get and install dependencies & packages RUN apk --no-cache -U add \ - bash \ - build-base \ - git \ - gmp-dev \ - libcap \ - libffi-dev \ - mpc1-dev \ - mpfr-dev \ - openssl \ - openssl-dev \ - py3-appdirs \ - py3-asn1-modules \ - py3-attrs \ - py3-bcrypt \ - py3-cryptography \ - py3-dateutil \ - py3-greenlet \ - py3-mysqlclient \ - py3-openssl \ - py3-packaging \ - py3-parsing \ - py3-pip \ - py3-service_identity \ - py3-treq \ - py3-twisted \ - python3 \ - python3-dev && \ + bash \ + build-base \ + git \ + gmp-dev \ + libcap \ + libffi-dev \ + mpc1-dev \ + mpfr-dev \ + openssl \ + openssl-dev \ + py3-appdirs \ + py3-asn1-modules \ + py3-attrs \ + py3-bcrypt \ + py3-cryptography \ + py3-dateutil \ + py3-greenlet \ + py3-mysqlclient \ + py3-openssl \ + py3-packaging \ + py3-parsing \ + py3-pip \ + py3-service_identity \ + py3-treq \ + py3-twisted \ + python3 \ + python3-dev && \ # # Setup user addgroup -g 2000 cowrie && \ @@ -40,20 +40,20 @@ RUN apk --no-cache -U add \ # Install cowrie mkdir -p /home/cowrie && \ cd /home/cowrie && \ - git clone --depth=1 https://github.com/cowrie/cowrie -b v2.5.0 && \ - #git clone --depth=1 https://github.com/cowrie/cowrie && \ + # git clone --depth=1 https://github.com/cowrie/cowrie -b v2.5.0 && \ + git clone https://github.com/cowrie/cowrie && \ cd cowrie && \ - #git checkout 8b1e1cf4db0d3b0e70b470cf40385bbbd3ed1733 && \ + git checkout 3394082040c02d91e79efa2c640ad68da9fe2231 && \ mkdir -p log && \ cp /root/dist/requirements.txt . && \ - pip3 install --upgrade pip && \ - pip3 install -r requirements.txt && \ + pip3 install --break-system-packages --upgrade pip && \ + pip3 install --break-system-packages -r requirements.txt && \ # # Setup configs - export PYTHON_DIR=$(python3 --version | tr '[A-Z]' '[a-z]' | tr -d ' ' | cut -d '.' -f 1,2 ) && \ - setcap cap_net_bind_service=+ep /usr/bin/$PYTHON_DIR && \ + #export PYTHON_DIR=$(python3 --version | tr '[A-Z]' '[a-z]' | tr -d ' ' | cut -d '.' -f 1,2 ) && \ + setcap cap_net_bind_service=+ep $(readlink -f $(type -P python3)) && \ cp /root/dist/cowrie.cfg /home/cowrie/cowrie/cowrie.cfg && \ - chown cowrie:cowrie -R /home/cowrie/* /usr/lib/$PYTHON_DIR/site-packages/twisted/plugins && \ + chown cowrie:cowrie -R /home/cowrie/* /usr/lib/$(readlink -f $(type -P python3) | cut -f4 -d"/")/site-packages/twisted/plugins && \ # # Start Cowrie once to prevent dropin.cache errors upon container start caused by read-only filesystem su - cowrie -c "export PYTHONPATH=/home/cowrie/cowrie:/home/cowrie/cowrie/src && \ diff --git a/docker/cowrie/docker-compose.yml b/docker/cowrie/docker-compose.yml index c0261fd3..50d3d1f1 100644 --- a/docker/cowrie/docker-compose.yml +++ b/docker/cowrie/docker-compose.yml @@ -20,10 +20,10 @@ services: ports: - "22:22" - "23:23" - image: "dtagdevsec/cowrie:2204" + image: "dtagdevsec/cowrie:24.04" read_only: true volumes: - - /data/cowrie/downloads:/home/cowrie/cowrie/dl - - /data/cowrie/keys:/home/cowrie/cowrie/etc - - /data/cowrie/log:/home/cowrie/cowrie/log - - /data/cowrie/log/tty:/home/cowrie/cowrie/log/tty + - $HOME/tpotce/data/cowrie/downloads:/home/cowrie/cowrie/dl + - $HOME/tpotce/data/cowrie/keys:/home/cowrie/cowrie/etc + - $HOME/tpotce/data/cowrie/log:/home/cowrie/cowrie/log + - $HOME/tpotce/data/cowrie/log/tty:/home/cowrie/cowrie/log/tty diff --git a/docker/ddospot/Dockerfile b/docker/ddospot/Dockerfile index 8240680c..f1754d0e 100644 --- a/docker/ddospot/Dockerfile +++ b/docker/ddospot/Dockerfile @@ -1,22 +1,22 @@ -FROM alpine:3.17 +FROM alpine:3.19 # # Include dist COPY dist/ /root/dist/ # # Install packages RUN apk --no-cache -U add \ - build-base \ - git \ - libcap \ - py3-colorama \ - py3-greenlet \ - py3-pip \ - py3-schedule \ - py3-sqlalchemy \ - py3-twisted \ - py3-wheel \ - python3 \ - python3-dev && \ + build-base \ + git \ + libcap \ + py3-colorama \ + py3-greenlet \ + py3-pip \ + py3-schedule \ + py3-sqlalchemy \ + py3-twisted \ + py3-wheel \ + python3 \ + python3-dev && \ # # Install ddospot from GitHub and setup mkdir -p /opt && \ @@ -40,8 +40,8 @@ RUN apk --no-cache -U add \ sed -i "s#rotate_size = 10#rotate_size = 9999#g" /opt/ddospot/ddospot/pots/ntp/ntpot.conf && \ sed -i "s#rotate_size = 10#rotate_size = 9999#g" /opt/ddospot/ddospot/pots/ssdp/ssdpot.conf && \ cp /root/dist/requirements.txt . && \ - pip3 install -r ddospot/requirements.txt && \ - setcap cap_net_bind_service=+ep /usr/bin/python3.10 && \ + pip3 install --break-system-packages -r ddospot/requirements.txt && \ + setcap cap_net_bind_service=+ep $(readlink -f $(type -P python3)) && \ # # Setup user, groups and configs addgroup -g 2000 ddospot && \ @@ -50,8 +50,8 @@ RUN apk --no-cache -U add \ # # Clean up apk del --purge build-base \ - git \ - python3-dev && \ + git \ + python3-dev && \ rm -rf /root/* && \ rm -rf /opt/ddospot/.git && \ rm -rf /var/cache/apk/* diff --git a/docker/ddospot/docker-compose.yml b/docker/ddospot/docker-compose.yml index 935aaa41..7e0d33c4 100644 --- a/docker/ddospot/docker-compose.yml +++ b/docker/ddospot/docker-compose.yml @@ -20,9 +20,9 @@ services: - "123:123/udp" # - "161:161/udp" - "1900:1900/udp" - image: "dtagdevsec/ddospot:2204" + image: "dtagdevsec/ddospot:24.04" read_only: true volumes: - - /data/ddospot/log:/opt/ddospot/ddospot/logs - - /data/ddospot/bl:/opt/ddospot/ddospot/bl - - /data/ddospot/db:/opt/ddospot/ddospot/db + - $HOME/tpotce/data/ddospot/log:/opt/ddospot/ddospot/logs + - $HOME/tpotce/data/ddospot/bl:/opt/ddospot/ddospot/bl + - $HOME/tpotce/data/ddospot/db:/opt/ddospot/ddospot/db diff --git a/docker/deprecated/cyberchef/docker-compose.yml b/docker/deprecated/cyberchef/docker-compose.yml index 45bd3291..abfad1bc 100644 --- a/docker/deprecated/cyberchef/docker-compose.yml +++ b/docker/deprecated/cyberchef/docker-compose.yml @@ -14,5 +14,5 @@ services: - cyberchef_local ports: - "127.0.0.1:64299:8000" - image: "dtagdevsec/cyberchef:2204" + image: "dtagdevsec/cyberchef:24.04" read_only: true diff --git a/docker/deprecated/head/docker-compose.yml b/docker/deprecated/head/docker-compose.yml index 57c7591f..17e973a6 100644 --- a/docker/deprecated/head/docker-compose.yml +++ b/docker/deprecated/head/docker-compose.yml @@ -12,5 +12,5 @@ services: # condition: service_healthy ports: - "127.0.0.1:64302:9100" - image: "dtagdevsec/head:2204" + image: "dtagdevsec/head:24.04" read_only: true diff --git a/docker/deprecated/honeypy/docker-compose.yml b/docker/deprecated/honeypy/docker-compose.yml index 4dc581fa..6787aa4e 100644 --- a/docker/deprecated/honeypy/docker-compose.yml +++ b/docker/deprecated/honeypy/docker-compose.yml @@ -20,7 +20,7 @@ services: - "2324:2324" - "4096:4096" - "9200:9200" - image: "dtagdevsec/honeypy:2204" + image: "dtagdevsec/honeypy:24.04" read_only: true volumes: - /data/honeypy/log:/opt/honeypy/log diff --git a/docker/deprecated/honeysap/docker-compose.yml b/docker/deprecated/honeysap/docker-compose.yml index 26a46456..a14f66a7 100644 --- a/docker/deprecated/honeysap/docker-compose.yml +++ b/docker/deprecated/honeysap/docker-compose.yml @@ -14,6 +14,6 @@ services: - honeysap_local ports: - "3299:3299" - image: "dtagdevsec/honeysap:2204" + image: "dtagdevsec/honeysap:24.04" volumes: - /data/honeysap/log:/opt/honeysap/log diff --git a/docker/deprecated/rdpy/docker-compose.yml b/docker/deprecated/rdpy/docker-compose.yml index d14c2592..b79c4fc5 100644 --- a/docker/deprecated/rdpy/docker-compose.yml +++ b/docker/deprecated/rdpy/docker-compose.yml @@ -22,7 +22,7 @@ services: - rdpy_local ports: - "3389:3389" - image: "dtagdevsec/rdpy:2204" + image: "dtagdevsec/rdpy:24.04" read_only: true volumes: - /data/rdpy/log:/var/log/rdpy diff --git a/docker/dicompot/Dockerfile b/docker/dicompot/Dockerfile index acdd9030..f5e03836 100644 --- a/docker/dicompot/Dockerfile +++ b/docker/dicompot/Dockerfile @@ -1,11 +1,13 @@ -FROM alpine:3.17 +FROM golang:1.21-alpine as builder +# +# Include dist +COPY dist/ /root/dist/ # # Setup apk RUN apk -U add --no-cache \ - build-base \ - git \ - g++ && \ - apk -U add --no-cache go --repository http://dl-3.alpinelinux.org/alpine/edge/community && \ + build-base \ + git \ + g++ && \ # # Setup go, build dicompot mkdir -p /opt/go && \ @@ -15,25 +17,20 @@ RUN apk -U add --no-cache \ cd dicompot && \ git checkout 41331194156bbb17078bcc1594f4952ac06a731e && \ go mod download && \ - go install -a -x github.com/nsmfoo/dicompot/server && \ + go install -a -x github.com/nsmfoo/dicompot/server +# +FROM alpine:3.19 # # Setup dicompot - mkdir -p /opt/dicompot/images && \ - cp /opt/go/bin/server /opt/dicompot && \ +# +COPY --from=builder /opt/go/bin/server /opt/dicompot/server +COPY --from=builder /root/dist/dcm_pts/images /opt/dicompot/images # # Setup user, groups and configs - addgroup -g 2000 dicompot && \ - adduser -S -s /bin/ash -u 2000 -D -g 2000 dicompot && \ - chown -R dicompot:dicompot /opt/dicompot && \ # -# Clean up - apk del --purge build-base \ - git \ - go \ - g++ && \ - rm -rf /var/cache/apk/* \ - /opt/go \ - /root/dist +RUN addgroup -g 2000 dicompot && \ + adduser -S -s /bin/ash -u 2000 -D -g 2000 dicompot && \ + chown -R dicompot:dicompot /opt/dicompot # # Start dicompot WORKDIR /opt/dicompot diff --git a/docker/dicompot/dist/dcm_pts/images/series100001-Body/img0001-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series100001-Body/img0001-58.7145.dcm new file mode 100644 index 00000000..15e4da53 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series100001-Body/img0001-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series102001-Body/img0001-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series102001-Body/img0001-58.7145.dcm new file mode 100644 index 00000000..4866bc8c Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series102001-Body/img0001-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series103001-Body/img0001-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series103001-Body/img0001-58.7145.dcm new file mode 100644 index 00000000..ef72ac67 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series103001-Body/img0001-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series105001-Body/img0001-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series105001-Body/img0001-58.7145.dcm new file mode 100644 index 00000000..9c7d5224 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series105001-Body/img0001-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series106001-Body/img0001-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series106001-Body/img0001-58.7145.dcm new file mode 100644 index 00000000..62e9b1b2 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series106001-Body/img0001-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series107001-Body/img0001-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series107001-Body/img0001-58.7145.dcm new file mode 100644 index 00000000..35590be2 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series107001-Body/img0001-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series108001-Body/img0001-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series108001-Body/img0001-58.7145.dcm new file mode 100644 index 00000000..01b1fd79 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series108001-Body/img0001-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series109001-Body/img0001-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series109001-Body/img0001-58.7145.dcm new file mode 100644 index 00000000..002c08b2 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series109001-Body/img0001-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series110001-Body/img0001-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series110001-Body/img0001-58.7145.dcm new file mode 100644 index 00000000..4c55be30 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series110001-Body/img0001-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series111001-Body/img0001-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series111001-Body/img0001-58.7145.dcm new file mode 100644 index 00000000..12a74d53 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series111001-Body/img0001-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series112001-Body/img0001-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series112001-Body/img0001-58.7145.dcm new file mode 100644 index 00000000..6eae84f2 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series112001-Body/img0001-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series114001-Body/img0001-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series114001-Body/img0001-58.7145.dcm new file mode 100644 index 00000000..dbc940ba Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series114001-Body/img0001-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series115001-Body/img0001-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series115001-Body/img0001-58.7145.dcm new file mode 100644 index 00000000..b70d900f Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series115001-Body/img0001-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series117001-Body/img0001-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series117001-Body/img0001-58.7145.dcm new file mode 100644 index 00000000..bb176596 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series117001-Body/img0001-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0001-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0001-58.7145.dcm new file mode 100644 index 00000000..3402b3c5 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0001-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0002-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0002-58.7145.dcm new file mode 100644 index 00000000..cae4dd22 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0002-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0003-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0003-58.7145.dcm new file mode 100644 index 00000000..62a6d4c1 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0003-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0004-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0004-58.7145.dcm new file mode 100644 index 00000000..a9df9c15 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0004-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0005-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0005-58.7145.dcm new file mode 100644 index 00000000..4cb394bf Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0005-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0006-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0006-58.7145.dcm new file mode 100644 index 00000000..414d1170 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0006-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0007-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0007-58.7145.dcm new file mode 100644 index 00000000..050efb5c Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0007-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0008-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0008-58.7145.dcm new file mode 100644 index 00000000..b68db23f Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0008-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0009-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0009-58.7145.dcm new file mode 100644 index 00000000..7a3322d1 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0009-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0010-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0010-58.7145.dcm new file mode 100644 index 00000000..c9ad6894 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0010-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0011-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0011-58.7145.dcm new file mode 100644 index 00000000..5752a255 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0011-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0012-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0012-58.7145.dcm new file mode 100644 index 00000000..01c68720 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0012-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0013-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0013-58.7145.dcm new file mode 100644 index 00000000..4355fcfa Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0013-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0014-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0014-58.7145.dcm new file mode 100644 index 00000000..9739f236 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0014-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0015-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0015-58.7145.dcm new file mode 100644 index 00000000..7c31d5a4 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0015-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0016-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0016-58.7145.dcm new file mode 100644 index 00000000..bc4428c3 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0016-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0017-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0017-58.7145.dcm new file mode 100644 index 00000000..494dfb41 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0017-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0018-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0018-58.7145.dcm new file mode 100644 index 00000000..92d45cc8 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0018-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0019-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0019-58.7145.dcm new file mode 100644 index 00000000..281febb6 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0019-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0020-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0020-58.7145.dcm new file mode 100644 index 00000000..a781414e Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0020-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0021-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0021-58.7145.dcm new file mode 100644 index 00000000..3d0e2074 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0021-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0022-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0022-58.7145.dcm new file mode 100644 index 00000000..5ce3680b Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0022-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0023-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0023-58.7145.dcm new file mode 100644 index 00000000..18176d30 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0023-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0024-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0024-58.7145.dcm new file mode 100644 index 00000000..738f1032 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0024-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0025-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0025-58.7145.dcm new file mode 100644 index 00000000..4490a217 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series37001-Body/img0025-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0001-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0001-58.7145.dcm new file mode 100644 index 00000000..d9cd4c8d Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0001-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0002-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0002-58.7145.dcm new file mode 100644 index 00000000..d3635439 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0002-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0003-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0003-58.7145.dcm new file mode 100644 index 00000000..ef9fc3d2 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0003-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0004-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0004-58.7145.dcm new file mode 100644 index 00000000..a95c6121 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0004-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0005-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0005-58.7145.dcm new file mode 100644 index 00000000..1cab395e Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0005-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0006-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0006-58.7145.dcm new file mode 100644 index 00000000..8b446946 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0006-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0007-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0007-58.7145.dcm new file mode 100644 index 00000000..d73c9ba8 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0007-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0008-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0008-58.7145.dcm new file mode 100644 index 00000000..e205b2af Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0008-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0009-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0009-58.7145.dcm new file mode 100644 index 00000000..c78fe3b7 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0009-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0010-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0010-58.7145.dcm new file mode 100644 index 00000000..03bfacf8 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0010-58.7145.dcm differ diff --git a/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0011-58.7145.dcm b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0011-58.7145.dcm new file mode 100644 index 00000000..1820a855 Binary files /dev/null and b/docker/dicompot/dist/dcm_pts/images/series38001-Body/img0011-58.7145.dcm differ diff --git a/docker/dicompot/docker-compose.yml b/docker/dicompot/docker-compose.yml index c40f83fe..fc21d7a1 100644 --- a/docker/dicompot/docker-compose.yml +++ b/docker/dicompot/docker-compose.yml @@ -7,7 +7,7 @@ services: # Dicompot service # Get the Horos Client for testing: https://horosproject.org/ -# Get Dicom images (CC BY 3.0): https://www.cancerimagingarchive.net/collections/ +# Get Dicom images (CC BY 3.0): https://dataverse.harvard.edu/dataverse/harvard/?q=dicom # Put images (which must be in Dicom DCM format or it will not work!) into /data/dicompot/images dicompot: build: . @@ -19,8 +19,8 @@ services: - dicompot_local ports: - "11112:11112" - image: "dtagdevsec/dicompot:2204" + image: "dtagdevsec/dicompot:24.04" read_only: true volumes: - - /data/dicompot/log:/var/log/dicompot -# - /data/dicompot/images:/opt/dicompot/images + - $HOME/tpotce/data/dicompot/log:/var/log/dicompot +# - $HOME/tpotce/data/dicompot/images:/opt/dicompot/images diff --git a/docker/dionaea/Dockerfile b/docker/dionaea/Dockerfile index 074a2008..e2c64d94 100644 --- a/docker/dionaea/Dockerfile +++ b/docker/dionaea/Dockerfile @@ -17,36 +17,36 @@ RUN ARCH=$(arch) && \ apt install ./libemu2_0.2.0+git20120122-1.2+b1_$ARCH.deb \ ./libemu-dev_0.2.0+git20120122-1.2+b1_$ARCH.deb -y && \ apt-get install -y --no-install-recommends \ - build-essential \ - ca-certificates \ - check \ - cmake \ - cython3 \ - git \ - libcap2-bin \ - libcurl4-openssl-dev \ - libev-dev \ - libglib2.0-dev \ - libloudmouth1-dev \ - libnetfilter-queue-dev \ - libnl-3-dev \ - libpcap-dev \ - libssl-dev \ - libtool \ - libudns-dev \ - procps \ - python3 \ - python3-dev \ - python3-boto3 \ - python3-bson \ - python3-yaml \ - fonts-liberation && \ + build-essential \ + ca-certificates \ + check \ + cmake \ + cython3 \ + git \ + libcap2-bin \ + libcurl4-openssl-dev \ + libev-dev \ + libglib2.0-dev \ + libloudmouth1-dev \ + libnetfilter-queue-dev \ + libnl-3-dev \ + libpcap-dev \ + libssl-dev \ + libtool \ + libudns-dev \ + procps \ + python3 \ + python3-dev \ + python3-boto3 \ + python3-bson \ + python3-yaml \ + fonts-liberation && \ # # Get and install dionaea - # Latest master is unstable, SIP causes crashing - git clone --depth=1 https://github.com/dinotools/dionaea -b 0.11.0 /root/dionaea/ && \ + # git clone --depth=1 https://github.com/dinotools/dionaea -b 0.11.0 /root/dionaea/ && \ + git clone --depth=1 https://github.com/dinotools/dionaea /root/dionaea/ && \ cd /root/dionaea && \ - #git checkout 1426750b9fd09c5bfeae74d506237333cd8505e2 && \ + git checkout 4e459f1b672a5b4c1e8335c0bff1b93738019215 && \ mkdir build && \ cd build && \ cmake -DCMAKE_INSTALL_PREFIX:PATH=/opt/dionaea .. && \ @@ -62,6 +62,7 @@ RUN ARCH=$(arch) && \ chown -R dionaea:dionaea /opt/dionaea/var && \ rm -rf /opt/dionaea/etc/dionaea/* && \ mv /root/dist/etc/* /opt/dionaea/etc/dionaea/ && \ + cp /root/dist/cpu_check.py / && \ # # Setup runtime and clean up apt-get purge -y \ @@ -88,12 +89,13 @@ RUN ARCH=$(arch) && \ python3-bson \ python3-yaml \ wget && \ - +# apt-get install -y \ ca-certificates \ python3 \ python3-boto3 \ python3-bson \ + python3-psutil \ python3-yaml \ libcurl4 \ libemu2 \ @@ -111,7 +113,8 @@ RUN ARCH=$(arch) && \ # # Start dionaea STOPSIGNAL SIGINT -# Dionaea sometimes hangs at 100% CPU usage, if detected process will be killed and container restarts per docker-compose settings -HEALTHCHECK CMD if [ $(ps -C mpv -p 1 -o %cpu | tail -n 1 | cut -f 1 -d ".") -gt 75 ]; then kill -2 1; else exit 0; fi +# +# Dionaea sometimes hangs at 100% CPU usage, if detected container will become unhealthy and restarted by tpotinit +HEALTHCHECK --interval=5m --timeout=30s --retries=3 CMD python3 /cpu_check.py $(pgrep -of dionaea) 99 USER dionaea:dionaea CMD ["/opt/dionaea/bin/dionaea", "-u", "dionaea", "-g", "dionaea", "-c", "/opt/dionaea/etc/dionaea/dionaea.cfg"] diff --git a/docker/dionaea/dist/cpu_check.py b/docker/dionaea/dist/cpu_check.py new file mode 100644 index 00000000..bc465108 --- /dev/null +++ b/docker/dionaea/dist/cpu_check.py @@ -0,0 +1,42 @@ +import psutil +import sys +import time + +if len(sys.argv) != 3: + print("Usage: cpu_check.py ") + sys.exit(1) + +try: + pid = int(sys.argv[1]) +except ValueError: + print("Please provide a valid integer value for the PID.") + sys.exit(1) + +try: + cpu_threshold = float(sys.argv[2]) +except ValueError: + print("Please provide a valid number for the CPU usage threshold.") + sys.exit(1) + +try: + target_process = psutil.Process(pid) +except psutil.NoSuchProcess: + print(f"No process with the PID {pid} was found.") + sys.exit(1) + +# Prepare to calculate the average CPU usage over 3 intervals of 1 second each +cpu_usages = [] +for _ in range(3): + cpu_usages.append(target_process.cpu_percent(interval=1)) + +# Calculate the average CPU usage +average_cpu_usage = sum(cpu_usages) / len(cpu_usages) +print(f"Average CPU Usage of PID {pid} over 3 seconds: {average_cpu_usage}%") + +# Check average CPU usage against the threshold +if average_cpu_usage >= cpu_threshold: + print(f"Average CPU usage of PID {pid} is above or equal to the threshold of {cpu_threshold}%.") + sys.exit(1) +else: + print(f"Average CPU usage of PID {pid} is below the threshold of {cpu_threshold}%. Exiting with code 0.") + sys.exit(0) diff --git a/docker/dionaea/docker-compose.yml b/docker/dionaea/docker-compose.yml index 96389316..3f56048a 100644 --- a/docker/dionaea/docker-compose.yml +++ b/docker/dionaea/docker-compose.yml @@ -33,15 +33,15 @@ services: # - "5060:5060/udp" # - "5061:5061" - "27017:27017" - image: "dtagdevsec/dionaea:2204" + image: "dtagdevsec/dionaea:24.04" read_only: true volumes: - - /data/dionaea/roots/ftp:/opt/dionaea/var/dionaea/roots/ftp - - /data/dionaea/roots/tftp:/opt/dionaea/var/dionaea/roots/tftp - - /data/dionaea/roots/www:/opt/dionaea/var/dionaea/roots/www - - /data/dionaea/roots/upnp:/opt/dionaea/var/dionaea/roots/upnp - - /data/dionaea:/opt/dionaea/var/dionaea - - /data/dionaea/binaries:/opt/dionaea/var/dionaea/binaries - - /data/dionaea/log:/opt/dionaea/var/log - - /data/dionaea/rtp:/opt/dionaea/var/dionaea/rtp + - $HOME/tpotce/data/dionaea/roots/ftp:/opt/dionaea/var/dionaea/roots/ftp + - $HOME/tpotce/data/dionaea/roots/tftp:/opt/dionaea/var/dionaea/roots/tftp + - $HOME/tpotce/data/dionaea/roots/www:/opt/dionaea/var/dionaea/roots/www + - $HOME/tpotce/data/dionaea/roots/upnp:/opt/dionaea/var/dionaea/roots/upnp + - $HOME/tpotce/data/dionaea:/opt/dionaea/var/dionaea + - $HOME/tpotce/data/dionaea/binaries:/opt/dionaea/var/dionaea/binaries + - $HOME/tpotce/data/dionaea/log:/opt/dionaea/var/log + - $HOME/tpotce/data/dionaea/rtp:/opt/dionaea/var/dionaea/rtp diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 48612492..772343ed 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -10,128 +10,133 @@ services: # Adbhoney service adbhoney: build: adbhoney/. - image: "dtagdevsec/adbhoney:2204" + image: "dtagdevsec/adbhoney:24.04" # Ciscoasa service ciscoasa: build: ciscoasa/. - image: "dtagdevsec/ciscoasa:2204" + image: "dtagdevsec/ciscoasa:24.04" # CitrixHoneypot service citrixhoneypot: build: citrixhoneypot/. - image: "dtagdevsec/citrixhoneypot:2204" + image: "dtagdevsec/citrixhoneypot:24.04" # Conpot IEC104 service conpot_IEC104: build: conpot/. - image: "dtagdevsec/conpot:2204" + image: "dtagdevsec/conpot:24.04" # Cowrie service cowrie: build: cowrie/. - image: "dtagdevsec/cowrie:2204" + image: "dtagdevsec/cowrie:24.04" # Ddospot service ddospot: build: ddospot/. - image: "dtagdevsec/ddospot:2204" + image: "dtagdevsec/ddospot:24.04" # Dicompot service dicompot: build: dicompot/. - image: "dtagdevsec/dicompot:2204" + image: "dtagdevsec/dicompot:24.04" # Dionaea service dionaea: build: dionaea/. - image: "dtagdevsec/dionaea:2204" + image: "dtagdevsec/dionaea:24.04" # ElasticPot service elasticpot: build: elasticpot/. - image: "dtagdevsec/elasticpot:2204" + image: "dtagdevsec/elasticpot:24.04" # Endlessh service endlessh: build: endlessh/. - image: "dtagdevsec/endlessh:2204" + image: "dtagdevsec/endlessh:24.04" # Glutton service glutton: build: glutton/. - image: "dtagdevsec/glutton:2204" + image: "dtagdevsec/glutton:24.04" # Hellpot service hellpot: build: hellpot/. - image: "dtagdevsec/hellpot:2204" + image: "dtagdevsec/hellpot:24.04" # Heralding service heralding: build: heralding/. - image: "dtagdevsec/heralding:2204" + image: "dtagdevsec/heralding:24.04" # Honeypots service honeypots: build: honeypots/. - image: "dtagdevsec/honeypots:2204" + image: "dtagdevsec/honeypots:24.04" # Honeytrap service honeytrap: build: honeytrap/. - image: "dtagdevsec/honeytrap:2204" + image: "dtagdevsec/honeytrap:24.04" # IPPHoney service ipphoney: build: ipphoney/. - image: "dtagdevsec/ipphoney:2204" + image: "dtagdevsec/ipphoney:24.04" # Log4Pot service log4pot: build: log4pot/. - image: "dtagdevsec/log4pot:2204" + image: "dtagdevsec/log4pot:24.04" # Mailoney service mailoney: build: mailoney/. - image: "dtagdevsec/mailoney:2204" + image: "dtagdevsec/mailoney:24.04" # Medpot service medpot: build: medpot/. - image: "dtagdevsec/medpot:2204" + image: "dtagdevsec/medpot:24.04" # Redishoneypot service redishoneypot: build: redishoneypot/. - image: "dtagdevsec/redishoneypot:2204" + image: "dtagdevsec/redishoneypot:24.04" # Sentrypeer service sentrypeer: build: sentrypeer/. - image: "dtagdevsec/sentrypeer:2204" + image: "dtagdevsec/sentrypeer:24.04" #### Snare / Tanner ## Tanner Redis Service tanner_redis: build: tanner/redis/. - image: "dtagdevsec/redis:2204" + image: "dtagdevsec/redis:24.04" ## PHP Sandbox service tanner_phpox: build: tanner/phpox/. - image: "dtagdevsec/phpox:2204" + image: "dtagdevsec/phpox:24.04" ## Tanner API Service tanner_api: build: tanner/tanner/. - image: "dtagdevsec/tanner:2204" + image: "dtagdevsec/tanner:24.04" ## Snare Service snare: build: tanner/snare/. - image: "dtagdevsec/snare:2204" + image: "dtagdevsec/snare:24.04" + +## Wordpot Service + wordpot: + build: wordpot/. + image: "dtagdevsec/wordpot:24.04" ################## @@ -141,17 +146,17 @@ services: # Fatt service fatt: build: fatt/. - image: "dtagdevsec/fatt:2204" + image: "dtagdevsec/fatt:24.04" # P0f service p0f: build: p0f/. - image: "dtagdevsec/p0f:2204" + image: "dtagdevsec/p0f:24.04" # Suricata service suricata: build: suricata/. - image: "dtagdevsec/suricata:2204" + image: "dtagdevsec/suricata:24.04" ################## @@ -162,34 +167,34 @@ services: ## Elasticsearch service elasticsearch: build: elk/elasticsearch/. - image: "dtagdevsec/elasticsearch:2204" + image: "dtagdevsec/elasticsearch:24.04" ## Kibana service kibana: build: elk/kibana/. - image: "dtagdevsec/kibana:2204" + image: "dtagdevsec/kibana:24.04" ## Logstash service logstash: build: elk/logstash/. - image: "dtagdevsec/logstash:2204" + image: "dtagdevsec/logstash:24.04" # Ewsposter service ewsposter: build: ewsposter/. - image: "dtagdevsec/ewsposter:2204" + image: "dtagdevsec/ewsposter:24.04" # Nginx service nginx: build: nginx/. - image: "dtagdevsec/nginx:2204" + image: "dtagdevsec/nginx:24.04" # Spiderfoot service spiderfoot: build: spiderfoot/. - image: "dtagdevsec/spiderfoot:2204" + image: "dtagdevsec/spiderfoot:24.04" # Map Web Service map_web: build: elk/map/. - image: "dtagdevsec/map:2204" + image: "dtagdevsec/map:24.04" diff --git a/docker/elasticpot/Dockerfile b/docker/elasticpot/Dockerfile index 1e1284e8..597b0a95 100644 --- a/docker/elasticpot/Dockerfile +++ b/docker/elasticpot/Dockerfile @@ -1,40 +1,40 @@ -FROM alpine:3.17 +FROM alpine:3.19 # # Include dist COPY dist/ /root/dist/ # # Install packages RUN apk -U --no-cache add \ - build-base \ - ca-certificates \ - git \ - libffi-dev \ - openssl \ - openssl-dev \ - postgresql-dev \ - py3-cryptography \ - py3-elasticsearch \ - py3-geoip2 \ - py3-maxminddb \ - py3-mysqlclient \ - py3-packaging \ - py3-psycopg2 \ - py3-redis \ - py3-requests \ - py3-service_identity \ - py3-setuptools \ - py3-pip \ - py3-twisted \ - py3-wheel \ - python3 \ - python3-dev && \ + build-base \ + ca-certificates \ + git \ + libffi-dev \ + openssl \ + openssl-dev \ + postgresql-dev \ + py3-cryptography \ + py3-elasticsearch \ + py3-geoip2 \ + py3-maxminddb \ + py3-mysqlclient \ + py3-packaging \ + py3-psycopg2 \ + py3-redis \ + py3-requests \ + py3-service_identity \ + py3-setuptools \ + py3-pip \ + py3-twisted \ + py3-wheel \ + python3 \ + python3-dev && \ mkdir -p /opt && \ cd /opt/ && \ git clone https://gitlab.com/bontchev/elasticpot.git/ && \ cd elasticpot && \ git checkout d12649730d819bd78ea622361b6c65120173ad45 && \ cp /root/dist/requirements.txt . && \ - pip3 install -r requirements.txt && \ + pip3 install --break-system-packages -r requirements.txt && \ # # Setup user, groups and configs addgroup -g 2000 elasticpot && \ @@ -43,11 +43,11 @@ RUN apk -U --no-cache add \ # # Clean up apk del --purge build-base \ - git \ - libffi-dev \ - openssl-dev \ - postgresql-dev \ - python3-dev && \ + git \ + libffi-dev \ + openssl-dev \ + postgresql-dev \ + python3-dev && \ rm -rf /root/* && \ rm -rf /var/cache/apk/* /opt/elasticpot/.git # diff --git a/docker/elasticpot/docker-compose.yml b/docker/elasticpot/docker-compose.yml index 66e968ea..9291c15b 100644 --- a/docker/elasticpot/docker-compose.yml +++ b/docker/elasticpot/docker-compose.yml @@ -16,7 +16,7 @@ services: - elasticpot_local ports: - "9200:9200" - image: "dtagdevsec/elasticpot:2204" + image: "dtagdevsec/elasticpot:24.04" read_only: true volumes: - - /data/elasticpot/log:/opt/elasticpot/log + - $HOME/tpotce/data/elasticpot/log:/opt/elasticpot/log diff --git a/docker/elk/docker-compose.yml b/docker/elk/docker-compose.yml index fb761fe6..bf5fba1d 100644 --- a/docker/elk/docker-compose.yml +++ b/docker/elk/docker-compose.yml @@ -24,9 +24,9 @@ services: mem_limit: 4g ports: - "127.0.0.1:64298:9200" - image: "dtagdevsec/elasticsearch:2204" + image: "dtagdevsec/elasticsearch:24.04" volumes: - - /data:/data + - $HOME/tpotce/data:/data ## Kibana service kibana: @@ -37,9 +37,10 @@ services: depends_on: elasticsearch: condition: service_healthy + mem_limit: 1g ports: - "127.0.0.1:64296:5601" - image: "dtagdevsec/kibana:2204" + image: "dtagdevsec/kibana:24.04" ## Logstash service logstash: @@ -51,11 +52,9 @@ services: depends_on: elasticsearch: condition: service_healthy - env_file: - - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/logstash:2204" + image: "dtagdevsec/logstash:24.04" volumes: - - /data:/data + - $HOME/tpotce/data:/data # - /root/tpotce/docker/elk/logstash/dist/logstash.conf:/etc/logstash/conf.d/logstash.conf # Map Redis Service @@ -66,7 +65,7 @@ services: tty: true ports: - "127.0.0.1:6379:6379" - image: "dtagdevsec/redis:2204" + image: "dtagdevsec/redis:24.04" read_only: true # Map Web Service @@ -76,13 +75,11 @@ services: restart: always environment: - MAP_COMMAND=AttackMapServer.py - env_file: - - /opt/tpot/etc/compose/elk_environment stop_signal: SIGKILL tty: true ports: - "127.0.0.1:64299:64299" - image: "dtagdevsec/map:2204" + image: "dtagdevsec/map:24.04" depends_on: - map_redis @@ -92,10 +89,8 @@ services: restart: always environment: - MAP_COMMAND=DataServer_v2.py - env_file: - - /opt/tpot/etc/compose/elk_environment stop_signal: SIGKILL tty: true - image: "dtagdevsec/map:2204" + image: "dtagdevsec/map:24.04" depends_on: - map_redis diff --git a/docker/elk/elasticsearch/Dockerfile b/docker/elk/elasticsearch/Dockerfile index 26a994b6..942d20b1 100644 --- a/docker/elk/elasticsearch/Dockerfile +++ b/docker/elk/elasticsearch/Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu:22.04 # # VARS -ENV ES_VER=8.6.2 +ENV ES_VER=8.12.2 # # Include dist COPY dist/ /root/dist/ diff --git a/docker/elk/elasticsearch/docker-compose.yml b/docker/elk/elasticsearch/docker-compose.yml index a4081e12..64916ca7 100644 --- a/docker/elk/elasticsearch/docker-compose.yml +++ b/docker/elk/elasticsearch/docker-compose.yml @@ -24,6 +24,6 @@ services: mem_limit: 2g ports: - "127.0.0.1:64298:9200" - image: "dtagdevsec/elasticsearch:2204" + image: "dtagdevsec/elasticsearch:24.04" volumes: - - /data:/data + - $HOME/tpotce/data:/data diff --git a/docker/elk/kibana/Dockerfile b/docker/elk/kibana/Dockerfile index f4fc7368..1617761d 100644 --- a/docker/elk/kibana/Dockerfile +++ b/docker/elk/kibana/Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu:22.04 # # VARS -ENV KB_VER=8.6.2 +ENV KB_VER=8.12.2 # Include dist COPY dist/ /root/dist/ # diff --git a/docker/elk/kibana/docker-compose.yml b/docker/elk/kibana/docker-compose.yml index cad163be..7751d99a 100644 --- a/docker/elk/kibana/docker-compose.yml +++ b/docker/elk/kibana/docker-compose.yml @@ -12,4 +12,4 @@ services: # condition: service_healthy ports: - "127.0.0.1:64296:5601" - image: "dtagdevsec/kibana:2204" + image: "dtagdevsec/kibana:24.04" diff --git a/docker/elk/logstash/Dockerfile b/docker/elk/logstash/Dockerfile index 286b1c3c..55d17f1f 100644 --- a/docker/elk/logstash/Dockerfile +++ b/docker/elk/logstash/Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu:22.04 # # VARS -ENV LS_VER=8.6.2 +ENV LS_VER=8.12.2 # Include dist COPY dist/ /root/dist/ # @@ -9,12 +9,9 @@ COPY dist/ /root/dist/ RUN apt-get update -y && \ apt-get install -y \ aria2 \ - autossh \ bash \ bzip2 \ - curl \ -# openjdk-11-jre \ - openssh-client && \ + curl && \ # # Determine arch, get and install packages ARCH=$(arch) && \ diff --git a/docker/elk/logstash/dist/entrypoint.sh b/docker/elk/logstash/dist/entrypoint.sh index 24736cbd..059dadf3 100644 --- a/docker/elk/logstash/dist/entrypoint.sh +++ b/docker/elk/logstash/dist/entrypoint.sh @@ -42,25 +42,27 @@ if [ "$myCHECK" == "0" ]; echo "Cannot reach Listbot, starting Logstash without latest translation maps." fi -# Distributed T-Pot installation needs a different pipeline config and autossh tunnel. -if [ "$MY_TPOT_TYPE" == "SENSOR" ]; +# Distributed T-Pot installation needs a different pipeline config +if [ "$TPOT_TYPE" == "SENSOR" ]; then echo - echo "Distributed T-Pot setup, sending T-Pot logs to $MY_HIVE_IP." + echo "Distributed T-Pot setup, sending T-Pot logs to $TPOT_HIVE_IP." echo - echo "T-Pot type: $MY_TPOT_TYPE" - echo "Keyfile used: $MY_SENSOR_PRIVATEKEYFILE" - echo "Hive username: $MY_HIVE_USERNAME" - echo "Hive IP: $MY_HIVE_IP" + echo "T-Pot type: $TPOT_TYPE" + echo "Hive IP: $TPOT_HIVE_IP" echo - # Ensure correct file permissions for private keyfile or SSH will ask for password - chmod 600 $MY_SENSOR_PRIVATEKEYFILE + # Ensure correct file permissions for private keyfile or SSH will ask for password cp /usr/share/logstash/config/pipelines_sensor.yml /usr/share/logstash/config/pipelines.yml - autossh -f -M 0 -4 -l $MY_HIVE_USERNAME -i $MY_SENSOR_PRIVATEKEYFILE -p 64295 -N -L64305:127.0.0.1:64305 $MY_HIVE_IP -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" fi -if [ "$MY_TPOT_TYPE" != "SENSOR" ]; +if [ "$TPOT_TYPE" != "SENSOR" ]; then + echo + echo "This is a T-Pot STANDARD / HIVE installation." + echo + echo "T-Pot type: $TPOT_TYPE" + echo + # Index Management is happening through ILM, but we need to put T-Pot ILM setting on ES. myTPOTILM=$(curl -s -XGET "http://elasticsearch:9200/_ilm/policy/tpot" | grep "Lifecycle policy not found: tpot" -c) if [ "$myTPOTILM" == "1" ]; diff --git a/docker/elk/logstash/dist/http_output.conf b/docker/elk/logstash/dist/http_output.conf index 70309fe2..533f20e6 100644 --- a/docker/elk/logstash/dist/http_output.conf +++ b/docker/elk/logstash/dist/http_output.conf @@ -38,7 +38,7 @@ input { # CitrixHoneypot file { - path => ["/data/citrixhoneypot/logs/server.log"] + path => ["/data/citrixhoneypot/log/server.log"] codec => json type => "CitrixHoneypot" } @@ -182,6 +182,13 @@ input { type => "Tanner" } +# Wordpot + file { + path => ["/data/wordpot/log/wordpot.log"] + codec => json + type => "Wordpot" + } + } # Filter Section @@ -620,6 +627,13 @@ filter { } } +# Wordpot + if [type] == "Wordpot" { + date { + match => [ "timestamp", "ISO8601" ] + } + } + # Drop if parse fails if "_grokparsefailure" in [tags] { drop {} } if "_jsonparsefailure" in [tags] { drop {} } @@ -639,13 +653,13 @@ if "_jsonparsefailure" in [tags] { drop {} } cache_size => 10000 source => "src_ip" default_database_type => "City" -# database => "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-filter-geoip-7.2.12-java/vendor/GeoLite2-City.mmdb" +# database => "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-filter-geoip-7.2.13-java/vendor/GeoLite2-City.mmdb" } geoip { cache_size => 10000 source => "src_ip" default_database_type => "ASN" -# database => "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-filter-geoip-7.2.12-java/vendor/GeoLite2-ASN.mmdb" +# database => "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-filter-geoip-7.2.13-java/vendor/GeoLite2-ASN.mmdb" } translate { refresh_interval => 86400 @@ -660,14 +674,14 @@ if "_jsonparsefailure" in [tags] { drop {} } source => "t-pot_ip_ext" target => "geoip_ext" default_database_type => "City" -# database => "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-filter-geoip-7.2.12-java/vendor/GeoLite2-City.mmdb" +# database => "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-filter-geoip-7.2.13-java/vendor/GeoLite2-City.mmdb" } geoip { cache_size => 10000 source => "t-pot_ip_ext" target => "geoip_ext" default_database_type => "ASN" -# database => "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-filter-geoip-7.2.12-java/vendor/GeoLite2-ASN.mmdb" +# database => "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-filter-geoip-7.2.13-java/vendor/GeoLite2-ASN.mmdb" } } @@ -708,7 +722,10 @@ output { id => "${MY_HOSTNAME}" codec => "json" format => "json_batch" - url => "http://127.0.0.1:64305" + url => "https://${TPOT_HIVE_IP}:64294" + cacert => "/data/hive.crt" + headers => { + "Authorization" => "Basic ${TPOT_HIVE_USER}" + } } - } diff --git a/docker/elk/logstash/dist/logstash.conf b/docker/elk/logstash/dist/logstash.conf index 1fda80a0..68a2b1d5 100644 --- a/docker/elk/logstash/dist/logstash.conf +++ b/docker/elk/logstash/dist/logstash.conf @@ -38,7 +38,7 @@ input { # CitrixHoneypot file { - path => ["/data/citrixhoneypot/logs/server.log"] + path => ["/data/citrixhoneypot/log/server.log"] codec => json type => "CitrixHoneypot" } @@ -182,6 +182,13 @@ input { type => "Tanner" } +# Wordpot + file { + path => ["/data/wordpot/log/wordpot.log"] + codec => json + type => "Wordpot" + } + } # Filter Section @@ -620,6 +627,13 @@ filter { } } +# Wordpot + if [type] == "Wordpot" { + date { + match => [ "timestamp", "ISO8601" ] + } + } + # Drop if parse fails if "_grokparsefailure" in [tags] { drop {} } if "_jsonparsefailure" in [tags] { drop {} } @@ -639,13 +653,13 @@ if "_jsonparsefailure" in [tags] { drop {} } cache_size => 10000 source => "src_ip" default_database_type => "City" -# database => "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-filter-geoip-7.2.12-java/vendor/GeoLite2-City.mmdb" +# database => "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-filter-geoip-7.2.13-java/vendor/GeoLite2-City.mmdb" } geoip { cache_size => 10000 source => "src_ip" default_database_type => "ASN" -# database => "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-filter-geoip-7.2.12-java/vendor/GeoLite2-ASN.mmdb" +# database => "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-filter-geoip-7.2.13-java/vendor/GeoLite2-ASN.mmdb" } translate { refresh_interval => 86400 @@ -660,14 +674,14 @@ if "_jsonparsefailure" in [tags] { drop {} } source => "t-pot_ip_ext" target => "geoip_ext" default_database_type => "City" -# database => "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-filter-geoip-7.2.12-java/vendor/GeoLite2-City.mmdb" +# database => "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-filter-geoip-7.2.13-java/vendor/GeoLite2-City.mmdb" } geoip { cache_size => 10000 source => "t-pot_ip_ext" target => "geoip_ext" default_database_type => "ASN" -# database => "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-filter-geoip-7.2.12-java/vendor/GeoLite2-ASN.mmdb" +# database => "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-filter-geoip-7.2.13-java/vendor/GeoLite2-ASN.mmdb" } } diff --git a/docker/elk/logstash/docker-compose.yml b/docker/elk/logstash/docker-compose.yml index 1b641069..d73bb3fa 100644 --- a/docker/elk/logstash/docker-compose.yml +++ b/docker/elk/logstash/docker-compose.yml @@ -12,13 +12,11 @@ services: # depends_on: # elasticsearch: # condition: service_healthy - env_file: - - /opt/tpot/etc/compose/elk_environment ports: - "127.0.0.1:64305:64305" - image: "dtagdevsec/logstash:2204" + image: "dtagdevsec/logstash:24.04" volumes: - - /data:/data -# - /root/tpotce/docker/elk/logstash/dist/logstash.conf:/etc/logstash/conf.d/logstash.conf -# - /root/tpotce/docker/elk/logstash/dist/http.conf:/etc/logstash/conf.d/http.conf -# - /root/tpotce/docker/elk/logstash/dist/logstash.yml:/etc/logstash/conf.d/logstash.yml + - $HOME/tpotce/data:/data +# - /$HOME/tpotce/docker/elk/logstash/dist/logstash.conf:/etc/logstash/conf.d/logstash.conf +# - /$HOME/tpotce/docker/elk/logstash/dist/http.conf:/etc/logstash/conf.d/http.conf +# - /$HOME/tpotce/docker/elk/logstash/dist/logstash.yml:/etc/logstash/conf.d/logstash.yml diff --git a/docker/elk/map/Dockerfile b/docker/elk/map/Dockerfile index 8d9510b8..9d7165f8 100644 --- a/docker/elk/map/Dockerfile +++ b/docker/elk/map/Dockerfile @@ -1,28 +1,23 @@ -FROM alpine:3.17 -# -# Include dist -#COPY dist/ /root/dist/ +FROM alpine:3.19 # # Install packages RUN apk -U --no-cache add \ - build-base \ - git \ - libcap \ - py3-pip \ - python3 \ - python3-dev && \ + build-base \ + git \ + libcap \ + py3-pip \ + python3 \ + python3-dev \ + tzdata && \ # # Install from GitHub and setup mkdir -p /opt && \ cd /opt/ && \ - git clone https://github.com/t3chn0m4g3/t-pot-attack-map -b 2.0.1 && \ + git clone https://github.com/t3chn0m4g3/t-pot-attack-map -b 2.2.0 && \ cd t-pot-attack-map && \ -# git checkout eaf8d123d72a62e4c12093e4e8487e10e6ef60f3 && \ -# git branch -a && \ -# git checkout multi && \ - pip3 install --upgrade pip && \ - pip3 install -r requirements.txt && \ - setcap cap_net_bind_service=+ep /usr/bin/python3.10 && \ + pip3 install --break-system-packages --upgrade pip && \ + pip3 install --break-system-packages -r requirements.txt && \ + setcap cap_net_bind_service=+ep $(readlink -f $(type -P python3)) && \ # # Setup user, groups and configs addgroup -g 2000 map && \ @@ -31,11 +26,12 @@ RUN apk -U --no-cache add \ # # Clean up apk del --purge build-base \ - git \ - python3-dev && \ + git \ + python3-dev && \ rm -rf /root/* /var/cache/apk/* /opt/t-pot-attack-map/.git # # Start T-Pot-Attack-Map +ENV TZ=UTC STOPSIGNAL SIGINT USER map:map WORKDIR /opt/t-pot-attack-map diff --git a/docker/elk/map/dist/entrypoint.sh b/docker/elk/map/dist/entrypoint.sh deleted file mode 100755 index a63bb29e..00000000 --- a/docker/elk/map/dist/entrypoint.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/ash -sed -i "s/var hqLatLng = new L.LatLng(52.3058, 4.932);/var hqLatLng = new L.LatLng($MY_EXTIP_LAT, $MY_EXTIP_LONG);/g" /opt/geoip-attack-map/static/map.js diff --git a/docker/elk/map/docker-compose.yml b/docker/elk/map/docker-compose.yml index 247ff7a3..475af039 100644 --- a/docker/elk/map/docker-compose.yml +++ b/docker/elk/map/docker-compose.yml @@ -11,7 +11,7 @@ services: restart: always stop_signal: SIGKILL tty: true - image: "dtagdevsec/redis:2204" + image: "dtagdevsec/redis:24.04" read_only: true # Map Web Service @@ -21,13 +21,11 @@ services: restart: always environment: - MAP_COMMAND=AttackMapServer.py - env_file: - - /opt/tpot/etc/compose/elk_environment stop_signal: SIGKILL tty: true ports: - "127.0.0.1:64299:64299" - image: "dtagdevsec/map:2204" + image: "dtagdevsec/map:24.04" depends_on: - map_redis @@ -37,10 +35,10 @@ services: restart: always environment: - MAP_COMMAND=DataServer_v2.py - env_file: - - /opt/tpot/etc/compose/elk_environment +# - TPOT_ATTACKMAP_TEXT=${TPOT_ATTACKMAP_TEXT} +# - TZ=${TPOT_ATTACKMAP_TEXT_TIMEZONE} stop_signal: SIGKILL tty: true - image: "dtagdevsec/map:2204" + image: "dtagdevsec/map:24.04" depends_on: - map_redis diff --git a/docker/endlessh/Dockerfile b/docker/endlessh/Dockerfile index b45d5067..3a576074 100644 --- a/docker/endlessh/Dockerfile +++ b/docker/endlessh/Dockerfile @@ -1,13 +1,13 @@ -FROM alpine:3.13 as builder +FROM alpine:3.16 as builder # # Include dist ADD dist/ /root/dist/ # # Install packages RUN apk -U add --no-cache \ - build-base \ - git \ - libcap && \ + build-base \ + git \ + libcap && \ # # Install endlessh from git git clone https://github.com/skeeto/endlessh /opt/endlessh && \ @@ -16,13 +16,13 @@ RUN apk -U add --no-cache \ make && \ mv /opt/endlessh/endlessh /root/dist # -FROM alpine:3.17 +FROM alpine:3.19 # COPY --from=builder /root/dist/* /opt/endlessh/ # # Install packages RUN apk -U add --no-cache \ - libcap && \ + libcap && \ # # Setup user, groups and configs mkdir -p /var/log/endlessh && \ diff --git a/docker/endlessh/docker-compose.yml b/docker/endlessh/docker-compose.yml index d0bef565..cbe01199 100644 --- a/docker/endlessh/docker-compose.yml +++ b/docker/endlessh/docker-compose.yml @@ -16,7 +16,7 @@ services: - endlessh_local ports: - "22:2222" - image: "dtagdevsec/endlessh:2204" + image: "dtagdevsec/endlessh:24.04" read_only: true volumes: - - /data/endlessh/log:/var/log/endlessh + - $HOME/tpotce/data/endlessh/log:/var/log/endlessh diff --git a/docker/ewsposter/Dockerfile b/docker/ewsposter/Dockerfile index f3b0ccfe..d35d919b 100644 --- a/docker/ewsposter/Dockerfile +++ b/docker/ewsposter/Dockerfile @@ -1,29 +1,30 @@ -FROM alpine:3.17 +FROM alpine:3.19 # # Include dist COPY dist/ /root/dist/ # # Install packages RUN apk -U --no-cache add \ - build-base \ - git \ - libffi-dev \ - libssl1.1 \ - openssl-dev \ - python3 \ - python3-dev \ - py3-cffi \ - py3-cryptography \ - py3-ipaddress \ - py3-lxml \ - py3-mysqlclient \ - py3-openssl \ - py3-requests \ - py3-pip \ - py3-setuptools \ - py3-wheel && \ - pip3 install --upgrade pip && \ - pip3 install --no-cache-dir configparser hpfeeds3 influxdb influxdb-client xmljson && \ + build-base \ + git \ + libffi-dev \ + libssl3 \ + openssl-dev \ + python3 \ + python3-dev \ + py3-cffi \ + py3-cryptography \ + py3-ipaddress \ + py3-lxml \ + py3-mysqlclient \ + py3-openssl \ + py3-requests \ + py3-pip \ + py3-setuptools \ + py3-wheel && \ + pip3 install --break-system-packages --upgrade pip && \ + pip3 install --break-system-packages --no-cache-dir configparser hpfeeds3 influxdb influxdb-client xmljson && \ + # # Setup ewsposter git clone https://github.com/telekom-security/ewsposter -b v1.25.0 /opt/ewsposter && \ @@ -41,10 +42,10 @@ RUN apk -U --no-cache add \ # # Clean up apk del build-base \ - git \ - openssl-dev \ - python3-dev \ - py-setuptools && \ + git \ + openssl-dev \ + python3-dev \ + py-setuptools && \ rm -rf /root/* /var/cache/apk/* /opt/ewsposter/.git # # Run ewsposter diff --git a/docker/ewsposter/docker-compose.yml b/docker/ewsposter/docker-compose.yml index 003597e6..34bc9517 100644 --- a/docker/ewsposter/docker-compose.yml +++ b/docker/ewsposter/docker-compose.yml @@ -21,11 +21,9 @@ services: - EWS_HPFEEDS_CHANNELS=channels - EWS_HPFEEDS_IDENT=user - EWS_HPFEEDS_SECRET=secret - - EWS_HPFEEDS_TLSCERT=/opt/ewsposter/ca.pem + - EWS_HPFEEDS_TLSCERT=false - EWS_HPFEEDS_FORMAT=json - env_file: - - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/ewsposter:2204" + image: "dtagdevsec/ewsposter:24.04" volumes: - - /data:/data -# - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip + - $HOME/tpotce/data:/data + - $HOME/tpotce/data/ews/conf/ews.ip:/opt/ewsposter/ews.ip diff --git a/docker/fatt/Dockerfile b/docker/fatt/Dockerfile index bf257481..1c3baa4e 100644 --- a/docker/fatt/Dockerfile +++ b/docker/fatt/Dockerfile @@ -1,15 +1,15 @@ -FROM alpine:3.17 +FROM alpine:3.19 # # Get and install dependencies & packages RUN apk -U --no-cache add \ - git \ - libcap \ - py3-libxml2 \ - py3-lxml \ - py3-pip \ - python3 \ - python3-dev \ - tshark && \ + git \ + libcap \ + py3-libxml2 \ + py3-lxml \ + py3-pip \ + python3 \ + python3-dev \ + tshark && \ # # Setup user addgroup -g 2000 fatt && \ @@ -25,7 +25,7 @@ RUN apk -U --no-cache add \ #git checkout 314cd1ff7873b5a145a51ec4e85f6107828a2c79 && \ mkdir -p log && \ # pyshark >= 0.4.3 breaks fatt - pip3 install pyshark==0.4.2.11 && \ + pip3 install --break-system-packages pyshark==0.4.2.11 && \ # # Setup configs chgrp fatt /usr/bin/dumpcap && \ diff --git a/docker/fatt/docker-compose.yml b/docker/fatt/docker-compose.yml index 01a1f67b..29860f3f 100644 --- a/docker/fatt/docker-compose.yml +++ b/docker/fatt/docker-compose.yml @@ -14,6 +14,6 @@ services: - NET_ADMIN - SYS_NICE - NET_RAW - image: "dtagdevsec/fatt:2204" + image: "dtagdevsec/fatt:24.04" volumes: - - /data/fatt/log:/opt/fatt/log + - $HOME/tpotce/data/fatt/log:/opt/fatt/log diff --git a/docker/glutton/Dockerfile b/docker/glutton/Dockerfile index 49b92131..c16ff0d6 100644 --- a/docker/glutton/Dockerfile +++ b/docker/glutton/Dockerfile @@ -1,50 +1,48 @@ -FROM alpine:3.15 as builder +FROM golang:1.21-alpine as builder # # Include dist COPY dist/ /root/dist/ # # Setup apk RUN apk -U --no-cache add \ - build-base \ - git \ - go \ - g++ \ - iptables-dev \ - libnetfilter_queue-dev \ - libpcap-dev && \ + build-base \ + git \ + g++ \ + iptables-dev \ + libpcap-dev && \ # # Setup go, glutton - export GOPATH=/opt/go/ && \ export GO111MODULE=on && \ - mkdir -p /opt/go && \ - cd /opt/go/ && \ + mkdir -p /opt/ && \ + cd /opt/ && \ git clone https://github.com/mushorg/glutton && \ - cd /opt/go/glutton/ && \ - git checkout c25045b95b43ed9bfee89b2d14a50f5794a9cf2b && \ - mv /root/dist/system.go /opt/go/glutton/ && \ + cd /opt/glutton/ && \ + git checkout c1204c65ce32bfdc0e08fb2a9abe89b3b8eeed62 && \ + cp /root/dist/system.go . && \ go mod download && \ make build && \ - mv /root/dist/rules.yaml /opt/go/glutton/rules/ + mv /root/dist/config.yaml /opt/glutton/config/ # -FROM alpine:3.17 +FROM alpine:3.19 # -COPY --from=builder /opt/go/glutton/bin /opt/glutton/bin -COPY --from=builder /opt/go/glutton/config /opt/glutton/config -COPY --from=builder /opt/go/glutton/rules /opt/glutton/rules +COPY --from=builder /opt/glutton/bin /opt/glutton/bin +COPY --from=builder /opt/glutton/config /opt/glutton/config +COPY --from=builder /opt/glutton/rules /opt/glutton/rules # RUN apk -U --no-cache add \ - iptables-dev \ - libnetfilter_queue-dev \ - libcap \ - libpcap-dev && \ - ln -s /sbin/xtables-legacy-multi /sbin/xtables-multi && \ - setcap cap_net_admin,cap_net_raw=+ep /opt/glutton/bin/server && \ - setcap cap_net_admin,cap_net_raw=+ep /sbin/xtables-legacy-multi && \ + iptables \ + iptables-dev \ + libnetfilter_queue-dev \ + libcap \ + libpcap-dev && \ + setcap cap_net_admin,cap_net_raw=+ep /opt/glutton/bin/server && \ + setcap cap_net_admin,cap_net_raw=+ep /sbin/xtables-nft-multi && \ + mkdir -p /var/log/glutton \ + /opt/glutton/payloads && \ # # Setup user, groups and configs addgroup -g 2000 glutton && \ adduser -S -s /bin/ash -u 2000 -D -g 2000 glutton && \ - mkdir -p /var/log/glutton && \ # # Clean up rm -rf /var/cache/apk/* \ @@ -53,4 +51,4 @@ RUN apk -U --no-cache add \ # Start glutton WORKDIR /opt/glutton USER glutton:glutton -CMD exec bin/server -i $(/sbin/ip address show | /usr/bin/awk '/inet.*brd/{ print $NF; exit }') -l /var/log/glutton/glutton.log > /dev/null 2>&1 +CMD exec bin/server -d true -i $(/sbin/ip address show | /usr/bin/awk '/inet.*brd/{ print $NF; exit }') -l /var/log/glutton/glutton.log > /dev/null 2>&1 diff --git a/docker/glutton/dist/config.yaml b/docker/glutton/dist/config.yaml new file mode 100644 index 00000000..a3689164 --- /dev/null +++ b/docker/glutton/dist/config.yaml @@ -0,0 +1,23 @@ +ports: + tcp: 5000 +# udp: 5001 + +rules_path: config/rules.yaml + +addresses: ["1.2.3.4", "5.4.3.2"] + +producers: + enabled: false + http: + enabled: false + remote: https://localhost:9000 + hpfeeds: + enabled: false + host: 172.26.0.2 + port: 20000 + ident: ident + auth: auth + channel: test + +conn_timeout: 45 +max_tcp_payload: 4096 diff --git a/docker/glutton/dist/rules.yaml b/docker/glutton/dist/rules.yaml deleted file mode 100644 index be5e21c2..00000000 --- a/docker/glutton/dist/rules.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Put passthrough rules on top, drop rules on bottom, rules are applied in order (top down) -rules: - - match: udp dst port 53 - type: passthrough - - match: tcp dst port 21 - type: conn_handler - target: ftp - - match: tcp dst port 23 or port 2323 or port 23231 - type: conn_handler - target: telnet - - match: tcp dst port 25 - type: conn_handler - target: smtp - - match: tcp dst port 445 - type: conn_handler - target: smb - - match: tcp dst port 1883 - type: conn_handler - target: mqtt - - match: tcp dst port 3389 - type: conn_handler - target: rdp - - match: tcp dst port 5060 - type: conn_handler - target: sip - - match: tcp dst port 5222 or port 5223 - type: conn_handler - target: jabber - - match: tcp - type: conn_handler - target: default - - match: - type: drop diff --git a/docker/glutton/dist/system.go b/docker/glutton/dist/system.go index b775d175..1ff7eeed 100644 --- a/docker/glutton/dist/system.go +++ b/docker/glutton/dist/system.go @@ -3,31 +3,22 @@ package glutton import ( "errors" "fmt" - "log" + "net" "os" - "os/exec" "runtime" "strings" "time" + + "github.com/glaslos/lsof" + "github.com/google/gopacket/pcap" ) func countOpenFiles() (int, error) { if runtime.GOOS == "linux" { - if isCommandAvailable("lsof") { - out, err := exec.Command("/bin/sh", "-c", fmt.Sprintf("lsof -p %d", os.Getpid())).Output() - if err != nil { - log.Fatal(err) - } - lines := strings.Split(string(out), "\n") - return len(lines) - 1, nil - } - return 0, errors.New("lsof command does not exist. Kindly run sudo apt install lsof") + lines, err := lsof.ReadPID(os.Getpid()) + return len(lines) - 1, err } - return 0, errors.New("Operating system type not supported for this command") -} - -func countRunningRoutines() int { - return runtime.NumGoroutine() + return 0, errors.New("operating system type not supported for this command") } func (g *Glutton) startMonitor(quit chan struct{}) { @@ -35,8 +26,15 @@ func (g *Glutton) startMonitor(quit chan struct{}) { go func() { for { select { + // case <-ticker.C: + // openFiles, err := countOpenFiles() + // if err != nil { + // fmt.Printf("Failed :%s", err) + // } + // runningRoutines := runtime.NumGoroutine() + // g.Logger.Info(fmt.Sprintf("running Go routines: %d, open files: %d", openFiles, runningRoutines)) case <-quit: - g.logger.Info("[system ] Monitoring stopped..") + g.Logger.Info("monitoring stopped...") ticker.Stop() return } @@ -44,10 +42,27 @@ func (g *Glutton) startMonitor(quit chan struct{}) { }() } -func isCommandAvailable(name string) bool { - cmd := exec.Command("/bin/sh", "-c", "command -v "+name) - if err := cmd.Run(); err != nil { - return false +func getNonLoopbackIPs(ifaceName string) ([]net.IP, error) { + nonLoopback := []net.IP{} + + ifs, err := pcap.FindAllDevs() + if err != nil { + return nonLoopback, err } - return true + + for _, iface := range ifs { + if strings.EqualFold(iface.Name, ifaceName) { + for _, addr := range iface.Addresses { + if !addr.IP.IsLoopback() && addr.IP.To4() != nil { + nonLoopback = append(nonLoopback, addr.IP) + } + } + } + } + + if len(nonLoopback) == 0 { + return nonLoopback, fmt.Errorf("unable to find any non-loopback addresses for: %s", ifaceName) + } + + return nonLoopback, nil } diff --git a/docker/glutton/docker-compose.yml b/docker/glutton/docker-compose.yml index 2f14b8b3..1ac00b40 100644 --- a/docker/glutton/docker-compose.yml +++ b/docker/glutton/docker-compose.yml @@ -15,8 +15,9 @@ services: network_mode: "host" cap_add: - NET_ADMIN - image: "dtagdevsec/glutton:2204" + image: "dtagdevsec/glutton:24.04" read_only: true volumes: - - /data/glutton/log:/var/log/glutton - - /root/tpotce/docker/glutton/dist/rules.yaml:/opt/glutton/rules/rules.yaml + - $HOME/tpotce/data/glutton/log:/var/log/glutton + - $HOME/tpotce/data/glutton/payloads:/opt/glutton/payloads +# - $HOME/tpotce/docker/glutton/dist/rules.yaml:/opt/glutton/config/rules.yaml diff --git a/docker/hellpot/Dockerfile b/docker/hellpot/Dockerfile index 3fa08bfc..9ffbdafb 100644 --- a/docker/hellpot/Dockerfile +++ b/docker/hellpot/Dockerfile @@ -1,46 +1,41 @@ -FROM alpine:3.17 +FROM golang:1.21-alpine as builder # # Include dist COPY dist/ /root/dist/ # # Setup apk RUN apk -U --no-cache add \ - build-base \ - git \ - go \ - g++ && \ + build-base \ + git \ + g++ && \ # # Setup go, hellpot cd /root && \ - export GOPATH=/opt/go/ && \ - mkdir -p /opt/hellpot && \ - mkdir -p /opt/go && \ git clone https://github.com/yunginnanet/HellPot && \ cd HellPot && \ - git checkout 49433bf499b6af314786cbbc3cb8566cdb18c40c && \ + git checkout 3673ab0228664fb3acd33102be5c7a5867137eb5 && \ + # git checkout 49433bf499b6af314786cbbc3cb8566cdb18c40c && \ sed -i 's#logFileName := "HellPot"#logFileName := "hellpot"#g' internal/config/logger.go && \ - go build cmd/HellPot/HellPot.go && \ - mv /root/HellPot/HellPot /opt/hellpot/ && \ + go mod download && \ + go vet -v ./... && \ + go test -v ./... && \ + export CGO_ENABLED=0 && \ + export VERSION=`git tag --sort=-version:refname | head -n 1` && \ + go build -trimpath \ + -ldflags "-s -w -X main.version=$VERSION" \ + cmd/HellPot/HellPot.go +# +FROM alpine:3.19 +# +COPY --from=builder /root/HellPot/HellPot /opt/hellpot/ +COPY --from=builder /root/dist/config.toml /opt/hellpot/config/ # # Setup user, groups and configs - addgroup -g 2000 hellpot && \ +RUN addgroup -g 2000 hellpot && \ adduser -S -s /bin/ash -u 2000 -D -g 2000 hellpot && \ - mkdir -p /var/log/hellpot && \ - # Hellpot wants to create .config folder always in user's home - mkdir -p /home/hellpot/.config/HellPot/logs && \ - mv /root/dist/config.toml /home/hellpot/.config/HellPot/ && \ - chown hellpot:hellpot -R /home/hellpot && \ -# -# Clean up - apk del --purge build-base \ - git \ - go \ - g++ && \ - rm -rf /var/cache/apk/* \ - /opt/go \ - /root/* + mkdir -p /var/log/hellpot # # Start hellpot WORKDIR /opt/hellpot USER hellpot:hellpot -CMD ["./HellPot"] +CMD ["./HellPot", "-c","config/config.toml"] diff --git a/docker/hellpot/dist/config.toml b/docker/hellpot/dist/config.toml index d708c26e..8505698e 100644 --- a/docker/hellpot/dist/config.toml +++ b/docker/hellpot/dist/config.toml @@ -7,6 +7,9 @@ bind_addr = "0.0.0.0" bind_port = "8080" + # header name containing clients real IP, for reverse proxy deployments + real_ip_header = 'X-Real-IP' + # this contains a list of blacklisted useragent strings. (case sensitive) # clients with useragents containing any of these strings will receive "Not found" for any requests. uagent_string_blacklist = ["Cloudflare-Traffic-Manager", "curl"] @@ -22,14 +25,73 @@ # Toggling this to false will prevent creation of robots.txt handler. makerobots = true # Handlers will be created for these paths, as well as robots.txt entries. Only valid if catchall = false. - paths = ["wp-json/omapp/v1/support", "wp-login.php", "wp-login"] - + paths = [ + "wp-json/omapp/v1/support", + "wp-login.php", + "wp-login", + "admin", + "admin.php", + "admin/login.php", + "admin/login", + "admin.asp", + "admin.aspx", + "wp-admin", + "login", + "xmlrpc.php", + ".env", + "config.php", + "config.yaml", + "config.json", + "db.php", + "db.yaml", + "db.json", + "admin.yaml", + "admin.json", + "user.yaml", + "user.json", + "site.yaml", + "site.json", + "mysql.php", + "mysql.yaml", + "mysql.json", + "mongodb.php", + "mongodb.yaml", + "mongodb.json", + "sql.php", + "sql.yaml", + "sql.json", + "install.php", + "setup.php", + "main.php", + "test.php", + "README.md", + "LICENSE", + ".git", + ".htaccess", + ".htpasswd", + "server-status", + "phpinfo.php", + "info.php", + "env", + "config/", + "admin/config/", + "admin.php/config/", + "admin.asp/config/", + "admin.aspx/config/", + "phpmyadmin", + "pma", + "dbadmin", + "mysql", + "myadmin", + "phpmyadmin2" + ] + [logger] # verbose (-v) debug = true # extra verbose (-vv) trace = false - # JSON log files will be storn in the below directory. + # JSON log files will be stored in the below directory. directory = "/var/log/hellpot/" # disable all color in console output. when using Windows this will default to true. nocolor = true diff --git a/docker/hellpot/docker-compose.yml b/docker/hellpot/docker-compose.yml index 0fcb3b92..3c94eca7 100644 --- a/docker/hellpot/docker-compose.yml +++ b/docker/hellpot/docker-compose.yml @@ -15,8 +15,8 @@ services: networks: - hellpot_local ports: - - "80:8080" - image: "dtagdevsec/hellpot:2204" + - "80:8080" + image: "dtagdevsec/hellpot:24.04" read_only: true volumes: - - /data/hellpot/log:/var/log/hellpot + - $HOME/tpotce/data/hellpot/log:/var/log/hellpot diff --git a/docker/heralding/Dockerfile b/docker/heralding/Dockerfile index 9972ff75..c4b46cc5 100644 --- a/docker/heralding/Dockerfile +++ b/docker/heralding/Dockerfile @@ -1,64 +1,64 @@ -FROM alpine:3.15 -# +FROM alpine:3.19 +# # Include dist COPY dist/ /root/dist/ # # Install packages -RUN apk -U --no-cache add \ - build-base \ - git \ - libcap \ - libffi-dev \ - openssl-dev \ - py3-pyzmq \ - postgresql-dev \ - py3-attrs \ - py3-mysqlclient \ - py3-nose \ - py3-openssl \ - py3-pip \ - py3-psycopg2 \ - py3-pycryptodome \ - py3-pyzmq \ - py3-requests \ - py3-rsa \ - py3-typing-extensions \ - py3-wheel \ - py3-yaml \ - python3 \ - python3-dev && \ +RUN apk -U --no-cache add \ + build-base \ + git \ + libcap \ + libffi-dev \ + openssl-dev \ + py3-pyzmq \ + postgresql-dev \ + py3-attrs \ + py3-mysqlclient \ + py3-nose \ + py3-pip \ + py3-psycopg2 \ + py3-pycryptodome \ + py3-pyzmq \ + py3-requests \ + py3-rsa \ + py3-typing-extensions \ + py3-wheel \ + py3-yaml \ + python3 \ + python3-dev && \ # # Setup heralding mkdir -p /opt && \ cd /opt/ && \ - git clone https://github.com/johnnykv/heralding && \ +# git clone https://github.com/johnnykv/heralding && \ + git clone https://github.com/t3chn0m4g3/heralding && \ cd heralding && \ - git checkout c31f99c55c7318c09272d8d9998e560c3d4de9aa && \ + git checkout e863c8aa4cee6dd6308ccb20b2d6c816a0fda2a5 && \ cp /root/dist/requirements.txt . && \ - pip3 install --upgrade pip && \ - pip3 install --no-cache-dir -r requirements.txt && \ - pip3 install --no-cache-dir . && \ + pip3 install --break-system-packages --upgrade pip && \ + pip3 install --break-system-packages --no-cache-dir -r requirements.txt && \ + pip3 install --break-system-packages --no-cache-dir . && \ # # Setup user, groups and configs addgroup -g 2000 heralding && \ adduser -S -H -s /bin/ash -u 2000 -D -g 2000 heralding && \ mkdir -p /var/log/heralding/ /etc/heralding && \ mv /root/dist/heralding.yml /etc/heralding/ && \ - setcap cap_net_bind_service=+ep /usr/bin/python3.9 && \ + setcap cap_net_bind_service=+ep $(readlink -f $(type -P python3)) && \ chown -R heralding:heralding /var/log/heralding && \ # # Clean up apk del --purge \ - build-base \ - git \ - libcap \ - libffi-dev \ - libressl-dev \ - postgresql-dev \ - python3-dev && \ + build-base \ + git \ + libcap \ + libffi-dev \ + openssl-dev \ + postgresql-dev \ + python3-dev && \ rm -rf /root/* \ - /var/cache/apk/* \ - /opt/heralding + /var/cache/apk/* \ + /opt/heralding # # Start Heralding STOPSIGNAL SIGINT diff --git a/docker/heralding/dist/requirements.txt b/docker/heralding/dist/requirements.txt index 21336f71..d73d704b 100644 --- a/docker/heralding/dist/requirements.txt +++ b/docker/heralding/dist/requirements.txt @@ -2,3 +2,4 @@ aiosmtpd asyncssh>=2.0.0 pyaml hpfeeds3 +pyOpenSSL diff --git a/docker/heralding/docker-compose.yml b/docker/heralding/docker-compose.yml index 774fa687..cb59d41a 100644 --- a/docker/heralding/docker-compose.yml +++ b/docker/heralding/docker-compose.yml @@ -33,7 +33,7 @@ services: - "3389:3389" - "5432:5432" - "5900:5900" - image: "dtagdevsec/heralding:2204" + image: "dtagdevsec/heralding:24.04" read_only: true volumes: - - /data/heralding/log:/var/log/heralding + - $HOME/tpotce/data/heralding/log:/var/log/heralding diff --git a/docker/honeypots/Dockerfile b/docker/honeypots/Dockerfile index 5b9a02e2..07be79eb 100644 --- a/docker/honeypots/Dockerfile +++ b/docker/honeypots/Dockerfile @@ -1,52 +1,52 @@ -FROM alpine:3.17 +FROM alpine:3.19 # # Include dist COPY dist/ /root/dist/ # # Install packages RUN apk -U --no-cache add \ - build-base \ - freetds \ - freetds-dev \ - gcc \ - git \ - hiredis \ - jpeg-dev \ - libcap \ - libffi-dev \ - libpq \ - musl-dev \ - openssl \ - openssl-dev \ - postgresql-dev \ - py3-chardet \ - py3-click \ - py3-cryptography \ - py3-dnspython \ - py3-flask \ - py3-future \ - py3-hiredis \ - py3-impacket \ - py3-itsdangerous \ - py3-jinja2 \ - py3-ldap3 \ - py3-markupsafe \ - py3-netifaces \ - py3-openssl \ - py3-packaging \ - py3-paramiko \ - py3-pip \ - py3-psutil \ - py3-psycopg2 \ - py3-pycryptodomex \ - py3-requests \ - py3-service_identity \ - py3-twisted \ - py3-werkzeug \ - py3-wheel \ - python3 \ - python3-dev \ - zlib-dev && \ + build-base \ + freetds \ + freetds-dev \ + gcc \ + git \ + hiredis \ + jpeg-dev \ + libcap \ + libffi-dev \ + libpq \ + musl-dev \ + openssl \ + openssl-dev \ + postgresql-dev \ + py3-chardet \ + py3-click \ + py3-cryptography \ + py3-dnspython \ + py3-flask \ + py3-future \ + py3-hiredis \ + py3-impacket \ + py3-itsdangerous \ + py3-jinja2 \ + py3-ldap3 \ + py3-markupsafe \ + py3-netifaces \ + py3-openssl \ + py3-packaging \ + py3-paramiko \ + py3-pip \ + # py3-psutil \ + py3-psycopg2 \ + py3-pycryptodomex \ + py3-requests \ + py3-service_identity \ + py3-twisted \ + py3-werkzeug \ + py3-wheel \ + python3 \ + python3-dev \ + zlib-dev && \ # # Install honeypots from GitHub and setup mkdir -p /opt \ @@ -54,12 +54,12 @@ RUN apk -U --no-cache add \ cd /opt/ && \ git clone https://github.com/qeeqbox/honeypots && \ cd honeypots && \ -# git checkout bee3147cf81837ba7639f1e27fe34d717ecccf29 && \ - git checkout 1ad37d7e07838e9ad18c5244d87b9e49d90c9bc3 && \ - cp /root/dist/setup.py . && \ - pip3 install --upgrade pip && \ - pip3 install . && \ - setcap cap_net_bind_service=+ep /usr/bin/python3.10 && \ + git checkout a990b2c1ab04ffafde229e478ced54ffbb665d5c && \ + # git checkout 5b3bfbecbf85c1f5235b320b333bdeff2d312372 && \ + # cp /root/dist/pyproject.toml . && \ + pip3 install --break-system-packages --upgrade pip && \ + pip3 install --break-system-packages . && \ + setcap cap_net_bind_service=+ep $(readlink -f $(type -P python3)) && \ # # Setup user, groups and configs addgroup -g 2000 honeypots && \ @@ -70,14 +70,14 @@ RUN apk -U --no-cache add \ # # Clean up apk del --purge build-base \ - freetds-dev \ - git \ - jpeg-dev \ - libffi-dev \ - openssl-dev \ - postgresql-dev \ - python3-dev \ - zlib-dev && \ + freetds-dev \ + git \ + jpeg-dev \ + libffi-dev \ + openssl-dev \ + postgresql-dev \ + python3-dev \ + zlib-dev && \ rm -rf /root/* /var/cache/apk/* /opt/honeypots/.git # diff --git a/docker/honeypots/dist/config.json b/docker/honeypots/dist/config.json index 964b16a5..87579a53 100644 --- a/docker/honeypots/dist/config.json +++ b/docker/honeypots/dist/config.json @@ -45,7 +45,7 @@ "log_file_name":"http.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands","fix_get_client_ip"] + "options":["capture_commands","fix_get_client_ip"] }, "https":{ "port":443, @@ -55,7 +55,7 @@ "log_file_name":"https.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands","fix_get_client_ip"] + "options":["capture_commands","fix_get_client_ip"] }, "imap":{ "port":143, @@ -65,7 +65,7 @@ "log_file_name":"imap.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands"] + "options":["capture_commands"] }, "mysql":{ "port":3306, @@ -75,7 +75,7 @@ "log_file_name":"mysql.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands"] + "options":["capture_commands"] }, "pop3":{ "port":110, @@ -85,7 +85,7 @@ "log_file_name":"pop3.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands"] + "options":["capture_commands"] }, "postgres":{ "port":5432, @@ -95,7 +95,7 @@ "log_file_name":"postgres.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands"] + "options":["capture_commands"] }, "redis":{ "port":6379, @@ -105,7 +105,7 @@ "log_file_name":"redis.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands"] + "options":["capture_commands"] }, "smb":{ "port":445, @@ -115,7 +115,7 @@ "log_file_name":"smb.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands"] + "options":["capture_commands"] }, "smtp":{ "port":25, @@ -125,7 +125,7 @@ "log_file_name":"smtp.log", "max_bytes":10000, "backup_count":10, - "options":["capture_commands"] + "options":["capture_commands"] }, "socks5":{ "port":1080, @@ -135,7 +135,7 @@ "log_file_name":"socks5.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands"] + "options":["capture_commands"] }, "ssh":{ "port":22, @@ -145,7 +145,7 @@ "log_file_name":"ssh.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands", "interactive"] + "options":["capture_commands", "interactive"] }, "telnet":{ "port":23, @@ -155,7 +155,7 @@ "log_file_name":"telnet.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands"] + "options":["capture_commands"] }, "vnc":{ "port":5900, @@ -165,7 +165,7 @@ "log_file_name":"vnc.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands"] + "options":["capture_commands"] }, "elastic":{ "port":9200, @@ -175,7 +175,7 @@ "log_file_name":"elastic.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands"] + "options":["capture_commands"] }, "mssql":{ "port":1433, @@ -185,7 +185,7 @@ "log_file_name":"mssql.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands"] + "options":["capture_commands"] }, "ldap":{ "port":389, @@ -195,7 +195,7 @@ "log_file_name":"ldap.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands"] + "options":["capture_commands"] }, "ntp":{ "port":123, @@ -205,7 +205,7 @@ "log_file_name":"ntp.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands"] + "options":["capture_commands"] }, "memcache":{ "port":11211, @@ -215,7 +215,7 @@ "log_file_name":"memcache.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands"] + "options":["capture_commands"] }, "oracle":{ "port":1521, @@ -225,7 +225,7 @@ "log_file_name":"oracle.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands"] + "options":["capture_commands"] }, "snmp":{ "port":161, @@ -235,7 +235,7 @@ "log_file_name":"snmp.log", "max_bytes":0, "backup_count":10, - "options":["capture_commands"] + "options":["capture_commands"] }, "sip":{ "port":5060, @@ -253,11 +253,41 @@ "username":"", "password":"", "log_file_name":"irc.log", - "max_bytes":10000, + "max_bytes":0, + "backup_count":10, + "options":["capture_commands"] + }, + "pjl":{ + "port":9100, + "ip":"0.0.0.0", + "username":"", + "password":"", + "log_file_name":"pjl.log", + "max_bytes":0, + "backup_count":10, + "options":["capture_commands"] + }, + "ipp":{ + "port":631, + "ip":"0.0.0.0", + "username":"", + "password":"", + "log_file_name":"ipp.log", + "max_bytes":0, + "backup_count":10, + "options":["capture_commands"] + }, + "rdp":{ + "port":3389, + "ip":"0.0.0.0", + "username":"", + "password":"", + "log_file_name":"rdp.log", + "max_bytes":0, "backup_count":10, "options":["capture_commands"] } - }, + }, "custom_filter":{ "honeypots":{ "change":{ @@ -282,4 +312,3 @@ } } } - diff --git a/docker/honeypots/dist/pyproject.toml b/docker/honeypots/dist/pyproject.toml new file mode 100644 index 00000000..ddbaa5ed --- /dev/null +++ b/docker/honeypots/dist/pyproject.toml @@ -0,0 +1,150 @@ +[build-system] +requires = [ + "setuptools>=61.2", +] +build-backend = "setuptools.build_meta" + +[project] +name = "honeypots" +version = "0.65" +authors = [ + { name = "QeeqBox", email = "gigaqeeq@gmail.com" }, +] +description = "30 different honeypots in one package! (dhcp, dns, elastic, ftp, http proxy, https proxy, http, https, imap, ipp, irc, ldap, memcache, mssql, mysql, ntp, oracle, pjl, pop3, postgres, rdp, redis, sip, smb, smtp, snmp, socks5, ssh, telnet, vnc)" +readme = "README.rst" +requires-python = ">=3.8" +dependencies = [ + "twisted", + "psutil", + "psycopg2-binary", + "pycryptodome", + "requests", + "requests[socks]", + "impacket", + "paramiko", + "scapy", + "service_identity", + "netifaces", +] +license = {text = "AGPL-3.0"} + +[project.urls] +Homepage = "https://github.com/qeeqbox/honeypots" + +[project.optional-dependencies] +dev = [ + "dnspython==2.4.2", + "elasticsearch", + "ldap3", + "mysql-connector", + "pre-commit", + "pymssql", + "pysnmplib", + "pytest", + "redis", + "redis", + "vncdotool", +] + +[project.scripts] +honeypots = "honeypots.__main__:main_logic" + +[tool.setuptools] +packages = [ + "honeypots", + "honeypots.data", +] +include-package-data = true + +[tool.setuptools.package-data] +"honeypots.data" = [ + "*.html", +] + +[tool.ruff] +select = [ + "F", + "E", + "W", + "C90", + "N", + "UP", + "B", + "A", + "C4", + "EXE", + "FA", + "ISC", + "PIE", + "T20", + "PT", + "Q", + "RET", + "SIM", + "TCH", + "ARG", + "PTH", + "ERA", + "PL", + "PLR", + "PLW", + "PERF", + "RUF", +] +ignore = [ + "A003", + "PERF203", + "PERF401", + "RUF001", + "RUF002", + "RUF003", + "RUF015", + # pydantic only supports these from python>=3.9 + "UP006", + "UP007", + # rules may cause conflicts when used with the formatter + "ISC001", + "Q001", +] +fixable = [ + "F", + "E", + "W", + "C90", + "N", + "UP", + "B", + "A", + "C4", + "EXE", + "FA", + "ISC", + "PIE", + "T20", + "PT", + "Q", + "RET", + "SIM", + "TCH", + "ARG", + "PTH", + "ERA", + "PL", + "PLR", + "PLW", + "PERF", + "RUF", +] +exclude = [ + ".git", + ".ruff_cache", + ".venv", + "venv", + "data", +] +line-length = 99 +target-version = "py38" + +[tool.ruff.lint.per-file-ignores] +# don't check for "magic value" in tests +"tests/*" = ["PLR2004"] diff --git a/docker/honeypots/docker-compose.yml b/docker/honeypots/docker-compose.yml index cd2b0604..df1ffd02 100644 --- a/docker/honeypots/docker-compose.yml +++ b/docker/honeypots/docker-compose.yml @@ -32,19 +32,23 @@ services: - "389:389" - "443:443" - "445:445" + - "631:631" - "1080:1080" - "1433:1433" - "1521:1521" - "3306:3306" - - "5060:5060" + - "3389:3389" + - "5060:5060/tcp" + - "5060:5060/udp" - "5432:5432" - "5900:5900" - "6379:6379" - "6667:6667" - "8080:8080" + - "9100:9100" - "9200:9200" - "11211:11211" - image: "dtagdevsec/honeypots:2204" + image: "dtagdevsec/honeypots:24.04" read_only: true volumes: - - /data/honeypots/log:/var/log/honeypots + - $HOME/tpotce/data/honeypots/log:/var/log/honeypots diff --git a/docker/honeytrap/docker-compose.yml b/docker/honeytrap/docker-compose.yml index 252897ee..3a5f933a 100644 --- a/docker/honeytrap/docker-compose.yml +++ b/docker/honeytrap/docker-compose.yml @@ -14,7 +14,7 @@ services: network_mode: "host" cap_add: - NET_ADMIN - image: "dtagdevsec/honeytrap:2204" + image: "dtagdevsec/honeytrap:24.04" read_only: true volumes: - /data/honeytrap/attacks:/opt/honeytrap/var/attacks diff --git a/docker/ipphoney/Dockerfile b/docker/ipphoney/Dockerfile index dc597a83..fe315a47 100644 --- a/docker/ipphoney/Dockerfile +++ b/docker/ipphoney/Dockerfile @@ -1,43 +1,43 @@ -FROM alpine:3.17 +FROM alpine:3.19 # # Include dist COPY dist/ /root/dist/ # # Install packages RUN apk -U --no-cache add \ - build-base \ - ca-certificates \ - git \ - libcap \ - libffi-dev \ - openssl \ - openssl-dev \ - postgresql-dev \ - py3-cryptography \ - py3-elasticsearch \ - py3-geoip2 \ - py3-maxminddb \ - py3-mysqlclient \ - py3-requests \ - py3-packaging \ - py3-pip \ - py3-psycopg2 \ - py3-redis \ - py3-requests \ - py3-service_identity \ - py3-setuptools \ - py3-twisted \ - py3-wheel \ - python3 \ - python3-dev && \ + build-base \ + ca-certificates \ + git \ + libcap \ + libffi-dev \ + openssl \ + openssl-dev \ + postgresql-dev \ + py3-cryptography \ + py3-elasticsearch \ + py3-geoip2 \ + py3-maxminddb \ + py3-mysqlclient \ + py3-requests \ + py3-packaging \ + py3-pip \ + py3-psycopg2 \ + py3-redis \ + py3-requests \ + py3-service_identity \ + py3-setuptools \ + py3-twisted \ + py3-wheel \ + python3 \ + python3-dev && \ mkdir -p /opt && \ cd /opt/ && \ git clone https://gitlab.com/bontchev/ipphoney.git/ && \ cd ipphoney && \ git checkout 7ab1cac437baba17cb2cd25d5bb1400327e1bb79 && \ cp /root/dist/requirements.txt . && \ - pip3 install -r requirements.txt && \ - setcap cap_net_bind_service=+ep /usr/bin/python3.10 && \ + pip3 install --break-system-packages -r requirements.txt && \ + setcap cap_net_bind_service=+ep $(readlink -f $(type -P python3)) && \ # # Setup user, groups and configs addgroup -g 2000 ipphoney && \ diff --git a/docker/ipphoney/docker-compose.yml b/docker/ipphoney/docker-compose.yml index dbe4c94e..7a796aa4 100644 --- a/docker/ipphoney/docker-compose.yml +++ b/docker/ipphoney/docker-compose.yml @@ -16,7 +16,7 @@ services: - ipphoney_local ports: - "631:631" - image: "dtagdevsec/ipphoney:2204" + image: "dtagdevsec/ipphoney:24.04" read_only: true volumes: - - /data/ipphoney/log:/opt/ipphoney/log + - $HOME/tpotce/data/ipphoney/log:/opt/ipphoney/log diff --git a/docker/log4pot/Dockerfile b/docker/log4pot/Dockerfile index 6e15f28b..0e8880fa 100644 --- a/docker/log4pot/Dockerfile +++ b/docker/log4pot/Dockerfile @@ -4,21 +4,21 @@ ENV DEBIAN_FRONTEND noninteractive # Install packages RUN apt-get update -y && \ apt-get install -y \ - build-essential \ - cargo \ - cleo \ - git \ - libcap2 \ - libcap2-bin \ - libcurl4 \ - libcurl4-nss-dev \ - libffi7 \ - libffi-dev \ - libssl-dev \ - python3-pip \ - python3 \ - python3-dev \ - rust-all && \ + build-essential \ + cargo \ + cleo \ + git \ + libcap2 \ + libcap2-bin \ + libcurl4 \ + libcurl4-nss-dev \ + libffi7 \ + libffi-dev \ + libssl-dev \ + python3-pip \ + python3 \ + python3-dev \ + rust-all && \ pip3 install --upgrade pip && \ pip3 install poetry pycurl && \ # @@ -31,23 +31,23 @@ RUN apt-get update -y && \ git checkout e224c0f786efb68b4aab892e69857e379b75b0c6 && \ sed -i 's#"type": logtype,#"reason": logtype,#g' log4pot-server.py && \ poetry install && \ - setcap cap_net_bind_service=+ep /usr/bin/python3.10 && \ + setcap cap_net_bind_service=+ep $(readlink -f $(which python3)) && \ # # Setup user, groups and configs - addgroup --gid 2000 log4pot && \ + addgroup --gid 2000 log4pot && \ adduser --system --no-create-home --shell /bin/bash -uid 2000 --disabled-password --disabled-login -gid 2000 log4pot && \ chown log4pot:log4pot -R /opt/Log4Pot && \ # # Clean up - apt-get purge -y build-essential \ - cargo \ - git \ - libffi-dev \ - libssl-dev \ - python3-dev \ - rust-all && \ - apt-get autoremove -y --purge && \ - apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /root/.cache /opt/Log4Pot/.git + apt-get purge -y build-essential \ + cargo \ + git \ + libffi-dev \ + libssl-dev \ + python3-dev \ + rust-all && \ + apt-get autoremove -y --purge && \ + apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /root/.cache /opt/Log4Pot/.git # # Start log4pot STOPSIGNAL SIGINT diff --git a/docker/log4pot/docker-compose.yml b/docker/log4pot/docker-compose.yml index 54992265..8df90135 100644 --- a/docker/log4pot/docker-compose.yml +++ b/docker/log4pot/docker-compose.yml @@ -22,8 +22,8 @@ services: - "8080:8080" - "9200:8080" - "25565:8080" - image: "dtagdevsec/log4pot:2204" + image: "dtagdevsec/log4pot:24.04" read_only: true volumes: - - /data/log4pot/log:/var/log/log4pot/log - - /data/log4pot/payloads:/var/log/log4pot/payloads + - $HOME/tpotce/data/log4pot/log:/var/log/log4pot/log + - $HOME/tpotce/data/log4pot/payloads:/var/log/log4pot/payloads diff --git a/docker/mailoney/Dockerfile b/docker/mailoney/Dockerfile index b1314269..2f31ba8e 100644 --- a/docker/mailoney/Dockerfile +++ b/docker/mailoney/Dockerfile @@ -1,20 +1,22 @@ -FROM alpine:3.15 +FROM alpine:3.19 # # Install packages RUN apk -U --no-cache add \ - git \ - libcap \ - python2 && \ + git \ + libcap \ + py3-pip \ + python3 && \ # # Install mailoney from git git clone https://github.com/t3chn0m4g3/mailoney /opt/mailoney && \ cd /opt/mailoney && \ + pip3 install --break-system-packages -r requirements.txt && \ # # Setup user, groups and configs addgroup -g 2000 mailoney && \ adduser -S -H -s /bin/ash -u 2000 -D -g 2000 mailoney && \ chown -R mailoney:mailoney /opt/mailoney && \ - setcap cap_net_bind_service=+ep /usr/bin/python2.7 && \ + setcap cap_net_bind_service=+ep $(readlink -f $(type -P python3)) && \ # # Clean up apk del --purge git && \ diff --git a/docker/mailoney/docker-compose.yml b/docker/mailoney/docker-compose.yml index 4e221c79..00bc3008 100644 --- a/docker/mailoney/docker-compose.yml +++ b/docker/mailoney/docker-compose.yml @@ -22,7 +22,8 @@ services: - mailoney_local ports: - "25:25" - image: "dtagdevsec/mailoney:2204" + - "587:25" + image: "dtagdevsec/mailoney:24.04" read_only: true volumes: - - /data/mailoney/log:/opt/mailoney/logs + - $HOME/tpotce/data/mailoney/log:/opt/mailoney/logs diff --git a/docker/medpot/Dockerfile b/docker/medpot/Dockerfile index e777a97f..8c7086f7 100644 --- a/docker/medpot/Dockerfile +++ b/docker/medpot/Dockerfile @@ -1,51 +1,42 @@ -FROM alpine:3.17 +FROM golang:1.21-alpine as builder # # Setup apk RUN apk -U --no-cache add \ - build-base \ - git \ - go \ - g++ && \ + build-base \ + git \ + go \ + g++ && \ # # Setup go, build medpot - export GOPATH=/tmp && \ + export GOPATH=/opt/go/ && \ export GO111MODULE=off && \ - cd /tmp && \ + mkdir -p /opt/go/src && \ + cd /opt/go/src && \ + git clone https://github.com/schmalle/medpot && \ + cd medpot && \ + git checkout 75a2e6134cf926c35b6017d62542274434c87388 && \ + cd .. && \ go get -d -v github.com/davecgh/go-spew/spew && \ go get -d -v github.com/go-ini/ini && \ go get -d -v github.com/mozillazg/request && \ go get -d -v go.uber.org/zap && \ - go get -d -v github.com/s9rA16Bf4/ArgumentParser/go/arguments && \ - go get -d -v github.com/s9rA16Bf4/notify_handler/go/notify && \ -# git clone https://github.com/schmalle/medpot && \ - git clone https://github.com/s9rA16Bf4/medpot && \ cd medpot && \ -# git checkout dd9833786bb56cd40c11dfb15e0dd57298e249e8 && \ - git checkout 0feb786cd8a7616498ba9749dbfda24b5dbd363e && \ - sed -i s/"ews = true"/"ews = false"/g template/ews.cfg && \ - go build -o medpot go/medpot.go go/logo.go && \ + cp dist/etc/ews.cfg /etc/ && \ + go build medpot +# +FROM alpine:3.19 # # Setup medpot - mkdir -p /etc/medpot \ - /opt/medpot \ - /var/log/medpot && \ - cp medpot /opt/medpot && \ - cp ./template/* /etc/medpot && \ +# +COPY --from=builder /opt/go/src/medpot/medpot /opt/medpot/medpot +COPY --from=builder /opt/go/src/medpot/template/*.xml /opt/medpot/ +COPY --from=builder /opt/go/src/medpot/dist/etc/ews.cfg /etc/ews.cfg +RUN mkdir -p /var/log/medpot && \ # # Setup user, groups and configs addgroup -g 2000 medpot && \ adduser -S -s /bin/ash -u 2000 -D -g 2000 medpot && \ - chown -R medpot:medpot /var/log/medpot && \ -# -# Clean up - apk del --purge build-base \ - git \ - go \ - g++ && \ - rm -rf /var/cache/apk/* \ - /opt/go \ - /root/dist \ - /tmp + chown -R medpot:medpot /var/log/medpot # # Start medpot WORKDIR /opt/medpot diff --git a/docker/medpot/docker-compose.yml b/docker/medpot/docker-compose.yml index f4aaf5d8..e3ebc9e3 100644 --- a/docker/medpot/docker-compose.yml +++ b/docker/medpot/docker-compose.yml @@ -16,7 +16,7 @@ services: - medpot_local ports: - "2575:2575" - image: "dtagdevsec/medpot:2204" + image: "dtagdevsec/medpot:24.04" read_only: true volumes: - - /data/medpot/log/:/var/log/medpot + - $HOME/tpotce/data/medpot/log/:/var/log/medpot diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile index b2ed2c5a..6b8b6ce1 100644 --- a/docker/nginx/Dockerfile +++ b/docker/nginx/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.17 +FROM alpine:3.19 # # Include dist COPY dist/ /root/dist/ @@ -29,6 +29,7 @@ RUN apk -U --no-cache add \ cp /root/dist/conf/nginx.conf /etc/nginx/ && \ cp -R /root/dist/conf/ssl /etc/nginx/ && \ cp /root/dist/conf/tpotweb.conf /etc/nginx/conf.d/ && \ + cp /root/dist/conf/lsweb.conf /etc/nginx/conf.d/ && \ # # Clean up rm -rf /root/* && \ diff --git a/docker/nginx/builder/cyberchef/Dockerfile b/docker/nginx/builder/cyberchef/Dockerfile index c97293c6..bcf49d8e 100644 --- a/docker/nginx/builder/cyberchef/Dockerfile +++ b/docker/nginx/builder/cyberchef/Dockerfile @@ -1,8 +1,8 @@ #FROM node:17.9.0-alpine3.15 as builder -FROM node:18-alpine3.15 as builder +FROM node:18-alpine as builder # # Prep and build Cyberchef -ENV CY_VER=v9.55.0 +ENV CY_VER=v10.8.2 RUN apk -U --no-cache add build-base git python3 && \ chown -R node:node /srv && \ npm install -g grunt-cli diff --git a/docker/nginx/builder/esvue/Dockerfile b/docker/nginx/builder/esvue/Dockerfile index ce94b244..589a7d1e 100644 --- a/docker/nginx/builder/esvue/Dockerfile +++ b/docker/nginx/builder/esvue/Dockerfile @@ -1,19 +1,23 @@ -FROM node:14.18-alpine AS builder +### elasticvue build is currently broken, issue has been opened https://github.com/cars10/elasticvue/issues/215 +### in the meantime we are using the older dist, if not resolved we need to find a different solution +FROM node:20-alpine AS builder # # Prep and build Elasticvue RUN apk -U --no-cache add git && \ - git clone https://github.com/cars10/elasticvue /opt/src && \ -# We need to adjust consts.js so the user has connection suggestion for reverse proxied ES - sed -i "s#export const DEFAULT_HOST = 'http://localhost:9200'#export const DEFAULT_HOST = window.location.origin + '/es'#g" /opt/src/src/consts.js && \ - sed -i 's#href="/images/logo/favicon.ico"#href="images/logo/favicon.ico"#g' /opt/src/public/index.html && \ + # git clone https://github.com/cars10/elasticvue -b v1.0.4 /opt/src && \ + git clone https://github.com/t3chn0m4g3/elasticvue /opt/src && \ +# We need to adjust consts.ts so the user has connection suggestion for reverse proxied ES + sed -i "s#export const DEFAULT_CLUSTER_URI = 'http://localhost:9200'#export const DEFAULT_CLUSTER_URI = window.location.origin + '/es'#g" /opt/src/src/consts.ts && \ + sed -i 's#href="/images/logo/favicon.ico"#href="images/logo/favicon.ico"#g' /opt/src/index.html && \ mkdir /opt/app && \ cd /opt/app && \ cp /opt/src/package.json . && \ cp /opt/src/yarn.lock . && \ - yarn install --ignore-optional && \ + yarn install && \ cp -R /opt/src/* . && \ -# We need to set this ENV so we can run Elasticvue in its own location rather than / - VUE_APP_PUBLIC_PATH=/elasticvue/ yarn build && \ + export VITE_APP_BUILD_MODE=docker && \ + export VITE_APP_PUBLIC_PATH="/elasticvue/" && \ + yarn build && \ cd dist && \ tar cvfz esvue.tgz * # diff --git a/docker/nginx/builder/esvue/build.sh b/docker/nginx/builder/esvue/build.sh index 07a37c14..c79afe0e 100755 --- a/docker/nginx/builder/esvue/build.sh +++ b/docker/nginx/builder/esvue/build.sh @@ -1,3 +1,3 @@ #!/bin/bash # Needs buildx to build. Run tpotce/bin/setup-builder.sh first -docker buildx build --output ../../dist/html/esvue/ . +docker buildx build --no-cache --progress plain --output ../../dist/html/esvue/ . diff --git a/docker/nginx/dist/conf/lsweb.conf b/docker/nginx/dist/conf/lsweb.conf new file mode 100644 index 00000000..872774b8 --- /dev/null +++ b/docker/nginx/dist/conf/lsweb.conf @@ -0,0 +1,110 @@ +############################################ +### NGINX T-Pot configuration file by mo ### +############################################ + +server { + + ######################### + ### Basic server settings + ######################### + listen 64294 ssl http2; + index index.html; + ssl_protocols TLSv1.3; + server_name example.com; + error_page 300 301 302 400 401 402 403 404 500 501 502 503 504 /error.html; + root /var/lib/nginx/html; + add_header Cache-Control "public, max-age=604800"; + + ############################################## + ### Remove version number add different header + ############################################## + server_tokens off; + + + ############################################## + ### SSL settings and Cipher Suites + ############################################## + ssl_certificate /etc/nginx/cert/nginx.crt; + ssl_certificate_key /etc/nginx/cert/nginx.key; + + ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!DHE:!SHA:!SHA256'; + ssl_ecdh_curve secp384r1; + ssl_dhparam /etc/nginx/ssl/dhparam4096.pem; + + ssl_prefer_server_ciphers on; + ssl_session_cache shared:SSL:10m; + + + #################################### + ### OWASP recommendations / settings + #################################### + + ### Size Limits & Buffer Overflows + ### the size may be configured based on the needs. + client_body_buffer_size 128k; + client_header_buffer_size 1k; + client_max_body_size 2M; + + ### Changed from OWASP recommendations: "2 1k" to "2 1280" (So 1.2k) + ### When you pass though potentially another reverse proxy/load balancer + ### in front of tpotce you can introduce more headers than normal and + ### therefore you can exceed the allowed header buffer of 1k. + ### An 280 extra bytes seems to be working for most use-cases. + ### And still keeping it close to OWASP's recommendation. + large_client_header_buffers 2 1280; + + ### Mitigate Slow HHTP DoS Attack + ### Timeouts definition ## + client_body_timeout 10; + client_header_timeout 10; + keepalive_timeout 5 5; + send_timeout 10; + + ### X-Frame-Options is to prevent from clickJacking attack + add_header X-Frame-Options SAMEORIGIN; + + ### disable content-type sniffing on some browsers. + add_header X-Content-Type-Options nosniff; + + ### This header enables the Cross-site scripting (XSS) filter + add_header X-XSS-Protection "1; mode=block"; + + ### This will enforce HTTP browsing into HTTPS and avoid ssl stripping attack + add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;"; +# add_header 'Content-Security-Policy' 'upgrade-insecure-requests'; + + ################################## + ### Restrict access and basic auth + ################################## + + # satisfy all; + satisfy any; + + # allow 10.0.0.0/8; + # allow 172.16.0.0/12; + # allow 192.168.0.0/16; + allow 127.0.0.1; + allow ::1; + deny all; + + auth_basic "closed site"; + auth_basic_user_file /etc/nginx/lswebpasswd; + + ################################################ + ### T-Pot Hive Logstash HTTP Input Reverse Proxy + ################################################ + + location / { + set_by_lua_block $logstash { + local tpot_ostype = os.getenv("TPOT_OSTYPE") + if tpot_ostype == "mac" or tpot_ostype == "win" then + return "http://logstash:64305"; + else + return "http://127.0.0.1:64305"; + end + } + access_log off; + error_log /var/log/nginx/lsweb_error.log; + proxy_pass $logstash; + } +} diff --git a/docker/nginx/dist/conf/nginx.conf b/docker/nginx/dist/conf/nginx.conf index 988a92b6..8e956ed6 100644 --- a/docker/nginx/dist/conf/nginx.conf +++ b/docker/nginx/dist/conf/nginx.conf @@ -6,7 +6,6 @@ load_module /usr/lib/nginx/modules/ngx_http_brotli_filter_module.so; load_module /usr/lib/nginx/modules/ngx_http_brotli_static_module.so; # OS ENV variables need to be defined here, so Lua can use them -env COCKPIT; env TPOT_OSTYPE; # Both modules are needed for Lua, in this exact order @@ -36,7 +35,7 @@ http { include /etc/nginx/mime.types; default_type application/octet-stream; - ## + ## # Compression ## diff --git a/docker/nginx/dist/conf/tpotweb.conf b/docker/nginx/dist/conf/tpotweb.conf index 2f48cb4c..7c8900bd 100644 --- a/docker/nginx/dist/conf/tpotweb.conf +++ b/docker/nginx/dist/conf/tpotweb.conf @@ -96,12 +96,7 @@ server { location / { set_by_lua_block $index_file { - local cockpit = os.getenv("COCKPIT") - if cockpit == "false" then - return "index_light.html" - else - return "index.html" - end + return "index.html"; } auth_basic "closed site"; auth_basic_user_file /etc/nginx/nginxpasswd; @@ -149,6 +144,7 @@ server { return "http://127.0.0.1:64298"; end } + proxy_pass $elasticsearch; rewrite /es/(.*)$ /$1 break; } diff --git a/docker/nginx/dist/html/License b/docker/nginx/dist/html/License deleted file mode 100644 index 61d18602..00000000 --- a/docker/nginx/dist/html/License +++ /dev/null @@ -1,674 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/docker/nginx/dist/html/README-ES-MX.md b/docker/nginx/dist/html/README-ES-MX.md deleted file mode 100644 index b3086690..00000000 --- a/docker/nginx/dist/html/README-ES-MX.md +++ /dev/null @@ -1,248 +0,0 @@ -![image](assets/img/header.png) - - -

- - donation - - - - live-preview - -

- -
- -## πŸ‘‡ Índice -- [πŸ‘‡ Índice](#-Γ­ndice) -- [✨ CaracterΓ­sticas](#-caracterΓ­sticas) -- [πŸš€ Usos](#-usos) - - [Como pΓ‘gina de inicio](#como-pΓ‘gina-de-inicio) - - [Como una nueva pestaΓ±a](#como-una-nueva-pestaΓ±a) -- [🎨 PersonalizaciΓ³n](#-personalizaciΓ³n) - - [πŸ‘‹ General: Nombre, Imagen De Fondo y Saludos](#-general-nombre-imagen-de-fondo-y-saludos) - - [🏷️ Botones de Enlace****](#️-botones-de-enlace) - - [πŸ“‘ Lista de enlaces](#-lista-de-enlaces) - - [β›ˆοΈ Clima: Clave De La Api, Iconos y Grupos](#️-clima-clave-de-la-api-iconos-y-grupos) - - [πŸ’› Colores](#-colores) - - [πŸŒ‘ Cambio automatico de tema](#-cambio-automatico-de-tema) - - -## ✨ CaracterΓ­sticas - -- **ConfiguraciΓ³n Sencilla** de archivos. -- **Modo Claro/Obscuro** puedes alternarlos y se guardara en tu almacenamiento local. -- **Fecha y Hora**, puedes utilizar el formato de 24 horas (predeterminado) o el de 12 horas. -- **Saludos** fΓ‘ciles de modificar. -- **Variables** para colores y tamaΓ±os de fuente personalizados en el cΓ³digo del archivo `style.css`. -- **Iconos** todos los iconos provienen de [Feather Icons](https://feathericons.com/) (Otros los hice yo mismo, tomando los iconos de Feather Icons como base). -- **Archivos Modulares** de JavaScript para una lectura sencilla. - -## πŸš€ Usos - -#### Como pΓ‘gina de inicio - -1. Haz un Fork de este repositorio -2. Activa el servicio de GitHub Pages `Settings > GitHub Pages > Source [rama master] > Save` -3. ConfigΓΊrala como pΓ‘gina de inicio: - - Haz click en el botΓ³n MenΓΊ, selecciona Opciones, selecciona Preferencias - - Haz click en el panel de inicio. - - Haz click en el menΓΊ al lado de Inicio y Nuevas Ventanas. Elige la opciΓ³n de mostrar URL's personalizadas, despuΓ©s, aΓ±ade el enlace de tu GitHub Pages. - -#### Como una nueva pestaΓ±a - -Puedes utilizar distintos Add-ons/Extensiones para ello - -- Si usas Firefox: [Custom New Tab Page](https://addons.mozilla.org/en-US/firefox/addon/custom-new-tab-page/?src=search) -- Si usas Chromium (Brave, Vivaldi, Chrome): [Custom New Tab URL](https://chrome.google.com/webstore/detail/custom-new-tab-url/mmjbdbjnoablegbkcklggeknkfcjkjia) - -## 🎨 PersonalizaciΓ³n - -Casi todas la personalizaciΓ³n puede ser configurada desde el archivo `config.js`: - -### πŸ‘‹ General: Nombre, Imagen De Fondo y Saludos - -Para cambiar el nombre por defecto, los saludos y si deseas tener una imagen de fondo o abrir los enlaces en una nueva pestaΓ±a, edita las primeras configuraciones en el archivo `config.js`. - -```js - // General - name: 'John', - imageBackground: false, - openInNewTab: true, - - // Saludos - greetingMorning: 'Good morning!', - greetingAfternoon: 'Good afternoon,', - greetingEvening: 'Good evening,', - greetingNight: 'Go to Sleep!', - -``` - -> Puedes cambiar el fondo, sustituyendo el archivo `background.jpg` en la carpeta `assets`. - -![](assets/img/previewbg.png) - -### 🏷️ Botones de Enlace**** - -Para editar los botones solo tienes que cambiar la siguiente lista en el archivo `config.js` eligiendo un enlace, un icono proveniente de [Feather Icons](https://feathericons.com/) y un nombre: - -```js -cards: [ - { - id: '1', - name: 'Github', - icon: 'github', - link: 'https://github.com/', - }, - { - id: '2', - name: 'Mail', - icon: 'mail', - link: 'https://mail.protonmail.com/', - }, - { - id: '3', - name: 'Todoist', - icon: 'trello', - link: 'https://calendar.google.com/calendar/r', - }, - { - id: '4', - name: 'Calendar', - icon: 'calendar', - link: 'https://calendar.google.com/calendar/r', - }, - { - id: '5', - name: 'Reddit', - icon: 'bookmark', - link: 'https://reddit.com', - }, - { - id: '6', - name: 'Odysee', - icon: 'youtube', - link: 'https://odysee.com/', - }, - ], -``` - -### πŸ“‘ Lista de enlaces - -Lo mismo pasa con la lista de enlaces, puedes cambiar la lista de iconos (tambiΓ©n provenientes de [Feather Icons](https://feathericons.com/)) y los enlaces: - -```js - //Iconos - firstListIcon: 'music', - secondListIcon: 'coffee', - - // Enlaces - lists: { - firstList: [ - { - name: 'Inspirational', - link: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ', - }, - { - name: 'Classic', - link: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ', - }, - { - name: 'Oldies', - link: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ', - }, - { - name: 'Rock', - link: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ', - }, - ], - secondList: [ - { - name: 'Linkedin', - link: 'https://linkedin.com/', - }, - { - name: 'Figma', - link: 'https://figma.com/', - }, - { - name: 'Dribbble', - link: 'https://dribbble.com', - }, - { - name: 'Telegram', - link: 'https://webk.telegram.org', - }, - ], - }, -``` - -### β›ˆοΈ Clima: Clave De La Api, Iconos y Grupos - -Para configurar el widget del clima necesitaras una clave de API proveniente de: `https://openweathermap.org/`. Una vez que hayas obtenido tu clave, necesitaras configurar tu latitud y longitud, para ello puedes usar: `https://www.latlong.net/` para obtenerlas. - -Finalmente, escoge un set de iconos: - -![](assets/img/icons.png) - -- **Nord** Usa el esquema de colores Nord si te encantan los colores agradables a la vista. -- **OneDark** (_Predeterminado_) Usa el esquema de colores One Dark Pro. -- **Dark** Para usuarios que solo usan temas claros y quieren un look minimalista. -- **White** Para usuarios que solo usan temas oscuros y quieren un look minimalista. - -Finalmente, solo aΓ±Γ‘delos al archivo `config.js`. - -```js - // clima - weatherKey: 'InsertYourAPIKeyHere123456', - weatherIcons: 'OneDark', - weatherUnit: 'C', - weatherLatitude: '37.774929', - weatherLongitude: '-122.419418', -``` - -### πŸ’› Colores - -En el archivo `app.css` puedes cambiar las variables para cualquiera de los temas (Oscuro y Claro): - -```css -/* Tema Claro */ - -:root { - --accent: #61b0f1; /* Hover color */ - --bg: #f5f5f5; /* Background color */ - --sbg: #e4e6e6; /* Cards color */ - --fg: #3a3a3a; /* Foreground color */ - --sfg: #3a3a3a; /* Sceondary Foreground color */ -} - -/* Tema Oscuro */ - -.darktheme { - --accent: #61b0f1; /* Hover color */ - --bg: #19171a; /* Background color */ - --sbg: #201e21; /* Cards color */ - --fg: #d8dee9; /* Foreground color */ - --sfg: #3a3a3a; /* Secondary Foreground color */ -} -``` - -### πŸŒ‘ Cambio automatico de tema - -The theme can be automatically changed by the OS' current theme or personalized hours -that you can change in the `config.js` file: - -```js - // Autochange - autoChangeTheme: true, - - // Autochabge by OS - changeThemeByOS: false, - - // Autochange by hour options (24hrs format, string must be in: hh:mm) - changeThemeByHour: true, // If it's true, it will use the values below: - hourDarkThemeActive: '18:30', // Turn on the dark theme after this hour - hourDarkThemeInactive: '07:00', // Turn off the dark theme after this hour and before the above hour -``` - -![](assets/img/subheader.png) diff --git a/docker/nginx/dist/html/README.md b/docker/nginx/dist/html/README.md deleted file mode 100644 index b68014e0..00000000 --- a/docker/nginx/dist/html/README.md +++ /dev/null @@ -1,252 +0,0 @@ -![image](assets/img/header.png) - - -

- - donation - - - - live-preview - - - - live-preview - -

- -
- -## πŸ‘‡ Index -- [πŸ‘‡ Index](#-index) -- [✨ Features](#-features) -- [πŸš€ Usage](#-usage) - - [As Home Page](#as-home-page) - - [As New Tab](#as-new-tab) -- [🎨 Customization](#-customization) - - [πŸ‘‹ General: Name, Image Background and Greetings](#-general-name-image-background-and-greetings) - - [🏷️ Button Links](#️-button-links) - - [πŸ“‘ List Links](#-list-links) - - [β›ˆοΈ Weather: Api Key, Icons and Unit](#️-weather-api-key-icons-and-unit) - - [πŸ’› Colors](#-colors) - - [πŸŒ‘ Auto change theme](#-auto-change-theme) - - -## ✨ Features - -- **Easy configuration** file. -- **Dark/Light** mode, you can toggle them and It'll be saved in local storage. -- **Clock and Date** format can be set to 24 hour (default) or 12 hour. -- **Greetings** are easy to modify. -- **Variables** for custom colors and font sizes in the `style.css` code. -- **Icons** all icons are from Feather Icons (Some others I made them with the Feather icons as a base) -- **Modular** javascript files for an easy read. - -## πŸš€ Usage - -#### As Home Page - -1. Fork this repo -2. Enable the Github Pages service `Settings > GitHub Pages > Source [master branch] > Save` -3. Set it as Home Page: - - Click the menu button. and select Options. Preferences. - - Click the Home panel. - - Click the menu next to Homepage and new windows and choose to show custom URLs and add your `Github Pages link` - -#### As New Tab - -You can use different Add-ons/Extensions for it - -- If you use Firefox: [Custom New Tab Page](https://addons.mozilla.org/en-US/firefox/addon/custom-new-tab-page/?src=search) -- If you use Chromium (Brave, Vivaldi, Chrome): [Custom New Tab URL](https://chrome.google.com/webstore/detail/custom-new-tab-url/mmjbdbjnoablegbkcklggeknkfcjkjia) - -## 🎨 Customization - -Almost all customization can be managed in the `config.js` file: - -### πŸ‘‹ General: Name, Image Background and Greetings - -To change the default name, the greetings and if you want to have an image background or open your links in new tabs, edit the first configs in the `config.js`. - -```js - // General - name: 'John', - imageBackground: false, - openInNewTab: true, - - // Greetings - greetingMorning: 'Good morning!', - greetingAfternoon: 'Good afternoon,', - greetingEvening: 'Good evening,', - greetingNight: 'Go to Sleep!', - -``` - -> You cah change the background by substituting the `background.jpg` file in `assets` folder. - -![](assets/img/previewbg.png) - -### 🏷️ Button Links - -To edit the buttons you just need to change the follow list in the `config.js` file by choosing a link, an icon from [Feather icons](https://feathericons.com/) and a name: - -```js -cards: [ - { - id: '1', - name: 'Github', - icon: 'github', - link: 'https://github.com/', - }, - { - id: '2', - name: 'Mail', - icon: 'mail', - link: 'https://mail.protonmail.com/', - }, - { - id: '3', - name: 'Todoist', - icon: 'trello', - link: 'https://calendar.google.com/calendar/r', - }, - { - id: '4', - name: 'Calendar', - icon: 'calendar', - link: 'https://calendar.google.com/calendar/r', - }, - { - id: '5', - name: 'Reddit', - icon: 'bookmark', - link: 'https://reddit.com', - }, - { - id: '6', - name: 'Odysee', - icon: 'youtube', - link: 'https://odysee.com/', - }, - ], -``` - -### πŸ“‘ List Links - -The same happens with the list links, you can change the list icon (also using feather icons) and the links: - -```js - //Icons - firstListIcon: 'music', - secondListIcon: 'coffee', - - // Links - lists: { - firstList: [ - { - name: 'Inspirational', - link: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ', - }, - { - name: 'Classic', - link: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ', - }, - { - name: 'Oldies', - link: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ', - }, - { - name: 'Rock', - link: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ', - }, - ], - secondList: [ - { - name: 'Linkedin', - link: 'https://linkedin.com/', - }, - { - name: 'Figma', - link: 'https://figma.com/', - }, - { - name: 'Dribbble', - link: 'https://dribbble.com', - }, - { - name: 'Telegram', - link: 'https://webk.telegram.org', - }, - ], - }, -``` - -### β›ˆοΈ Weather: Api Key, Icons and Unit - -For setting up the Weather widget you'll need an API Key from: `https://openweathermap.org/`. Once you have your Key you'll need to set your latitude and longitude, you can use: `https://www.latlong.net/` to get them. - -Finally, choose an Icon set: - -![](assets/img/icons.png) - -- **Nord** Using the Nord Color Scheme and easy-to-eyes colors -- **OneDark** (_Default one_) Using the One Dark Pro color scheme -- **Dark** For White theme only users that want a minimalist look -- **White** For Dark theme only users that want a minimalist look - -Finally just add them to the `config.js` file. - -```js - // Weather - weatherKey: 'InsertYourAPIKeyHere123456', - weatherIcons: 'OneDark', - weatherUnit: 'C', - weatherLatitude: '37.774929', - weatherLongitude: '-122.419418', -``` - -### πŸ’› Colors - -In the `app.css` file you can change the variables for both themes (Dark and Light): - -```css -/* Light theme */ - -:root { - --accent: #61b0f1; /* Hover color */ - --bg: #f5f5f5; /* Background color */ - --sbg: #e4e6e6; /* Cards color */ - --fg: #3a3a3a; /* Foreground color */ - --sfg: #3a3a3a; /* Sceondary Foreground color */ -} - -/* Dark theme */ - -.darktheme { - --accent: #61b0f1; /* Hover color */ - --bg: #19171a; /* Background color */ - --sbg: #201e21; /* Cards color */ - --fg: #d8dee9; /* Foreground color */ - --sfg: #3a3a3a; /* Secondary Foreground color */ -} -``` - -### πŸŒ‘ Auto change theme - -The theme can be automatically changed by the OS' current theme or personalized hours -that you can change in the `config.js` file: - -```js - // Autochange - autoChangeTheme: true, - - // Autochabge by OS - changeThemeByOS: false, - - // Autochange by hour options (24hrs format, string must be in: hh:mm) - changeThemeByHour: true, // If it's true, it will use the values below: - hourDarkThemeActive: '18:30', // Turn on the dark theme after this hour - hourDarkThemeInactive: '07:00', // Turn off the dark theme after this hour and before the above hour -``` - -![](assets/img/subheader.png) \ No newline at end of file diff --git a/docker/nginx/dist/html/app.css b/docker/nginx/dist/html/app.css deleted file mode 100644 index fc13673c..00000000 --- a/docker/nginx/dist/html/app.css +++ /dev/null @@ -1,202 +0,0 @@ -/* -// β•”β•— ╔═╗╔╗╔╔╦╗╔═╗ -// β• β•©β•—β•‘β•£ β•‘β•‘β•‘ β•‘ β•‘ β•‘ -// β•šβ•β•β•šβ•β•β•β•šβ• β•© β•šβ•β• -*/ - -/* @import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;700&display=swap'); */ - -/* open-sans-300 - latin */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 300; - src: local(''), - url('assets/fonts/open-sans-v34-latin-300.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ - url('assets/fonts/open-sans-v34-latin-300.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ -} -/* open-sans-regular - latin */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400; - src: local(''), - url('assets/fonts/open-sans-v34-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ - url('assets/fonts/open-sans-v34-latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ -} -/* open-sans-700 - latin */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 700; - src: local(''), - url('assets/fonts/open-sans-v34-latin-700.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ - url('assets/fonts/open-sans-v34-latin-700.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ -} - -/* V A R I A B L E S */ - -:root { - /* Fonts */ - --fsg: 12vh; /* Time and Greetings */ - --fsm: 8vh; /* Date */ - --fss: 3vh; /* Greetings and Weather widger */ - --fses: 2vh; /* Links List */ - - --iconsize: 3vh; - - /* Dark theme */ - --accent: #E20074; /* Hover color */ - --bg: #19171a; /* Background color */ - --sbg: #201e21a4; /* Cards color */ - --fg: #d8dee9; /* Foreground color */ - --sfg: #ffffff; /* Secondary Foreground color */ - - /* Image background */ - --imgbg: url(assets/background.jpg); - --imgcol: linear-gradient( - rgba(0, 0, 0, 0.1), - rgba(0, 0, 0, 0.1) - ); /* Filter color */ -} - - -/* S T Y L E S */ - -* { - margin: 0; - padding: 0; - box-sizing: border-box; - font-family: 'Open Sans', sans-serif; - transition: 0.2s ease-in-out; -} - -.notransition { - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; -} - -.withImageBackground { - background-image: var(--imgcol), var(--imgbg); - background-size: cover; -} - -body { - width: 100vw; - height: 100vh; - background-color: var(--bg); - display: flex; - align-items: center; - justify-content: center; -} - -.container { - width: 145vh; - height: 90vh; - display: grid; - grid-template-columns: repeat(4, 1fr); - grid-template-rows: repeat(4, 1fr); - grid-gap: 30px; - padding: 20px; -} - -.card { - background-color: var(--sbg); - box-shadow: 0 5px 7px rgba(0, 0, 0, 0.4); - border-radius: 5px; -} - -.card:hover { - transform: translateY(-0.5rem); - box-shadow: 0 10px 10px rgba(226, 0, 116, 0.4); -} - -.timeBlock { - grid-row: 1 / span 2; - grid-column: 1 / span 2; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; -} - -.clock { - display: flex; - align-items: center; - justify-content: center; -} - -#hour, -#separator, -#minutes { - font-size: var(--fsg); - font-weight: bolder; - color: var(--fg); -} - -#greetings { - font-size: var(--fss); - color: var(--fg); -} - -.list { - display: flex; - align-items: center; - flex-direction: column; -} - -.list__1 { - grid-column: 1; - grid-row: 3 / span 2; -} -.list__2 { - grid-column: 2; - grid-row: 3 / span 2; -} -.list__head { - margin-top: 3vh; - margin-bottom: 2vh; - color: var(--fg); - width: var(--iconsize); - height: var(--iconsize); -} -.list__link { - text-decoration: none; - font-size: var(--fses); - color: var(--fg); - margin-top: 1vh; - padding: 8px 12px; - border-radius: 5px; - font-weight: bolder; - text-align: center; - width: 80%; -} -.list__link:hover { - background-color: var(--accent); - color: var(--sfg); -} - -/* M E D I A - Q U E R I E S */ - -@media only screen and (max-width: 68.75em) { - .container { - grid-gap: 20px; - padding: 40px; - } - - .timeBlock { - grid-row: 1 / span 2; - grid-column: 1 / span 4; - } - - #greetings { - font-size: var(--fss); - } - - .list { - display: none; - } - -} diff --git a/docker/nginx/dist/html/assets/background.jpg b/docker/nginx/dist/html/assets/background.jpg deleted file mode 100644 index a0be4e9b..00000000 Binary files a/docker/nginx/dist/html/assets/background.jpg and /dev/null differ diff --git a/docker/nginx/dist/html/assets/fonts/awesome/css/all.css b/docker/nginx/dist/html/assets/fonts/awesome/css/all.css new file mode 100644 index 00000000..1893247a --- /dev/null +++ b/docker/nginx/dist/html/assets/fonts/awesome/css/all.css @@ -0,0 +1,8003 @@ +/*! + * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + +.fa, +.fa-classic, +.fa-sharp, +.fas, +.fa-solid, +.far, +.fa-regular, +.fab, +.fa-brands { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; } + +.fas, +.fa-classic, +.fa-solid, +.far, +.fa-regular { + font-family: 'Font Awesome 6 Free'; } + +.fab, +.fa-brands { + font-family: 'Font Awesome 6 Brands'; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07143em; + vertical-align: 0.05357em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04167em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; } } + +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, none)); + transform: rotate(var(--fa-rotate-angle, none)); } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; + z-index: var(--fa-stack-z-index, auto); } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: var(--fa-inverse, #fff); } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ + +.fa-0::before { + content: "\30"; } + +.fa-1::before { + content: "\31"; } + +.fa-2::before { + content: "\32"; } + +.fa-3::before { + content: "\33"; } + +.fa-4::before { + content: "\34"; } + +.fa-5::before { + content: "\35"; } + +.fa-6::before { + content: "\36"; } + +.fa-7::before { + content: "\37"; } + +.fa-8::before { + content: "\38"; } + +.fa-9::before { + content: "\39"; } + +.fa-fill-drip::before { + content: "\f576"; } + +.fa-arrows-to-circle::before { + content: "\e4bd"; } + +.fa-circle-chevron-right::before { + content: "\f138"; } + +.fa-chevron-circle-right::before { + content: "\f138"; } + +.fa-at::before { + content: "\40"; } + +.fa-trash-can::before { + content: "\f2ed"; } + +.fa-trash-alt::before { + content: "\f2ed"; } + +.fa-text-height::before { + content: "\f034"; } + +.fa-user-xmark::before { + content: "\f235"; } + +.fa-user-times::before { + content: "\f235"; } + +.fa-stethoscope::before { + content: "\f0f1"; } + +.fa-message::before { + content: "\f27a"; } + +.fa-comment-alt::before { + content: "\f27a"; } + +.fa-info::before { + content: "\f129"; } + +.fa-down-left-and-up-right-to-center::before { + content: "\f422"; } + +.fa-compress-alt::before { + content: "\f422"; } + +.fa-explosion::before { + content: "\e4e9"; } + +.fa-file-lines::before { + content: "\f15c"; } + +.fa-file-alt::before { + content: "\f15c"; } + +.fa-file-text::before { + content: "\f15c"; } + +.fa-wave-square::before { + content: "\f83e"; } + +.fa-ring::before { + content: "\f70b"; } + +.fa-building-un::before { + content: "\e4d9"; } + +.fa-dice-three::before { + content: "\f527"; } + +.fa-calendar-days::before { + content: "\f073"; } + +.fa-calendar-alt::before { + content: "\f073"; } + +.fa-anchor-circle-check::before { + content: "\e4aa"; } + +.fa-building-circle-arrow-right::before { + content: "\e4d1"; } + +.fa-volleyball::before { + content: "\f45f"; } + +.fa-volleyball-ball::before { + content: "\f45f"; } + +.fa-arrows-up-to-line::before { + content: "\e4c2"; } + +.fa-sort-down::before { + content: "\f0dd"; } + +.fa-sort-desc::before { + content: "\f0dd"; } + +.fa-circle-minus::before { + content: "\f056"; } + +.fa-minus-circle::before { + content: "\f056"; } + +.fa-door-open::before { + content: "\f52b"; } + +.fa-right-from-bracket::before { + content: "\f2f5"; } + +.fa-sign-out-alt::before { + content: "\f2f5"; } + +.fa-atom::before { + content: "\f5d2"; } + +.fa-soap::before { + content: "\e06e"; } + +.fa-icons::before { + content: "\f86d"; } + +.fa-heart-music-camera-bolt::before { + content: "\f86d"; } + +.fa-microphone-lines-slash::before { + content: "\f539"; } + +.fa-microphone-alt-slash::before { + content: "\f539"; } + +.fa-bridge-circle-check::before { + content: "\e4c9"; } + +.fa-pump-medical::before { + content: "\e06a"; } + +.fa-fingerprint::before { + content: "\f577"; } + +.fa-hand-point-right::before { + content: "\f0a4"; } + +.fa-magnifying-glass-location::before { + content: "\f689"; } + +.fa-search-location::before { + content: "\f689"; } + +.fa-forward-step::before { + content: "\f051"; } + +.fa-step-forward::before { + content: "\f051"; } + +.fa-face-smile-beam::before { + content: "\f5b8"; } + +.fa-smile-beam::before { + content: "\f5b8"; } + +.fa-flag-checkered::before { + content: "\f11e"; } + +.fa-football::before { + content: "\f44e"; } + +.fa-football-ball::before { + content: "\f44e"; } + +.fa-school-circle-exclamation::before { + content: "\e56c"; } + +.fa-crop::before { + content: "\f125"; } + +.fa-angles-down::before { + content: "\f103"; } + +.fa-angle-double-down::before { + content: "\f103"; } + +.fa-users-rectangle::before { + content: "\e594"; } + +.fa-people-roof::before { + content: "\e537"; } + +.fa-people-line::before { + content: "\e534"; } + +.fa-beer-mug-empty::before { + content: "\f0fc"; } + +.fa-beer::before { + content: "\f0fc"; } + +.fa-diagram-predecessor::before { + content: "\e477"; } + +.fa-arrow-up-long::before { + content: "\f176"; } + +.fa-long-arrow-up::before { + content: "\f176"; } + +.fa-fire-flame-simple::before { + content: "\f46a"; } + +.fa-burn::before { + content: "\f46a"; } + +.fa-person::before { + content: "\f183"; } + +.fa-male::before { + content: "\f183"; } + +.fa-laptop::before { + content: "\f109"; } + +.fa-file-csv::before { + content: "\f6dd"; } + +.fa-menorah::before { + content: "\f676"; } + +.fa-truck-plane::before { + content: "\e58f"; } + +.fa-record-vinyl::before { + content: "\f8d9"; } + +.fa-face-grin-stars::before { + content: "\f587"; } + +.fa-grin-stars::before { + content: "\f587"; } + +.fa-bong::before { + content: "\f55c"; } + +.fa-spaghetti-monster-flying::before { + content: "\f67b"; } + +.fa-pastafarianism::before { + content: "\f67b"; } + +.fa-arrow-down-up-across-line::before { + content: "\e4af"; } + +.fa-spoon::before { + content: "\f2e5"; } + +.fa-utensil-spoon::before { + content: "\f2e5"; } + +.fa-jar-wheat::before { + content: "\e517"; } + +.fa-envelopes-bulk::before { + content: "\f674"; } + +.fa-mail-bulk::before { + content: "\f674"; } + +.fa-file-circle-exclamation::before { + content: "\e4eb"; } + +.fa-circle-h::before { + content: "\f47e"; } + +.fa-hospital-symbol::before { + content: "\f47e"; } + +.fa-pager::before { + content: "\f815"; } + +.fa-address-book::before { + content: "\f2b9"; } + +.fa-contact-book::before { + content: "\f2b9"; } + +.fa-strikethrough::before { + content: "\f0cc"; } + +.fa-k::before { + content: "\4b"; } + +.fa-landmark-flag::before { + content: "\e51c"; } + +.fa-pencil::before { + content: "\f303"; } + +.fa-pencil-alt::before { + content: "\f303"; } + +.fa-backward::before { + content: "\f04a"; } + +.fa-caret-right::before { + content: "\f0da"; } + +.fa-comments::before { + content: "\f086"; } + +.fa-paste::before { + content: "\f0ea"; } + +.fa-file-clipboard::before { + content: "\f0ea"; } + +.fa-code-pull-request::before { + content: "\e13c"; } + +.fa-clipboard-list::before { + content: "\f46d"; } + +.fa-truck-ramp-box::before { + content: "\f4de"; } + +.fa-truck-loading::before { + content: "\f4de"; } + +.fa-user-check::before { + content: "\f4fc"; } + +.fa-vial-virus::before { + content: "\e597"; } + +.fa-sheet-plastic::before { + content: "\e571"; } + +.fa-blog::before { + content: "\f781"; } + +.fa-user-ninja::before { + content: "\f504"; } + +.fa-person-arrow-up-from-line::before { + content: "\e539"; } + +.fa-scroll-torah::before { + content: "\f6a0"; } + +.fa-torah::before { + content: "\f6a0"; } + +.fa-broom-ball::before { + content: "\f458"; } + +.fa-quidditch::before { + content: "\f458"; } + +.fa-quidditch-broom-ball::before { + content: "\f458"; } + +.fa-toggle-off::before { + content: "\f204"; } + +.fa-box-archive::before { + content: "\f187"; } + +.fa-archive::before { + content: "\f187"; } + +.fa-person-drowning::before { + content: "\e545"; } + +.fa-arrow-down-9-1::before { + content: "\f886"; } + +.fa-sort-numeric-desc::before { + content: "\f886"; } + +.fa-sort-numeric-down-alt::before { + content: "\f886"; } + +.fa-face-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-spray-can::before { + content: "\f5bd"; } + +.fa-truck-monster::before { + content: "\f63b"; } + +.fa-w::before { + content: "\57"; } + +.fa-earth-africa::before { + content: "\f57c"; } + +.fa-globe-africa::before { + content: "\f57c"; } + +.fa-rainbow::before { + content: "\f75b"; } + +.fa-circle-notch::before { + content: "\f1ce"; } + +.fa-tablet-screen-button::before { + content: "\f3fa"; } + +.fa-tablet-alt::before { + content: "\f3fa"; } + +.fa-paw::before { + content: "\f1b0"; } + +.fa-cloud::before { + content: "\f0c2"; } + +.fa-trowel-bricks::before { + content: "\e58a"; } + +.fa-face-flushed::before { + content: "\f579"; } + +.fa-flushed::before { + content: "\f579"; } + +.fa-hospital-user::before { + content: "\f80d"; } + +.fa-tent-arrow-left-right::before { + content: "\e57f"; } + +.fa-gavel::before { + content: "\f0e3"; } + +.fa-legal::before { + content: "\f0e3"; } + +.fa-binoculars::before { + content: "\f1e5"; } + +.fa-microphone-slash::before { + content: "\f131"; } + +.fa-box-tissue::before { + content: "\e05b"; } + +.fa-motorcycle::before { + content: "\f21c"; } + +.fa-bell-concierge::before { + content: "\f562"; } + +.fa-concierge-bell::before { + content: "\f562"; } + +.fa-pen-ruler::before { + content: "\f5ae"; } + +.fa-pencil-ruler::before { + content: "\f5ae"; } + +.fa-people-arrows::before { + content: "\e068"; } + +.fa-people-arrows-left-right::before { + content: "\e068"; } + +.fa-mars-and-venus-burst::before { + content: "\e523"; } + +.fa-square-caret-right::before { + content: "\f152"; } + +.fa-caret-square-right::before { + content: "\f152"; } + +.fa-scissors::before { + content: "\f0c4"; } + +.fa-cut::before { + content: "\f0c4"; } + +.fa-sun-plant-wilt::before { + content: "\e57a"; } + +.fa-toilets-portable::before { + content: "\e584"; } + +.fa-hockey-puck::before { + content: "\f453"; } + +.fa-table::before { + content: "\f0ce"; } + +.fa-magnifying-glass-arrow-right::before { + content: "\e521"; } + +.fa-tachograph-digital::before { + content: "\f566"; } + +.fa-digital-tachograph::before { + content: "\f566"; } + +.fa-users-slash::before { + content: "\e073"; } + +.fa-clover::before { + content: "\e139"; } + +.fa-reply::before { + content: "\f3e5"; } + +.fa-mail-reply::before { + content: "\f3e5"; } + +.fa-star-and-crescent::before { + content: "\f699"; } + +.fa-house-fire::before { + content: "\e50c"; } + +.fa-square-minus::before { + content: "\f146"; } + +.fa-minus-square::before { + content: "\f146"; } + +.fa-helicopter::before { + content: "\f533"; } + +.fa-compass::before { + content: "\f14e"; } + +.fa-square-caret-down::before { + content: "\f150"; } + +.fa-caret-square-down::before { + content: "\f150"; } + +.fa-file-circle-question::before { + content: "\e4ef"; } + +.fa-laptop-code::before { + content: "\f5fc"; } + +.fa-swatchbook::before { + content: "\f5c3"; } + +.fa-prescription-bottle::before { + content: "\f485"; } + +.fa-bars::before { + content: "\f0c9"; } + +.fa-navicon::before { + content: "\f0c9"; } + +.fa-people-group::before { + content: "\e533"; } + +.fa-hourglass-end::before { + content: "\f253"; } + +.fa-hourglass-3::before { + content: "\f253"; } + +.fa-heart-crack::before { + content: "\f7a9"; } + +.fa-heart-broken::before { + content: "\f7a9"; } + +.fa-square-up-right::before { + content: "\f360"; } + +.fa-external-link-square-alt::before { + content: "\f360"; } + +.fa-face-kiss-beam::before { + content: "\f597"; } + +.fa-kiss-beam::before { + content: "\f597"; } + +.fa-film::before { + content: "\f008"; } + +.fa-ruler-horizontal::before { + content: "\f547"; } + +.fa-people-robbery::before { + content: "\e536"; } + +.fa-lightbulb::before { + content: "\f0eb"; } + +.fa-caret-left::before { + content: "\f0d9"; } + +.fa-circle-exclamation::before { + content: "\f06a"; } + +.fa-exclamation-circle::before { + content: "\f06a"; } + +.fa-school-circle-xmark::before { + content: "\e56d"; } + +.fa-arrow-right-from-bracket::before { + content: "\f08b"; } + +.fa-sign-out::before { + content: "\f08b"; } + +.fa-circle-chevron-down::before { + content: "\f13a"; } + +.fa-chevron-circle-down::before { + content: "\f13a"; } + +.fa-unlock-keyhole::before { + content: "\f13e"; } + +.fa-unlock-alt::before { + content: "\f13e"; } + +.fa-cloud-showers-heavy::before { + content: "\f740"; } + +.fa-headphones-simple::before { + content: "\f58f"; } + +.fa-headphones-alt::before { + content: "\f58f"; } + +.fa-sitemap::before { + content: "\f0e8"; } + +.fa-circle-dollar-to-slot::before { + content: "\f4b9"; } + +.fa-donate::before { + content: "\f4b9"; } + +.fa-memory::before { + content: "\f538"; } + +.fa-road-spikes::before { + content: "\e568"; } + +.fa-fire-burner::before { + content: "\e4f1"; } + +.fa-flag::before { + content: "\f024"; } + +.fa-hanukiah::before { + content: "\f6e6"; } + +.fa-feather::before { + content: "\f52d"; } + +.fa-volume-low::before { + content: "\f027"; } + +.fa-volume-down::before { + content: "\f027"; } + +.fa-comment-slash::before { + content: "\f4b3"; } + +.fa-cloud-sun-rain::before { + content: "\f743"; } + +.fa-compress::before { + content: "\f066"; } + +.fa-wheat-awn::before { + content: "\e2cd"; } + +.fa-wheat-alt::before { + content: "\e2cd"; } + +.fa-ankh::before { + content: "\f644"; } + +.fa-hands-holding-child::before { + content: "\e4fa"; } + +.fa-asterisk::before { + content: "\2a"; } + +.fa-square-check::before { + content: "\f14a"; } + +.fa-check-square::before { + content: "\f14a"; } + +.fa-peseta-sign::before { + content: "\e221"; } + +.fa-heading::before { + content: "\f1dc"; } + +.fa-header::before { + content: "\f1dc"; } + +.fa-ghost::before { + content: "\f6e2"; } + +.fa-list::before { + content: "\f03a"; } + +.fa-list-squares::before { + content: "\f03a"; } + +.fa-square-phone-flip::before { + content: "\f87b"; } + +.fa-phone-square-alt::before { + content: "\f87b"; } + +.fa-cart-plus::before { + content: "\f217"; } + +.fa-gamepad::before { + content: "\f11b"; } + +.fa-circle-dot::before { + content: "\f192"; } + +.fa-dot-circle::before { + content: "\f192"; } + +.fa-face-dizzy::before { + content: "\f567"; } + +.fa-dizzy::before { + content: "\f567"; } + +.fa-egg::before { + content: "\f7fb"; } + +.fa-house-medical-circle-xmark::before { + content: "\e513"; } + +.fa-campground::before { + content: "\f6bb"; } + +.fa-folder-plus::before { + content: "\f65e"; } + +.fa-futbol::before { + content: "\f1e3"; } + +.fa-futbol-ball::before { + content: "\f1e3"; } + +.fa-soccer-ball::before { + content: "\f1e3"; } + +.fa-paintbrush::before { + content: "\f1fc"; } + +.fa-paint-brush::before { + content: "\f1fc"; } + +.fa-lock::before { + content: "\f023"; } + +.fa-gas-pump::before { + content: "\f52f"; } + +.fa-hot-tub-person::before { + content: "\f593"; } + +.fa-hot-tub::before { + content: "\f593"; } + +.fa-map-location::before { + content: "\f59f"; } + +.fa-map-marked::before { + content: "\f59f"; } + +.fa-house-flood-water::before { + content: "\e50e"; } + +.fa-tree::before { + content: "\f1bb"; } + +.fa-bridge-lock::before { + content: "\e4cc"; } + +.fa-sack-dollar::before { + content: "\f81d"; } + +.fa-pen-to-square::before { + content: "\f044"; } + +.fa-edit::before { + content: "\f044"; } + +.fa-car-side::before { + content: "\f5e4"; } + +.fa-share-nodes::before { + content: "\f1e0"; } + +.fa-share-alt::before { + content: "\f1e0"; } + +.fa-heart-circle-minus::before { + content: "\e4ff"; } + +.fa-hourglass-half::before { + content: "\f252"; } + +.fa-hourglass-2::before { + content: "\f252"; } + +.fa-microscope::before { + content: "\f610"; } + +.fa-sink::before { + content: "\e06d"; } + +.fa-bag-shopping::before { + content: "\f290"; } + +.fa-shopping-bag::before { + content: "\f290"; } + +.fa-arrow-down-z-a::before { + content: "\f881"; } + +.fa-sort-alpha-desc::before { + content: "\f881"; } + +.fa-sort-alpha-down-alt::before { + content: "\f881"; } + +.fa-mitten::before { + content: "\f7b5"; } + +.fa-person-rays::before { + content: "\e54d"; } + +.fa-users::before { + content: "\f0c0"; } + +.fa-eye-slash::before { + content: "\f070"; } + +.fa-flask-vial::before { + content: "\e4f3"; } + +.fa-hand::before { + content: "\f256"; } + +.fa-hand-paper::before { + content: "\f256"; } + +.fa-om::before { + content: "\f679"; } + +.fa-worm::before { + content: "\e599"; } + +.fa-house-circle-xmark::before { + content: "\e50b"; } + +.fa-plug::before { + content: "\f1e6"; } + +.fa-chevron-up::before { + content: "\f077"; } + +.fa-hand-spock::before { + content: "\f259"; } + +.fa-stopwatch::before { + content: "\f2f2"; } + +.fa-face-kiss::before { + content: "\f596"; } + +.fa-kiss::before { + content: "\f596"; } + +.fa-bridge-circle-xmark::before { + content: "\e4cb"; } + +.fa-face-grin-tongue::before { + content: "\f589"; } + +.fa-grin-tongue::before { + content: "\f589"; } + +.fa-chess-bishop::before { + content: "\f43a"; } + +.fa-face-grin-wink::before { + content: "\f58c"; } + +.fa-grin-wink::before { + content: "\f58c"; } + +.fa-ear-deaf::before { + content: "\f2a4"; } + +.fa-deaf::before { + content: "\f2a4"; } + +.fa-deafness::before { + content: "\f2a4"; } + +.fa-hard-of-hearing::before { + content: "\f2a4"; } + +.fa-road-circle-check::before { + content: "\e564"; } + +.fa-dice-five::before { + content: "\f523"; } + +.fa-square-rss::before { + content: "\f143"; } + +.fa-rss-square::before { + content: "\f143"; } + +.fa-land-mine-on::before { + content: "\e51b"; } + +.fa-i-cursor::before { + content: "\f246"; } + +.fa-stamp::before { + content: "\f5bf"; } + +.fa-stairs::before { + content: "\e289"; } + +.fa-i::before { + content: "\49"; } + +.fa-hryvnia-sign::before { + content: "\f6f2"; } + +.fa-hryvnia::before { + content: "\f6f2"; } + +.fa-pills::before { + content: "\f484"; } + +.fa-face-grin-wide::before { + content: "\f581"; } + +.fa-grin-alt::before { + content: "\f581"; } + +.fa-tooth::before { + content: "\f5c9"; } + +.fa-v::before { + content: "\56"; } + +.fa-bangladeshi-taka-sign::before { + content: "\e2e6"; } + +.fa-bicycle::before { + content: "\f206"; } + +.fa-staff-snake::before { + content: "\e579"; } + +.fa-rod-asclepius::before { + content: "\e579"; } + +.fa-rod-snake::before { + content: "\e579"; } + +.fa-staff-aesculapius::before { + content: "\e579"; } + +.fa-head-side-cough-slash::before { + content: "\e062"; } + +.fa-truck-medical::before { + content: "\f0f9"; } + +.fa-ambulance::before { + content: "\f0f9"; } + +.fa-wheat-awn-circle-exclamation::before { + content: "\e598"; } + +.fa-snowman::before { + content: "\f7d0"; } + +.fa-mortar-pestle::before { + content: "\f5a7"; } + +.fa-road-barrier::before { + content: "\e562"; } + +.fa-school::before { + content: "\f549"; } + +.fa-igloo::before { + content: "\f7ae"; } + +.fa-joint::before { + content: "\f595"; } + +.fa-angle-right::before { + content: "\f105"; } + +.fa-horse::before { + content: "\f6f0"; } + +.fa-q::before { + content: "\51"; } + +.fa-g::before { + content: "\47"; } + +.fa-notes-medical::before { + content: "\f481"; } + +.fa-temperature-half::before { + content: "\f2c9"; } + +.fa-temperature-2::before { + content: "\f2c9"; } + +.fa-thermometer-2::before { + content: "\f2c9"; } + +.fa-thermometer-half::before { + content: "\f2c9"; } + +.fa-dong-sign::before { + content: "\e169"; } + +.fa-capsules::before { + content: "\f46b"; } + +.fa-poo-storm::before { + content: "\f75a"; } + +.fa-poo-bolt::before { + content: "\f75a"; } + +.fa-face-frown-open::before { + content: "\f57a"; } + +.fa-frown-open::before { + content: "\f57a"; } + +.fa-hand-point-up::before { + content: "\f0a6"; } + +.fa-money-bill::before { + content: "\f0d6"; } + +.fa-bookmark::before { + content: "\f02e"; } + +.fa-align-justify::before { + content: "\f039"; } + +.fa-umbrella-beach::before { + content: "\f5ca"; } + +.fa-helmet-un::before { + content: "\e503"; } + +.fa-bullseye::before { + content: "\f140"; } + +.fa-bacon::before { + content: "\f7e5"; } + +.fa-hand-point-down::before { + content: "\f0a7"; } + +.fa-arrow-up-from-bracket::before { + content: "\e09a"; } + +.fa-folder::before { + content: "\f07b"; } + +.fa-folder-blank::before { + content: "\f07b"; } + +.fa-file-waveform::before { + content: "\f478"; } + +.fa-file-medical-alt::before { + content: "\f478"; } + +.fa-radiation::before { + content: "\f7b9"; } + +.fa-chart-simple::before { + content: "\e473"; } + +.fa-mars-stroke::before { + content: "\f229"; } + +.fa-vial::before { + content: "\f492"; } + +.fa-gauge::before { + content: "\f624"; } + +.fa-dashboard::before { + content: "\f624"; } + +.fa-gauge-med::before { + content: "\f624"; } + +.fa-tachometer-alt-average::before { + content: "\f624"; } + +.fa-wand-magic-sparkles::before { + content: "\e2ca"; } + +.fa-magic-wand-sparkles::before { + content: "\e2ca"; } + +.fa-e::before { + content: "\45"; } + +.fa-pen-clip::before { + content: "\f305"; } + +.fa-pen-alt::before { + content: "\f305"; } + +.fa-bridge-circle-exclamation::before { + content: "\e4ca"; } + +.fa-user::before { + content: "\f007"; } + +.fa-school-circle-check::before { + content: "\e56b"; } + +.fa-dumpster::before { + content: "\f793"; } + +.fa-van-shuttle::before { + content: "\f5b6"; } + +.fa-shuttle-van::before { + content: "\f5b6"; } + +.fa-building-user::before { + content: "\e4da"; } + +.fa-square-caret-left::before { + content: "\f191"; } + +.fa-caret-square-left::before { + content: "\f191"; } + +.fa-highlighter::before { + content: "\f591"; } + +.fa-key::before { + content: "\f084"; } + +.fa-bullhorn::before { + content: "\f0a1"; } + +.fa-globe::before { + content: "\f0ac"; } + +.fa-synagogue::before { + content: "\f69b"; } + +.fa-person-half-dress::before { + content: "\e548"; } + +.fa-road-bridge::before { + content: "\e563"; } + +.fa-location-arrow::before { + content: "\f124"; } + +.fa-c::before { + content: "\43"; } + +.fa-tablet-button::before { + content: "\f10a"; } + +.fa-building-lock::before { + content: "\e4d6"; } + +.fa-pizza-slice::before { + content: "\f818"; } + +.fa-money-bill-wave::before { + content: "\f53a"; } + +.fa-chart-area::before { + content: "\f1fe"; } + +.fa-area-chart::before { + content: "\f1fe"; } + +.fa-house-flag::before { + content: "\e50d"; } + +.fa-person-circle-minus::before { + content: "\e540"; } + +.fa-ban::before { + content: "\f05e"; } + +.fa-cancel::before { + content: "\f05e"; } + +.fa-camera-rotate::before { + content: "\e0d8"; } + +.fa-spray-can-sparkles::before { + content: "\f5d0"; } + +.fa-air-freshener::before { + content: "\f5d0"; } + +.fa-star::before { + content: "\f005"; } + +.fa-repeat::before { + content: "\f363"; } + +.fa-cross::before { + content: "\f654"; } + +.fa-box::before { + content: "\f466"; } + +.fa-venus-mars::before { + content: "\f228"; } + +.fa-arrow-pointer::before { + content: "\f245"; } + +.fa-mouse-pointer::before { + content: "\f245"; } + +.fa-maximize::before { + content: "\f31e"; } + +.fa-expand-arrows-alt::before { + content: "\f31e"; } + +.fa-charging-station::before { + content: "\f5e7"; } + +.fa-shapes::before { + content: "\f61f"; } + +.fa-triangle-circle-square::before { + content: "\f61f"; } + +.fa-shuffle::before { + content: "\f074"; } + +.fa-random::before { + content: "\f074"; } + +.fa-person-running::before { + content: "\f70c"; } + +.fa-running::before { + content: "\f70c"; } + +.fa-mobile-retro::before { + content: "\e527"; } + +.fa-grip-lines-vertical::before { + content: "\f7a5"; } + +.fa-spider::before { + content: "\f717"; } + +.fa-hands-bound::before { + content: "\e4f9"; } + +.fa-file-invoice-dollar::before { + content: "\f571"; } + +.fa-plane-circle-exclamation::before { + content: "\e556"; } + +.fa-x-ray::before { + content: "\f497"; } + +.fa-spell-check::before { + content: "\f891"; } + +.fa-slash::before { + content: "\f715"; } + +.fa-computer-mouse::before { + content: "\f8cc"; } + +.fa-mouse::before { + content: "\f8cc"; } + +.fa-arrow-right-to-bracket::before { + content: "\f090"; } + +.fa-sign-in::before { + content: "\f090"; } + +.fa-shop-slash::before { + content: "\e070"; } + +.fa-store-alt-slash::before { + content: "\e070"; } + +.fa-server::before { + content: "\f233"; } + +.fa-virus-covid-slash::before { + content: "\e4a9"; } + +.fa-shop-lock::before { + content: "\e4a5"; } + +.fa-hourglass-start::before { + content: "\f251"; } + +.fa-hourglass-1::before { + content: "\f251"; } + +.fa-blender-phone::before { + content: "\f6b6"; } + +.fa-building-wheat::before { + content: "\e4db"; } + +.fa-person-breastfeeding::before { + content: "\e53a"; } + +.fa-right-to-bracket::before { + content: "\f2f6"; } + +.fa-sign-in-alt::before { + content: "\f2f6"; } + +.fa-venus::before { + content: "\f221"; } + +.fa-passport::before { + content: "\f5ab"; } + +.fa-heart-pulse::before { + content: "\f21e"; } + +.fa-heartbeat::before { + content: "\f21e"; } + +.fa-people-carry-box::before { + content: "\f4ce"; } + +.fa-people-carry::before { + content: "\f4ce"; } + +.fa-temperature-high::before { + content: "\f769"; } + +.fa-microchip::before { + content: "\f2db"; } + +.fa-crown::before { + content: "\f521"; } + +.fa-weight-hanging::before { + content: "\f5cd"; } + +.fa-xmarks-lines::before { + content: "\e59a"; } + +.fa-file-prescription::before { + content: "\f572"; } + +.fa-weight-scale::before { + content: "\f496"; } + +.fa-weight::before { + content: "\f496"; } + +.fa-user-group::before { + content: "\f500"; } + +.fa-user-friends::before { + content: "\f500"; } + +.fa-arrow-up-a-z::before { + content: "\f15e"; } + +.fa-sort-alpha-up::before { + content: "\f15e"; } + +.fa-chess-knight::before { + content: "\f441"; } + +.fa-face-laugh-squint::before { + content: "\f59b"; } + +.fa-laugh-squint::before { + content: "\f59b"; } + +.fa-wheelchair::before { + content: "\f193"; } + +.fa-circle-arrow-up::before { + content: "\f0aa"; } + +.fa-arrow-circle-up::before { + content: "\f0aa"; } + +.fa-toggle-on::before { + content: "\f205"; } + +.fa-person-walking::before { + content: "\f554"; } + +.fa-walking::before { + content: "\f554"; } + +.fa-l::before { + content: "\4c"; } + +.fa-fire::before { + content: "\f06d"; } + +.fa-bed-pulse::before { + content: "\f487"; } + +.fa-procedures::before { + content: "\f487"; } + +.fa-shuttle-space::before { + content: "\f197"; } + +.fa-space-shuttle::before { + content: "\f197"; } + +.fa-face-laugh::before { + content: "\f599"; } + +.fa-laugh::before { + content: "\f599"; } + +.fa-folder-open::before { + content: "\f07c"; } + +.fa-heart-circle-plus::before { + content: "\e500"; } + +.fa-code-fork::before { + content: "\e13b"; } + +.fa-city::before { + content: "\f64f"; } + +.fa-microphone-lines::before { + content: "\f3c9"; } + +.fa-microphone-alt::before { + content: "\f3c9"; } + +.fa-pepper-hot::before { + content: "\f816"; } + +.fa-unlock::before { + content: "\f09c"; } + +.fa-colon-sign::before { + content: "\e140"; } + +.fa-headset::before { + content: "\f590"; } + +.fa-store-slash::before { + content: "\e071"; } + +.fa-road-circle-xmark::before { + content: "\e566"; } + +.fa-user-minus::before { + content: "\f503"; } + +.fa-mars-stroke-up::before { + content: "\f22a"; } + +.fa-mars-stroke-v::before { + content: "\f22a"; } + +.fa-champagne-glasses::before { + content: "\f79f"; } + +.fa-glass-cheers::before { + content: "\f79f"; } + +.fa-clipboard::before { + content: "\f328"; } + +.fa-house-circle-exclamation::before { + content: "\e50a"; } + +.fa-file-arrow-up::before { + content: "\f574"; } + +.fa-file-upload::before { + content: "\f574"; } + +.fa-wifi::before { + content: "\f1eb"; } + +.fa-wifi-3::before { + content: "\f1eb"; } + +.fa-wifi-strong::before { + content: "\f1eb"; } + +.fa-bath::before { + content: "\f2cd"; } + +.fa-bathtub::before { + content: "\f2cd"; } + +.fa-underline::before { + content: "\f0cd"; } + +.fa-user-pen::before { + content: "\f4ff"; } + +.fa-user-edit::before { + content: "\f4ff"; } + +.fa-signature::before { + content: "\f5b7"; } + +.fa-stroopwafel::before { + content: "\f551"; } + +.fa-bold::before { + content: "\f032"; } + +.fa-anchor-lock::before { + content: "\e4ad"; } + +.fa-building-ngo::before { + content: "\e4d7"; } + +.fa-manat-sign::before { + content: "\e1d5"; } + +.fa-not-equal::before { + content: "\f53e"; } + +.fa-border-top-left::before { + content: "\f853"; } + +.fa-border-style::before { + content: "\f853"; } + +.fa-map-location-dot::before { + content: "\f5a0"; } + +.fa-map-marked-alt::before { + content: "\f5a0"; } + +.fa-jedi::before { + content: "\f669"; } + +.fa-square-poll-vertical::before { + content: "\f681"; } + +.fa-poll::before { + content: "\f681"; } + +.fa-mug-hot::before { + content: "\f7b6"; } + +.fa-car-battery::before { + content: "\f5df"; } + +.fa-battery-car::before { + content: "\f5df"; } + +.fa-gift::before { + content: "\f06b"; } + +.fa-dice-two::before { + content: "\f528"; } + +.fa-chess-queen::before { + content: "\f445"; } + +.fa-glasses::before { + content: "\f530"; } + +.fa-chess-board::before { + content: "\f43c"; } + +.fa-building-circle-check::before { + content: "\e4d2"; } + +.fa-person-chalkboard::before { + content: "\e53d"; } + +.fa-mars-stroke-right::before { + content: "\f22b"; } + +.fa-mars-stroke-h::before { + content: "\f22b"; } + +.fa-hand-back-fist::before { + content: "\f255"; } + +.fa-hand-rock::before { + content: "\f255"; } + +.fa-square-caret-up::before { + content: "\f151"; } + +.fa-caret-square-up::before { + content: "\f151"; } + +.fa-cloud-showers-water::before { + content: "\e4e4"; } + +.fa-chart-bar::before { + content: "\f080"; } + +.fa-bar-chart::before { + content: "\f080"; } + +.fa-hands-bubbles::before { + content: "\e05e"; } + +.fa-hands-wash::before { + content: "\e05e"; } + +.fa-less-than-equal::before { + content: "\f537"; } + +.fa-train::before { + content: "\f238"; } + +.fa-eye-low-vision::before { + content: "\f2a8"; } + +.fa-low-vision::before { + content: "\f2a8"; } + +.fa-crow::before { + content: "\f520"; } + +.fa-sailboat::before { + content: "\e445"; } + +.fa-window-restore::before { + content: "\f2d2"; } + +.fa-square-plus::before { + content: "\f0fe"; } + +.fa-plus-square::before { + content: "\f0fe"; } + +.fa-torii-gate::before { + content: "\f6a1"; } + +.fa-frog::before { + content: "\f52e"; } + +.fa-bucket::before { + content: "\e4cf"; } + +.fa-image::before { + content: "\f03e"; } + +.fa-microphone::before { + content: "\f130"; } + +.fa-cow::before { + content: "\f6c8"; } + +.fa-caret-up::before { + content: "\f0d8"; } + +.fa-screwdriver::before { + content: "\f54a"; } + +.fa-folder-closed::before { + content: "\e185"; } + +.fa-house-tsunami::before { + content: "\e515"; } + +.fa-square-nfi::before { + content: "\e576"; } + +.fa-arrow-up-from-ground-water::before { + content: "\e4b5"; } + +.fa-martini-glass::before { + content: "\f57b"; } + +.fa-glass-martini-alt::before { + content: "\f57b"; } + +.fa-rotate-left::before { + content: "\f2ea"; } + +.fa-rotate-back::before { + content: "\f2ea"; } + +.fa-rotate-backward::before { + content: "\f2ea"; } + +.fa-undo-alt::before { + content: "\f2ea"; } + +.fa-table-columns::before { + content: "\f0db"; } + +.fa-columns::before { + content: "\f0db"; } + +.fa-lemon::before { + content: "\f094"; } + +.fa-head-side-mask::before { + content: "\e063"; } + +.fa-handshake::before { + content: "\f2b5"; } + +.fa-gem::before { + content: "\f3a5"; } + +.fa-dolly::before { + content: "\f472"; } + +.fa-dolly-box::before { + content: "\f472"; } + +.fa-smoking::before { + content: "\f48d"; } + +.fa-minimize::before { + content: "\f78c"; } + +.fa-compress-arrows-alt::before { + content: "\f78c"; } + +.fa-monument::before { + content: "\f5a6"; } + +.fa-snowplow::before { + content: "\f7d2"; } + +.fa-angles-right::before { + content: "\f101"; } + +.fa-angle-double-right::before { + content: "\f101"; } + +.fa-cannabis::before { + content: "\f55f"; } + +.fa-circle-play::before { + content: "\f144"; } + +.fa-play-circle::before { + content: "\f144"; } + +.fa-tablets::before { + content: "\f490"; } + +.fa-ethernet::before { + content: "\f796"; } + +.fa-euro-sign::before { + content: "\f153"; } + +.fa-eur::before { + content: "\f153"; } + +.fa-euro::before { + content: "\f153"; } + +.fa-chair::before { + content: "\f6c0"; } + +.fa-circle-check::before { + content: "\f058"; } + +.fa-check-circle::before { + content: "\f058"; } + +.fa-circle-stop::before { + content: "\f28d"; } + +.fa-stop-circle::before { + content: "\f28d"; } + +.fa-compass-drafting::before { + content: "\f568"; } + +.fa-drafting-compass::before { + content: "\f568"; } + +.fa-plate-wheat::before { + content: "\e55a"; } + +.fa-icicles::before { + content: "\f7ad"; } + +.fa-person-shelter::before { + content: "\e54f"; } + +.fa-neuter::before { + content: "\f22c"; } + +.fa-id-badge::before { + content: "\f2c1"; } + +.fa-marker::before { + content: "\f5a1"; } + +.fa-face-laugh-beam::before { + content: "\f59a"; } + +.fa-laugh-beam::before { + content: "\f59a"; } + +.fa-helicopter-symbol::before { + content: "\e502"; } + +.fa-universal-access::before { + content: "\f29a"; } + +.fa-circle-chevron-up::before { + content: "\f139"; } + +.fa-chevron-circle-up::before { + content: "\f139"; } + +.fa-lari-sign::before { + content: "\e1c8"; } + +.fa-volcano::before { + content: "\f770"; } + +.fa-person-walking-dashed-line-arrow-right::before { + content: "\e553"; } + +.fa-sterling-sign::before { + content: "\f154"; } + +.fa-gbp::before { + content: "\f154"; } + +.fa-pound-sign::before { + content: "\f154"; } + +.fa-viruses::before { + content: "\e076"; } + +.fa-square-person-confined::before { + content: "\e577"; } + +.fa-user-tie::before { + content: "\f508"; } + +.fa-arrow-down-long::before { + content: "\f175"; } + +.fa-long-arrow-down::before { + content: "\f175"; } + +.fa-tent-arrow-down-to-line::before { + content: "\e57e"; } + +.fa-certificate::before { + content: "\f0a3"; } + +.fa-reply-all::before { + content: "\f122"; } + +.fa-mail-reply-all::before { + content: "\f122"; } + +.fa-suitcase::before { + content: "\f0f2"; } + +.fa-person-skating::before { + content: "\f7c5"; } + +.fa-skating::before { + content: "\f7c5"; } + +.fa-filter-circle-dollar::before { + content: "\f662"; } + +.fa-funnel-dollar::before { + content: "\f662"; } + +.fa-camera-retro::before { + content: "\f083"; } + +.fa-circle-arrow-down::before { + content: "\f0ab"; } + +.fa-arrow-circle-down::before { + content: "\f0ab"; } + +.fa-file-import::before { + content: "\f56f"; } + +.fa-arrow-right-to-file::before { + content: "\f56f"; } + +.fa-square-arrow-up-right::before { + content: "\f14c"; } + +.fa-external-link-square::before { + content: "\f14c"; } + +.fa-box-open::before { + content: "\f49e"; } + +.fa-scroll::before { + content: "\f70e"; } + +.fa-spa::before { + content: "\f5bb"; } + +.fa-location-pin-lock::before { + content: "\e51f"; } + +.fa-pause::before { + content: "\f04c"; } + +.fa-hill-avalanche::before { + content: "\e507"; } + +.fa-temperature-empty::before { + content: "\f2cb"; } + +.fa-temperature-0::before { + content: "\f2cb"; } + +.fa-thermometer-0::before { + content: "\f2cb"; } + +.fa-thermometer-empty::before { + content: "\f2cb"; } + +.fa-bomb::before { + content: "\f1e2"; } + +.fa-registered::before { + content: "\f25d"; } + +.fa-address-card::before { + content: "\f2bb"; } + +.fa-contact-card::before { + content: "\f2bb"; } + +.fa-vcard::before { + content: "\f2bb"; } + +.fa-scale-unbalanced-flip::before { + content: "\f516"; } + +.fa-balance-scale-right::before { + content: "\f516"; } + +.fa-subscript::before { + content: "\f12c"; } + +.fa-diamond-turn-right::before { + content: "\f5eb"; } + +.fa-directions::before { + content: "\f5eb"; } + +.fa-burst::before { + content: "\e4dc"; } + +.fa-house-laptop::before { + content: "\e066"; } + +.fa-laptop-house::before { + content: "\e066"; } + +.fa-face-tired::before { + content: "\f5c8"; } + +.fa-tired::before { + content: "\f5c8"; } + +.fa-money-bills::before { + content: "\e1f3"; } + +.fa-smog::before { + content: "\f75f"; } + +.fa-crutch::before { + content: "\f7f7"; } + +.fa-cloud-arrow-up::before { + content: "\f0ee"; } + +.fa-cloud-upload::before { + content: "\f0ee"; } + +.fa-cloud-upload-alt::before { + content: "\f0ee"; } + +.fa-palette::before { + content: "\f53f"; } + +.fa-arrows-turn-right::before { + content: "\e4c0"; } + +.fa-vest::before { + content: "\e085"; } + +.fa-ferry::before { + content: "\e4ea"; } + +.fa-arrows-down-to-people::before { + content: "\e4b9"; } + +.fa-seedling::before { + content: "\f4d8"; } + +.fa-sprout::before { + content: "\f4d8"; } + +.fa-left-right::before { + content: "\f337"; } + +.fa-arrows-alt-h::before { + content: "\f337"; } + +.fa-boxes-packing::before { + content: "\e4c7"; } + +.fa-circle-arrow-left::before { + content: "\f0a8"; } + +.fa-arrow-circle-left::before { + content: "\f0a8"; } + +.fa-group-arrows-rotate::before { + content: "\e4f6"; } + +.fa-bowl-food::before { + content: "\e4c6"; } + +.fa-candy-cane::before { + content: "\f786"; } + +.fa-arrow-down-wide-short::before { + content: "\f160"; } + +.fa-sort-amount-asc::before { + content: "\f160"; } + +.fa-sort-amount-down::before { + content: "\f160"; } + +.fa-cloud-bolt::before { + content: "\f76c"; } + +.fa-thunderstorm::before { + content: "\f76c"; } + +.fa-text-slash::before { + content: "\f87d"; } + +.fa-remove-format::before { + content: "\f87d"; } + +.fa-face-smile-wink::before { + content: "\f4da"; } + +.fa-smile-wink::before { + content: "\f4da"; } + +.fa-file-word::before { + content: "\f1c2"; } + +.fa-file-powerpoint::before { + content: "\f1c4"; } + +.fa-arrows-left-right::before { + content: "\f07e"; } + +.fa-arrows-h::before { + content: "\f07e"; } + +.fa-house-lock::before { + content: "\e510"; } + +.fa-cloud-arrow-down::before { + content: "\f0ed"; } + +.fa-cloud-download::before { + content: "\f0ed"; } + +.fa-cloud-download-alt::before { + content: "\f0ed"; } + +.fa-children::before { + content: "\e4e1"; } + +.fa-chalkboard::before { + content: "\f51b"; } + +.fa-blackboard::before { + content: "\f51b"; } + +.fa-user-large-slash::before { + content: "\f4fa"; } + +.fa-user-alt-slash::before { + content: "\f4fa"; } + +.fa-envelope-open::before { + content: "\f2b6"; } + +.fa-handshake-simple-slash::before { + content: "\e05f"; } + +.fa-handshake-alt-slash::before { + content: "\e05f"; } + +.fa-mattress-pillow::before { + content: "\e525"; } + +.fa-guarani-sign::before { + content: "\e19a"; } + +.fa-arrows-rotate::before { + content: "\f021"; } + +.fa-refresh::before { + content: "\f021"; } + +.fa-sync::before { + content: "\f021"; } + +.fa-fire-extinguisher::before { + content: "\f134"; } + +.fa-cruzeiro-sign::before { + content: "\e152"; } + +.fa-greater-than-equal::before { + content: "\f532"; } + +.fa-shield-halved::before { + content: "\f3ed"; } + +.fa-shield-alt::before { + content: "\f3ed"; } + +.fa-book-atlas::before { + content: "\f558"; } + +.fa-atlas::before { + content: "\f558"; } + +.fa-virus::before { + content: "\e074"; } + +.fa-envelope-circle-check::before { + content: "\e4e8"; } + +.fa-layer-group::before { + content: "\f5fd"; } + +.fa-arrows-to-dot::before { + content: "\e4be"; } + +.fa-archway::before { + content: "\f557"; } + +.fa-heart-circle-check::before { + content: "\e4fd"; } + +.fa-house-chimney-crack::before { + content: "\f6f1"; } + +.fa-house-damage::before { + content: "\f6f1"; } + +.fa-file-zipper::before { + content: "\f1c6"; } + +.fa-file-archive::before { + content: "\f1c6"; } + +.fa-square::before { + content: "\f0c8"; } + +.fa-martini-glass-empty::before { + content: "\f000"; } + +.fa-glass-martini::before { + content: "\f000"; } + +.fa-couch::before { + content: "\f4b8"; } + +.fa-cedi-sign::before { + content: "\e0df"; } + +.fa-italic::before { + content: "\f033"; } + +.fa-church::before { + content: "\f51d"; } + +.fa-comments-dollar::before { + content: "\f653"; } + +.fa-democrat::before { + content: "\f747"; } + +.fa-z::before { + content: "\5a"; } + +.fa-person-skiing::before { + content: "\f7c9"; } + +.fa-skiing::before { + content: "\f7c9"; } + +.fa-road-lock::before { + content: "\e567"; } + +.fa-a::before { + content: "\41"; } + +.fa-temperature-arrow-down::before { + content: "\e03f"; } + +.fa-temperature-down::before { + content: "\e03f"; } + +.fa-feather-pointed::before { + content: "\f56b"; } + +.fa-feather-alt::before { + content: "\f56b"; } + +.fa-p::before { + content: "\50"; } + +.fa-snowflake::before { + content: "\f2dc"; } + +.fa-newspaper::before { + content: "\f1ea"; } + +.fa-rectangle-ad::before { + content: "\f641"; } + +.fa-ad::before { + content: "\f641"; } + +.fa-circle-arrow-right::before { + content: "\f0a9"; } + +.fa-arrow-circle-right::before { + content: "\f0a9"; } + +.fa-filter-circle-xmark::before { + content: "\e17b"; } + +.fa-locust::before { + content: "\e520"; } + +.fa-sort::before { + content: "\f0dc"; } + +.fa-unsorted::before { + content: "\f0dc"; } + +.fa-list-ol::before { + content: "\f0cb"; } + +.fa-list-1-2::before { + content: "\f0cb"; } + +.fa-list-numeric::before { + content: "\f0cb"; } + +.fa-person-dress-burst::before { + content: "\e544"; } + +.fa-money-check-dollar::before { + content: "\f53d"; } + +.fa-money-check-alt::before { + content: "\f53d"; } + +.fa-vector-square::before { + content: "\f5cb"; } + +.fa-bread-slice::before { + content: "\f7ec"; } + +.fa-language::before { + content: "\f1ab"; } + +.fa-face-kiss-wink-heart::before { + content: "\f598"; } + +.fa-kiss-wink-heart::before { + content: "\f598"; } + +.fa-filter::before { + content: "\f0b0"; } + +.fa-question::before { + content: "\3f"; } + +.fa-file-signature::before { + content: "\f573"; } + +.fa-up-down-left-right::before { + content: "\f0b2"; } + +.fa-arrows-alt::before { + content: "\f0b2"; } + +.fa-house-chimney-user::before { + content: "\e065"; } + +.fa-hand-holding-heart::before { + content: "\f4be"; } + +.fa-puzzle-piece::before { + content: "\f12e"; } + +.fa-money-check::before { + content: "\f53c"; } + +.fa-star-half-stroke::before { + content: "\f5c0"; } + +.fa-star-half-alt::before { + content: "\f5c0"; } + +.fa-code::before { + content: "\f121"; } + +.fa-whiskey-glass::before { + content: "\f7a0"; } + +.fa-glass-whiskey::before { + content: "\f7a0"; } + +.fa-building-circle-exclamation::before { + content: "\e4d3"; } + +.fa-magnifying-glass-chart::before { + content: "\e522"; } + +.fa-arrow-up-right-from-square::before { + content: "\f08e"; } + +.fa-external-link::before { + content: "\f08e"; } + +.fa-cubes-stacked::before { + content: "\e4e6"; } + +.fa-won-sign::before { + content: "\f159"; } + +.fa-krw::before { + content: "\f159"; } + +.fa-won::before { + content: "\f159"; } + +.fa-virus-covid::before { + content: "\e4a8"; } + +.fa-austral-sign::before { + content: "\e0a9"; } + +.fa-f::before { + content: "\46"; } + +.fa-leaf::before { + content: "\f06c"; } + +.fa-road::before { + content: "\f018"; } + +.fa-taxi::before { + content: "\f1ba"; } + +.fa-cab::before { + content: "\f1ba"; } + +.fa-person-circle-plus::before { + content: "\e541"; } + +.fa-chart-pie::before { + content: "\f200"; } + +.fa-pie-chart::before { + content: "\f200"; } + +.fa-bolt-lightning::before { + content: "\e0b7"; } + +.fa-sack-xmark::before { + content: "\e56a"; } + +.fa-file-excel::before { + content: "\f1c3"; } + +.fa-file-contract::before { + content: "\f56c"; } + +.fa-fish-fins::before { + content: "\e4f2"; } + +.fa-building-flag::before { + content: "\e4d5"; } + +.fa-face-grin-beam::before { + content: "\f582"; } + +.fa-grin-beam::before { + content: "\f582"; } + +.fa-object-ungroup::before { + content: "\f248"; } + +.fa-poop::before { + content: "\f619"; } + +.fa-location-pin::before { + content: "\f041"; } + +.fa-map-marker::before { + content: "\f041"; } + +.fa-kaaba::before { + content: "\f66b"; } + +.fa-toilet-paper::before { + content: "\f71e"; } + +.fa-helmet-safety::before { + content: "\f807"; } + +.fa-hard-hat::before { + content: "\f807"; } + +.fa-hat-hard::before { + content: "\f807"; } + +.fa-eject::before { + content: "\f052"; } + +.fa-circle-right::before { + content: "\f35a"; } + +.fa-arrow-alt-circle-right::before { + content: "\f35a"; } + +.fa-plane-circle-check::before { + content: "\e555"; } + +.fa-face-rolling-eyes::before { + content: "\f5a5"; } + +.fa-meh-rolling-eyes::before { + content: "\f5a5"; } + +.fa-object-group::before { + content: "\f247"; } + +.fa-chart-line::before { + content: "\f201"; } + +.fa-line-chart::before { + content: "\f201"; } + +.fa-mask-ventilator::before { + content: "\e524"; } + +.fa-arrow-right::before { + content: "\f061"; } + +.fa-signs-post::before { + content: "\f277"; } + +.fa-map-signs::before { + content: "\f277"; } + +.fa-cash-register::before { + content: "\f788"; } + +.fa-person-circle-question::before { + content: "\e542"; } + +.fa-h::before { + content: "\48"; } + +.fa-tarp::before { + content: "\e57b"; } + +.fa-screwdriver-wrench::before { + content: "\f7d9"; } + +.fa-tools::before { + content: "\f7d9"; } + +.fa-arrows-to-eye::before { + content: "\e4bf"; } + +.fa-plug-circle-bolt::before { + content: "\e55b"; } + +.fa-heart::before { + content: "\f004"; } + +.fa-mars-and-venus::before { + content: "\f224"; } + +.fa-house-user::before { + content: "\e1b0"; } + +.fa-home-user::before { + content: "\e1b0"; } + +.fa-dumpster-fire::before { + content: "\f794"; } + +.fa-house-crack::before { + content: "\e3b1"; } + +.fa-martini-glass-citrus::before { + content: "\f561"; } + +.fa-cocktail::before { + content: "\f561"; } + +.fa-face-surprise::before { + content: "\f5c2"; } + +.fa-surprise::before { + content: "\f5c2"; } + +.fa-bottle-water::before { + content: "\e4c5"; } + +.fa-circle-pause::before { + content: "\f28b"; } + +.fa-pause-circle::before { + content: "\f28b"; } + +.fa-toilet-paper-slash::before { + content: "\e072"; } + +.fa-apple-whole::before { + content: "\f5d1"; } + +.fa-apple-alt::before { + content: "\f5d1"; } + +.fa-kitchen-set::before { + content: "\e51a"; } + +.fa-r::before { + content: "\52"; } + +.fa-temperature-quarter::before { + content: "\f2ca"; } + +.fa-temperature-1::before { + content: "\f2ca"; } + +.fa-thermometer-1::before { + content: "\f2ca"; } + +.fa-thermometer-quarter::before { + content: "\f2ca"; } + +.fa-cube::before { + content: "\f1b2"; } + +.fa-bitcoin-sign::before { + content: "\e0b4"; } + +.fa-shield-dog::before { + content: "\e573"; } + +.fa-solar-panel::before { + content: "\f5ba"; } + +.fa-lock-open::before { + content: "\f3c1"; } + +.fa-elevator::before { + content: "\e16d"; } + +.fa-money-bill-transfer::before { + content: "\e528"; } + +.fa-money-bill-trend-up::before { + content: "\e529"; } + +.fa-house-flood-water-circle-arrow-right::before { + content: "\e50f"; } + +.fa-square-poll-horizontal::before { + content: "\f682"; } + +.fa-poll-h::before { + content: "\f682"; } + +.fa-circle::before { + content: "\f111"; } + +.fa-backward-fast::before { + content: "\f049"; } + +.fa-fast-backward::before { + content: "\f049"; } + +.fa-recycle::before { + content: "\f1b8"; } + +.fa-user-astronaut::before { + content: "\f4fb"; } + +.fa-plane-slash::before { + content: "\e069"; } + +.fa-trademark::before { + content: "\f25c"; } + +.fa-basketball::before { + content: "\f434"; } + +.fa-basketball-ball::before { + content: "\f434"; } + +.fa-satellite-dish::before { + content: "\f7c0"; } + +.fa-circle-up::before { + content: "\f35b"; } + +.fa-arrow-alt-circle-up::before { + content: "\f35b"; } + +.fa-mobile-screen-button::before { + content: "\f3cd"; } + +.fa-mobile-alt::before { + content: "\f3cd"; } + +.fa-volume-high::before { + content: "\f028"; } + +.fa-volume-up::before { + content: "\f028"; } + +.fa-users-rays::before { + content: "\e593"; } + +.fa-wallet::before { + content: "\f555"; } + +.fa-clipboard-check::before { + content: "\f46c"; } + +.fa-file-audio::before { + content: "\f1c7"; } + +.fa-burger::before { + content: "\f805"; } + +.fa-hamburger::before { + content: "\f805"; } + +.fa-wrench::before { + content: "\f0ad"; } + +.fa-bugs::before { + content: "\e4d0"; } + +.fa-rupee-sign::before { + content: "\f156"; } + +.fa-rupee::before { + content: "\f156"; } + +.fa-file-image::before { + content: "\f1c5"; } + +.fa-circle-question::before { + content: "\f059"; } + +.fa-question-circle::before { + content: "\f059"; } + +.fa-plane-departure::before { + content: "\f5b0"; } + +.fa-handshake-slash::before { + content: "\e060"; } + +.fa-book-bookmark::before { + content: "\e0bb"; } + +.fa-code-branch::before { + content: "\f126"; } + +.fa-hat-cowboy::before { + content: "\f8c0"; } + +.fa-bridge::before { + content: "\e4c8"; } + +.fa-phone-flip::before { + content: "\f879"; } + +.fa-phone-alt::before { + content: "\f879"; } + +.fa-truck-front::before { + content: "\e2b7"; } + +.fa-cat::before { + content: "\f6be"; } + +.fa-anchor-circle-exclamation::before { + content: "\e4ab"; } + +.fa-truck-field::before { + content: "\e58d"; } + +.fa-route::before { + content: "\f4d7"; } + +.fa-clipboard-question::before { + content: "\e4e3"; } + +.fa-panorama::before { + content: "\e209"; } + +.fa-comment-medical::before { + content: "\f7f5"; } + +.fa-teeth-open::before { + content: "\f62f"; } + +.fa-file-circle-minus::before { + content: "\e4ed"; } + +.fa-tags::before { + content: "\f02c"; } + +.fa-wine-glass::before { + content: "\f4e3"; } + +.fa-forward-fast::before { + content: "\f050"; } + +.fa-fast-forward::before { + content: "\f050"; } + +.fa-face-meh-blank::before { + content: "\f5a4"; } + +.fa-meh-blank::before { + content: "\f5a4"; } + +.fa-square-parking::before { + content: "\f540"; } + +.fa-parking::before { + content: "\f540"; } + +.fa-house-signal::before { + content: "\e012"; } + +.fa-bars-progress::before { + content: "\f828"; } + +.fa-tasks-alt::before { + content: "\f828"; } + +.fa-faucet-drip::before { + content: "\e006"; } + +.fa-cart-flatbed::before { + content: "\f474"; } + +.fa-dolly-flatbed::before { + content: "\f474"; } + +.fa-ban-smoking::before { + content: "\f54d"; } + +.fa-smoking-ban::before { + content: "\f54d"; } + +.fa-terminal::before { + content: "\f120"; } + +.fa-mobile-button::before { + content: "\f10b"; } + +.fa-house-medical-flag::before { + content: "\e514"; } + +.fa-basket-shopping::before { + content: "\f291"; } + +.fa-shopping-basket::before { + content: "\f291"; } + +.fa-tape::before { + content: "\f4db"; } + +.fa-bus-simple::before { + content: "\f55e"; } + +.fa-bus-alt::before { + content: "\f55e"; } + +.fa-eye::before { + content: "\f06e"; } + +.fa-face-sad-cry::before { + content: "\f5b3"; } + +.fa-sad-cry::before { + content: "\f5b3"; } + +.fa-audio-description::before { + content: "\f29e"; } + +.fa-person-military-to-person::before { + content: "\e54c"; } + +.fa-file-shield::before { + content: "\e4f0"; } + +.fa-user-slash::before { + content: "\f506"; } + +.fa-pen::before { + content: "\f304"; } + +.fa-tower-observation::before { + content: "\e586"; } + +.fa-file-code::before { + content: "\f1c9"; } + +.fa-signal::before { + content: "\f012"; } + +.fa-signal-5::before { + content: "\f012"; } + +.fa-signal-perfect::before { + content: "\f012"; } + +.fa-bus::before { + content: "\f207"; } + +.fa-heart-circle-xmark::before { + content: "\e501"; } + +.fa-house-chimney::before { + content: "\e3af"; } + +.fa-home-lg::before { + content: "\e3af"; } + +.fa-window-maximize::before { + content: "\f2d0"; } + +.fa-face-frown::before { + content: "\f119"; } + +.fa-frown::before { + content: "\f119"; } + +.fa-prescription::before { + content: "\f5b1"; } + +.fa-shop::before { + content: "\f54f"; } + +.fa-store-alt::before { + content: "\f54f"; } + +.fa-floppy-disk::before { + content: "\f0c7"; } + +.fa-save::before { + content: "\f0c7"; } + +.fa-vihara::before { + content: "\f6a7"; } + +.fa-scale-unbalanced::before { + content: "\f515"; } + +.fa-balance-scale-left::before { + content: "\f515"; } + +.fa-sort-up::before { + content: "\f0de"; } + +.fa-sort-asc::before { + content: "\f0de"; } + +.fa-comment-dots::before { + content: "\f4ad"; } + +.fa-commenting::before { + content: "\f4ad"; } + +.fa-plant-wilt::before { + content: "\e5aa"; } + +.fa-diamond::before { + content: "\f219"; } + +.fa-face-grin-squint::before { + content: "\f585"; } + +.fa-grin-squint::before { + content: "\f585"; } + +.fa-hand-holding-dollar::before { + content: "\f4c0"; } + +.fa-hand-holding-usd::before { + content: "\f4c0"; } + +.fa-bacterium::before { + content: "\e05a"; } + +.fa-hand-pointer::before { + content: "\f25a"; } + +.fa-drum-steelpan::before { + content: "\f56a"; } + +.fa-hand-scissors::before { + content: "\f257"; } + +.fa-hands-praying::before { + content: "\f684"; } + +.fa-praying-hands::before { + content: "\f684"; } + +.fa-arrow-rotate-right::before { + content: "\f01e"; } + +.fa-arrow-right-rotate::before { + content: "\f01e"; } + +.fa-arrow-rotate-forward::before { + content: "\f01e"; } + +.fa-redo::before { + content: "\f01e"; } + +.fa-biohazard::before { + content: "\f780"; } + +.fa-location-crosshairs::before { + content: "\f601"; } + +.fa-location::before { + content: "\f601"; } + +.fa-mars-double::before { + content: "\f227"; } + +.fa-child-dress::before { + content: "\e59c"; } + +.fa-users-between-lines::before { + content: "\e591"; } + +.fa-lungs-virus::before { + content: "\e067"; } + +.fa-face-grin-tears::before { + content: "\f588"; } + +.fa-grin-tears::before { + content: "\f588"; } + +.fa-phone::before { + content: "\f095"; } + +.fa-calendar-xmark::before { + content: "\f273"; } + +.fa-calendar-times::before { + content: "\f273"; } + +.fa-child-reaching::before { + content: "\e59d"; } + +.fa-head-side-virus::before { + content: "\e064"; } + +.fa-user-gear::before { + content: "\f4fe"; } + +.fa-user-cog::before { + content: "\f4fe"; } + +.fa-arrow-up-1-9::before { + content: "\f163"; } + +.fa-sort-numeric-up::before { + content: "\f163"; } + +.fa-door-closed::before { + content: "\f52a"; } + +.fa-shield-virus::before { + content: "\e06c"; } + +.fa-dice-six::before { + content: "\f526"; } + +.fa-mosquito-net::before { + content: "\e52c"; } + +.fa-bridge-water::before { + content: "\e4ce"; } + +.fa-person-booth::before { + content: "\f756"; } + +.fa-text-width::before { + content: "\f035"; } + +.fa-hat-wizard::before { + content: "\f6e8"; } + +.fa-pen-fancy::before { + content: "\f5ac"; } + +.fa-person-digging::before { + content: "\f85e"; } + +.fa-digging::before { + content: "\f85e"; } + +.fa-trash::before { + content: "\f1f8"; } + +.fa-gauge-simple::before { + content: "\f629"; } + +.fa-gauge-simple-med::before { + content: "\f629"; } + +.fa-tachometer-average::before { + content: "\f629"; } + +.fa-book-medical::before { + content: "\f7e6"; } + +.fa-poo::before { + content: "\f2fe"; } + +.fa-quote-right::before { + content: "\f10e"; } + +.fa-quote-right-alt::before { + content: "\f10e"; } + +.fa-shirt::before { + content: "\f553"; } + +.fa-t-shirt::before { + content: "\f553"; } + +.fa-tshirt::before { + content: "\f553"; } + +.fa-cubes::before { + content: "\f1b3"; } + +.fa-divide::before { + content: "\f529"; } + +.fa-tenge-sign::before { + content: "\f7d7"; } + +.fa-tenge::before { + content: "\f7d7"; } + +.fa-headphones::before { + content: "\f025"; } + +.fa-hands-holding::before { + content: "\f4c2"; } + +.fa-hands-clapping::before { + content: "\e1a8"; } + +.fa-republican::before { + content: "\f75e"; } + +.fa-arrow-left::before { + content: "\f060"; } + +.fa-person-circle-xmark::before { + content: "\e543"; } + +.fa-ruler::before { + content: "\f545"; } + +.fa-align-left::before { + content: "\f036"; } + +.fa-dice-d6::before { + content: "\f6d1"; } + +.fa-restroom::before { + content: "\f7bd"; } + +.fa-j::before { + content: "\4a"; } + +.fa-users-viewfinder::before { + content: "\e595"; } + +.fa-file-video::before { + content: "\f1c8"; } + +.fa-up-right-from-square::before { + content: "\f35d"; } + +.fa-external-link-alt::before { + content: "\f35d"; } + +.fa-table-cells::before { + content: "\f00a"; } + +.fa-th::before { + content: "\f00a"; } + +.fa-file-pdf::before { + content: "\f1c1"; } + +.fa-book-bible::before { + content: "\f647"; } + +.fa-bible::before { + content: "\f647"; } + +.fa-o::before { + content: "\4f"; } + +.fa-suitcase-medical::before { + content: "\f0fa"; } + +.fa-medkit::before { + content: "\f0fa"; } + +.fa-user-secret::before { + content: "\f21b"; } + +.fa-otter::before { + content: "\f700"; } + +.fa-person-dress::before { + content: "\f182"; } + +.fa-female::before { + content: "\f182"; } + +.fa-comment-dollar::before { + content: "\f651"; } + +.fa-business-time::before { + content: "\f64a"; } + +.fa-briefcase-clock::before { + content: "\f64a"; } + +.fa-table-cells-large::before { + content: "\f009"; } + +.fa-th-large::before { + content: "\f009"; } + +.fa-book-tanakh::before { + content: "\f827"; } + +.fa-tanakh::before { + content: "\f827"; } + +.fa-phone-volume::before { + content: "\f2a0"; } + +.fa-volume-control-phone::before { + content: "\f2a0"; } + +.fa-hat-cowboy-side::before { + content: "\f8c1"; } + +.fa-clipboard-user::before { + content: "\f7f3"; } + +.fa-child::before { + content: "\f1ae"; } + +.fa-lira-sign::before { + content: "\f195"; } + +.fa-satellite::before { + content: "\f7bf"; } + +.fa-plane-lock::before { + content: "\e558"; } + +.fa-tag::before { + content: "\f02b"; } + +.fa-comment::before { + content: "\f075"; } + +.fa-cake-candles::before { + content: "\f1fd"; } + +.fa-birthday-cake::before { + content: "\f1fd"; } + +.fa-cake::before { + content: "\f1fd"; } + +.fa-envelope::before { + content: "\f0e0"; } + +.fa-angles-up::before { + content: "\f102"; } + +.fa-angle-double-up::before { + content: "\f102"; } + +.fa-paperclip::before { + content: "\f0c6"; } + +.fa-arrow-right-to-city::before { + content: "\e4b3"; } + +.fa-ribbon::before { + content: "\f4d6"; } + +.fa-lungs::before { + content: "\f604"; } + +.fa-arrow-up-9-1::before { + content: "\f887"; } + +.fa-sort-numeric-up-alt::before { + content: "\f887"; } + +.fa-litecoin-sign::before { + content: "\e1d3"; } + +.fa-border-none::before { + content: "\f850"; } + +.fa-circle-nodes::before { + content: "\e4e2"; } + +.fa-parachute-box::before { + content: "\f4cd"; } + +.fa-indent::before { + content: "\f03c"; } + +.fa-truck-field-un::before { + content: "\e58e"; } + +.fa-hourglass::before { + content: "\f254"; } + +.fa-hourglass-empty::before { + content: "\f254"; } + +.fa-mountain::before { + content: "\f6fc"; } + +.fa-user-doctor::before { + content: "\f0f0"; } + +.fa-user-md::before { + content: "\f0f0"; } + +.fa-circle-info::before { + content: "\f05a"; } + +.fa-info-circle::before { + content: "\f05a"; } + +.fa-cloud-meatball::before { + content: "\f73b"; } + +.fa-camera::before { + content: "\f030"; } + +.fa-camera-alt::before { + content: "\f030"; } + +.fa-square-virus::before { + content: "\e578"; } + +.fa-meteor::before { + content: "\f753"; } + +.fa-car-on::before { + content: "\e4dd"; } + +.fa-sleigh::before { + content: "\f7cc"; } + +.fa-arrow-down-1-9::before { + content: "\f162"; } + +.fa-sort-numeric-asc::before { + content: "\f162"; } + +.fa-sort-numeric-down::before { + content: "\f162"; } + +.fa-hand-holding-droplet::before { + content: "\f4c1"; } + +.fa-hand-holding-water::before { + content: "\f4c1"; } + +.fa-water::before { + content: "\f773"; } + +.fa-calendar-check::before { + content: "\f274"; } + +.fa-braille::before { + content: "\f2a1"; } + +.fa-prescription-bottle-medical::before { + content: "\f486"; } + +.fa-prescription-bottle-alt::before { + content: "\f486"; } + +.fa-landmark::before { + content: "\f66f"; } + +.fa-truck::before { + content: "\f0d1"; } + +.fa-crosshairs::before { + content: "\f05b"; } + +.fa-person-cane::before { + content: "\e53c"; } + +.fa-tent::before { + content: "\e57d"; } + +.fa-vest-patches::before { + content: "\e086"; } + +.fa-check-double::before { + content: "\f560"; } + +.fa-arrow-down-a-z::before { + content: "\f15d"; } + +.fa-sort-alpha-asc::before { + content: "\f15d"; } + +.fa-sort-alpha-down::before { + content: "\f15d"; } + +.fa-money-bill-wheat::before { + content: "\e52a"; } + +.fa-cookie::before { + content: "\f563"; } + +.fa-arrow-rotate-left::before { + content: "\f0e2"; } + +.fa-arrow-left-rotate::before { + content: "\f0e2"; } + +.fa-arrow-rotate-back::before { + content: "\f0e2"; } + +.fa-arrow-rotate-backward::before { + content: "\f0e2"; } + +.fa-undo::before { + content: "\f0e2"; } + +.fa-hard-drive::before { + content: "\f0a0"; } + +.fa-hdd::before { + content: "\f0a0"; } + +.fa-face-grin-squint-tears::before { + content: "\f586"; } + +.fa-grin-squint-tears::before { + content: "\f586"; } + +.fa-dumbbell::before { + content: "\f44b"; } + +.fa-rectangle-list::before { + content: "\f022"; } + +.fa-list-alt::before { + content: "\f022"; } + +.fa-tarp-droplet::before { + content: "\e57c"; } + +.fa-house-medical-circle-check::before { + content: "\e511"; } + +.fa-person-skiing-nordic::before { + content: "\f7ca"; } + +.fa-skiing-nordic::before { + content: "\f7ca"; } + +.fa-calendar-plus::before { + content: "\f271"; } + +.fa-plane-arrival::before { + content: "\f5af"; } + +.fa-circle-left::before { + content: "\f359"; } + +.fa-arrow-alt-circle-left::before { + content: "\f359"; } + +.fa-train-subway::before { + content: "\f239"; } + +.fa-subway::before { + content: "\f239"; } + +.fa-chart-gantt::before { + content: "\e0e4"; } + +.fa-indian-rupee-sign::before { + content: "\e1bc"; } + +.fa-indian-rupee::before { + content: "\e1bc"; } + +.fa-inr::before { + content: "\e1bc"; } + +.fa-crop-simple::before { + content: "\f565"; } + +.fa-crop-alt::before { + content: "\f565"; } + +.fa-money-bill-1::before { + content: "\f3d1"; } + +.fa-money-bill-alt::before { + content: "\f3d1"; } + +.fa-left-long::before { + content: "\f30a"; } + +.fa-long-arrow-alt-left::before { + content: "\f30a"; } + +.fa-dna::before { + content: "\f471"; } + +.fa-virus-slash::before { + content: "\e075"; } + +.fa-minus::before { + content: "\f068"; } + +.fa-subtract::before { + content: "\f068"; } + +.fa-chess::before { + content: "\f439"; } + +.fa-arrow-left-long::before { + content: "\f177"; } + +.fa-long-arrow-left::before { + content: "\f177"; } + +.fa-plug-circle-check::before { + content: "\e55c"; } + +.fa-street-view::before { + content: "\f21d"; } + +.fa-franc-sign::before { + content: "\e18f"; } + +.fa-volume-off::before { + content: "\f026"; } + +.fa-hands-asl-interpreting::before { + content: "\f2a3"; } + +.fa-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-asl-interpreting::before { + content: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-gear::before { + content: "\f013"; } + +.fa-cog::before { + content: "\f013"; } + +.fa-droplet-slash::before { + content: "\f5c7"; } + +.fa-tint-slash::before { + content: "\f5c7"; } + +.fa-mosque::before { + content: "\f678"; } + +.fa-mosquito::before { + content: "\e52b"; } + +.fa-star-of-david::before { + content: "\f69a"; } + +.fa-person-military-rifle::before { + content: "\e54b"; } + +.fa-cart-shopping::before { + content: "\f07a"; } + +.fa-shopping-cart::before { + content: "\f07a"; } + +.fa-vials::before { + content: "\f493"; } + +.fa-plug-circle-plus::before { + content: "\e55f"; } + +.fa-place-of-worship::before { + content: "\f67f"; } + +.fa-grip-vertical::before { + content: "\f58e"; } + +.fa-arrow-turn-up::before { + content: "\f148"; } + +.fa-level-up::before { + content: "\f148"; } + +.fa-u::before { + content: "\55"; } + +.fa-square-root-variable::before { + content: "\f698"; } + +.fa-square-root-alt::before { + content: "\f698"; } + +.fa-clock::before { + content: "\f017"; } + +.fa-clock-four::before { + content: "\f017"; } + +.fa-backward-step::before { + content: "\f048"; } + +.fa-step-backward::before { + content: "\f048"; } + +.fa-pallet::before { + content: "\f482"; } + +.fa-faucet::before { + content: "\e005"; } + +.fa-baseball-bat-ball::before { + content: "\f432"; } + +.fa-s::before { + content: "\53"; } + +.fa-timeline::before { + content: "\e29c"; } + +.fa-keyboard::before { + content: "\f11c"; } + +.fa-caret-down::before { + content: "\f0d7"; } + +.fa-house-chimney-medical::before { + content: "\f7f2"; } + +.fa-clinic-medical::before { + content: "\f7f2"; } + +.fa-temperature-three-quarters::before { + content: "\f2c8"; } + +.fa-temperature-3::before { + content: "\f2c8"; } + +.fa-thermometer-3::before { + content: "\f2c8"; } + +.fa-thermometer-three-quarters::before { + content: "\f2c8"; } + +.fa-mobile-screen::before { + content: "\f3cf"; } + +.fa-mobile-android-alt::before { + content: "\f3cf"; } + +.fa-plane-up::before { + content: "\e22d"; } + +.fa-piggy-bank::before { + content: "\f4d3"; } + +.fa-battery-half::before { + content: "\f242"; } + +.fa-battery-3::before { + content: "\f242"; } + +.fa-mountain-city::before { + content: "\e52e"; } + +.fa-coins::before { + content: "\f51e"; } + +.fa-khanda::before { + content: "\f66d"; } + +.fa-sliders::before { + content: "\f1de"; } + +.fa-sliders-h::before { + content: "\f1de"; } + +.fa-folder-tree::before { + content: "\f802"; } + +.fa-network-wired::before { + content: "\f6ff"; } + +.fa-map-pin::before { + content: "\f276"; } + +.fa-hamsa::before { + content: "\f665"; } + +.fa-cent-sign::before { + content: "\e3f5"; } + +.fa-flask::before { + content: "\f0c3"; } + +.fa-person-pregnant::before { + content: "\e31e"; } + +.fa-wand-sparkles::before { + content: "\f72b"; } + +.fa-ellipsis-vertical::before { + content: "\f142"; } + +.fa-ellipsis-v::before { + content: "\f142"; } + +.fa-ticket::before { + content: "\f145"; } + +.fa-power-off::before { + content: "\f011"; } + +.fa-right-long::before { + content: "\f30b"; } + +.fa-long-arrow-alt-right::before { + content: "\f30b"; } + +.fa-flag-usa::before { + content: "\f74d"; } + +.fa-laptop-file::before { + content: "\e51d"; } + +.fa-tty::before { + content: "\f1e4"; } + +.fa-teletype::before { + content: "\f1e4"; } + +.fa-diagram-next::before { + content: "\e476"; } + +.fa-person-rifle::before { + content: "\e54e"; } + +.fa-house-medical-circle-exclamation::before { + content: "\e512"; } + +.fa-closed-captioning::before { + content: "\f20a"; } + +.fa-person-hiking::before { + content: "\f6ec"; } + +.fa-hiking::before { + content: "\f6ec"; } + +.fa-venus-double::before { + content: "\f226"; } + +.fa-images::before { + content: "\f302"; } + +.fa-calculator::before { + content: "\f1ec"; } + +.fa-people-pulling::before { + content: "\e535"; } + +.fa-n::before { + content: "\4e"; } + +.fa-cable-car::before { + content: "\f7da"; } + +.fa-tram::before { + content: "\f7da"; } + +.fa-cloud-rain::before { + content: "\f73d"; } + +.fa-building-circle-xmark::before { + content: "\e4d4"; } + +.fa-ship::before { + content: "\f21a"; } + +.fa-arrows-down-to-line::before { + content: "\e4b8"; } + +.fa-download::before { + content: "\f019"; } + +.fa-face-grin::before { + content: "\f580"; } + +.fa-grin::before { + content: "\f580"; } + +.fa-delete-left::before { + content: "\f55a"; } + +.fa-backspace::before { + content: "\f55a"; } + +.fa-eye-dropper::before { + content: "\f1fb"; } + +.fa-eye-dropper-empty::before { + content: "\f1fb"; } + +.fa-eyedropper::before { + content: "\f1fb"; } + +.fa-file-circle-check::before { + content: "\e5a0"; } + +.fa-forward::before { + content: "\f04e"; } + +.fa-mobile::before { + content: "\f3ce"; } + +.fa-mobile-android::before { + content: "\f3ce"; } + +.fa-mobile-phone::before { + content: "\f3ce"; } + +.fa-face-meh::before { + content: "\f11a"; } + +.fa-meh::before { + content: "\f11a"; } + +.fa-align-center::before { + content: "\f037"; } + +.fa-book-skull::before { + content: "\f6b7"; } + +.fa-book-dead::before { + content: "\f6b7"; } + +.fa-id-card::before { + content: "\f2c2"; } + +.fa-drivers-license::before { + content: "\f2c2"; } + +.fa-outdent::before { + content: "\f03b"; } + +.fa-dedent::before { + content: "\f03b"; } + +.fa-heart-circle-exclamation::before { + content: "\e4fe"; } + +.fa-house::before { + content: "\f015"; } + +.fa-home::before { + content: "\f015"; } + +.fa-home-alt::before { + content: "\f015"; } + +.fa-home-lg-alt::before { + content: "\f015"; } + +.fa-calendar-week::before { + content: "\f784"; } + +.fa-laptop-medical::before { + content: "\f812"; } + +.fa-b::before { + content: "\42"; } + +.fa-file-medical::before { + content: "\f477"; } + +.fa-dice-one::before { + content: "\f525"; } + +.fa-kiwi-bird::before { + content: "\f535"; } + +.fa-arrow-right-arrow-left::before { + content: "\f0ec"; } + +.fa-exchange::before { + content: "\f0ec"; } + +.fa-rotate-right::before { + content: "\f2f9"; } + +.fa-redo-alt::before { + content: "\f2f9"; } + +.fa-rotate-forward::before { + content: "\f2f9"; } + +.fa-utensils::before { + content: "\f2e7"; } + +.fa-cutlery::before { + content: "\f2e7"; } + +.fa-arrow-up-wide-short::before { + content: "\f161"; } + +.fa-sort-amount-up::before { + content: "\f161"; } + +.fa-mill-sign::before { + content: "\e1ed"; } + +.fa-bowl-rice::before { + content: "\e2eb"; } + +.fa-skull::before { + content: "\f54c"; } + +.fa-tower-broadcast::before { + content: "\f519"; } + +.fa-broadcast-tower::before { + content: "\f519"; } + +.fa-truck-pickup::before { + content: "\f63c"; } + +.fa-up-long::before { + content: "\f30c"; } + +.fa-long-arrow-alt-up::before { + content: "\f30c"; } + +.fa-stop::before { + content: "\f04d"; } + +.fa-code-merge::before { + content: "\f387"; } + +.fa-upload::before { + content: "\f093"; } + +.fa-hurricane::before { + content: "\f751"; } + +.fa-mound::before { + content: "\e52d"; } + +.fa-toilet-portable::before { + content: "\e583"; } + +.fa-compact-disc::before { + content: "\f51f"; } + +.fa-file-arrow-down::before { + content: "\f56d"; } + +.fa-file-download::before { + content: "\f56d"; } + +.fa-caravan::before { + content: "\f8ff"; } + +.fa-shield-cat::before { + content: "\e572"; } + +.fa-bolt::before { + content: "\f0e7"; } + +.fa-zap::before { + content: "\f0e7"; } + +.fa-glass-water::before { + content: "\e4f4"; } + +.fa-oil-well::before { + content: "\e532"; } + +.fa-vault::before { + content: "\e2c5"; } + +.fa-mars::before { + content: "\f222"; } + +.fa-toilet::before { + content: "\f7d8"; } + +.fa-plane-circle-xmark::before { + content: "\e557"; } + +.fa-yen-sign::before { + content: "\f157"; } + +.fa-cny::before { + content: "\f157"; } + +.fa-jpy::before { + content: "\f157"; } + +.fa-rmb::before { + content: "\f157"; } + +.fa-yen::before { + content: "\f157"; } + +.fa-ruble-sign::before { + content: "\f158"; } + +.fa-rouble::before { + content: "\f158"; } + +.fa-rub::before { + content: "\f158"; } + +.fa-ruble::before { + content: "\f158"; } + +.fa-sun::before { + content: "\f185"; } + +.fa-guitar::before { + content: "\f7a6"; } + +.fa-face-laugh-wink::before { + content: "\f59c"; } + +.fa-laugh-wink::before { + content: "\f59c"; } + +.fa-horse-head::before { + content: "\f7ab"; } + +.fa-bore-hole::before { + content: "\e4c3"; } + +.fa-industry::before { + content: "\f275"; } + +.fa-circle-down::before { + content: "\f358"; } + +.fa-arrow-alt-circle-down::before { + content: "\f358"; } + +.fa-arrows-turn-to-dots::before { + content: "\e4c1"; } + +.fa-florin-sign::before { + content: "\e184"; } + +.fa-arrow-down-short-wide::before { + content: "\f884"; } + +.fa-sort-amount-desc::before { + content: "\f884"; } + +.fa-sort-amount-down-alt::before { + content: "\f884"; } + +.fa-less-than::before { + content: "\3c"; } + +.fa-angle-down::before { + content: "\f107"; } + +.fa-car-tunnel::before { + content: "\e4de"; } + +.fa-head-side-cough::before { + content: "\e061"; } + +.fa-grip-lines::before { + content: "\f7a4"; } + +.fa-thumbs-down::before { + content: "\f165"; } + +.fa-user-lock::before { + content: "\f502"; } + +.fa-arrow-right-long::before { + content: "\f178"; } + +.fa-long-arrow-right::before { + content: "\f178"; } + +.fa-anchor-circle-xmark::before { + content: "\e4ac"; } + +.fa-ellipsis::before { + content: "\f141"; } + +.fa-ellipsis-h::before { + content: "\f141"; } + +.fa-chess-pawn::before { + content: "\f443"; } + +.fa-kit-medical::before { + content: "\f479"; } + +.fa-first-aid::before { + content: "\f479"; } + +.fa-person-through-window::before { + content: "\e5a9"; } + +.fa-toolbox::before { + content: "\f552"; } + +.fa-hands-holding-circle::before { + content: "\e4fb"; } + +.fa-bug::before { + content: "\f188"; } + +.fa-credit-card::before { + content: "\f09d"; } + +.fa-credit-card-alt::before { + content: "\f09d"; } + +.fa-car::before { + content: "\f1b9"; } + +.fa-automobile::before { + content: "\f1b9"; } + +.fa-hand-holding-hand::before { + content: "\e4f7"; } + +.fa-book-open-reader::before { + content: "\f5da"; } + +.fa-book-reader::before { + content: "\f5da"; } + +.fa-mountain-sun::before { + content: "\e52f"; } + +.fa-arrows-left-right-to-line::before { + content: "\e4ba"; } + +.fa-dice-d20::before { + content: "\f6cf"; } + +.fa-truck-droplet::before { + content: "\e58c"; } + +.fa-file-circle-xmark::before { + content: "\e5a1"; } + +.fa-temperature-arrow-up::before { + content: "\e040"; } + +.fa-temperature-up::before { + content: "\e040"; } + +.fa-medal::before { + content: "\f5a2"; } + +.fa-bed::before { + content: "\f236"; } + +.fa-square-h::before { + content: "\f0fd"; } + +.fa-h-square::before { + content: "\f0fd"; } + +.fa-podcast::before { + content: "\f2ce"; } + +.fa-temperature-full::before { + content: "\f2c7"; } + +.fa-temperature-4::before { + content: "\f2c7"; } + +.fa-thermometer-4::before { + content: "\f2c7"; } + +.fa-thermometer-full::before { + content: "\f2c7"; } + +.fa-bell::before { + content: "\f0f3"; } + +.fa-superscript::before { + content: "\f12b"; } + +.fa-plug-circle-xmark::before { + content: "\e560"; } + +.fa-star-of-life::before { + content: "\f621"; } + +.fa-phone-slash::before { + content: "\f3dd"; } + +.fa-paint-roller::before { + content: "\f5aa"; } + +.fa-handshake-angle::before { + content: "\f4c4"; } + +.fa-hands-helping::before { + content: "\f4c4"; } + +.fa-location-dot::before { + content: "\f3c5"; } + +.fa-map-marker-alt::before { + content: "\f3c5"; } + +.fa-file::before { + content: "\f15b"; } + +.fa-greater-than::before { + content: "\3e"; } + +.fa-person-swimming::before { + content: "\f5c4"; } + +.fa-swimmer::before { + content: "\f5c4"; } + +.fa-arrow-down::before { + content: "\f063"; } + +.fa-droplet::before { + content: "\f043"; } + +.fa-tint::before { + content: "\f043"; } + +.fa-eraser::before { + content: "\f12d"; } + +.fa-earth-americas::before { + content: "\f57d"; } + +.fa-earth::before { + content: "\f57d"; } + +.fa-earth-america::before { + content: "\f57d"; } + +.fa-globe-americas::before { + content: "\f57d"; } + +.fa-person-burst::before { + content: "\e53b"; } + +.fa-dove::before { + content: "\f4ba"; } + +.fa-battery-empty::before { + content: "\f244"; } + +.fa-battery-0::before { + content: "\f244"; } + +.fa-socks::before { + content: "\f696"; } + +.fa-inbox::before { + content: "\f01c"; } + +.fa-section::before { + content: "\e447"; } + +.fa-gauge-high::before { + content: "\f625"; } + +.fa-tachometer-alt::before { + content: "\f625"; } + +.fa-tachometer-alt-fast::before { + content: "\f625"; } + +.fa-envelope-open-text::before { + content: "\f658"; } + +.fa-hospital::before { + content: "\f0f8"; } + +.fa-hospital-alt::before { + content: "\f0f8"; } + +.fa-hospital-wide::before { + content: "\f0f8"; } + +.fa-wine-bottle::before { + content: "\f72f"; } + +.fa-chess-rook::before { + content: "\f447"; } + +.fa-bars-staggered::before { + content: "\f550"; } + +.fa-reorder::before { + content: "\f550"; } + +.fa-stream::before { + content: "\f550"; } + +.fa-dharmachakra::before { + content: "\f655"; } + +.fa-hotdog::before { + content: "\f80f"; } + +.fa-person-walking-with-cane::before { + content: "\f29d"; } + +.fa-blind::before { + content: "\f29d"; } + +.fa-drum::before { + content: "\f569"; } + +.fa-ice-cream::before { + content: "\f810"; } + +.fa-heart-circle-bolt::before { + content: "\e4fc"; } + +.fa-fax::before { + content: "\f1ac"; } + +.fa-paragraph::before { + content: "\f1dd"; } + +.fa-check-to-slot::before { + content: "\f772"; } + +.fa-vote-yea::before { + content: "\f772"; } + +.fa-star-half::before { + content: "\f089"; } + +.fa-boxes-stacked::before { + content: "\f468"; } + +.fa-boxes::before { + content: "\f468"; } + +.fa-boxes-alt::before { + content: "\f468"; } + +.fa-link::before { + content: "\f0c1"; } + +.fa-chain::before { + content: "\f0c1"; } + +.fa-ear-listen::before { + content: "\f2a2"; } + +.fa-assistive-listening-systems::before { + content: "\f2a2"; } + +.fa-tree-city::before { + content: "\e587"; } + +.fa-play::before { + content: "\f04b"; } + +.fa-font::before { + content: "\f031"; } + +.fa-rupiah-sign::before { + content: "\e23d"; } + +.fa-magnifying-glass::before { + content: "\f002"; } + +.fa-search::before { + content: "\f002"; } + +.fa-table-tennis-paddle-ball::before { + content: "\f45d"; } + +.fa-ping-pong-paddle-ball::before { + content: "\f45d"; } + +.fa-table-tennis::before { + content: "\f45d"; } + +.fa-person-dots-from-line::before { + content: "\f470"; } + +.fa-diagnoses::before { + content: "\f470"; } + +.fa-trash-can-arrow-up::before { + content: "\f82a"; } + +.fa-trash-restore-alt::before { + content: "\f82a"; } + +.fa-naira-sign::before { + content: "\e1f6"; } + +.fa-cart-arrow-down::before { + content: "\f218"; } + +.fa-walkie-talkie::before { + content: "\f8ef"; } + +.fa-file-pen::before { + content: "\f31c"; } + +.fa-file-edit::before { + content: "\f31c"; } + +.fa-receipt::before { + content: "\f543"; } + +.fa-square-pen::before { + content: "\f14b"; } + +.fa-pen-square::before { + content: "\f14b"; } + +.fa-pencil-square::before { + content: "\f14b"; } + +.fa-suitcase-rolling::before { + content: "\f5c1"; } + +.fa-person-circle-exclamation::before { + content: "\e53f"; } + +.fa-chevron-down::before { + content: "\f078"; } + +.fa-battery-full::before { + content: "\f240"; } + +.fa-battery::before { + content: "\f240"; } + +.fa-battery-5::before { + content: "\f240"; } + +.fa-skull-crossbones::before { + content: "\f714"; } + +.fa-code-compare::before { + content: "\e13a"; } + +.fa-list-ul::before { + content: "\f0ca"; } + +.fa-list-dots::before { + content: "\f0ca"; } + +.fa-school-lock::before { + content: "\e56f"; } + +.fa-tower-cell::before { + content: "\e585"; } + +.fa-down-long::before { + content: "\f309"; } + +.fa-long-arrow-alt-down::before { + content: "\f309"; } + +.fa-ranking-star::before { + content: "\e561"; } + +.fa-chess-king::before { + content: "\f43f"; } + +.fa-person-harassing::before { + content: "\e549"; } + +.fa-brazilian-real-sign::before { + content: "\e46c"; } + +.fa-landmark-dome::before { + content: "\f752"; } + +.fa-landmark-alt::before { + content: "\f752"; } + +.fa-arrow-up::before { + content: "\f062"; } + +.fa-tv::before { + content: "\f26c"; } + +.fa-television::before { + content: "\f26c"; } + +.fa-tv-alt::before { + content: "\f26c"; } + +.fa-shrimp::before { + content: "\e448"; } + +.fa-list-check::before { + content: "\f0ae"; } + +.fa-tasks::before { + content: "\f0ae"; } + +.fa-jug-detergent::before { + content: "\e519"; } + +.fa-circle-user::before { + content: "\f2bd"; } + +.fa-user-circle::before { + content: "\f2bd"; } + +.fa-user-shield::before { + content: "\f505"; } + +.fa-wind::before { + content: "\f72e"; } + +.fa-car-burst::before { + content: "\f5e1"; } + +.fa-car-crash::before { + content: "\f5e1"; } + +.fa-y::before { + content: "\59"; } + +.fa-person-snowboarding::before { + content: "\f7ce"; } + +.fa-snowboarding::before { + content: "\f7ce"; } + +.fa-truck-fast::before { + content: "\f48b"; } + +.fa-shipping-fast::before { + content: "\f48b"; } + +.fa-fish::before { + content: "\f578"; } + +.fa-user-graduate::before { + content: "\f501"; } + +.fa-circle-half-stroke::before { + content: "\f042"; } + +.fa-adjust::before { + content: "\f042"; } + +.fa-clapperboard::before { + content: "\e131"; } + +.fa-circle-radiation::before { + content: "\f7ba"; } + +.fa-radiation-alt::before { + content: "\f7ba"; } + +.fa-baseball::before { + content: "\f433"; } + +.fa-baseball-ball::before { + content: "\f433"; } + +.fa-jet-fighter-up::before { + content: "\e518"; } + +.fa-diagram-project::before { + content: "\f542"; } + +.fa-project-diagram::before { + content: "\f542"; } + +.fa-copy::before { + content: "\f0c5"; } + +.fa-volume-xmark::before { + content: "\f6a9"; } + +.fa-volume-mute::before { + content: "\f6a9"; } + +.fa-volume-times::before { + content: "\f6a9"; } + +.fa-hand-sparkles::before { + content: "\e05d"; } + +.fa-grip::before { + content: "\f58d"; } + +.fa-grip-horizontal::before { + content: "\f58d"; } + +.fa-share-from-square::before { + content: "\f14d"; } + +.fa-share-square::before { + content: "\f14d"; } + +.fa-child-combatant::before { + content: "\e4e0"; } + +.fa-child-rifle::before { + content: "\e4e0"; } + +.fa-gun::before { + content: "\e19b"; } + +.fa-square-phone::before { + content: "\f098"; } + +.fa-phone-square::before { + content: "\f098"; } + +.fa-plus::before { + content: "\2b"; } + +.fa-add::before { + content: "\2b"; } + +.fa-expand::before { + content: "\f065"; } + +.fa-computer::before { + content: "\e4e5"; } + +.fa-xmark::before { + content: "\f00d"; } + +.fa-close::before { + content: "\f00d"; } + +.fa-multiply::before { + content: "\f00d"; } + +.fa-remove::before { + content: "\f00d"; } + +.fa-times::before { + content: "\f00d"; } + +.fa-arrows-up-down-left-right::before { + content: "\f047"; } + +.fa-arrows::before { + content: "\f047"; } + +.fa-chalkboard-user::before { + content: "\f51c"; } + +.fa-chalkboard-teacher::before { + content: "\f51c"; } + +.fa-peso-sign::before { + content: "\e222"; } + +.fa-building-shield::before { + content: "\e4d8"; } + +.fa-baby::before { + content: "\f77c"; } + +.fa-users-line::before { + content: "\e592"; } + +.fa-quote-left::before { + content: "\f10d"; } + +.fa-quote-left-alt::before { + content: "\f10d"; } + +.fa-tractor::before { + content: "\f722"; } + +.fa-trash-arrow-up::before { + content: "\f829"; } + +.fa-trash-restore::before { + content: "\f829"; } + +.fa-arrow-down-up-lock::before { + content: "\e4b0"; } + +.fa-lines-leaning::before { + content: "\e51e"; } + +.fa-ruler-combined::before { + content: "\f546"; } + +.fa-copyright::before { + content: "\f1f9"; } + +.fa-equals::before { + content: "\3d"; } + +.fa-blender::before { + content: "\f517"; } + +.fa-teeth::before { + content: "\f62e"; } + +.fa-shekel-sign::before { + content: "\f20b"; } + +.fa-ils::before { + content: "\f20b"; } + +.fa-shekel::before { + content: "\f20b"; } + +.fa-sheqel::before { + content: "\f20b"; } + +.fa-sheqel-sign::before { + content: "\f20b"; } + +.fa-map::before { + content: "\f279"; } + +.fa-rocket::before { + content: "\f135"; } + +.fa-photo-film::before { + content: "\f87c"; } + +.fa-photo-video::before { + content: "\f87c"; } + +.fa-folder-minus::before { + content: "\f65d"; } + +.fa-store::before { + content: "\f54e"; } + +.fa-arrow-trend-up::before { + content: "\e098"; } + +.fa-plug-circle-minus::before { + content: "\e55e"; } + +.fa-sign-hanging::before { + content: "\f4d9"; } + +.fa-sign::before { + content: "\f4d9"; } + +.fa-bezier-curve::before { + content: "\f55b"; } + +.fa-bell-slash::before { + content: "\f1f6"; } + +.fa-tablet::before { + content: "\f3fb"; } + +.fa-tablet-android::before { + content: "\f3fb"; } + +.fa-school-flag::before { + content: "\e56e"; } + +.fa-fill::before { + content: "\f575"; } + +.fa-angle-up::before { + content: "\f106"; } + +.fa-drumstick-bite::before { + content: "\f6d7"; } + +.fa-holly-berry::before { + content: "\f7aa"; } + +.fa-chevron-left::before { + content: "\f053"; } + +.fa-bacteria::before { + content: "\e059"; } + +.fa-hand-lizard::before { + content: "\f258"; } + +.fa-notdef::before { + content: "\e1fe"; } + +.fa-disease::before { + content: "\f7fa"; } + +.fa-briefcase-medical::before { + content: "\f469"; } + +.fa-genderless::before { + content: "\f22d"; } + +.fa-chevron-right::before { + content: "\f054"; } + +.fa-retweet::before { + content: "\f079"; } + +.fa-car-rear::before { + content: "\f5de"; } + +.fa-car-alt::before { + content: "\f5de"; } + +.fa-pump-soap::before { + content: "\e06b"; } + +.fa-video-slash::before { + content: "\f4e2"; } + +.fa-battery-quarter::before { + content: "\f243"; } + +.fa-battery-2::before { + content: "\f243"; } + +.fa-radio::before { + content: "\f8d7"; } + +.fa-baby-carriage::before { + content: "\f77d"; } + +.fa-carriage-baby::before { + content: "\f77d"; } + +.fa-traffic-light::before { + content: "\f637"; } + +.fa-thermometer::before { + content: "\f491"; } + +.fa-vr-cardboard::before { + content: "\f729"; } + +.fa-hand-middle-finger::before { + content: "\f806"; } + +.fa-percent::before { + content: "\25"; } + +.fa-percentage::before { + content: "\25"; } + +.fa-truck-moving::before { + content: "\f4df"; } + +.fa-glass-water-droplet::before { + content: "\e4f5"; } + +.fa-display::before { + content: "\e163"; } + +.fa-face-smile::before { + content: "\f118"; } + +.fa-smile::before { + content: "\f118"; } + +.fa-thumbtack::before { + content: "\f08d"; } + +.fa-thumb-tack::before { + content: "\f08d"; } + +.fa-trophy::before { + content: "\f091"; } + +.fa-person-praying::before { + content: "\f683"; } + +.fa-pray::before { + content: "\f683"; } + +.fa-hammer::before { + content: "\f6e3"; } + +.fa-hand-peace::before { + content: "\f25b"; } + +.fa-rotate::before { + content: "\f2f1"; } + +.fa-sync-alt::before { + content: "\f2f1"; } + +.fa-spinner::before { + content: "\f110"; } + +.fa-robot::before { + content: "\f544"; } + +.fa-peace::before { + content: "\f67c"; } + +.fa-gears::before { + content: "\f085"; } + +.fa-cogs::before { + content: "\f085"; } + +.fa-warehouse::before { + content: "\f494"; } + +.fa-arrow-up-right-dots::before { + content: "\e4b7"; } + +.fa-splotch::before { + content: "\f5bc"; } + +.fa-face-grin-hearts::before { + content: "\f584"; } + +.fa-grin-hearts::before { + content: "\f584"; } + +.fa-dice-four::before { + content: "\f524"; } + +.fa-sim-card::before { + content: "\f7c4"; } + +.fa-transgender::before { + content: "\f225"; } + +.fa-transgender-alt::before { + content: "\f225"; } + +.fa-mercury::before { + content: "\f223"; } + +.fa-arrow-turn-down::before { + content: "\f149"; } + +.fa-level-down::before { + content: "\f149"; } + +.fa-person-falling-burst::before { + content: "\e547"; } + +.fa-award::before { + content: "\f559"; } + +.fa-ticket-simple::before { + content: "\f3ff"; } + +.fa-ticket-alt::before { + content: "\f3ff"; } + +.fa-building::before { + content: "\f1ad"; } + +.fa-angles-left::before { + content: "\f100"; } + +.fa-angle-double-left::before { + content: "\f100"; } + +.fa-qrcode::before { + content: "\f029"; } + +.fa-clock-rotate-left::before { + content: "\f1da"; } + +.fa-history::before { + content: "\f1da"; } + +.fa-face-grin-beam-sweat::before { + content: "\f583"; } + +.fa-grin-beam-sweat::before { + content: "\f583"; } + +.fa-file-export::before { + content: "\f56e"; } + +.fa-arrow-right-from-file::before { + content: "\f56e"; } + +.fa-shield::before { + content: "\f132"; } + +.fa-shield-blank::before { + content: "\f132"; } + +.fa-arrow-up-short-wide::before { + content: "\f885"; } + +.fa-sort-amount-up-alt::before { + content: "\f885"; } + +.fa-house-medical::before { + content: "\e3b2"; } + +.fa-golf-ball-tee::before { + content: "\f450"; } + +.fa-golf-ball::before { + content: "\f450"; } + +.fa-circle-chevron-left::before { + content: "\f137"; } + +.fa-chevron-circle-left::before { + content: "\f137"; } + +.fa-house-chimney-window::before { + content: "\e00d"; } + +.fa-pen-nib::before { + content: "\f5ad"; } + +.fa-tent-arrow-turn-left::before { + content: "\e580"; } + +.fa-tents::before { + content: "\e582"; } + +.fa-wand-magic::before { + content: "\f0d0"; } + +.fa-magic::before { + content: "\f0d0"; } + +.fa-dog::before { + content: "\f6d3"; } + +.fa-carrot::before { + content: "\f787"; } + +.fa-moon::before { + content: "\f186"; } + +.fa-wine-glass-empty::before { + content: "\f5ce"; } + +.fa-wine-glass-alt::before { + content: "\f5ce"; } + +.fa-cheese::before { + content: "\f7ef"; } + +.fa-yin-yang::before { + content: "\f6ad"; } + +.fa-music::before { + content: "\f001"; } + +.fa-code-commit::before { + content: "\f386"; } + +.fa-temperature-low::before { + content: "\f76b"; } + +.fa-person-biking::before { + content: "\f84a"; } + +.fa-biking::before { + content: "\f84a"; } + +.fa-broom::before { + content: "\f51a"; } + +.fa-shield-heart::before { + content: "\e574"; } + +.fa-gopuram::before { + content: "\f664"; } + +.fa-earth-oceania::before { + content: "\e47b"; } + +.fa-globe-oceania::before { + content: "\e47b"; } + +.fa-square-xmark::before { + content: "\f2d3"; } + +.fa-times-square::before { + content: "\f2d3"; } + +.fa-xmark-square::before { + content: "\f2d3"; } + +.fa-hashtag::before { + content: "\23"; } + +.fa-up-right-and-down-left-from-center::before { + content: "\f424"; } + +.fa-expand-alt::before { + content: "\f424"; } + +.fa-oil-can::before { + content: "\f613"; } + +.fa-t::before { + content: "\54"; } + +.fa-hippo::before { + content: "\f6ed"; } + +.fa-chart-column::before { + content: "\e0e3"; } + +.fa-infinity::before { + content: "\f534"; } + +.fa-vial-circle-check::before { + content: "\e596"; } + +.fa-person-arrow-down-to-line::before { + content: "\e538"; } + +.fa-voicemail::before { + content: "\f897"; } + +.fa-fan::before { + content: "\f863"; } + +.fa-person-walking-luggage::before { + content: "\e554"; } + +.fa-up-down::before { + content: "\f338"; } + +.fa-arrows-alt-v::before { + content: "\f338"; } + +.fa-cloud-moon-rain::before { + content: "\f73c"; } + +.fa-calendar::before { + content: "\f133"; } + +.fa-trailer::before { + content: "\e041"; } + +.fa-bahai::before { + content: "\f666"; } + +.fa-haykal::before { + content: "\f666"; } + +.fa-sd-card::before { + content: "\f7c2"; } + +.fa-dragon::before { + content: "\f6d5"; } + +.fa-shoe-prints::before { + content: "\f54b"; } + +.fa-circle-plus::before { + content: "\f055"; } + +.fa-plus-circle::before { + content: "\f055"; } + +.fa-face-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-hand-holding::before { + content: "\f4bd"; } + +.fa-plug-circle-exclamation::before { + content: "\e55d"; } + +.fa-link-slash::before { + content: "\f127"; } + +.fa-chain-broken::before { + content: "\f127"; } + +.fa-chain-slash::before { + content: "\f127"; } + +.fa-unlink::before { + content: "\f127"; } + +.fa-clone::before { + content: "\f24d"; } + +.fa-person-walking-arrow-loop-left::before { + content: "\e551"; } + +.fa-arrow-up-z-a::before { + content: "\f882"; } + +.fa-sort-alpha-up-alt::before { + content: "\f882"; } + +.fa-fire-flame-curved::before { + content: "\f7e4"; } + +.fa-fire-alt::before { + content: "\f7e4"; } + +.fa-tornado::before { + content: "\f76f"; } + +.fa-file-circle-plus::before { + content: "\e494"; } + +.fa-book-quran::before { + content: "\f687"; } + +.fa-quran::before { + content: "\f687"; } + +.fa-anchor::before { + content: "\f13d"; } + +.fa-border-all::before { + content: "\f84c"; } + +.fa-face-angry::before { + content: "\f556"; } + +.fa-angry::before { + content: "\f556"; } + +.fa-cookie-bite::before { + content: "\f564"; } + +.fa-arrow-trend-down::before { + content: "\e097"; } + +.fa-rss::before { + content: "\f09e"; } + +.fa-feed::before { + content: "\f09e"; } + +.fa-draw-polygon::before { + content: "\f5ee"; } + +.fa-scale-balanced::before { + content: "\f24e"; } + +.fa-balance-scale::before { + content: "\f24e"; } + +.fa-gauge-simple-high::before { + content: "\f62a"; } + +.fa-tachometer::before { + content: "\f62a"; } + +.fa-tachometer-fast::before { + content: "\f62a"; } + +.fa-shower::before { + content: "\f2cc"; } + +.fa-desktop::before { + content: "\f390"; } + +.fa-desktop-alt::before { + content: "\f390"; } + +.fa-m::before { + content: "\4d"; } + +.fa-table-list::before { + content: "\f00b"; } + +.fa-th-list::before { + content: "\f00b"; } + +.fa-comment-sms::before { + content: "\f7cd"; } + +.fa-sms::before { + content: "\f7cd"; } + +.fa-book::before { + content: "\f02d"; } + +.fa-user-plus::before { + content: "\f234"; } + +.fa-check::before { + content: "\f00c"; } + +.fa-battery-three-quarters::before { + content: "\f241"; } + +.fa-battery-4::before { + content: "\f241"; } + +.fa-house-circle-check::before { + content: "\e509"; } + +.fa-angle-left::before { + content: "\f104"; } + +.fa-diagram-successor::before { + content: "\e47a"; } + +.fa-truck-arrow-right::before { + content: "\e58b"; } + +.fa-arrows-split-up-and-left::before { + content: "\e4bc"; } + +.fa-hand-fist::before { + content: "\f6de"; } + +.fa-fist-raised::before { + content: "\f6de"; } + +.fa-cloud-moon::before { + content: "\f6c3"; } + +.fa-briefcase::before { + content: "\f0b1"; } + +.fa-person-falling::before { + content: "\e546"; } + +.fa-image-portrait::before { + content: "\f3e0"; } + +.fa-portrait::before { + content: "\f3e0"; } + +.fa-user-tag::before { + content: "\f507"; } + +.fa-rug::before { + content: "\e569"; } + +.fa-earth-europe::before { + content: "\f7a2"; } + +.fa-globe-europe::before { + content: "\f7a2"; } + +.fa-cart-flatbed-suitcase::before { + content: "\f59d"; } + +.fa-luggage-cart::before { + content: "\f59d"; } + +.fa-rectangle-xmark::before { + content: "\f410"; } + +.fa-rectangle-times::before { + content: "\f410"; } + +.fa-times-rectangle::before { + content: "\f410"; } + +.fa-window-close::before { + content: "\f410"; } + +.fa-baht-sign::before { + content: "\e0ac"; } + +.fa-book-open::before { + content: "\f518"; } + +.fa-book-journal-whills::before { + content: "\f66a"; } + +.fa-journal-whills::before { + content: "\f66a"; } + +.fa-handcuffs::before { + content: "\e4f8"; } + +.fa-triangle-exclamation::before { + content: "\f071"; } + +.fa-exclamation-triangle::before { + content: "\f071"; } + +.fa-warning::before { + content: "\f071"; } + +.fa-database::before { + content: "\f1c0"; } + +.fa-share::before { + content: "\f064"; } + +.fa-mail-forward::before { + content: "\f064"; } + +.fa-bottle-droplet::before { + content: "\e4c4"; } + +.fa-mask-face::before { + content: "\e1d7"; } + +.fa-hill-rockslide::before { + content: "\e508"; } + +.fa-right-left::before { + content: "\f362"; } + +.fa-exchange-alt::before { + content: "\f362"; } + +.fa-paper-plane::before { + content: "\f1d8"; } + +.fa-road-circle-exclamation::before { + content: "\e565"; } + +.fa-dungeon::before { + content: "\f6d9"; } + +.fa-align-right::before { + content: "\f038"; } + +.fa-money-bill-1-wave::before { + content: "\f53b"; } + +.fa-money-bill-wave-alt::before { + content: "\f53b"; } + +.fa-life-ring::before { + content: "\f1cd"; } + +.fa-hands::before { + content: "\f2a7"; } + +.fa-sign-language::before { + content: "\f2a7"; } + +.fa-signing::before { + content: "\f2a7"; } + +.fa-calendar-day::before { + content: "\f783"; } + +.fa-water-ladder::before { + content: "\f5c5"; } + +.fa-ladder-water::before { + content: "\f5c5"; } + +.fa-swimming-pool::before { + content: "\f5c5"; } + +.fa-arrows-up-down::before { + content: "\f07d"; } + +.fa-arrows-v::before { + content: "\f07d"; } + +.fa-face-grimace::before { + content: "\f57f"; } + +.fa-grimace::before { + content: "\f57f"; } + +.fa-wheelchair-move::before { + content: "\e2ce"; } + +.fa-wheelchair-alt::before { + content: "\e2ce"; } + +.fa-turn-down::before { + content: "\f3be"; } + +.fa-level-down-alt::before { + content: "\f3be"; } + +.fa-person-walking-arrow-right::before { + content: "\e552"; } + +.fa-square-envelope::before { + content: "\f199"; } + +.fa-envelope-square::before { + content: "\f199"; } + +.fa-dice::before { + content: "\f522"; } + +.fa-bowling-ball::before { + content: "\f436"; } + +.fa-brain::before { + content: "\f5dc"; } + +.fa-bandage::before { + content: "\f462"; } + +.fa-band-aid::before { + content: "\f462"; } + +.fa-calendar-minus::before { + content: "\f272"; } + +.fa-circle-xmark::before { + content: "\f057"; } + +.fa-times-circle::before { + content: "\f057"; } + +.fa-xmark-circle::before { + content: "\f057"; } + +.fa-gifts::before { + content: "\f79c"; } + +.fa-hotel::before { + content: "\f594"; } + +.fa-earth-asia::before { + content: "\f57e"; } + +.fa-globe-asia::before { + content: "\f57e"; } + +.fa-id-card-clip::before { + content: "\f47f"; } + +.fa-id-card-alt::before { + content: "\f47f"; } + +.fa-magnifying-glass-plus::before { + content: "\f00e"; } + +.fa-search-plus::before { + content: "\f00e"; } + +.fa-thumbs-up::before { + content: "\f164"; } + +.fa-user-clock::before { + content: "\f4fd"; } + +.fa-hand-dots::before { + content: "\f461"; } + +.fa-allergies::before { + content: "\f461"; } + +.fa-file-invoice::before { + content: "\f570"; } + +.fa-window-minimize::before { + content: "\f2d1"; } + +.fa-mug-saucer::before { + content: "\f0f4"; } + +.fa-coffee::before { + content: "\f0f4"; } + +.fa-brush::before { + content: "\f55d"; } + +.fa-mask::before { + content: "\f6fa"; } + +.fa-magnifying-glass-minus::before { + content: "\f010"; } + +.fa-search-minus::before { + content: "\f010"; } + +.fa-ruler-vertical::before { + content: "\f548"; } + +.fa-user-large::before { + content: "\f406"; } + +.fa-user-alt::before { + content: "\f406"; } + +.fa-train-tram::before { + content: "\e5b4"; } + +.fa-user-nurse::before { + content: "\f82f"; } + +.fa-syringe::before { + content: "\f48e"; } + +.fa-cloud-sun::before { + content: "\f6c4"; } + +.fa-stopwatch-20::before { + content: "\e06f"; } + +.fa-square-full::before { + content: "\f45c"; } + +.fa-magnet::before { + content: "\f076"; } + +.fa-jar::before { + content: "\e516"; } + +.fa-note-sticky::before { + content: "\f249"; } + +.fa-sticky-note::before { + content: "\f249"; } + +.fa-bug-slash::before { + content: "\e490"; } + +.fa-arrow-up-from-water-pump::before { + content: "\e4b6"; } + +.fa-bone::before { + content: "\f5d7"; } + +.fa-user-injured::before { + content: "\f728"; } + +.fa-face-sad-tear::before { + content: "\f5b4"; } + +.fa-sad-tear::before { + content: "\f5b4"; } + +.fa-plane::before { + content: "\f072"; } + +.fa-tent-arrows-down::before { + content: "\e581"; } + +.fa-exclamation::before { + content: "\21"; } + +.fa-arrows-spin::before { + content: "\e4bb"; } + +.fa-print::before { + content: "\f02f"; } + +.fa-turkish-lira-sign::before { + content: "\e2bb"; } + +.fa-try::before { + content: "\e2bb"; } + +.fa-turkish-lira::before { + content: "\e2bb"; } + +.fa-dollar-sign::before { + content: "\24"; } + +.fa-dollar::before { + content: "\24"; } + +.fa-usd::before { + content: "\24"; } + +.fa-x::before { + content: "\58"; } + +.fa-magnifying-glass-dollar::before { + content: "\f688"; } + +.fa-search-dollar::before { + content: "\f688"; } + +.fa-users-gear::before { + content: "\f509"; } + +.fa-users-cog::before { + content: "\f509"; } + +.fa-person-military-pointing::before { + content: "\e54a"; } + +.fa-building-columns::before { + content: "\f19c"; } + +.fa-bank::before { + content: "\f19c"; } + +.fa-institution::before { + content: "\f19c"; } + +.fa-museum::before { + content: "\f19c"; } + +.fa-university::before { + content: "\f19c"; } + +.fa-umbrella::before { + content: "\f0e9"; } + +.fa-trowel::before { + content: "\e589"; } + +.fa-d::before { + content: "\44"; } + +.fa-stapler::before { + content: "\e5af"; } + +.fa-masks-theater::before { + content: "\f630"; } + +.fa-theater-masks::before { + content: "\f630"; } + +.fa-kip-sign::before { + content: "\e1c4"; } + +.fa-hand-point-left::before { + content: "\f0a5"; } + +.fa-handshake-simple::before { + content: "\f4c6"; } + +.fa-handshake-alt::before { + content: "\f4c6"; } + +.fa-jet-fighter::before { + content: "\f0fb"; } + +.fa-fighter-jet::before { + content: "\f0fb"; } + +.fa-square-share-nodes::before { + content: "\f1e1"; } + +.fa-share-alt-square::before { + content: "\f1e1"; } + +.fa-barcode::before { + content: "\f02a"; } + +.fa-plus-minus::before { + content: "\e43c"; } + +.fa-video::before { + content: "\f03d"; } + +.fa-video-camera::before { + content: "\f03d"; } + +.fa-graduation-cap::before { + content: "\f19d"; } + +.fa-mortar-board::before { + content: "\f19d"; } + +.fa-hand-holding-medical::before { + content: "\e05c"; } + +.fa-person-circle-check::before { + content: "\e53e"; } + +.fa-turn-up::before { + content: "\f3bf"; } + +.fa-level-up-alt::before { + content: "\f3bf"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } +:root, :host { + --fa-style-family-brands: 'Font Awesome 6 Brands'; + --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } + +@font-face { + font-family: 'Font Awesome 6 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +.fab, +.fa-brands { + font-weight: 400; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-pixiv:before { + content: "\e640"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-square-js:before { + content: "\f3b9"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-square-reddit:before { + content: "\f1a2"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-square-font-awesome:before { + content: "\e5ad"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-brave:before { + content: "\e63c"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-square-instagram:before { + content: "\e055"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-square-hacker-news:before { + content: "\f3af"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-threads:before { + content: "\e618"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-square-snapchat:before { + content: "\f2ad"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-square-font-awesome-stroke:before { + content: "\f35c"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-square-viadeo:before { + content: "\f2aa"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-opensuse:before { + content: "\e62b"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-square-dribbble:before { + content: "\f397"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-node:before { + content: "\f419"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-debian:before { + content: "\e60b"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-square-twitter:before { + content: "\f081"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-golang:before { + content: "\e40f"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-square-youtube:before { + content: "\f431"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-nfc-directional:before { + content: "\e530"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-meta:before { + content: "\e49b"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-square-letterboxd:before { + content: "\e62e"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-shoelace:before { + content: "\e60c"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-square-steam:before { + content: "\f1b7"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-square-vimeo:before { + content: "\f194"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-flag:before { + content: "\f2b4"; } + +.fa-font-awesome-logo-full:before { + content: "\f2b4"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-padlet:before { + content: "\e4a0"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-square-github:before { + content: "\f092"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-square-threads:before { + content: "\e619"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-google-scholar:before { + content: "\e63b"; } + +.fa-square-gitlab:before { + content: "\e5ae"; } + +.fa-gitlab-square:before { + content: "\e5ae"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-square-odnoklassniki:before { + content: "\f264"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-hashnode:before { + content: "\e499"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-square-pinterest:before { + content: "\f0d3"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-signal-messenger:before { + content: "\e663"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-nfc-symbol:before { + content: "\e531"; } + +.fa-mintbit:before { + content: "\e62f"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-brave-reverse:before { + content: "\e63d"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-square-google-plus:before { + content: "\f0d4"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-square-xing:before { + content: "\f169"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-letterboxd:before { + content: "\e62d"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-bilibili:before { + content: "\e3d9"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-x-twitter:before { + content: "\e61b"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-42-group:before { + content: "\e080"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-square-pied-piper:before { + content: "\e01e"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-square-facebook:before { + content: "\f082"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-square-lastfm:before { + content: "\f203"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-cmplid:before { + content: "\e360"; } + +.fa-upwork:before { + content: "\e641"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-screenpal:before { + content: "\e570"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-wirsindhandwerk:before { + content: "\e2d0"; } + +.fa-wsh:before { + content: "\e2d0"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-square-behance:before { + content: "\f1b5"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-webflow:before { + content: "\e65c"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-space-awesome:before { + content: "\e5ac"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-square-git:before { + content: "\f1d2"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-square-tumblr:before { + content: "\f174"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-bots:before { + content: "\e340"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-php:before { + content: "\f457"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-stubber:before { + content: "\e5c7"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f2c6"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-odysee:before { + content: "\e5c6"; } + +.fa-square-whatsapp:before { + content: "\f40c"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f198"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-square-x-twitter:before { + content: "\e61a"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f23a"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-sitrox:before { + content: "\e44a"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-pix:before { + content: "\e43a"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +.far, +.fa-regular { + font-weight: 400; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +.fas, +.fa-solid { + font-weight: 900; } +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 900; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); + unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); + unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; } diff --git a/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-brands-400.ttf b/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-brands-400.ttf new file mode 100644 index 00000000..5efb1d4f Binary files /dev/null and b/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-brands-400.ttf differ diff --git a/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-brands-400.woff2 b/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-brands-400.woff2 new file mode 100644 index 00000000..36fbda7d Binary files /dev/null and b/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-brands-400.woff2 differ diff --git a/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-regular-400.ttf b/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-regular-400.ttf new file mode 100644 index 00000000..838b4e2c Binary files /dev/null and b/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-regular-400.ttf differ diff --git a/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-regular-400.woff2 b/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-regular-400.woff2 new file mode 100644 index 00000000..b6cabbac Binary files /dev/null and b/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-regular-400.woff2 differ diff --git a/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-solid-900.ttf b/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-solid-900.ttf new file mode 100644 index 00000000..ec24749d Binary files /dev/null and b/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-solid-900.ttf differ diff --git a/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-solid-900.woff2 b/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-solid-900.woff2 new file mode 100644 index 00000000..824d518e Binary files /dev/null and b/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-solid-900.woff2 differ diff --git a/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-v4compatibility.ttf b/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-v4compatibility.ttf new file mode 100644 index 00000000..b175aa8e Binary files /dev/null and b/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-v4compatibility.ttf differ diff --git a/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-v4compatibility.woff2 b/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-v4compatibility.woff2 new file mode 100644 index 00000000..e09b5a55 Binary files /dev/null and b/docker/nginx/dist/html/assets/fonts/awesome/webfonts/fa-v4compatibility.woff2 differ diff --git a/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-300.woff b/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-300.woff deleted file mode 100644 index 919bfcb2..00000000 Binary files a/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-300.woff and /dev/null differ diff --git a/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-300.woff2 b/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-300.woff2 deleted file mode 100644 index 67a6cffc..00000000 Binary files a/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-300.woff2 and /dev/null differ diff --git a/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-700.woff b/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-700.woff deleted file mode 100644 index 3b6ed019..00000000 Binary files a/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-700.woff and /dev/null differ diff --git a/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-700.woff2 b/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-700.woff2 deleted file mode 100644 index e832c2a0..00000000 Binary files a/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-700.woff2 and /dev/null differ diff --git a/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-regular.woff b/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-regular.woff deleted file mode 100644 index b0836266..00000000 Binary files a/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-regular.woff and /dev/null differ diff --git a/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-regular.woff2 b/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-regular.woff2 deleted file mode 100644 index 15339ea9..00000000 Binary files a/docker/nginx/dist/html/assets/fonts/open-sans-v34-latin-regular.woff2 and /dev/null differ diff --git a/docker/nginx/dist/html/assets/fonts/russo-one-v16-latin-regular.woff2 b/docker/nginx/dist/html/assets/fonts/russo-one-v16-latin-regular.woff2 new file mode 100644 index 00000000..31a08f7b Binary files /dev/null and b/docker/nginx/dist/html/assets/fonts/russo-one-v16-latin-regular.woff2 differ diff --git a/docker/nginx/dist/html/assets/img/donation.png b/docker/nginx/dist/html/assets/img/donation.png deleted file mode 100644 index 43701588..00000000 Binary files a/docker/nginx/dist/html/assets/img/donation.png and /dev/null differ diff --git a/docker/nginx/dist/html/assets/img/header.png b/docker/nginx/dist/html/assets/img/header.png deleted file mode 100644 index a526f83e..00000000 Binary files a/docker/nginx/dist/html/assets/img/header.png and /dev/null differ diff --git a/docker/nginx/dist/html/assets/img/icons.png b/docker/nginx/dist/html/assets/img/icons.png deleted file mode 100644 index 6432f35f..00000000 Binary files a/docker/nginx/dist/html/assets/img/icons.png and /dev/null differ diff --git a/docker/nginx/dist/html/assets/img/live.png b/docker/nginx/dist/html/assets/img/live.png deleted file mode 100644 index 2686929a..00000000 Binary files a/docker/nginx/dist/html/assets/img/live.png and /dev/null differ diff --git a/docker/nginx/dist/html/assets/img/logo.webp b/docker/nginx/dist/html/assets/img/logo.webp new file mode 100644 index 00000000..9bc49538 Binary files /dev/null and b/docker/nginx/dist/html/assets/img/logo.webp differ diff --git a/docker/nginx/dist/html/assets/img/previewbg.png b/docker/nginx/dist/html/assets/img/previewbg.png deleted file mode 100644 index 465d616a..00000000 Binary files a/docker/nginx/dist/html/assets/img/previewbg.png and /dev/null differ diff --git a/docker/nginx/dist/html/assets/img/spanish.png b/docker/nginx/dist/html/assets/img/spanish.png deleted file mode 100644 index 42c90c39..00000000 Binary files a/docker/nginx/dist/html/assets/img/spanish.png and /dev/null differ diff --git a/docker/nginx/dist/html/assets/img/subheader.png b/docker/nginx/dist/html/assets/img/subheader.png deleted file mode 100644 index 1148be3d..00000000 Binary files a/docker/nginx/dist/html/assets/img/subheader.png and /dev/null differ diff --git a/docker/nginx/dist/html/assets/js/clock.js b/docker/nginx/dist/html/assets/js/clock.js new file mode 100644 index 00000000..4d33e197 --- /dev/null +++ b/docker/nginx/dist/html/assets/js/clock.js @@ -0,0 +1,11 @@ +function updateClock() { + const now = new Date(); + const hours = ('0' + now.getHours()).slice(-2); + const minutes = ('0' + now.getMinutes()).slice(-2); + const day = ('0' + now.getDate()).slice(-2); + const month = ('0' + (now.getMonth() + 1)).slice(-2); + const year = now.getFullYear(); + document.getElementById('clock').textContent = hours + ':' + minutes + ' | ' + day + '/' + month + '/' + year; + setTimeout(updateClock, 1000); +} +updateClock(); diff --git a/docker/nginx/dist/html/assets/js/greeting.js b/docker/nginx/dist/html/assets/js/greeting.js deleted file mode 100644 index 8793d391..00000000 --- a/docker/nginx/dist/html/assets/js/greeting.js +++ /dev/null @@ -1,27 +0,0 @@ -// β”Œβ”€β”β”¬β”€β”β”Œβ”€β”β”Œβ”€β”β”Œβ”¬β”β”¬β”Œβ”β”Œβ”Œβ”€β”β”Œβ”€β” -// β”‚ β”¬β”œβ”¬β”˜β”œβ”€ β”œβ”€ β”‚ β”‚β”‚β”‚β”‚β”‚ ┬└─┐ -// β””β”€β”˜β”΄β””β”€β””β”€β”˜β””β”€β”˜ β”΄ β”΄β”˜β””β”˜β””β”€β”˜β””β”€β”˜ - -// Get the hour -const today = new Date(); -const hour = today.getHours(); - -// Here you can change your name -const name = CONFIG.name; - -// Here you can change your greetings -const gree1 = `${CONFIG.greetingNight}\xa0`; -const gree2 = `${CONFIG.greetingMorning}\xa0`; -const gree3 = `${CONFIG.greetingAfternoon}\xa0`; -const gree4 = `${CONFIG.greetingEvening}\xa0`; - -// Define the hours of the greetings -if (hour >= 23 || hour < 5) { - document.getElementById('greetings').innerText = gree1; -} else if (hour >= 6 && hour < 12) { - document.getElementById('greetings').innerText = gree2; -} else if (hour >= 12 && hour < 17) { - document.getElementById('greetings').innerText = gree3; -} else { - document.getElementById('greetings').innerText = gree4; -} diff --git a/docker/nginx/dist/html/assets/js/lists.js b/docker/nginx/dist/html/assets/js/lists.js deleted file mode 100644 index 34e3becc..00000000 --- a/docker/nginx/dist/html/assets/js/lists.js +++ /dev/null @@ -1,71 +0,0 @@ -// ┬ β”¬β”Œβ”€β”β”Œβ”¬β”β”Œβ”€β” -// β”‚ │└─┐ β”‚ └─┐ -// β”΄β”€β”˜β”΄β””β”€β”˜ β”΄ β””β”€β”˜ - -// Print the first List -const isLinkAvailable = async (link) => { - try { - const response = await fetch(link, { method: 'HEAD', mode: 'no-cors' }); - if (response.ok) { - // The link is available - return true; - } else if (response.status === 301 || response.status === 302) { - // The link is a redirect, follow the redirect and check the final location - const newLocation = response.headers.get('Location'); - if (newLocation) { - const newResponse = await fetch(newLocation, { method: 'HEAD', mode: 'no-cors' }); - if (newResponse.ok) { - // The final location is available - return true; - } - } - } - } catch (error) { - console.error('Link check failed: ', error); - } - // The link is not available - return false; -}; - -const printFirstList = async () => { - let icon = ``; - const position = 'beforeend'; - list_1.insertAdjacentHTML(position, icon); - for (const link of CONFIG.lists.firstList) { - let item = ` - ${link.name} - `; - if (await isLinkAvailable(link.link)) { - const position = 'beforeend'; - list_1.insertAdjacentHTML(position, item); - } - } -}; - -// Print the second List -const printSecondList = () => { - let icon = ``; - const position = 'beforeend'; - list_2.insertAdjacentHTML(position, icon); - for (const link of CONFIG.lists.secondList) { - // List item - let item = ` - ${link.name} - `; - const position = 'beforeend'; - list_2.insertAdjacentHTML(position, item); - } -}; - -printFirstList(); -printSecondList(); diff --git a/docker/nginx/dist/html/assets/js/lucide.min.js b/docker/nginx/dist/html/assets/js/lucide.min.js deleted file mode 100644 index c623c299..00000000 --- a/docker/nginx/dist/html/assets/js/lucide.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * lucide v0.179.0 - ISC - */ - -(function(a,l){typeof exports=="object"&&typeof module<"u"?l(exports):typeof define=="function"&&define.amd?define(["exports"],l):(a=typeof globalThis<"u"?globalThis:a||self,l(a.lucide={}))})(this,function(a){"use strict";const l=(t,c,d=[])=>{const n=document.createElementNS("http://www.w3.org/2000/svg",t);return Object.keys(c).forEach(i=>{n.setAttribute(i,String(c[i]))}),d.length&&d.forEach(i=>{const p=l(...i);n.appendChild(p)}),n};var e=([t,c,d])=>l(t,c,d);const qp=t=>Array.from(t.attributes).reduce((c,d)=>(c[d.name]=d.value,c),{}),Np=t=>typeof t=="string"?t:!t||!t.class?"":t.class&&typeof t.class=="string"?t.class.split(" "):t.class&&Array.isArray(t.class)?t.class:"",Xp=t=>t.flatMap(Np).map(c=>c.trim()).filter(Boolean).filter((c,d,n)=>n.indexOf(c)===d).join(" "),Jp=t=>t.replace(/(\w)(\w*)(_|-|\s*)/g,(c,d,n)=>d.toUpperCase()+n.toLowerCase()),jp=(t,{nameAttr:c,icons:d,attrs:n})=>{const i=t.getAttribute(c);if(i==null)return;const p=Jp(i),Gp=d[p];if(!Gp)return console.warn(`${t.outerHTML} icon name was not found in the provided icons object.`);const Ep=qp(t),[Qp,_p,Yp]=Gp,Wp={..._p,"icon-name":i,...n,...Ep},Ip=Xp(["lucide",`lucide-${i}`,Ep,n]);Ip&&Object.assign(Wp,{class:Ip});const ae=e([Qp,Wp,Yp]);return t.parentNode?.replaceChild(ae,t)},h={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},M=["svg",h,[["circle",{cx:"16",cy:"4",r:"1"}],["path",{d:"m18 19 1-7-6 1"}],["path",{d:"m5 8 3-3 5.5 3-2.36 3.5"}],["path",{d:"M4.24 14.5a5 5 0 0 0 6.88 6"}],["path",{d:"M13.76 17.5a5 5 0 0 0-6.88-6"}]]],v=["svg",h,[["polyline",{points:"22 12 18 12 15 21 9 3 6 12 2 12"}]]],o=["svg",h,[["path",{d:"M6 12H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"}],["path",{d:"M6 8h12"}],["path",{d:"M18.3 17.7a2.5 2.5 0 0 1-3.16 3.83 2.53 2.53 0 0 1-1.14-2V12"}],["path",{d:"M6.6 15.6A2 2 0 1 0 10 17v-5"}]]],y=["svg",h,[["path",{d:"M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1"}],["polygon",{points:"12 15 17 21 7 21 12 15"}]]],s=["svg",h,[["circle",{cx:"12",cy:"13",r:"8"}],["path",{d:"M5 3 2 6"}],["path",{d:"m22 6-3-3"}],["path",{d:"M6.38 18.7 4 21"}],["path",{d:"M17.64 18.67 20 21"}],["path",{d:"m9 13 2 2 4-4"}]]],g=["svg",h,[["path",{d:"M6.87 6.87a8 8 0 1 0 11.26 11.26"}],["path",{d:"M19.9 14.25a8 8 0 0 0-9.15-9.15"}],["path",{d:"m22 6-3-3"}],["path",{d:"M6.26 18.67 4 21"}],["path",{d:"m2 2 20 20"}],["path",{d:"M4 4 2 6"}]]],r=["svg",h,[["circle",{cx:"12",cy:"13",r:"8"}],["path",{d:"M12 9v4l2 2"}],["path",{d:"M5 3 2 6"}],["path",{d:"m22 6-3-3"}],["path",{d:"M6.38 18.7 4 21"}],["path",{d:"M17.64 18.67 20 21"}]]],$=["svg",h,[["circle",{cx:"12",cy:"13",r:"8"}],["path",{d:"M5 3 2 6"}],["path",{d:"m22 6-3-3"}],["path",{d:"M6.38 18.7 4 21"}],["path",{d:"M17.64 18.67 20 21"}],["path",{d:"M9 13h6"}]]],m=["svg",h,[["circle",{cx:"12",cy:"13",r:"8"}],["path",{d:"M5 3 2 6"}],["path",{d:"m22 6-3-3"}],["path",{d:"M6.38 18.7 4 21"}],["path",{d:"M17.64 18.67 20 21"}],["path",{d:"M12 10v6"}],["path",{d:"M9 13h6"}]]],x=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["polyline",{points:"11 3 11 11 14 8 17 11 17 3"}]]],H=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16"}]]],C=["svg",h,[["polygon",{points:"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16"}]]],V=["svg",h,[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"}],["line",{x1:"12",x2:"12",y1:"9",y2:"13"}],["line",{x1:"12",x2:"12.01",y1:"17",y2:"17"}]]],u=["svg",h,[["path",{d:"M2 12h20"}],["path",{d:"M10 16v4a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-4"}],["path",{d:"M10 8V4a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v4"}],["path",{d:"M20 16v1a2 2 0 0 1-2 2h-2a2 2 0 0 1-2-2v-1"}],["path",{d:"M14 8V7c0-1.1.9-2 2-2h2a2 2 0 0 1 2 2v1"}]]],A=["svg",h,[["path",{d:"M12 2v20"}],["path",{d:"M8 10H4a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h4"}],["path",{d:"M16 10h4a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2h-4"}],["path",{d:"M8 20H7a2 2 0 0 1-2-2v-2c0-1.1.9-2 2-2h1"}],["path",{d:"M16 14h1a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2h-1"}]]],w=["svg",h,[["line",{x1:"21",x2:"3",y1:"6",y2:"6"}],["line",{x1:"17",x2:"7",y1:"12",y2:"12"}],["line",{x1:"19",x2:"5",y1:"18",y2:"18"}]]],L=["svg",h,[["rect",{width:"6",height:"16",x:"4",y:"2",rx:"2"}],["rect",{width:"6",height:"9",x:"14",y:"9",rx:"2"}],["path",{d:"M22 22H2"}]]],S=["svg",h,[["rect",{width:"16",height:"6",x:"2",y:"4",rx:"2"}],["rect",{width:"9",height:"6",x:"9",y:"14",rx:"2"}],["path",{d:"M22 22V2"}]]],f=["svg",h,[["rect",{width:"6",height:"14",x:"4",y:"5",rx:"2"}],["rect",{width:"6",height:"10",x:"14",y:"7",rx:"2"}],["path",{d:"M17 22v-5"}],["path",{d:"M17 7V2"}],["path",{d:"M7 22v-3"}],["path",{d:"M7 5V2"}]]],k=["svg",h,[["rect",{width:"6",height:"14",x:"4",y:"5",rx:"2"}],["rect",{width:"6",height:"10",x:"14",y:"7",rx:"2"}],["path",{d:"M10 2v20"}],["path",{d:"M20 2v20"}]]],F=["svg",h,[["rect",{width:"6",height:"14",x:"4",y:"5",rx:"2"}],["rect",{width:"6",height:"10",x:"14",y:"7",rx:"2"}],["path",{d:"M4 2v20"}],["path",{d:"M14 2v20"}]]],Z=["svg",h,[["rect",{width:"6",height:"14",x:"2",y:"5",rx:"2"}],["rect",{width:"6",height:"10",x:"16",y:"7",rx:"2"}],["path",{d:"M12 2v20"}]]],z=["svg",h,[["rect",{width:"6",height:"14",x:"2",y:"5",rx:"2"}],["rect",{width:"6",height:"10",x:"12",y:"7",rx:"2"}],["path",{d:"M22 2v20"}]]],B=["svg",h,[["rect",{width:"6",height:"14",x:"6",y:"5",rx:"2"}],["rect",{width:"6",height:"10",x:"16",y:"7",rx:"2"}],["path",{d:"M2 2v20"}]]],P=["svg",h,[["rect",{width:"6",height:"10",x:"9",y:"7",rx:"2"}],["path",{d:"M4 22V2"}],["path",{d:"M20 22V2"}]]],D=["svg",h,[["rect",{width:"6",height:"14",x:"3",y:"5",rx:"2"}],["rect",{width:"6",height:"10",x:"15",y:"7",rx:"2"}],["path",{d:"M3 2v20"}],["path",{d:"M21 2v20"}]]],b=["svg",h,[["line",{x1:"3",x2:"21",y1:"6",y2:"6"}],["line",{x1:"3",x2:"21",y1:"12",y2:"12"}],["line",{x1:"3",x2:"21",y1:"18",y2:"18"}]]],O=["svg",h,[["line",{x1:"21",x2:"3",y1:"6",y2:"6"}],["line",{x1:"15",x2:"3",y1:"12",y2:"12"}],["line",{x1:"17",x2:"3",y1:"18",y2:"18"}]]],R=["svg",h,[["line",{x1:"21",x2:"3",y1:"6",y2:"6"}],["line",{x1:"21",x2:"9",y1:"12",y2:"12"}],["line",{x1:"21",x2:"7",y1:"18",y2:"18"}]]],T=["svg",h,[["rect",{width:"6",height:"16",x:"4",y:"6",rx:"2"}],["rect",{width:"6",height:"9",x:"14",y:"6",rx:"2"}],["path",{d:"M22 2H2"}]]],U=["svg",h,[["rect",{width:"9",height:"6",x:"6",y:"14",rx:"2"}],["rect",{width:"16",height:"6",x:"6",y:"4",rx:"2"}],["path",{d:"M2 2v20"}]]],G=["svg",h,[["rect",{width:"14",height:"6",x:"5",y:"14",rx:"2"}],["rect",{width:"10",height:"6",x:"7",y:"4",rx:"2"}],["path",{d:"M22 7h-5"}],["path",{d:"M7 7H1"}],["path",{d:"M22 17h-3"}],["path",{d:"M5 17H2"}]]],E=["svg",h,[["rect",{width:"14",height:"6",x:"5",y:"14",rx:"2"}],["rect",{width:"10",height:"6",x:"7",y:"4",rx:"2"}],["path",{d:"M2 20h20"}],["path",{d:"M2 10h20"}]]],W=["svg",h,[["rect",{width:"14",height:"6",x:"5",y:"14",rx:"2"}],["rect",{width:"10",height:"6",x:"7",y:"4",rx:"2"}],["path",{d:"M2 14h20"}],["path",{d:"M2 4h20"}]]],I=["svg",h,[["rect",{width:"14",height:"6",x:"5",y:"16",rx:"2"}],["rect",{width:"10",height:"6",x:"7",y:"2",rx:"2"}],["path",{d:"M2 12h20"}]]],q=["svg",h,[["rect",{width:"14",height:"6",x:"5",y:"12",rx:"2"}],["rect",{width:"10",height:"6",x:"7",y:"2",rx:"2"}],["path",{d:"M2 22h20"}]]],N=["svg",h,[["rect",{width:"14",height:"6",x:"5",y:"16",rx:"2"}],["rect",{width:"10",height:"6",x:"7",y:"6",rx:"2"}],["path",{d:"M2 2h20"}]]],X=["svg",h,[["rect",{width:"10",height:"6",x:"7",y:"9",rx:"2"}],["path",{d:"M22 20H2"}],["path",{d:"M22 4H2"}]]],J=["svg",h,[["rect",{width:"14",height:"6",x:"5",y:"15",rx:"2"}],["rect",{width:"10",height:"6",x:"7",y:"3",rx:"2"}],["path",{d:"M2 21h20"}],["path",{d:"M2 3h20"}]]],j=["svg",h,[["circle",{cx:"12",cy:"5",r:"3"}],["line",{x1:"12",x2:"12",y1:"22",y2:"8"}],["path",{d:"M5 12H2a10 10 0 0 0 20 0h-3"}]]],K=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M16 16s-1.5-2-4-2-4 2-4 2"}],["path",{d:"M7.5 8 10 9"}],["path",{d:"m14 9 2.5-1"}],["path",{d:"M9 10h0"}],["path",{d:"M15 10h0"}]]],Q=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M8 15h8"}],["path",{d:"M8 9h2"}],["path",{d:"M14 9h2"}]]],_=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["line",{x1:"14.31",x2:"20.05",y1:"8",y2:"17.94"}],["line",{x1:"9.69",x2:"21.17",y1:"8",y2:"8"}],["line",{x1:"7.38",x2:"13.12",y1:"12",y2:"2.06"}],["line",{x1:"9.69",x2:"3.95",y1:"16",y2:"6.06"}],["line",{x1:"14.31",x2:"2.83",y1:"16",y2:"16"}],["line",{x1:"16.62",x2:"10.88",y1:"12",y2:"21.94"}]]],Y=["svg",h,[["path",{d:"M12 20.94c1.5 0 2.75 1.06 4 1.06 3 0 6-8 6-12.22A4.91 4.91 0 0 0 17 5c-2.22 0-4 1.44-5 2-1-.56-2.78-2-5-2a4.9 4.9 0 0 0-5 4.78C2 14 5 22 8 22c1.25 0 2.5-1.06 4-1.06Z"}],["path",{d:"M10 2c1 .5 2 2 2 5"}]]],a1=["svg",h,[["rect",{width:"20",height:"5",x:"2",y:"4",rx:"2"}],["path",{d:"M12 13v7"}],["path",{d:"m9 16 3-3 3 3"}],["path",{d:"M4 9v9a2 2 0 0 0 2 2h2"}],["path",{d:"M20 9v9a2 2 0 0 1-2 2h-2"}]]],h1=["svg",h,[["rect",{width:"20",height:"5",x:"2",y:"4",rx:"2"}],["path",{d:"M4 9v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9"}],["path",{d:"M10 13h4"}]]],t1=["svg",h,[["path",{d:"M19 9V6a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v3"}],["path",{d:"M3 11v5a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-5a2 2 0 0 0-4 0v2H7v-2a2 2 0 0 0-4 0Z"}],["path",{d:"M5 18v2"}],["path",{d:"M19 18v2"}]]],c1=["svg",h,[["path",{d:"M15 5H9"}],["path",{d:"M15 9v3h4l-7 7-7-7h4V9h6z"}]]],d1=["svg",h,[["path",{d:"M15 6v6h4l-7 7-7-7h4V6h6z"}]]],n1=["svg",h,[["path",{d:"M19 15V9"}],["path",{d:"M15 15h-3v4l-7-7 7-7v4h3v6z"}]]],i1=["svg",h,[["path",{d:"M18 15h-6v4l-7-7 7-7v4h6v6z"}]]],l1=["svg",h,[["path",{d:"M5 9v6"}],["path",{d:"M9 9h3V5l7 7-7 7v-4H9V9z"}]]],p1=["svg",h,[["path",{d:"M6 9h6V5l7 7-7 7v-4H6V9z"}]]],e1=["svg",h,[["path",{d:"M9 19h6"}],["path",{d:"M9 15v-3H5l7-7 7 7h-4v3H9z"}]]],M1=["svg",h,[["path",{d:"M9 18v-6H5l7-7 7 7h-4v6H9z"}]]],v1=["svg",h,[["path",{d:"m3 16 4 4 4-4"}],["path",{d:"M7 20V4"}],["rect",{x:"15",y:"4",width:"4",height:"6",ry:"2"}],["path",{d:"M17 20v-6h-2"}],["path",{d:"M15 20h4"}]]],o1=["svg",h,[["path",{d:"m3 16 4 4 4-4"}],["path",{d:"M7 20V4"}],["path",{d:"M17 10V4h-2"}],["path",{d:"M15 10h4"}],["rect",{x:"15",y:"14",width:"4",height:"6",ry:"2"}]]],y1=["svg",h,[["path",{d:"m3 16 4 4 4-4"}],["path",{d:"M7 20V4"}],["path",{d:"M20 8h-5"}],["path",{d:"M15 10V6.5a2.5 2.5 0 0 1 5 0V10"}],["path",{d:"M15 14h5l-5 6h5"}]]],s1=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"8 12 12 16 16 12"}],["line",{x1:"12",x2:"12",y1:"8",y2:"16"}]]],g1=["svg",h,[["polyline",{points:"8,22 2,22 2,16 "}],["line",{x1:"2",y1:"22",x2:"12",y2:"12"}],["path",{d:"M2,12C2,6.5,6.5,2,12,2s10,4.5,10,10s-4.5,10-10,10"}]]],r1=["svg",h,[["line",{x1:"17",x2:"7",y1:"7",y2:"17"}],["polyline",{points:"17 17 7 17 7 7"}]]],$1=["svg",h,[["path",{d:"m3 16 4 4 4-4"}],["path",{d:"M7 20V4"}],["path",{d:"M11 4h4"}],["path",{d:"M11 8h7"}],["path",{d:"M11 12h10"}]]],m1=["svg",h,[["polyline",{points:"22,16 22,22 16,22 "}],["line",{x1:"22",y1:"22",x2:"12",y2:"12"}],["path",{d:"M12,22C6.5,22,2,17.5,2,12S6.5,2,12,2s10,4.5,10,10"}]]],x1=["svg",h,[["line",{x1:"7",x2:"17",y1:"7",y2:"17"}],["polyline",{points:"17 7 17 17 7 17"}]]],H1=["svg",h,[["path",{d:"m3 16 4 4 4-4"}],["path",{d:"M7 20V4"}],["path",{d:"m21 8-4-4-4 4"}],["path",{d:"M17 4v16"}]]],C1=["svg",h,[["path",{d:"m3 16 4 4 4-4"}],["path",{d:"M7 20V4"}],["path",{d:"M11 4h10"}],["path",{d:"M11 8h7"}],["path",{d:"M11 12h4"}]]],V1=["svg",h,[["path",{d:"m3 16 4 4 4-4"}],["path",{d:"M7 4v16"}],["path",{d:"M15 4h5l-5 6h5"}],["path",{d:"M15 20v-3.5a2.5 2.5 0 0 1 5 0V20"}],["path",{d:"M20 18h-5"}]]],u1=["svg",h,[["line",{x1:"12",x2:"12",y1:"5",y2:"19"}],["polyline",{points:"19 12 12 19 5 12"}]]],A1=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 8 8 12 12 16"}],["line",{x1:"16",x2:"8",y1:"12",y2:"12"}]]],w1=["svg",h,[["path",{d:"M8 3 4 7l4 4"}],["path",{d:"M4 7h16"}],["path",{d:"m16 21 4-4-4-4"}],["path",{d:"M20 17H4"}]]],L1=["svg",h,[["line",{x1:"19",x2:"5",y1:"12",y2:"12"}],["polyline",{points:"12 19 5 12 12 5"}]]],S1=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 16 16 12 12 8"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12"}]]],f1=["svg",h,[["path",{d:"m16 3 4 4-4 4"}],["path",{d:"M20 7H4"}],["path",{d:"m8 21-4-4 4-4"}],["path",{d:"M4 17h16"}]]],k1=["svg",h,[["line",{x1:"5",x2:"19",y1:"12",y2:"12"}],["polyline",{points:"12 5 19 12 12 19"}]]],F1=["svg",h,[["path",{d:"m3 8 4-4 4 4"}],["path",{d:"M7 4v16"}],["rect",{x:"15",y:"4",width:"4",height:"6",ry:"2"}],["path",{d:"M17 20v-6h-2"}],["path",{d:"M15 20h4"}]]],Z1=["svg",h,[["path",{d:"m3 8 4-4 4 4"}],["path",{d:"M7 4v16"}],["path",{d:"M17 10V4h-2"}],["path",{d:"M15 10h4"}],["rect",{x:"15",y:"14",width:"4",height:"6",ry:"2"}]]],z1=["svg",h,[["path",{d:"m3 8 4-4 4 4"}],["path",{d:"M7 4v16"}],["path",{d:"M20 8h-5"}],["path",{d:"M15 10V6.5a2.5 2.5 0 0 1 5 0V10"}],["path",{d:"M15 14h5l-5 6h5"}]]],B1=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"16 12 12 8 8 12"}],["line",{x1:"12",x2:"12",y1:"16",y2:"8"}]]],P1=["svg",h,[["path",{d:"m21 16-4 4-4-4"}],["path",{d:"M17 20V4"}],["path",{d:"m3 8 4-4 4 4"}],["path",{d:"M7 4v16"}]]],D1=["svg",h,[["path",{d:"M12,2c5.5,0,10,4.5,10,10s-4.5,10-10,10S2,17.5,2,12"}],["polyline",{points:"2,8 2,2 8,2 "}],["line",{x1:"2",y1:"2",x2:"12",y2:"12"}]]],b1=["svg",h,[["line",{x1:"17",x2:"7",y1:"17",y2:"7"}],["polyline",{points:"7 17 7 7 17 7"}]]],O1=["svg",h,[["path",{d:"m3 8 4-4 4 4"}],["path",{d:"M7 4v16"}],["path",{d:"M11 12h4"}],["path",{d:"M11 16h7"}],["path",{d:"M11 20h10"}]]],R1=["svg",h,[["polyline",{points:"16,2 22,2 22,8 "}],["line",{x1:"22",y1:"2",x2:"12",y2:"12"}],["path",{d:"M22,12c0,5.5-4.5,10-10,10S2,17.5,2,12S6.5,2,12,2"}]]],T1=["svg",h,[["line",{x1:"7",x2:"17",y1:"17",y2:"7"}],["polyline",{points:"7 7 17 7 17 17"}]]],U1=["svg",h,[["path",{d:"m3 8 4-4 4 4"}],["path",{d:"M7 4v16"}],["path",{d:"M11 12h10"}],["path",{d:"M11 16h7"}],["path",{d:"M11 20h4"}]]],G1=["svg",h,[["path",{d:"m3 8 4-4 4 4"}],["path",{d:"M7 4v16"}],["path",{d:"M15 4h5l-5 6h5"}],["path",{d:"M15 20v-3.5a2.5 2.5 0 0 1 5 0V20"}],["path",{d:"M20 18h-5"}]]],E1=["svg",h,[["line",{x1:"12",x2:"12",y1:"19",y2:"5"}],["polyline",{points:"5 12 12 5 19 12"}]]],W1=["svg",h,[["path",{d:"M12 6v12"}],["path",{d:"M17.196 9 6.804 15"}],["path",{d:"m6.804 9 10.392 6"}]]],I1=["svg",h,[["circle",{cx:"12",cy:"12",r:"4"}],["path",{d:"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94"}]]],q1=["svg",h,[["circle",{cx:"12",cy:"12",r:"1"}],["path",{d:"M20.2 20.2c2.04-2.03.02-7.36-4.5-11.9-4.54-4.52-9.87-6.54-11.9-4.5-2.04 2.03-.02 7.36 4.5 11.9 4.54 4.52 9.87 6.54 11.9 4.5Z"}],["path",{d:"M15.7 15.7c4.52-4.54 6.54-9.87 4.5-11.9-2.03-2.04-7.36-.02-11.9 4.5-4.52 4.54-6.54 9.87-4.5 11.9 2.03 2.04 7.36.02 11.9-4.5Z"}]]],N1=["svg",h,[["circle",{cx:"12",cy:"8",r:"6"}],["path",{d:"M15.477 12.89 17 22l-5-3-5 3 1.523-9.11"}]]],X1=["svg",h,[["path",{d:"m14 12-8.5 8.5a2.12 2.12 0 1 1-3-3L11 9"}],["path",{d:"M15 13 9 7l4-4 6 6h3a8 8 0 0 1-7 7z"}]]],J1=["svg",h,[["path",{d:"M4 4v16h16"}],["path",{d:"m4 20 7-7"}]]],j1=["svg",h,[["path",{d:"M9 12h.01"}],["path",{d:"M15 12h.01"}],["path",{d:"M10 16c.5.3 1.2.5 2 .5s1.5-.2 2-.5"}],["path",{d:"M19 6.3a9 9 0 0 1 1.8 3.9 2 2 0 0 1 0 3.6 9 9 0 0 1-17.6 0 2 2 0 0 1 0-3.6A9 9 0 0 1 12 3c2 0 3.5 1.1 3.5 2.5s-.9 2.5-2 2.5c-.8 0-1.5-.4-1.5-1"}]]],K1=["svg",h,[["path",{d:"M4 20V10a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v10a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2Z"}],["path",{d:"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2"}],["path",{d:"M8 21v-5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v5"}],["path",{d:"M8 10h8"}],["path",{d:"M8 18h8"}]]],Q1=["svg",h,[["path",{d:"M22 18H6a2 2 0 0 1-2-2V7a2 2 0 0 0-2-2"}],["path",{d:"M17 14V4a2 2 0 0 0-2-2h-1a2 2 0 0 0-2 2v10"}],["rect",{width:"13",height:"8",x:"8",y:"6",rx:"1"}],["circle",{cx:"18",cy:"20",r:"2"}],["circle",{cx:"9",cy:"20",r:"2"}]]],_1=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["line",{x1:"4.93",x2:"19.07",y1:"4.93",y2:"19.07"}]]],Y1=["svg",h,[["path",{d:"M4 13c3.5-2 8-2 10 2a5.5 5.5 0 0 1 8 5"}],["path",{d:"M5.15 17.89c5.52-1.52 8.65-6.89 7-12C11.55 4 11.5 2 13 2c3.22 0 5 5.5 5 8 0 6.5-4.2 12-10.49 12C5.11 22 2 22 2 20c0-1.5 1.14-1.55 3.15-2.11Z"}]]],a2=["svg",h,[["rect",{width:"20",height:"12",x:"2",y:"6",rx:"2"}],["circle",{cx:"12",cy:"12",r:"2"}],["path",{d:"M6 12h.01M18 12h.01"}]]],h2=["svg",h,[["line",{x1:"18",x2:"18",y1:"20",y2:"10"}],["line",{x1:"12",x2:"12",y1:"20",y2:"4"}],["line",{x1:"6",x2:"6",y1:"20",y2:"14"}]]],t2=["svg",h,[["path",{d:"M3 3v18h18"}],["path",{d:"M18 17V9"}],["path",{d:"M13 17V5"}],["path",{d:"M8 17v-3"}]]],c2=["svg",h,[["path",{d:"M3 3v18h18"}],["path",{d:"M13 17V9"}],["path",{d:"M18 17V5"}],["path",{d:"M8 17v-3"}]]],d2=["svg",h,[["path",{d:"M3 3v18h18"}],["path",{d:"M7 16h8"}],["path",{d:"M7 11h12"}],["path",{d:"M7 6h3"}]]],n2=["svg",h,[["line",{x1:"12",x2:"12",y1:"20",y2:"10"}],["line",{x1:"18",x2:"18",y1:"20",y2:"4"}],["line",{x1:"6",x2:"6",y1:"20",y2:"16"}]]],i2=["svg",h,[["path",{d:"M4 20h16"}],["path",{d:"m6 16 6-12 6 12"}],["path",{d:"M8 12h8"}]]],l2=["svg",h,[["path",{d:"M9 6 6.5 3.5a1.5 1.5 0 0 0-1-.5C4.683 3 4 3.683 4 4.5V17a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5"}],["line",{x1:"10",x2:"8",y1:"5",y2:"7"}],["line",{x1:"2",x2:"22",y1:"12",y2:"12"}],["line",{x1:"7",x2:"7",y1:"19",y2:"21"}],["line",{x1:"17",x2:"17",y1:"19",y2:"21"}]]],p2=["svg",h,[["path",{d:"M15 7h1a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2h-2"}],["path",{d:"M6 7H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h1"}],["path",{d:"m11 7-3 5h4l-3 5"}],["line",{x1:"22",x2:"22",y1:"11",y2:"13"}]]],e2=["svg",h,[["rect",{width:"16",height:"10",x:"2",y:"7",rx:"2",ry:"2"}],["line",{x1:"22",x2:"22",y1:"11",y2:"13"}],["line",{x1:"6",x2:"6",y1:"11",y2:"13"}],["line",{x1:"10",x2:"10",y1:"11",y2:"13"}],["line",{x1:"14",x2:"14",y1:"11",y2:"13"}]]],M2=["svg",h,[["rect",{width:"16",height:"10",x:"2",y:"7",rx:"2",ry:"2"}],["line",{x1:"22",x2:"22",y1:"11",y2:"13"}],["line",{x1:"6",x2:"6",y1:"11",y2:"13"}]]],v2=["svg",h,[["rect",{width:"16",height:"10",x:"2",y:"7",rx:"2",ry:"2"}],["line",{x1:"22",x2:"22",y1:"11",y2:"13"}],["line",{x1:"6",x2:"6",y1:"11",y2:"13"}],["line",{x1:"10",x2:"10",y1:"11",y2:"13"}]]],o2=["svg",h,[["path",{d:"M14 7h2a2 2 0 0 1 2 2v6c0 1-1 2-2 2h-2"}],["path",{d:"M6 7H4a2 2 0 0 0-2 2v6c0 1 1 2 2 2h2"}],["line",{x1:"22",x2:"22",y1:"11",y2:"13"}],["line",{x1:"10",x2:"10",y1:"7",y2:"13"}],["line",{x1:"10",x2:"10",y1:"17",y2:"17.01"}]]],y2=["svg",h,[["rect",{width:"16",height:"10",x:"2",y:"7",rx:"2",ry:"2"}],["line",{x1:"22",x2:"22",y1:"11",y2:"13"}]]],s2=["svg",h,[["path",{d:"M4.5 3h15"}],["path",{d:"M6 3v16a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V3"}],["path",{d:"M6 14h12"}]]],g2=["svg",h,[["path",{d:"M9 9c-.64.64-1.521.954-2.402 1.165A6 6 0 0 0 8 22a13.96 13.96 0 0 0 9.9-4.1"}],["path",{d:"M10.75 5.093A6 6 0 0 1 22 8c0 2.411-.61 4.68-1.683 6.66"}],["path",{d:"M5.341 10.62a4 4 0 0 0 6.487 1.208M10.62 5.341a4.015 4.015 0 0 1 2.039 2.04"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],r2=["svg",h,[["path",{d:"M10.165 6.598C9.954 7.478 9.64 8.36 9 9c-.64.64-1.521.954-2.402 1.165A6 6 0 0 0 8 22c7.732 0 14-6.268 14-14a6 6 0 0 0-11.835-1.402Z"}],["path",{d:"M5.341 10.62a4 4 0 1 0 5.279-5.28"}]]],$2=["svg",h,[["path",{d:"M2 20v-8a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v8"}],["path",{d:"M4 10V6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4"}],["path",{d:"M12 4v6"}],["path",{d:"M2 18h20"}]]],m2=["svg",h,[["path",{d:"M3 20v-8a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v8"}],["path",{d:"M5 10V6a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v4"}],["path",{d:"M3 18h18"}]]],x2=["svg",h,[["path",{d:"M2 4v16"}],["path",{d:"M2 8h18a2 2 0 0 1 2 2v10"}],["path",{d:"M2 17h20"}],["path",{d:"M6 8v9"}]]],H2=["svg",h,[["circle",{cx:"12.5",cy:"8.5",r:"2.5"}],["path",{d:"M12.5 2a6.5 6.5 0 0 0-6.22 4.6c-1.1 3.13-.78 3.9-3.18 6.08A3 3 0 0 0 5 18c4 0 8.4-1.8 11.4-4.3A6.5 6.5 0 0 0 12.5 2Z"}],["path",{d:"m18.5 6 2.19 4.5a6.48 6.48 0 0 1 .31 2 6.49 6.49 0 0 1-2.6 5.2C15.4 20.2 11 22 7 22a3 3 0 0 1-2.68-1.66L2.4 16.5"}]]],C2=["svg",h,[["path",{d:"M17 11h1a3 3 0 0 1 0 6h-1"}],["path",{d:"M9 12v6"}],["path",{d:"M13 12v6"}],["path",{d:"M14 7.5c-1 0-1.44.5-3 .5s-2-.5-3-.5-1.72.5-2.5.5a2.5 2.5 0 0 1 0-5c.78 0 1.57.5 2.5.5S9.44 2 11 2s2 1.5 3 1.5 1.72-.5 2.5-.5a2.5 2.5 0 0 1 0 5c-.78 0-1.5-.5-2.5-.5Z"}],["path",{d:"M5 8v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8"}]]],V2=["svg",h,[["path",{d:"M13.73 21a2 2 0 0 1-3.46 0"}],["path",{d:"M21 5h-6"}],["path",{d:"M18.021 9C18.29 15.193 21 17 21 17H3s3-2 3-9a6 6 0 0 1 7-5.916"}]]],u2=["svg",h,[["path",{d:"M13.73 21a2 2 0 0 1-3.46 0"}],["path",{d:"M18.63 13A17.888 17.888 0 0 1 18 8"}],["path",{d:"M6.26 6.26A5.86 5.86 0 0 0 6 8c0 7-3 9-3 9h14"}],["path",{d:"M18 8a6 6 0 0 0-9.33-5"}],["path",{d:"m2 2 20 20"}]]],A2=["svg",h,[["path",{d:"M18.387 12C19.198 15.799 21 17 21 17H3s3-2 3-9a6 6 0 0 1 7-5.916"}],["path",{d:"M13.73 21a2 2 0 0 1-3.46 0"}],["path",{d:"M18 2v6"}],["path",{d:"M21 5h-6"}]]],w2=["svg",h,[["path",{d:"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"}],["path",{d:"M13.73 21a2 2 0 0 1-3.46 0"}],["path",{d:"M2 8c0-2.2.7-4.3 2-6"}],["path",{d:"M22 8a10 10 0 0 0-2-6"}]]],L2=["svg",h,[["path",{d:"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"}],["path",{d:"M13.73 21a2 2 0 0 1-3.46 0"}]]],S2=["svg",h,[["circle",{cx:"18.5",cy:"17.5",r:"3.5"}],["circle",{cx:"5.5",cy:"17.5",r:"3.5"}],["circle",{cx:"15",cy:"5",r:"1"}],["path",{d:"M12 17.5V14l-3-3 4-3 2 3h2"}]]],f2=["svg",h,[["path",{d:"M6 20h4"}],["path",{d:"M14 10h4"}],["path",{d:"M6 14h2v6"}],["path",{d:"M14 4h2v6"}],["rect",{width:"4",height:"6",x:"6",y:"4"}],["rect",{width:"4",height:"6",x:"14",y:"14"}]]],k2=["svg",h,[["path",{d:"M16 7h.01"}],["path",{d:"M3.4 18H12a8 8 0 0 0 8-8V7a4 4 0 0 0-7.28-2.3L2 20"}],["path",{d:"m20 7 2 .5-2 .5"}],["path",{d:"M10 18v3"}],["path",{d:"M14 17.75V21"}],["path",{d:"M7 18a6 6 0 0 0 3.84-10.61"}]]],F2=["svg",h,[["path",{d:"M11.767 19.089c4.924.868 6.14-6.025 1.216-6.894m-1.216 6.894L5.86 18.047m5.908 1.042-.347 1.97m1.563-8.864c4.924.869 6.14-6.025 1.215-6.893m-1.215 6.893-3.94-.694m5.155-6.2L8.29 4.26m5.908 1.042.348-1.97M7.48 20.364l3.126-17.727"}]]],Z2=["svg",h,[["path",{d:"M3 3h18"}],["path",{d:"M20 7H8"}],["path",{d:"M20 11H8"}],["path",{d:"M10 19h10"}],["path",{d:"M8 15h12"}],["path",{d:"M4 3v14"}],["circle",{cx:"4",cy:"19",r:"2"}]]],z2=["svg",h,[["path",{d:"m7 7 10 10-5 5V2l5 5L7 17"}],["line",{x1:"18",x2:"21",y1:"12",y2:"12"}],["line",{x1:"3",x2:"6",y1:"12",y2:"12"}]]],B2=["svg",h,[["path",{d:"m17 17-5 5V12l-5 5"}],["path",{d:"m2 2 20 20"}],["path",{d:"M14.5 9.5 17 7l-5-5v4.5"}]]],P2=["svg",h,[["path",{d:"m7 7 10 10-5 5V2l5 5L7 17"}],["path",{d:"M20.83 14.83a4 4 0 0 0 0-5.66"}],["path",{d:"M18 12h.01"}]]],D2=["svg",h,[["path",{d:"m7 7 10 10-5 5V2l5 5L7 17"}]]],b2=["svg",h,[["path",{d:"M14 12a4 4 0 0 0 0-8H6v8"}],["path",{d:"M15 20a4 4 0 0 0 0-8H6v8Z"}]]],O2=["svg",h,[["circle",{cx:"11",cy:"13",r:"9"}],["path",{d:"m19.5 9.5 1.8-1.8a2.4 2.4 0 0 0 0-3.4l-1.6-1.6a2.41 2.41 0 0 0-3.4 0l-1.8 1.8"}],["path",{d:"m22 2-1.5 1.5"}]]],R2=["svg",h,[["path",{d:"M17 10c.7-.7 1.69 0 2.5 0a2.5 2.5 0 1 0 0-5 .5.5 0 0 1-.5-.5 2.5 2.5 0 1 0-5 0c0 .81.7 1.8 0 2.5l-7 7c-.7.7-1.69 0-2.5 0a2.5 2.5 0 0 0 0 5c.28 0 .5.22.5.5a2.5 2.5 0 1 0 5 0c0-.81-.7-1.8 0-2.5Z"}]]],T2=["svg",h,[["path",{d:"M2,16V4c0-1.1,0.9-2,2-2h11"}],["path",{d:"M5,14H4c-1.1,0-2,0.9-2,2s0.9,2,2,2h1"}],["path",{d:"M22,18H11c-1.1,0-2,0.9-2,2l0,0"}],["path",{d:"M11,6h11v16H11c-1.1,0-2-0.9-2-2V8C9,6.9,9.9,6,11,6z"}]]],U2=["svg",h,[["path",{d:"M4 19.5A2.5 2.5 0 0 1 6.5 17H20"}],["path",{d:"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2Z"}],["path",{d:"M12 13V7"}],["path",{d:"m9 10 3 3 3-3"}]]],G2=["svg",h,[["path",{d:"M20,2l-4.5,4.5"}],["path",{d:"M19,3l1,1"}],["circle",{cx:"14",cy:"8",r:"2"}],["path",{d:"M4,19.5C4,18.1,5.1,17,6.5,17H20"}],["path",{d:"M20,8v14H6.5C5.1,22,4,20.9,4,19.5v-15C4,3.1,5.1,2,6.5,2H14"}]]],E2=["svg",h,[["path",{d:"M4,19.5C4,18.1,5.1,17,6.5,17H20"}],["path",{d:"M18,6V4c0-1.1-0.9-2-2-2s-2,0.9-2,2v2"}],["path",{d:"M20,15v7H6.5C5.1,22,4,20.9,4,19.5v-15C4,3.1,5.1,2,6.5,2H10"}],["path",{d:"M13,6h6c0.6,0,1,0.4,1,1v3c0,0.6-0.4,1-1,1h-6c-0.6,0-1-0.4-1-1V7C12,6.4,12.4,6,13,6z"}]]],W2=["svg",h,[["polyline",{points:"10,2 10,10 13,7 16,10 16,2"}],["path",{d:"M4 19.5A2.5 2.5 0 0 1 6.5 17H20"}],["path",{d:"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"}]]],I2=["svg",h,[["line",{x1:"9",y1:"10",x2:"15",y2:"10"}],["path",{d:"M4 19.5A2.5 2.5 0 0 1 6.5 17H20"}],["path",{d:"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"}]]],q2=["svg",h,[["path",{d:"M8 3H2v15h7c1.7 0 3 1.3 3 3V7c0-2.2-1.8-4-4-4Z"}],["path",{d:"m16 12 2 2 4-4"}],["path",{d:"M22 6V3h-6c-2.2 0-4 1.8-4 4v14c0-1.7 1.3-3 3-3h7v-2.3"}]]],N2=["svg",h,[["path",{d:"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"}],["path",{d:"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"}]]],X2=["svg",h,[["line",{x1:"12",y1:"7",x2:"12",y2:"13"}],["line",{x1:"9",y1:"10",x2:"15",y2:"10"}],["path",{d:"M4 19.5A2.5 2.5 0 0 1 6.5 17H20"}],["path",{d:"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"}]]],J2=["svg",h,[["path",{d:"M20,22h-2"}],["path",{d:"M20,15v2l-2,0"}],["path",{d:"M4,19.5V15"}],["path",{d:"M20,8v3"}],["path",{d:"M18,2h2v2"}],["path",{d:"M4,11V9"}],["path",{d:"M12,2h2"}],["path",{d:"M12,22h2"}],["path",{d:"M12,17h2"}],["path",{d:"M8,22H6.5C5.1,22,4,20.9,4,19.5S5.1,17,6.5,17H8"}],["path",{d:"M4,5V4.5C4,3.1,5.1,2,6.5,2H8"}]]],j2=["svg",h,[["path",{d:"M4 19.5A2.5 2.5 0 0 1 6.5 17H20"}],["path",{d:"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2Z"}],["path",{d:"M12,13V7"}],["path",{d:"M9,10l3-3l3,3"}]]],K2=["svg",h,[["path",{d:"M9.5,7l5,5"}],["path",{d:"M14.5,7l-5,5"}],["path",{d:"M4 19.5A2.5 2.5 0 0 1 6.5 17H20"}],["path",{d:"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"}]]],Q2=["svg",h,[["path",{d:"M4 19.5A2.5 2.5 0 0 1 6.5 17H20"}],["path",{d:"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"}]]],_2=["svg",h,[["path",{d:"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z"}],["line",{x1:"15",x2:"9",y1:"10",y2:"10"}]]],Y2=["svg",h,[["path",{d:"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z"}],["line",{x1:"12",x2:"12",y1:"7",y2:"13"}],["line",{x1:"15",x2:"9",y1:"10",y2:"10"}]]],a0=["svg",h,[["path",{d:"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z"}]]],h0=["svg",h,[["rect",{width:"18",height:"10",x:"3",y:"11",rx:"2"}],["circle",{cx:"12",cy:"5",r:"2"}],["path",{d:"M12 7v4"}],["line",{x1:"8",x2:"8",y1:"16",y2:"16"}],["line",{x1:"16",x2:"16",y1:"16",y2:"16"}]]],t0=["svg",h,[["path",{d:"M5 3a2 2 0 0 0-2 2"}],["path",{d:"M19 3a2 2 0 0 1 2 2"}],["path",{d:"M21 19a2 2 0 0 1-2 2"}],["path",{d:"M5 21a2 2 0 0 1-2-2"}],["path",{d:"M9 3h1"}],["path",{d:"M9 21h1"}],["path",{d:"M14 3h1"}],["path",{d:"M14 21h1"}],["path",{d:"M3 9v1"}],["path",{d:"M21 9v1"}],["path",{d:"M3 14v1"}],["path",{d:"M21 14v1"}]]],c0=["svg",h,[["path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"}],["polyline",{points:"3.29 7 12 12 20.71 7"}],["line",{x1:"12",x2:"12",y1:"22",y2:"12"}]]],d0=["svg",h,[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z"}],["path",{d:"m7 16.5-4.74-2.85"}],["path",{d:"m7 16.5 5-3"}],["path",{d:"M7 16.5v5.17"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z"}],["path",{d:"m17 16.5-5-3"}],["path",{d:"m17 16.5 4.74-2.85"}],["path",{d:"M17 16.5v5.17"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z"}],["path",{d:"M12 8 7.26 5.15"}],["path",{d:"m12 8 4.74-2.85"}],["path",{d:"M12 13.5V8"}]]],n0=["svg",h,[["path",{d:"M12 4.5a2.5 2.5 0 0 0-4.96-.46 2.5 2.5 0 0 0-1.98 3 2.5 2.5 0 0 0-1.32 4.24 3 3 0 0 0 .34 5.58 2.5 2.5 0 0 0 2.96 3.08 2.5 2.5 0 0 0 4.91.05L12 20V4.5Z"}],["path",{d:"M16 8V5c0-1.1.9-2 2-2"}],["path",{d:"M12 13h4"}],["path",{d:"M12 18h6a2 2 0 0 1 2 2v1"}],["path",{d:"M12 8h8"}],["path",{d:"M20.5 8a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z"}],["path",{d:"M16.5 13a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z"}],["path",{d:"M20.5 21a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z"}],["path",{d:"M18.5 3a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z"}]]],i0=["svg",h,[["path",{d:"M12 4.5a2.5 2.5 0 0 0-4.96-.46 2.5 2.5 0 0 0-1.98 3 2.5 2.5 0 0 0-1.32 4.24 3 3 0 0 0 .34 5.58 2.5 2.5 0 0 0 2.96 3.08A2.5 2.5 0 0 0 9.5 22c1.21 0 2.5-.74 2.5-2.5m0-15a2.5 2.5 0 0 1 4.96-.46 2.5 2.5 0 0 1 1.98 3 2.5 2.5 0 0 1 1.32 4.24 3 3 0 0 1-.34 5.58 2.5 2.5 0 0 1-2.96 3.08A2.5 2.5 0 0 1 14.5 22c-1.21 0-2.5-.74-2.5-2.5m0-15V5m0 14.5V19"}],["circle",{cx:"12",cy:"12",r:"2"}],["path",{d:"M12 9v1"}],["path",{d:"M12 14v1"}],["path",{d:"m14.6 10.5-.87.5"}],["path",{d:"m10.27 13-.87.5"}],["path",{d:"m14.6 13.5-.87-.5"}],["path",{d:"m10.27 11-.87-.5"}]]],l0=["svg",h,[["path",{d:"M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08 3 3 0 0 1-.34-5.58 2.5 2.5 0 0 1 1.32-4.24 2.5 2.5 0 0 1 1.98-3A2.5 2.5 0 0 1 9.5 2Z"}],["path",{d:"M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-1.98-3A2.5 2.5 0 0 0 14.5 2Z"}]]],p0=["svg",h,[["rect",{width:"20",height:"14",x:"2",y:"7",rx:"2",ry:"2"}],["path",{d:"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"}]]],e0=["svg",h,[["path",{d:"m9.06 11.9 8.07-8.06a2.85 2.85 0 1 1 4.03 4.03l-8.06 8.08"}],["path",{d:"M7.07 14.94c-1.66 0-3 1.35-3 3.02 0 1.33-2.5 1.52-2 2.02 1.08 1.1 2.49 2.02 4 2.02 2.2 0 4-1.8 4-4.04a3.01 3.01 0 0 0-3-3.02z"}]]],M0=["svg",h,[["rect",{width:"8",height:"14",x:"8",y:"6",rx:"4"}],["path",{d:"m19 7-3 2"}],["path",{d:"m5 7 3 2"}],["path",{d:"m19 19-3-2"}],["path",{d:"m5 19 3-2"}],["path",{d:"M20 13h-4"}],["path",{d:"M4 13h4"}],["path",{d:"m10 4 1 2"}],["path",{d:"m14 4-1 2"}]]],v0=["svg",h,[["path",{d:"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z"}],["path",{d:"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2"}],["path",{d:"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2"}],["path",{d:"M10 6h4"}],["path",{d:"M10 10h4"}],["path",{d:"M10 14h4"}],["path",{d:"M10 18h4"}]]],o0=["svg",h,[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",ry:"2"}],["path",{d:"M9 22v-4h6v4"}],["path",{d:"M8 6h.01"}],["path",{d:"M16 6h.01"}],["path",{d:"M12 6h.01"}],["path",{d:"M12 10h.01"}],["path",{d:"M12 14h.01"}],["path",{d:"M16 10h.01"}],["path",{d:"M16 14h.01"}],["path",{d:"M8 10h.01"}],["path",{d:"M8 14h.01"}]]],y0=["svg",h,[["path",{d:"M19 17h2l.64-2.54c.24-.959.24-1.962 0-2.92l-1.07-4.27A3 3 0 0 0 17.66 5H4a2 2 0 0 0-2 2v10h2"}],["path",{d:"M14 17H9"}],["circle",{cx:"6.5",cy:"17.5",r:"2.5"}],["circle",{cx:"16.5",cy:"17.5",r:"2.5"}]]],s0=["svg",h,[["path",{d:"M20 21v-8a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8"}],["path",{d:"M4 16s.5-1 2-1 2.5 2 4 2 2.5-2 4-2 2.5 2 4 2 2-1 2-1"}],["path",{d:"M2 21h20"}],["path",{d:"M7 8v2"}],["path",{d:"M12 8v2"}],["path",{d:"M17 8v2"}],["path",{d:"M7 4h.01"}],["path",{d:"M12 4h.01"}],["path",{d:"M17 4h.01"}]]],g0=["svg",h,[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2"}],["line",{x1:"8",x2:"16",y1:"6",y2:"6"}],["line",{x1:"16",x2:"16",y1:"14",y2:"18"}],["path",{d:"M16 10h.01"}],["path",{d:"M12 10h.01"}],["path",{d:"M8 10h.01"}],["path",{d:"M12 14h.01"}],["path",{d:"M8 14h.01"}],["path",{d:"M12 18h.01"}],["path",{d:"M8 18h.01"}]]],r0=["svg",h,[["path",{d:"M21 14V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10"}],["path",{d:"m16 20 2 2 4-4"}]]],$0=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",ry:"2"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10"}],["path",{d:"m9 16 2 2 4-4"}]]],m0=["svg",h,[["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5"}],["path",{d:"M16 2v4"}],["path",{d:"M8 2v4"}],["path",{d:"M3 10h5"}],["path",{d:"M17.5 17.5 16 16.25V14"}],["path",{d:"M22 16a6 6 0 1 1-12 0 6 6 0 0 1 12 0Z"}]]],x0=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",ry:"2"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10"}],["path",{d:"M8 14h.01"}],["path",{d:"M12 14h.01"}],["path",{d:"M16 14h.01"}],["path",{d:"M8 18h.01"}],["path",{d:"M12 18h.01"}],["path",{d:"M16 18h.01"}]]],H0=["svg",h,[["path",{d:"M21 10V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h7"}],["path",{d:"M16 2v4"}],["path",{d:"M8 2v4"}],["path",{d:"M3 10h18"}],["path",{d:"M21.29 14.7a2.43 2.43 0 0 0-2.65-.52c-.3.12-.57.3-.8.53l-.34.34-.35-.34a2.43 2.43 0 0 0-2.65-.53c-.3.12-.56.3-.79.53-.95.94-1 2.53.2 3.74L17.5 22l3.6-3.55c1.2-1.21 1.14-2.8.19-3.74Z"}]]],C0=["svg",h,[["path",{d:"M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10"}],["line",{x1:"16",x2:"22",y1:"19",y2:"19"}]]],V0=["svg",h,[["path",{d:"M4.18 4.18A2 2 0 0 0 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 1.82-1.18"}],["path",{d:"M21 15.5V6a2 2 0 0 0-2-2H9.5"}],["path",{d:"M16 2v4"}],["path",{d:"M3 10h7"}],["path",{d:"M21 10h-5.5"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],u0=["svg",h,[["path",{d:"M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10"}],["line",{x1:"19",x2:"19",y1:"16",y2:"22"}],["line",{x1:"16",x2:"22",y1:"19",y2:"19"}]]],A0=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",ry:"2"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10"}],["path",{d:"M17 14h-6"}],["path",{d:"M13 18H7"}],["path",{d:"M7 14h.01"}],["path",{d:"M17 18h.01"}]]],w0=["svg",h,[["path",{d:"M21 12V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h7.5"}],["path",{d:"M16 2v4"}],["path",{d:"M8 2v4"}],["path",{d:"M3 10h18"}],["path",{d:"M18 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6v0Z"}],["path",{d:"m22 22-1.5-1.5"}]]],L0=["svg",h,[["path",{d:"M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10"}],["line",{x1:"17",x2:"22",y1:"17",y2:"22"}],["line",{x1:"17",x2:"22",y1:"22",y2:"17"}]]],S0=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",ry:"2"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10"}],["line",{x1:"10",x2:"14",y1:"14",y2:"18"}],["line",{x1:"14",x2:"10",y1:"14",y2:"18"}]]],f0=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",ry:"2"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10"}]]],k0=["svg",h,[["line",{x1:"2",x2:"22",y1:"2",y2:"22"}],["path",{d:"M7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16"}],["path",{d:"M9.5 4h5L17 7h3a2 2 0 0 1 2 2v7.5"}],["path",{d:"M14.121 15.121A3 3 0 1 1 9.88 10.88"}]]],F0=["svg",h,[["path",{d:"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z"}],["circle",{cx:"12",cy:"13",r:"3"}]]],Z0=["svg",h,[["path",{d:"m8.5 8.5-1 1a4.95 4.95 0 0 0 7 7l1-1"}],["path",{d:"M11.843 6.187A4.947 4.947 0 0 1 16.5 7.5a4.947 4.947 0 0 1 1.313 4.657"}],["path",{d:"M14 16.5V14"}],["path",{d:"M14 6.5v1.843"}],["path",{d:"M10 10v7.5"}],["path",{d:"m16 7 1-5 1.367.683A3 3 0 0 0 19.708 3H21v1.292a3 3 0 0 0 .317 1.341L22 7l-5 1"}],["path",{d:"m8 17-1 5-1.367-.683A3 3 0 0 0 4.292 21H3v-1.292a3 3 0 0 0-.317-1.341L2 17l5-1"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],z0=["svg",h,[["path",{d:"m9.5 7.5-2 2a4.95 4.95 0 1 0 7 7l2-2a4.95 4.95 0 1 0-7-7Z"}],["path",{d:"M14 6.5v10"}],["path",{d:"M10 7.5v10"}],["path",{d:"m16 7 1-5 1.37.68A3 3 0 0 0 19.7 3H21v1.3c0 .46.1.92.32 1.33L22 7l-5 1"}],["path",{d:"m8 17-1 5-1.37-.68A3 3 0 0 0 4.3 21H3v-1.3a3 3 0 0 0-.32-1.33L2 17l5-1"}]]],B0=["svg",h,[["path",{d:"M14 16H9m10 0h3v-3.15a1 1 0 0 0-.84-.99L16 11l-2.7-3.6a1 1 0 0 0-.8-.4H5.24a2 2 0 0 0-1.8 1.1l-.8 1.63A6 6 0 0 0 2 12.42V16h2"}],["circle",{cx:"6.5",cy:"16.5",r:"2.5"}],["circle",{cx:"16.5",cy:"16.5",r:"2.5"}]]],P0=["svg",h,[["path",{d:"M2.27 21.7s9.87-3.5 12.73-6.36a4.5 4.5 0 0 0-6.36-6.37C5.77 11.84 2.27 21.7 2.27 21.7zM8.64 14l-2.05-2.04M15.34 15l-2.46-2.46"}],["path",{d:"M22 9s-1.33-2-3.5-2C16.86 7 15 9 15 9s1.33 2 3.5 2S22 9 22 9z"}],["path",{d:"M15 2s-2 1.33-2 3.5S15 9 15 9s2-1.84 2-3.5C17 3.33 15 2 15 2z"}]]],D0=["svg",h,[["circle",{cx:"17",cy:"12",r:"3"}],["line",{x1:"14",x2:"14",y1:"7",y2:"15"}],["circle",{cx:"7",cy:"12",r:"3"}],["line",{x1:"10",x2:"10",y1:"9",y2:"15"}]]],b0=["svg",h,[["polyline",{points:"3,15 7,7 11,15"}],["line",{x1:"4",x2:"10",y1:"13",y2:"13"}],["circle",{cx:"18",cy:"12",r:"3"}],["line",{x1:"21",x2:"21",y1:"9",y2:"15"}]]],O0=["svg",h,[["polyline",{points:"3,15 7,7 11,15"}],["line",{x1:"4",x2:"10",y1:"13",y2:"13"}],["path",{d:"M15 7h4c1.1 0 2 .9 2 2s-.9 2-2 2h-4V7z"}],["path",{d:"M15 11h4.5c1.1 0 2 .9 2 2s-.9 2-2 2H15v-4z"}]]],R0=["svg",h,[["path",{d:"M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6"}],["path",{d:"M2 12a9 9 0 0 1 8 8"}],["path",{d:"M2 16a5 5 0 0 1 4 4"}],["line",{x1:"2",x2:"2.01",y1:"20",y2:"20"}]]],T0=["svg",h,[["path",{d:"M22 20v-9H2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2Z"}],["path",{d:"M18 11V4H6v7"}],["path",{d:"M15 22v-4a3 3 0 0 0-3-3v0a3 3 0 0 0-3 3v4"}],["path",{d:"M22 11V9"}],["path",{d:"M2 11V9"}],["path",{d:"M6 4V2"}],["path",{d:"M18 4V2"}],["path",{d:"M10 4V2"}],["path",{d:"M14 4V2"}]]],U0=["svg",h,[["path",{d:"M12 5c.67 0 1.35.09 2 .26 1.78-2 5.03-2.84 6.42-2.26 1.4.58-.42 7-.42 7 .57 1.07 1 2.24 1 3.44C21 17.9 16.97 21 12 21s-9-3-9-7.56c0-1.25.5-2.4 1-3.44 0 0-1.89-6.42-.5-7 1.39-.58 4.72.23 6.5 2.23A9.04 9.04 0 0 1 12 5Z"}],["path",{d:"M8 14v.5"}],["path",{d:"M16 14v.5"}],["path",{d:"M11.25 16.25h1.5L12 17l-.75-.75Z"}]]],G0=["svg",h,[["path",{d:"M18 6 7 17l-5-5"}],["path",{d:"m22 10-7.5 7.5L13 16"}]]],E0=["svg",h,[["path",{d:"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z"}],["path",{d:"m9 12 2 2 4-4"}]]],W0=["svg",h,[["path",{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14"}],["polyline",{points:"22 4 12 14.01 9 11.01"}]]],I0=["svg",h,[["polyline",{points:"9 11 12 14 22 4"}],["path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"}]]],q0=["svg",h,[["polyline",{points:"20 6 9 17 4 12"}]]],N0=["svg",h,[["path",{d:"M6 13.87A4 4 0 0 1 7.41 6a5.11 5.11 0 0 1 1.05-1.54 5 5 0 0 1 7.08 0A5.11 5.11 0 0 1 16.59 6 4 4 0 0 1 18 13.87V21H6Z"}],["line",{x1:"6",x2:"18",y1:"17",y2:"17"}]]],X0=["svg",h,[["path",{d:"M2 17a5 5 0 0 0 10 0c0-2.76-2.5-5-5-3-2.5-2-5 .24-5 3Z"}],["path",{d:"M12 17a5 5 0 0 0 10 0c0-2.76-2.5-5-5-3-2.5-2-5 .24-5 3Z"}],["path",{d:"M7 14c3.22-2.91 4.29-8.75 5-12 1.66 2.38 4.94 9 5 12"}],["path",{d:"M22 9c-4.29 0-7.14-2.33-10-7 5.71 0 10 4.67 10 7Z"}]]],J0=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["polyline",{points:"16,10 12,14 8,10"}]]],j0=["svg",h,[["polyline",{points:"6 9 12 15 18 9"}]]],K0=["svg",h,[["polyline",{points:"17 18 11 12 17 6"}],["path",{d:"M7 6v12"}]]],Q0=["svg",h,[["polyline",{points:"7 18 13 12 7 6"}],["path",{d:"M17 6v12"}]]],_0=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["polyline",{points:"14,16 10,12 14,8"}]]],Y0=["svg",h,[["polyline",{points:"15 18 9 12 15 6"}]]],aa=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["polyline",{points:"10,8 14,12 10,16"}]]],ha=["svg",h,[["polyline",{points:"9 18 15 12 9 6"}]]],ta=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["polyline",{points:"8,14 12,10 16,14"}]]],ca=["svg",h,[["polyline",{points:"18 15 12 9 6 15"}]]],da=["svg",h,[["path",{d:"m7 20 5-5 5 5"}],["path",{d:"m7 4 5 5 5-5"}]]],na=["svg",h,[["polyline",{points:"7 13 12 18 17 13"}],["polyline",{points:"7 6 12 11 17 6"}]]],ia=["svg",h,[["path",{d:"m9 7-5 5 5 5"}],["path",{d:"m15 7 5 5-5 5"}]]],la=["svg",h,[["polyline",{points:"11 17 6 12 11 7"}],["polyline",{points:"18 17 13 12 18 7"}]]],pa=["svg",h,[["path",{d:"m20 17-5-5 5-5"}],["path",{d:"m4 17 5-5-5-5"}]]],ea=["svg",h,[["polyline",{points:"13 17 18 12 13 7"}],["polyline",{points:"6 17 11 12 6 7"}]]],Ma=["svg",h,[["path",{d:"m7 15 5 5 5-5"}],["path",{d:"m7 9 5-5 5 5"}]]],va=["svg",h,[["polyline",{points:"17 11 12 6 7 11"}],["polyline",{points:"17 18 12 13 7 18"}]]],oa=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["circle",{cx:"12",cy:"12",r:"4"}],["line",{x1:"21.17",x2:"12",y1:"8",y2:"8"}],["line",{x1:"3.95",x2:"8.54",y1:"6.06",y2:"14"}],["line",{x1:"10.88",x2:"15.46",y1:"21.94",y2:"14"}]]],ya=["svg",h,[["path",{d:"m18 7 4 2v11a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9l4-2"}],["path",{d:"M14 22v-4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v4"}],["path",{d:"M18 22V5l-6-3-6 3v17"}],["path",{d:"M12 7v5"}],["path",{d:"M10 9h4"}]]],sa=["svg",h,[["line",{x1:"2",x2:"22",y1:"2",y2:"22"}],["path",{d:"M12 12H2v4h14"}],["path",{d:"M22 12v4"}],["path",{d:"M18 12h-.5"}],["path",{d:"M7 12v4"}],["path",{d:"M18 8c0-2.5-2-2.5-2-5"}],["path",{d:"M22 8c0-2.5-2-2.5-2-5"}]]],ga=["svg",h,[["path",{d:"M18 12H2v4h16"}],["path",{d:"M22 12v4"}],["path",{d:"M7 12v4"}],["path",{d:"M18 8c0-2.5-2-2.5-2-5"}],["path",{d:"M22 8c0-2.5-2-2.5-2-5"}]]],ra=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["circle",{cx:"12",cy:"12",r:"1"}]]],$a=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M17 12h.01"}],["path",{d:"M12 12h.01"}],["path",{d:"M7 12h.01"}]]],ma=["svg",h,[["path",{d:"M7 10h10"}],["path",{d:"M7 14h10"}],["circle",{cx:"12",cy:"12",r:"10"}]]],xa=["svg",h,[["path",{d:"m2 2 20 20"}],["path",{d:"M8.4 2.7c1.2-.4 2.4-.7 3.7-.7 5.5 0 10 4.5 10 10 0 1.3-.2 2.5-.7 3.6"}],["path",{d:"M19.1 19.1C17.3 20.9 14.8 22 12 22 6.5 22 2 17.5 2 12c0-2.7 1.2-5.2 3-7"}]]],Ha=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M22 2 2 22"}]]],Ca=["svg",h,[["line",{x1:"9",x2:"15",y1:"15",y2:"9"}],["circle",{cx:"12",cy:"12",r:"10"}]]],Va=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}]]],ua=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}],["path",{d:"M11 9h4a2 2 0 0 0 2-2V3"}],["circle",{cx:"9",cy:"9",r:"2"}],["path",{d:"M7 21v-4a2 2 0 0 1 2-2h4"}],["circle",{cx:"15",cy:"15",r:"2"}]]],Aa=["svg",h,[["path",{d:"M21.66 17.67a1.08 1.08 0 0 1-.04 1.6A12 12 0 0 1 4.73 2.38a1.1 1.1 0 0 1 1.61-.04z"}],["path",{d:"M19.65 15.66A8 8 0 0 1 8.35 4.34"}],["path",{d:"m14 10-5.5 5.5"}],["path",{d:"M14 17.85V10H6.15"}]]],wa=["svg",h,[["path",{d:"M4 11v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8H4Z"}],["path",{d:"m4 11-.88-2.87a2 2 0 0 1 1.33-2.5l11.48-3.5a2 2 0 0 1 2.5 1.32l.87 2.87L4 11.01Z"}],["path",{d:"m6.6 4.99 3.38 4.2"}],["path",{d:"m11.86 3.38 3.38 4.2"}]]],La=["svg",h,[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"}],["path",{d:"m9 14 2 2 4-4"}]]],Sa=["svg",h,[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1"}],["path",{d:"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v4"}],["path",{d:"M21 14H11"}],["path",{d:"m15 10-4 4 4 4"}]]],fa=["svg",h,[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1"}],["path",{d:"M10.42 12.61a2.1 2.1 0 1 1 2.97 2.97L7.95 21 4 22l.99-3.95 5.43-5.44Z"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-5.5"}],["path",{d:"M4 13.5V6a2 2 0 0 1 2-2h2"}]]],ka=["svg",h,[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"}],["path",{d:"M12 11h4"}],["path",{d:"M12 16h4"}],["path",{d:"M8 11h.01"}],["path",{d:"M8 16h.01"}]]],Fa=["svg",h,[["path",{d:"M15 2H9a1 1 0 0 0-1 1v2c0 .6.4 1 1 1h6c.6 0 1-.4 1-1V3c0-.6-.4-1-1-1Z"}],["path",{d:"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2M16 4h2a2 2 0 0 1 2 2v2M11 14h10"}],["path",{d:"m17 10 4 4-4 4"}]]],Za=["svg",h,[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1"}],["path",{d:"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-.5"}],["path",{d:"M16 4h2a2 2 0 0 1 1.73 1"}],["path",{d:"M18.42 9.61a2.1 2.1 0 1 1 2.97 2.97L16.95 17 13 18l.99-3.95 4.43-4.44Z"}],["path",{d:"M8 18h1"}]]],za=["svg",h,[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"}],["path",{d:"M9 12v-1h6v1"}],["path",{d:"M11 17h2"}],["path",{d:"M12 11v6"}]]],Ba=["svg",h,[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"}],["path",{d:"m15 11-6 6"}],["path",{d:"m9 11 6 6"}]]],Pa=["svg",h,[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"}]]],Da=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 6 12 12 14.5 8"}]]],ba=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 6 12 12 8 10"}]]],Oa=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 6 12 12 9.5 8"}]]],Ra=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 6 12 12"}]]],Ta=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 6 12 12 16 10"}]]],Ua=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 6 12 12 16.5 12"}]]],Ga=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 6 12 12 16 14"}]]],Ea=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 6 12 12 14.5 16"}]]],Wa=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 6 12 12 12 16.5"}]]],Ia=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 6 12 12 9.5 16"}]]],qa=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 6 12 12 8 14"}]]],Na=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 6 12 12 7.5 12"}]]],Xa=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 6 12 12 16 14"}]]],Ja=["svg",h,[["path",{d:"M20 16.2A4.5 4.5 0 0 0 17.5 8h-1.8A7 7 0 1 0 4 14.9"}],["circle",{cx:"12",cy:"17",r:"3"}],["path",{d:"M12 13v1"}],["path",{d:"M12 20v1"}],["path",{d:"M16 17h-1"}],["path",{d:"M9 17H8"}],["path",{d:"m15 14-.88.88"}],["path",{d:"M9.88 19.12 9 20"}],["path",{d:"m15 20-.88-.88"}],["path",{d:"M9.88 14.88 9 14"}]]],ja=["svg",h,[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"}],["path",{d:"M8 19v1"}],["path",{d:"M8 14v1"}],["path",{d:"M16 19v1"}],["path",{d:"M16 14v1"}],["path",{d:"M12 21v1"}],["path",{d:"M12 16v1"}]]],Ka=["svg",h,[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"}],["path",{d:"M16 17H7"}],["path",{d:"M17 21H9"}]]],Qa=["svg",h,[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"}],["path",{d:"M16 14v2"}],["path",{d:"M8 14v2"}],["path",{d:"M16 20h.01"}],["path",{d:"M8 20h.01"}],["path",{d:"M12 16v2"}],["path",{d:"M12 22h.01"}]]],_a=["svg",h,[["path",{d:"M6 16.326A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 .5 8.973"}],["path",{d:"m13 12-3 5h4l-3 5"}]]],Ya=["svg",h,[["path",{d:"M10.083 9A6.002 6.002 0 0 1 16 4a4.243 4.243 0 0 0 6 6c0 2.22-1.206 4.16-3 5.197"}],["path",{d:"M3 20a5 5 0 1 1 8.9-4H13a3 3 0 0 1 2 5.24"}],["path",{d:"M11 20v2"}],["path",{d:"M7 19v2"}]]],ah=["svg",h,[["path",{d:"M13 22H7a5 5 0 1 1 4.9-6H13a3 3 0 0 1 0 6Z"}],["path",{d:"M10.083 9A6.002 6.002 0 0 1 16 4a4.243 4.243 0 0 0 6 6c0 2.22-1.206 4.16-3 5.197"}]]],hh=["svg",h,[["path",{d:"m2 2 20 20"}],["path",{d:"M5.782 5.782A7 7 0 0 0 9 19h8.5a4.5 4.5 0 0 0 1.307-.193"}],["path",{d:"M21.532 16.5A4.5 4.5 0 0 0 17.5 10h-1.79A7.008 7.008 0 0 0 10 5.07"}]]],th=["svg",h,[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"}],["path",{d:"m9.2 22 3-7"}],["path",{d:"m9 13-3 7"}],["path",{d:"m17 13-3 7"}]]],ch=["svg",h,[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"}],["path",{d:"M16 14v6"}],["path",{d:"M8 14v6"}],["path",{d:"M12 16v6"}]]],dh=["svg",h,[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"}],["path",{d:"M8 15h.01"}],["path",{d:"M8 19h.01"}],["path",{d:"M12 17h.01"}],["path",{d:"M12 21h.01"}],["path",{d:"M16 15h.01"}],["path",{d:"M16 19h.01"}]]],nh=["svg",h,[["path",{d:"M12 2v2"}],["path",{d:"m4.93 4.93 1.41 1.41"}],["path",{d:"M20 12h2"}],["path",{d:"m19.07 4.93-1.41 1.41"}],["path",{d:"M15.947 12.65a4 4 0 0 0-5.925-4.128"}],["path",{d:"M3 20a5 5 0 1 1 8.9-4H13a3 3 0 0 1 2 5.24"}],["path",{d:"M11 20v2"}],["path",{d:"M7 19v2"}]]],ih=["svg",h,[["path",{d:"M12 2v2"}],["path",{d:"m4.93 4.93 1.41 1.41"}],["path",{d:"M20 12h2"}],["path",{d:"m19.07 4.93-1.41 1.41"}],["path",{d:"M15.947 12.65a4 4 0 0 0-5.925-4.128"}],["path",{d:"M13 22H7a5 5 0 1 1 4.9-6H13a3 3 0 0 1 0 6Z"}]]],lh=["svg",h,[["path",{d:"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z"}]]],ph=["svg",h,[["path",{d:"M17.5 21H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z"}],["path",{d:"M22 10a3 3 0 0 0-3-3h-2.207a5.502 5.502 0 0 0-10.702.5"}]]],eh=["svg",h,[["path",{d:"M16.2 3.8a2.7 2.7 0 0 0-3.81 0l-.4.38-.4-.4a2.7 2.7 0 0 0-3.82 0C6.73 4.85 6.67 6.64 8 8l4 4 4-4c1.33-1.36 1.27-3.15.2-4.2z"}],["path",{d:"M8 8c-1.36-1.33-3.15-1.27-4.2-.2a2.7 2.7 0 0 0 0 3.81l.38.4-.4.4a2.7 2.7 0 0 0 0 3.82C4.85 17.27 6.64 17.33 8 16"}],["path",{d:"M16 16c1.36 1.33 3.15 1.27 4.2.2a2.7 2.7 0 0 0 0-3.81l-.38-.4.4-.4a2.7 2.7 0 0 0 0-3.82C19.15 6.73 17.36 6.67 16 8"}],["path",{d:"M7.8 20.2a2.7 2.7 0 0 0 3.81 0l.4-.38.4.4a2.7 2.7 0 0 0 3.82 0c1.06-1.06 1.12-2.85-.21-4.21l-4-4-4 4c-1.33 1.36-1.27 3.15-.2 4.2z"}],["path",{d:"m7 17-5 5"}]]],Mh=["svg",h,[["path",{d:"m18 16 4-4-4-4"}],["path",{d:"m6 8-4 4 4 4"}],["path",{d:"m14.5 4-5 16"}]]],vh=["svg",h,[["polyline",{points:"16 18 22 12 16 6"}],["polyline",{points:"8 6 2 12 8 18"}]]],oh=["svg",h,[["polygon",{points:"12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2"}],["line",{x1:"12",x2:"12",y1:"22",y2:"15.5"}],["polyline",{points:"22 8.5 12 15.5 2 8.5"}],["polyline",{points:"2 15.5 12 8.5 22 15.5"}],["line",{x1:"12",x2:"12",y1:"2",y2:"8.5"}]]],yh=["svg",h,[["path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"}],["polyline",{points:"7.5 4.21 12 6.81 16.5 4.21"}],["polyline",{points:"7.5 19.79 7.5 14.6 3 12"}],["polyline",{points:"21 12 16.5 14.6 16.5 19.79"}],["polyline",{points:"3.27 6.96 12 12.01 20.73 6.96"}],["line",{x1:"12",x2:"12",y1:"22.08",y2:"12"}]]],sh=["svg",h,[["path",{d:"M17 8h1a4 4 0 1 1 0 8h-1"}],["path",{d:"M3 8h14v9a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4Z"}],["line",{x1:"6",x2:"6",y1:"2",y2:"4"}],["line",{x1:"10",x2:"10",y1:"2",y2:"4"}],["line",{x1:"14",x2:"14",y1:"2",y2:"4"}]]],gh=["svg",h,[["path",{d:"M12 20a8 8 0 1 0 0-16 8 8 0 0 0 0 16Z"}],["path",{d:"M12 14a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z"}],["path",{d:"M12 2v2"}],["path",{d:"M12 22v-2"}],["path",{d:"m17 20.66-1-1.73"}],["path",{d:"M11 10.27 7 3.34"}],["path",{d:"m20.66 17-1.73-1"}],["path",{d:"m3.34 7 1.73 1"}],["path",{d:"M14 12h8"}],["path",{d:"M2 12h2"}],["path",{d:"m20.66 7-1.73 1"}],["path",{d:"m3.34 17 1.73-1"}],["path",{d:"m17 3.34-1 1.73"}],["path",{d:"m11 13.73-4 6.93"}]]],rh=["svg",h,[["circle",{cx:"8",cy:"8",r:"6"}],["path",{d:"M18.09 10.37A6 6 0 1 1 10.34 18"}],["path",{d:"M7 6h1v4"}],["path",{d:"m16.71 13.88.7.71-2.82 2.82"}]]],$h=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["line",{x1:"12",x2:"12",y1:"3",y2:"21"}]]],mh=["svg",h,[["path",{d:"M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3"}]]],xh=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polygon",{points:"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76"}]]],Hh=["svg",h,[["path",{d:"M5.5 8.5 9 12l-3.5 3.5L2 12l3.5-3.5Z"}],["path",{d:"m12 2 3.5 3.5L12 9 8.5 5.5 12 2Z"}],["path",{d:"M18.5 8.5 22 12l-3.5 3.5L15 12l3.5-3.5Z"}],["path",{d:"m12 15 3.5 3.5L12 22l-3.5-3.5L12 15Z"}]]],Ch=["svg",h,[["path",{d:"M2 18a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v2H2v-2Z"}],["path",{d:"M20 16a8 8 0 1 0-16 0"}],["path",{d:"M12 4v4"}],["path",{d:"M10 4h4"}]]],Vh=["svg",h,[["rect",{x:"2",y:"6",width:"20",height:"8",rx:"1"}],["path",{d:"M17 14v7"}],["path",{d:"M7 14v7"}],["path",{d:"M17 3v3"}],["path",{d:"M7 3v3"}],["path",{d:"M10 14 2.3 6.3"}],["path",{d:"m14 6 7.7 7.7"}],["path",{d:"m8 6 8 8"}]]],uh=["svg",h,[["path",{d:"M17 18a2 2 0 0 0-2-2H9a2 2 0 0 0-2 2"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2"}],["circle",{cx:"12",cy:"10",r:"2"}],["line",{x1:"8",x2:"8",y1:"2",y2:"4"}],["line",{x1:"16",x2:"16",y1:"2",y2:"4"}]]],Ah=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M12 18a6 6 0 0 0 0-12v12z"}]]],wh=["svg",h,[["path",{d:"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5"}],["path",{d:"M8.5 8.5v.01"}],["path",{d:"M16 15.5v.01"}],["path",{d:"M12 12v.01"}],["path",{d:"M11 17v.01"}],["path",{d:"M7 14v.01"}]]],Lh=["svg",h,[["path",{d:"m12 15 2 2 4-4"}],["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"}]]],Sh=["svg",h,[["line",{x1:"12",x2:"18",y1:"15",y2:"15"}],["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"}]]],fh=["svg",h,[["line",{x1:"15",x2:"15",y1:"12",y2:"18"}],["line",{x1:"12",x2:"18",y1:"15",y2:"15"}],["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"}]]],kh=["svg",h,[["line",{x1:"12",x2:"18",y1:"18",y2:"12"}],["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"}]]],Fh=["svg",h,[["line",{x1:"12",x2:"18",y1:"12",y2:"18"}],["line",{x1:"12",x2:"18",y1:"18",y2:"12"}],["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"}]]],Zh=["svg",h,[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"}]]],zh=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M9 9.35a4 4 0 1 1 0 5.3"}]]],Bh=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M15 9.354a4 4 0 1 0 0 5.292"}]]],Ph=["svg",h,[["polyline",{points:"9 10 4 15 9 20"}],["path",{d:"M20 4v7a4 4 0 0 1-4 4H4"}]]],Dh=["svg",h,[["polyline",{points:"15 10 20 15 15 20"}],["path",{d:"M4 4v7a4 4 0 0 0 4 4h12"}]]],bh=["svg",h,[["polyline",{points:"14 15 9 20 4 15"}],["path",{d:"M20 4h-7a4 4 0 0 0-4 4v12"}]]],Oh=["svg",h,[["polyline",{points:"14 9 9 4 4 9"}],["path",{d:"M20 20h-7a4 4 0 0 1-4-4V4"}]]],Rh=["svg",h,[["polyline",{points:"10 15 15 20 20 15"}],["path",{d:"M4 4h7a4 4 0 0 1 4 4v12"}]]],Th=["svg",h,[["polyline",{points:"10 9 15 4 20 9"}],["path",{d:"M4 20h7a4 4 0 0 0 4-4V4"}]]],Uh=["svg",h,[["polyline",{points:"9 14 4 9 9 4"}],["path",{d:"M20 20v-7a4 4 0 0 0-4-4H4"}]]],Gh=["svg",h,[["polyline",{points:"15 14 20 9 15 4"}],["path",{d:"M4 20v-7a4 4 0 0 1 4-4h12"}]]],Eh=["svg",h,[["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2"}],["rect",{x:"9",y:"9",width:"6",height:"6"}],["path",{d:"M15 2v2"}],["path",{d:"M15 20v2"}],["path",{d:"M2 15h2"}],["path",{d:"M2 9h2"}],["path",{d:"M20 15h2"}],["path",{d:"M20 9h2"}],["path",{d:"M9 2v2"}],["path",{d:"M9 20v2"}]]],Wh=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M10 9.3a2.8 2.8 0 0 0-3.5 1 3.1 3.1 0 0 0 0 3.4 2.7 2.7 0 0 0 3.5 1"}],["path",{d:"M17 9.3a2.8 2.8 0 0 0-3.5 1 3.1 3.1 0 0 0 0 3.4 2.7 2.7 0 0 0 3.5 1"}]]],Ih=["svg",h,[["rect",{width:"20",height:"14",x:"2",y:"5",rx:"2"}],["line",{x1:"2",x2:"22",y1:"10",y2:"10"}]]],qh=["svg",h,[["path",{d:"m4.6 13.11 5.79-3.21c1.89-1.05 4.79 1.78 3.71 3.71l-3.22 5.81C8.8 23.16.79 15.23 4.6 13.11Z"}],["path",{d:"m10.5 9.5-1-2.29C9.2 6.48 8.8 6 8 6H4.5C2.79 6 2 6.5 2 8.5a7.71 7.71 0 0 0 2 4.83"}],["path",{d:"M8 6c0-1.55.24-4-2-4-2 0-2.5 2.17-2.5 4"}],["path",{d:"m14.5 13.5 2.29 1c.73.3 1.21.7 1.21 1.5v3.5c0 1.71-.5 2.5-2.5 2.5a7.71 7.71 0 0 1-4.83-2"}],["path",{d:"M18 16c1.55 0 4-.24 4 2 0 2-2.17 2.5-4 2.5"}]]],Nh=["svg",h,[["path",{d:"M6 2v14a2 2 0 0 0 2 2h14"}],["path",{d:"M18 22V8a2 2 0 0 0-2-2H2"}]]],Xh=["svg",h,[["path",{d:"M11 2a2 2 0 0 0-2 2v5H4a2 2 0 0 0-2 2v2c0 1.1.9 2 2 2h5v5c0 1.1.9 2 2 2h2a2 2 0 0 0 2-2v-5h5a2 2 0 0 0 2-2v-2a2 2 0 0 0-2-2h-5V4a2 2 0 0 0-2-2h-2z"}]]],Jh=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["line",{x1:"22",x2:"18",y1:"12",y2:"12"}],["line",{x1:"6",x2:"2",y1:"12",y2:"12"}],["line",{x1:"12",x2:"12",y1:"6",y2:"2"}],["line",{x1:"12",x2:"12",y1:"22",y2:"18"}]]],jh=["svg",h,[["path",{d:"m2 4 3 12h14l3-12-6 7-4-7-4 7-6-7zm3 16h14"}]]],Kh=["svg",h,[["path",{d:"m6 8 1.75 12.28a2 2 0 0 0 2 1.72h4.54a2 2 0 0 0 2-1.72L18 8"}],["path",{d:"M5 8h14"}],["path",{d:"M7 15a6.47 6.47 0 0 1 5 0 6.47 6.47 0 0 0 5 0"}],["path",{d:"m12 8 1-6h2"}]]],Qh=["svg",h,[["path",{d:"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1"}],["path",{d:"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1"}]]],_h=["svg",h,[["circle",{cx:"12",cy:"12",r:"8"}],["line",{x1:"3",x2:"6",y1:"3",y2:"6"}],["line",{x1:"21",x2:"18",y1:"3",y2:"6"}],["line",{x1:"3",x2:"6",y1:"21",y2:"18"}],["line",{x1:"21",x2:"18",y1:"21",y2:"18"}]]],Yh=["svg",h,[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3"}],["path",{d:"M3 12c0 1.18 2.03 2.2 5 2.7"}],["path",{d:"M21 5v4.5"}],["path",{d:"m12 16 1.27-1.35a4.75 4.75 0 1 1 .41 5.74"}],["path",{d:"M12 12v4h4"}],["path",{d:"M3 5v14c0 1.43 2.97 2.63 7 2.93"}]]],at=["svg",h,[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5"}],["path",{d:"M3 12A9 3 0 0 0 21 12"}]]],ht=["svg",h,[["path",{d:"M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2Z"}],["line",{x1:"18",x2:"12",y1:"9",y2:"15"}],["line",{x1:"12",x2:"18",y1:"9",y2:"15"}]]],tt=["svg",h,[["rect",{width:"15.56",height:"15.56",x:"12",y:"1",rx:"2.41",transform:"rotate(45 12 1)"}]]],ct=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["path",{d:"M12 12h.01"}]]],dt=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["path",{d:"M15 9h.01"}],["path",{d:"M9 15h.01"}]]],nt=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["path",{d:"M16 8h.01"}],["path",{d:"M12 12h.01"}],["path",{d:"M8 16h.01"}]]],it=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["path",{d:"M16 8h.01"}],["path",{d:"M8 8h.01"}],["path",{d:"M8 16h.01"}],["path",{d:"M16 16h.01"}]]],lt=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["path",{d:"M16 8h.01"}],["path",{d:"M8 8h.01"}],["path",{d:"M8 16h.01"}],["path",{d:"M16 16h.01"}],["path",{d:"M12 12h.01"}]]],pt=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["path",{d:"M16 8h.01"}],["path",{d:"M16 12h.01"}],["path",{d:"M16 16h.01"}],["path",{d:"M8 8h.01"}],["path",{d:"M8 12h.01"}],["path",{d:"M8 16h.01"}]]],et=["svg",h,[["rect",{width:"12",height:"12",x:"2",y:"10",rx:"2",ry:"2"}],["path",{d:"m17.92 14 3.5-3.5a2.24 2.24 0 0 0 0-3l-5-4.92a2.24 2.24 0 0 0-3 0L10 6"}],["path",{d:"M6 18h.01"}],["path",{d:"M10 14h.01"}],["path",{d:"M15 6h.01"}],["path",{d:"M18 9h.01"}]]],Mt=["svg",h,[["path",{d:"M12 3v14"}],["path",{d:"M5 10h14"}],["path",{d:"M5 21h14"}]]],vt=["svg",h,[["circle",{cx:"12",cy:"12",r:"4"}],["circle",{cx:"12",cy:"12",r:"10"}],["line",{x1:"12",y1:"12",x2:"12",y2:"12.01"}]]],ot=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["circle",{cx:"12",cy:"12",r:"2"}]]],yt=["svg",h,[["line",{x1:"8",x2:"16",y1:"12",y2:"12"}],["line",{x1:"12",x2:"12",y1:"16",y2:"16"}],["line",{x1:"12",x2:"12",y1:"8",y2:"8"}],["circle",{cx:"12",cy:"12",r:"10"}]]],st=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12"}],["line",{x1:"12",x2:"12",y1:"16",y2:"16"}],["line",{x1:"12",x2:"12",y1:"8",y2:"8"}]]],gt=["svg",h,[["circle",{cx:"12",cy:"6",r:"1"}],["line",{x1:"5",x2:"19",y1:"12",y2:"12"}],["circle",{cx:"12",cy:"18",r:"1"}]]],rt=["svg",h,[["path",{d:"M15 2c-1.35 1.5-2.092 3-2.5 4.5M9 22c1.35-1.5 2.092-3 2.5-4.5"}],["path",{d:"M2 15c3.333-3 6.667-3 10-3m10-3c-1.5 1.35-3 2.092-4.5 2.5"}],["path",{d:"m17 6-2.5-2.5"}],["path",{d:"m14 8-1.5-1.5"}],["path",{d:"m7 18 2.5 2.5"}],["path",{d:"m3.5 14.5.5.5"}],["path",{d:"m20 9 .5.5"}],["path",{d:"m6.5 12.5 1 1"}],["path",{d:"m16.5 10.5 1 1"}],["path",{d:"m10 16 1.5 1.5"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],$t=["svg",h,[["path",{d:"M2 15c6.667-6 13.333 0 20-6"}],["path",{d:"M9 22c1.798-1.998 2.518-3.995 2.807-5.993"}],["path",{d:"M15 2c-1.798 1.998-2.518 3.995-2.807 5.993"}],["path",{d:"m17 6-2.5-2.5"}],["path",{d:"m14 8-1-1"}],["path",{d:"m7 18 2.5 2.5"}],["path",{d:"m3.5 14.5.5.5"}],["path",{d:"m20 9 .5.5"}],["path",{d:"m6.5 12.5 1 1"}],["path",{d:"m16.5 10.5 1 1"}],["path",{d:"m10 16 1.5 1.5"}]]],mt=["svg",h,[["path",{d:"M10 5.172C10 3.782 8.423 2.679 6.5 3c-2.823.47-4.113 6.006-4 7 .08.703 1.725 1.722 3.656 1 1.261-.472 1.96-1.45 2.344-2.5"}],["path",{d:"M14.267 5.172c0-1.39 1.577-2.493 3.5-2.172 2.823.47 4.113 6.006 4 7-.08.703-1.725 1.722-3.656 1-1.261-.472-1.855-1.45-2.239-2.5"}],["path",{d:"M8 14v.5"}],["path",{d:"M16 14v.5"}],["path",{d:"M11.25 16.25h1.5L12 17l-.75-.75Z"}],["path",{d:"M4.42 11.247A13.152 13.152 0 0 0 4 14.556C4 18.728 7.582 21 12 21s8-2.272 8-6.444c0-1.061-.162-2.2-.493-3.309m-9.243-6.082A8.801 8.801 0 0 1 12 5c.78 0 1.5.108 2.161.306"}]]],xt=["svg",h,[["line",{x1:"12",x2:"12",y1:"2",y2:"22"}],["path",{d:"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"}]]],Ht=["svg",h,[["path",{d:"M18 20V6a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v14"}],["path",{d:"M2 20h20"}],["path",{d:"M14 12v.01"}]]],Ct=["svg",h,[["path",{d:"M13 4h3a2 2 0 0 1 2 2v14"}],["path",{d:"M2 20h3"}],["path",{d:"M13 20h9"}],["path",{d:"M10 12v.01"}],["path",{d:"M13 4.562v16.157a1 1 0 0 1-1.242.97L5 20V5.562a2 2 0 0 1 1.515-1.94l4-1A2 2 0 0 1 13 4.561Z"}]]],Vt=["svg",h,[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"}],["path",{d:"M12 12v9"}],["path",{d:"m8 17 4 4 4-4"}]]],ut=["svg",h,[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}],["polyline",{points:"7 10 12 15 17 10"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3"}]]],At=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M19.13 5.09C15.22 9.14 10 10.44 2.25 10.94"}],["path",{d:"M21.75 12.84c-6.62-1.41-12.14 1-16.38 6.32"}],["path",{d:"M8.56 2.75c4.37 6 6 9.42 8 17.72"}]]],wt=["svg",h,[["path",{d:"M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z"}]]],Lt=["svg",h,[["path",{d:"M7 16.3c2.2 0 4-1.83 4-4.05 0-1.16-.57-2.26-1.71-3.19S7.29 6.75 7 5.3c-.29 1.45-1.14 2.84-2.29 3.76S3 11.1 3 12.25c0 2.22 1.8 4.05 4 4.05z"}],["path",{d:"M12.56 6.6A10.97 10.97 0 0 0 14 3.02c.5 2.5 2 4.9 4 6.5s3 3.5 3 5.5a6.98 6.98 0 0 1-11.91 4.97"}]]],St=["svg",h,[["path",{d:"M15.45 15.4c-2.13.65-4.3.32-5.7-1.1-2.29-2.27-1.76-6.5 1.17-9.42 2.93-2.93 7.15-3.46 9.43-1.18 1.41 1.41 1.74 3.57 1.1 5.71-1.4-.51-3.26-.02-4.64 1.36-1.38 1.38-1.87 3.23-1.36 4.63z"}],["path",{d:"m11.25 15.6-2.16 2.16a2.5 2.5 0 1 1-4.56 1.73 2.49 2.49 0 0 1-1.41-4.24 2.5 2.5 0 0 1 3.14-.32l2.16-2.16"}]]],ft=["svg",h,[["path",{d:"m6.5 6.5 11 11"}],["path",{d:"m21 21-1-1"}],["path",{d:"m3 3 1 1"}],["path",{d:"m18 22 4-4"}],["path",{d:"m2 6 4-4"}],["path",{d:"m3 10 7-7"}],["path",{d:"m14 21 7-7"}]]],kt=["svg",h,[["path",{d:"M6 18.5a3.5 3.5 0 1 0 7 0c0-1.57.92-2.52 2.04-3.46"}],["path",{d:"M6 8.5c0-.75.13-1.47.36-2.14"}],["path",{d:"M8.8 3.15A6.5 6.5 0 0 1 19 8.5c0 1.63-.44 2.81-1.09 3.76"}],["path",{d:"M12.5 6A2.5 2.5 0 0 1 15 8.5M10 13a2 2 0 0 0 1.82-1.18"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],Ft=["svg",h,[["path",{d:"M6 8.5a6.5 6.5 0 1 1 13 0c0 6-6 6-6 10a3.5 3.5 0 1 1-7 0"}],["path",{d:"M15 8.5a2.5 2.5 0 0 0-5 0v1a2 2 0 1 1 0 4"}]]],Zt=["svg",h,[["path",{d:"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"}]]],zt=["svg",h,[["path",{d:"M12 20h9"}],["path",{d:"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"}]]],Bt=["svg",h,[["path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}],["path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"}]]],Pt=["svg",h,[["circle",{cx:"11.5",cy:"12.5",r:"3.5"}],["path",{d:"M3 8c0-3.5 2.5-6 6.5-6 5 0 4.83 3 7.5 5s5 2 5 6c0 4.5-2.5 6.5-7 6.5-2.5 0-2.5 2.5-6 2.5s-7-2-7-5.5c0-3 1.5-3 1.5-5C3.5 10 3 9 3 8Z"}]]],Dt=["svg",h,[["path",{d:"M6.399 6.399C5.362 8.157 4.65 10.189 4.5 12c-.37 4.43 1.27 9.95 7.5 10 3.256-.026 5.259-1.547 6.375-3.625"}],["path",{d:"M19.532 13.875A14.07 14.07 0 0 0 19.5 12c-.36-4.34-3.95-9.96-7.5-10-1.04.012-2.082.502-3.046 1.297"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],bt=["svg",h,[["path",{d:"M12 22c6.23-.05 7.87-5.57 7.5-10-.36-4.34-3.95-9.96-7.5-10-3.55.04-7.14 5.66-7.5 10-.37 4.43 1.27 9.95 7.5 10z"}]]],Ot=["svg",h,[["line",{x1:"5",x2:"19",y1:"9",y2:"9"}],["line",{x1:"5",x2:"19",y1:"15",y2:"15"}],["line",{x1:"19",x2:"5",y1:"5",y2:"19"}]]],Rt=["svg",h,[["line",{x1:"5",x2:"19",y1:"9",y2:"9"}],["line",{x1:"5",x2:"19",y1:"15",y2:"15"}]]],Tt=["svg",h,[["path",{d:"m7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21"}],["path",{d:"M22 21H7"}],["path",{d:"m5 11 9 9"}]]],Ut=["svg",h,[["path",{d:"M4 10h12"}],["path",{d:"M4 14h9"}],["path",{d:"M19 6a7.7 7.7 0 0 0-5.2-2A7.9 7.9 0 0 0 6 12c0 4.4 3.5 8 7.8 8 2 0 3.8-.8 5.2-2"}]]],Gt=["svg",h,[["path",{d:"m21 21-6-6m6 6v-4.8m0 4.8h-4.8"}],["path",{d:"M3 16.2V21m0 0h4.8M3 21l6-6"}],["path",{d:"M21 7.8V3m0 0h-4.8M21 3l-6 6"}],["path",{d:"M3 7.8V3m0 0h4.8M3 3l6 6"}]]],Et=["svg",h,[["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}],["polyline",{points:"15 3 21 3 21 9"}],["line",{x1:"10",x2:"21",y1:"14",y2:"3"}]]],Wt=["svg",h,[["path",{d:"M9.88 9.88a3 3 0 1 0 4.24 4.24"}],["path",{d:"M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68"}],["path",{d:"M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],It=["svg",h,[["path",{d:"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"}],["circle",{cx:"12",cy:"12",r:"3"}]]],qt=["svg",h,[["path",{d:"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"}]]],Nt=["svg",h,[["path",{d:"M2 20a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8l-7 5V8l-7 5V4a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z"}],["path",{d:"M17 18h1"}],["path",{d:"M12 18h1"}],["path",{d:"M7 18h1"}]]],Xt=["svg",h,[["path",{d:"M10.827 16.379a6.082 6.082 0 0 1-8.618-7.002l5.412 1.45a6.082 6.082 0 0 1 7.002-8.618l-1.45 5.412a6.082 6.082 0 0 1 8.618 7.002l-5.412-1.45a6.082 6.082 0 0 1-7.002 8.618l1.45-5.412Z"}],["path",{d:"M12 12v.01"}]]],Jt=["svg",h,[["polygon",{points:"13 19 22 12 13 5 13 19"}],["polygon",{points:"2 19 11 12 2 5 2 19"}]]],jt=["svg",h,[["path",{d:"M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z"}],["line",{x1:"16",x2:"2",y1:"8",y2:"22"}],["line",{x1:"17.5",x2:"9",y1:"15",y2:"15"}]]],Kt=["svg",h,[["path",{d:"M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z"}],["path",{d:"M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z"}],["path",{d:"M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z"}],["path",{d:"M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z"}],["path",{d:"M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z"}]]],Qt=["svg",h,[["path",{d:"M4 22V4c0-.5.2-1 .6-1.4C5 2.2 5.5 2 6 2h8.5L20 7.5V20c0 .5-.2 1-.6 1.4-.4.4-.9.6-1.4.6h-2"}],["polyline",{points:"14 2 14 8 20 8"}],["circle",{cx:"10",cy:"20",r:"2"}],["path",{d:"M10 7V6"}],["path",{d:"M10 12v-1"}],["path",{d:"M10 18v-2"}]]],_t=["svg",h,[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v2"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M2 17v-3a4 4 0 0 1 8 0v3"}],["circle",{cx:"9",cy:"17",r:"1"}],["circle",{cx:"3",cy:"17",r:"1"}]]],Yt=["svg",h,[["path",{d:"M17.5 22h.5c.5 0 1-.2 1.4-.6.4-.4.6-.9.6-1.4V7.5L14.5 2H6c-.5 0-1 .2-1.4.6C4.2 3 4 3.5 4 4v3"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M10 20v-1a2 2 0 1 1 4 0v1a2 2 0 1 1-4 0Z"}],["path",{d:"M6 20v-1a2 2 0 1 0-4 0v1a2 2 0 1 0 4 0Z"}],["path",{d:"M2 19v-3a6 6 0 0 1 12 0v3"}]]],a5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M8 10v8h8"}],["path",{d:"m8 18 4-4"}]]],h5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["path",{d:"M12 13a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"}],["path",{d:"m14 12.5 1 5.5-3-1-3 1 1-5.5"}]]],t5=["svg",h,[["path",{d:"M4 7V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2h-6"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M5 17a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"}],["path",{d:"M7 16.5 8 22l-3-1-3 1 1-5.5"}]]],c5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M12 18v-6"}],["path",{d:"M8 18v-1"}],["path",{d:"M16 18v-3"}]]],d5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M12 18v-4"}],["path",{d:"M8 18v-2"}],["path",{d:"M16 18v-6"}]]],n5=["svg",h,[["path",{d:"M14.5 22H18a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M2.97 13.12c-.6.36-.97 1.02-.97 1.74v3.28c0 .72.37 1.38.97 1.74l3 1.83c.63.39 1.43.39 2.06 0l3-1.83c.6-.36.97-1.02.97-1.74v-3.28c0-.72-.37-1.38-.97-1.74l-3-1.83a1.97 1.97 0 0 0-2.06 0l-3 1.83Z"}],["path",{d:"m7 17-4.74-2.85"}],["path",{d:"m7 17 4.74-2.85"}],["path",{d:"M7 17v5"}]]],i5=["svg",h,[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"m3 15 2 2 4-4"}]]],l5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"m9 15 2 2 4-4"}]]],p5=["svg",h,[["path",{d:"M16 22h2c.5 0 1-.2 1.4-.6.4-.4.6-.9.6-1.4V7.5L14.5 2H6c-.5 0-1 .2-1.4.6C4.2 3 4 3.5 4 4v3"}],["polyline",{points:"14 2 14 8 20 8"}],["circle",{cx:"8",cy:"16",r:"6"}],["path",{d:"M9.5 17.5 8 16.25V14"}]]],e5=["svg",h,[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"m9 18 3-3-3-3"}],["path",{d:"m5 12-3 3 3 3"}]]],M5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["circle",{cx:"12",cy:"15",r:"2"}],["path",{d:"M12 12v1"}],["path",{d:"M12 17v1"}],["path",{d:"m14.6 13.5-.87.5"}],["path",{d:"m10.27 16-.87.5"}],["path",{d:"m14.6 16.5-.87-.5"}],["path",{d:"m10.27 14-.87-.5"}]]],v5=["svg",h,[["path",{d:"M4 6V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4"}],["polyline",{points:"14 2 14 8 20 8"}],["circle",{cx:"6",cy:"14",r:"3"}],["path",{d:"M6 10v1"}],["path",{d:"M6 17v1"}],["path",{d:"M10 14H9"}],["path",{d:"M3 14H2"}],["path",{d:"m9 11-.88.88"}],["path",{d:"M3.88 16.12 3 17"}],["path",{d:"m9 17-.88-.88"}],["path",{d:"M3.88 11.88 3 11"}]]],o5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["path",{d:"M12 13V7"}],["path",{d:"M9 10h6"}],["path",{d:"M9 17h6"}]]],y5=["svg",h,[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M10 12h2v6"}],["rect",{width:"4",height:"6",x:"2",y:"12"}],["path",{d:"M10 18h4"}]]],s5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M12 18v-6"}],["path",{d:"m9 15 3 3 3-3"}]]],g5=["svg",h,[["path",{d:"M4 13.5V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2h-5.5"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M10.42 12.61a2.1 2.1 0 1 1 2.97 2.97L7.95 21 4 22l.99-3.95 5.43-5.44Z"}]]],r5=["svg",h,[["path",{d:"M4 6V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M10.29 10.7a2.43 2.43 0 0 0-2.66-.52c-.29.12-.56.3-.78.53l-.35.34-.35-.34a2.43 2.43 0 0 0-2.65-.53c-.3.12-.56.3-.79.53-.95.94-1 2.53.2 3.74L6.5 18l3.6-3.55c1.2-1.21 1.14-2.8.19-3.74Z"}]]],$5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["circle",{cx:"10",cy:"13",r:"2"}],["path",{d:"m20 17-1.09-1.09a2 2 0 0 0-2.82 0L10 22"}]]],m5=["svg",h,[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M2 15h10"}],["path",{d:"m9 18 3-3-3-3"}]]],x5=["svg",h,[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M4 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1"}],["path",{d:"M8 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1"}]]],H5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1"}],["path",{d:"M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1"}]]],C5=["svg",h,[["path",{d:"M4 10V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4"}],["polyline",{points:"14 2 14 8 20 8"}],["circle",{cx:"4",cy:"16",r:"2"}],["path",{d:"m10 10-4.5 4.5"}],["path",{d:"m9 11 1 1"}]]],V5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["circle",{cx:"10",cy:"16",r:"2"}],["path",{d:"m16 10-4.5 4.5"}],["path",{d:"m15 11 1 1"}]]],u5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"m16 13-3.5 3.5-2-2L8 17"}]]],A5=["svg",h,[["path",{d:"M4 5V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4"}],["polyline",{points:"14 2 14 8 20 8"}],["rect",{width:"8",height:"5",x:"2",y:"13",rx:"1"}],["path",{d:"M8 13v-2a2 2 0 1 0-4 0v2"}]]],w5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["rect",{width:"8",height:"6",x:"8",y:"12",rx:"1"}],["path",{d:"M15 12v-2a3 3 0 1 0-6 0v2"}]]],L5=["svg",h,[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M3 15h6"}]]],S5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["line",{x1:"9",x2:"15",y1:"15",y2:"15"}]]],f5=["svg",h,[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M2 15h10"}],["path",{d:"m5 12-3 3 3 3"}]]],k5=["svg",h,[["path",{d:"M16 22h2a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v3"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M4.04 11.71a5.84 5.84 0 1 0 8.2 8.29"}],["path",{d:"M13.83 16A5.83 5.83 0 0 0 8 10.17V16h5.83Z"}]]],F5=["svg",h,[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M3 15h6"}],["path",{d:"M6 12v6"}]]],Z5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["line",{x1:"12",x2:"12",y1:"18",y2:"12"}],["line",{x1:"9",x2:"15",y1:"15",y2:"15"}]]],z5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["path",{d:"M10 10.3c.2-.4.5-.8.9-1a2.1 2.1 0 0 1 2.6.4c.3.4.5.8.5 1.3 0 1.3-2 2-2 2"}],["path",{d:"M12 17h.01"}]]],B5=["svg",h,[["path",{d:"M20 10V7.5L14.5 2H6a2 2 0 0 0-2 2v16c0 1.1.9 2 2 2h4.5"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M16 22a2 2 0 0 1-2-2"}],["path",{d:"M20 22a2 2 0 0 0 2-2"}],["path",{d:"M20 14a2 2 0 0 1 2 2"}],["path",{d:"M16 14a2 2 0 0 0-2 2"}]]],P5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["circle",{cx:"11.5",cy:"14.5",r:"2.5"}],["path",{d:"M13.25 16.25 15 18"}]]],D5=["svg",h,[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v3"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M5 17a3 3 0 1 0 0-6 3 3 0 0 0 0 6z"}],["path",{d:"m9 18-1.5-1.5"}]]],b5=["svg",h,[["path",{d:"M20 19.5v.5a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8.5L18 5.5"}],["path",{d:"M8 18h1"}],["path",{d:"M18.42 9.61a2.1 2.1 0 1 1 2.97 2.97L16.95 17 13 18l.99-3.95 4.43-4.44Z"}]]],O5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M8 13h2"}],["path",{d:"M8 17h2"}],["path",{d:"M14 13h2"}],["path",{d:"M14 17h2"}]]],R5=["svg",h,[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v7"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"m10 18 3-3-3-3"}],["path",{d:"M4 18v-1a2 2 0 0 1 2-2h6"}]]],T5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"m8 16 2-2-2-2"}],["path",{d:"M12 18h4"}]]],U5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["line",{x1:"16",x2:"8",y1:"13",y2:"13"}],["line",{x1:"16",x2:"8",y1:"17",y2:"17"}],["line",{x1:"10",x2:"8",y1:"9",y2:"9"}]]],G5=["svg",h,[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M2 13v-1h6v1"}],["path",{d:"M4 18h2"}],["path",{d:"M5 12v6"}]]],E5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M9 13v-1h6v1"}],["path",{d:"M11 18h2"}],["path",{d:"M12 12v6"}]]],W5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M12 12v6"}],["path",{d:"m15 15-3-3-3 3"}]]],I5=["svg",h,[["path",{d:"M4 8V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"m10 15.5 4 2.5v-6l-4 2.5"}],["rect",{width:"8",height:"6",x:"2",y:"12",rx:"1"}]]],q5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"m10 11 5 3-5 3v-6Z"}]]],N5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"M11.5 13.5c.32.4.5.94.5 1.5s-.18 1.1-.5 1.5"}],["path",{d:"M15 12c.64.8 1 1.87 1 3s-.36 2.2-1 3"}],["path",{d:"M8 15h.01"}]]],X5=["svg",h,[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v3"}],["polyline",{points:"14 2 14 8 20 8"}],["path",{d:"m7 10-3 2H2v4h2l3 2v-8Z"}],["path",{d:"M11 11c.64.8 1 1.87 1 3s-.36 2.2-1 3"}]]],J5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["path",{d:"M12 9v4"}],["path",{d:"M12 17h.01"}]]],j5=["svg",h,[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"}],["path",{d:"M14 2v6h6"}],["path",{d:"m3 12.5 5 5"}],["path",{d:"m8 12.5-5 5"}]]],K5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}],["line",{x1:"9.5",x2:"14.5",y1:"12.5",y2:"17.5"}],["line",{x1:"14.5",x2:"9.5",y1:"12.5",y2:"17.5"}]]],Q5=["svg",h,[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}],["polyline",{points:"14 2 14 8 20 8"}]]],_5=["svg",h,[["path",{d:"M15.5 2H8.6c-.4 0-.8.2-1.1.5-.3.3-.5.7-.5 1.1v12.8c0 .4.2.8.5 1.1.3.3.7.5 1.1.5h9.8c.4 0 .8-.2 1.1-.5.3-.3.5-.7.5-1.1V6.5L15.5 2z"}],["path",{d:"M3 7.6v12.8c0 .4.2.8.5 1.1.3.3.7.5 1.1.5h9.8"}],["path",{d:"M15 2v5h5"}]]],Y5=["svg",h,[["rect",{width:"20",height:"20",x:"2",y:"2",rx:"2.18",ry:"2.18"}],["line",{x1:"7",x2:"7",y1:"2",y2:"22"}],["line",{x1:"17",x2:"17",y1:"2",y2:"22"}],["line",{x1:"2",x2:"22",y1:"12",y2:"12"}],["line",{x1:"2",x2:"7",y1:"7",y2:"7"}],["line",{x1:"2",x2:"7",y1:"17",y2:"17"}],["line",{x1:"17",x2:"22",y1:"17",y2:"17"}],["line",{x1:"17",x2:"22",y1:"7",y2:"7"}]]],a4=["svg",h,[["path",{d:"M13.013 3H2l8 9.46V19l4 2v-8.54l.9-1.055"}],["path",{d:"m22 3-5 5"}],["path",{d:"m17 3 5 5"}]]],h4=["svg",h,[["polygon",{points:"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"}]]],t4=["svg",h,[["path",{d:"M2 12C2 6.5 6.5 2 12 2a10 10 0 0 1 8 4"}],["path",{d:"M5 19.5C5.5 18 6 15 6 12c0-.7.12-1.37.34-2"}],["path",{d:"M17.29 21.02c.12-.6.43-2.3.5-3.02"}],["path",{d:"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4"}],["path",{d:"M8.65 22c.21-.66.45-1.32.57-2"}],["path",{d:"M14 13.12c0 2.38 0 6.38-1 8.88"}],["path",{d:"M2 16h.01"}],["path",{d:"M21.8 16c.2-2 .131-5.354 0-6"}],["path",{d:"M9 6.8a6 6 0 0 1 9 5.2c0 .47 0 1.17-.02 2"}]]],c4=["svg",h,[["path",{d:"M18 12.47v.03m0-.5v.47m-.475 5.056A6.744 6.744 0 0 1 15 18c-3.56 0-7.56-2.53-8.5-6 .348-1.28 1.114-2.433 2.121-3.38m3.444-2.088A8.802 8.802 0 0 1 15 6c3.56 0 6.06 2.54 7 6-.309 1.14-.786 2.177-1.413 3.058"}],["path",{d:"M7 10.67C7 8 5.58 5.97 2.73 5.5c-1 1.5-1 5 .23 6.5-1.24 1.5-1.24 5-.23 6.5C5.58 18.03 7 16 7 13.33m7.48-4.372A9.77 9.77 0 0 1 16 6.07m0 11.86a9.77 9.77 0 0 1-1.728-3.618"}],["path",{d:"m16.01 17.93-.23 1.4A2 2 0 0 1 13.8 21H9.5a5.96 5.96 0 0 0 1.49-3.98M8.53 3h5.27a2 2 0 0 1 1.98 1.67l.23 1.4M2 2l20 20"}]]],d4=["svg",h,[["path",{d:"M6.5 12c.94-3.46 4.94-6 8.5-6 3.56 0 6.06 2.54 7 6-.94 3.47-3.44 6-7 6s-7.56-2.53-8.5-6Z"}],["path",{d:"M18 12v.5"}],["path",{d:"M16 17.93a9.77 9.77 0 0 1 0-11.86"}],["path",{d:"M7 10.67C7 8 5.58 5.97 2.73 5.5c-1 1.5-1 5 .23 6.5-1.24 1.5-1.24 5-.23 6.5C5.58 18.03 7 16 7 13.33"}],["path",{d:"M10.46 7.26C10.2 5.88 9.17 4.24 8 3h5.8a2 2 0 0 1 1.98 1.67l.23 1.4"}],["path",{d:"m16.01 17.93-.23 1.4A2 2 0 0 1 13.8 21H9.5a5.96 5.96 0 0 0 1.49-3.98"}]]],n4=["svg",h,[["path",{d:"M8 2c3 0 5 2 8 2s4-1 4-1v11"}],["path",{d:"M4 22V4"}],["path",{d:"M4 15s1-1 4-1 5 2 8 2"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],i4=["svg",h,[["path",{d:"M17 22V2L7 7l10 5"}]]],l4=["svg",h,[["path",{d:"M7 22V2l10 5-10 5"}]]],p4=["svg",h,[["path",{d:"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"}],["line",{x1:"4",x2:"4",y1:"22",y2:"15"}]]],e4=["svg",h,[["path",{d:"M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z"}]]],M4=["svg",h,[["path",{d:"M16 16v4a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2V10c0-2-2-2-2-4"}],["path",{d:"M7 2h11v4c0 2-2 2-2 4v1"}],["line",{x1:"11",x2:"18",y1:"6",y2:"6"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],v4=["svg",h,[["path",{d:"M18 6c0 2-2 2-2 4v10a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2V10c0-2-2-2-2-4V2h12z"}],["line",{x1:"6",x2:"18",y1:"6",y2:"6"}],["line",{x1:"12",x2:"12",y1:"12",y2:"12"}]]],o4=["svg",h,[["path",{d:"M10 10 4.72 20.55a1 1 0 0 0 .9 1.45h12.76a1 1 0 0 0 .9-1.45l-1.272-2.542"}],["path",{d:"M10 2v2.343"}],["path",{d:"M14 2v6.343"}],["path",{d:"M8.5 2h7"}],["path",{d:"M7 16h9"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],y4=["svg",h,[["path",{d:"M10 2v7.527a2 2 0 0 1-.211.896L4.72 20.55a1 1 0 0 0 .9 1.45h12.76a1 1 0 0 0 .9-1.45l-5.069-10.127A2 2 0 0 1 14 9.527V2"}],["path",{d:"M8.5 2h7"}],["path",{d:"M7 16h10"}]]],s4=["svg",h,[["path",{d:"M10 2v7.31"}],["path",{d:"M14 9.3V1.99"}],["path",{d:"M8.5 2h7"}],["path",{d:"M14 9.3a6.5 6.5 0 1 1-4 0"}],["path",{d:"M5.52 16h12.96"}]]],g4=["svg",h,[["path",{d:"m3 7 5 5-5 5V7"}],["path",{d:"m21 7-5 5 5 5V7"}],["path",{d:"M12 20v2"}],["path",{d:"M12 14v2"}],["path",{d:"M12 8v2"}],["path",{d:"M12 2v2"}]]],r4=["svg",h,[["path",{d:"M8 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h3"}],["path",{d:"M16 3h3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-3"}],["path",{d:"M12 20v2"}],["path",{d:"M12 14v2"}],["path",{d:"M12 8v2"}],["path",{d:"M12 2v2"}]]],$4=["svg",h,[["path",{d:"m17 3-5 5-5-5h10"}],["path",{d:"m17 21-5-5-5 5h10"}],["path",{d:"M4 12H2"}],["path",{d:"M10 12H8"}],["path",{d:"M16 12h-2"}],["path",{d:"M22 12h-2"}]]],m4=["svg",h,[["path",{d:"M21 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v3"}],["path",{d:"M21 16v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-3"}],["path",{d:"M4 12H2"}],["path",{d:"M10 12H8"}],["path",{d:"M16 12h-2"}],["path",{d:"M22 12h-2"}]]],x4=["svg",h,[["path",{d:"M12 5a3 3 0 1 1 3 3m-3-3a3 3 0 1 0-3 3m3-3v1M9 8a3 3 0 1 0 3 3M9 8h1m5 0a3 3 0 1 1-3 3m3-3h-1m-2 3v-1"}],["circle",{cx:"12",cy:"8",r:"2"}],["path",{d:"M12 10v12"}],["path",{d:"M12 22c4.2 0 7-1.667 7-5-4.2 0-7 1.667-7 5Z"}],["path",{d:"M12 22c-4.2 0-7-1.667-7-5 4.2 0 7 1.667 7 5Z"}]]],H4=["svg",h,[["path",{d:"M12 7.5a4.5 4.5 0 1 1 4.5 4.5M12 7.5A4.5 4.5 0 1 0 7.5 12M12 7.5V9m-4.5 3a4.5 4.5 0 1 0 4.5 4.5M7.5 12H9m7.5 0a4.5 4.5 0 1 1-4.5 4.5m4.5-4.5H15m-3 4.5V15"}],["circle",{cx:"12",cy:"12",r:"3"}],["path",{d:"m8 16 1.5-1.5"}],["path",{d:"M14.5 9.5 16 8"}],["path",{d:"m8 8 1.5 1.5"}],["path",{d:"M14.5 14.5 16 16"}]]],C4=["svg",h,[["circle",{cx:"12",cy:"12",r:"3"}],["path",{d:"M3 7V5a2 2 0 0 1 2-2h2"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2"}]]],V4=["svg",h,[["path",{d:"M22 20V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2h6"}],["circle",{cx:"16",cy:"19",r:"2"}],["path",{d:"M16 11v-1"}],["path",{d:"M16 17v-2"}]]],u4=["svg",h,[["path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"}],["path",{d:"m9 13 2 2 4-4"}]]],A4=["svg",h,[["path",{d:"M7 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2"}],["circle",{cx:"16",cy:"16",r:"6"}],["path",{d:"M16 14v2l1 1"}]]],w4=["svg",h,[["path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"}],["path",{d:"M2 10h20"}]]],L4=["svg",h,[["path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"}],["circle",{cx:"12",cy:"13",r:"2"}],["path",{d:"M12 10v1"}],["path",{d:"M12 15v1"}],["path",{d:"m14.6 11.5-.87.5"}],["path",{d:"m10.27 14-.87.5"}],["path",{d:"m14.6 14.5-.87-.5"}],["path",{d:"m10.27 12-.87-.5"}]]],S4=["svg",h,[["path",{d:"M10.5 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v3"}],["circle",{cx:"18",cy:"18",r:"3"}],["path",{d:"M18 14v1"}],["path",{d:"M18 21v1"}],["path",{d:"M22 18h-1"}],["path",{d:"M15 18h-1"}],["path",{d:"m21 15-.88.88"}],["path",{d:"M15.88 20.12 15 21"}],["path",{d:"m21 21-.88-.88"}],["path",{d:"M15.88 15.88 15 15"}]]],f4=["svg",h,[["path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"}],["path",{d:"M12 10v6"}],["path",{d:"m15 13-3 3-3-3"}]]],k4=["svg",h,[["path",{d:"M8.42 10.61a2.1 2.1 0 1 1 2.97 2.97L5.95 19 2 20l.99-3.95 5.43-5.44Z"}],["path",{d:"M2 11.5V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-9.5"}]]],F4=["svg",h,[["path",{d:"M22 13V8a1.974 1.974 0 0 0-2-2h-7.9c-.3 0-.7-.1-.9-.2-.3-.2-.5-.4-.7-.7l-.9-1.2c-.2-.3-.4-.5-.7-.7-.3-.1-.6-.2-1-.2H4a1.974 1.974 0 0 0-2 2v13c0 1.1.9 2 2 2h5"}],["circle",{cx:"20",cy:"19",r:"2"}],["circle",{cx:"13",cy:"12.",r:"2"}],["path",{d:"M18 19c-2.8 0-5-2.2-5-5v8"}]]],Z4=["svg",h,[["path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"}],["circle",{class:"st0",cx:"12",cy:"13",r:"2"}],["line",{class:"st0",x1:"6",y1:"13",x2:"10",y2:"13"}],["line",{class:"st0",x1:"14",y1:"13",x2:"18",y2:"13"}]]],z4=["svg",h,[["path",{d:"M11 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v1.5"}],["path",{d:"M21.29 13.7a2.43 2.43 0 0 0-2.65-.52c-.3.12-.57.3-.8.53l-.34.34-.35-.34a2.43 2.43 0 0 0-2.65-.53c-.3.12-.56.3-.79.53-.95.94-1 2.53.2 3.74L17.5 21l3.6-3.55c1.2-1.21 1.14-2.8.19-3.74Z"}]]],B4=["svg",h,[["path",{d:"M2 9V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-1"}],["path",{d:"M2 13h10"}],["path",{d:"m9 16 3-3-3-3"}]]],P4=["svg",h,[["path",{d:"M10 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v2"}],["circle",{cx:"16",cy:"20",r:"2"}],["path",{d:"m22 14-4.5 4.5"}],["path",{d:"m21 15 1 1"}]]],D4=["svg",h,[["path",{d:"M10 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v2.5"}],["rect",{width:"8",height:"5",x:"14",y:"17",rx:"1"}],["path",{d:"M20 17v-2a2 2 0 1 0-4 0v2"}]]],b4=["svg",h,[["path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"}],["line",{x1:"9",x2:"15",y1:"13",y2:"13"}]]],O4=["svg",h,[["path",{d:"m6 14 1.45-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.55 6a2 2 0 0 1-1.94 1.5H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H18a2 2 0 0 1 2 2v2"}]]],R4=["svg",h,[["path",{d:"M2 7.5V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2"}],["path",{d:"M2 13h10"}],["path",{d:"m5 10-3 3 3 3"}]]],T4=["svg",h,[["path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"}],["line",{x1:"12",x2:"12",y1:"10",y2:"16"}],["line",{x1:"9",x2:"15",y1:"13",y2:"13"}]]],U4=["svg",h,[["path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"}],["circle",{cx:"11.5",cy:"12.5",r:"2.5"}],["path",{d:"M13.27 14.27 15 16"}]]],G4=["svg",h,[["path",{d:"M11 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v4"}],["circle",{cx:"17",cy:"17",r:"3"}],["path",{d:"m21 21-1.5-1.5"}]]],E4=["svg",h,[["path",{d:"M2 9V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2"}],["path",{d:"m8 16 3-3-3-3"}],["path",{d:"M2 16v-1a2 2 0 0 1 2-2h6"}]]],W4=["svg",h,[["path",{d:"M13 10h7a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z"}],["path",{d:"M13 21h7a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.88a1 1 0 0 1-.9-.55l-.44-.9a1 1 0 0 0-.9-.55H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z"}],["path",{d:"M3 3v2c0 1.1.9 2 2 2h3"}],["path",{d:"M3 3v13c0 1.1.9 2 2 2h3"}]]],I4=["svg",h,[["path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"}],["path",{d:"M12 10v6"}],["path",{d:"m9 13 3-3 3 3"}]]],q4=["svg",h,[["path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"}],["path",{d:"m9.5 10.5 5 5"}],["path",{d:"m14.5 10.5-5 5"}]]],N4=["svg",h,[["path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"}]]],X4=["svg",h,[["path",{d:"M8 17h12a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3.93a2 2 0 0 1-1.66-.9l-.82-1.2a2 2 0 0 0-1.66-.9H8a2 2 0 0 0-2 2v9c0 1.1.9 2 2 2Z"}],["path",{d:"M2 8v11c0 1.1.9 2 2 2h14"}]]],J4=["svg",h,[["path",{d:"M4 16v-2.38C4 11.5 2.97 10.5 3 8c.03-2.72 1.49-6 4.5-6C9.37 2 10 3.8 10 5.5c0 3.11-2 5.66-2 8.68V16a2 2 0 1 1-4 0Z"}],["path",{d:"M20 20v-2.38c0-2.12 1.03-3.12 1-5.62-.03-2.72-1.49-6-4.5-6C14.63 6 14 7.8 14 9.5c0 3.11 2 5.66 2 8.68V20a2 2 0 1 0 4 0Z"}],["path",{d:"M16 17h4"}],["path",{d:"M4 13h4"}]]],j4=["svg",h,[["path",{d:"M12 12H5a2 2 0 0 0-2 2v5"}],["circle",{cx:"13",cy:"19",r:"2"}],["circle",{cx:"5",cy:"19",r:"2"}],["path",{d:"M8 19h3m5-17v17h6M6 12V7c0-1.1.9-2 2-2h3l5 5"}]]],K4=["svg",h,[["rect",{width:"20",height:"12",x:"2",y:"6",rx:"2"}],["path",{d:"M12 12h.01"}],["path",{d:"M17 12h.01"}],["path",{d:"M7 12h.01"}]]],Q4=["svg",h,[["polyline",{points:"15 17 20 12 15 7"}],["path",{d:"M4 18v-2a4 4 0 0 1 4-4h12"}]]],_4=["svg",h,[["line",{x1:"22",x2:"2",y1:"6",y2:"6"}],["line",{x1:"22",x2:"2",y1:"18",y2:"18"}],["line",{x1:"6",x2:"6",y1:"2",y2:"22"}],["line",{x1:"18",x2:"18",y1:"2",y2:"22"}]]],Y4=["svg",h,[["path",{d:"M5 16V9h14V2H5l14 14h-7m-7 0 7 7v-7m-7 0h7"}]]],a3=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M16 16s-1.5-2-4-2-4 2-4 2"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9"}]]],h3=["svg",h,[["line",{x1:"3",x2:"15",y1:"22",y2:"22"}],["line",{x1:"4",x2:"14",y1:"9",y2:"9"}],["path",{d:"M14 22V4a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v18"}],["path",{d:"M14 13h2a2 2 0 0 1 2 2v2a2 2 0 0 0 2 2h0a2 2 0 0 0 2-2V9.83a2 2 0 0 0-.59-1.42L18 5"}]]],t3=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["path",{d:"M9 17c2 0 2.8-1 2.8-2.8V10c0-2 1-3.3 3.2-3"}],["path",{d:"M9 11.2h5.7"}]]],c3=["svg",h,[["line",{x1:"6",x2:"10",y1:"11",y2:"11"}],["line",{x1:"8",x2:"8",y1:"9",y2:"13"}],["line",{x1:"15",x2:"15.01",y1:"12",y2:"12"}],["line",{x1:"18",x2:"18.01",y1:"10",y2:"10"}],["path",{d:"M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z"}]]],d3=["svg",h,[["line",{x1:"6",x2:"10",y1:"12",y2:"12"}],["line",{x1:"8",x2:"8",y1:"10",y2:"14"}],["line",{x1:"15",x2:"15.01",y1:"13",y2:"13"}],["line",{x1:"18",x2:"18.01",y1:"11",y2:"11"}],["rect",{width:"20",height:"12",x:"2",y:"6",rx:"2"}]]],n3=["svg",h,[["path",{d:"m12 15 3.5-3.5"}],["path",{d:"M20.3 18c.4-1 .7-2.2.7-3.4C21 9.8 17 6 12 6s-9 3.8-9 8.6c0 1.2.3 2.4.7 3.4"}]]],i3=["svg",h,[["path",{d:"m14 13-7.5 7.5c-.83.83-2.17.83-3 0 0 0 0 0 0 0a2.12 2.12 0 0 1 0-3L11 10"}],["path",{d:"m16 16 6-6"}],["path",{d:"m8 8 6-6"}],["path",{d:"m9 7 8 8"}],["path",{d:"m21 11-8-8"}]]],l3=["svg",h,[["polygon",{points:"6 3 18 3 22 9 12 22 2 9"}],["path",{d:"m12 22 4-13-3-6"}],["path",{d:"M12 22 8 9l3-6"}],["path",{d:"M2 9h20"}]]],p3=["svg",h,[["path",{d:"M9 10h.01"}],["path",{d:"M15 10h.01"}],["path",{d:"M12 2a8 8 0 0 0-8 8v12l3-3 2.5 2.5L12 19l2.5 2.5L17 19l3 3V10a8 8 0 0 0-8-8z"}]]],e3=["svg",h,[["polyline",{points:"20 12 20 22 4 22 4 12"}],["rect",{width:"20",height:"5",x:"2",y:"7"}],["line",{x1:"12",x2:"12",y1:"22",y2:"7"}],["path",{d:"M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z"}],["path",{d:"M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z"}]]],M3=["svg",h,[["path",{d:"M6 3v12"}],["path",{d:"M18 9a3 3 0 1 0 0-6 3 3 0 0 0 0 6z"}],["path",{d:"M6 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6z"}],["path",{d:"M15 6a9 9 0 0 0-9 9"}],["path",{d:"M18 15v6"}],["path",{d:"M21 18h-6"}]]],v3=["svg",h,[["line",{x1:"6",x2:"6",y1:"3",y2:"15"}],["circle",{cx:"18",cy:"6",r:"3"}],["circle",{cx:"6",cy:"18",r:"3"}],["path",{d:"M18 9a9 9 0 0 1-9 9"}]]],o3=["svg",h,[["circle",{cx:"12",cy:"12",r:"3"}],["line",{x1:"3",x2:"9",y1:"12",y2:"12"}],["line",{x1:"15",x2:"21",y1:"12",y2:"12"}]]],y3=["svg",h,[["circle",{cx:"18",cy:"18",r:"3"}],["circle",{cx:"6",cy:"6",r:"3"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v7"}],["path",{d:"M11 18H8a2 2 0 0 1-2-2V9"}]]],s3=["svg",h,[["circle",{cx:"12",cy:"18",r:"3"}],["circle",{cx:"6",cy:"6",r:"3"}],["circle",{cx:"18",cy:"6",r:"3"}],["path",{d:"M18 9v1a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V9"}],["path",{d:"M12 12v3"}]]],g3=["svg",h,[["circle",{cx:"18",cy:"18",r:"3"}],["circle",{cx:"6",cy:"6",r:"3"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9"}]]],r3=["svg",h,[["circle",{cx:"18",cy:"18",r:"3"}],["circle",{cx:"6",cy:"6",r:"3"}],["path",{d:"M18 11.5V15"}],["path",{d:"m21 3-6 6"}],["path",{d:"m21 9-6-6"}],["line",{x1:"6",x2:"6",y1:"9",y2:"21"}]]],$3=["svg",h,[["circle",{cx:"18",cy:"18",r:"3"}],["circle",{cx:"6",cy:"6",r:"3"}],["path",{d:"M18 6V5"}],["path",{d:"M18 11v-1"}],["line",{x1:"6",x2:"6",y1:"9",y2:"21"}]]],m3=["svg",h,[["circle",{cx:"18",cy:"18",r:"3"}],["circle",{cx:"6",cy:"6",r:"3"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v7"}],["line",{x1:"6",x2:"6",y1:"9",y2:"21"}]]],x3=["svg",h,[["path",{d:"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"}],["path",{d:"M9 18c-4.51 2-5-2-7-2"}]]],H3=["svg",h,[["path",{d:"m22 13.29-3.33-10a.42.42 0 0 0-.14-.18.38.38 0 0 0-.22-.11.39.39 0 0 0-.23.07.42.42 0 0 0-.14.18l-2.26 6.67H8.32L6.1 3.26a.42.42 0 0 0-.1-.18.38.38 0 0 0-.26-.08.39.39 0 0 0-.23.07.42.42 0 0 0-.14.18L2 13.29a.74.74 0 0 0 .27.83L12 21l9.69-6.88a.71.71 0 0 0 .31-.83Z"}]]],C3=["svg",h,[["path",{d:"M15.2 22H8.8a2 2 0 0 1-2-1.79L5 3h14l-1.81 17.21A2 2 0 0 1 15.2 22Z"}],["path",{d:"M6 12a5 5 0 0 1 6 0 5 5 0 0 0 6 0"}]]],V3=["svg",h,[["circle",{cx:"6",cy:"15",r:"4"}],["circle",{cx:"18",cy:"15",r:"4"}],["path",{d:"M14 15a2 2 0 0 0-2-2 2 2 0 0 0-2 2"}],["path",{d:"M2.5 13 5 7c.7-1.3 1.4-2 3-2"}],["path",{d:"M21.5 13 19 7c-.7-1.3-1.5-2-3-2"}]]],u3=["svg",h,[["path",{d:"M21.54 15H17a2 2 0 0 0-2 2v4.54"}],["path",{d:"M7 3.34V5a3 3 0 0 0 3 3v0a2 2 0 0 1 2 2v0c0 1.1.9 2 2 2v0a2 2 0 0 0 2-2v0c0-1.1.9-2 2-2h3.17"}],["path",{d:"M11 21.95V18a2 2 0 0 0-2-2v0a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05"}],["circle",{cx:"12",cy:"12",r:"10"}]]],A3=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["line",{x1:"2",x2:"22",y1:"12",y2:"12"}],["path",{d:"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"}]]],w3=["svg",h,[["path",{d:"M18 11.5V9a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v1.4"}],["path",{d:"M14 10V8a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v2"}],["path",{d:"M10 9.9V9a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v5"}],["path",{d:"M6 14v0a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v0"}],["path",{d:"M18 11v0a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-4a8 8 0 0 1-8-8 2 2 0 1 1 4 0"}]]],L3=["svg",h,[["path",{d:"M22 10v6M2 10l10-5 10 5-10 5z"}],["path",{d:"M6 12v5c3 3 9 3 12 0v-5"}]]],S3=["svg",h,[["path",{d:"M22 5V2l-5.89 5.89"}],["circle",{cx:"16.6",cy:"15.89",r:"3"}],["circle",{cx:"8.11",cy:"7.4",r:"3"}],["circle",{cx:"12.35",cy:"11.65",r:"3"}],["circle",{cx:"13.91",cy:"5.85",r:"3"}],["circle",{cx:"18.15",cy:"10.09",r:"3"}],["circle",{cx:"6.56",cy:"13.2",r:"3"}],["circle",{cx:"10.8",cy:"17.44",r:"3"}],["circle",{cx:"5",cy:"19",r:"3"}]]],f3=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["line",{x1:"3",x2:"21",y1:"9",y2:"9"}],["line",{x1:"3",x2:"21",y1:"15",y2:"15"}],["line",{x1:"9",x2:"9",y1:"3",y2:"21"}],["line",{x1:"15",x2:"15",y1:"3",y2:"21"}]]],k3=["svg",h,[["circle",{cx:"12",cy:"9",r:"1"}],["circle",{cx:"19",cy:"9",r:"1"}],["circle",{cx:"5",cy:"9",r:"1"}],["circle",{cx:"12",cy:"15",r:"1"}],["circle",{cx:"19",cy:"15",r:"1"}],["circle",{cx:"5",cy:"15",r:"1"}]]],F3=["svg",h,[["circle",{cx:"9",cy:"12",r:"1"}],["circle",{cx:"9",cy:"5",r:"1"}],["circle",{cx:"9",cy:"19",r:"1"}],["circle",{cx:"15",cy:"12",r:"1"}],["circle",{cx:"15",cy:"5",r:"1"}],["circle",{cx:"15",cy:"19",r:"1"}]]],Z3=["svg",h,[["circle",{cx:"12",cy:"5",r:"1"}],["circle",{cx:"19",cy:"5",r:"1"}],["circle",{cx:"5",cy:"5",r:"1"}],["circle",{cx:"12",cy:"12",r:"1"}],["circle",{cx:"19",cy:"12",r:"1"}],["circle",{cx:"5",cy:"12",r:"1"}],["circle",{cx:"12",cy:"19",r:"1"}],["circle",{cx:"19",cy:"19",r:"1"}],["circle",{cx:"5",cy:"19",r:"1"}]]],z3=["svg",h,[["path",{d:"m15 12-8.5 8.5c-.83.83-2.17.83-3 0 0 0 0 0 0 0a2.12 2.12 0 0 1 0-3L12 9"}],["path",{d:"M17.64 15 22 10.64"}],["path",{d:"m20.91 11.7-1.25-1.25c-.6-.6-.93-1.4-.93-2.25v-.86L16.01 4.6a5.56 5.56 0 0 0-3.94-1.64H9l.92.82A6.18 6.18 0 0 1 12 8.4v1.56l2 2h2.47l2.26 1.91"}]]],B3=["svg",h,[["path",{d:"M18 12.5V10a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v1.4"}],["path",{d:"M14 11V9a2 2 0 1 0-4 0v2"}],["path",{d:"M10 10.5V5a2 2 0 1 0-4 0v9"}],["path",{d:"m7 15-1.76-1.76a2 2 0 0 0-2.83 2.82l3.6 3.6C7.5 21.14 9.2 22 12 22h2a8 8 0 0 0 8-8V7a2 2 0 1 0-4 0v5"}]]],P3=["svg",h,[["path",{d:"M18 11V6a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v0"}],["path",{d:"M14 10V4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v2"}],["path",{d:"M10 10.5V6a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v8"}],["path",{d:"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15"}]]],D3=["svg",h,[["line",{x1:"22",x2:"2",y1:"12",y2:"12"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"}],["line",{x1:"6",x2:"6.01",y1:"16",y2:"16"}],["line",{x1:"10",x2:"10.01",y1:"16",y2:"16"}]]],b3=["svg",h,[["path",{d:"M2 18a1 1 0 0 0 1 1h18a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v2z"}],["path",{d:"M10 10V5a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v5"}],["path",{d:"M4 15v-3a6 6 0 0 1 6-6h0"}],["path",{d:"M14 6h0a6 6 0 0 1 6 6v3"}]]],O3=["svg",h,[["line",{x1:"4",x2:"20",y1:"9",y2:"9"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21"}]]],R3=["svg",h,[["path",{d:"m5.2 6.2 1.4 1.4"}],["path",{d:"M2 13h2"}],["path",{d:"M20 13h2"}],["path",{d:"m17.4 7.6 1.4-1.4"}],["path",{d:"M22 17H2"}],["path",{d:"M22 21H2"}],["path",{d:"M16 13a4 4 0 0 0-8 0"}],["path",{d:"M12 5V2.5"}]]],T3=["svg",h,[["path",{d:"M4 12h8"}],["path",{d:"M4 18V6"}],["path",{d:"M12 18V6"}],["path",{d:"m17 12 3-2v8"}]]],U3=["svg",h,[["path",{d:"M4 12h8"}],["path",{d:"M4 18V6"}],["path",{d:"M12 18V6"}],["path",{d:"M21 18h-4c0-4 4-3 4-6 0-1.5-2-2.5-4-1"}]]],G3=["svg",h,[["path",{d:"M4 12h8"}],["path",{d:"M4 18V6"}],["path",{d:"M12 18V6"}],["path",{d:"M17.5 10.5c1.7-1 3.5 0 3.5 1.5a2 2 0 0 1-2 2"}],["path",{d:"M17 17.5c2 1.5 4 .3 4-1.5a2 2 0 0 0-2-2"}]]],E3=["svg",h,[["path",{d:"M4 12h8"}],["path",{d:"M4 18V6"}],["path",{d:"M12 18V6"}],["path",{d:"M17 10v4h4"}],["path",{d:"M21 10v8"}]]],W3=["svg",h,[["path",{d:"M4 12h8"}],["path",{d:"M4 18V6"}],["path",{d:"M12 18V6"}],["path",{d:"M17 13v-3h4"}],["path",{d:"M17 17.7c.4.2.8.3 1.3.3 1.5 0 2.7-1.1 2.7-2.5S19.8 13 18.3 13H17"}]]],I3=["svg",h,[["path",{d:"M4 12h8"}],["path",{d:"M4 18V6"}],["path",{d:"M12 18V6"}],["circle",{cx:"19",cy:"16",r:"2"}],["path",{d:"M20 10c-2 2-3 3.5-3 6"}]]],q3=["svg",h,[["path",{d:"M6 12h12"}],["path",{d:"M6 20V4"}],["path",{d:"M18 20V4"}]]],N3=["svg",h,[["path",{d:"M3 14h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-7a9 9 0 0 1 18 0v7a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3"}]]],X3=["svg",h,[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"}],["path",{d:"m12 13-1-1 2-2-3-3 2-2"}]]],J3=["svg",h,[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"}],["path",{d:"M12 5 9.04 7.96a2.17 2.17 0 0 0 0 3.08v0c.82.82 2.13.85 3 .07l2.07-1.9a2.82 2.82 0 0 1 3.79 0l2.96 2.66"}],["path",{d:"m18 15-2-2"}],["path",{d:"m15 18-2-2"}]]],j3=["svg",h,[["line",{x1:"2",y1:"2",x2:"22",y2:"22"}],["path",{d:"M16.5 16.5 12 21l-7-7c-1.5-1.45-3-3.2-3-5.5a5.5 5.5 0 0 1 2.14-4.35"}],["path",{d:"M8.76 3.1c1.15.22 2.13.78 3.24 1.9 1.5-1.5 2.74-2 4.5-2A5.5 5.5 0 0 1 22 8.5c0 2.12-1.3 3.78-2.67 5.17"}]]],K3=["svg",h,[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"}],["path",{d:"M3.22 12H9.5l.5-1 2 4.5 2-7 1.5 3.5h5.27"}]]],Q3=["svg",h,[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"}]]],_3=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"}],["line",{x1:"12",x2:"12.01",y1:"17",y2:"17"}]]],Y3=["svg",h,[["path",{d:"m3 15 5.12-5.12A3 3 0 0 1 10.24 9H13a2 2 0 1 1 0 4h-2.5m4-.68 4.17-4.89a1.88 1.88 0 0 1 2.92 2.36l-4.2 5.94A3 3 0 0 1 14.96 17H9.83a2 2 0 0 0-1.42.59L7 19"}],["path",{d:"m2 14 6 6"}]]],ac=["svg",h,[["path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"}]]],hc=["svg",h,[["path",{d:"m9 11-6 6v3h9l3-3"}],["path",{d:"m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4"}]]],tc=["svg",h,[["path",{d:"M3 3v5h5"}],["path",{d:"M3.05 13A9 9 0 1 0 6 5.3L3 8"}],["path",{d:"M12 7v5l4 2"}]]],cc=["svg",h,[["path",{d:"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"}],["polyline",{points:"9 22 9 12 15 12 15 22"}]]],dc=["svg",h,[["path",{d:"M17.5 5.5C19 7 20.5 9 21 11c-1.323.265-2.646.39-4.118.226"}],["path",{d:"M5.5 17.5C7 19 9 20.5 11 21c.5-2.5.5-5-1-8.5"}],["path",{d:"M17.5 17.5c-2.5 0-4 0-6-1"}],["path",{d:"M20 11.5c1 1.5 2 3.5 2 4.5"}],["path",{d:"M11.5 20c1.5 1 3.5 2 4.5 2 .5-1.5 0-3-.5-4.5"}],["path",{d:"M22 22c-2 0-3.5-.5-5.5-1.5"}],["path",{d:"M4.783 4.782C1.073 8.492 1 14.5 5 18c1-1 2-4.5 1.5-6.5 1.5 1 4 1 5.5.5M8.227 2.57C11.578 1.335 15.453 2.089 18 5c-.88.88-3.7 1.761-5.726 1.618"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],nc=["svg",h,[["path",{d:"M17.5 5.5C19 7 20.5 9 21 11c-2.5.5-5 .5-8.5-1"}],["path",{d:"M5.5 17.5C7 19 9 20.5 11 21c.5-2.5.5-5-1-8.5"}],["path",{d:"M16.5 11.5c1 2 1 3.5 1 6-2.5 0-4 0-6-1"}],["path",{d:"M20 11.5c1 1.5 2 3.5 2 4.5-1.5.5-3 0-4.5-.5"}],["path",{d:"M11.5 20c1.5 1 3.5 2 4.5 2 .5-1.5 0-3-.5-4.5"}],["path",{d:"M20.5 16.5c1 2 1.5 3.5 1.5 5.5-2 0-3.5-.5-5.5-1.5"}],["path",{d:"M4.783 4.782C8.493 1.072 14.5 1 18 5c-1 1-4.5 2-6.5 1.5 1 1.5 1 4 .5 5.5-1.5.5-4 .5-5.5-.5C7 13.5 6 17 5 18c-4-3.5-3.927-9.508-.217-13.218Z"}],["path",{d:"M4.5 4.5 3 3c-.184-.185-.184-.816 0-1"}]]],ic=["svg",h,[["path",{d:"M18 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2Z"}],["path",{d:"m9 16 .348-.24c1.465-1.013 3.84-1.013 5.304 0L15 16"}],["path",{d:"M8 7h.01"}],["path",{d:"M16 7h.01"}],["path",{d:"M12 7h.01"}],["path",{d:"M12 11h.01"}],["path",{d:"M16 11h.01"}],["path",{d:"M8 11h.01"}],["path",{d:"M10 22v-6.5m4 0V22"}]]],lc=["svg",h,[["path",{d:"M5 22h14"}],["path",{d:"M5 2h14"}],["path",{d:"M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22"}],["path",{d:"M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2"}]]],pc=["svg",h,[["path",{d:"M12 17c5 0 8-2.69 8-6H4c0 3.31 3 6 8 6Zm-4 4h8m-4-3v3M5.14 11a3.5 3.5 0 1 1 6.71 0"}],["path",{d:"M12.14 11a3.5 3.5 0 1 1 6.71 0"}],["path",{d:"M15.5 6.5a3.5 3.5 0 1 0-7 0"}]]],ec=["svg",h,[["path",{d:"m7 11 4.08 10.35a1 1 0 0 0 1.84 0L17 11"}],["path",{d:"M17 7A5 5 0 0 0 7 7"}],["path",{d:"M17 7a2 2 0 0 1 0 4H7a2 2 0 0 1 0-4"}]]],Mc=["svg",h,[["path",{d:"M21 9v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7"}],["line",{x1:"16",x2:"22",y1:"5",y2:"5"}],["circle",{cx:"9",cy:"9",r:"2"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"}]]],vc=["svg",h,[["line",{x1:"2",x2:"22",y1:"2",y2:"22"}],["path",{d:"M10.41 10.41a2 2 0 1 1-2.83-2.83"}],["line",{x1:"13.5",x2:"6",y1:"13.5",y2:"21"}],["line",{x1:"18",x2:"21",y1:"12",y2:"15"}],["path",{d:"M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59"}],["path",{d:"M21 15V5a2 2 0 0 0-2-2H9"}]]],oc=["svg",h,[["path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7"}],["line",{x1:"16",x2:"22",y1:"5",y2:"5"}],["line",{x1:"19",x2:"19",y1:"2",y2:"8"}],["circle",{cx:"9",cy:"9",r:"2"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"}]]],yc=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["circle",{cx:"9",cy:"9",r:"2"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"}]]],sc=["svg",h,[["path",{d:"M12 3v12"}],["path",{d:"m8 11 4 4 4-4"}],["path",{d:"M8 5H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-4"}]]],gc=["svg",h,[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"}]]],rc=["svg",h,[["polyline",{points:"3 8 7 12 3 16"}],["line",{x1:"21",x2:"11",y1:"12",y2:"12"}],["line",{x1:"21",x2:"11",y1:"6",y2:"6"}],["line",{x1:"21",x2:"11",y1:"18",y2:"18"}]]],$c=["svg",h,[["path",{d:"M6 3h12"}],["path",{d:"M6 8h12"}],["path",{d:"m6 13 8.5 8"}],["path",{d:"M6 13h3"}],["path",{d:"M9 13c6.667 0 6.667-10 0-10"}]]],mc=["svg",h,[["path",{d:"M12 12c-2-2.67-4-4-6-4a4 4 0 1 0 0 8c2 0 4-1.33 6-4Zm0 0c2 2.67 4 4 6 4a4 4 0 0 0 0-8c-2 0-4 1.33-6 4Z"}]]],xc=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["line",{x1:"12",x2:"12",y1:"16",y2:"12"}],["line",{x1:"12",x2:"12.01",y1:"8",y2:"8"}]]],Hc=["svg",h,[["path",{d:"M21 11V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h6"}],["path",{d:"m12 12 4 10 1.7-4.3L22 16Z"}]]],Cc=["svg",h,[["rect",{width:"20",height:"20",x:"2",y:"2",rx:"5",ry:"5"}],["path",{d:"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"}],["line",{x1:"17.5",x2:"17.51",y1:"6.5",y2:"6.5"}]]],Vc=["svg",h,[["line",{x1:"19",x2:"10",y1:"4",y2:"4"}],["line",{x1:"14",x2:"5",y1:"20",y2:"20"}],["line",{x1:"15",x2:"9",y1:"4",y2:"20"}]]],uc=["svg",h,[["path",{d:"M20 10c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8h8"}],["polyline",{points:"16 14 20 18 16 22"}]]],Ac=["svg",h,[["path",{d:"M4 10c0-4.4 3.6-8 8-8s8 3.6 8 8-3.6 8-8 8H4"}],["polyline",{points:"8 22 4 18 8 14"}]]],wc=["svg",h,[["path",{d:"M12 9.5V21m0-11.5L6 3m6 6.5L18 3"}],["path",{d:"M6 15h12"}],["path",{d:"M6 11h12"}]]],Lc=["svg",h,[["path",{d:"M21 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-2Z"}],["path",{d:"M6 15v-2"}],["path",{d:"M12 15V9"}],["circle",{cx:"12",cy:"6",r:"3"}]]],Sc=["svg",h,[["circle",{cx:"7.5",cy:"15.5",r:"5.5"}],["path",{d:"m21 2-9.6 9.6"}],["path",{d:"m15.5 7.5 3 3L22 7l-3-3"}]]],fc=["svg",h,[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",ry:"2"}],["path",{d:"M6 8h.001"}],["path",{d:"M10 8h.001"}],["path",{d:"M14 8h.001"}],["path",{d:"M18 8h.001"}],["path",{d:"M8 12h.001"}],["path",{d:"M12 12h.001"}],["path",{d:"M16 12h.001"}],["path",{d:"M7 16h10"}]]],kc=["svg",h,[["path",{d:"M12 2v5"}],["path",{d:"M6 7h12l4 9H2l4-9Z"}],["path",{d:"M9.17 16a3 3 0 1 0 5.66 0"}]]],Fc=["svg",h,[["path",{d:"m14 5-3 3 2 7 8-8-7-2Z"}],["path",{d:"m14 5-3 3-3-3 3-3 3 3Z"}],["path",{d:"M9.5 6.5 4 12l3 6"}],["path",{d:"M3 22v-2c0-1.1.9-2 2-2h4a2 2 0 0 1 2 2v2H3Z"}]]],Zc=["svg",h,[["path",{d:"M9 2h6l3 7H6l3-7Z"}],["path",{d:"M12 9v13"}],["path",{d:"M9 22h6"}]]],zc=["svg",h,[["path",{d:"M11 13h6l3 7H8l3-7Z"}],["path",{d:"M14 13V8a2 2 0 0 0-2-2H8"}],["path",{d:"M4 9h2a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2H4v6Z"}]]],Bc=["svg",h,[["path",{d:"M11 4h6l3 7H8l3-7Z"}],["path",{d:"M14 11v5a2 2 0 0 1-2 2H8"}],["path",{d:"M4 15h2a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H4v-6Z"}]]],Pc=["svg",h,[["path",{d:"M8 2h8l4 10H4L8 2Z"}],["path",{d:"M12 12v6"}],["path",{d:"M8 22v-2c0-1.1.9-2 2-2h4a2 2 0 0 1 2 2v2H8Z"}]]],Dc=["svg",h,[["line",{x1:"3",x2:"21",y1:"22",y2:"22"}],["line",{x1:"6",x2:"6",y1:"18",y2:"11"}],["line",{x1:"10",x2:"10",y1:"18",y2:"11"}],["line",{x1:"14",x2:"14",y1:"18",y2:"11"}],["line",{x1:"18",x2:"18",y1:"18",y2:"11"}],["polygon",{points:"12 2 20 7 4 7"}]]],bc=["svg",h,[["path",{d:"m5 8 6 6"}],["path",{d:"m4 14 6-6 2-3"}],["path",{d:"M2 5h12"}],["path",{d:"M7 2h1"}],["path",{d:"m22 22-5-10-5 10"}],["path",{d:"M14 18h6"}]]],Oc=["svg",h,[["rect",{width:"18",height:"12",x:"3",y:"4",rx:"2",ry:"2"}],["line",{x1:"2",x2:"22",y1:"20",y2:"20"}]]],Rc=["svg",h,[["path",{d:"M20 16V7a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v9m16 0H4m16 0 1.28 2.55a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45L4 16"}]]],Tc=["svg",h,[["path",{d:"M7 22a5 5 0 0 1-2-4"}],["path",{d:"M7 16.93c.96.43 1.96.74 2.99.91"}],["path",{d:"M3.34 14A6.8 6.8 0 0 1 2 10c0-4.42 4.48-8 10-8s10 3.58 10 8a7.19 7.19 0 0 1-.33 2"}],["path",{d:"M5 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"}],["path",{d:"M14.33 22h-.09a.35.35 0 0 1-.24-.32v-10a.34.34 0 0 1 .33-.34c.08 0 .15.03.21.08l7.34 6a.33.33 0 0 1-.21.59h-4.49l-2.57 3.85a.35.35 0 0 1-.28.14v0z"}]]],Uc=["svg",h,[["path",{d:"M7 22a5 5 0 0 1-2-4"}],["path",{d:"M3.3 14A6.8 6.8 0 0 1 2 10c0-4.4 4.5-8 10-8s10 3.6 10 8-4.5 8-10 8a12 12 0 0 1-5-1"}],["path",{d:"M5 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"}]]],Gc=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M18 13a6 6 0 0 1-6 5 6 6 0 0 1-6-5h12Z"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9"}]]],Ec=["svg",h,[["polygon",{points:"12 2 2 7 12 12 22 7 12 2"}],["polyline",{points:"2 17 12 22 22 17"}],["polyline",{points:"2 12 12 17 22 12"}]]],Wc=["svg",h,[["rect",{width:"7",height:"9",x:"3",y:"3"}],["rect",{width:"7",height:"5",x:"14",y:"3"}],["rect",{width:"7",height:"9",x:"14",y:"12"}],["rect",{width:"7",height:"5",x:"3",y:"16"}]]],Ic=["svg",h,[["rect",{width:"7",height:"7",x:"3",y:"3"}],["rect",{width:"7",height:"7",x:"14",y:"3"}],["rect",{width:"7",height:"7",x:"14",y:"14"}],["rect",{width:"7",height:"7",x:"3",y:"14"}]]],qc=["svg",h,[["rect",{width:"7",height:"7",x:"3",y:"14"}],["rect",{width:"7",height:"7",x:"3",y:"3"}],["line",{x1:"14",x2:"21",y1:"4",y2:"4"}],["line",{x1:"14",x2:"21",y1:"9",y2:"9"}],["line",{x1:"14",x2:"21",y1:"15",y2:"15"}],["line",{x1:"14",x2:"21",y1:"20",y2:"20"}]]],Nc=["svg",h,[["path",{d:"M21 3H3v7h18V3z"}],["path",{d:"M21 14h-5v7h5v-7z"}],["path",{d:"M12 14H3v7h9v-7z"}]]],Xc=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["line",{x1:"3",x2:"21",y1:"9",y2:"9"}],["line",{x1:"9",x2:"9",y1:"21",y2:"9"}]]],Jc=["svg",h,[["path",{d:"M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z"}],["path",{d:"M2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12"}]]],jc=["svg",h,[["path",{d:"m16 6 4 14"}],["path",{d:"M12 6v14"}],["path",{d:"M8 8v12"}],["path",{d:"M4 4v16"}]]],Kc=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["circle",{cx:"12",cy:"12",r:"4"}],["line",{x1:"4.93",x2:"9.17",y1:"4.93",y2:"9.17"}],["line",{x1:"14.83",x2:"19.07",y1:"14.83",y2:"19.07"}],["line",{x1:"14.83",x2:"19.07",y1:"9.17",y2:"4.93"}],["line",{x1:"14.83",x2:"18.36",y1:"9.17",y2:"5.64"}],["line",{x1:"4.93",x2:"9.17",y1:"19.07",y2:"14.83"}]]],Qc=["svg",h,[["path",{d:"M9 18h6"}],["path",{d:"M10 22h4"}],["path",{d:"m2 2 20 20"}],["path",{d:"M9 2.804A6 6 0 0 1 18 8a4.65 4.65 0 0 1-1.03 3"}],["path",{d:"M8.91 14a4.61 4.61 0 0 0-1.41-2.5C6.23 10.23 6 9 6 8a6 6 0 0 1 .084-1"}]]],_c=["svg",h,[["line",{x1:"9",x2:"15",y1:"18",y2:"18"}],["line",{x1:"10",x2:"14",y1:"22",y2:"22"}],["path",{d:"M15.09 14c.18-.98.65-1.74 1.41-2.5A4.65 4.65 0 0 0 18 8 6 6 0 0 0 6 8c0 1 .23 2.23 1.5 3.5A4.61 4.61 0 0 1 8.91 14"}]]],Yc=["svg",h,[["path",{d:"M3 3v18h18"}],["path",{d:"m19 9-5 5-4-4-3 3"}]]],a6=["svg",h,[["path",{d:"M9 17H7A5 5 0 0 1 7 7"}],["path",{d:"M15 7h2a5 5 0 0 1 4 8"}],["line",{x1:"8",x2:"12",y1:"12",y2:"12"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],h6=["svg",h,[["path",{d:"M9 17H7A5 5 0 0 1 7 7h2"}],["path",{d:"M15 7h2a5 5 0 1 1 0 10h-2"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12"}]]],t6=["svg",h,[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"}]]],c6=["svg",h,[["path",{d:"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"}],["rect",{width:"4",height:"12",x:"2",y:"9"}],["circle",{cx:"4",cy:"4",r:"2"}]]],d6=["svg",h,[["line",{x1:"10",x2:"21",y1:"6",y2:"6"}],["line",{x1:"10",x2:"21",y1:"12",y2:"12"}],["line",{x1:"10",x2:"21",y1:"18",y2:"18"}],["polyline",{points:"3 6 4 7 6 5"}],["polyline",{points:"3 12 4 13 6 11"}],["polyline",{points:"3 18 4 19 6 17"}]]],n6=["svg",h,[["path",{d:"M16 12H3"}],["path",{d:"M16 6H3"}],["path",{d:"M10 18H3"}],["path",{d:"M21 6v10a2 2 0 0 1-2 2h-4"}],["path",{d:"m16 16-2 2 2 2"}]]],i6=["svg",h,[["path",{d:"M11 12H3"}],["path",{d:"M16 6H3"}],["path",{d:"M16 18H3"}],["path",{d:"M21 12h-6"}]]],l6=["svg",h,[["path",{d:"M21 15V6"}],["path",{d:"M18.5 18a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z"}],["path",{d:"M12 12H3"}],["path",{d:"M16 6H3"}],["path",{d:"M12 18H3"}]]],p6=["svg",h,[["line",{x1:"10",x2:"21",y1:"6",y2:"6"}],["line",{x1:"10",x2:"21",y1:"12",y2:"12"}],["line",{x1:"10",x2:"21",y1:"18",y2:"18"}],["path",{d:"M4 6h1v4"}],["path",{d:"M4 10h2"}],["path",{d:"M6 18H4c0-1 2-2 2-3s-1-1.5-2-1"}]]],e6=["svg",h,[["path",{d:"M11 12H3"}],["path",{d:"M16 6H3"}],["path",{d:"M16 18H3"}],["path",{d:"M18 9v6"}],["path",{d:"M21 12h-6"}]]],M6=["svg",h,[["path",{d:"M16 12H3"}],["path",{d:"M16 18H3"}],["path",{d:"M10 6H3"}],["path",{d:"M21 18V8a2 2 0 0 0-2-2h-5"}],["path",{d:"m16 8-2-2 2-2"}]]],v6=["svg",h,[["path",{d:"M21 12h-8"}],["path",{d:"M21 6H8"}],["path",{d:"M21 18h-8"}],["path",{d:"M3 6v4c0 1.1.9 2 2 2h3"}],["path",{d:"M3 10v6c0 1.1.9 2 2 2h3"}]]],o6=["svg",h,[["path",{d:"M12 12H3"}],["path",{d:"M16 6H3"}],["path",{d:"M12 18H3"}],["path",{d:"m16 12 5 3-5 3v-6Z"}]]],y6=["svg",h,[["path",{d:"M11 12H3"}],["path",{d:"M16 6H3"}],["path",{d:"M16 18H3"}],["path",{d:"m19 10-4 4"}],["path",{d:"m15 10 4 4"}]]],s6=["svg",h,[["line",{x1:"8",x2:"21",y1:"6",y2:"6"}],["line",{x1:"8",x2:"21",y1:"12",y2:"12"}],["line",{x1:"8",x2:"21",y1:"18",y2:"18"}],["line",{x1:"3",x2:"3.01",y1:"6",y2:"6"}],["line",{x1:"3",x2:"3.01",y1:"12",y2:"12"}],["line",{x1:"3",x2:"3.01",y1:"18",y2:"18"}]]],g6=["svg",h,[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56"}]]],r6=["svg",h,[["line",{x1:"12",x2:"12",y1:"2",y2:"6"}],["line",{x1:"12",x2:"12",y1:"18",y2:"22"}],["line",{x1:"4.93",x2:"7.76",y1:"4.93",y2:"7.76"}],["line",{x1:"16.24",x2:"19.07",y1:"16.24",y2:"19.07"}],["line",{x1:"2",x2:"6",y1:"12",y2:"12"}],["line",{x1:"18",x2:"22",y1:"12",y2:"12"}],["line",{x1:"4.93",x2:"7.76",y1:"19.07",y2:"16.24"}],["line",{x1:"16.24",x2:"19.07",y1:"7.76",y2:"4.93"}]]],$6=["svg",h,[["line",{x1:"2",x2:"5",y1:"12",y2:"12"}],["line",{x1:"19",x2:"22",y1:"12",y2:"12"}],["line",{x1:"12",x2:"12",y1:"2",y2:"5"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22"}],["circle",{cx:"12",cy:"12",r:"7"}],["circle",{cx:"12",cy:"12",r:"3"}]]],m6=["svg",h,[["line",{x1:"2",x2:"5",y1:"12",y2:"12"}],["line",{x1:"19",x2:"22",y1:"12",y2:"12"}],["line",{x1:"12",x2:"12",y1:"2",y2:"5"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22"}],["path",{d:"M7.11 7.11C5.83 8.39 5 10.1 5 12c0 3.87 3.13 7 7 7 1.9 0 3.61-.83 4.89-2.11"}],["path",{d:"M18.71 13.96c.19-.63.29-1.29.29-1.96 0-3.87-3.13-7-7-7-.67 0-1.33.1-1.96.29"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],x6=["svg",h,[["line",{x1:"2",x2:"5",y1:"12",y2:"12"}],["line",{x1:"19",x2:"22",y1:"12",y2:"12"}],["line",{x1:"12",x2:"12",y1:"2",y2:"5"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22"}],["circle",{cx:"12",cy:"12",r:"7"}]]],H6=["svg",h,[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4"}]]],C6=["svg",h,[["path",{d:"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4"}],["polyline",{points:"10 17 15 12 10 7"}],["line",{x1:"15",x2:"3",y1:"12",y2:"12"}]]],V6=["svg",h,[["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"}],["polyline",{points:"16 17 21 12 16 7"}],["line",{x1:"21",x2:"9",y1:"12",y2:"12"}]]],u6=["svg",h,[["path",{d:"M6 20h0a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h0"}],["path",{d:"M8 18V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v14"}],["path",{d:"M10 20h4"}],["circle",{cx:"16",cy:"20",r:"2"}],["circle",{cx:"8",cy:"20",r:"2"}]]],A6=["svg",h,[["path",{d:"m6 15-4-4 6.75-6.77a7.79 7.79 0 0 1 11 11L13 22l-4-4 6.39-6.36a2.14 2.14 0 0 0-3-3L6 15"}],["path",{d:"m5 8 4 4"}],["path",{d:"m12 15 4 4"}]]],w6=["svg",h,[["path",{d:"M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"}],["path",{d:"m16 19 2 2 4-4"}]]],L6=["svg",h,[["path",{d:"M22 15V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"}],["path",{d:"M16 19h6"}]]],S6=["svg",h,[["path",{d:"M21.2 8.4c.5.38.8.97.8 1.6v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V10a2 2 0 0 1 .8-1.6l8-6a2 2 0 0 1 2.4 0l8 6Z"}],["path",{d:"m22 10-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 10"}]]],f6=["svg",h,[["path",{d:"M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"}],["path",{d:"M19 16v6"}],["path",{d:"M16 19h6"}]]],k6=["svg",h,[["path",{d:"M22 10.5V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h12.5"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"}],["path",{d:"M18 15.28c.2-.4.5-.8.9-1a2.1 2.1 0 0 1 2.6.4c.3.4.5.8.5 1.3 0 1.3-2 2-2 2"}],["path",{d:"M20 22v.01"}]]],F6=["svg",h,[["path",{d:"M22 12.5V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h7.5"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"}],["path",{d:"M18 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6v0Z"}],["circle",{cx:"18",cy:"18",r:"3"}],["path",{d:"m22 22-1.5-1.5"}]]],Z6=["svg",h,[["path",{d:"M22 10.5V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h12.5"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"}],["path",{d:"M20 14v4"}],["path",{d:"M20 22v.01"}]]],z6=["svg",h,[["path",{d:"M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h9"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"}],["path",{d:"m17 17 4 4"}],["path",{d:"m21 17-4 4"}]]],B6=["svg",h,[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"}]]],P6=["svg",h,[["path",{d:"M22 17a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9.5C2 7 4 5 6.5 5H18c2.2 0 4 1.8 4 4v8Z"}],["polyline",{points:"15,9 18,9 18,11"}],["path",{d:"M6.5 5C9 5 11 7 11 9.5V17a2 2 0 0 1-2 2v0"}],["line",{x1:"6",x2:"7",y1:"10",y2:"10"}]]],D6=["svg",h,[["rect",{width:"16",height:"13",x:"6",y:"4",rx:"2"}],["path",{d:"m22 7-7.1 3.78c-.57.3-1.23.3-1.8 0L6 7"}],["path",{d:"M2 8v11c0 1.1.9 2 2 2h14"}]]],b6=["svg",h,[["path",{d:"M5.43 5.43A8.06 8.06 0 0 0 4 10c0 6 8 12 8 12a29.94 29.94 0 0 0 5-5"}],["path",{d:"M19.18 13.52A8.66 8.66 0 0 0 20 10a8 8 0 0 0-8-8 7.88 7.88 0 0 0-3.52.82"}],["path",{d:"M9.13 9.13A2.78 2.78 0 0 0 9 10a3 3 0 0 0 3 3 2.78 2.78 0 0 0 .87-.13"}],["path",{d:"M14.9 9.25a3 3 0 0 0-2.15-2.16"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],O6=["svg",h,[["path",{d:"M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z"}],["circle",{cx:"12",cy:"10",r:"3"}]]],R6=["svg",h,[["polygon",{points:"3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21"}],["line",{x1:"9",x2:"9",y1:"3",y2:"18"}],["line",{x1:"15",x2:"15",y1:"6",y2:"21"}]]],T6=["svg",h,[["path",{d:"M8 22h8"}],["path",{d:"M12 11v11"}],["path",{d:"m19 3-7 8-7-8Z"}]]],U6=["svg",h,[["polyline",{points:"15 3 21 3 21 9"}],["polyline",{points:"9 21 3 21 3 15"}],["line",{x1:"21",x2:"14",y1:"3",y2:"10"}],["line",{x1:"3",x2:"10",y1:"21",y2:"14"}]]],G6=["svg",h,[["path",{d:"M8 3H5a2 2 0 0 0-2 2v3"}],["path",{d:"M21 8V5a2 2 0 0 0-2-2h-3"}],["path",{d:"M3 16v3a2 2 0 0 0 2 2h3"}],["path",{d:"M16 21h3a2 2 0 0 0 2-2v-3"}]]],E6=["svg",h,[["path",{d:"M7.21 15 2.66 7.14a2 2 0 0 1 .13-2.2L4.4 2.8A2 2 0 0 1 6 2h12a2 2 0 0 1 1.6.8l1.6 2.14a2 2 0 0 1 .14 2.2L16.79 15"}],["path",{d:"M11 12 5.12 2.2"}],["path",{d:"m13 12 5.88-9.8"}],["path",{d:"M8 7h8"}],["circle",{cx:"12",cy:"17",r:"5"}],["path",{d:"M12 18v-2h-.5"}]]],W6=["svg",h,[["path",{d:"M9.26 9.26 3 11v3l14.14 3.14"}],["path",{d:"M21 15.34V6l-7.31 2.03"}],["path",{d:"M11.6 16.8a3 3 0 1 1-5.8-1.6"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],I6=["svg",h,[["path",{d:"m3 11 18-5v12L3 14v-3z"}],["path",{d:"M11.6 16.8a3 3 0 1 1-5.8-1.6"}]]],q6=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["line",{x1:"8",x2:"16",y1:"15",y2:"15"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9"}]]],N6=["svg",h,[["line",{x1:"4",x2:"20",y1:"12",y2:"12"}],["line",{x1:"4",x2:"20",y1:"6",y2:"6"}],["line",{x1:"4",x2:"20",y1:"18",y2:"18"}]]],X6=["svg",h,[["path",{d:"m3 21 1.9-5.7a8.5 8.5 0 1 1 3.8 3.8z"}]]],J6=["svg",h,[["path",{d:"M3 6V5c0-1.1.9-2 2-2h2"}],["path",{d:"M11 3h3"}],["path",{d:"M18 3h1c1.1 0 2 .9 2 2"}],["path",{d:"M21 9v2"}],["path",{d:"M21 15c0 1.1-.9 2-2 2h-1"}],["path",{d:"M14 17h-3"}],["path",{d:"m7 17-4 4v-5"}],["path",{d:"M3 12v-2"}]]],j6=["svg",h,[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"}],["line",{x1:"9",x2:"15",y1:"10",y2:"10"}],["line",{x1:"12",x2:"12",y1:"7",y2:"13"}]]],K6=["svg",h,[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"}]]],Q6=["svg",h,[["path",{d:"M14 9a2 2 0 0 1-2 2H6l-4 4V4c0-1.1.9-2 2-2h8a2 2 0 0 1 2 2v5Z"}],["path",{d:"M18 9h2a2 2 0 0 1 2 2v11l-4-4h-6a2 2 0 0 1-2-2v-1"}]]],_6=["svg",h,[["path",{d:"m12 8-9.04 9.06a2.82 2.82 0 1 0 3.98 3.98L16 12"}],["circle",{cx:"17",cy:"7",r:"5"}]]],Y6=["svg",h,[["line",{x1:"2",x2:"22",y1:"2",y2:"22"}],["path",{d:"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2"}],["path",{d:"M5 10v2a7 7 0 0 0 12 5"}],["path",{d:"M15 9.34V5a3 3 0 0 0-5.68-1.33"}],["path",{d:"M9 9v3a3 3 0 0 0 5.12 2.12"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22"}]]],ad=["svg",h,[["path",{d:"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22"}]]],hd=["svg",h,[["path",{d:"M6 18h8"}],["path",{d:"M3 22h18"}],["path",{d:"M14 22a7 7 0 1 0 0-14h-1"}],["path",{d:"M9 14h2"}],["path",{d:"M8 6h4"}],["path",{d:"M13 10V6.5a.5.5 0 0 0-.5-.5.5.5 0 0 1-.5-.5V3a1 1 0 0 0-1-1H9a1 1 0 0 0-1 1v2.5a.5.5 0 0 1-.5.5.5.5 0 0 0-.5.5V10c0 1.1.9 2 2 2h2a2 2 0 0 0 2-2Z"}]]],td=["svg",h,[["rect",{width:"20",height:"15",x:"2",y:"4",rx:"2"}],["rect",{width:"8",height:"7",x:"6",y:"8",rx:"1"}],["path",{d:"M18 8v7"}],["path",{d:"M6 19v2"}],["path",{d:"M18 19v2"}]]],cd=["svg",h,[["path",{d:"M18 6H5a2 2 0 0 0-2 2v3a2 2 0 0 0 2 2h13l4-3.5L18 6Z"}],["path",{d:"M12 13v8"}],["path",{d:"M12 3v3"}]]],dd=["svg",h,[["path",{d:"M8 2h8"}],["path",{d:"M9 2v1.343M15 2v2.789a4 4 0 0 0 .672 2.219l.656.984a4 4 0 0 1 .672 2.22v1.131M7.8 7.8l-.128.192A4 4 0 0 0 7 10.212V20a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-3"}],["path",{d:"M7 15a6.47 6.47 0 0 1 5 0 6.472 6.472 0 0 0 3.435.435"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],nd=["svg",h,[["path",{d:"M8 2h8"}],["path",{d:"M9 2v2.789a4 4 0 0 1-.672 2.219l-.656.984A4 4 0 0 0 7 10.212V20a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-9.789a4 4 0 0 0-.672-2.219l-.656-.984A4 4 0 0 1 15 4.788V2"}],["path",{d:"M7 15a6.472 6.472 0 0 1 5 0 6.47 6.47 0 0 0 5 0"}]]],id=["svg",h,[["polyline",{points:"4 14 10 14 10 20"}],["polyline",{points:"20 10 14 10 14 4"}],["line",{x1:"14",x2:"21",y1:"10",y2:"3"}],["line",{x1:"3",x2:"10",y1:"21",y2:"14"}]]],ld=["svg",h,[["path",{d:"M8 3v3a2 2 0 0 1-2 2H3"}],["path",{d:"M21 8h-3a2 2 0 0 1-2-2V3"}],["path",{d:"M3 16h3a2 2 0 0 1 2 2v3"}],["path",{d:"M16 21v-3a2 2 0 0 1 2-2h3"}]]],pd=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12"}]]],ed=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12"}]]],Md=["svg",h,[["line",{x1:"5",x2:"19",y1:"12",y2:"12"}]]],vd=["svg",h,[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",ry:"2"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21"}],["path",{d:"M12 13V7"}],["path",{d:"m15 10-3 3-3-3"}]]],od=["svg",h,[["path",{d:"M17 17H4a2 2 0 0 1-2-2V5c0-1.5 1-2 1-2"}],["path",{d:"M22 15V5a2 2 0 0 0-2-2H9"}],["path",{d:"M8 21h8"}],["path",{d:"M12 17v4"}],["path",{d:"m2 2 20 20"}]]],yd=["svg",h,[["path",{d:"M18 8V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h8"}],["path",{d:"M10 19v-3.96 3.15"}],["path",{d:"M7 19h5"}],["rect",{width:"6",height:"10",x:"16",y:"12",rx:"2"}]]],sd=["svg",h,[["path",{d:"M5.5 20H8"}],["path",{d:"M17 9h.01"}],["rect",{width:"10",height:"16",x:"12",y:"4",rx:"2"}],["path",{d:"M8 6H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h4"}],["circle",{cx:"17",cy:"15",r:"1"}]]],gd=["svg",h,[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",ry:"2"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21"}],["path",{d:"M12 13V7"}],["path",{d:"m9 10 3-3 3 3"}]]],rd=["svg",h,[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",ry:"2"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21"}]]],$d=["svg",h,[["path",{d:"M12 3a6.364 6.364 0 0 0 9 9 9 9 0 1 1-9-9Z"}],["path",{d:"M19 3v4"}],["path",{d:"M21 5h-4"}]]],md=["svg",h,[["path",{d:"M12 3a6.364 6.364 0 0 0 9 9 9 9 0 1 1-9-9Z"}]]],xd=["svg",h,[["circle",{cx:"12",cy:"12",r:"1"}],["circle",{cx:"19",cy:"12",r:"1"}],["circle",{cx:"5",cy:"12",r:"1"}]]],Hd=["svg",h,[["circle",{cx:"12",cy:"12",r:"1"}],["circle",{cx:"12",cy:"5",r:"1"}],["circle",{cx:"12",cy:"19",r:"1"}]]],Cd=["svg",h,[["path",{d:"m8 3 4 8 5-5 5 15H2L8 3z"}],["path",{d:"M4.14 15.08c2.62-1.57 5.24-1.43 7.86.42 2.74 1.94 5.49 2 8.23.19"}]]],Vd=["svg",h,[["path",{d:"m8 3 4 8 5-5 5 15H2L8 3z"}]]],ud=["svg",h,[["path",{d:"m4 4 7.07 17 2.51-7.39L21 11.07z"}]]],Ad=["svg",h,[["path",{d:"m9 9 5 12 1.774-5.226L21 14 9 9z"}],["path",{d:"m16.071 16.071 4.243 4.243"}],["path",{d:"m7.188 2.239.777 2.897M5.136 7.965l-2.898-.777M13.95 4.05l-2.122 2.122m-5.657 5.656-2.12 2.122"}]]],wd=["svg",h,[["path",{d:"m3 3 7.07 16.97 2.51-7.39 7.39-2.51L3 3z"}],["path",{d:"m13 13 6 6"}]]],Ld=["svg",h,[["rect",{width:"12",height:"18",x:"6",y:"3",rx:"6"}],["path",{d:"M12 7v4"}]]],Sd=["svg",h,[["path",{d:"M5 3v16h16"}],["path",{d:"m5 19 6-6"}],["path",{d:"m2 6 3-3 3 3"}],["path",{d:"m18 16 3 3-3 3"}]]],fd=["svg",h,[["polyline",{points:"5 11 5 5 11 5"}],["polyline",{points:"19 13 19 19 13 19"}],["line",{x1:"5",x2:"19",y1:"5",y2:"19"}]]],kd=["svg",h,[["polyline",{points:"13 5 19 5 19 11"}],["polyline",{points:"11 19 5 19 5 13"}],["line",{x1:"19",x2:"5",y1:"5",y2:"19"}]]],Fd=["svg",h,[["polyline",{points:"18 8 22 12 18 16"}],["polyline",{points:"6 8 2 12 6 16"}],["line",{x1:"2",x2:"22",y1:"12",y2:"12"}]]],Zd=["svg",h,[["polyline",{points:"8 18 12 22 16 18"}],["polyline",{points:"8 6 12 2 16 6"}],["line",{x1:"12",x2:"12",y1:"2",y2:"22"}]]],zd=["svg",h,[["polyline",{points:"5 9 2 12 5 15"}],["polyline",{points:"9 5 12 2 15 5"}],["polyline",{points:"15 19 12 22 9 19"}],["polyline",{points:"19 9 22 12 19 15"}],["line",{x1:"2",x2:"22",y1:"12",y2:"12"}],["line",{x1:"12",x2:"12",y1:"2",y2:"22"}]]],Bd=["svg",h,[["circle",{cx:"8",cy:"18",r:"4"}],["path",{d:"M12 18V2l7 4"}]]],Pd=["svg",h,[["circle",{cx:"12",cy:"18",r:"4"}],["path",{d:"M16 18V2"}]]],Dd=["svg",h,[["path",{d:"M9 18V5l12-2v13"}],["path",{d:"m9 9 12-2"}],["circle",{cx:"6",cy:"18",r:"3"}],["circle",{cx:"18",cy:"16",r:"3"}]]],bd=["svg",h,[["path",{d:"M9 18V5l12-2v13"}],["circle",{cx:"6",cy:"18",r:"3"}],["circle",{cx:"18",cy:"16",r:"3"}]]],Od=["svg",h,[["path",{d:"M9.31 9.31 5 21l7-4 7 4-1.17-3.17"}],["path",{d:"M14.53 8.88 12 2l-1.17 3.17"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],Rd=["svg",h,[["polygon",{points:"12 2 19 21 12 17 5 21 12 2"}]]],Td=["svg",h,[["path",{d:"M8.43 8.43 3 11l8 2 2 8 2.57-5.43"}],["path",{d:"M17.39 11.73 22 2l-9.73 4.61"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],Ud=["svg",h,[["polygon",{points:"3 11 22 2 13 21 11 13 3 11"}]]],Gd=["svg",h,[["rect",{width:"6",height:"6",x:"9",y:"2"}],["rect",{width:"6",height:"6",x:"16",y:"16"}],["rect",{width:"6",height:"6",x:"2",y:"16"}],["path",{d:"M5 16v-4h14v4"}],["path",{d:"M12 12V8"}]]],Ed=["svg",h,[["path",{d:"M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Zm0 0a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2"}],["path",{d:"M18 14h-8"}],["path",{d:"M15 18h-5"}],["path",{d:"M10 6h8v4h-8V6Z"}]]],Wd=["svg",h,[["path",{d:"M6 8.32a7.43 7.43 0 0 1 0 7.36"}],["path",{d:"M9.46 6.21a11.76 11.76 0 0 1 0 11.58"}],["path",{d:"M12.91 4.1a15.91 15.91 0 0 1 .01 15.8"}],["path",{d:"M16.37 2a20.16 20.16 0 0 1 0 20"}]]],Id=["svg",h,[["path",{d:"M12 4V2"}],["path",{d:"M5 10v4a7.004 7.004 0 0 0 5.277 6.787c.412.104.802.292 1.102.592L12 22l.621-.621c.3-.3.69-.488 1.102-.592a7.01 7.01 0 0 0 4.125-2.939"}],["path",{d:"M19 10v3.343"}],["path",{d:"M12 12c-1.349-.573-1.905-1.005-2.5-2-.546.902-1.048 1.353-2.5 2-1.018-.644-1.46-1.08-2-2-1.028.71-1.69.918-3 1 1.081-1.048 1.757-2.03 2-3 .194-.776.84-1.551 1.79-2.21m11.654 5.997c.887-.457 1.28-.891 1.556-1.787 1.032.916 1.683 1.157 3 1-1.297-1.036-1.758-2.03-2-3-.5-2-4-4-8-4-.74 0-1.461.068-2.15.192"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],qd=["svg",h,[["path",{d:"M12 4V2"}],["path",{d:"M5 10v4a7.004 7.004 0 0 0 5.277 6.787c.412.104.802.292 1.102.592L12 22l.621-.621c.3-.3.69-.488 1.102-.592A7.003 7.003 0 0 0 19 14v-4"}],["path",{d:"M12 4C8 4 4.5 6 4 8c-.243.97-.919 1.952-2 3 1.31-.082 1.972-.29 3-1 .54.92.982 1.356 2 2 1.452-.647 1.954-1.098 2.5-2 .595.995 1.151 1.427 2.5 2 1.31-.621 1.862-1.058 2.5-2 .629.977 1.162 1.423 2.5 2 1.209-.548 1.68-.967 2-2 1.032.916 1.683 1.157 3 1-1.297-1.036-1.758-2.03-2-3-.5-2-4-4-8-4Z"}]]],Nd=["svg",h,[["polygon",{points:"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"}]]],Xd=["svg",h,[["path",{d:"M3 3h6l6 18h6"}],["path",{d:"M14 3h7"}]]],Jd=["svg",h,[["circle",{cx:"12",cy:"12",r:"3"}],["circle",{cx:"18",cy:"6",r:"2"}],["circle",{cx:"6",cy:"18",r:"2"}],["path",{d:"M12 20a8 8 0 0 0 6.82-12.17"}],["path",{d:"M12 4a8 8 0 0 0-6.82 12.17"}]]],jd=["svg",h,[["polyline",{points:"7 8 3 12 7 16"}],["line",{x1:"21",x2:"11",y1:"12",y2:"12"}],["line",{x1:"21",x2:"11",y1:"6",y2:"6"}],["line",{x1:"21",x2:"11",y1:"18",y2:"18"}]]],Kd=["svg",h,[["path",{d:"M3 9h18v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9Z"}],["path",{d:"m3 9 2.45-4.9A2 2 0 0 1 7.24 3h9.52a2 2 0 0 1 1.8 1.1L21 9"}],["path",{d:"M12 3v6"}]]],Qd=["svg",h,[["path",{d:"m16 16 2 2 4-4"}],["path",{d:"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14"}],["path",{d:"M16.5 9.4 7.55 4.24"}],["polyline",{points:"3.29 7 12 12 20.71 7"}],["line",{x1:"12",x2:"12",y1:"22",y2:"12"}]]],_d=["svg",h,[["path",{d:"M16 16h6"}],["path",{d:"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14"}],["path",{d:"M16.5 9.4 7.55 4.24"}],["polyline",{points:"3.29 7 12 12 20.71 7"}],["line",{x1:"12",x2:"12",y1:"22",y2:"12"}]]],Yd=["svg",h,[["path",{d:"M20.91 8.84 8.56 2.23a1.93 1.93 0 0 0-1.81 0L3.1 4.13a2.12 2.12 0 0 0-.05 3.69l12.22 6.93a2 2 0 0 0 1.94 0L21 12.51a2.12 2.12 0 0 0-.09-3.67Z"}],["path",{d:"m3.09 8.84 12.35-6.61a1.93 1.93 0 0 1 1.81 0l3.65 1.9a2.12 2.12 0 0 1 .1 3.69L8.73 14.75a2 2 0 0 1-1.94 0L3 12.51a2.12 2.12 0 0 1 .09-3.67Z"}],["line",{x1:"12",x2:"12",y1:"22",y2:"13"}],["path",{d:"M20 13.5v3.37a2.06 2.06 0 0 1-1.11 1.83l-6 3.08a1.93 1.93 0 0 1-1.78 0l-6-3.08A2.06 2.06 0 0 1 4 16.87V13.5"}]]],a8=["svg",h,[["path",{d:"M16 16h6"}],["path",{d:"M19 13v6"}],["path",{d:"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14"}],["path",{d:"M16.5 9.4 7.55 4.24"}],["polyline",{points:"3.29 7 12 12 20.71 7"}],["line",{x1:"12",x2:"12",y1:"22",y2:"12"}]]],h8=["svg",h,[["path",{d:"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14"}],["path",{d:"M16.5 9.4 7.55 4.24"}],["polyline",{points:"3.29 7 12 12 20.71 7"}],["line",{x1:"12",x2:"12",y1:"22",y2:"12"}],["circle",{cx:"18.5",cy:"15.5",r:"2.5"}],["path",{d:"M20.27 17.27 22 19"}]]],t8=["svg",h,[["path",{d:"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14"}],["path",{d:"M16.5 9.4 7.55 4.24"}],["polyline",{points:"3.29 7 12 12 20.71 7"}],["line",{x1:"12",x2:"12",y1:"22",y2:"12"}],["path",{d:"m17 13 5 5m-5 0 5-5"}]]],c8=["svg",h,[["path",{d:"M16.5 9.4 7.55 4.24"}],["path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"}],["polyline",{points:"3.29 7 12 12 20.71 7"}],["line",{x1:"12",x2:"12",y1:"22",y2:"12"}]]],d8=["svg",h,[["path",{d:"m19 11-8-8-8.6 8.6a2 2 0 0 0 0 2.8l5.2 5.2c.8.8 2 .8 2.8 0L19 11Z"}],["path",{d:"m5 2 5 5"}],["path",{d:"M2 13h15"}],["path",{d:"M22 20a2 2 0 1 1-4 0c0-1.6 1.7-2.4 2-4 .3 1.6 2 2.4 2 4Z"}]]],n8=["svg",h,[["path",{d:"M14 19.9V16h3a2 2 0 0 0 2-2v-2H5v2c0 1.1.9 2 2 2h3v3.9a2 2 0 1 0 4 0Z"}],["path",{d:"M6 12V2h12v10"}],["path",{d:"M14 2v4"}],["path",{d:"M10 2v2"}]]],i8=["svg",h,[["path",{d:"M18.37 2.63 14 7l-1.59-1.59a2 2 0 0 0-2.82 0L8 7l9 9 1.59-1.59a2 2 0 0 0 0-2.82L17 10l4.37-4.37a2.12 2.12 0 1 0-3-3Z"}],["path",{d:"M9 8c-2 3-4 3.5-7 4l8 10c2-1 6-5 6-7"}],["path",{d:"M14.5 17.5 4.5 15"}]]],l8=["svg",h,[["circle",{cx:"13.5",cy:"6.5",r:".5"}],["circle",{cx:"17.5",cy:"10.5",r:".5"}],["circle",{cx:"8.5",cy:"7.5",r:".5"}],["circle",{cx:"6.5",cy:"12.5",r:".5"}],["path",{d:"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z"}]]],p8=["svg",h,[["path",{d:"M13 8c0-2.76-2.46-5-5.5-5S2 5.24 2 8h2l1-1 1 1h4"}],["path",{d:"M13 7.14A5.82 5.82 0 0 1 16.5 6c3.04 0 5.5 2.24 5.5 5h-3l-1-1-1 1h-3"}],["path",{d:"M5.89 9.71c-2.15 2.15-2.3 5.47-.35 7.43l4.24-4.25.7-.7.71-.71 2.12-2.12c-1.95-1.96-5.27-1.8-7.42.35z"}],["path",{d:"M11 15.5c.5 2.5-.17 4.5-1 6.5h4c2-5.5-.5-12-1-14"}]]],e8=["svg",h,[["path",{d:"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48"}]]],M8=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"m5 5 14 14"}],["path",{d:"M13 13a3 3 0 1 0 0-6H9v2"}],["path",{d:"M9 17v-2.34"}]]],v8=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M9 17V7h4a3 3 0 0 1 0 6H9"}]]],o8=["svg",h,[["path",{d:"M3.59 3.59A2 2 0 0 1 5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1-.59 1.41"}],["path",{d:"M3 8.66V19c0 1.1.9 2 2 2h10.34"}],["path",{d:"m2 2 20 20"}],["path",{d:"M13 13a3 3 0 1 0 0-6H9v2"}],["path",{d:"M9 17v-2.34"}]]],y8=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}],["path",{d:"M9 17V7h4a3 3 0 0 1 0 6H9"}]]],s8=["svg",h,[["path",{d:"M5.8 11.3 2 22l10.7-3.79"}],["path",{d:"M4 3h.01"}],["path",{d:"M22 8h.01"}],["path",{d:"M15 2h.01"}],["path",{d:"M22 20h.01"}],["path",{d:"m22 2-2.24.75a2.9 2.9 0 0 0-1.96 3.12v0c.1.86-.57 1.63-1.45 1.63h-.38c-.86 0-1.6.6-1.76 1.44L14 10"}],["path",{d:"m22 13-.82-.33c-.86-.34-1.82.2-1.98 1.11v0c-.11.7-.72 1.22-1.43 1.22H17"}],["path",{d:"m11 2 .33.82c.34.86-.2 1.82-1.11 1.98v0C9.52 4.9 9 5.52 9 6.23V7"}],["path",{d:"M11 13c1.93 1.93 2.83 4.17 2 5-.83.83-3.07-.07-5-2-1.93-1.93-2.83-4.17-2-5 .83-.83 3.07.07 5 2Z"}]]],g8=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["line",{x1:"10",x2:"10",y1:"15",y2:"9"}],["line",{x1:"14",x2:"14",y1:"15",y2:"9"}]]],r8=["svg",h,[["path",{d:"M10 15V9"}],["path",{d:"M14 15V9"}],["path",{d:"M7.714 2h8.572L22 7.714v8.572L16.286 22H7.714L2 16.286V7.714L7.714 2z"}]]],$8=["svg",h,[["rect",{width:"4",height:"16",x:"6",y:"4"}],["rect",{width:"4",height:"16",x:"14",y:"4"}]]],m8=["svg",h,[["path",{d:"m12 19 7-7 3 3-7 7-3-3z"}],["path",{d:"m18 13-1.5-7.5L2 2l3.5 14.5L13 18l5-5z"}],["path",{d:"m2 2 7.586 7.586"}],["circle",{cx:"11",cy:"11",r:"2"}]]],x8=["svg",h,[["line",{x1:"18",x2:"22",y1:"2",y2:"6"}],["path",{d:"M7.5 20.5 19 9l-4-4L3.5 16.5 2 22z"}]]],H8=["svg",h,[["line",{x1:"19",x2:"5",y1:"5",y2:"19"}],["circle",{cx:"6.5",cy:"6.5",r:"2.5"}],["circle",{cx:"17.5",cy:"17.5",r:"2.5"}]]],C8=["svg",h,[["circle",{cx:"12",cy:"5",r:"1"}],["path",{d:"m9 20 3-6 3 6"}],["path",{d:"m6 8 6 2 6-2"}],["path",{d:"M12 10v4"}]]],V8=["svg",h,[["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"}],["path",{d:"M14.05 2a9 9 0 0 1 8 7.94"}],["path",{d:"M14.05 6A5 5 0 0 1 18 10"}]]],u8=["svg",h,[["polyline",{points:"18 2 22 6 18 10"}],["line",{x1:"14",x2:"22",y1:"6",y2:"6"}],["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"}]]],A8=["svg",h,[["polyline",{points:"16 2 16 8 22 8"}],["line",{x1:"22",x2:"16",y1:"2",y2:"8"}],["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"}]]],w8=["svg",h,[["line",{x1:"22",x2:"16",y1:"2",y2:"8"}],["line",{x1:"16",x2:"22",y1:"2",y2:"8"}],["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"}]]],L8=["svg",h,[["path",{d:"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91"}],["line",{x1:"22",x2:"2",y1:"2",y2:"22"}]]],S8=["svg",h,[["polyline",{points:"22 8 22 2 16 2"}],["line",{x1:"16",x2:"22",y1:"8",y2:"2"}],["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"}]]],f8=["svg",h,[["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"}]]],k8=["svg",h,[["path",{d:"M21 9V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v10c0 1.1.9 2 2 2h4"}],["rect",{width:"10",height:"7",x:"12",y:"13",rx:"2"}]]],F8=["svg",h,[["path",{d:"M8 4.5v5H3m-1-6 6 6m13 0v-3c0-1.16-.84-2-2-2h-7m-9 9v2c0 1.05.95 2 2 2h3"}],["rect",{width:"10",height:"7",x:"12",y:"13.5",ry:"2"}]]],Z8=["svg",h,[["path",{d:"M21.21 15.89A10 10 0 1 1 8 2.83"}],["path",{d:"M22 12A10 10 0 0 0 12 2v10z"}]]],z8=["svg",h,[["path",{d:"M19 5c-1.5 0-2.8 1.4-3 2-3.5-1.5-11-.3-11 5 0 1.8 0 3 2 4.5V20h4v-2h3v2h4v-4c1-.5 1.7-1 2-2h2v-4h-2c0-1-.5-1.5-1-2h0V5z"}],["path",{d:"M2 9v1c0 1.1.9 2 2 2h1"}],["path",{d:"M16 11h0"}]]],B8=["svg",h,[["path",{d:"M13 4v16"}],["path",{d:"M17 4v16"}],["path",{d:"M19 4H9.5a4.5 4.5 0 0 0 0 9H13"}]]],P8=["svg",h,[["path",{d:"m10.5 20.5 10-10a4.95 4.95 0 1 0-7-7l-10 10a4.95 4.95 0 1 0 7 7Z"}],["path",{d:"m8.5 8.5 7 7"}]]],D8=["svg",h,[["line",{x1:"2",x2:"22",y1:"2",y2:"22"}],["line",{x1:"12",x2:"12",y1:"17",y2:"22"}],["path",{d:"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h12"}],["path",{d:"M15 9.34V6h1a2 2 0 0 0 0-4H7.89"}]]],b8=["svg",h,[["line",{x1:"12",x2:"12",y1:"17",y2:"22"}],["path",{d:"M5 17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4h1v4.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24Z"}]]],O8=["svg",h,[["path",{d:"m2 22 1-1h3l9-9"}],["path",{d:"M3 21v-3l9-9"}],["path",{d:"m15 6 3.4-3.4a2.1 2.1 0 1 1 3 3L18 9l.4.4a2.1 2.1 0 1 1-3 3l-3.8-3.8a2.1 2.1 0 1 1 3-3l.4.4Z"}]]],R8=["svg",h,[["path",{d:"M15 11h.01"}],["path",{d:"M11 15h.01"}],["path",{d:"M16 16h.01"}],["path",{d:"m2 16 20 6-6-20A20 20 0 0 0 2 16"}],["path",{d:"M5.71 17.11a17.04 17.04 0 0 1 11.4-11.4"}]]],T8=["svg",h,[["path",{d:"M2 22h20"}],["path",{d:"M3.77 10.77 2 9l2-4.5 1.1.55c.55.28.9.84.9 1.45s.35 1.17.9 1.45L8 8.5l3-6 1.05.53a2 2 0 0 1 1.09 1.52l.72 5.4a2 2 0 0 0 1.09 1.52l4.4 2.2c.42.22.78.55 1.01.96l.6 1.03c.49.88-.06 1.98-1.06 2.1l-1.18.15c-.47.06-.95-.02-1.37-.24L4.29 11.15a2 2 0 0 1-.52-.38Z"}]]],U8=["svg",h,[["path",{d:"M2 22h20"}],["path",{d:"M6.36 17.4 4 17l-2-4 1.1-.55a2 2 0 0 1 1.8 0l.17.1a2 2 0 0 0 1.8 0L8 12 5 6l.9-.45a2 2 0 0 1 2.09.2l4.02 3a2 2 0 0 0 2.1.2l4.19-2.06a2.41 2.41 0 0 1 1.73-.17L21 7a1.4 1.4 0 0 1 .87 1.99l-.38.76c-.23.46-.6.84-1.07 1.08L7.58 17.2a2 2 0 0 1-1.22.18Z"}]]],G8=["svg",h,[["path",{d:"M17.8 19.2 16 11l3.5-3.5C21 6 21.5 4 21 3c-1-.5-3 0-4.5 1.5L13 8 4.8 6.2c-.5-.1-.9.1-1.1.5l-.3.5c-.2.5-.1 1 .3 1.3L9 12l-2 3H4l-1 1 3 2 2 3 1-1v-3l3-2 3.5 5.3c.3.4.8.5 1.3.3l.5-.2c.4-.3.6-.7.5-1.2z"}]]],E8=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["polygon",{points:"10 8 16 12 10 16 10 8"}]]],W8=["svg",h,[["polygon",{points:"5 3 19 12 5 21 5 3"}]]],I8=["svg",h,[["path",{d:"M9 2v6"}],["path",{d:"M15 2v6"}],["path",{d:"M12 17v5"}],["path",{d:"M5 8h14"}],["path",{d:"M6 11V8h12v3a6 6 0 1 1-12 0v0Z"}]]],q8=["svg",h,[["path",{d:"m13 2-2 2.5h3L12 7"}],["path",{d:"M12 22v-3"}],["path",{d:"M10 13v-2.5"}],["path",{d:"M10 12.5v-2"}],["path",{d:"M14 12.5v-2"}],["path",{d:"M16 15a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2v-2z"}]]],N8=["svg",h,[["path",{d:"M12 22v-5"}],["path",{d:"M9 7V2"}],["path",{d:"M15 7V2"}],["path",{d:"M6 13V8h12v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4Z"}]]],X8=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["line",{x1:"12",x2:"12",y1:"8",y2:"16"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12"}]]],J8=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["line",{x1:"12",x2:"12",y1:"8",y2:"16"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12"}]]],j8=["svg",h,[["line",{x1:"12",x2:"12",y1:"5",y2:"19"}],["line",{x1:"5",x2:"19",y1:"12",y2:"12"}]]],K8=["svg",h,[["path",{d:"M4 3h16a2 2 0 0 1 2 2v6a10 10 0 0 1-10 10A10 10 0 0 1 2 11V5a2 2 0 0 1 2-2z"}],["polyline",{points:"8 10 12 14 16 10"}]]],Q8=["svg",h,[["circle",{cx:"12",cy:"11",r:"1"}],["path",{d:"M11 17a1 1 0 0 1 2 0c0 .5-.34 3-.5 4.5a.5.5 0 0 1-1 0c-.16-1.5-.5-4-.5-4.5Z"}],["path",{d:"M8 14a5 5 0 1 1 8 0"}],["path",{d:"M17 18.5a9 9 0 1 0-10 0"}]]],_8=["svg",h,[["path",{d:"M22 14a8 8 0 0 1-8 8"}],["path",{d:"M18 11v-1a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v0"}],["path",{d:"M14 10V9a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v1"}],["path",{d:"M10 9.5V4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v10"}],["path",{d:"M18 11a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15"}]]],Y8=["svg",h,[["path",{d:"M18 7c0-5.333-8-5.333-8 0"}],["path",{d:"M10 7v14"}],["path",{d:"M6 21h12"}],["path",{d:"M6 13h10"}]]],a7=["svg",h,[["path",{d:"M18.36 6.64A9 9 0 0 1 20.77 15"}],["path",{d:"M6.16 6.16a9 9 0 1 0 12.68 12.68"}],["path",{d:"M12 2v4"}],["path",{d:"m2 2 20 20"}]]],h7=["svg",h,[["path",{d:"M18.36 6.64a9 9 0 1 1-12.73 0"}],["line",{x1:"12",x2:"12",y1:"2",y2:"12"}]]],t7=["svg",h,[["polyline",{points:"6 9 6 2 18 2 18 9"}],["path",{d:"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"}],["rect",{width:"12",height:"8",x:"6",y:"14"}]]],c7=["svg",h,[["path",{d:"M19.439 7.85c-.049.322.059.648.289.878l1.568 1.568c.47.47.706 1.087.706 1.704s-.235 1.233-.706 1.704l-1.611 1.611a.98.98 0 0 1-.837.276c-.47-.07-.802-.48-.968-.925a2.501 2.501 0 1 0-3.214 3.214c.446.166.855.497.925.968a.979.979 0 0 1-.276.837l-1.61 1.61a2.404 2.404 0 0 1-1.705.707 2.402 2.402 0 0 1-1.704-.706l-1.568-1.568a1.026 1.026 0 0 0-.877-.29c-.493.074-.84.504-1.02.968a2.5 2.5 0 1 1-3.237-3.237c.464-.18.894-.527.967-1.02a1.026 1.026 0 0 0-.289-.877l-1.568-1.568A2.402 2.402 0 0 1 1.998 12c0-.617.236-1.234.706-1.704L4.23 8.77c.24-.24.581-.353.917-.303.515.077.877.528 1.073 1.01a2.5 2.5 0 1 0 3.259-3.259c-.482-.196-.933-.558-1.01-1.073-.05-.336.062-.676.303-.917l1.525-1.525A2.402 2.402 0 0 1 12 1.998c.617 0 1.234.236 1.704.706l1.568 1.568c.23.23.556.338.877.29.493-.074.84-.504 1.02-.968a2.5 2.5 0 1 1 3.237 3.237c-.464.18-.894.527-.967 1.02Z"}]]],d7=["svg",h,[["rect",{width:"5",height:"5",x:"3",y:"3",rx:"1"}],["rect",{width:"5",height:"5",x:"16",y:"3",rx:"1"}],["rect",{width:"5",height:"5",x:"3",y:"16",rx:"1"}],["path",{d:"M21 16h-3a2 2 0 0 0-2 2v3"}],["path",{d:"M21 21v.01"}],["path",{d:"M12 7v3a2 2 0 0 1-2 2H7"}],["path",{d:"M3 12h.01"}],["path",{d:"M12 3h.01"}],["path",{d:"M12 16v.01"}],["path",{d:"M16 12h1"}],["path",{d:"M21 12v.01"}],["path",{d:"M12 21v-1"}]]],n7=["svg",h,[["path",{d:"M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z"}],["path",{d:"M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z"}]]],i7=["svg",h,[["path",{d:"M5 16v2"}],["path",{d:"M19 16v2"}],["rect",{width:"20",height:"8",x:"2",y:"8",rx:"2"}],["path",{d:"M18 12h0"}]]],l7=["svg",h,[["path",{d:"M4.9 16.1C1 12.2 1 5.8 4.9 1.9"}],["path",{d:"M7.8 4.7a6.14 6.14 0 0 0-.8 7.5"}],["circle",{cx:"12",cy:"9",r:"2"}],["path",{d:"M16.2 4.8c2 2 2.26 5.11.8 7.47"}],["path",{d:"M19.1 1.9a9.96 9.96 0 0 1 0 14.1"}],["path",{d:"M9.5 18h5"}],["path",{d:"m8 22 4-11 4 11"}]]],p7=["svg",h,[["path",{d:"M4.9 19.1C1 15.2 1 8.8 4.9 4.9"}],["path",{d:"M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5"}],["circle",{cx:"12",cy:"12",r:"2"}],["path",{d:"M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5"}],["path",{d:"M19.1 4.9C23 8.8 23 15.1 19.1 19"}]]],e7=["svg",h,[["path",{d:"M14 16.5v-.77a2.73 2.73 0 0 1 3.27-2.68l3.02.6a1.4 1.4 0 0 0 1.5-2.08l-1.63-2.8a3 3 0 1 0-3.35-4.82"}],["path",{d:"M16 9h-.01"}],["path",{d:"M17 5.12V5a3 3 0 1 0-5.24 2h-1A6.77 6.77 0 0 0 4 13.77C4 16.1 5.9 18 8.23 18H9"}],["path",{d:"M13 22H4a2 2 0 1 1 0-4h12"}],["path",{d:"M13.67 18c.21-.44.33-.94.33-1.45A3.65 3.65 0 0 0 10.26 13"}]]],M7=["svg",h,[["path",{d:"M4 2v20l2-1 2 1 2-1 2 1 2-1 2 1 2-1 2 1V2l-2 1-2-1-2 1-2-1-2 1-2-1-2 1-2-1Z"}],["path",{d:"M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8"}],["path",{d:"M12 17V7"}]]],v7=["svg",h,[["rect",{width:"20",height:"12",x:"2",y:"6",rx:"2"}]]],o7=["svg",h,[["rect",{width:"12",height:"20",x:"6",y:"2",rx:"2"}]]],y7=["svg",h,[["path",{d:"M7 19H4.815a1.83 1.83 0 0 1-1.57-.881 1.785 1.785 0 0 1-.004-1.784L7.196 9.5"}],["path",{d:"M11 19h8.203a1.83 1.83 0 0 0 1.556-.89 1.784 1.784 0 0 0 0-1.775l-1.226-2.12"}],["path",{d:"m14 16-3 3 3 3"}],["path",{d:"M8.293 13.596 7.196 9.5 3.1 10.598"}],["path",{d:"m9.344 5.811 1.093-1.892A1.83 1.83 0 0 1 11.985 3a1.784 1.784 0 0 1 1.546.888l3.943 6.843"}],["path",{d:"m13.378 9.633 4.096 1.098 1.097-4.096"}]]],s7=["svg",h,[["path",{d:"m15 14 5-5-5-5"}],["path",{d:"M20 9H9.5A5.5 5.5 0 0 0 4 14.5v0A5.5 5.5 0 0 0 9.5 20H13"}]]],g7=["svg",h,[["path",{d:"M21 7v6h-6"}],["path",{d:"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7"}]]],r7=["svg",h,[["path",{d:"M3 2v6h6"}],["path",{d:"M21 12A9 9 0 0 0 6 5.3L3 8"}],["path",{d:"M21 22v-6h-6"}],["path",{d:"M3 12a9 9 0 0 0 15 6.7l3-2.7"}]]],$7=["svg",h,[["path",{d:"M21 2v6h-6"}],["path",{d:"M3 12a9 9 0 0 1 15-6.7L21 8"}],["path",{d:"M3 22v-6h6"}],["path",{d:"M21 12a9 9 0 0 1-15 6.7L3 16"}]]],m7=["svg",h,[["path",{d:"M5 6a4 4 0 0 1 4-4h6a4 4 0 0 1 4 4v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6Z"}],["path",{d:"M5 10h14"}],["path",{d:"M15 7v6"}]]],x7=["svg",h,[["path",{d:"M17 3v10"}],["path",{d:"m12.67 5.5 8.66 5"}],["path",{d:"m12.67 10.5 8.66-5"}],["path",{d:"M9 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2v-2z"}]]],H7=["svg",h,[["path",{d:"M4 7V4h16v3"}],["path",{d:"M5 20h6"}],["path",{d:"M13 4 8 20"}],["path",{d:"m15 15 5 5"}],["path",{d:"m20 15-5 5"}]]],C7=["svg",h,[["path",{d:"m17 2 4 4-4 4"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14"}],["path",{d:"m7 22-4-4 4-4"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3"}],["path",{d:"M11 10h1v4"}]]],V7=["svg",h,[["path",{d:"m2 9 3-3 3 3"}],["path",{d:"M13 18H7a2 2 0 0 1-2-2V6"}],["path",{d:"m22 15-3 3-3-3"}],["path",{d:"M11 6h6a2 2 0 0 1 2 2v10"}]]],u7=["svg",h,[["path",{d:"m17 2 4 4-4 4"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14"}],["path",{d:"m7 22-4-4 4-4"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3"}]]],A7=["svg",h,[["rect",{x:"2",y:"14",width:"8",height:"8",rx:"2"}],["path",{d:"m3 7 3 3 3-3"}],["path",{d:"M6 10V5a2.95 2.95 0 0 1 3-3h1"}],["path",{d:"M22 8a2 2 0 0 1-2 2"}],["path",{d:"M20 2a2 2 0 0 1 2 2"}],["path",{d:"M14 4a2 2 0 0 1 2-2"}],["path",{d:"M16 10a2 2 0 0 1-2-2"}],["path",{d:"M14 14a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2"}],["path",{d:"M20 14a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2"}]]],w7=["svg",h,[["rect",{x:"2",y:"14",width:"8",height:"8",rx:"2"}],["path",{d:"m3 7 3 3 3-3"}],["path",{d:"M6 10V5a2.95 2.95 0 0 1 3-3h1"}],["path",{d:"M22 8a2 2 0 0 1-2 2"}],["path",{d:"M20 2a2 2 0 0 1 2 2"}],["path",{d:"M14 4a2 2 0 0 1 2-2"}],["path",{d:"M16 10a2 2 0 0 1-2-2"}]]],L7=["svg",h,[["polyline",{points:"7 17 2 12 7 7"}],["polyline",{points:"12 17 7 12 12 7"}],["path",{d:"M22 18v-2a4 4 0 0 0-4-4H7"}]]],S7=["svg",h,[["polyline",{points:"9 17 4 12 9 7"}],["path",{d:"M20 18v-2a4 4 0 0 0-4-4H4"}]]],f7=["svg",h,[["polygon",{points:"11 19 2 12 11 5 11 19"}],["polygon",{points:"22 19 13 12 22 5 22 19"}]]],k7=["svg",h,[["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z"}],["path",{d:"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0"}],["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"}]]],F7=["svg",h,[["polyline",{points:"3.5 2 6.5 12.5 18 12.5"}],["line",{x1:"9.5",x2:"5.5",y1:"12.5",y2:"20"}],["line",{x1:"15",x2:"18.5",y1:"12.5",y2:"20"}],["path",{d:"M2.75 18a13 13 0 0 0 18.5 0"}]]],Z7=["svg",h,[["path",{d:"M16.466 7.5C15.643 4.237 13.952 2 12 2 9.239 2 7 6.477 7 12s2.239 10 5 10c.342 0 .677-.069 1-.2"}],["path",{d:"m15.194 13.707 3.814 1.86-1.86 3.814"}],["path",{d:"M19 15.57c-1.804.885-4.274 1.43-7 1.43-5.523 0-10-2.239-10-5s4.477-5 10-5c4.838 0 8.873 1.718 9.8 4"}]]],z7=["svg",h,[["path",{d:"M3 2v6h6"}],["path",{d:"M3 13a9 9 0 1 0 3-7.7L3 8"}]]],B7=["svg",h,[["path",{d:"M21 2v6h-6"}],["path",{d:"M21 13a9 9 0 1 1-3-7.7L21 8"}]]],P7=["svg",h,[["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2"}],["path",{d:"M6.01 18H6"}],["path",{d:"M10.01 18H10"}],["path",{d:"M15 10v4"}],["path",{d:"M17.84 7.17a4 4 0 0 0-5.66 0"}],["path",{d:"M20.66 4.34a8 8 0 0 0-11.31 0"}]]],D7=["svg",h,[["path",{d:"M4 11a9 9 0 0 1 9 9"}],["path",{d:"M4 4a16 16 0 0 1 16 16"}],["circle",{cx:"5",cy:"19",r:"1"}]]],b7=["svg",h,[["path",{d:"M21.3 8.7 8.7 21.3c-1 1-2.5 1-3.4 0l-2.6-2.6c-1-1-1-2.5 0-3.4L15.3 2.7c1-1 2.5-1 3.4 0l2.6 2.6c1 1 1 2.5 0 3.4Z"}],["path",{d:"m7.5 10.5 2 2"}],["path",{d:"m10.5 7.5 2 2"}],["path",{d:"m13.5 4.5 2 2"}],["path",{d:"m4.5 13.5 2 2"}]]],O7=["svg",h,[["path",{d:"M14 11c5.333 0 5.333-8 0-8"}],["path",{d:"M6 11h8"}],["path",{d:"M6 15h8"}],["path",{d:"M9 21V3"}],["path",{d:"M9 3h5"}]]],R7=["svg",h,[["path",{d:"M22 18H2a4 4 0 0 0 4 4h12a4 4 0 0 0 4-4Z"}],["path",{d:"M21 14 10 2 3 14h18Z"}],["path",{d:"M10 2v16"}]]],T7=["svg",h,[["path",{d:"M7 21h10"}],["path",{d:"M12 21a9 9 0 0 0 9-9H3a9 9 0 0 0 9 9Z"}],["path",{d:"M11.38 12a2.4 2.4 0 0 1-.4-4.77 2.4 2.4 0 0 1 3.2-2.77 2.4 2.4 0 0 1 3.47-.63 2.4 2.4 0 0 1 3.37 3.37 2.4 2.4 0 0 1-1.1 3.7 2.51 2.51 0 0 1 .03 1.1"}],["path",{d:"m13 12 4-4"}],["path",{d:"M10.9 7.25A3.99 3.99 0 0 0 4 10c0 .73.2 1.41.54 2"}]]],U7=["svg",h,[["path",{d:"M3 11v3a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1v-3"}],["path",{d:"M12 19H4a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-3.83"}],["path",{d:"m3 11 7.77-6.04a2 2 0 0 1 2.46 0L21 11H3Z"}],["path",{d:"M12.97 19.77 7 15h12.5l-3.75 4.5a2 2 0 0 1-2.78.27Z"}]]],G7=["svg",h,[["path",{d:"M6 4a2 2 0 0 1 2-2h10l4 4v10.2a2 2 0 0 1-2 1.8H8a2 2 0 0 1-2-2Z"}],["path",{d:"M10 2v4h6"}],["path",{d:"M18 18v-7h-8v7"}],["path",{d:"M18 22H4a2 2 0 0 1-2-2V6"}]]],E7=["svg",h,[["path",{d:"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"}],["polyline",{points:"17 21 17 13 7 13 7 21"}],["polyline",{points:"7 3 7 8 15 8"}]]],W7=["svg",h,[["circle",{cx:"19",cy:"19",r:"2"}],["circle",{cx:"5",cy:"5",r:"2"}],["path",{d:"M5 7v12h12"}],["path",{d:"m5 19 6-6"}]]],I7=["svg",h,[["path",{d:"m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z"}],["path",{d:"m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z"}],["path",{d:"M7 21h10"}],["path",{d:"M12 3v18"}],["path",{d:"M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2"}]]],q7=["svg",h,[["path",{d:"M21 3 9 15"}],["path",{d:"M12 3H3v18h18v-9"}],["path",{d:"M16 3h5v5"}],["path",{d:"M14 15H9v-5"}]]],N7=["svg",h,[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2"}],["path",{d:"M8 14s1.5 2 4 2 4-2 4-2"}],["path",{d:"M9 9h.01"}],["path",{d:"M15 9h.01"}]]],X7=["svg",h,[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2"}],["line",{x1:"7",x2:"17",y1:"12",y2:"12"}]]],J7=["svg",h,[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2"}]]],j7=["svg",h,[["circle",{cx:"12",cy:"10",r:"1"}],["path",{d:"M22 20V8h-4l-6-4-6 4H2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2Z"}],["path",{d:"M6 17v.01"}],["path",{d:"M6 13v.01"}],["path",{d:"M18 17v.01"}],["path",{d:"M18 13v.01"}],["path",{d:"M14 22v-5a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v5"}]]],K7=["svg",h,[["path",{d:"m4 6 8-4 8 4"}],["path",{d:"m18 10 4 2v8a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-8l4-2"}],["path",{d:"M14 22v-4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v4"}],["path",{d:"M18 5v17"}],["path",{d:"M6 5v17"}],["circle",{cx:"12",cy:"9",r:"2"}]]],Q7=["svg",h,[["circle",{cx:"6",cy:"6",r:"3"}],["circle",{cx:"6",cy:"18",r:"3"}],["line",{x1:"20",x2:"8.12",y1:"4",y2:"15.88"}],["line",{x1:"14.47",x2:"20",y1:"14.48",y2:"20"}],["line",{x1:"8.12",x2:"12",y1:"8.12",y2:"12"}]]],_7=["svg",h,[["path",{d:"M13 3H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-3"}],["path",{d:"M8 21h8"}],["path",{d:"M12 17v4"}],["path",{d:"m22 3-5 5"}],["path",{d:"m17 3 5 5"}]]],Y7=["svg",h,[["path",{d:"M13 3H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-3"}],["path",{d:"M8 21h8"}],["path",{d:"M12 17v4"}],["path",{d:"m17 8 5-5"}],["path",{d:"M17 3h5v5"}]]],an=["svg",h,[["path",{d:"M10 17v2a2 2 0 0 1-2 2v0a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v3h3"}],["path",{d:"M22 17v2a2 2 0 0 1-2 2H8"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4"}],["path",{d:"M22 17H10"}]]],hn=["svg",h,[["circle",{cx:"11",cy:"11",r:"8"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65"}]]],tn=["svg",h,[["line",{x1:"22",x2:"11",y1:"2",y2:"13"}],["polygon",{points:"22 2 15 22 11 13 2 9 22 2"}]]],cn=["svg",h,[["line",{x1:"3",x2:"21",y1:"12",y2:"12"}],["polyline",{points:"8 8 12 4 16 8"}],["polyline",{points:"16 16 12 20 8 16"}]]],dn=["svg",h,[["line",{x1:"12",x2:"12",y1:"3",y2:"21"}],["polyline",{points:"8 8 4 12 8 16"}],["polyline",{points:"16 16 20 12 16 8"}]]],nn=["svg",h,[["path",{d:"M5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-1"}],["path",{d:"M5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-1"}],["path",{d:"M6 6h.01"}],["path",{d:"M6 18h.01"}],["circle",{cx:"12",cy:"12",r:"3"}],["path",{d:"M12 8v1"}],["path",{d:"M12 15v1"}],["path",{d:"M16 12h-1"}],["path",{d:"M9 12H8"}],["path",{d:"m15 9-.88.88"}],["path",{d:"M9.88 14.12 9 15"}],["path",{d:"m15 15-.88-.88"}],["path",{d:"M9.88 9.88 9 9"}]]],ln=["svg",h,[["path",{d:"M6 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-2"}],["path",{d:"M6 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-2"}],["path",{d:"M6 6h.01"}],["path",{d:"M6 18h.01"}],["path",{d:"m13 6-4 6h6l-4 6"}]]],pn=["svg",h,[["path",{d:"M7 2h13a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-5"}],["path",{d:"M10 10 2.5 2.5C2 2 2 2.5 2 5v3a2 2 0 0 0 2 2h6z"}],["path",{d:"M22 17v-1a2 2 0 0 0-2-2h-1"}],["path",{d:"M4 14a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16.5l1-.5.5.5-8-8H4z"}],["path",{d:"M6 18h.01"}],["path",{d:"m2 2 20 20"}]]],en=["svg",h,[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18"}]]],Mn=["svg",h,[["path",{d:"M20 7h-9"}],["path",{d:"M14 17H5"}],["circle",{cx:"17",cy:"17",r:"3"}],["circle",{cx:"7",cy:"7",r:"3"}]]],vn=["svg",h,[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}],["circle",{cx:"12",cy:"12",r:"3"}]]],on=["svg",h,[["circle",{cx:"18",cy:"5",r:"3"}],["circle",{cx:"6",cy:"12",r:"3"}],["circle",{cx:"18",cy:"19",r:"3"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49"}]]],yn=["svg",h,[["path",{d:"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"}],["polyline",{points:"16 6 12 2 8 6"}],["line",{x1:"12",x2:"12",y1:"2",y2:"15"}]]],sn=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["line",{x1:"3",x2:"21",y1:"9",y2:"9"}],["line",{x1:"3",x2:"21",y1:"15",y2:"15"}],["line",{x1:"9",x2:"9",y1:"9",y2:"21"}],["line",{x1:"15",x2:"15",y1:"9",y2:"21"}]]],gn=["svg",h,[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"}],["path",{d:"M12 8v4"}],["path",{d:"M12 16h.01"}]]],rn=["svg",h,[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"}],["path",{d:"m9 12 2 2 4-4"}]]],$n=["svg",h,[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"}],["line",{x1:"9.5",x2:"14.5",y1:"9",y2:"14"}],["line",{x1:"14.5",x2:"9.5",y1:"9",y2:"14"}]]],mn=["svg",h,[["path",{d:"M19.69 14a6.9 6.9 0 0 0 .31-2V5l-8-3-3.16 1.18"}],["path",{d:"M4.73 4.73 4 5v7c0 6 8 10 8 10a20.29 20.29 0 0 0 5.62-4.38"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],xn=["svg",h,[["path",{d:"M12 17h.01"}],["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10"}],["path",{d:"M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3"}]]],Hn=["svg",h,[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"}]]],Cn=["svg",h,[["path",{d:"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1 .6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1"}],["path",{d:"M19.38 20A11.6 11.6 0 0 0 21 14l-9-4-9 4c0 2.9.94 5.34 2.81 7.76"}],["path",{d:"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6"}],["path",{d:"M12 10v4"}],["path",{d:"M12 2v3"}]]],Vn=["svg",h,[["path",{d:"M20.38 3.46 16 2a4 4 0 0 1-8 0L3.62 3.46a2 2 0 0 0-1.34 2.23l.58 3.47a1 1 0 0 0 .99.84H6v10c0 1.1.9 2 2 2h8a2 2 0 0 0 2-2V10h2.15a1 1 0 0 0 .99-.84l.58-3.47a2 2 0 0 0-1.34-2.23z"}]]],un=["svg",h,[["path",{d:"M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"}],["line",{x1:"3",x2:"21",y1:"6",y2:"6"}],["path",{d:"M16 10a4 4 0 0 1-8 0"}]]],An=["svg",h,[["circle",{cx:"8",cy:"21",r:"1"}],["circle",{cx:"19",cy:"21",r:"1"}],["path",{d:"M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12"}]]],wn=["svg",h,[["path",{d:"M2 22v-5l5-5 5 5-5 5z"}],["path",{d:"M9.5 14.5 16 8"}],["path",{d:"m17 2 5 5-.5.5a3.53 3.53 0 0 1-5 0s0 0 0 0a3.53 3.53 0 0 1 0-5L17 2"}]]],Ln=["svg",h,[["path",{d:"m4 4 2.5 2.5"}],["path",{d:"M13.5 6.5a4.95 4.95 0 0 0-7 7"}],["path",{d:"M15 5 5 15"}],["path",{d:"M14 17v.01"}],["path",{d:"M10 16v.01"}],["path",{d:"M13 13v.01"}],["path",{d:"M16 10v.01"}],["path",{d:"M11 20v.01"}],["path",{d:"M17 14v.01"}],["path",{d:"M20 11v.01"}]]],Sn=["svg",h,[["path",{d:"m15 15 6 6m-6-6v4.8m0-4.8h4.8"}],["path",{d:"M9 19.8V15m0 0H4.2M9 15l-6 6"}],["path",{d:"M15 4.2V9m0 0h4.8M15 9l6-6"}],["path",{d:"M9 4.2V9m0 0H4.2M9 9 3 3"}]]],fn=["svg",h,[["path",{d:"M12 22v-7l-2-2"}],["path",{d:"M17 8v.8A6 6 0 0 1 13.8 20v0H10v0A6.5 6.5 0 0 1 7 8h0a5 5 0 0 1 10 0Z"}],["path",{d:"m14 14-2 2"}]]],kn=["svg",h,[["polyline",{points:"16 3 21 3 21 8"}],["line",{x1:"4",x2:"21",y1:"20",y2:"3"}],["polyline",{points:"21 16 21 21 16 21"}],["line",{x1:"15",x2:"21",y1:"15",y2:"21"}],["line",{x1:"4",x2:"9",y1:"4",y2:"9"}]]],Fn=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["path",{d:"M9 3v18"}],["path",{d:"m16 15-3-3 3-3"}]]],Zn=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["path",{d:"M9 3v18"}],["path",{d:"m14 9 3 3-3 3"}]]],zn=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["line",{x1:"9",x2:"9",y1:"3",y2:"21"}]]],Bn=["svg",h,[["path",{d:"M18 7V4H6l6 8-6 8h12v-3"}]]],Pn=["svg",h,[["path",{d:"M2 20h.01"}],["path",{d:"M7 20v-4"}],["path",{d:"M12 20v-8"}],["path",{d:"M17 20V8"}]]],Dn=["svg",h,[["path",{d:"M2 20h.01"}],["path",{d:"M7 20v-4"}]]],bn=["svg",h,[["path",{d:"M2 20h.01"}],["path",{d:"M7 20v-4"}],["path",{d:"M12 20v-8"}]]],On=["svg",h,[["path",{d:"M2 20h.01"}]]],Rn=["svg",h,[["path",{d:"M2 20h.01"}],["path",{d:"M7 20v-4"}],["path",{d:"M12 20v-8"}],["path",{d:"M17 20V8"}],["path",{d:"M22 4v16"}]]],Tn=["svg",h,[["path",{d:"M7 12a5 5 0 0 1 5-5v0a5 5 0 0 1 5 5v6H7v-6Z"}],["path",{d:"M5 20a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v2H5v-2Z"}],["path",{d:"M21 12h1"}],["path",{d:"M18.5 4.5 18 5"}],["path",{d:"M2 12h1"}],["path",{d:"M12 2v1"}],["path",{d:"m4.929 4.929.707.707"}],["path",{d:"M12 12v6"}]]],Un=["svg",h,[["polygon",{points:"19 20 9 12 19 4 19 20"}],["line",{x1:"5",x2:"5",y1:"19",y2:"5"}]]],Gn=["svg",h,[["polygon",{points:"5 4 15 12 5 20 5 4"}],["line",{x1:"19",x2:"19",y1:"5",y2:"19"}]]],En=["svg",h,[["circle",{cx:"9",cy:"12",r:"1"}],["circle",{cx:"15",cy:"12",r:"1"}],["path",{d:"M8 20v2h8v-2"}],["path",{d:"m12.5 17-.5-1-.5 1h1z"}],["path",{d:"M16 20a2 2 0 0 0 1.56-3.25 8 8 0 1 0-11.12 0A2 2 0 0 0 8 20"}]]],Wn=["svg",h,[["rect",{width:"3",height:"8",x:"13",y:"2",rx:"1.5"}],["path",{d:"M19 8.5V10h1.5A1.5 1.5 0 1 0 19 8.5"}],["rect",{width:"3",height:"8",x:"8",y:"14",rx:"1.5"}],["path",{d:"M5 15.5V14H3.5A1.5 1.5 0 1 0 5 15.5"}],["rect",{width:"8",height:"3",x:"14",y:"13",rx:"1.5"}],["path",{d:"M15.5 19H14v1.5a1.5 1.5 0 1 0 1.5-1.5"}],["rect",{width:"8",height:"3",x:"2",y:"8",rx:"1.5"}],["path",{d:"M8.5 5H10V3.5A1.5 1.5 0 1 0 8.5 5"}]]],In=["svg",h,[["path",{d:"m8 14-6 6h9v-3"}],["path",{d:"M18.37 3.63 8 14l3 3L21.37 6.63a2.12 2.12 0 1 0-3-3Z"}]]],qn=["svg",h,[["line",{x1:"21",x2:"14",y1:"4",y2:"4"}],["line",{x1:"10",x2:"3",y1:"4",y2:"4"}],["line",{x1:"21",x2:"12",y1:"12",y2:"12"}],["line",{x1:"8",x2:"3",y1:"12",y2:"12"}],["line",{x1:"21",x2:"16",y1:"20",y2:"20"}],["line",{x1:"12",x2:"3",y1:"20",y2:"20"}],["line",{x1:"14",x2:"14",y1:"2",y2:"6"}],["line",{x1:"8",x2:"8",y1:"10",y2:"14"}],["line",{x1:"16",x2:"16",y1:"18",y2:"22"}]]],Nn=["svg",h,[["line",{x1:"4",x2:"4",y1:"21",y2:"14"}],["line",{x1:"4",x2:"4",y1:"10",y2:"3"}],["line",{x1:"12",x2:"12",y1:"21",y2:"12"}],["line",{x1:"12",x2:"12",y1:"8",y2:"3"}],["line",{x1:"20",x2:"20",y1:"21",y2:"16"}],["line",{x1:"20",x2:"20",y1:"12",y2:"3"}],["line",{x1:"2",x2:"6",y1:"14",y2:"14"}],["line",{x1:"10",x2:"14",y1:"8",y2:"8"}],["line",{x1:"18",x2:"22",y1:"16",y2:"16"}]]],Xn=["svg",h,[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2"}],["path",{d:"M12.667 8 10 12h4l-2.667 4"}]]],Jn=["svg",h,[["rect",{width:"7",height:"12",x:"2",y:"6",rx:"1"}],["path",{d:"M13 8.32a7.43 7.43 0 0 1 0 7.36"}],["path",{d:"M16.46 6.21a11.76 11.76 0 0 1 0 11.58"}],["path",{d:"M19.91 4.1a15.91 15.91 0 0 1 .01 15.8"}]]],jn=["svg",h,[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2"}],["path",{d:"M12 18h.01"}]]],Kn=["svg",h,[["path",{d:"M22 11v1a10 10 0 1 1-9-10"}],["path",{d:"M8 14s1.5 2 4 2 4-2 4-2"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9"}],["path",{d:"M16 5h6"}],["path",{d:"M19 2v6"}]]],Qn=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M8 14s1.5 2 4 2 4-2 4-2"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9"}]]],_n=["svg",h,[["line",{x1:"2",x2:"22",y1:"12",y2:"12"}],["line",{x1:"12",x2:"12",y1:"2",y2:"22"}],["path",{d:"m20 16-4-4 4-4"}],["path",{d:"m4 8 4 4-4 4"}],["path",{d:"m16 4-4 4-4-4"}],["path",{d:"m8 20 4-4 4 4"}]]],Yn=["svg",h,[["path",{d:"M20 9V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v3"}],["path",{d:"M2 11v5a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5a2 2 0 0 0-4 0v2H6v-2a2 2 0 0 0-4 0Z"}],["path",{d:"M4 18v2"}],["path",{d:"M20 18v2"}],["path",{d:"M12 4v9"}]]],ai=["svg",h,[["path",{d:"M12 21a9 9 0 0 0 9-9H3a9 9 0 0 0 9 9Z"}],["path",{d:"M7 21h10"}],["path",{d:"M19.5 12 22 6"}],["path",{d:"M16.25 3c.27.1.8.53.75 1.36-.06.83-.93 1.2-1 2.02-.05.78.34 1.24.73 1.62"}],["path",{d:"M11.25 3c.27.1.8.53.74 1.36-.05.83-.93 1.2-.98 2.02-.06.78.33 1.24.72 1.62"}],["path",{d:"M6.25 3c.27.1.8.53.75 1.36-.06.83-.93 1.2-1 2.02-.05.78.34 1.24.74 1.62"}]]],hi=["svg",h,[["polyline",{points:"22,17 22,19 2,19 2,17"}]]],ti=["svg",h,[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",ry:"2"}],["circle",{cx:"12",cy:"14",r:"4"}],["line",{x1:"12",x2:"12.01",y1:"6",y2:"6"}]]],ci=["svg",h,[["circle",{cx:"19",cy:"5",r:"2"}],["circle",{cx:"5",cy:"19",r:"2"}],["path",{d:"M5 17A12 12 0 0 1 17 5"}]]],di=["svg",h,[["path",{d:"M8 19H5c-1 0-2-1-2-2V7c0-1 1-2 2-2h3"}],["path",{d:"M16 5h3c1 0 2 1 2 2v10c0 1-1 2-2 2h-3"}],["line",{x1:"12",x2:"12",y1:"4",y2:"20"}]]],ni=["svg",h,[["path",{d:"M5 8V5c0-1 1-2 2-2h10c1 0 2 1 2 2v3"}],["path",{d:"M19 16v3c0 1-1 2-2 2H7c-1 0-2-1-2-2v-3"}],["line",{x1:"4",x2:"20",y1:"12",y2:"12"}]]],ii=["svg",h,[["path",{d:"M7 20h10"}],["path",{d:"M10 20c5.5-2.5.8-6.4 3-10"}],["path",{d:"M9.5 9.4c1.1.8 1.8 2.2 2.3 3.7-2 .4-3.5.4-4.8-.3-1.2-.6-2.3-1.9-3-4.2 2.8-.5 4.4 0 5.5.8z"}],["path",{d:"M14.1 6a7 7 0 0 0-1.1 4c1.9-.1 3.3-.6 4.3-1.4 1-1 1.6-2.3 1.7-4.6-2.7.1-4 1-4.9 2z"}]]],li=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}]]],pi=["svg",h,[["path",{d:"M5 22h14"}],["path",{d:"M19.27 13.73A2.5 2.5 0 0 0 17.5 13h-11A2.5 2.5 0 0 0 4 15.5V17a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-1.5c0-.66-.26-1.3-.73-1.77Z"}],["path",{d:"M14 13V8.5C14 7 15 7 15 5a3 3 0 0 0-3-3c-1.66 0-3 1-3 3s1 2 1 3.5V13"}]]],ei=["svg",h,[["path",{d:"M12 17.8 5.8 21 7 14.1 2 9.3l7-1L12 2"}]]],Mi=["svg",h,[["path",{d:"M8.34 8.34 2 9.27l5 4.87L5.82 21 12 17.77 18.18 21l-.59-3.43"}],["path",{d:"M18.42 12.76 22 9.27l-6.91-1L12 2l-1.44 2.91"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],vi=["svg",h,[["polygon",{points:"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"}]]],oi=["svg",h,[["path",{d:"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z"}],["path",{d:"M5 3v4"}],["path",{d:"M19 17v4"}],["path",{d:"M3 5h4"}],["path",{d:"M17 19h4"}]]],yi=["svg",h,[["line",{x1:"18",x2:"18",y1:"20",y2:"4"}],["polygon",{points:"14,20 4,12 14,4"}]]],si=["svg",h,[["line",{x1:"6",x2:"6",y1:"4",y2:"20"}],["polygon",{points:"10,4 20,12 10,20"}]]],gi=["svg",h,[["path",{d:"M4.8 2.3A.3.3 0 1 0 5 2H4a2 2 0 0 0-2 2v5a6 6 0 0 0 6 6v0a6 6 0 0 0 6-6V4a2 2 0 0 0-2-2h-1a.2.2 0 1 0 .3.3"}],["path",{d:"M8 15v1a6 6 0 0 0 6 6v0a6 6 0 0 0 6-6v-4"}],["circle",{cx:"20",cy:"10",r:"2"}]]],ri=["svg",h,[["path",{d:"M15.5 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2V8.5L15.5 3Z"}],["path",{d:"M15 3v6h6"}],["path",{d:"M10 16s.8 1 2 1c1.3 0 2-1 2-1"}],["path",{d:"M8 13h0"}],["path",{d:"M16 13h0"}]]],$i=["svg",h,[["path",{d:"M15.5 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2V8.5L15.5 3Z"}],["path",{d:"M15 3v6h6"}]]],mi=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["rect",{width:"6",height:"6",x:"9",y:"9"}]]],xi=["svg",h,[["path",{d:"m2 7 4.41-4.41A2 2 0 0 1 7.83 2h8.34a2 2 0 0 1 1.42.59L22 7"}],["path",{d:"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"}],["path",{d:"M15 22v-4a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v4"}],["path",{d:"M2 7h20"}],["path",{d:"M22 7v3a2 2 0 0 1-2 2v0a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 16 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 12 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 8 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 4 12v0a2 2 0 0 1-2-2V7"}]]],Hi=["svg",h,[["rect",{width:"20",height:"6",x:"2",y:"4",rx:"2"}],["rect",{width:"20",height:"6",x:"2",y:"14",rx:"2"}]]],Ci=["svg",h,[["rect",{width:"6",height:"20",x:"4",y:"2",rx:"2"}],["rect",{width:"6",height:"20",x:"14",y:"2",rx:"2"}]]],Vi=["svg",h,[["path",{d:"M16 4H9a3 3 0 0 0-2.83 4"}],["path",{d:"M14 12a4 4 0 0 1 0 8H6"}],["line",{x1:"4",x2:"20",y1:"12",y2:"12"}]]],ui=["svg",h,[["path",{d:"m4 5 8 8"}],["path",{d:"m12 5-8 8"}],["path",{d:"M20 19h-4c0-1.5.44-2 1.5-2.5S20 15.33 20 14c0-.47-.17-.93-.48-1.29a2.11 2.11 0 0 0-2.62-.44c-.42.24-.74.62-.9 1.07"}]]],Ai=["svg",h,[["path",{d:"M7 13h4"}],["path",{d:"M15 13h2"}],["path",{d:"M7 9h2"}],["path",{d:"M13 9h4"}],["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10Z"}]]],wi=["svg",h,[["path",{d:"M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8z"}],["path",{d:"M12 4h.01"}],["path",{d:"M20 12h.01"}],["path",{d:"M12 20h.01"}],["path",{d:"M4 12h.01"}],["path",{d:"M17.657 6.343h.01"}],["path",{d:"M17.657 17.657h.01"}],["path",{d:"M6.343 17.657h.01"}],["path",{d:"M6.343 6.343h.01"}]]],Li=["svg",h,[["path",{d:"M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8z"}],["path",{d:"M12 3v1"}],["path",{d:"M12 20v1"}],["path",{d:"M3 12h1"}],["path",{d:"M20 12h1"}],["path",{d:"m18.364 5.636-.707.707"}],["path",{d:"m6.343 17.657-.707.707"}],["path",{d:"m5.636 5.636.707.707"}],["path",{d:"m17.657 17.657.707.707"}]]],Si=["svg",h,[["path",{d:"M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8z"}],["path",{d:"M12 8a2.828 2.828 0 1 0 4 4"}],["path",{d:"M12 2v2"}],["path",{d:"M12 20v2"}],["path",{d:"m4.93 4.93 1.41 1.41"}],["path",{d:"m17.66 17.66 1.41 1.41"}],["path",{d:"M2 12h2"}],["path",{d:"M20 12h2"}],["path",{d:"m6.34 17.66-1.41 1.41"}],["path",{d:"m19.07 4.93-1.41 1.41"}]]],fi=["svg",h,[["path",{d:"M10 9a3 3 0 1 0 0 6"}],["path",{d:"M2 12h1"}],["path",{d:"M14 21V3"}],["path",{d:"M10 4V3"}],["path",{d:"M10 21v-1"}],["path",{d:"m3.64 18.36.7-.7"}],["path",{d:"m4.34 6.34-.7-.7"}],["path",{d:"M14 12h8"}],["path",{d:"m17 4-3 3"}],["path",{d:"m14 17 3 3"}],["path",{d:"m21 15-3-3 3-3"}]]],ki=["svg",h,[["circle",{cx:"12",cy:"12",r:"4"}],["path",{d:"M12 2v2"}],["path",{d:"M12 20v2"}],["path",{d:"m4.93 4.93 1.41 1.41"}],["path",{d:"m17.66 17.66 1.41 1.41"}],["path",{d:"M2 12h2"}],["path",{d:"M20 12h2"}],["path",{d:"m6.34 17.66-1.41 1.41"}],["path",{d:"m19.07 4.93-1.41 1.41"}]]],Fi=["svg",h,[["path",{d:"M12 2v8"}],["path",{d:"m4.93 10.93 1.41 1.41"}],["path",{d:"M2 18h2"}],["path",{d:"M20 18h2"}],["path",{d:"m19.07 10.93-1.41 1.41"}],["path",{d:"M22 22H2"}],["path",{d:"m8 6 4-4 4 4"}],["path",{d:"M16 18a4 4 0 0 0-8 0"}]]],Zi=["svg",h,[["path",{d:"M12 10V2"}],["path",{d:"m4.93 10.93 1.41 1.41"}],["path",{d:"M2 18h2"}],["path",{d:"M20 18h2"}],["path",{d:"m19.07 10.93-1.41 1.41"}],["path",{d:"M22 22H2"}],["path",{d:"m16 6-4 4-4-4"}],["path",{d:"M16 18a4 4 0 0 0-8 0"}]]],zi=["svg",h,[["path",{d:"m4 19 8-8"}],["path",{d:"m12 19-8-8"}],["path",{d:"M20 12h-4c0-1.5.442-2 1.5-2.5S20 8.334 20 7.002c0-.472-.17-.93-.484-1.29a2.105 2.105 0 0 0-2.617-.436c-.42.239-.738.614-.899 1.06"}]]],Bi=["svg",h,[["path",{d:"M10 21V3h8"}],["path",{d:"M6 16h9"}],["path",{d:"M10 9.5h7"}]]],Pi=["svg",h,[["path",{d:"M11 19H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h5"}],["path",{d:"M13 5h7a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-5"}],["circle",{cx:"12",cy:"12",r:"3"}],["path",{d:"m18 22-3-3 3-3"}],["path",{d:"m6 2 3 3-3 3"}]]],Di=["svg",h,[["polyline",{points:"14.5 17.5 3 6 3 3 6 3 17.5 14.5"}],["line",{x1:"13",x2:"19",y1:"19",y2:"13"}],["line",{x1:"16",x2:"20",y1:"16",y2:"20"}],["line",{x1:"19",x2:"21",y1:"21",y2:"19"}]]],bi=["svg",h,[["polyline",{points:"14.5 17.5 3 6 3 3 6 3 17.5 14.5"}],["line",{x1:"13",x2:"19",y1:"19",y2:"13"}],["line",{x1:"16",x2:"20",y1:"16",y2:"20"}],["line",{x1:"19",x2:"21",y1:"21",y2:"19"}],["polyline",{points:"14.5 6.5 18 3 21 3 21 6 17.5 9.5"}],["line",{x1:"5",x2:"9",y1:"14",y2:"18"}],["line",{x1:"7",x2:"4",y1:"17",y2:"20"}],["line",{x1:"3",x2:"5",y1:"19",y2:"21"}]]],Oi=["svg",h,[["path",{d:"m18 2 4 4"}],["path",{d:"m17 7 3-3"}],["path",{d:"M19 9 8.7 19.3c-1 1-2.5 1-3.4 0l-.6-.6c-1-1-1-2.5 0-3.4L15 5"}],["path",{d:"m9 11 4 4"}],["path",{d:"m5 19-3 3"}],["path",{d:"m14 4 6 6"}]]],Ri=["svg",h,[["path",{d:"M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18"}]]],Ti=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["line",{x1:"3",x2:"21",y1:"9",y2:"9"}],["line",{x1:"3",x2:"21",y1:"15",y2:"15"}],["line",{x1:"12",x2:"12",y1:"3",y2:"21"}]]],Ui=["svg",h,[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",ry:"2"}],["line",{x1:"12",x2:"12.01",y1:"18",y2:"18"}]]],Gi=["svg",h,[["circle",{cx:"7",cy:"7",r:"5"}],["circle",{cx:"17",cy:"17",r:"5"}],["path",{d:"M12 17h10"}],["path",{d:"m3.46 10.54 7.08-7.08"}]]],Ei=["svg",h,[["path",{d:"M12 2H2v10l9.29 9.29c.94.94 2.48.94 3.42 0l6.58-6.58c.94-.94.94-2.48 0-3.42L12 2Z"}],["path",{d:"M7 7h.01"}]]],Wi=["svg",h,[["path",{d:"M9 5H2v7l6.29 6.29c.94.94 2.48.94 3.42 0l3.58-3.58c.94-.94.94-2.48 0-3.42L9 5Z"}],["path",{d:"M6 9.01V9"}],["path",{d:"m15 5 6.3 6.3a2.4 2.4 0 0 1 0 3.4L17 19"}]]],Ii=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["circle",{cx:"12",cy:"12",r:"6"}],["circle",{cx:"12",cy:"12",r:"2"}]]],qi=["svg",h,[["path",{d:"M19 20 10 4"}],["path",{d:"m5 20 9-16"}],["path",{d:"M3 20h18"}],["path",{d:"m12 15-3 5"}],["path",{d:"m12 15 3 5"}]]],Ni=["svg",h,[["path",{d:"m7 11 2-2-2-2"}],["path",{d:"M11 13h4"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}]]],Xi=["svg",h,[["polyline",{points:"4 17 10 11 4 5"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19"}]]],Ji=["svg",h,[["path",{d:"M21 7 6.82 21.18a2.83 2.83 0 0 1-3.99-.01v0a2.83 2.83 0 0 1 0-4L17 3"}],["path",{d:"m16 2 6 6"}],["path",{d:"M12 16H4"}]]],ji=["svg",h,[["path",{d:"M14.5 2v17.5c0 1.4-1.1 2.5-2.5 2.5h0c-1.4 0-2.5-1.1-2.5-2.5V2"}],["path",{d:"M8.5 2h7"}],["path",{d:"M14.5 16h-5"}]]],Ki=["svg",h,[["path",{d:"M9 2v17.5A2.5 2.5 0 0 1 6.5 22v0A2.5 2.5 0 0 1 4 19.5V2"}],["path",{d:"M20 2v17.5a2.5 2.5 0 0 1-2.5 2.5v0a2.5 2.5 0 0 1-2.5-2.5V2"}],["path",{d:"M3 2h7"}],["path",{d:"M14 2h7"}],["path",{d:"M9 16H4"}],["path",{d:"M20 16h-5"}]]],Qi=["svg",h,[["path",{d:"M5 4h1a3 3 0 0 1 3 3 3 3 0 0 1 3-3h1"}],["path",{d:"M13 20h-1a3 3 0 0 1-3-3 3 3 0 0 1-3 3H5"}],["path",{d:"M5 16H4a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2h1"}],["path",{d:"M13 8h7a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-7"}],["path",{d:"M9 7v10"}]]],_i=["svg",h,[["path",{d:"M17 22h-1a4 4 0 0 1-4-4V6a4 4 0 0 1 4-4h1"}],["path",{d:"M7 22h1a4 4 0 0 0 4-4v-1"}],["path",{d:"M7 2h1a4 4 0 0 1 4 4v1"}]]],Yi=["svg",h,[["path",{d:"M5 3a2 2 0 0 0-2 2"}],["path",{d:"M19 3a2 2 0 0 1 2 2"}],["path",{d:"M21 19a2 2 0 0 1-2 2"}],["path",{d:"M5 21a2 2 0 0 1-2-2"}],["path",{d:"M9 3h1"}],["path",{d:"M9 21h1"}],["path",{d:"M14 3h1"}],["path",{d:"M14 21h1"}],["path",{d:"M3 9v1"}],["path",{d:"M21 9v1"}],["path",{d:"M3 14v1"}],["path",{d:"M21 14v1"}],["line",{x1:"7",x2:"15",y1:"8",y2:"8"}],["line",{x1:"7",x2:"17",y1:"12",y2:"12"}],["line",{x1:"7",x2:"13",y1:"16",y2:"16"}]]],al=["svg",h,[["path",{d:"M17 6.1H3"}],["path",{d:"M21 12.1H3"}],["path",{d:"M15.1 18H3"}]]],hl=["svg",h,[["path",{d:"M2 12h10"}],["path",{d:"M9 4v16"}],["path",{d:"m3 9 3 3-3 3"}],["path",{d:"M12 6 9 9 6 6"}],["path",{d:"m6 18 3-3 1.5 1.5"}],["path",{d:"M20 4v10.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0Z"}]]],tl=["svg",h,[["path",{d:"M12 9a4 4 0 0 0-2 7.5"}],["path",{d:"M12 3v2"}],["path",{d:"m6.6 18.4-1.4 1.4"}],["path",{d:"M20 4v10.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0Z"}],["path",{d:"M4 13H2"}],["path",{d:"M6.34 7.34 4.93 5.93"}]]],cl=["svg",h,[["path",{d:"M14 4v10.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0Z"}]]],dl=["svg",h,[["path",{d:"M17 14V2"}],["path",{d:"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22h0a3.13 3.13 0 0 1-3-3.88Z"}]]],nl=["svg",h,[["path",{d:"M7 10v12"}],["path",{d:"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2h0a3.13 3.13 0 0 1 3 3.88Z"}]]],il=["svg",h,[["path",{d:"M3 7v2a3 3 0 1 1 0 6v2c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2v-2a3 3 0 1 1 0-6V7a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2Z"}],["path",{d:"M13 5v2"}],["path",{d:"M13 17v2"}],["path",{d:"M13 11v2"}]]],ll=["svg",h,[["path",{d:"M10 2h4"}],["path",{d:"M4.6 11a8 8 0 0 0 1.7 8.7 8 8 0 0 0 8.7 1.7"}],["path",{d:"M7.4 7.4a8 8 0 0 1 10.3 1 8 8 0 0 1 .9 10.2"}],["path",{d:"m2 2 20 20"}],["path",{d:"M12 12v-2"}]]],pl=["svg",h,[["path",{d:"M10 2h4"}],["path",{d:"M12 14v-4"}],["path",{d:"M4 13a8 8 0 0 1 8-7 8 8 0 1 1-5.3 14L4 17.6"}],["path",{d:"M9 17H4v5"}]]],el=["svg",h,[["line",{x1:"10",x2:"14",y1:"2",y2:"2"}],["line",{x1:"12",x2:"15",y1:"14",y2:"11"}],["circle",{cx:"12",cy:"14",r:"8"}]]],Ml=["svg",h,[["rect",{width:"20",height:"12",x:"2",y:"6",rx:"6",ry:"6"}],["circle",{cx:"8",cy:"12",r:"2"}]]],vl=["svg",h,[["rect",{width:"20",height:"12",x:"2",y:"6",rx:"6",ry:"6"}],["circle",{cx:"16",cy:"12",r:"2"}]]],ol=["svg",h,[["path",{d:"M21 4H3"}],["path",{d:"M18 8H6"}],["path",{d:"M19 12H9"}],["path",{d:"M16 16h-6"}],["path",{d:"M11 20H9"}]]],yl=["svg",h,[["path",{d:"M18.2 12.27 20 6H4l1.8 6.27a1 1 0 0 0 .95.73h10.5a1 1 0 0 0 .96-.73Z"}],["path",{d:"M8 13v9"}],["path",{d:"M16 22v-9"}],["path",{d:"m9 6 1 7"}],["path",{d:"m15 6-1 7"}],["path",{d:"M12 6V2"}],["path",{d:"M13 2h-2"}]]],sl=["svg",h,[["rect",{width:"18",height:"12",x:"3",y:"8",rx:"1"}],["path",{d:"M10 8V5c0-.6-.4-1-1-1H6a1 1 0 0 0-1 1v3"}],["path",{d:"M19 8V5c0-.6-.4-1-1-1h-3a1 1 0 0 0-1 1v3"}]]],gl=["svg",h,[["rect",{width:"16",height:"16",x:"4",y:"3",rx:"2"}],["path",{d:"M4 11h16"}],["path",{d:"M12 3v8"}],["path",{d:"m8 19-2 3"}],["path",{d:"m18 22-2-3"}],["path",{d:"M8 15h0"}],["path",{d:"M16 15h0"}]]],rl=["svg",h,[["path",{d:"M3 6h18"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17"}]]],$l=["svg",h,[["path",{d:"M3 6h18"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"}]]],ml=["svg",h,[["path",{d:"M8 19h8a4 4 0 0 0 3.8-2.8 4 4 0 0 0-1.6-4.5c1-1.1 1-2.7.4-4-.7-1.2-2.2-2-3.6-1.7a3 3 0 0 0-3-3 3 3 0 0 0-3 3c-1.4-.2-2.9.5-3.6 1.7-.7 1.3-.5 2.9.4 4a4 4 0 0 0-1.6 4.5A4 4 0 0 0 8 19Z"}],["path",{d:"M12 19v3"}]]],xl=["svg",h,[["path",{d:"m17 14 3 3.3a1 1 0 0 1-.7 1.7H4.7a1 1 0 0 1-.7-1.7L7 14h-.3a1 1 0 0 1-.7-1.7L9 9h-.2A1 1 0 0 1 8 7.3L12 3l4 4.3a1 1 0 0 1-.8 1.7H15l3 3.3a1 1 0 0 1-.7 1.7H17Z"}],["path",{d:"M12 22v-3"}]]],Hl=["svg",h,[["path",{d:"M10 10v.2A3 3 0 0 1 8.9 16v0H5v0h0a3 3 0 0 1-1-5.8V10a3 3 0 0 1 6 0Z"}],["path",{d:"M7 16v6"}],["path",{d:"M13 19v3"}],["path",{d:"M12 19h8.3a1 1 0 0 0 .7-1.7L18 14h.3a1 1 0 0 0 .7-1.7L16 9h.2a1 1 0 0 0 .8-1.7L13 3l-1.4 1.5"}]]],Cl=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["rect",{width:"3",height:"9",x:"7",y:"7"}],["rect",{width:"3",height:"5",x:"14",y:"7"}]]],Vl=["svg",h,[["polyline",{points:"22 17 13.5 8.5 8.5 13.5 2 7"}],["polyline",{points:"16 17 22 17 22 11"}]]],ul=["svg",h,[["polyline",{points:"22 7 13.5 15.5 8.5 10.5 2 17"}],["polyline",{points:"16 7 22 7 22 13"}]]],Al=["svg",h,[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"}]]],wl=["svg",h,[["path",{d:"M6 9H4.5a2.5 2.5 0 0 1 0-5H6"}],["path",{d:"M18 9h1.5a2.5 2.5 0 0 0 0-5H18"}],["path",{d:"M4 22h16"}],["path",{d:"M10 14.66V17c0 .55-.47.98-.97 1.21C7.85 18.75 7 20.24 7 22"}],["path",{d:"M14 14.66V17c0 .55.47.98.97 1.21C16.15 18.75 17 20.24 17 22"}],["path",{d:"M18 2H6v7a6 6 0 0 0 12 0V2Z"}]]],Ll=["svg",h,[["path",{d:"M10 17h4V5H2v12h3"}],["path",{d:"M20 17h2v-3.34a4 4 0 0 0-1.17-2.83L19 9h-5"}],["path",{d:"M14 17h1"}],["circle",{cx:"7.5",cy:"17.5",r:"2.5"}],["circle",{cx:"17.5",cy:"17.5",r:"2.5"}]]],Sl=["svg",h,[["path",{d:"M7 21h10"}],["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2"}]]],fl=["svg",h,[["rect",{width:"20",height:"15",x:"2",y:"7",rx:"2",ry:"2"}],["polyline",{points:"17 2 12 7 7 2"}]]],kl=["svg",h,[["path",{d:"M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7"}]]],Fl=["svg",h,[["path",{d:"M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z"}]]],Zl=["svg",h,[["polyline",{points:"4 7 4 4 20 4 20 7"}],["line",{x1:"9",x2:"15",y1:"20",y2:"20"}],["line",{x1:"12",x2:"12",y1:"4",y2:"20"}]]],zl=["svg",h,[["path",{d:"M22 12a9.92 9.92 0 0 0-3.24-6.41 10.12 10.12 0 0 0-13.52 0A9.92 9.92 0 0 0 2 12Z"}],["path",{d:"M12 12v8a2 2 0 0 0 4 0"}],["line",{x1:"12",x2:"12",y1:"2",y2:"3"}]]],Bl=["svg",h,[["path",{d:"M6 4v6a6 6 0 0 0 12 0V4"}],["line",{x1:"4",x2:"20",y1:"20",y2:"20"}]]],Pl=["svg",h,[["path",{d:"M9 14 4 9l5-5"}],["path",{d:"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5v0a5.5 5.5 0 0 1-5.5 5.5H11"}]]],Dl=["svg",h,[["path",{d:"M3 7v6h6"}],["path",{d:"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13"}]]],bl=["svg",h,[["path",{d:"M15 7h2a5 5 0 0 1 0 10h-2m-6 0H7A5 5 0 0 1 7 7h2"}]]],Ol=["svg",h,[["path",{d:"m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71"}],["path",{d:"m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71"}],["line",{x1:"8",x2:"8",y1:"2",y2:"5"}],["line",{x1:"2",x2:"5",y1:"8",y2:"8"}],["line",{x1:"16",x2:"16",y1:"19",y2:"22"}],["line",{x1:"19",x2:"22",y1:"16",y2:"16"}]]],Rl=["svg",h,[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2"}],["path",{d:"M7 11V7a5 5 0 0 1 9.9-1"}]]],Tl=["svg",h,[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"}],["path",{d:"M12 12v9"}],["path",{d:"m16 16-4-4-4 4"}]]],Ul=["svg",h,[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}],["polyline",{points:"17 8 12 3 7 8"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15"}]]],Gl=["svg",h,[["circle",{cx:"10",cy:"7",r:"1"}],["circle",{cx:"4",cy:"20",r:"1"}],["path",{d:"M4.7 19.3 19 5"}],["path",{d:"m21 3-3 1 2 2Z"}],["path",{d:"M9.26 7.68 5 12l2 5"}],["path",{d:"m10 14 5 2 3.5-3.5"}],["path",{d:"m18 12 1-1 1 1-1 1Z"}]]],El=["svg",h,[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"}],["circle",{cx:"9",cy:"7",r:"4"}],["polyline",{points:"16 11 18 13 22 9"}]]],Wl=["svg",h,[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"}],["circle",{cx:"9",cy:"7",r:"4"}],["circle",{cx:"19",cy:"11",r:"2"}],["path",{d:"M19 8v1"}],["path",{d:"M19 13v1"}],["path",{d:"m21.6 9.5-.87.5"}],["path",{d:"m17.27 12-.87.5"}],["path",{d:"m21.6 12.5-.87-.5"}],["path",{d:"m17.27 10-.87-.5"}]]],Il=["svg",h,[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"}],["circle",{cx:"9",cy:"7",r:"4"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11"}]]],ql=["svg",h,[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"}],["circle",{cx:"9",cy:"7",r:"4"}],["line",{x1:"19",x2:"19",y1:"8",y2:"14"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11"}]]],Nl=["svg",h,[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"}],["circle",{cx:"9",cy:"7",r:"4"}],["line",{x1:"17",x2:"22",y1:"8",y2:"13"}],["line",{x1:"22",x2:"17",y1:"8",y2:"13"}]]],Xl=["svg",h,[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"}],["circle",{cx:"12",cy:"7",r:"4"}]]],Jl=["svg",h,[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"}],["circle",{cx:"9",cy:"7",r:"4"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75"}]]],jl=["svg",h,[["path",{d:"m16 2-2.3 2.3a3 3 0 0 0 0 4.2l1.8 1.8a3 3 0 0 0 4.2 0L22 8"}],["path",{d:"M15 15 3.3 3.3a4.2 4.2 0 0 0 0 6l7.3 7.3c.7.7 2 .7 2.8 0L15 15Zm0 0 7 7"}],["path",{d:"m2.1 21.8 6.4-6.3"}],["path",{d:"m19 5-7 7"}]]],Kl=["svg",h,[["path",{d:"M3 2v7c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2V2"}],["path",{d:"M7 2v20"}],["path",{d:"M21 15V2v0a5 5 0 0 0-5 5v6c0 1.1.9 2 2 2h3Zm0 0v7"}]]],Ql=["svg",h,[["path",{d:"M12 2v20"}],["path",{d:"M2 5h20"}],["path",{d:"M3 3v2"}],["path",{d:"M7 3v2"}],["path",{d:"M17 3v2"}],["path",{d:"M21 3v2"}],["path",{d:"m19 5-7 7-7-7"}]]],_l=["svg",h,[["path",{d:"M2 2a26.6 26.6 0 0 1 10 20c.9-6.82 1.5-9.5 4-14"}],["path",{d:"M16 8c4 0 6-2 6-6-4 0-6 2-6 6"}],["path",{d:"M17.41 3.6a10 10 0 1 0 3 3"}]]],Yl=["svg",h,[["path",{d:"M2 12a5 5 0 0 0 5 5 8 8 0 0 1 5 2 8 8 0 0 1 5-2 5 5 0 0 0 5-5V7h-5a8 8 0 0 0-5 2 8 8 0 0 0-5-2H2Z"}],["path",{d:"M6 11c1.5 0 3 .5 3 2-2 0-3 0-3-2Z"}],["path",{d:"M18 11c-1.5 0-3 .5-3 2 2 0 3 0 3-2Z"}]]],ap=["svg",h,[["path",{d:"M12 3c-1.2 0-2.4.6-3 1.7A3.6 3.6 0 0 0 4.6 9c-1 .6-1.7 1.8-1.7 3s.7 2.4 1.7 3c-.3 1.2 0 2.5 1 3.4.8.8 2.1 1.2 3.3 1 .6 1 1.8 1.6 3 1.6s2.4-.6 3-1.7c1.2.3 2.5 0 3.4-1 .8-.8 1.2-2 1-3.3 1-.6 1.6-1.8 1.6-3s-.6-2.4-1.7-3c.3-1.2 0-2.5-1-3.4a3.7 3.7 0 0 0-3.3-1c-.6-1-1.8-1.6-3-1.6Z"}],["path",{d:"m9 12 2 2 4-4"}]]],hp=["svg",h,[["path",{d:"m2 8 2 2-2 2 2 2-2 2"}],["path",{d:"m22 8-2 2 2 2-2 2 2 2"}],["path",{d:"M8 8v10c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2"}],["path",{d:"M16 10.34V6c0-.55-.45-1-1-1h-4.34"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],tp=["svg",h,[["path",{d:"m2 8 2 2-2 2 2 2-2 2"}],["path",{d:"m22 8-2 2 2 2-2 2 2 2"}],["rect",{width:"8",height:"14",x:"8",y:"5",rx:"1"}]]],cp=["svg",h,[["path",{d:"M10.66 6H14a2 2 0 0 1 2 2v2.34l1 1L22 8v8"}],["path",{d:"M16 16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h2l10 10Z"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],dp=["svg",h,[["path",{d:"m22 8-6 4 6 4V8Z"}],["rect",{width:"14",height:"12",x:"2",y:"6",rx:"2",ry:"2"}]]],np=["svg",h,[["path",{d:"M5 12s2.545-5 7-5c4.454 0 7 5 7 5s-2.546 5-7 5c-4.455 0-7-5-7-5z"}],["path",{d:"M12 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-2"}],["path",{d:"M21 7V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2"}]]],ip=["svg",h,[["circle",{cx:"6",cy:"12",r:"4"}],["circle",{cx:"18",cy:"12",r:"4"}],["line",{x1:"6",x2:"18",y1:"16",y2:"16"}]]],lp=["svg",h,[["polygon",{points:"11 5 6 9 2 9 2 15 6 15 11 19 11 5"}],["path",{d:"M15.54 8.46a5 5 0 0 1 0 7.07"}]]],pp=["svg",h,[["polygon",{points:"11 5 6 9 2 9 2 15 6 15 11 19 11 5"}],["path",{d:"M15.54 8.46a5 5 0 0 1 0 7.07"}],["path",{d:"M19.07 4.93a10 10 0 0 1 0 14.14"}]]],ep=["svg",h,[["polygon",{points:"11 5 6 9 2 9 2 15 6 15 11 19 11 5"}],["line",{x1:"22",x2:"16",y1:"9",y2:"15"}],["line",{x1:"16",x2:"22",y1:"9",y2:"15"}]]],Mp=["svg",h,[["polygon",{points:"11 5 6 9 2 9 2 15 6 15 11 19 11 5"}]]],vp=["svg",h,[["path",{d:"m9 12 2 2 4-4"}],["path",{d:"M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z"}],["path",{d:"M22 19H2"}]]],op=["svg",h,[["path",{d:"M20 12V8H6a2 2 0 0 1-2-2c0-1.1.9-2 2-2h12v4"}],["path",{d:"M4 6v12c0 1.1.9 2 2 2h14v-4"}],["path",{d:"M18 12a2 2 0 0 0-2 2c0 1.1.9 2 2 2h4v-4h-4z"}]]],yp=["svg",h,[["path",{d:"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72Z"}],["path",{d:"m14 7 3 3"}],["path",{d:"M5 6v4"}],["path",{d:"M19 14v4"}],["path",{d:"M10 2v2"}],["path",{d:"M7 8H3"}],["path",{d:"M21 16h-4"}],["path",{d:"M11 3H9"}]]],sp=["svg",h,[["path",{d:"M15 4V2"}],["path",{d:"M15 16v-2"}],["path",{d:"M8 9h2"}],["path",{d:"M20 9h2"}],["path",{d:"M17.8 11.8 19 13"}],["path",{d:"M15 9h0"}],["path",{d:"M17.8 6.2 19 5"}],["path",{d:"m3 21 9-9"}],["path",{d:"M12.2 6.2 11 5"}]]],gp=["svg",h,[["path",{d:"M22 8.35V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8.35A2 2 0 0 1 3.26 6.5l8-3.2a2 2 0 0 1 1.48 0l8 3.2A2 2 0 0 1 22 8.35Z"}],["path",{d:"M6 18h12"}],["path",{d:"M6 14h12"}],["rect",{width:"12",height:"12",x:"6",y:"10"}]]],rp=["svg",h,[["circle",{cx:"12",cy:"12",r:"6"}],["polyline",{points:"12 10 12 12 13 13"}],["path",{d:"m16.13 7.66-.81-4.05a2 2 0 0 0-2-1.61h-2.68a2 2 0 0 0-2 1.61l-.78 4.05"}],["path",{d:"m7.88 16.36.8 4a2 2 0 0 0 2 1.61h2.72a2 2 0 0 0 2-1.61l.81-4.05"}]]],$p=["svg",h,[["path",{d:"M2 6c.6.5 1.2 1 2.5 1C7 7 7 5 9.5 5c2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1"}],["path",{d:"M2 12c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1"}],["path",{d:"M2 18c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1"}]]],mp=["svg",h,[["circle",{cx:"12",cy:"10",r:"8"}],["circle",{cx:"12",cy:"10",r:"3"}],["path",{d:"M7 22h10"}],["path",{d:"M12 22v-4"}]]],xp=["svg",h,[["path",{d:"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2"}],["path",{d:"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06"}],["path",{d:"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8"}]]],Hp=["svg",h,[["path",{d:"m2 22 10-10"}],["path",{d:"m16 8-1.17 1.17"}],["path",{d:"M3.47 12.53 5 11l1.53 1.53a3.5 3.5 0 0 1 0 4.94L5 19l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z"}],["path",{d:"m8 8-.53.53a3.5 3.5 0 0 0 0 4.94L9 15l1.53-1.53c.55-.55.88-1.25.98-1.97"}],["path",{d:"M10.91 5.26c.15-.26.34-.51.56-.73L13 3l1.53 1.53a3.5 3.5 0 0 1 .28 4.62"}],["path",{d:"M20 2h2v2a4 4 0 0 1-4 4h-2V6a4 4 0 0 1 4-4Z"}],["path",{d:"M11.47 17.47 13 19l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L5 19l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z"}],["path",{d:"m16 16-.53.53a3.5 3.5 0 0 1-4.94 0L9 15l1.53-1.53a3.49 3.49 0 0 1 1.97-.98"}],["path",{d:"M18.74 13.09c.26-.15.51-.34.73-.56L21 11l-1.53-1.53a3.5 3.5 0 0 0-4.62-.28"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],Cp=["svg",h,[["path",{d:"M2 22 16 8"}],["path",{d:"M3.47 12.53 5 11l1.53 1.53a3.5 3.5 0 0 1 0 4.94L5 19l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z"}],["path",{d:"M7.47 8.53 9 7l1.53 1.53a3.5 3.5 0 0 1 0 4.94L9 15l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z"}],["path",{d:"M11.47 4.53 13 3l1.53 1.53a3.5 3.5 0 0 1 0 4.94L13 11l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z"}],["path",{d:"M20 2h2v2a4 4 0 0 1-4 4h-2V6a4 4 0 0 1 4-4Z"}],["path",{d:"M11.47 17.47 13 19l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L5 19l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z"}],["path",{d:"M15.47 13.47 17 15l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L9 15l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z"}],["path",{d:"M19.47 9.47 21 11l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L13 11l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z"}]]],Vp=["svg",h,[["circle",{cx:"17",cy:"12",r:"3"}],["line",{x1:"14",x2:"14",y1:"7",y2:"15"}],["circle",{cx:"7",cy:"12",r:"3"}],["line",{x1:"10",x2:"10",y1:"9",y2:"15"}],["polyline",{points:"22,17 22,19 2,19 2,17"}]]],up=["svg",h,[["line",{x1:"2",x2:"22",y1:"2",y2:"22"}],["path",{d:"M8.5 16.5a5 5 0 0 1 7 0"}],["path",{d:"M2 8.82a15 15 0 0 1 4.17-2.65"}],["path",{d:"M10.66 5c4.01-.36 8.14.9 11.34 3.76"}],["path",{d:"M16.85 11.25a10 10 0 0 1 2.22 1.68"}],["path",{d:"M5 13a10 10 0 0 1 5.24-2.76"}],["line",{x1:"12",x2:"12.01",y1:"20",y2:"20"}]]],Ap=["svg",h,[["path",{d:"M5 13a10 10 0 0 1 14 0"}],["path",{d:"M8.5 16.5a5 5 0 0 1 7 0"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0"}],["line",{x1:"12",x2:"12.01",y1:"20",y2:"20"}]]],wp=["svg",h,[["path",{d:"M17.7 7.7a2.5 2.5 0 1 1 1.8 4.3H2"}],["path",{d:"M9.6 4.6A2 2 0 1 1 11 8H2"}],["path",{d:"M12.6 19.4A2 2 0 1 0 14 16H2"}]]],Lp=["svg",h,[["path",{d:"M8 22h8"}],["path",{d:"M7 10h3m7 0h-1.343"}],["path",{d:"M12 15v7"}],["path",{d:"M7.307 7.307A12.33 12.33 0 0 0 7 10a5 5 0 0 0 7.391 4.391M8.638 2.981C8.75 2.668 8.872 2.34 9 2h6c1.5 4 2 6 2 8 0 .407-.05.809-.145 1.198"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],Sp=["svg",h,[["path",{d:"M8 22h8"}],["path",{d:"M7 10h10"}],["path",{d:"M12 15v7"}],["path",{d:"M12 15a5 5 0 0 0 5-5c0-2-.5-4-2-8H9c-1.5 4-2 6-2 8a5 5 0 0 0 5 5Z"}]]],fp=["svg",h,[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2"}]]],kp=["svg",h,[["line",{x1:"3",x2:"21",y1:"6",y2:"6"}],["path",{d:"M3 12h15a3 3 0 1 1 0 6h-4"}],["polyline",{points:"16 16 14 18 16 20"}],["line",{x1:"3",x2:"10",y1:"18",y2:"18"}]]],Fp=["svg",h,[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"}]]],Zp=["svg",h,[["circle",{cx:"12",cy:"12",r:"10"}],["line",{x1:"15",x2:"9",y1:"9",y2:"15"}],["line",{x1:"9",x2:"15",y1:"9",y2:"15"}]]],zp=["svg",h,[["polygon",{points:"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"}],["line",{x1:"15",x2:"9",y1:"9",y2:"15"}],["line",{x1:"9",x2:"15",y1:"9",y2:"15"}]]],Bp=["svg",h,[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["line",{x1:"9",x2:"15",y1:"9",y2:"15"}],["line",{x1:"15",x2:"9",y1:"9",y2:"15"}]]],Pp=["svg",h,[["line",{x1:"18",x2:"6",y1:"6",y2:"18"}],["line",{x1:"6",x2:"18",y1:"6",y2:"18"}]]],Dp=["svg",h,[["path",{d:"M2.5 17a24.12 24.12 0 0 1 0-10 2 2 0 0 1 1.4-1.4 49.56 49.56 0 0 1 16.2 0A2 2 0 0 1 21.5 7a24.12 24.12 0 0 1 0 10 2 2 0 0 1-1.4 1.4 49.55 49.55 0 0 1-16.2 0A2 2 0 0 1 2.5 17"}],["path",{d:"m10 15 5-3-5-3z"}]]],bp=["svg",h,[["polyline",{points:"12.41 6.75 13 2 10.57 4.92"}],["polyline",{points:"18.57 12.91 21 10 15.66 10"}],["polyline",{points:"8 8 3 14 12 14 11 22 16 16"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22"}]]],Op=["svg",h,[["polygon",{points:"13 2 3 14 12 14 11 22 21 10 12 10 13 2"}]]],Rp=["svg",h,[["circle",{cx:"11",cy:"11",r:"8"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11"}]]],Tp=["svg",h,[["circle",{cx:"11",cy:"11",r:"8"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11"}]]];var Up=Object.freeze({__proto__:null,Accessibility:M,Activity:v,AirVent:o,Airplay:y,AlarmCheck:s,AlarmClockOff:g,AlarmClock:r,AlarmMinus:$,AlarmPlus:m,Album:x,AlertCircle:H,AlertOctagon:C,AlertTriangle:V,AlignCenterHorizontal:u,AlignCenterVertical:A,AlignCenter:w,AlignEndHorizontal:L,AlignEndVertical:S,AlignHorizontalDistributeCenter:f,AlignHorizontalDistributeEnd:k,AlignHorizontalDistributeStart:F,AlignHorizontalJustifyCenter:Z,AlignHorizontalJustifyEnd:z,AlignHorizontalJustifyStart:B,AlignHorizontalSpaceAround:P,AlignHorizontalSpaceBetween:D,AlignJustify:b,AlignLeft:O,AlignRight:R,AlignStartHorizontal:T,AlignStartVertical:U,AlignVerticalDistributeCenter:G,AlignVerticalDistributeEnd:E,AlignVerticalDistributeStart:W,AlignVerticalJustifyCenter:I,AlignVerticalJustifyEnd:q,AlignVerticalJustifyStart:N,AlignVerticalSpaceAround:X,AlignVerticalSpaceBetween:J,Anchor:j,Angry:K,Annoyed:Q,Aperture:_,Apple:Y,ArchiveRestore:a1,Archive:h1,Armchair:t1,ArrowBigDownDash:c1,ArrowBigDown:d1,ArrowBigLeftDash:n1,ArrowBigLeft:i1,ArrowBigRightDash:l1,ArrowBigRight:p1,ArrowBigUpDash:e1,ArrowBigUp:M1,ArrowDown01:v1,ArrowDown10:o1,ArrowDownAZ:y1,ArrowDownCircle:s1,ArrowDownLeftFromCircle:g1,ArrowDownLeft:r1,ArrowDownNarrowWide:$1,ArrowDownRightFromCircle:m1,ArrowDownRight:x1,ArrowDownUp:H1,ArrowDownWideNarrow:C1,ArrowDownZA:V1,ArrowDown:u1,ArrowLeftCircle:A1,ArrowLeftRight:w1,ArrowLeft:L1,ArrowRightCircle:S1,ArrowRightLeft:f1,ArrowRight:k1,ArrowUp01:F1,ArrowUp10:Z1,ArrowUpAZ:z1,ArrowUpCircle:B1,ArrowUpDown:P1,ArrowUpLeftFromCircle:D1,ArrowUpLeft:b1,ArrowUpNarrowWide:O1,ArrowUpRightFromCircle:R1,ArrowUpRight:T1,ArrowUpWideNarrow:U1,ArrowUpZA:G1,ArrowUp:E1,Asterisk:W1,AtSign:I1,Atom:q1,Award:N1,Axe:X1,Axis3d:J1,Baby:j1,Backpack:K1,BaggageClaim:Q1,Ban:_1,Banana:Y1,Banknote:a2,BarChart2:h2,BarChart3:t2,BarChart4:c2,BarChartHorizontal:d2,BarChart:n2,Baseline:i2,Bath:l2,BatteryCharging:p2,BatteryFull:e2,BatteryLow:M2,BatteryMedium:v2,BatteryWarning:o2,Battery:y2,Beaker:s2,BeanOff:g2,Bean:r2,BedDouble:$2,BedSingle:m2,Bed:x2,Beef:H2,Beer:C2,BellMinus:V2,BellOff:u2,BellPlus:A2,BellRing:w2,Bell:L2,Bike:S2,Binary:f2,Bird:k2,Bitcoin:F2,Blinds:Z2,BluetoothConnected:z2,BluetoothOff:B2,BluetoothSearching:P2,Bluetooth:D2,Bold:b2,Bomb:O2,Bone:R2,BookCopy:T2,BookDown:U2,BookKey:G2,BookLock:E2,BookMarked:W2,BookMinus:I2,BookOpenCheck:q2,BookOpen:N2,BookPlus:X2,BookTemplate:J2,BookUp:j2,BookX:K2,Book:Q2,BookmarkMinus:_2,BookmarkPlus:Y2,Bookmark:a0,Bot:h0,BoxSelect:t0,Box:c0,Boxes:d0,BrainCircuit:n0,BrainCog:i0,Brain:l0,Briefcase:p0,Brush:e0,Bug:M0,Building2:v0,Building:o0,Bus:y0,Cake:s0,Calculator:g0,CalendarCheck2:r0,CalendarCheck:$0,CalendarClock:m0,CalendarDays:x0,CalendarHeart:H0,CalendarMinus:C0,CalendarOff:V0,CalendarPlus:u0,CalendarRange:A0,CalendarSearch:w0,CalendarX2:L0,CalendarX:S0,Calendar:f0,CameraOff:k0,Camera:F0,CandyOff:Z0,Candy:z0,Car:B0,Carrot:P0,CaseLower:D0,CaseSensitive:b0,CaseUpper:O0,Cast:R0,Castle:T0,Cat:U0,CheckCheck:G0,CheckCircle2:E0,CheckCircle:W0,CheckSquare:I0,Check:q0,ChefHat:N0,Cherry:X0,ChevronDownSquare:J0,ChevronDown:j0,ChevronFirst:K0,ChevronLast:Q0,ChevronLeftSquare:_0,ChevronLeft:Y0,ChevronRightSquare:aa,ChevronRight:ha,ChevronUpSquare:ta,ChevronUp:ca,ChevronsDownUp:da,ChevronsDown:na,ChevronsLeftRight:ia,ChevronsLeft:la,ChevronsRightLeft:pa,ChevronsRight:ea,ChevronsUpDown:Ma,ChevronsUp:va,Chrome:oa,Church:ya,CigaretteOff:sa,Cigarette:ga,CircleDot:ra,CircleEllipsis:$a,CircleEqual:ma,CircleOff:xa,CircleSlash2:Ha,CircleSlash:Ca,Circle:Va,CircuitBoard:ua,Citrus:Aa,Clapperboard:wa,ClipboardCheck:La,ClipboardCopy:Sa,ClipboardEdit:fa,ClipboardList:ka,ClipboardPaste:Fa,ClipboardSignature:Za,ClipboardType:za,ClipboardX:Ba,Clipboard:Pa,Clock1:Da,Clock10:ba,Clock11:Oa,Clock12:Ra,Clock2:Ta,Clock3:Ua,Clock4:Ga,Clock5:Ea,Clock6:Wa,Clock7:Ia,Clock8:qa,Clock9:Na,Clock:Xa,CloudCog:Ja,CloudDrizzle:ja,CloudFog:Ka,CloudHail:Qa,CloudLightning:_a,CloudMoonRain:Ya,CloudMoon:ah,CloudOff:hh,CloudRainWind:th,CloudRain:ch,CloudSnow:dh,CloudSunRain:nh,CloudSun:ih,Cloud:lh,Cloudy:ph,Clover:eh,Code2:Mh,Code:vh,Codepen:oh,Codesandbox:yh,Coffee:sh,Cog:gh,Coins:rh,Columns:$h,Command:mh,Compass:xh,Component:Hh,ConciergeBell:Ch,Construction:Vh,Contact:uh,Contrast:Ah,Cookie:wh,CopyCheck:Lh,CopyMinus:Sh,CopyPlus:fh,CopySlash:kh,CopyX:Fh,Copy:Zh,Copyleft:zh,Copyright:Bh,CornerDownLeft:Ph,CornerDownRight:Dh,CornerLeftDown:bh,CornerLeftUp:Oh,CornerRightDown:Rh,CornerRightUp:Th,CornerUpLeft:Uh,CornerUpRight:Gh,Cpu:Eh,CreativeCommons:Wh,CreditCard:Ih,Croissant:qh,Crop:Nh,Cross:Xh,Crosshair:Jh,Crown:jh,CupSoda:Kh,CurlyBraces:Qh,Currency:_h,DatabaseBackup:Yh,Database:at,Delete:ht,Diamond:tt,Dice1:ct,Dice2:dt,Dice3:nt,Dice4:it,Dice5:lt,Dice6:pt,Dices:et,Diff:Mt,Disc2:vt,Disc:ot,DivideCircle:yt,DivideSquare:st,Divide:gt,DnaOff:rt,Dna:$t,Dog:mt,DollarSign:xt,DoorClosed:Ht,DoorOpen:Ct,DownloadCloud:Vt,Download:ut,Dribbble:At,Droplet:wt,Droplets:Lt,Drumstick:St,Dumbbell:ft,EarOff:kt,Ear:Ft,Edit2:Zt,Edit3:zt,Edit:Bt,EggFried:Pt,EggOff:Dt,Egg:bt,EqualNot:Ot,Equal:Rt,Eraser:Tt,Euro:Ut,Expand:Gt,ExternalLink:Et,EyeOff:Wt,Eye:It,Facebook:qt,Factory:Nt,Fan:Xt,FastForward:Jt,Feather:jt,Figma:Kt,FileArchive:Qt,FileAudio2:_t,FileAudio:Yt,FileAxis3d:a5,FileBadge2:h5,FileBadge:t5,FileBarChart2:c5,FileBarChart:d5,FileBox:n5,FileCheck2:i5,FileCheck:l5,FileClock:p5,FileCode:e5,FileCog2:M5,FileCog:v5,FileDiff:o5,FileDigit:y5,FileDown:s5,FileEdit:g5,FileHeart:r5,FileImage:$5,FileInput:m5,FileJson2:x5,FileJson:H5,FileKey2:C5,FileKey:V5,FileLineChart:u5,FileLock2:A5,FileLock:w5,FileMinus2:L5,FileMinus:S5,FileOutput:f5,FilePieChart:k5,FilePlus2:F5,FilePlus:Z5,FileQuestion:z5,FileScan:B5,FileSearch2:P5,FileSearch:D5,FileSignature:b5,FileSpreadsheet:O5,FileSymlink:R5,FileTerminal:T5,FileText:U5,FileType2:G5,FileType:E5,FileUp:W5,FileVideo2:I5,FileVideo:q5,FileVolume2:N5,FileVolume:X5,FileWarning:J5,FileX2:j5,FileX:K5,File:Q5,Files:_5,Film:Y5,FilterX:a4,Filter:h4,Fingerprint:t4,FishOff:c4,Fish:d4,FlagOff:n4,FlagTriangleLeft:i4,FlagTriangleRight:l4,Flag:p4,Flame:e4,FlashlightOff:M4,Flashlight:v4,FlaskConicalOff:o4,FlaskConical:y4,FlaskRound:s4,FlipHorizontal2:g4,FlipHorizontal:r4,FlipVertical2:$4,FlipVertical:m4,Flower2:x4,Flower:H4,Focus:C4,FolderArchive:V4,FolderCheck:u4,FolderClock:A4,FolderClosed:w4,FolderCog2:L4,FolderCog:S4,FolderDown:f4,FolderEdit:k4,FolderGit2:F4,FolderGit:Z4,FolderHeart:z4,FolderInput:B4,FolderKey:P4,FolderLock:D4,FolderMinus:b4,FolderOpen:O4,FolderOutput:R4,FolderPlus:T4,FolderSearch2:U4,FolderSearch:G4,FolderSymlink:E4,FolderTree:W4,FolderUp:I4,FolderX:q4,Folder:N4,Folders:X4,Footprints:J4,Forklift:j4,FormInput:K4,Forward:Q4,Frame:_4,Framer:Y4,Frown:a3,Fuel:h3,FunctionSquare:t3,Gamepad2:c3,Gamepad:d3,Gauge:n3,Gavel:i3,Gem:l3,Ghost:p3,Gift:e3,GitBranchPlus:M3,GitBranch:v3,GitCommit:o3,GitCompare:y3,GitFork:s3,GitMerge:g3,GitPullRequestClosed:r3,GitPullRequestDraft:$3,GitPullRequest:m3,Github:x3,Gitlab:H3,GlassWater:C3,Glasses:V3,Globe2:u3,Globe:A3,Grab:w3,GraduationCap:L3,Grape:S3,Grid:f3,GripHorizontal:k3,GripVertical:F3,Grip:Z3,Hammer:z3,HandMetal:B3,Hand:P3,HardDrive:D3,HardHat:b3,Hash:O3,Haze:R3,Heading1:T3,Heading2:U3,Heading3:G3,Heading4:E3,Heading5:W3,Heading6:I3,Heading:q3,Headphones:N3,HeartCrack:X3,HeartHandshake:J3,HeartOff:j3,HeartPulse:K3,Heart:Q3,HelpCircle:_3,HelpingHand:Y3,Hexagon:ac,Highlighter:hc,History:tc,Home:cc,HopOff:dc,Hop:nc,Hotel:ic,Hourglass:lc,IceCream2:pc,IceCream:ec,ImageMinus:Mc,ImageOff:vc,ImagePlus:oc,Image:yc,Import:sc,Inbox:gc,Indent:rc,IndianRupee:$c,Infinity:mc,Info:xc,Inspect:Hc,Instagram:Cc,Italic:Vc,IterationCcw:uc,IterationCw:Ac,JapaneseYen:wc,Joystick:Lc,Key:Sc,Keyboard:fc,LampCeiling:kc,LampDesk:Fc,LampFloor:Zc,LampWallDown:zc,LampWallUp:Bc,Lamp:Pc,Landmark:Dc,Languages:bc,Laptop2:Oc,Laptop:Rc,LassoSelect:Tc,Lasso:Uc,Laugh:Gc,Layers:Ec,LayoutDashboard:Wc,LayoutGrid:Ic,LayoutList:qc,LayoutTemplate:Nc,Layout:Xc,Leaf:Jc,Library:jc,LifeBuoy:Kc,LightbulbOff:Qc,Lightbulb:_c,LineChart:Yc,Link2Off:a6,Link2:h6,Link:t6,Linkedin:c6,ListChecks:d6,ListEnd:n6,ListMinus:i6,ListMusic:l6,ListOrdered:p6,ListPlus:e6,ListStart:M6,ListTree:v6,ListVideo:o6,ListX:y6,List:s6,Loader2:g6,Loader:r6,LocateFixed:$6,LocateOff:m6,Locate:x6,Lock:H6,LogIn:C6,LogOut:V6,Luggage:u6,Magnet:A6,MailCheck:w6,MailMinus:L6,MailOpen:S6,MailPlus:f6,MailQuestion:k6,MailSearch:F6,MailWarning:Z6,MailX:z6,Mail:B6,Mailbox:P6,Mails:D6,MapPinOff:b6,MapPin:O6,Map:R6,Martini:T6,Maximize2:U6,Maximize:G6,Medal:E6,MegaphoneOff:W6,Megaphone:I6,Meh:q6,Menu:N6,MessageCircle:X6,MessageSquareDashed:J6,MessageSquarePlus:j6,MessageSquare:K6,MessagesSquare:Q6,Mic2:_6,MicOff:Y6,Mic:ad,Microscope:hd,Microwave:td,Milestone:cd,MilkOff:dd,Milk:nd,Minimize2:id,Minimize:ld,MinusCircle:pd,MinusSquare:ed,Minus:Md,MonitorDown:vd,MonitorOff:od,MonitorSmartphone:yd,MonitorSpeaker:sd,MonitorUp:gd,Monitor:rd,MoonStar:$d,Moon:md,MoreHorizontal:xd,MoreVertical:Hd,MountainSnow:Cd,Mountain:Vd,MousePointer2:ud,MousePointerClick:Ad,MousePointer:wd,Mouse:Ld,Move3d:Sd,MoveDiagonal2:fd,MoveDiagonal:kd,MoveHorizontal:Fd,MoveVertical:Zd,Move:zd,Music2:Bd,Music3:Pd,Music4:Dd,Music:bd,Navigation2Off:Od,Navigation2:Rd,NavigationOff:Td,Navigation:Ud,Network:Gd,Newspaper:Ed,Nfc:Wd,NutOff:Id,Nut:qd,Octagon:Nd,Option:Xd,Orbit:Jd,Outdent:jd,Package2:Kd,PackageCheck:Qd,PackageMinus:_d,PackageOpen:Yd,PackagePlus:a8,PackageSearch:h8,PackageX:t8,Package:c8,PaintBucket:d8,Paintbrush2:n8,Paintbrush:i8,Palette:l8,Palmtree:p8,Paperclip:e8,ParkingCircleOff:M8,ParkingCircle:v8,ParkingSquareOff:o8,ParkingSquare:y8,PartyPopper:s8,PauseCircle:g8,PauseOctagon:r8,Pause:$8,PenTool:m8,Pencil:x8,Percent:H8,PersonStanding:C8,PhoneCall:V8,PhoneForwarded:u8,PhoneIncoming:A8,PhoneMissed:w8,PhoneOff:L8,PhoneOutgoing:S8,Phone:f8,PictureInPicture2:k8,PictureInPicture:F8,PieChart:Z8,PiggyBank:z8,Pilcrow:B8,Pill:P8,PinOff:D8,Pin:b8,Pipette:O8,Pizza:R8,PlaneLanding:T8,PlaneTakeoff:U8,Plane:G8,PlayCircle:E8,Play:W8,Plug2:I8,PlugZap:q8,Plug:N8,PlusCircle:X8,PlusSquare:J8,Plus:j8,Pocket:K8,Podcast:Q8,Pointer:_8,PoundSterling:Y8,PowerOff:a7,Power:h7,Printer:t7,Puzzle:c7,QrCode:d7,Quote:n7,RadioReceiver:i7,RadioTower:l7,Radio:p7,Rat:e7,Receipt:M7,RectangleHorizontal:v7,RectangleVertical:o7,Recycle:y7,Redo2:s7,Redo:g7,RefreshCcw:r7,RefreshCw:$7,Refrigerator:m7,Regex:x7,RemoveFormatting:H7,Repeat1:C7,Repeat2:V7,Repeat:u7,ReplaceAll:A7,Replace:w7,ReplyAll:L7,Reply:S7,Rewind:f7,Rocket:k7,RockingChair:F7,Rotate3d:Z7,RotateCcw:z7,RotateCw:B7,Router:P7,Rss:D7,Ruler:b7,RussianRuble:O7,Sailboat:R7,Salad:T7,Sandwich:U7,SaveAll:G7,Save:E7,Scale3d:W7,Scale:I7,Scaling:q7,ScanFace:N7,ScanLine:X7,Scan:J7,School2:j7,School:K7,Scissors:Q7,ScreenShareOff:_7,ScreenShare:Y7,Scroll:an,Search:hn,Send:tn,SeparatorHorizontal:cn,SeparatorVertical:dn,ServerCog:nn,ServerCrash:ln,ServerOff:pn,Server:en,Settings2:Mn,Settings:vn,Share2:on,Share:yn,Sheet:sn,ShieldAlert:gn,ShieldCheck:rn,ShieldClose:$n,ShieldOff:mn,ShieldQuestion:xn,Shield:Hn,Ship:Cn,Shirt:Vn,ShoppingBag:un,ShoppingCart:An,Shovel:wn,ShowerHead:Ln,Shrink:Sn,Shrub:fn,Shuffle:kn,SidebarClose:Fn,SidebarOpen:Zn,Sidebar:zn,Sigma:Bn,SignalHigh:Pn,SignalLow:Dn,SignalMedium:bn,SignalZero:On,Signal:Rn,Siren:Tn,SkipBack:Un,SkipForward:Gn,Skull:En,Slack:Wn,Slice:In,SlidersHorizontal:qn,Sliders:Nn,SmartphoneCharging:Xn,SmartphoneNfc:Jn,Smartphone:jn,SmilePlus:Kn,Smile:Qn,Snowflake:_n,Sofa:Yn,Soup:ai,Space:hi,Speaker:ti,Spline:ci,SplitSquareHorizontal:di,SplitSquareVertical:ni,Sprout:ii,Square:li,Stamp:pi,StarHalf:ei,StarOff:Mi,Star:vi,Stars:oi,StepBack:yi,StepForward:si,Stethoscope:gi,Sticker:ri,StickyNote:$i,StopCircle:mi,Store:xi,StretchHorizontal:Hi,StretchVertical:Ci,Strikethrough:Vi,Subscript:ui,Subtitles:Ai,SunDim:wi,SunMedium:Li,SunMoon:Si,SunSnow:fi,Sun:ki,Sunrise:Fi,Sunset:Zi,Superscript:zi,SwissFranc:Bi,SwitchCamera:Pi,Sword:Di,Swords:bi,Syringe:Oi,Table2:Ri,Table:Ti,Tablet:Ui,Tablets:Gi,Tag:Ei,Tags:Wi,Target:Ii,Tent:qi,TerminalSquare:Ni,Terminal:Xi,TestTube2:Ji,TestTube:ji,TestTubes:Ki,TextCursorInput:Qi,TextCursor:_i,TextSelection:Yi,Text:al,ThermometerSnowflake:hl,ThermometerSun:tl,Thermometer:cl,ThumbsDown:dl,ThumbsUp:nl,Ticket:il,TimerOff:ll,TimerReset:pl,Timer:el,ToggleLeft:Ml,ToggleRight:vl,Tornado:ol,TowerControl:yl,ToyBrick:sl,Train:gl,Trash2:rl,Trash:$l,TreeDeciduous:ml,TreePine:xl,Trees:Hl,Trello:Cl,TrendingDown:Vl,TrendingUp:ul,Triangle:Al,Trophy:wl,Truck:Ll,Tv2:Sl,Tv:fl,Twitch:kl,Twitter:Fl,Type:Zl,Umbrella:zl,Underline:Bl,Undo2:Pl,Undo:Dl,Unlink2:bl,Unlink:Ol,Unlock:Rl,UploadCloud:Tl,Upload:Ul,Usb:Gl,UserCheck:El,UserCog:Wl,UserMinus:Il,UserPlus:ql,UserX:Nl,User:Xl,Users:Jl,UtensilsCrossed:jl,Utensils:Kl,UtilityPole:Ql,Vegan:_l,VenetianMask:Yl,Verified:ap,VibrateOff:hp,Vibrate:tp,VideoOff:cp,Video:dp,View:np,Voicemail:ip,Volume1:lp,Volume2:pp,VolumeX:ep,Volume:Mp,Vote:vp,Wallet:op,Wand2:yp,Wand:sp,Warehouse:gp,Watch:rp,Waves:$p,Webcam:mp,Webhook:xp,WheatOff:Hp,Wheat:Cp,WholeWord:Vp,WifiOff:up,Wifi:Ap,Wind:wp,WineOff:Lp,Wine:Sp,Workflow:fp,WrapText:kp,Wrench:Fp,XCircle:Zp,XOctagon:zp,XSquare:Bp,X:Pp,Youtube:Dp,ZapOff:bp,Zap:Op,ZoomIn:Rp,ZoomOut:Tp});const Kp=({icons:t=Up,nameAttr:c="icon-name",attrs:d={}}={})=>{if(!Object.values(t).length)throw new Error(`Please provide an icons object. -If you want to use all the icons you can import it like: - \`import { createIcons, icons } from 'lucide'; -lucide.createIcons({icons});\``);if(typeof document>"u")throw new Error("`createIcons()` only works in a browser environment.");const n=document.querySelectorAll(`[${c}]`);Array.from(n).forEach(i=>jp(i,{nameAttr:c,icons:t,attrs:d}))};a.Accessibility=M,a.Activity=v,a.AirVent=o,a.Airplay=y,a.AlarmCheck=s,a.AlarmClock=r,a.AlarmClockOff=g,a.AlarmMinus=$,a.AlarmPlus=m,a.Album=x,a.AlertCircle=H,a.AlertOctagon=C,a.AlertTriangle=V,a.AlignCenter=w,a.AlignCenterHorizontal=u,a.AlignCenterVertical=A,a.AlignEndHorizontal=L,a.AlignEndVertical=S,a.AlignHorizontalDistributeCenter=f,a.AlignHorizontalDistributeEnd=k,a.AlignHorizontalDistributeStart=F,a.AlignHorizontalJustifyCenter=Z,a.AlignHorizontalJustifyEnd=z,a.AlignHorizontalJustifyStart=B,a.AlignHorizontalSpaceAround=P,a.AlignHorizontalSpaceBetween=D,a.AlignJustify=b,a.AlignLeft=O,a.AlignRight=R,a.AlignStartHorizontal=T,a.AlignStartVertical=U,a.AlignVerticalDistributeCenter=G,a.AlignVerticalDistributeEnd=E,a.AlignVerticalDistributeStart=W,a.AlignVerticalJustifyCenter=I,a.AlignVerticalJustifyEnd=q,a.AlignVerticalJustifyStart=N,a.AlignVerticalSpaceAround=X,a.AlignVerticalSpaceBetween=J,a.Anchor=j,a.Angry=K,a.Annoyed=Q,a.Aperture=_,a.Apple=Y,a.Archive=h1,a.ArchiveRestore=a1,a.Armchair=t1,a.ArrowBigDown=d1,a.ArrowBigDownDash=c1,a.ArrowBigLeft=i1,a.ArrowBigLeftDash=n1,a.ArrowBigRight=p1,a.ArrowBigRightDash=l1,a.ArrowBigUp=M1,a.ArrowBigUpDash=e1,a.ArrowDown=u1,a.ArrowDown01=v1,a.ArrowDown10=o1,a.ArrowDownAZ=y1,a.ArrowDownCircle=s1,a.ArrowDownLeft=r1,a.ArrowDownLeftFromCircle=g1,a.ArrowDownNarrowWide=$1,a.ArrowDownRight=x1,a.ArrowDownRightFromCircle=m1,a.ArrowDownUp=H1,a.ArrowDownWideNarrow=C1,a.ArrowDownZA=V1,a.ArrowLeft=L1,a.ArrowLeftCircle=A1,a.ArrowLeftRight=w1,a.ArrowRight=k1,a.ArrowRightCircle=S1,a.ArrowRightLeft=f1,a.ArrowUp=E1,a.ArrowUp01=F1,a.ArrowUp10=Z1,a.ArrowUpAZ=z1,a.ArrowUpCircle=B1,a.ArrowUpDown=P1,a.ArrowUpLeft=b1,a.ArrowUpLeftFromCircle=D1,a.ArrowUpNarrowWide=O1,a.ArrowUpRight=T1,a.ArrowUpRightFromCircle=R1,a.ArrowUpWideNarrow=U1,a.ArrowUpZA=G1,a.Asterisk=W1,a.AtSign=I1,a.Atom=q1,a.Award=N1,a.Axe=X1,a.Axis3d=J1,a.Baby=j1,a.Backpack=K1,a.BaggageClaim=Q1,a.Ban=_1,a.Banana=Y1,a.Banknote=a2,a.BarChart=n2,a.BarChart2=h2,a.BarChart3=t2,a.BarChart4=c2,a.BarChartHorizontal=d2,a.Baseline=i2,a.Bath=l2,a.Battery=y2,a.BatteryCharging=p2,a.BatteryFull=e2,a.BatteryLow=M2,a.BatteryMedium=v2,a.BatteryWarning=o2,a.Beaker=s2,a.Bean=r2,a.BeanOff=g2,a.Bed=x2,a.BedDouble=$2,a.BedSingle=m2,a.Beef=H2,a.Beer=C2,a.Bell=L2,a.BellMinus=V2,a.BellOff=u2,a.BellPlus=A2,a.BellRing=w2,a.Bike=S2,a.Binary=f2,a.Bird=k2,a.Bitcoin=F2,a.Blinds=Z2,a.Bluetooth=D2,a.BluetoothConnected=z2,a.BluetoothOff=B2,a.BluetoothSearching=P2,a.Bold=b2,a.Bomb=O2,a.Bone=R2,a.Book=Q2,a.BookCopy=T2,a.BookDown=U2,a.BookKey=G2,a.BookLock=E2,a.BookMarked=W2,a.BookMinus=I2,a.BookOpen=N2,a.BookOpenCheck=q2,a.BookPlus=X2,a.BookTemplate=J2,a.BookUp=j2,a.BookX=K2,a.Bookmark=a0,a.BookmarkMinus=_2,a.BookmarkPlus=Y2,a.Bot=h0,a.Box=c0,a.BoxSelect=t0,a.Boxes=d0,a.Brain=l0,a.BrainCircuit=n0,a.BrainCog=i0,a.Briefcase=p0,a.Brush=e0,a.Bug=M0,a.Building=o0,a.Building2=v0,a.Bus=y0,a.Cake=s0,a.Calculator=g0,a.Calendar=f0,a.CalendarCheck=$0,a.CalendarCheck2=r0,a.CalendarClock=m0,a.CalendarDays=x0,a.CalendarHeart=H0,a.CalendarMinus=C0,a.CalendarOff=V0,a.CalendarPlus=u0,a.CalendarRange=A0,a.CalendarSearch=w0,a.CalendarX=S0,a.CalendarX2=L0,a.Camera=F0,a.CameraOff=k0,a.Candy=z0,a.CandyOff=Z0,a.Car=B0,a.Carrot=P0,a.CaseLower=D0,a.CaseSensitive=b0,a.CaseUpper=O0,a.Cast=R0,a.Castle=T0,a.Cat=U0,a.Check=q0,a.CheckCheck=G0,a.CheckCircle=W0,a.CheckCircle2=E0,a.CheckSquare=I0,a.ChefHat=N0,a.Cherry=X0,a.ChevronDown=j0,a.ChevronDownSquare=J0,a.ChevronFirst=K0,a.ChevronLast=Q0,a.ChevronLeft=Y0,a.ChevronLeftSquare=_0,a.ChevronRight=ha,a.ChevronRightSquare=aa,a.ChevronUp=ca,a.ChevronUpSquare=ta,a.ChevronsDown=na,a.ChevronsDownUp=da,a.ChevronsLeft=la,a.ChevronsLeftRight=ia,a.ChevronsRight=ea,a.ChevronsRightLeft=pa,a.ChevronsUp=va,a.ChevronsUpDown=Ma,a.Chrome=oa,a.Church=ya,a.Cigarette=ga,a.CigaretteOff=sa,a.Circle=Va,a.CircleDot=ra,a.CircleEllipsis=$a,a.CircleEqual=ma,a.CircleOff=xa,a.CircleSlash=Ca,a.CircleSlash2=Ha,a.CircuitBoard=ua,a.Citrus=Aa,a.Clapperboard=wa,a.Clipboard=Pa,a.ClipboardCheck=La,a.ClipboardCopy=Sa,a.ClipboardEdit=fa,a.ClipboardList=ka,a.ClipboardPaste=Fa,a.ClipboardSignature=Za,a.ClipboardType=za,a.ClipboardX=Ba,a.Clock=Xa,a.Clock1=Da,a.Clock10=ba,a.Clock11=Oa,a.Clock12=Ra,a.Clock2=Ta,a.Clock3=Ua,a.Clock4=Ga,a.Clock5=Ea,a.Clock6=Wa,a.Clock7=Ia,a.Clock8=qa,a.Clock9=Na,a.Cloud=lh,a.CloudCog=Ja,a.CloudDrizzle=ja,a.CloudFog=Ka,a.CloudHail=Qa,a.CloudLightning=_a,a.CloudMoon=ah,a.CloudMoonRain=Ya,a.CloudOff=hh,a.CloudRain=ch,a.CloudRainWind=th,a.CloudSnow=dh,a.CloudSun=ih,a.CloudSunRain=nh,a.Cloudy=ph,a.Clover=eh,a.Code=vh,a.Code2=Mh,a.Codepen=oh,a.Codesandbox=yh,a.Coffee=sh,a.Cog=gh,a.Coins=rh,a.Columns=$h,a.Command=mh,a.Compass=xh,a.Component=Hh,a.ConciergeBell=Ch,a.Construction=Vh,a.Contact=uh,a.Contrast=Ah,a.Cookie=wh,a.Copy=Zh,a.CopyCheck=Lh,a.CopyMinus=Sh,a.CopyPlus=fh,a.CopySlash=kh,a.CopyX=Fh,a.Copyleft=zh,a.Copyright=Bh,a.CornerDownLeft=Ph,a.CornerDownRight=Dh,a.CornerLeftDown=bh,a.CornerLeftUp=Oh,a.CornerRightDown=Rh,a.CornerRightUp=Th,a.CornerUpLeft=Uh,a.CornerUpRight=Gh,a.Cpu=Eh,a.CreativeCommons=Wh,a.CreditCard=Ih,a.Croissant=qh,a.Crop=Nh,a.Cross=Xh,a.Crosshair=Jh,a.Crown=jh,a.CupSoda=Kh,a.CurlyBraces=Qh,a.Currency=_h,a.Database=at,a.DatabaseBackup=Yh,a.Delete=ht,a.Diamond=tt,a.Dice1=ct,a.Dice2=dt,a.Dice3=nt,a.Dice4=it,a.Dice5=lt,a.Dice6=pt,a.Dices=et,a.Diff=Mt,a.Disc=ot,a.Disc2=vt,a.Divide=gt,a.DivideCircle=yt,a.DivideSquare=st,a.Dna=$t,a.DnaOff=rt,a.Dog=mt,a.DollarSign=xt,a.DoorClosed=Ht,a.DoorOpen=Ct,a.Download=ut,a.DownloadCloud=Vt,a.Dribbble=At,a.Droplet=wt,a.Droplets=Lt,a.Drumstick=St,a.Dumbbell=ft,a.Ear=Ft,a.EarOff=kt,a.Edit=Bt,a.Edit2=Zt,a.Edit3=zt,a.Egg=bt,a.EggFried=Pt,a.EggOff=Dt,a.Equal=Rt,a.EqualNot=Ot,a.Eraser=Tt,a.Euro=Ut,a.Expand=Gt,a.ExternalLink=Et,a.Eye=It,a.EyeOff=Wt,a.Facebook=qt,a.Factory=Nt,a.Fan=Xt,a.FastForward=Jt,a.Feather=jt,a.Figma=Kt,a.File=Q5,a.FileArchive=Qt,a.FileAudio=Yt,a.FileAudio2=_t,a.FileAxis3d=a5,a.FileBadge=t5,a.FileBadge2=h5,a.FileBarChart=d5,a.FileBarChart2=c5,a.FileBox=n5,a.FileCheck=l5,a.FileCheck2=i5,a.FileClock=p5,a.FileCode=e5,a.FileCog=v5,a.FileCog2=M5,a.FileDiff=o5,a.FileDigit=y5,a.FileDown=s5,a.FileEdit=g5,a.FileHeart=r5,a.FileImage=$5,a.FileInput=m5,a.FileJson=H5,a.FileJson2=x5,a.FileKey=V5,a.FileKey2=C5,a.FileLineChart=u5,a.FileLock=w5,a.FileLock2=A5,a.FileMinus=S5,a.FileMinus2=L5,a.FileOutput=f5,a.FilePieChart=k5,a.FilePlus=Z5,a.FilePlus2=F5,a.FileQuestion=z5,a.FileScan=B5,a.FileSearch=D5,a.FileSearch2=P5,a.FileSignature=b5,a.FileSpreadsheet=O5,a.FileSymlink=R5,a.FileTerminal=T5,a.FileText=U5,a.FileType=E5,a.FileType2=G5,a.FileUp=W5,a.FileVideo=q5,a.FileVideo2=I5,a.FileVolume=X5,a.FileVolume2=N5,a.FileWarning=J5,a.FileX=K5,a.FileX2=j5,a.Files=_5,a.Film=Y5,a.Filter=h4,a.FilterX=a4,a.Fingerprint=t4,a.Fish=d4,a.FishOff=c4,a.Flag=p4,a.FlagOff=n4,a.FlagTriangleLeft=i4,a.FlagTriangleRight=l4,a.Flame=e4,a.Flashlight=v4,a.FlashlightOff=M4,a.FlaskConical=y4,a.FlaskConicalOff=o4,a.FlaskRound=s4,a.FlipHorizontal=r4,a.FlipHorizontal2=g4,a.FlipVertical=m4,a.FlipVertical2=$4,a.Flower=H4,a.Flower2=x4,a.Focus=C4,a.Folder=N4,a.FolderArchive=V4,a.FolderCheck=u4,a.FolderClock=A4,a.FolderClosed=w4,a.FolderCog=S4,a.FolderCog2=L4,a.FolderDown=f4,a.FolderEdit=k4,a.FolderGit=Z4,a.FolderGit2=F4,a.FolderHeart=z4,a.FolderInput=B4,a.FolderKey=P4,a.FolderLock=D4,a.FolderMinus=b4,a.FolderOpen=O4,a.FolderOutput=R4,a.FolderPlus=T4,a.FolderSearch=G4,a.FolderSearch2=U4,a.FolderSymlink=E4,a.FolderTree=W4,a.FolderUp=I4,a.FolderX=q4,a.Folders=X4,a.Footprints=J4,a.Forklift=j4,a.FormInput=K4,a.Forward=Q4,a.Frame=_4,a.Framer=Y4,a.Frown=a3,a.Fuel=h3,a.FunctionSquare=t3,a.Gamepad=d3,a.Gamepad2=c3,a.Gauge=n3,a.Gavel=i3,a.Gem=l3,a.Ghost=p3,a.Gift=e3,a.GitBranch=v3,a.GitBranchPlus=M3,a.GitCommit=o3,a.GitCompare=y3,a.GitFork=s3,a.GitMerge=g3,a.GitPullRequest=m3,a.GitPullRequestClosed=r3,a.GitPullRequestDraft=$3,a.Github=x3,a.Gitlab=H3,a.GlassWater=C3,a.Glasses=V3,a.Globe=A3,a.Globe2=u3,a.Grab=w3,a.GraduationCap=L3,a.Grape=S3,a.Grid=f3,a.Grip=Z3,a.GripHorizontal=k3,a.GripVertical=F3,a.Hammer=z3,a.Hand=P3,a.HandMetal=B3,a.HardDrive=D3,a.HardHat=b3,a.Hash=O3,a.Haze=R3,a.Heading=q3,a.Heading1=T3,a.Heading2=U3,a.Heading3=G3,a.Heading4=E3,a.Heading5=W3,a.Heading6=I3,a.Headphones=N3,a.Heart=Q3,a.HeartCrack=X3,a.HeartHandshake=J3,a.HeartOff=j3,a.HeartPulse=K3,a.HelpCircle=_3,a.HelpingHand=Y3,a.Hexagon=ac,a.Highlighter=hc,a.History=tc,a.Home=cc,a.Hop=nc,a.HopOff=dc,a.Hotel=ic,a.Hourglass=lc,a.IceCream=ec,a.IceCream2=pc,a.Image=yc,a.ImageMinus=Mc,a.ImageOff=vc,a.ImagePlus=oc,a.Import=sc,a.Inbox=gc,a.Indent=rc,a.IndianRupee=$c,a.Infinity=mc,a.Info=xc,a.Inspect=Hc,a.Instagram=Cc,a.Italic=Vc,a.IterationCcw=uc,a.IterationCw=Ac,a.JapaneseYen=wc,a.Joystick=Lc,a.Key=Sc,a.Keyboard=fc,a.Lamp=Pc,a.LampCeiling=kc,a.LampDesk=Fc,a.LampFloor=Zc,a.LampWallDown=zc,a.LampWallUp=Bc,a.Landmark=Dc,a.Languages=bc,a.Laptop=Rc,a.Laptop2=Oc,a.Lasso=Uc,a.LassoSelect=Tc,a.Laugh=Gc,a.Layers=Ec,a.Layout=Xc,a.LayoutDashboard=Wc,a.LayoutGrid=Ic,a.LayoutList=qc,a.LayoutTemplate=Nc,a.Leaf=Jc,a.Library=jc,a.LifeBuoy=Kc,a.Lightbulb=_c,a.LightbulbOff=Qc,a.LineChart=Yc,a.Link=t6,a.Link2=h6,a.Link2Off=a6,a.Linkedin=c6,a.List=s6,a.ListChecks=d6,a.ListEnd=n6,a.ListMinus=i6,a.ListMusic=l6,a.ListOrdered=p6,a.ListPlus=e6,a.ListStart=M6,a.ListTree=v6,a.ListVideo=o6,a.ListX=y6,a.Loader=r6,a.Loader2=g6,a.Locate=x6,a.LocateFixed=$6,a.LocateOff=m6,a.Lock=H6,a.LogIn=C6,a.LogOut=V6,a.Luggage=u6,a.Magnet=A6,a.Mail=B6,a.MailCheck=w6,a.MailMinus=L6,a.MailOpen=S6,a.MailPlus=f6,a.MailQuestion=k6,a.MailSearch=F6,a.MailWarning=Z6,a.MailX=z6,a.Mailbox=P6,a.Mails=D6,a.Map=R6,a.MapPin=O6,a.MapPinOff=b6,a.Martini=T6,a.Maximize=G6,a.Maximize2=U6,a.Medal=E6,a.Megaphone=I6,a.MegaphoneOff=W6,a.Meh=q6,a.Menu=N6,a.MessageCircle=X6,a.MessageSquare=K6,a.MessageSquareDashed=J6,a.MessageSquarePlus=j6,a.MessagesSquare=Q6,a.Mic=ad,a.Mic2=_6,a.MicOff=Y6,a.Microscope=hd,a.Microwave=td,a.Milestone=cd,a.Milk=nd,a.MilkOff=dd,a.Minimize=ld,a.Minimize2=id,a.Minus=Md,a.MinusCircle=pd,a.MinusSquare=ed,a.Monitor=rd,a.MonitorDown=vd,a.MonitorOff=od,a.MonitorSmartphone=yd,a.MonitorSpeaker=sd,a.MonitorUp=gd,a.Moon=md,a.MoonStar=$d,a.MoreHorizontal=xd,a.MoreVertical=Hd,a.Mountain=Vd,a.MountainSnow=Cd,a.Mouse=Ld,a.MousePointer=wd,a.MousePointer2=ud,a.MousePointerClick=Ad,a.Move=zd,a.Move3d=Sd,a.MoveDiagonal=kd,a.MoveDiagonal2=fd,a.MoveHorizontal=Fd,a.MoveVertical=Zd,a.Music=bd,a.Music2=Bd,a.Music3=Pd,a.Music4=Dd,a.Navigation=Ud,a.Navigation2=Rd,a.Navigation2Off=Od,a.NavigationOff=Td,a.Network=Gd,a.Newspaper=Ed,a.Nfc=Wd,a.Nut=qd,a.NutOff=Id,a.Octagon=Nd,a.Option=Xd,a.Orbit=Jd,a.Outdent=jd,a.Package=c8,a.Package2=Kd,a.PackageCheck=Qd,a.PackageMinus=_d,a.PackageOpen=Yd,a.PackagePlus=a8,a.PackageSearch=h8,a.PackageX=t8,a.PaintBucket=d8,a.Paintbrush=i8,a.Paintbrush2=n8,a.Palette=l8,a.Palmtree=p8,a.Paperclip=e8,a.ParkingCircle=v8,a.ParkingCircleOff=M8,a.ParkingSquare=y8,a.ParkingSquareOff=o8,a.PartyPopper=s8,a.Pause=$8,a.PauseCircle=g8,a.PauseOctagon=r8,a.PenTool=m8,a.Pencil=x8,a.Percent=H8,a.PersonStanding=C8,a.Phone=f8,a.PhoneCall=V8,a.PhoneForwarded=u8,a.PhoneIncoming=A8,a.PhoneMissed=w8,a.PhoneOff=L8,a.PhoneOutgoing=S8,a.PictureInPicture=F8,a.PictureInPicture2=k8,a.PieChart=Z8,a.PiggyBank=z8,a.Pilcrow=B8,a.Pill=P8,a.Pin=b8,a.PinOff=D8,a.Pipette=O8,a.Pizza=R8,a.Plane=G8,a.PlaneLanding=T8,a.PlaneTakeoff=U8,a.Play=W8,a.PlayCircle=E8,a.Plug=N8,a.Plug2=I8,a.PlugZap=q8,a.Plus=j8,a.PlusCircle=X8,a.PlusSquare=J8,a.Pocket=K8,a.Podcast=Q8,a.Pointer=_8,a.PoundSterling=Y8,a.Power=h7,a.PowerOff=a7,a.Printer=t7,a.Puzzle=c7,a.QrCode=d7,a.Quote=n7,a.Radio=p7,a.RadioReceiver=i7,a.RadioTower=l7,a.Rat=e7,a.Receipt=M7,a.RectangleHorizontal=v7,a.RectangleVertical=o7,a.Recycle=y7,a.Redo=g7,a.Redo2=s7,a.RefreshCcw=r7,a.RefreshCw=$7,a.Refrigerator=m7,a.Regex=x7,a.RemoveFormatting=H7,a.Repeat=u7,a.Repeat1=C7,a.Repeat2=V7,a.Replace=w7,a.ReplaceAll=A7,a.Reply=S7,a.ReplyAll=L7,a.Rewind=f7,a.Rocket=k7,a.RockingChair=F7,a.Rotate3d=Z7,a.RotateCcw=z7,a.RotateCw=B7,a.Router=P7,a.Rss=D7,a.Ruler=b7,a.RussianRuble=O7,a.Sailboat=R7,a.Salad=T7,a.Sandwich=U7,a.Save=E7,a.SaveAll=G7,a.Scale=I7,a.Scale3d=W7,a.Scaling=q7,a.Scan=J7,a.ScanFace=N7,a.ScanLine=X7,a.School=K7,a.School2=j7,a.Scissors=Q7,a.ScreenShare=Y7,a.ScreenShareOff=_7,a.Scroll=an,a.Search=hn,a.Send=tn,a.SeparatorHorizontal=cn,a.SeparatorVertical=dn,a.Server=en,a.ServerCog=nn,a.ServerCrash=ln,a.ServerOff=pn,a.Settings=vn,a.Settings2=Mn,a.Share=yn,a.Share2=on,a.Sheet=sn,a.Shield=Hn,a.ShieldAlert=gn,a.ShieldCheck=rn,a.ShieldClose=$n,a.ShieldOff=mn,a.ShieldQuestion=xn,a.Ship=Cn,a.Shirt=Vn,a.ShoppingBag=un,a.ShoppingCart=An,a.Shovel=wn,a.ShowerHead=Ln,a.Shrink=Sn,a.Shrub=fn,a.Shuffle=kn,a.Sidebar=zn,a.SidebarClose=Fn,a.SidebarOpen=Zn,a.Sigma=Bn,a.Signal=Rn,a.SignalHigh=Pn,a.SignalLow=Dn,a.SignalMedium=bn,a.SignalZero=On,a.Siren=Tn,a.SkipBack=Un,a.SkipForward=Gn,a.Skull=En,a.Slack=Wn,a.Slice=In,a.Sliders=Nn,a.SlidersHorizontal=qn,a.Smartphone=jn,a.SmartphoneCharging=Xn,a.SmartphoneNfc=Jn,a.Smile=Qn,a.SmilePlus=Kn,a.Snowflake=_n,a.Sofa=Yn,a.Soup=ai,a.Space=hi,a.Speaker=ti,a.Spline=ci,a.SplitSquareHorizontal=di,a.SplitSquareVertical=ni,a.Sprout=ii,a.Square=li,a.Stamp=pi,a.Star=vi,a.StarHalf=ei,a.StarOff=Mi,a.Stars=oi,a.StepBack=yi,a.StepForward=si,a.Stethoscope=gi,a.Sticker=ri,a.StickyNote=$i,a.StopCircle=mi,a.Store=xi,a.StretchHorizontal=Hi,a.StretchVertical=Ci,a.Strikethrough=Vi,a.Subscript=ui,a.Subtitles=Ai,a.Sun=ki,a.SunDim=wi,a.SunMedium=Li,a.SunMoon=Si,a.SunSnow=fi,a.Sunrise=Fi,a.Sunset=Zi,a.Superscript=zi,a.SwissFranc=Bi,a.SwitchCamera=Pi,a.Sword=Di,a.Swords=bi,a.Syringe=Oi,a.Table=Ti,a.Table2=Ri,a.Tablet=Ui,a.Tablets=Gi,a.Tag=Ei,a.Tags=Wi,a.Target=Ii,a.Tent=qi,a.Terminal=Xi,a.TerminalSquare=Ni,a.TestTube=ji,a.TestTube2=Ji,a.TestTubes=Ki,a.Text=al,a.TextCursor=_i,a.TextCursorInput=Qi,a.TextSelection=Yi,a.Thermometer=cl,a.ThermometerSnowflake=hl,a.ThermometerSun=tl,a.ThumbsDown=dl,a.ThumbsUp=nl,a.Ticket=il,a.Timer=el,a.TimerOff=ll,a.TimerReset=pl,a.ToggleLeft=Ml,a.ToggleRight=vl,a.Tornado=ol,a.TowerControl=yl,a.ToyBrick=sl,a.Train=gl,a.Trash=$l,a.Trash2=rl,a.TreeDeciduous=ml,a.TreePine=xl,a.Trees=Hl,a.Trello=Cl,a.TrendingDown=Vl,a.TrendingUp=ul,a.Triangle=Al,a.Trophy=wl,a.Truck=Ll,a.Tv=fl,a.Tv2=Sl,a.Twitch=kl,a.Twitter=Fl,a.Type=Zl,a.Umbrella=zl,a.Underline=Bl,a.Undo=Dl,a.Undo2=Pl,a.Unlink=Ol,a.Unlink2=bl,a.Unlock=Rl,a.Upload=Ul,a.UploadCloud=Tl,a.Usb=Gl,a.User=Xl,a.UserCheck=El,a.UserCog=Wl,a.UserMinus=Il,a.UserPlus=ql,a.UserX=Nl,a.Users=Jl,a.Utensils=Kl,a.UtensilsCrossed=jl,a.UtilityPole=Ql,a.Vegan=_l,a.VenetianMask=Yl,a.Verified=ap,a.Vibrate=tp,a.VibrateOff=hp,a.Video=dp,a.VideoOff=cp,a.View=np,a.Voicemail=ip,a.Volume=Mp,a.Volume1=lp,a.Volume2=pp,a.VolumeX=ep,a.Vote=vp,a.Wallet=op,a.Wand=sp,a.Wand2=yp,a.Warehouse=gp,a.Watch=rp,a.Waves=$p,a.Webcam=mp,a.Webhook=xp,a.Wheat=Cp,a.WheatOff=Hp,a.WholeWord=Vp,a.Wifi=Ap,a.WifiOff=up,a.Wind=wp,a.Wine=Sp,a.WineOff=Lp,a.Workflow=fp,a.WrapText=kp,a.Wrench=Fp,a.X=Pp,a.XCircle=Zp,a.XOctagon=zp,a.XSquare=Bp,a.Youtube=Dp,a.Zap=Op,a.ZapOff=bp,a.ZoomIn=Rp,a.ZoomOut=Tp,a.createElement=e,a.createIcons=Kp,a.icons=Up}); -//# sourceMappingURL=lucide.min.js.map diff --git a/docker/nginx/dist/html/assets/js/lucide.min.js.map b/docker/nginx/dist/html/assets/js/lucide.min.js.map deleted file mode 100644 index a3de175b..00000000 --- a/docker/nginx/dist/html/assets/js/lucide.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"lucide.min.js","sources":["../../src/createElement.ts","../../src/replaceElement.ts","../../src/defaultAttributes.ts","../../src/icons/accessibility.ts","../../src/icons/activity.ts","../../src/icons/air-vent.ts","../../src/icons/airplay.ts","../../src/icons/alarm-check.ts","../../src/icons/alarm-clock-off.ts","../../src/icons/alarm-clock.ts","../../src/icons/alarm-minus.ts","../../src/icons/alarm-plus.ts","../../src/icons/album.ts","../../src/icons/alert-circle.ts","../../src/icons/alert-octagon.ts","../../src/icons/alert-triangle.ts","../../src/icons/align-center-horizontal.ts","../../src/icons/align-center-vertical.ts","../../src/icons/align-center.ts","../../src/icons/align-end-horizontal.ts","../../src/icons/align-end-vertical.ts","../../src/icons/align-horizontal-distribute-center.ts","../../src/icons/align-horizontal-distribute-end.ts","../../src/icons/align-horizontal-distribute-start.ts","../../src/icons/align-horizontal-justify-center.ts","../../src/icons/align-horizontal-justify-end.ts","../../src/icons/align-horizontal-justify-start.ts","../../src/icons/align-horizontal-space-around.ts","../../src/icons/align-horizontal-space-between.ts","../../src/icons/align-justify.ts","../../src/icons/align-left.ts","../../src/icons/align-right.ts","../../src/icons/align-start-horizontal.ts","../../src/icons/align-start-vertical.ts","../../src/icons/align-vertical-distribute-center.ts","../../src/icons/align-vertical-distribute-end.ts","../../src/icons/align-vertical-distribute-start.ts","../../src/icons/align-vertical-justify-center.ts","../../src/icons/align-vertical-justify-end.ts","../../src/icons/align-vertical-justify-start.ts","../../src/icons/align-vertical-space-around.ts","../../src/icons/align-vertical-space-between.ts","../../src/icons/anchor.ts","../../src/icons/angry.ts","../../src/icons/annoyed.ts","../../src/icons/aperture.ts","../../src/icons/apple.ts","../../src/icons/archive-restore.ts","../../src/icons/archive.ts","../../src/icons/armchair.ts","../../src/icons/arrow-big-down-dash.ts","../../src/icons/arrow-big-down.ts","../../src/icons/arrow-big-left-dash.ts","../../src/icons/arrow-big-left.ts","../../src/icons/arrow-big-right-dash.ts","../../src/icons/arrow-big-right.ts","../../src/icons/arrow-big-up-dash.ts","../../src/icons/arrow-big-up.ts","../../src/icons/arrow-down-0-1.ts","../../src/icons/arrow-down-1-0.ts","../../src/icons/arrow-down-a-z.ts","../../src/icons/arrow-down-circle.ts","../../src/icons/arrow-down-left-from-circle.ts","../../src/icons/arrow-down-left.ts","../../src/icons/arrow-down-narrow-wide.ts","../../src/icons/arrow-down-right-from-circle.ts","../../src/icons/arrow-down-right.ts","../../src/icons/arrow-down-up.ts","../../src/icons/arrow-down-wide-narrow.ts","../../src/icons/arrow-down-z-a.ts","../../src/icons/arrow-down.ts","../../src/icons/arrow-left-circle.ts","../../src/icons/arrow-left-right.ts","../../src/icons/arrow-left.ts","../../src/icons/arrow-right-circle.ts","../../src/icons/arrow-right-left.ts","../../src/icons/arrow-right.ts","../../src/icons/arrow-up-0-1.ts","../../src/icons/arrow-up-1-0.ts","../../src/icons/arrow-up-a-z.ts","../../src/icons/arrow-up-circle.ts","../../src/icons/arrow-up-down.ts","../../src/icons/arrow-up-left-from-circle.ts","../../src/icons/arrow-up-left.ts","../../src/icons/arrow-up-narrow-wide.ts","../../src/icons/arrow-up-right-from-circle.ts","../../src/icons/arrow-up-right.ts","../../src/icons/arrow-up-wide-narrow.ts","../../src/icons/arrow-up-z-a.ts","../../src/icons/arrow-up.ts","../../src/icons/asterisk.ts","../../src/icons/at-sign.ts","../../src/icons/atom.ts","../../src/icons/award.ts","../../src/icons/axe.ts","../../src/icons/axis-3d.ts","../../src/icons/baby.ts","../../src/icons/backpack.ts","../../src/icons/baggage-claim.ts","../../src/icons/ban.ts","../../src/icons/banana.ts","../../src/icons/banknote.ts","../../src/icons/bar-chart-2.ts","../../src/icons/bar-chart-3.ts","../../src/icons/bar-chart-4.ts","../../src/icons/bar-chart-horizontal.ts","../../src/icons/bar-chart.ts","../../src/icons/baseline.ts","../../src/icons/bath.ts","../../src/icons/battery-charging.ts","../../src/icons/battery-full.ts","../../src/icons/battery-low.ts","../../src/icons/battery-medium.ts","../../src/icons/battery-warning.ts","../../src/icons/battery.ts","../../src/icons/beaker.ts","../../src/icons/bean-off.ts","../../src/icons/bean.ts","../../src/icons/bed-double.ts","../../src/icons/bed-single.ts","../../src/icons/bed.ts","../../src/icons/beef.ts","../../src/icons/beer.ts","../../src/icons/bell-minus.ts","../../src/icons/bell-off.ts","../../src/icons/bell-plus.ts","../../src/icons/bell-ring.ts","../../src/icons/bell.ts","../../src/icons/bike.ts","../../src/icons/binary.ts","../../src/icons/bird.ts","../../src/icons/bitcoin.ts","../../src/icons/blinds.ts","../../src/icons/bluetooth-connected.ts","../../src/icons/bluetooth-off.ts","../../src/icons/bluetooth-searching.ts","../../src/icons/bluetooth.ts","../../src/icons/bold.ts","../../src/icons/bomb.ts","../../src/icons/bone.ts","../../src/icons/book-copy.ts","../../src/icons/book-down.ts","../../src/icons/book-key.ts","../../src/icons/book-lock.ts","../../src/icons/book-marked.ts","../../src/icons/book-minus.ts","../../src/icons/book-open-check.ts","../../src/icons/book-open.ts","../../src/icons/book-plus.ts","../../src/icons/book-template.ts","../../src/icons/book-up.ts","../../src/icons/book-x.ts","../../src/icons/book.ts","../../src/icons/bookmark-minus.ts","../../src/icons/bookmark-plus.ts","../../src/icons/bookmark.ts","../../src/icons/bot.ts","../../src/icons/box-select.ts","../../src/icons/box.ts","../../src/icons/boxes.ts","../../src/icons/brain-circuit.ts","../../src/icons/brain-cog.ts","../../src/icons/brain.ts","../../src/icons/briefcase.ts","../../src/icons/brush.ts","../../src/icons/bug.ts","../../src/icons/building-2.ts","../../src/icons/building.ts","../../src/icons/bus.ts","../../src/icons/cake.ts","../../src/icons/calculator.ts","../../src/icons/calendar-check-2.ts","../../src/icons/calendar-check.ts","../../src/icons/calendar-clock.ts","../../src/icons/calendar-days.ts","../../src/icons/calendar-heart.ts","../../src/icons/calendar-minus.ts","../../src/icons/calendar-off.ts","../../src/icons/calendar-plus.ts","../../src/icons/calendar-range.ts","../../src/icons/calendar-search.ts","../../src/icons/calendar-x-2.ts","../../src/icons/calendar-x.ts","../../src/icons/calendar.ts","../../src/icons/camera-off.ts","../../src/icons/camera.ts","../../src/icons/candy-off.ts","../../src/icons/candy.ts","../../src/icons/car.ts","../../src/icons/carrot.ts","../../src/icons/case-lower.ts","../../src/icons/case-sensitive.ts","../../src/icons/case-upper.ts","../../src/icons/cast.ts","../../src/icons/castle.ts","../../src/icons/cat.ts","../../src/icons/check-check.ts","../../src/icons/check-circle-2.ts","../../src/icons/check-circle.ts","../../src/icons/check-square.ts","../../src/icons/check.ts","../../src/icons/chef-hat.ts","../../src/icons/cherry.ts","../../src/icons/chevron-down-square.ts","../../src/icons/chevron-down.ts","../../src/icons/chevron-first.ts","../../src/icons/chevron-last.ts","../../src/icons/chevron-left-square.ts","../../src/icons/chevron-left.ts","../../src/icons/chevron-right-square.ts","../../src/icons/chevron-right.ts","../../src/icons/chevron-up-square.ts","../../src/icons/chevron-up.ts","../../src/icons/chevrons-down-up.ts","../../src/icons/chevrons-down.ts","../../src/icons/chevrons-left-right.ts","../../src/icons/chevrons-left.ts","../../src/icons/chevrons-right-left.ts","../../src/icons/chevrons-right.ts","../../src/icons/chevrons-up-down.ts","../../src/icons/chevrons-up.ts","../../src/icons/chrome.ts","../../src/icons/church.ts","../../src/icons/cigarette-off.ts","../../src/icons/cigarette.ts","../../src/icons/circle-dot.ts","../../src/icons/circle-ellipsis.ts","../../src/icons/circle-equal.ts","../../src/icons/circle-off.ts","../../src/icons/circle-slash-2.ts","../../src/icons/circle-slash.ts","../../src/icons/circle.ts","../../src/icons/circuit-board.ts","../../src/icons/citrus.ts","../../src/icons/clapperboard.ts","../../src/icons/clipboard-check.ts","../../src/icons/clipboard-copy.ts","../../src/icons/clipboard-edit.ts","../../src/icons/clipboard-list.ts","../../src/icons/clipboard-paste.ts","../../src/icons/clipboard-signature.ts","../../src/icons/clipboard-type.ts","../../src/icons/clipboard-x.ts","../../src/icons/clipboard.ts","../../src/icons/clock-1.ts","../../src/icons/clock-10.ts","../../src/icons/clock-11.ts","../../src/icons/clock-12.ts","../../src/icons/clock-2.ts","../../src/icons/clock-3.ts","../../src/icons/clock-4.ts","../../src/icons/clock-5.ts","../../src/icons/clock-6.ts","../../src/icons/clock-7.ts","../../src/icons/clock-8.ts","../../src/icons/clock-9.ts","../../src/icons/clock.ts","../../src/icons/cloud-cog.ts","../../src/icons/cloud-drizzle.ts","../../src/icons/cloud-fog.ts","../../src/icons/cloud-hail.ts","../../src/icons/cloud-lightning.ts","../../src/icons/cloud-moon-rain.ts","../../src/icons/cloud-moon.ts","../../src/icons/cloud-off.ts","../../src/icons/cloud-rain-wind.ts","../../src/icons/cloud-rain.ts","../../src/icons/cloud-snow.ts","../../src/icons/cloud-sun-rain.ts","../../src/icons/cloud-sun.ts","../../src/icons/cloud.ts","../../src/icons/cloudy.ts","../../src/icons/clover.ts","../../src/icons/code-2.ts","../../src/icons/code.ts","../../src/icons/codepen.ts","../../src/icons/codesandbox.ts","../../src/icons/coffee.ts","../../src/icons/cog.ts","../../src/icons/coins.ts","../../src/icons/columns.ts","../../src/icons/command.ts","../../src/icons/compass.ts","../../src/icons/component.ts","../../src/icons/concierge-bell.ts","../../src/icons/construction.ts","../../src/icons/contact.ts","../../src/icons/contrast.ts","../../src/icons/cookie.ts","../../src/icons/copy-check.ts","../../src/icons/copy-minus.ts","../../src/icons/copy-plus.ts","../../src/icons/copy-slash.ts","../../src/icons/copy-x.ts","../../src/icons/copy.ts","../../src/icons/copyleft.ts","../../src/icons/copyright.ts","../../src/icons/corner-down-left.ts","../../src/icons/corner-down-right.ts","../../src/icons/corner-left-down.ts","../../src/icons/corner-left-up.ts","../../src/icons/corner-right-down.ts","../../src/icons/corner-right-up.ts","../../src/icons/corner-up-left.ts","../../src/icons/corner-up-right.ts","../../src/icons/cpu.ts","../../src/icons/creative-commons.ts","../../src/icons/credit-card.ts","../../src/icons/croissant.ts","../../src/icons/crop.ts","../../src/icons/cross.ts","../../src/icons/crosshair.ts","../../src/icons/crown.ts","../../src/icons/cup-soda.ts","../../src/icons/curly-braces.ts","../../src/icons/currency.ts","../../src/icons/database-backup.ts","../../src/icons/database.ts","../../src/icons/delete.ts","../../src/icons/diamond.ts","../../src/icons/dice-1.ts","../../src/icons/dice-2.ts","../../src/icons/dice-3.ts","../../src/icons/dice-4.ts","../../src/icons/dice-5.ts","../../src/icons/dice-6.ts","../../src/icons/dices.ts","../../src/icons/diff.ts","../../src/icons/disc-2.ts","../../src/icons/disc.ts","../../src/icons/divide-circle.ts","../../src/icons/divide-square.ts","../../src/icons/divide.ts","../../src/icons/dna-off.ts","../../src/icons/dna.ts","../../src/icons/dog.ts","../../src/icons/dollar-sign.ts","../../src/icons/door-closed.ts","../../src/icons/door-open.ts","../../src/icons/download-cloud.ts","../../src/icons/download.ts","../../src/icons/dribbble.ts","../../src/icons/droplet.ts","../../src/icons/droplets.ts","../../src/icons/drumstick.ts","../../src/icons/dumbbell.ts","../../src/icons/ear-off.ts","../../src/icons/ear.ts","../../src/icons/edit-2.ts","../../src/icons/edit-3.ts","../../src/icons/edit.ts","../../src/icons/egg-fried.ts","../../src/icons/egg-off.ts","../../src/icons/egg.ts","../../src/icons/equal-not.ts","../../src/icons/equal.ts","../../src/icons/eraser.ts","../../src/icons/euro.ts","../../src/icons/expand.ts","../../src/icons/external-link.ts","../../src/icons/eye-off.ts","../../src/icons/eye.ts","../../src/icons/facebook.ts","../../src/icons/factory.ts","../../src/icons/fan.ts","../../src/icons/fast-forward.ts","../../src/icons/feather.ts","../../src/icons/figma.ts","../../src/icons/file-archive.ts","../../src/icons/file-audio-2.ts","../../src/icons/file-audio.ts","../../src/icons/file-axis-3d.ts","../../src/icons/file-badge-2.ts","../../src/icons/file-badge.ts","../../src/icons/file-bar-chart-2.ts","../../src/icons/file-bar-chart.ts","../../src/icons/file-box.ts","../../src/icons/file-check-2.ts","../../src/icons/file-check.ts","../../src/icons/file-clock.ts","../../src/icons/file-code.ts","../../src/icons/file-cog-2.ts","../../src/icons/file-cog.ts","../../src/icons/file-diff.ts","../../src/icons/file-digit.ts","../../src/icons/file-down.ts","../../src/icons/file-edit.ts","../../src/icons/file-heart.ts","../../src/icons/file-image.ts","../../src/icons/file-input.ts","../../src/icons/file-json-2.ts","../../src/icons/file-json.ts","../../src/icons/file-key-2.ts","../../src/icons/file-key.ts","../../src/icons/file-line-chart.ts","../../src/icons/file-lock-2.ts","../../src/icons/file-lock.ts","../../src/icons/file-minus-2.ts","../../src/icons/file-minus.ts","../../src/icons/file-output.ts","../../src/icons/file-pie-chart.ts","../../src/icons/file-plus-2.ts","../../src/icons/file-plus.ts","../../src/icons/file-question.ts","../../src/icons/file-scan.ts","../../src/icons/file-search-2.ts","../../src/icons/file-search.ts","../../src/icons/file-signature.ts","../../src/icons/file-spreadsheet.ts","../../src/icons/file-symlink.ts","../../src/icons/file-terminal.ts","../../src/icons/file-text.ts","../../src/icons/file-type-2.ts","../../src/icons/file-type.ts","../../src/icons/file-up.ts","../../src/icons/file-video-2.ts","../../src/icons/file-video.ts","../../src/icons/file-volume-2.ts","../../src/icons/file-volume.ts","../../src/icons/file-warning.ts","../../src/icons/file-x-2.ts","../../src/icons/file-x.ts","../../src/icons/file.ts","../../src/icons/files.ts","../../src/icons/film.ts","../../src/icons/filter-x.ts","../../src/icons/filter.ts","../../src/icons/fingerprint.ts","../../src/icons/fish-off.ts","../../src/icons/fish.ts","../../src/icons/flag-off.ts","../../src/icons/flag-triangle-left.ts","../../src/icons/flag-triangle-right.ts","../../src/icons/flag.ts","../../src/icons/flame.ts","../../src/icons/flashlight-off.ts","../../src/icons/flashlight.ts","../../src/icons/flask-conical-off.ts","../../src/icons/flask-conical.ts","../../src/icons/flask-round.ts","../../src/icons/flip-horizontal-2.ts","../../src/icons/flip-horizontal.ts","../../src/icons/flip-vertical-2.ts","../../src/icons/flip-vertical.ts","../../src/icons/flower-2.ts","../../src/icons/flower.ts","../../src/icons/focus.ts","../../src/icons/folder-archive.ts","../../src/icons/folder-check.ts","../../src/icons/folder-clock.ts","../../src/icons/folder-closed.ts","../../src/icons/folder-cog-2.ts","../../src/icons/folder-cog.ts","../../src/icons/folder-down.ts","../../src/icons/folder-edit.ts","../../src/icons/folder-git-2.ts","../../src/icons/folder-git.ts","../../src/icons/folder-heart.ts","../../src/icons/folder-input.ts","../../src/icons/folder-key.ts","../../src/icons/folder-lock.ts","../../src/icons/folder-minus.ts","../../src/icons/folder-open.ts","../../src/icons/folder-output.ts","../../src/icons/folder-plus.ts","../../src/icons/folder-search-2.ts","../../src/icons/folder-search.ts","../../src/icons/folder-symlink.ts","../../src/icons/folder-tree.ts","../../src/icons/folder-up.ts","../../src/icons/folder-x.ts","../../src/icons/folder.ts","../../src/icons/folders.ts","../../src/icons/footprints.ts","../../src/icons/forklift.ts","../../src/icons/form-input.ts","../../src/icons/forward.ts","../../src/icons/frame.ts","../../src/icons/framer.ts","../../src/icons/frown.ts","../../src/icons/fuel.ts","../../src/icons/function-square.ts","../../src/icons/gamepad-2.ts","../../src/icons/gamepad.ts","../../src/icons/gauge.ts","../../src/icons/gavel.ts","../../src/icons/gem.ts","../../src/icons/ghost.ts","../../src/icons/gift.ts","../../src/icons/git-branch-plus.ts","../../src/icons/git-branch.ts","../../src/icons/git-commit.ts","../../src/icons/git-compare.ts","../../src/icons/git-fork.ts","../../src/icons/git-merge.ts","../../src/icons/git-pull-request-closed.ts","../../src/icons/git-pull-request-draft.ts","../../src/icons/git-pull-request.ts","../../src/icons/github.ts","../../src/icons/gitlab.ts","../../src/icons/glass-water.ts","../../src/icons/glasses.ts","../../src/icons/globe-2.ts","../../src/icons/globe.ts","../../src/icons/grab.ts","../../src/icons/graduation-cap.ts","../../src/icons/grape.ts","../../src/icons/grid.ts","../../src/icons/grip-horizontal.ts","../../src/icons/grip-vertical.ts","../../src/icons/grip.ts","../../src/icons/hammer.ts","../../src/icons/hand-metal.ts","../../src/icons/hand.ts","../../src/icons/hard-drive.ts","../../src/icons/hard-hat.ts","../../src/icons/hash.ts","../../src/icons/haze.ts","../../src/icons/heading-1.ts","../../src/icons/heading-2.ts","../../src/icons/heading-3.ts","../../src/icons/heading-4.ts","../../src/icons/heading-5.ts","../../src/icons/heading-6.ts","../../src/icons/heading.ts","../../src/icons/headphones.ts","../../src/icons/heart-crack.ts","../../src/icons/heart-handshake.ts","../../src/icons/heart-off.ts","../../src/icons/heart-pulse.ts","../../src/icons/heart.ts","../../src/icons/help-circle.ts","../../src/icons/helping-hand.ts","../../src/icons/hexagon.ts","../../src/icons/highlighter.ts","../../src/icons/history.ts","../../src/icons/home.ts","../../src/icons/hop-off.ts","../../src/icons/hop.ts","../../src/icons/hotel.ts","../../src/icons/hourglass.ts","../../src/icons/ice-cream-2.ts","../../src/icons/ice-cream.ts","../../src/icons/image-minus.ts","../../src/icons/image-off.ts","../../src/icons/image-plus.ts","../../src/icons/image.ts","../../src/icons/import.ts","../../src/icons/inbox.ts","../../src/icons/indent.ts","../../src/icons/indian-rupee.ts","../../src/icons/infinity.ts","../../src/icons/info.ts","../../src/icons/inspect.ts","../../src/icons/instagram.ts","../../src/icons/italic.ts","../../src/icons/iteration-ccw.ts","../../src/icons/iteration-cw.ts","../../src/icons/japanese-yen.ts","../../src/icons/joystick.ts","../../src/icons/key.ts","../../src/icons/keyboard.ts","../../src/icons/lamp-ceiling.ts","../../src/icons/lamp-desk.ts","../../src/icons/lamp-floor.ts","../../src/icons/lamp-wall-down.ts","../../src/icons/lamp-wall-up.ts","../../src/icons/lamp.ts","../../src/icons/landmark.ts","../../src/icons/languages.ts","../../src/icons/laptop-2.ts","../../src/icons/laptop.ts","../../src/icons/lasso-select.ts","../../src/icons/lasso.ts","../../src/icons/laugh.ts","../../src/icons/layers.ts","../../src/icons/layout-dashboard.ts","../../src/icons/layout-grid.ts","../../src/icons/layout-list.ts","../../src/icons/layout-template.ts","../../src/icons/layout.ts","../../src/icons/leaf.ts","../../src/icons/library.ts","../../src/icons/life-buoy.ts","../../src/icons/lightbulb-off.ts","../../src/icons/lightbulb.ts","../../src/icons/line-chart.ts","../../src/icons/link-2-off.ts","../../src/icons/link-2.ts","../../src/icons/link.ts","../../src/icons/linkedin.ts","../../src/icons/list-checks.ts","../../src/icons/list-end.ts","../../src/icons/list-minus.ts","../../src/icons/list-music.ts","../../src/icons/list-ordered.ts","../../src/icons/list-plus.ts","../../src/icons/list-start.ts","../../src/icons/list-tree.ts","../../src/icons/list-video.ts","../../src/icons/list-x.ts","../../src/icons/list.ts","../../src/icons/loader-2.ts","../../src/icons/loader.ts","../../src/icons/locate-fixed.ts","../../src/icons/locate-off.ts","../../src/icons/locate.ts","../../src/icons/lock.ts","../../src/icons/log-in.ts","../../src/icons/log-out.ts","../../src/icons/luggage.ts","../../src/icons/magnet.ts","../../src/icons/mail-check.ts","../../src/icons/mail-minus.ts","../../src/icons/mail-open.ts","../../src/icons/mail-plus.ts","../../src/icons/mail-question.ts","../../src/icons/mail-search.ts","../../src/icons/mail-warning.ts","../../src/icons/mail-x.ts","../../src/icons/mail.ts","../../src/icons/mailbox.ts","../../src/icons/mails.ts","../../src/icons/map-pin-off.ts","../../src/icons/map-pin.ts","../../src/icons/map.ts","../../src/icons/martini.ts","../../src/icons/maximize-2.ts","../../src/icons/maximize.ts","../../src/icons/medal.ts","../../src/icons/megaphone-off.ts","../../src/icons/megaphone.ts","../../src/icons/meh.ts","../../src/icons/menu.ts","../../src/icons/message-circle.ts","../../src/icons/message-square-dashed.ts","../../src/icons/message-square-plus.ts","../../src/icons/message-square.ts","../../src/icons/messages-square.ts","../../src/icons/mic-2.ts","../../src/icons/mic-off.ts","../../src/icons/mic.ts","../../src/icons/microscope.ts","../../src/icons/microwave.ts","../../src/icons/milestone.ts","../../src/icons/milk-off.ts","../../src/icons/milk.ts","../../src/icons/minimize-2.ts","../../src/icons/minimize.ts","../../src/icons/minus-circle.ts","../../src/icons/minus-square.ts","../../src/icons/minus.ts","../../src/icons/monitor-down.ts","../../src/icons/monitor-off.ts","../../src/icons/monitor-smartphone.ts","../../src/icons/monitor-speaker.ts","../../src/icons/monitor-up.ts","../../src/icons/monitor.ts","../../src/icons/moon-star.ts","../../src/icons/moon.ts","../../src/icons/more-horizontal.ts","../../src/icons/more-vertical.ts","../../src/icons/mountain-snow.ts","../../src/icons/mountain.ts","../../src/icons/mouse-pointer-2.ts","../../src/icons/mouse-pointer-click.ts","../../src/icons/mouse-pointer.ts","../../src/icons/mouse.ts","../../src/icons/move-3d.ts","../../src/icons/move-diagonal-2.ts","../../src/icons/move-diagonal.ts","../../src/icons/move-horizontal.ts","../../src/icons/move-vertical.ts","../../src/icons/move.ts","../../src/icons/music-2.ts","../../src/icons/music-3.ts","../../src/icons/music-4.ts","../../src/icons/music.ts","../../src/icons/navigation-2-off.ts","../../src/icons/navigation-2.ts","../../src/icons/navigation-off.ts","../../src/icons/navigation.ts","../../src/icons/network.ts","../../src/icons/newspaper.ts","../../src/icons/nfc.ts","../../src/icons/nut-off.ts","../../src/icons/nut.ts","../../src/icons/octagon.ts","../../src/icons/option.ts","../../src/icons/orbit.ts","../../src/icons/outdent.ts","../../src/icons/package-2.ts","../../src/icons/package-check.ts","../../src/icons/package-minus.ts","../../src/icons/package-open.ts","../../src/icons/package-plus.ts","../../src/icons/package-search.ts","../../src/icons/package-x.ts","../../src/icons/package.ts","../../src/icons/paint-bucket.ts","../../src/icons/paintbrush-2.ts","../../src/icons/paintbrush.ts","../../src/icons/palette.ts","../../src/icons/palmtree.ts","../../src/icons/paperclip.ts","../../src/icons/parking-circle-off.ts","../../src/icons/parking-circle.ts","../../src/icons/parking-square-off.ts","../../src/icons/parking-square.ts","../../src/icons/party-popper.ts","../../src/icons/pause-circle.ts","../../src/icons/pause-octagon.ts","../../src/icons/pause.ts","../../src/icons/pen-tool.ts","../../src/icons/pencil.ts","../../src/icons/percent.ts","../../src/icons/person-standing.ts","../../src/icons/phone-call.ts","../../src/icons/phone-forwarded.ts","../../src/icons/phone-incoming.ts","../../src/icons/phone-missed.ts","../../src/icons/phone-off.ts","../../src/icons/phone-outgoing.ts","../../src/icons/phone.ts","../../src/icons/picture-in-picture-2.ts","../../src/icons/picture-in-picture.ts","../../src/icons/pie-chart.ts","../../src/icons/piggy-bank.ts","../../src/icons/pilcrow.ts","../../src/icons/pill.ts","../../src/icons/pin-off.ts","../../src/icons/pin.ts","../../src/icons/pipette.ts","../../src/icons/pizza.ts","../../src/icons/plane-landing.ts","../../src/icons/plane-takeoff.ts","../../src/icons/plane.ts","../../src/icons/play-circle.ts","../../src/icons/play.ts","../../src/icons/plug-2.ts","../../src/icons/plug-zap.ts","../../src/icons/plug.ts","../../src/icons/plus-circle.ts","../../src/icons/plus-square.ts","../../src/icons/plus.ts","../../src/icons/pocket.ts","../../src/icons/podcast.ts","../../src/icons/pointer.ts","../../src/icons/pound-sterling.ts","../../src/icons/power-off.ts","../../src/icons/power.ts","../../src/icons/printer.ts","../../src/icons/puzzle.ts","../../src/icons/qr-code.ts","../../src/icons/quote.ts","../../src/icons/radio-receiver.ts","../../src/icons/radio-tower.ts","../../src/icons/radio.ts","../../src/icons/rat.ts","../../src/icons/receipt.ts","../../src/icons/rectangle-horizontal.ts","../../src/icons/rectangle-vertical.ts","../../src/icons/recycle.ts","../../src/icons/redo-2.ts","../../src/icons/redo.ts","../../src/icons/refresh-ccw.ts","../../src/icons/refresh-cw.ts","../../src/icons/refrigerator.ts","../../src/icons/regex.ts","../../src/icons/remove-formatting.ts","../../src/icons/repeat-1.ts","../../src/icons/repeat-2.ts","../../src/icons/repeat.ts","../../src/icons/replace-all.ts","../../src/icons/replace.ts","../../src/icons/reply-all.ts","../../src/icons/reply.ts","../../src/icons/rewind.ts","../../src/icons/rocket.ts","../../src/icons/rocking-chair.ts","../../src/icons/rotate-3d.ts","../../src/icons/rotate-ccw.ts","../../src/icons/rotate-cw.ts","../../src/icons/router.ts","../../src/icons/rss.ts","../../src/icons/ruler.ts","../../src/icons/russian-ruble.ts","../../src/icons/sailboat.ts","../../src/icons/salad.ts","../../src/icons/sandwich.ts","../../src/icons/save-all.ts","../../src/icons/save.ts","../../src/icons/scale-3d.ts","../../src/icons/scale.ts","../../src/icons/scaling.ts","../../src/icons/scan-face.ts","../../src/icons/scan-line.ts","../../src/icons/scan.ts","../../src/icons/school-2.ts","../../src/icons/school.ts","../../src/icons/scissors.ts","../../src/icons/screen-share-off.ts","../../src/icons/screen-share.ts","../../src/icons/scroll.ts","../../src/icons/search.ts","../../src/icons/send.ts","../../src/icons/separator-horizontal.ts","../../src/icons/separator-vertical.ts","../../src/icons/server-cog.ts","../../src/icons/server-crash.ts","../../src/icons/server-off.ts","../../src/icons/server.ts","../../src/icons/settings-2.ts","../../src/icons/settings.ts","../../src/icons/share-2.ts","../../src/icons/share.ts","../../src/icons/sheet.ts","../../src/icons/shield-alert.ts","../../src/icons/shield-check.ts","../../src/icons/shield-close.ts","../../src/icons/shield-off.ts","../../src/icons/shield-question.ts","../../src/icons/shield.ts","../../src/icons/ship.ts","../../src/icons/shirt.ts","../../src/icons/shopping-bag.ts","../../src/icons/shopping-cart.ts","../../src/icons/shovel.ts","../../src/icons/shower-head.ts","../../src/icons/shrink.ts","../../src/icons/shrub.ts","../../src/icons/shuffle.ts","../../src/icons/sidebar-close.ts","../../src/icons/sidebar-open.ts","../../src/icons/sidebar.ts","../../src/icons/sigma.ts","../../src/icons/signal-high.ts","../../src/icons/signal-low.ts","../../src/icons/signal-medium.ts","../../src/icons/signal-zero.ts","../../src/icons/signal.ts","../../src/icons/siren.ts","../../src/icons/skip-back.ts","../../src/icons/skip-forward.ts","../../src/icons/skull.ts","../../src/icons/slack.ts","../../src/icons/slice.ts","../../src/icons/sliders-horizontal.ts","../../src/icons/sliders.ts","../../src/icons/smartphone-charging.ts","../../src/icons/smartphone-nfc.ts","../../src/icons/smartphone.ts","../../src/icons/smile-plus.ts","../../src/icons/smile.ts","../../src/icons/snowflake.ts","../../src/icons/sofa.ts","../../src/icons/soup.ts","../../src/icons/space.ts","../../src/icons/speaker.ts","../../src/icons/spline.ts","../../src/icons/split-square-horizontal.ts","../../src/icons/split-square-vertical.ts","../../src/icons/sprout.ts","../../src/icons/square.ts","../../src/icons/stamp.ts","../../src/icons/star-half.ts","../../src/icons/star-off.ts","../../src/icons/star.ts","../../src/icons/stars.ts","../../src/icons/step-back.ts","../../src/icons/step-forward.ts","../../src/icons/stethoscope.ts","../../src/icons/sticker.ts","../../src/icons/sticky-note.ts","../../src/icons/stop-circle.ts","../../src/icons/store.ts","../../src/icons/stretch-horizontal.ts","../../src/icons/stretch-vertical.ts","../../src/icons/strikethrough.ts","../../src/icons/subscript.ts","../../src/icons/subtitles.ts","../../src/icons/sun-dim.ts","../../src/icons/sun-medium.ts","../../src/icons/sun-moon.ts","../../src/icons/sun-snow.ts","../../src/icons/sun.ts","../../src/icons/sunrise.ts","../../src/icons/sunset.ts","../../src/icons/superscript.ts","../../src/icons/swiss-franc.ts","../../src/icons/switch-camera.ts","../../src/icons/sword.ts","../../src/icons/swords.ts","../../src/icons/syringe.ts","../../src/icons/table-2.ts","../../src/icons/table.ts","../../src/icons/tablet.ts","../../src/icons/tablets.ts","../../src/icons/tag.ts","../../src/icons/tags.ts","../../src/icons/target.ts","../../src/icons/tent.ts","../../src/icons/terminal-square.ts","../../src/icons/terminal.ts","../../src/icons/test-tube-2.ts","../../src/icons/test-tube.ts","../../src/icons/test-tubes.ts","../../src/icons/text-cursor-input.ts","../../src/icons/text-cursor.ts","../../src/icons/text-selection.ts","../../src/icons/text.ts","../../src/icons/thermometer-snowflake.ts","../../src/icons/thermometer-sun.ts","../../src/icons/thermometer.ts","../../src/icons/thumbs-down.ts","../../src/icons/thumbs-up.ts","../../src/icons/ticket.ts","../../src/icons/timer-off.ts","../../src/icons/timer-reset.ts","../../src/icons/timer.ts","../../src/icons/toggle-left.ts","../../src/icons/toggle-right.ts","../../src/icons/tornado.ts","../../src/icons/tower-control.ts","../../src/icons/toy-brick.ts","../../src/icons/train.ts","../../src/icons/trash-2.ts","../../src/icons/trash.ts","../../src/icons/tree-deciduous.ts","../../src/icons/tree-pine.ts","../../src/icons/trees.ts","../../src/icons/trello.ts","../../src/icons/trending-down.ts","../../src/icons/trending-up.ts","../../src/icons/triangle.ts","../../src/icons/trophy.ts","../../src/icons/truck.ts","../../src/icons/tv-2.ts","../../src/icons/tv.ts","../../src/icons/twitch.ts","../../src/icons/twitter.ts","../../src/icons/type.ts","../../src/icons/umbrella.ts","../../src/icons/underline.ts","../../src/icons/undo-2.ts","../../src/icons/undo.ts","../../src/icons/unlink-2.ts","../../src/icons/unlink.ts","../../src/icons/unlock.ts","../../src/icons/upload-cloud.ts","../../src/icons/upload.ts","../../src/icons/usb.ts","../../src/icons/user-check.ts","../../src/icons/user-cog.ts","../../src/icons/user-minus.ts","../../src/icons/user-plus.ts","../../src/icons/user-x.ts","../../src/icons/user.ts","../../src/icons/users.ts","../../src/icons/utensils-crossed.ts","../../src/icons/utensils.ts","../../src/icons/utility-pole.ts","../../src/icons/vegan.ts","../../src/icons/venetian-mask.ts","../../src/icons/verified.ts","../../src/icons/vibrate-off.ts","../../src/icons/vibrate.ts","../../src/icons/video-off.ts","../../src/icons/video.ts","../../src/icons/view.ts","../../src/icons/voicemail.ts","../../src/icons/volume-1.ts","../../src/icons/volume-2.ts","../../src/icons/volume-x.ts","../../src/icons/volume.ts","../../src/icons/vote.ts","../../src/icons/wallet.ts","../../src/icons/wand-2.ts","../../src/icons/wand.ts","../../src/icons/warehouse.ts","../../src/icons/watch.ts","../../src/icons/waves.ts","../../src/icons/webcam.ts","../../src/icons/webhook.ts","../../src/icons/wheat-off.ts","../../src/icons/wheat.ts","../../src/icons/whole-word.ts","../../src/icons/wifi-off.ts","../../src/icons/wifi.ts","../../src/icons/wind.ts","../../src/icons/wine-off.ts","../../src/icons/wine.ts","../../src/icons/workflow.ts","../../src/icons/wrap-text.ts","../../src/icons/wrench.ts","../../src/icons/x-circle.ts","../../src/icons/x-octagon.ts","../../src/icons/x-square.ts","../../src/icons/x.ts","../../src/icons/youtube.ts","../../src/icons/zap-off.ts","../../src/icons/zap.ts","../../src/icons/zoom-in.ts","../../src/icons/zoom-out.ts","../../src/lucide.ts"],"sourcesContent":["import { IconNode, IconNodeChild, SVGProps } from \"./types\";\n\n\n/**\n * Creates a new HTMLElement from icon node\n * @param {string} tag\n * @param {object} attrs\n * @param {array} children\n * @returns {HTMLElement}\n */\nconst createElement = (tag: string, attrs: SVGProps, children: IconNodeChild[] = []) => {\n const element = document.createElementNS('http://www.w3.org/2000/svg', tag);\n\n Object.keys(attrs).forEach((name) => {\n element.setAttribute(name, String(attrs[name]));\n });\n\n if (children.length) {\n children.forEach(child => {\n const childElement = createElement(...child);\n\n element.appendChild(childElement);\n });\n }\n\n return element;\n};\n\n/**\n * Creates a new HTMLElement from icon node\n * @param {[tag: string, attrs: object, children: array]} iconNode\n * @returns {HTMLElement}\n */\nexport default ([tag, attrs, children]: IconNode) => createElement(tag, attrs, children);\n","import createElement from './createElement';\nimport { Icons } from './types';\n\nexport type CustomAttrs = { [attr:string]: any }\n\n/**\n * Get the attributes of an HTML element.\n * @param {HTMLElement} element\n * @returns {Object}\n */\nexport const getAttrs = (element: Element): Record =>\n Array.from(element.attributes).reduce>((attrs, attr) => {\n attrs[attr.name] = attr.value;\n return attrs;\n }, {});\n\n/**\n * Gets the classNames of an attributes Object.\n * @param {Object} attrs\n * @returns {Array}\n */\nexport const getClassNames = (attrs: Record | string): string | string[] => {\n if (typeof attrs === 'string') return attrs;\n if (!attrs || !attrs.class) return '';\n if (attrs.class && typeof attrs.class === 'string') {\n return attrs.class.split(' ');\n }\n if (attrs.class && Array.isArray(attrs.class)) {\n return attrs.class;\n }\n return '';\n};\n\n/**\n * Combines the classNames of array of classNames to a String\n * @param {array} arrayOfClassnames\n * @returns {string}\n */\nexport const combineClassNames = (\n arrayOfClassnames: (string | Record)[]\n) => {\n const classNameArray = arrayOfClassnames.flatMap(getClassNames);\n\n return classNameArray\n .map((classItem) => classItem.trim())\n .filter(Boolean)\n .filter((value, index, self) => self.indexOf(value) === index)\n .join(' ');\n};\n\nconst toPascalCase = (string: string): string =>\n string.replace(/(\\w)(\\w*)(_|-|\\s*)/g, (g0, g1, g2) => g1.toUpperCase() + g2.toLowerCase());\n\ninterface ReplaceElementOptions {\n nameAttr: string\n icons: Icons,\n attrs: Record\n}\n\n/**\n * ReplaceElement, replaces the given element with the created icon.\n * @param {HTMLElement} element\n * @param {{ nameAttr: string, icons: object, attrs: object }} options: { nameAttr, icons, attrs }\n * @returns {Function}\n */\nconst replaceElement = (element: Element, { nameAttr, icons, attrs }: ReplaceElementOptions) => {\n const iconName = element.getAttribute(nameAttr);\n\n if(iconName == null) return\n\n const ComponentName = toPascalCase(iconName);\n\n const iconNode = icons[ComponentName];\n\n if (!iconNode) {\n return console.warn(\n `${element.outerHTML} icon name was not found in the provided icons object.`,\n );\n }\n\n const elementAttrs = getAttrs(element);\n const [tag, iconAttributes, children] = iconNode;\n\n const iconAttrs = {\n ...iconAttributes,\n 'icon-name': iconName,\n ...attrs,\n ...elementAttrs,\n };\n\n const classNames = combineClassNames(['lucide', `lucide-${iconName}`, elementAttrs, attrs]);\n\n if (classNames) {\n Object.assign(iconAttrs, {\n class: classNames\n })\n }\n\n const svgElement = createElement([tag, iconAttrs, children]);\n\n return element.parentNode?.replaceChild(svgElement, element);\n};\n\nexport default replaceElement\n","import { SVGProps } from \"./types\";\n\nconst defaultAttributes: SVGProps = {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n};\n\nexport default defaultAttributes\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Accessibility: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '16', cy: '4', r: '1' }],\n ['path', { d: 'm18 19 1-7-6 1' }],\n ['path', { d: 'm5 8 3-3 5.5 3-2.36 3.5' }],\n ['path', { d: 'M4.24 14.5a5 5 0 0 0 6.88 6' }],\n ['path', { d: 'M13.76 17.5a5 5 0 0 0-6.88-6' }],\n ],\n];\n\nexport default Accessibility;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Activity: IconNode = [\n 'svg',\n defaultAttributes,\n [['polyline', { points: '22 12 18 12 15 21 9 3 6 12 2 12' }]],\n];\n\nexport default Activity;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AirVent: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M6 12H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2',\n },\n ],\n ['path', { d: 'M6 8h12' }],\n [\n 'path',\n { d: 'M18.3 17.7a2.5 2.5 0 0 1-3.16 3.83 2.53 2.53 0 0 1-1.14-2V12' },\n ],\n ['path', { d: 'M6.6 15.6A2 2 0 1 0 10 17v-5' }],\n ],\n];\n\nexport default AirVent;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Airplay: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1',\n },\n ],\n ['polygon', { points: '12 15 17 21 7 21 12 15' }],\n ],\n];\n\nexport default Airplay;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlarmCheck: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '13', r: '8' }],\n ['path', { d: 'M5 3 2 6' }],\n ['path', { d: 'm22 6-3-3' }],\n ['path', { d: 'M6.38 18.7 4 21' }],\n ['path', { d: 'M17.64 18.67 20 21' }],\n ['path', { d: 'm9 13 2 2 4-4' }],\n ],\n];\n\nexport default AlarmCheck;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlarmClockOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M6.87 6.87a8 8 0 1 0 11.26 11.26' }],\n ['path', { d: 'M19.9 14.25a8 8 0 0 0-9.15-9.15' }],\n ['path', { d: 'm22 6-3-3' }],\n ['path', { d: 'M6.26 18.67 4 21' }],\n ['path', { d: 'm2 2 20 20' }],\n ['path', { d: 'M4 4 2 6' }],\n ],\n];\n\nexport default AlarmClockOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlarmClock: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '13', r: '8' }],\n ['path', { d: 'M12 9v4l2 2' }],\n ['path', { d: 'M5 3 2 6' }],\n ['path', { d: 'm22 6-3-3' }],\n ['path', { d: 'M6.38 18.7 4 21' }],\n ['path', { d: 'M17.64 18.67 20 21' }],\n ],\n];\n\nexport default AlarmClock;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlarmMinus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '13', r: '8' }],\n ['path', { d: 'M5 3 2 6' }],\n ['path', { d: 'm22 6-3-3' }],\n ['path', { d: 'M6.38 18.7 4 21' }],\n ['path', { d: 'M17.64 18.67 20 21' }],\n ['path', { d: 'M9 13h6' }],\n ],\n];\n\nexport default AlarmMinus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlarmPlus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '13', r: '8' }],\n ['path', { d: 'M5 3 2 6' }],\n ['path', { d: 'm22 6-3-3' }],\n ['path', { d: 'M6.38 18.7 4 21' }],\n ['path', { d: 'M17.64 18.67 20 21' }],\n ['path', { d: 'M12 10v6' }],\n ['path', { d: 'M9 13h6' }],\n ],\n];\n\nexport default AlarmPlus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Album: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['polyline', { points: '11 3 11 11 14 8 17 11 17 3' }],\n ],\n];\n\nexport default Album;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlertCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['line', { x1: '12', x2: '12', y1: '8', y2: '12' }],\n ['line', { x1: '12', x2: '12.01', y1: '16', y2: '16' }],\n ],\n];\n\nexport default AlertCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlertOctagon: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'polygon',\n {\n points:\n '7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2',\n },\n ],\n ['line', { x1: '12', x2: '12', y1: '8', y2: '12' }],\n ['line', { x1: '12', x2: '12.01', y1: '16', y2: '16' }],\n ],\n];\n\nexport default AlertOctagon;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlertTriangle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'm21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z',\n },\n ],\n ['line', { x1: '12', x2: '12', y1: '9', y2: '13' }],\n ['line', { x1: '12', x2: '12.01', y1: '17', y2: '17' }],\n ],\n];\n\nexport default AlertTriangle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignCenterHorizontal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 12h20' }],\n ['path', { d: 'M10 16v4a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-4' }],\n ['path', { d: 'M10 8V4a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v4' }],\n ['path', { d: 'M20 16v1a2 2 0 0 1-2 2h-2a2 2 0 0 1-2-2v-1' }],\n ['path', { d: 'M14 8V7c0-1.1.9-2 2-2h2a2 2 0 0 1 2 2v1' }],\n ],\n];\n\nexport default AlignCenterHorizontal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignCenterVertical: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 2v20' }],\n ['path', { d: 'M8 10H4a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h4' }],\n ['path', { d: 'M16 10h4a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2h-4' }],\n ['path', { d: 'M8 20H7a2 2 0 0 1-2-2v-2c0-1.1.9-2 2-2h1' }],\n ['path', { d: 'M16 14h1a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2h-1' }],\n ],\n];\n\nexport default AlignCenterVertical;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignCenter: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '21', x2: '3', y1: '6', y2: '6' }],\n ['line', { x1: '17', x2: '7', y1: '12', y2: '12' }],\n ['line', { x1: '19', x2: '5', y1: '18', y2: '18' }],\n ],\n];\n\nexport default AlignCenter;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignEndHorizontal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '6', height: '16', x: '4', y: '2', rx: '2' }],\n ['rect', { width: '6', height: '9', x: '14', y: '9', rx: '2' }],\n ['path', { d: 'M22 22H2' }],\n ],\n];\n\nexport default AlignEndHorizontal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignEndVertical: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '16', height: '6', x: '2', y: '4', rx: '2' }],\n ['rect', { width: '9', height: '6', x: '9', y: '14', rx: '2' }],\n ['path', { d: 'M22 22V2' }],\n ],\n];\n\nexport default AlignEndVertical;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignHorizontalDistributeCenter: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '6', height: '14', x: '4', y: '5', rx: '2' }],\n ['rect', { width: '6', height: '10', x: '14', y: '7', rx: '2' }],\n ['path', { d: 'M17 22v-5' }],\n ['path', { d: 'M17 7V2' }],\n ['path', { d: 'M7 22v-3' }],\n ['path', { d: 'M7 5V2' }],\n ],\n];\n\nexport default AlignHorizontalDistributeCenter;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignHorizontalDistributeEnd: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '6', height: '14', x: '4', y: '5', rx: '2' }],\n ['rect', { width: '6', height: '10', x: '14', y: '7', rx: '2' }],\n ['path', { d: 'M10 2v20' }],\n ['path', { d: 'M20 2v20' }],\n ],\n];\n\nexport default AlignHorizontalDistributeEnd;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignHorizontalDistributeStart: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '6', height: '14', x: '4', y: '5', rx: '2' }],\n ['rect', { width: '6', height: '10', x: '14', y: '7', rx: '2' }],\n ['path', { d: 'M4 2v20' }],\n ['path', { d: 'M14 2v20' }],\n ],\n];\n\nexport default AlignHorizontalDistributeStart;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignHorizontalJustifyCenter: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '6', height: '14', x: '2', y: '5', rx: '2' }],\n ['rect', { width: '6', height: '10', x: '16', y: '7', rx: '2' }],\n ['path', { d: 'M12 2v20' }],\n ],\n];\n\nexport default AlignHorizontalJustifyCenter;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignHorizontalJustifyEnd: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '6', height: '14', x: '2', y: '5', rx: '2' }],\n ['rect', { width: '6', height: '10', x: '12', y: '7', rx: '2' }],\n ['path', { d: 'M22 2v20' }],\n ],\n];\n\nexport default AlignHorizontalJustifyEnd;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignHorizontalJustifyStart: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '6', height: '14', x: '6', y: '5', rx: '2' }],\n ['rect', { width: '6', height: '10', x: '16', y: '7', rx: '2' }],\n ['path', { d: 'M2 2v20' }],\n ],\n];\n\nexport default AlignHorizontalJustifyStart;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignHorizontalSpaceAround: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '6', height: '10', x: '9', y: '7', rx: '2' }],\n ['path', { d: 'M4 22V2' }],\n ['path', { d: 'M20 22V2' }],\n ],\n];\n\nexport default AlignHorizontalSpaceAround;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignHorizontalSpaceBetween: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '6', height: '14', x: '3', y: '5', rx: '2' }],\n ['rect', { width: '6', height: '10', x: '15', y: '7', rx: '2' }],\n ['path', { d: 'M3 2v20' }],\n ['path', { d: 'M21 2v20' }],\n ],\n];\n\nexport default AlignHorizontalSpaceBetween;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignJustify: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '3', x2: '21', y1: '6', y2: '6' }],\n ['line', { x1: '3', x2: '21', y1: '12', y2: '12' }],\n ['line', { x1: '3', x2: '21', y1: '18', y2: '18' }],\n ],\n];\n\nexport default AlignJustify;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignLeft: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '21', x2: '3', y1: '6', y2: '6' }],\n ['line', { x1: '15', x2: '3', y1: '12', y2: '12' }],\n ['line', { x1: '17', x2: '3', y1: '18', y2: '18' }],\n ],\n];\n\nexport default AlignLeft;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignRight: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '21', x2: '3', y1: '6', y2: '6' }],\n ['line', { x1: '21', x2: '9', y1: '12', y2: '12' }],\n ['line', { x1: '21', x2: '7', y1: '18', y2: '18' }],\n ],\n];\n\nexport default AlignRight;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignStartHorizontal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '6', height: '16', x: '4', y: '6', rx: '2' }],\n ['rect', { width: '6', height: '9', x: '14', y: '6', rx: '2' }],\n ['path', { d: 'M22 2H2' }],\n ],\n];\n\nexport default AlignStartHorizontal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignStartVertical: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '9', height: '6', x: '6', y: '14', rx: '2' }],\n ['rect', { width: '16', height: '6', x: '6', y: '4', rx: '2' }],\n ['path', { d: 'M2 2v20' }],\n ],\n];\n\nexport default AlignStartVertical;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignVerticalDistributeCenter: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '14', height: '6', x: '5', y: '14', rx: '2' }],\n ['rect', { width: '10', height: '6', x: '7', y: '4', rx: '2' }],\n ['path', { d: 'M22 7h-5' }],\n ['path', { d: 'M7 7H1' }],\n ['path', { d: 'M22 17h-3' }],\n ['path', { d: 'M5 17H2' }],\n ],\n];\n\nexport default AlignVerticalDistributeCenter;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignVerticalDistributeEnd: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '14', height: '6', x: '5', y: '14', rx: '2' }],\n ['rect', { width: '10', height: '6', x: '7', y: '4', rx: '2' }],\n ['path', { d: 'M2 20h20' }],\n ['path', { d: 'M2 10h20' }],\n ],\n];\n\nexport default AlignVerticalDistributeEnd;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignVerticalDistributeStart: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '14', height: '6', x: '5', y: '14', rx: '2' }],\n ['rect', { width: '10', height: '6', x: '7', y: '4', rx: '2' }],\n ['path', { d: 'M2 14h20' }],\n ['path', { d: 'M2 4h20' }],\n ],\n];\n\nexport default AlignVerticalDistributeStart;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignVerticalJustifyCenter: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '14', height: '6', x: '5', y: '16', rx: '2' }],\n ['rect', { width: '10', height: '6', x: '7', y: '2', rx: '2' }],\n ['path', { d: 'M2 12h20' }],\n ],\n];\n\nexport default AlignVerticalJustifyCenter;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignVerticalJustifyEnd: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '14', height: '6', x: '5', y: '12', rx: '2' }],\n ['rect', { width: '10', height: '6', x: '7', y: '2', rx: '2' }],\n ['path', { d: 'M2 22h20' }],\n ],\n];\n\nexport default AlignVerticalJustifyEnd;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignVerticalJustifyStart: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '14', height: '6', x: '5', y: '16', rx: '2' }],\n ['rect', { width: '10', height: '6', x: '7', y: '6', rx: '2' }],\n ['path', { d: 'M2 2h20' }],\n ],\n];\n\nexport default AlignVerticalJustifyStart;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignVerticalSpaceAround: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '10', height: '6', x: '7', y: '9', rx: '2' }],\n ['path', { d: 'M22 20H2' }],\n ['path', { d: 'M22 4H2' }],\n ],\n];\n\nexport default AlignVerticalSpaceAround;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AlignVerticalSpaceBetween: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '14', height: '6', x: '5', y: '15', rx: '2' }],\n ['rect', { width: '10', height: '6', x: '7', y: '3', rx: '2' }],\n ['path', { d: 'M2 21h20' }],\n ['path', { d: 'M2 3h20' }],\n ],\n];\n\nexport default AlignVerticalSpaceBetween;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Anchor: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '5', r: '3' }],\n ['line', { x1: '12', x2: '12', y1: '22', y2: '8' }],\n ['path', { d: 'M5 12H2a10 10 0 0 0 20 0h-3' }],\n ],\n];\n\nexport default Anchor;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Angry: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M16 16s-1.5-2-4-2-4 2-4 2' }],\n ['path', { d: 'M7.5 8 10 9' }],\n ['path', { d: 'm14 9 2.5-1' }],\n ['path', { d: 'M9 10h0' }],\n ['path', { d: 'M15 10h0' }],\n ],\n];\n\nexport default Angry;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Annoyed: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M8 15h8' }],\n ['path', { d: 'M8 9h2' }],\n ['path', { d: 'M14 9h2' }],\n ],\n];\n\nexport default Annoyed;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Aperture: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['line', { x1: '14.31', x2: '20.05', y1: '8', y2: '17.94' }],\n ['line', { x1: '9.69', x2: '21.17', y1: '8', y2: '8' }],\n ['line', { x1: '7.38', x2: '13.12', y1: '12', y2: '2.06' }],\n ['line', { x1: '9.69', x2: '3.95', y1: '16', y2: '6.06' }],\n ['line', { x1: '14.31', x2: '2.83', y1: '16', y2: '16' }],\n ['line', { x1: '16.62', x2: '10.88', y1: '12', y2: '21.94' }],\n ],\n];\n\nexport default Aperture;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Apple: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M12 20.94c1.5 0 2.75 1.06 4 1.06 3 0 6-8 6-12.22A4.91 4.91 0 0 0 17 5c-2.22 0-4 1.44-5 2-1-.56-2.78-2-5-2a4.9 4.9 0 0 0-5 4.78C2 14 5 22 8 22c1.25 0 2.5-1.06 4-1.06Z',\n },\n ],\n ['path', { d: 'M10 2c1 .5 2 2 2 5' }],\n ],\n];\n\nexport default Apple;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArchiveRestore: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '5', x: '2', y: '4', rx: '2' }],\n ['path', { d: 'M12 13v7' }],\n ['path', { d: 'm9 16 3-3 3 3' }],\n ['path', { d: 'M4 9v9a2 2 0 0 0 2 2h2' }],\n ['path', { d: 'M20 9v9a2 2 0 0 1-2 2h-2' }],\n ],\n];\n\nexport default ArchiveRestore;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Archive: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '5', x: '2', y: '4', rx: '2' }],\n ['path', { d: 'M4 9v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9' }],\n ['path', { d: 'M10 13h4' }],\n ],\n];\n\nexport default Archive;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Armchair: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M19 9V6a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v3' }],\n [\n 'path',\n {\n d: 'M3 11v5a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-5a2 2 0 0 0-4 0v2H7v-2a2 2 0 0 0-4 0Z',\n },\n ],\n ['path', { d: 'M5 18v2' }],\n ['path', { d: 'M19 18v2' }],\n ],\n];\n\nexport default Armchair;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowBigDownDash: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M15 5H9' }],\n ['path', { d: 'M15 9v3h4l-7 7-7-7h4V9h6z' }],\n ],\n];\n\nexport default ArrowBigDownDash;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowBigDown: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M15 6v6h4l-7 7-7-7h4V6h6z' }]],\n];\n\nexport default ArrowBigDown;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowBigLeftDash: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M19 15V9' }],\n ['path', { d: 'M15 15h-3v4l-7-7 7-7v4h3v6z' }],\n ],\n];\n\nexport default ArrowBigLeftDash;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowBigLeft: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M18 15h-6v4l-7-7 7-7v4h6v6z' }]],\n];\n\nexport default ArrowBigLeft;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowBigRightDash: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M5 9v6' }],\n ['path', { d: 'M9 9h3V5l7 7-7 7v-4H9V9z' }],\n ],\n];\n\nexport default ArrowBigRightDash;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowBigRight: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M6 9h6V5l7 7-7 7v-4H6V9z' }]],\n];\n\nexport default ArrowBigRight;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowBigUpDash: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M9 19h6' }],\n ['path', { d: 'M9 15v-3H5l7-7 7 7h-4v3H9z' }],\n ],\n];\n\nexport default ArrowBigUpDash;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowBigUp: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M9 18v-6H5l7-7 7 7h-4v6H9z' }]],\n];\n\nexport default ArrowBigUp;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowDown01: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm3 16 4 4 4-4' }],\n ['path', { d: 'M7 20V4' }],\n ['rect', { x: '15', y: '4', width: '4', height: '6', ry: '2' }],\n ['path', { d: 'M17 20v-6h-2' }],\n ['path', { d: 'M15 20h4' }],\n ],\n];\n\nexport default ArrowDown01;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowDown10: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm3 16 4 4 4-4' }],\n ['path', { d: 'M7 20V4' }],\n ['path', { d: 'M17 10V4h-2' }],\n ['path', { d: 'M15 10h4' }],\n ['rect', { x: '15', y: '14', width: '4', height: '6', ry: '2' }],\n ],\n];\n\nexport default ArrowDown10;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowDownAZ: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm3 16 4 4 4-4' }],\n ['path', { d: 'M7 20V4' }],\n ['path', { d: 'M20 8h-5' }],\n ['path', { d: 'M15 10V6.5a2.5 2.5 0 0 1 5 0V10' }],\n ['path', { d: 'M15 14h5l-5 6h5' }],\n ],\n];\n\nexport default ArrowDownAZ;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowDownCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polyline', { points: '8 12 12 16 16 12' }],\n ['line', { x1: '12', x2: '12', y1: '8', y2: '16' }],\n ],\n];\n\nexport default ArrowDownCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowDownLeftFromCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '8,22 2,22 2,16 ' }],\n ['line', { x1: '2', y1: '22', x2: '12', y2: '12' }],\n ['path', { d: 'M2,12C2,6.5,6.5,2,12,2s10,4.5,10,10s-4.5,10-10,10' }],\n ],\n];\n\nexport default ArrowDownLeftFromCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowDownLeft: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '17', x2: '7', y1: '7', y2: '17' }],\n ['polyline', { points: '17 17 7 17 7 7' }],\n ],\n];\n\nexport default ArrowDownLeft;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowDownNarrowWide: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm3 16 4 4 4-4' }],\n ['path', { d: 'M7 20V4' }],\n ['path', { d: 'M11 4h4' }],\n ['path', { d: 'M11 8h7' }],\n ['path', { d: 'M11 12h10' }],\n ],\n];\n\nexport default ArrowDownNarrowWide;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowDownRightFromCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '22,16 22,22 16,22 ' }],\n ['line', { x1: '22', y1: '22', x2: '12', y2: '12' }],\n ['path', { d: 'M12,22C6.5,22,2,17.5,2,12S6.5,2,12,2s10,4.5,10,10' }],\n ],\n];\n\nexport default ArrowDownRightFromCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowDownRight: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '7', x2: '17', y1: '7', y2: '17' }],\n ['polyline', { points: '17 7 17 17 7 17' }],\n ],\n];\n\nexport default ArrowDownRight;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowDownUp: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm3 16 4 4 4-4' }],\n ['path', { d: 'M7 20V4' }],\n ['path', { d: 'm21 8-4-4-4 4' }],\n ['path', { d: 'M17 4v16' }],\n ],\n];\n\nexport default ArrowDownUp;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowDownWideNarrow: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm3 16 4 4 4-4' }],\n ['path', { d: 'M7 20V4' }],\n ['path', { d: 'M11 4h10' }],\n ['path', { d: 'M11 8h7' }],\n ['path', { d: 'M11 12h4' }],\n ],\n];\n\nexport default ArrowDownWideNarrow;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowDownZA: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm3 16 4 4 4-4' }],\n ['path', { d: 'M7 4v16' }],\n ['path', { d: 'M15 4h5l-5 6h5' }],\n ['path', { d: 'M15 20v-3.5a2.5 2.5 0 0 1 5 0V20' }],\n ['path', { d: 'M20 18h-5' }],\n ],\n];\n\nexport default ArrowDownZA;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowDown: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '12', x2: '12', y1: '5', y2: '19' }],\n ['polyline', { points: '19 12 12 19 5 12' }],\n ],\n];\n\nexport default ArrowDown;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowLeftCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polyline', { points: '12 8 8 12 12 16' }],\n ['line', { x1: '16', x2: '8', y1: '12', y2: '12' }],\n ],\n];\n\nexport default ArrowLeftCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowLeftRight: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M8 3 4 7l4 4' }],\n ['path', { d: 'M4 7h16' }],\n ['path', { d: 'm16 21 4-4-4-4' }],\n ['path', { d: 'M20 17H4' }],\n ],\n];\n\nexport default ArrowLeftRight;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowLeft: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '19', x2: '5', y1: '12', y2: '12' }],\n ['polyline', { points: '12 19 5 12 12 5' }],\n ],\n];\n\nexport default ArrowLeft;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowRightCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polyline', { points: '12 16 16 12 12 8' }],\n ['line', { x1: '8', x2: '16', y1: '12', y2: '12' }],\n ],\n];\n\nexport default ArrowRightCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowRightLeft: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm16 3 4 4-4 4' }],\n ['path', { d: 'M20 7H4' }],\n ['path', { d: 'm8 21-4-4 4-4' }],\n ['path', { d: 'M4 17h16' }],\n ],\n];\n\nexport default ArrowRightLeft;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowRight: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '5', x2: '19', y1: '12', y2: '12' }],\n ['polyline', { points: '12 5 19 12 12 19' }],\n ],\n];\n\nexport default ArrowRight;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowUp01: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm3 8 4-4 4 4' }],\n ['path', { d: 'M7 4v16' }],\n ['rect', { x: '15', y: '4', width: '4', height: '6', ry: '2' }],\n ['path', { d: 'M17 20v-6h-2' }],\n ['path', { d: 'M15 20h4' }],\n ],\n];\n\nexport default ArrowUp01;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowUp10: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm3 8 4-4 4 4' }],\n ['path', { d: 'M7 4v16' }],\n ['path', { d: 'M17 10V4h-2' }],\n ['path', { d: 'M15 10h4' }],\n ['rect', { x: '15', y: '14', width: '4', height: '6', ry: '2' }],\n ],\n];\n\nexport default ArrowUp10;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowUpAZ: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm3 8 4-4 4 4' }],\n ['path', { d: 'M7 4v16' }],\n ['path', { d: 'M20 8h-5' }],\n ['path', { d: 'M15 10V6.5a2.5 2.5 0 0 1 5 0V10' }],\n ['path', { d: 'M15 14h5l-5 6h5' }],\n ],\n];\n\nexport default ArrowUpAZ;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowUpCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polyline', { points: '16 12 12 8 8 12' }],\n ['line', { x1: '12', x2: '12', y1: '16', y2: '8' }],\n ],\n];\n\nexport default ArrowUpCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowUpDown: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm21 16-4 4-4-4' }],\n ['path', { d: 'M17 20V4' }],\n ['path', { d: 'm3 8 4-4 4 4' }],\n ['path', { d: 'M7 4v16' }],\n ],\n];\n\nexport default ArrowUpDown;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowUpLeftFromCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12,2c5.5,0,10,4.5,10,10s-4.5,10-10,10S2,17.5,2,12' }],\n ['polyline', { points: '2,8 2,2 8,2 ' }],\n ['line', { x1: '2', y1: '2', x2: '12', y2: '12' }],\n ],\n];\n\nexport default ArrowUpLeftFromCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowUpLeft: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '17', x2: '7', y1: '17', y2: '7' }],\n ['polyline', { points: '7 17 7 7 17 7' }],\n ],\n];\n\nexport default ArrowUpLeft;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowUpNarrowWide: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm3 8 4-4 4 4' }],\n ['path', { d: 'M7 4v16' }],\n ['path', { d: 'M11 12h4' }],\n ['path', { d: 'M11 16h7' }],\n ['path', { d: 'M11 20h10' }],\n ],\n];\n\nexport default ArrowUpNarrowWide;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowUpRightFromCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '16,2 22,2 22,8 ' }],\n ['line', { x1: '22', y1: '2', x2: '12', y2: '12' }],\n ['path', { d: 'M22,12c0,5.5-4.5,10-10,10S2,17.5,2,12S6.5,2,12,2' }],\n ],\n];\n\nexport default ArrowUpRightFromCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowUpRight: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '7', x2: '17', y1: '17', y2: '7' }],\n ['polyline', { points: '7 7 17 7 17 17' }],\n ],\n];\n\nexport default ArrowUpRight;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowUpWideNarrow: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm3 8 4-4 4 4' }],\n ['path', { d: 'M7 4v16' }],\n ['path', { d: 'M11 12h10' }],\n ['path', { d: 'M11 16h7' }],\n ['path', { d: 'M11 20h4' }],\n ],\n];\n\nexport default ArrowUpWideNarrow;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowUpZA: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm3 8 4-4 4 4' }],\n ['path', { d: 'M7 4v16' }],\n ['path', { d: 'M15 4h5l-5 6h5' }],\n ['path', { d: 'M15 20v-3.5a2.5 2.5 0 0 1 5 0V20' }],\n ['path', { d: 'M20 18h-5' }],\n ],\n];\n\nexport default ArrowUpZA;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ArrowUp: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '12', x2: '12', y1: '19', y2: '5' }],\n ['polyline', { points: '5 12 12 5 19 12' }],\n ],\n];\n\nexport default ArrowUp;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Asterisk: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 6v12' }],\n ['path', { d: 'M17.196 9 6.804 15' }],\n ['path', { d: 'm6.804 9 10.392 6' }],\n ],\n];\n\nexport default Asterisk;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst AtSign: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '4' }],\n ['path', { d: 'M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94' }],\n ],\n];\n\nexport default AtSign;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Atom: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '1' }],\n [\n 'path',\n {\n d: 'M20.2 20.2c2.04-2.03.02-7.36-4.5-11.9-4.54-4.52-9.87-6.54-11.9-4.5-2.04 2.03-.02 7.36 4.5 11.9 4.54 4.52 9.87 6.54 11.9 4.5Z',\n },\n ],\n [\n 'path',\n {\n d: 'M15.7 15.7c4.52-4.54 6.54-9.87 4.5-11.9-2.03-2.04-7.36-.02-11.9 4.5-4.52 4.54-6.54 9.87-4.5 11.9 2.03 2.04 7.36.02 11.9-4.5Z',\n },\n ],\n ],\n];\n\nexport default Atom;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Award: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '8', r: '6' }],\n ['path', { d: 'M15.477 12.89 17 22l-5-3-5 3 1.523-9.11' }],\n ],\n];\n\nexport default Award;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Axe: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm14 12-8.5 8.5a2.12 2.12 0 1 1-3-3L11 9' }],\n ['path', { d: 'M15 13 9 7l4-4 6 6h3a8 8 0 0 1-7 7z' }],\n ],\n];\n\nexport default Axe;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Axis3d: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 4v16h16' }],\n ['path', { d: 'm4 20 7-7' }],\n ],\n];\n\nexport default Axis3d;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Baby: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M9 12h.01' }],\n ['path', { d: 'M15 12h.01' }],\n ['path', { d: 'M10 16c.5.3 1.2.5 2 .5s1.5-.2 2-.5' }],\n [\n 'path',\n {\n d: 'M19 6.3a9 9 0 0 1 1.8 3.9 2 2 0 0 1 0 3.6 9 9 0 0 1-17.6 0 2 2 0 0 1 0-3.6A9 9 0 0 1 12 3c2 0 3.5 1.1 3.5 2.5s-.9 2.5-2 2.5c-.8 0-1.5-.4-1.5-1',\n },\n ],\n ],\n];\n\nexport default Baby;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Backpack: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4 20V10a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v10a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2Z',\n },\n ],\n ['path', { d: 'M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2' }],\n ['path', { d: 'M8 21v-5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v5' }],\n ['path', { d: 'M8 10h8' }],\n ['path', { d: 'M8 18h8' }],\n ],\n];\n\nexport default Backpack;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BaggageClaim: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M22 18H6a2 2 0 0 1-2-2V7a2 2 0 0 0-2-2' }],\n ['path', { d: 'M17 14V4a2 2 0 0 0-2-2h-1a2 2 0 0 0-2 2v10' }],\n ['rect', { width: '13', height: '8', x: '8', y: '6', rx: '1' }],\n ['circle', { cx: '18', cy: '20', r: '2' }],\n ['circle', { cx: '9', cy: '20', r: '2' }],\n ],\n];\n\nexport default BaggageClaim;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Ban: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['line', { x1: '4.93', x2: '19.07', y1: '4.93', y2: '19.07' }],\n ],\n];\n\nexport default Ban;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Banana: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 13c3.5-2 8-2 10 2a5.5 5.5 0 0 1 8 5' }],\n [\n 'path',\n {\n d: 'M5.15 17.89c5.52-1.52 8.65-6.89 7-12C11.55 4 11.5 2 13 2c3.22 0 5 5.5 5 8 0 6.5-4.2 12-10.49 12C5.11 22 2 22 2 20c0-1.5 1.14-1.55 3.15-2.11Z',\n },\n ],\n ],\n];\n\nexport default Banana;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Banknote: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '12', x: '2', y: '6', rx: '2' }],\n ['circle', { cx: '12', cy: '12', r: '2' }],\n ['path', { d: 'M6 12h.01M18 12h.01' }],\n ],\n];\n\nexport default Banknote;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BarChart2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '18', x2: '18', y1: '20', y2: '10' }],\n ['line', { x1: '12', x2: '12', y1: '20', y2: '4' }],\n ['line', { x1: '6', x2: '6', y1: '20', y2: '14' }],\n ],\n];\n\nexport default BarChart2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BarChart3: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 3v18h18' }],\n ['path', { d: 'M18 17V9' }],\n ['path', { d: 'M13 17V5' }],\n ['path', { d: 'M8 17v-3' }],\n ],\n];\n\nexport default BarChart3;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BarChart4: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 3v18h18' }],\n ['path', { d: 'M13 17V9' }],\n ['path', { d: 'M18 17V5' }],\n ['path', { d: 'M8 17v-3' }],\n ],\n];\n\nexport default BarChart4;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BarChartHorizontal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 3v18h18' }],\n ['path', { d: 'M7 16h8' }],\n ['path', { d: 'M7 11h12' }],\n ['path', { d: 'M7 6h3' }],\n ],\n];\n\nexport default BarChartHorizontal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BarChart: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '12', x2: '12', y1: '20', y2: '10' }],\n ['line', { x1: '18', x2: '18', y1: '20', y2: '4' }],\n ['line', { x1: '6', x2: '6', y1: '20', y2: '16' }],\n ],\n];\n\nexport default BarChart;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Baseline: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 20h16' }],\n ['path', { d: 'm6 16 6-12 6 12' }],\n ['path', { d: 'M8 12h8' }],\n ],\n];\n\nexport default Baseline;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Bath: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M9 6 6.5 3.5a1.5 1.5 0 0 0-1-.5C4.683 3 4 3.683 4 4.5V17a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5',\n },\n ],\n ['line', { x1: '10', x2: '8', y1: '5', y2: '7' }],\n ['line', { x1: '2', x2: '22', y1: '12', y2: '12' }],\n ['line', { x1: '7', x2: '7', y1: '19', y2: '21' }],\n ['line', { x1: '17', x2: '17', y1: '19', y2: '21' }],\n ],\n];\n\nexport default Bath;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BatteryCharging: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M15 7h1a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2h-2' }],\n ['path', { d: 'M6 7H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h1' }],\n ['path', { d: 'm11 7-3 5h4l-3 5' }],\n ['line', { x1: '22', x2: '22', y1: '11', y2: '13' }],\n ],\n];\n\nexport default BatteryCharging;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BatteryFull: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '16', height: '10', x: '2', y: '7', rx: '2', ry: '2' }],\n ['line', { x1: '22', x2: '22', y1: '11', y2: '13' }],\n ['line', { x1: '6', x2: '6', y1: '11', y2: '13' }],\n ['line', { x1: '10', x2: '10', y1: '11', y2: '13' }],\n ['line', { x1: '14', x2: '14', y1: '11', y2: '13' }],\n ],\n];\n\nexport default BatteryFull;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BatteryLow: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '16', height: '10', x: '2', y: '7', rx: '2', ry: '2' }],\n ['line', { x1: '22', x2: '22', y1: '11', y2: '13' }],\n ['line', { x1: '6', x2: '6', y1: '11', y2: '13' }],\n ],\n];\n\nexport default BatteryLow;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BatteryMedium: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '16', height: '10', x: '2', y: '7', rx: '2', ry: '2' }],\n ['line', { x1: '22', x2: '22', y1: '11', y2: '13' }],\n ['line', { x1: '6', x2: '6', y1: '11', y2: '13' }],\n ['line', { x1: '10', x2: '10', y1: '11', y2: '13' }],\n ],\n];\n\nexport default BatteryMedium;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BatteryWarning: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M14 7h2a2 2 0 0 1 2 2v6c0 1-1 2-2 2h-2' }],\n ['path', { d: 'M6 7H4a2 2 0 0 0-2 2v6c0 1 1 2 2 2h2' }],\n ['line', { x1: '22', x2: '22', y1: '11', y2: '13' }],\n ['line', { x1: '10', x2: '10', y1: '7', y2: '13' }],\n ['line', { x1: '10', x2: '10', y1: '17', y2: '17.01' }],\n ],\n];\n\nexport default BatteryWarning;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Battery: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '16', height: '10', x: '2', y: '7', rx: '2', ry: '2' }],\n ['line', { x1: '22', x2: '22', y1: '11', y2: '13' }],\n ],\n];\n\nexport default Battery;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Beaker: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4.5 3h15' }],\n ['path', { d: 'M6 3v16a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V3' }],\n ['path', { d: 'M6 14h12' }],\n ],\n];\n\nexport default Beaker;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BeanOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M9 9c-.64.64-1.521.954-2.402 1.165A6 6 0 0 0 8 22a13.96 13.96 0 0 0 9.9-4.1',\n },\n ],\n ['path', { d: 'M10.75 5.093A6 6 0 0 1 22 8c0 2.411-.61 4.68-1.683 6.66' }],\n [\n 'path',\n {\n d: 'M5.341 10.62a4 4 0 0 0 6.487 1.208M10.62 5.341a4.015 4.015 0 0 1 2.039 2.04',\n },\n ],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default BeanOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Bean: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M10.165 6.598C9.954 7.478 9.64 8.36 9 9c-.64.64-1.521.954-2.402 1.165A6 6 0 0 0 8 22c7.732 0 14-6.268 14-14a6 6 0 0 0-11.835-1.402Z',\n },\n ],\n ['path', { d: 'M5.341 10.62a4 4 0 1 0 5.279-5.28' }],\n ],\n];\n\nexport default Bean;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BedDouble: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 20v-8a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v8' }],\n ['path', { d: 'M4 10V6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4' }],\n ['path', { d: 'M12 4v6' }],\n ['path', { d: 'M2 18h20' }],\n ],\n];\n\nexport default BedDouble;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BedSingle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 20v-8a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v8' }],\n ['path', { d: 'M5 10V6a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v4' }],\n ['path', { d: 'M3 18h18' }],\n ],\n];\n\nexport default BedSingle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Bed: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 4v16' }],\n ['path', { d: 'M2 8h18a2 2 0 0 1 2 2v10' }],\n ['path', { d: 'M2 17h20' }],\n ['path', { d: 'M6 8v9' }],\n ],\n];\n\nexport default Bed;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Beef: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12.5', cy: '8.5', r: '2.5' }],\n [\n 'path',\n {\n d: 'M12.5 2a6.5 6.5 0 0 0-6.22 4.6c-1.1 3.13-.78 3.9-3.18 6.08A3 3 0 0 0 5 18c4 0 8.4-1.8 11.4-4.3A6.5 6.5 0 0 0 12.5 2Z',\n },\n ],\n [\n 'path',\n {\n d: 'm18.5 6 2.19 4.5a6.48 6.48 0 0 1 .31 2 6.49 6.49 0 0 1-2.6 5.2C15.4 20.2 11 22 7 22a3 3 0 0 1-2.68-1.66L2.4 16.5',\n },\n ],\n ],\n];\n\nexport default Beef;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Beer: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M17 11h1a3 3 0 0 1 0 6h-1' }],\n ['path', { d: 'M9 12v6' }],\n ['path', { d: 'M13 12v6' }],\n [\n 'path',\n {\n d: 'M14 7.5c-1 0-1.44.5-3 .5s-2-.5-3-.5-1.72.5-2.5.5a2.5 2.5 0 0 1 0-5c.78 0 1.57.5 2.5.5S9.44 2 11 2s2 1.5 3 1.5 1.72-.5 2.5-.5a2.5 2.5 0 0 1 0 5c-.78 0-1.5-.5-2.5-.5Z',\n },\n ],\n ['path', { d: 'M5 8v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8' }],\n ],\n];\n\nexport default Beer;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BellMinus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M13.73 21a2 2 0 0 1-3.46 0' }],\n ['path', { d: 'M21 5h-6' }],\n [\n 'path',\n { d: 'M18.021 9C18.29 15.193 21 17 21 17H3s3-2 3-9a6 6 0 0 1 7-5.916' },\n ],\n ],\n];\n\nexport default BellMinus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BellOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M13.73 21a2 2 0 0 1-3.46 0' }],\n ['path', { d: 'M18.63 13A17.888 17.888 0 0 1 18 8' }],\n ['path', { d: 'M6.26 6.26A5.86 5.86 0 0 0 6 8c0 7-3 9-3 9h14' }],\n ['path', { d: 'M18 8a6 6 0 0 0-9.33-5' }],\n ['path', { d: 'm2 2 20 20' }],\n ],\n];\n\nexport default BellOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BellPlus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M18.387 12C19.198 15.799 21 17 21 17H3s3-2 3-9a6 6 0 0 1 7-5.916' },\n ],\n ['path', { d: 'M13.73 21a2 2 0 0 1-3.46 0' }],\n ['path', { d: 'M18 2v6' }],\n ['path', { d: 'M21 5h-6' }],\n ],\n];\n\nexport default BellPlus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BellRing: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9' }],\n ['path', { d: 'M13.73 21a2 2 0 0 1-3.46 0' }],\n ['path', { d: 'M2 8c0-2.2.7-4.3 2-6' }],\n ['path', { d: 'M22 8a10 10 0 0 0-2-6' }],\n ],\n];\n\nexport default BellRing;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Bell: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9' }],\n ['path', { d: 'M13.73 21a2 2 0 0 1-3.46 0' }],\n ],\n];\n\nexport default Bell;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Bike: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '18.5', cy: '17.5', r: '3.5' }],\n ['circle', { cx: '5.5', cy: '17.5', r: '3.5' }],\n ['circle', { cx: '15', cy: '5', r: '1' }],\n ['path', { d: 'M12 17.5V14l-3-3 4-3 2 3h2' }],\n ],\n];\n\nexport default Bike;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Binary: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M6 20h4' }],\n ['path', { d: 'M14 10h4' }],\n ['path', { d: 'M6 14h2v6' }],\n ['path', { d: 'M14 4h2v6' }],\n ['rect', { width: '4', height: '6', x: '6', y: '4' }],\n ['rect', { width: '4', height: '6', x: '14', y: '14' }],\n ],\n];\n\nexport default Binary;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Bird: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M16 7h.01' }],\n ['path', { d: 'M3.4 18H12a8 8 0 0 0 8-8V7a4 4 0 0 0-7.28-2.3L2 20' }],\n ['path', { d: 'm20 7 2 .5-2 .5' }],\n ['path', { d: 'M10 18v3' }],\n ['path', { d: 'M14 17.75V21' }],\n ['path', { d: 'M7 18a6 6 0 0 0 3.84-10.61' }],\n ],\n];\n\nexport default Bird;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Bitcoin: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M11.767 19.089c4.924.868 6.14-6.025 1.216-6.894m-1.216 6.894L5.86 18.047m5.908 1.042-.347 1.97m1.563-8.864c4.924.869 6.14-6.025 1.215-6.893m-1.215 6.893-3.94-.694m5.155-6.2L8.29 4.26m5.908 1.042.348-1.97M7.48 20.364l3.126-17.727',\n },\n ],\n ],\n];\n\nexport default Bitcoin;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Blinds: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 3h18' }],\n ['path', { d: 'M20 7H8' }],\n ['path', { d: 'M20 11H8' }],\n ['path', { d: 'M10 19h10' }],\n ['path', { d: 'M8 15h12' }],\n ['path', { d: 'M4 3v14' }],\n ['circle', { cx: '4', cy: '19', r: '2' }],\n ],\n];\n\nexport default Blinds;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BluetoothConnected: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm7 7 10 10-5 5V2l5 5L7 17' }],\n ['line', { x1: '18', x2: '21', y1: '12', y2: '12' }],\n ['line', { x1: '3', x2: '6', y1: '12', y2: '12' }],\n ],\n];\n\nexport default BluetoothConnected;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BluetoothOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm17 17-5 5V12l-5 5' }],\n ['path', { d: 'm2 2 20 20' }],\n ['path', { d: 'M14.5 9.5 17 7l-5-5v4.5' }],\n ],\n];\n\nexport default BluetoothOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BluetoothSearching: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm7 7 10 10-5 5V2l5 5L7 17' }],\n ['path', { d: 'M20.83 14.83a4 4 0 0 0 0-5.66' }],\n ['path', { d: 'M18 12h.01' }],\n ],\n];\n\nexport default BluetoothSearching;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Bluetooth: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'm7 7 10 10-5 5V2l5 5L7 17' }]],\n];\n\nexport default Bluetooth;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Bold: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M14 12a4 4 0 0 0 0-8H6v8' }],\n ['path', { d: 'M15 20a4 4 0 0 0 0-8H6v8Z' }],\n ],\n];\n\nexport default Bold;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Bomb: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '11', cy: '13', r: '9' }],\n [\n 'path',\n {\n d: 'm19.5 9.5 1.8-1.8a2.4 2.4 0 0 0 0-3.4l-1.6-1.6a2.41 2.41 0 0 0-3.4 0l-1.8 1.8',\n },\n ],\n ['path', { d: 'm22 2-1.5 1.5' }],\n ],\n];\n\nexport default Bomb;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Bone: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M17 10c.7-.7 1.69 0 2.5 0a2.5 2.5 0 1 0 0-5 .5.5 0 0 1-.5-.5 2.5 2.5 0 1 0-5 0c0 .81.7 1.8 0 2.5l-7 7c-.7.7-1.69 0-2.5 0a2.5 2.5 0 0 0 0 5c.28 0 .5.22.5.5a2.5 2.5 0 1 0 5 0c0-.81-.7-1.8 0-2.5Z',\n },\n ],\n ],\n];\n\nexport default Bone;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BookCopy: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2,16V4c0-1.1,0.9-2,2-2h11' }],\n ['path', { d: 'M5,14H4c-1.1,0-2,0.9-2,2s0.9,2,2,2h1' }],\n ['path', { d: 'M22,18H11c-1.1,0-2,0.9-2,2l0,0' }],\n ['path', { d: 'M11,6h11v16H11c-1.1,0-2-0.9-2-2V8C9,6.9,9.9,6,11,6z' }],\n ],\n];\n\nexport default BookCopy;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BookDown: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 19.5A2.5 2.5 0 0 1 6.5 17H20' }],\n [\n 'path',\n { d: 'M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2Z' },\n ],\n ['path', { d: 'M12 13V7' }],\n ['path', { d: 'm9 10 3 3 3-3' }],\n ],\n];\n\nexport default BookDown;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BookKey: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M20,2l-4.5,4.5' }],\n ['path', { d: 'M19,3l1,1' }],\n ['circle', { cx: '14', cy: '8', r: '2' }],\n ['path', { d: 'M4,19.5C4,18.1,5.1,17,6.5,17H20' }],\n [\n 'path',\n { d: 'M20,8v14H6.5C5.1,22,4,20.9,4,19.5v-15C4,3.1,5.1,2,6.5,2H14' },\n ],\n ],\n];\n\nexport default BookKey;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BookLock: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4,19.5C4,18.1,5.1,17,6.5,17H20' }],\n ['path', { d: 'M18,6V4c0-1.1-0.9-2-2-2s-2,0.9-2,2v2' }],\n [\n 'path',\n { d: 'M20,15v7H6.5C5.1,22,4,20.9,4,19.5v-15C4,3.1,5.1,2,6.5,2H10' },\n ],\n [\n 'path',\n {\n d: 'M13,6h6c0.6,0,1,0.4,1,1v3c0,0.6-0.4,1-1,1h-6c-0.6,0-1-0.4-1-1V7C12,6.4,12.4,6,13,6z',\n },\n ],\n ],\n];\n\nexport default BookLock;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BookMarked: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '10,2 10,10 13,7 16,10 16,2' }],\n ['path', { d: 'M4 19.5A2.5 2.5 0 0 1 6.5 17H20' }],\n [\n 'path',\n { d: 'M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z' },\n ],\n ],\n];\n\nexport default BookMarked;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BookMinus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '9', y1: '10', x2: '15', y2: '10' }],\n ['path', { d: 'M4 19.5A2.5 2.5 0 0 1 6.5 17H20' }],\n [\n 'path',\n { d: 'M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z' },\n ],\n ],\n];\n\nexport default BookMinus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BookOpenCheck: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M8 3H2v15h7c1.7 0 3 1.3 3 3V7c0-2.2-1.8-4-4-4Z' }],\n ['path', { d: 'm16 12 2 2 4-4' }],\n ['path', { d: 'M22 6V3h-6c-2.2 0-4 1.8-4 4v14c0-1.7 1.3-3 3-3h7v-2.3' }],\n ],\n];\n\nexport default BookOpenCheck;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BookOpen: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z' }],\n ['path', { d: 'M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z' }],\n ],\n];\n\nexport default BookOpen;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BookPlus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '12', y1: '7', x2: '12', y2: '13' }],\n ['line', { x1: '9', y1: '10', x2: '15', y2: '10' }],\n ['path', { d: 'M4 19.5A2.5 2.5 0 0 1 6.5 17H20' }],\n [\n 'path',\n { d: 'M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z' },\n ],\n ],\n];\n\nexport default BookPlus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BookTemplate: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M20,22h-2' }],\n ['path', { d: 'M20,15v2l-2,0' }],\n ['path', { d: 'M4,19.5V15' }],\n ['path', { d: 'M20,8v3' }],\n ['path', { d: 'M18,2h2v2' }],\n ['path', { d: 'M4,11V9' }],\n ['path', { d: 'M12,2h2' }],\n ['path', { d: 'M12,22h2' }],\n ['path', { d: 'M12,17h2' }],\n ['path', { d: 'M8,22H6.5C5.1,22,4,20.9,4,19.5S5.1,17,6.5,17H8' }],\n ['path', { d: 'M4,5V4.5C4,3.1,5.1,2,6.5,2H8' }],\n ],\n];\n\nexport default BookTemplate;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BookUp: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 19.5A2.5 2.5 0 0 1 6.5 17H20' }],\n [\n 'path',\n { d: 'M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2Z' },\n ],\n ['path', { d: 'M12,13V7' }],\n ['path', { d: 'M9,10l3-3l3,3' }],\n ],\n];\n\nexport default BookUp;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BookX: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M9.5,7l5,5' }],\n ['path', { d: 'M14.5,7l-5,5' }],\n ['path', { d: 'M4 19.5A2.5 2.5 0 0 1 6.5 17H20' }],\n [\n 'path',\n { d: 'M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z' },\n ],\n ],\n];\n\nexport default BookX;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Book: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 19.5A2.5 2.5 0 0 1 6.5 17H20' }],\n [\n 'path',\n { d: 'M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z' },\n ],\n ],\n];\n\nexport default Book;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BookmarkMinus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z' }],\n ['line', { x1: '15', x2: '9', y1: '10', y2: '10' }],\n ],\n];\n\nexport default BookmarkMinus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BookmarkPlus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z' }],\n ['line', { x1: '12', x2: '12', y1: '7', y2: '13' }],\n ['line', { x1: '15', x2: '9', y1: '10', y2: '10' }],\n ],\n];\n\nexport default BookmarkPlus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Bookmark: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'm19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z' }]],\n];\n\nexport default Bookmark;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Bot: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '10', x: '3', y: '11', rx: '2' }],\n ['circle', { cx: '12', cy: '5', r: '2' }],\n ['path', { d: 'M12 7v4' }],\n ['line', { x1: '8', x2: '8', y1: '16', y2: '16' }],\n ['line', { x1: '16', x2: '16', y1: '16', y2: '16' }],\n ],\n];\n\nexport default Bot;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BoxSelect: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M5 3a2 2 0 0 0-2 2' }],\n ['path', { d: 'M19 3a2 2 0 0 1 2 2' }],\n ['path', { d: 'M21 19a2 2 0 0 1-2 2' }],\n ['path', { d: 'M5 21a2 2 0 0 1-2-2' }],\n ['path', { d: 'M9 3h1' }],\n ['path', { d: 'M9 21h1' }],\n ['path', { d: 'M14 3h1' }],\n ['path', { d: 'M14 21h1' }],\n ['path', { d: 'M3 9v1' }],\n ['path', { d: 'M21 9v1' }],\n ['path', { d: 'M3 14v1' }],\n ['path', { d: 'M21 14v1' }],\n ],\n];\n\nexport default BoxSelect;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Box: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z',\n },\n ],\n ['polyline', { points: '3.29 7 12 12 20.71 7' }],\n ['line', { x1: '12', x2: '12', y1: '22', y2: '12' }],\n ],\n];\n\nexport default Box;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Boxes: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z',\n },\n ],\n ['path', { d: 'm7 16.5-4.74-2.85' }],\n ['path', { d: 'm7 16.5 5-3' }],\n ['path', { d: 'M7 16.5v5.17' }],\n [\n 'path',\n {\n d: 'M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z',\n },\n ],\n ['path', { d: 'm17 16.5-5-3' }],\n ['path', { d: 'm17 16.5 4.74-2.85' }],\n ['path', { d: 'M17 16.5v5.17' }],\n [\n 'path',\n {\n d: 'M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z',\n },\n ],\n ['path', { d: 'M12 8 7.26 5.15' }],\n ['path', { d: 'm12 8 4.74-2.85' }],\n ['path', { d: 'M12 13.5V8' }],\n ],\n];\n\nexport default Boxes;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BrainCircuit: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M12 4.5a2.5 2.5 0 0 0-4.96-.46 2.5 2.5 0 0 0-1.98 3 2.5 2.5 0 0 0-1.32 4.24 3 3 0 0 0 .34 5.58 2.5 2.5 0 0 0 2.96 3.08 2.5 2.5 0 0 0 4.91.05L12 20V4.5Z',\n },\n ],\n ['path', { d: 'M16 8V5c0-1.1.9-2 2-2' }],\n ['path', { d: 'M12 13h4' }],\n ['path', { d: 'M12 18h6a2 2 0 0 1 2 2v1' }],\n ['path', { d: 'M12 8h8' }],\n ['path', { d: 'M20.5 8a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z' }],\n ['path', { d: 'M16.5 13a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z' }],\n ['path', { d: 'M20.5 21a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z' }],\n ['path', { d: 'M18.5 3a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z' }],\n ],\n];\n\nexport default BrainCircuit;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst BrainCog: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M12 4.5a2.5 2.5 0 0 0-4.96-.46 2.5 2.5 0 0 0-1.98 3 2.5 2.5 0 0 0-1.32 4.24 3 3 0 0 0 .34 5.58 2.5 2.5 0 0 0 2.96 3.08A2.5 2.5 0 0 0 9.5 22c1.21 0 2.5-.74 2.5-2.5m0-15a2.5 2.5 0 0 1 4.96-.46 2.5 2.5 0 0 1 1.98 3 2.5 2.5 0 0 1 1.32 4.24 3 3 0 0 1-.34 5.58 2.5 2.5 0 0 1-2.96 3.08A2.5 2.5 0 0 1 14.5 22c-1.21 0-2.5-.74-2.5-2.5m0-15V5m0 14.5V19',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '2' }],\n ['path', { d: 'M12 9v1' }],\n ['path', { d: 'M12 14v1' }],\n ['path', { d: 'm14.6 10.5-.87.5' }],\n ['path', { d: 'm10.27 13-.87.5' }],\n ['path', { d: 'm14.6 13.5-.87-.5' }],\n ['path', { d: 'm10.27 11-.87-.5' }],\n ],\n];\n\nexport default BrainCog;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Brain: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08 3 3 0 0 1-.34-5.58 2.5 2.5 0 0 1 1.32-4.24 2.5 2.5 0 0 1 1.98-3A2.5 2.5 0 0 1 9.5 2Z',\n },\n ],\n [\n 'path',\n {\n d: 'M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-1.98-3A2.5 2.5 0 0 0 14.5 2Z',\n },\n ],\n ],\n];\n\nexport default Brain;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Briefcase: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '14', x: '2', y: '7', rx: '2', ry: '2' }],\n ['path', { d: 'M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16' }],\n ],\n];\n\nexport default Briefcase;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Brush: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'm9.06 11.9 8.07-8.06a2.85 2.85 0 1 1 4.03 4.03l-8.06 8.08' },\n ],\n [\n 'path',\n {\n d: 'M7.07 14.94c-1.66 0-3 1.35-3 3.02 0 1.33-2.5 1.52-2 2.02 1.08 1.1 2.49 2.02 4 2.02 2.2 0 4-1.8 4-4.04a3.01 3.01 0 0 0-3-3.02z',\n },\n ],\n ],\n];\n\nexport default Brush;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Bug: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '8', height: '14', x: '8', y: '6', rx: '4' }],\n ['path', { d: 'm19 7-3 2' }],\n ['path', { d: 'm5 7 3 2' }],\n ['path', { d: 'm19 19-3-2' }],\n ['path', { d: 'm5 19 3-2' }],\n ['path', { d: 'M20 13h-4' }],\n ['path', { d: 'M4 13h4' }],\n ['path', { d: 'm10 4 1 2' }],\n ['path', { d: 'm14 4-1 2' }],\n ],\n];\n\nexport default Bug;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Building2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z' }],\n ['path', { d: 'M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2' }],\n ['path', { d: 'M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2' }],\n ['path', { d: 'M10 6h4' }],\n ['path', { d: 'M10 10h4' }],\n ['path', { d: 'M10 14h4' }],\n ['path', { d: 'M10 18h4' }],\n ],\n];\n\nexport default Building2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Building: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '16', height: '20', x: '4', y: '2', rx: '2', ry: '2' }],\n ['path', { d: 'M9 22v-4h6v4' }],\n ['path', { d: 'M8 6h.01' }],\n ['path', { d: 'M16 6h.01' }],\n ['path', { d: 'M12 6h.01' }],\n ['path', { d: 'M12 10h.01' }],\n ['path', { d: 'M12 14h.01' }],\n ['path', { d: 'M16 10h.01' }],\n ['path', { d: 'M16 14h.01' }],\n ['path', { d: 'M8 10h.01' }],\n ['path', { d: 'M8 14h.01' }],\n ],\n];\n\nexport default Building;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Bus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M19 17h2l.64-2.54c.24-.959.24-1.962 0-2.92l-1.07-4.27A3 3 0 0 0 17.66 5H4a2 2 0 0 0-2 2v10h2',\n },\n ],\n ['path', { d: 'M14 17H9' }],\n ['circle', { cx: '6.5', cy: '17.5', r: '2.5' }],\n ['circle', { cx: '16.5', cy: '17.5', r: '2.5' }],\n ],\n];\n\nexport default Bus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Cake: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M20 21v-8a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8' }],\n ['path', { d: 'M4 16s.5-1 2-1 2.5 2 4 2 2.5-2 4-2 2.5 2 4 2 2-1 2-1' }],\n ['path', { d: 'M2 21h20' }],\n ['path', { d: 'M7 8v2' }],\n ['path', { d: 'M12 8v2' }],\n ['path', { d: 'M17 8v2' }],\n ['path', { d: 'M7 4h.01' }],\n ['path', { d: 'M12 4h.01' }],\n ['path', { d: 'M17 4h.01' }],\n ],\n];\n\nexport default Cake;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Calculator: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '16', height: '20', x: '4', y: '2', rx: '2' }],\n ['line', { x1: '8', x2: '16', y1: '6', y2: '6' }],\n ['line', { x1: '16', x2: '16', y1: '14', y2: '18' }],\n ['path', { d: 'M16 10h.01' }],\n ['path', { d: 'M12 10h.01' }],\n ['path', { d: 'M8 10h.01' }],\n ['path', { d: 'M12 14h.01' }],\n ['path', { d: 'M8 14h.01' }],\n ['path', { d: 'M12 18h.01' }],\n ['path', { d: 'M8 18h.01' }],\n ],\n];\n\nexport default Calculator;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CalendarCheck2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M21 14V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8' },\n ],\n ['line', { x1: '16', x2: '16', y1: '2', y2: '6' }],\n ['line', { x1: '8', x2: '8', y1: '2', y2: '6' }],\n ['line', { x1: '3', x2: '21', y1: '10', y2: '10' }],\n ['path', { d: 'm16 20 2 2 4-4' }],\n ],\n];\n\nexport default CalendarCheck2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CalendarCheck: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '4', rx: '2', ry: '2' }],\n ['line', { x1: '16', x2: '16', y1: '2', y2: '6' }],\n ['line', { x1: '8', x2: '8', y1: '2', y2: '6' }],\n ['line', { x1: '3', x2: '21', y1: '10', y2: '10' }],\n ['path', { d: 'm9 16 2 2 4-4' }],\n ],\n];\n\nexport default CalendarCheck;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CalendarClock: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5' },\n ],\n ['path', { d: 'M16 2v4' }],\n ['path', { d: 'M8 2v4' }],\n ['path', { d: 'M3 10h5' }],\n ['path', { d: 'M17.5 17.5 16 16.25V14' }],\n ['path', { d: 'M22 16a6 6 0 1 1-12 0 6 6 0 0 1 12 0Z' }],\n ],\n];\n\nexport default CalendarClock;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CalendarDays: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '4', rx: '2', ry: '2' }],\n ['line', { x1: '16', x2: '16', y1: '2', y2: '6' }],\n ['line', { x1: '8', x2: '8', y1: '2', y2: '6' }],\n ['line', { x1: '3', x2: '21', y1: '10', y2: '10' }],\n ['path', { d: 'M8 14h.01' }],\n ['path', { d: 'M12 14h.01' }],\n ['path', { d: 'M16 14h.01' }],\n ['path', { d: 'M8 18h.01' }],\n ['path', { d: 'M12 18h.01' }],\n ['path', { d: 'M16 18h.01' }],\n ],\n];\n\nexport default CalendarDays;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CalendarHeart: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M21 10V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h7' },\n ],\n ['path', { d: 'M16 2v4' }],\n ['path', { d: 'M8 2v4' }],\n ['path', { d: 'M3 10h18' }],\n [\n 'path',\n {\n d: 'M21.29 14.7a2.43 2.43 0 0 0-2.65-.52c-.3.12-.57.3-.8.53l-.34.34-.35-.34a2.43 2.43 0 0 0-2.65-.53c-.3.12-.56.3-.79.53-.95.94-1 2.53.2 3.74L17.5 22l3.6-3.55c1.2-1.21 1.14-2.8.19-3.74Z',\n },\n ],\n ],\n];\n\nexport default CalendarHeart;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CalendarMinus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8' },\n ],\n ['line', { x1: '16', x2: '16', y1: '2', y2: '6' }],\n ['line', { x1: '8', x2: '8', y1: '2', y2: '6' }],\n ['line', { x1: '3', x2: '21', y1: '10', y2: '10' }],\n ['line', { x1: '16', x2: '22', y1: '19', y2: '19' }],\n ],\n];\n\nexport default CalendarMinus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CalendarOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M4.18 4.18A2 2 0 0 0 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 1.82-1.18' },\n ],\n ['path', { d: 'M21 15.5V6a2 2 0 0 0-2-2H9.5' }],\n ['path', { d: 'M16 2v4' }],\n ['path', { d: 'M3 10h7' }],\n ['path', { d: 'M21 10h-5.5' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default CalendarOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CalendarPlus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8' },\n ],\n ['line', { x1: '16', x2: '16', y1: '2', y2: '6' }],\n ['line', { x1: '8', x2: '8', y1: '2', y2: '6' }],\n ['line', { x1: '3', x2: '21', y1: '10', y2: '10' }],\n ['line', { x1: '19', x2: '19', y1: '16', y2: '22' }],\n ['line', { x1: '16', x2: '22', y1: '19', y2: '19' }],\n ],\n];\n\nexport default CalendarPlus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CalendarRange: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '4', rx: '2', ry: '2' }],\n ['line', { x1: '16', x2: '16', y1: '2', y2: '6' }],\n ['line', { x1: '8', x2: '8', y1: '2', y2: '6' }],\n ['line', { x1: '3', x2: '21', y1: '10', y2: '10' }],\n ['path', { d: 'M17 14h-6' }],\n ['path', { d: 'M13 18H7' }],\n ['path', { d: 'M7 14h.01' }],\n ['path', { d: 'M17 18h.01' }],\n ],\n];\n\nexport default CalendarRange;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CalendarSearch: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M21 12V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h7.5' },\n ],\n ['path', { d: 'M16 2v4' }],\n ['path', { d: 'M8 2v4' }],\n ['path', { d: 'M3 10h18' }],\n ['path', { d: 'M18 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6v0Z' }],\n ['path', { d: 'm22 22-1.5-1.5' }],\n ],\n];\n\nexport default CalendarSearch;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CalendarX2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8' },\n ],\n ['line', { x1: '16', x2: '16', y1: '2', y2: '6' }],\n ['line', { x1: '8', x2: '8', y1: '2', y2: '6' }],\n ['line', { x1: '3', x2: '21', y1: '10', y2: '10' }],\n ['line', { x1: '17', x2: '22', y1: '17', y2: '22' }],\n ['line', { x1: '17', x2: '22', y1: '22', y2: '17' }],\n ],\n];\n\nexport default CalendarX2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CalendarX: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '4', rx: '2', ry: '2' }],\n ['line', { x1: '16', x2: '16', y1: '2', y2: '6' }],\n ['line', { x1: '8', x2: '8', y1: '2', y2: '6' }],\n ['line', { x1: '3', x2: '21', y1: '10', y2: '10' }],\n ['line', { x1: '10', x2: '14', y1: '14', y2: '18' }],\n ['line', { x1: '14', x2: '10', y1: '14', y2: '18' }],\n ],\n];\n\nexport default CalendarX;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Calendar: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '4', rx: '2', ry: '2' }],\n ['line', { x1: '16', x2: '16', y1: '2', y2: '6' }],\n ['line', { x1: '8', x2: '8', y1: '2', y2: '6' }],\n ['line', { x1: '3', x2: '21', y1: '10', y2: '10' }],\n ],\n];\n\nexport default Calendar;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CameraOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ['path', { d: 'M7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16' }],\n ['path', { d: 'M9.5 4h5L17 7h3a2 2 0 0 1 2 2v7.5' }],\n ['path', { d: 'M14.121 15.121A3 3 0 1 1 9.88 10.88' }],\n ],\n];\n\nexport default CameraOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Camera: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z',\n },\n ],\n ['circle', { cx: '12', cy: '13', r: '3' }],\n ],\n];\n\nexport default Camera;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CandyOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm8.5 8.5-1 1a4.95 4.95 0 0 0 7 7l1-1' }],\n [\n 'path',\n {\n d: 'M11.843 6.187A4.947 4.947 0 0 1 16.5 7.5a4.947 4.947 0 0 1 1.313 4.657',\n },\n ],\n ['path', { d: 'M14 16.5V14' }],\n ['path', { d: 'M14 6.5v1.843' }],\n ['path', { d: 'M10 10v7.5' }],\n [\n 'path',\n {\n d: 'm16 7 1-5 1.367.683A3 3 0 0 0 19.708 3H21v1.292a3 3 0 0 0 .317 1.341L22 7l-5 1',\n },\n ],\n [\n 'path',\n {\n d: 'm8 17-1 5-1.367-.683A3 3 0 0 0 4.292 21H3v-1.292a3 3 0 0 0-.317-1.341L2 17l5-1',\n },\n ],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default CandyOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Candy: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'm9.5 7.5-2 2a4.95 4.95 0 1 0 7 7l2-2a4.95 4.95 0 1 0-7-7Z' },\n ],\n ['path', { d: 'M14 6.5v10' }],\n ['path', { d: 'M10 7.5v10' }],\n [\n 'path',\n {\n d: 'm16 7 1-5 1.37.68A3 3 0 0 0 19.7 3H21v1.3c0 .46.1.92.32 1.33L22 7l-5 1',\n },\n ],\n [\n 'path',\n {\n d: 'm8 17-1 5-1.37-.68A3 3 0 0 0 4.3 21H3v-1.3a3 3 0 0 0-.32-1.33L2 17l5-1',\n },\n ],\n ],\n];\n\nexport default Candy;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Car: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14 16H9m10 0h3v-3.15a1 1 0 0 0-.84-.99L16 11l-2.7-3.6a1 1 0 0 0-.8-.4H5.24a2 2 0 0 0-1.8 1.1l-.8 1.63A6 6 0 0 0 2 12.42V16h2',\n },\n ],\n ['circle', { cx: '6.5', cy: '16.5', r: '2.5' }],\n ['circle', { cx: '16.5', cy: '16.5', r: '2.5' }],\n ],\n];\n\nexport default Car;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Carrot: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M2.27 21.7s9.87-3.5 12.73-6.36a4.5 4.5 0 0 0-6.36-6.37C5.77 11.84 2.27 21.7 2.27 21.7zM8.64 14l-2.05-2.04M15.34 15l-2.46-2.46',\n },\n ],\n [\n 'path',\n { d: 'M22 9s-1.33-2-3.5-2C16.86 7 15 9 15 9s1.33 2 3.5 2S22 9 22 9z' },\n ],\n [\n 'path',\n { d: 'M15 2s-2 1.33-2 3.5S15 9 15 9s2-1.84 2-3.5C17 3.33 15 2 15 2z' },\n ],\n ],\n];\n\nexport default Carrot;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CaseLower: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '17', cy: '12', r: '3' }],\n ['line', { x1: '14', x2: '14', y1: '7', y2: '15' }],\n ['circle', { cx: '7', cy: '12', r: '3' }],\n ['line', { x1: '10', x2: '10', y1: '9', y2: '15' }],\n ],\n];\n\nexport default CaseLower;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CaseSensitive: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '3,15 7,7 11,15' }],\n ['line', { x1: '4', x2: '10', y1: '13', y2: '13' }],\n ['circle', { cx: '18', cy: '12', r: '3' }],\n ['line', { x1: '21', x2: '21', y1: '9', y2: '15' }],\n ],\n];\n\nexport default CaseSensitive;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CaseUpper: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '3,15 7,7 11,15' }],\n ['line', { x1: '4', x2: '10', y1: '13', y2: '13' }],\n ['path', { d: 'M15 7h4c1.1 0 2 .9 2 2s-.9 2-2 2h-4V7z' }],\n ['path', { d: 'M15 11h4.5c1.1 0 2 .9 2 2s-.9 2-2 2H15v-4z' }],\n ],\n];\n\nexport default CaseUpper;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Cast: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6' },\n ],\n ['path', { d: 'M2 12a9 9 0 0 1 8 8' }],\n ['path', { d: 'M2 16a5 5 0 0 1 4 4' }],\n ['line', { x1: '2', x2: '2.01', y1: '20', y2: '20' }],\n ],\n];\n\nexport default Cast;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Castle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M22 20v-9H2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2Z' }],\n ['path', { d: 'M18 11V4H6v7' }],\n ['path', { d: 'M15 22v-4a3 3 0 0 0-3-3v0a3 3 0 0 0-3 3v4' }],\n ['path', { d: 'M22 11V9' }],\n ['path', { d: 'M2 11V9' }],\n ['path', { d: 'M6 4V2' }],\n ['path', { d: 'M18 4V2' }],\n ['path', { d: 'M10 4V2' }],\n ['path', { d: 'M14 4V2' }],\n ],\n];\n\nexport default Castle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Cat: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M12 5c.67 0 1.35.09 2 .26 1.78-2 5.03-2.84 6.42-2.26 1.4.58-.42 7-.42 7 .57 1.07 1 2.24 1 3.44C21 17.9 16.97 21 12 21s-9-3-9-7.56c0-1.25.5-2.4 1-3.44 0 0-1.89-6.42-.5-7 1.39-.58 4.72.23 6.5 2.23A9.04 9.04 0 0 1 12 5Z',\n },\n ],\n ['path', { d: 'M8 14v.5' }],\n ['path', { d: 'M16 14v.5' }],\n ['path', { d: 'M11.25 16.25h1.5L12 17l-.75-.75Z' }],\n ],\n];\n\nexport default Cat;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CheckCheck: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M18 6 7 17l-5-5' }],\n ['path', { d: 'm22 10-7.5 7.5L13 16' }],\n ],\n];\n\nexport default CheckCheck;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CheckCircle2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z',\n },\n ],\n ['path', { d: 'm9 12 2 2 4-4' }],\n ],\n];\n\nexport default CheckCircle2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CheckCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M22 11.08V12a10 10 0 1 1-5.93-9.14' }],\n ['polyline', { points: '22 4 12 14.01 9 11.01' }],\n ],\n];\n\nexport default CheckCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CheckSquare: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '9 11 12 14 22 4' }],\n [\n 'path',\n { d: 'M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11' },\n ],\n ],\n];\n\nexport default CheckSquare;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Check: IconNode = [\n 'svg',\n defaultAttributes,\n [['polyline', { points: '20 6 9 17 4 12' }]],\n];\n\nexport default Check;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChefHat: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M6 13.87A4 4 0 0 1 7.41 6a5.11 5.11 0 0 1 1.05-1.54 5 5 0 0 1 7.08 0A5.11 5.11 0 0 1 16.59 6 4 4 0 0 1 18 13.87V21H6Z',\n },\n ],\n ['line', { x1: '6', x2: '18', y1: '17', y2: '17' }],\n ],\n];\n\nexport default ChefHat;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Cherry: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 17a5 5 0 0 0 10 0c0-2.76-2.5-5-5-3-2.5-2-5 .24-5 3Z' }],\n ['path', { d: 'M12 17a5 5 0 0 0 10 0c0-2.76-2.5-5-5-3-2.5-2-5 .24-5 3Z' }],\n ['path', { d: 'M7 14c3.22-2.91 4.29-8.75 5-12 1.66 2.38 4.94 9 5 12' }],\n ['path', { d: 'M22 9c-4.29 0-7.14-2.33-10-7 5.71 0 10 4.67 10 7Z' }],\n ],\n];\n\nexport default Cherry;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronDownSquare: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['polyline', { points: '16,10 12,14 8,10' }],\n ],\n];\n\nexport default ChevronDownSquare;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronDown: IconNode = [\n 'svg',\n defaultAttributes,\n [['polyline', { points: '6 9 12 15 18 9' }]],\n];\n\nexport default ChevronDown;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronFirst: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '17 18 11 12 17 6' }],\n ['path', { d: 'M7 6v12' }],\n ],\n];\n\nexport default ChevronFirst;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronLast: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '7 18 13 12 7 6' }],\n ['path', { d: 'M17 6v12' }],\n ],\n];\n\nexport default ChevronLast;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronLeftSquare: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['polyline', { points: '14,16 10,12 14,8' }],\n ],\n];\n\nexport default ChevronLeftSquare;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronLeft: IconNode = [\n 'svg',\n defaultAttributes,\n [['polyline', { points: '15 18 9 12 15 6' }]],\n];\n\nexport default ChevronLeft;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronRightSquare: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['polyline', { points: '10,8 14,12 10,16' }],\n ],\n];\n\nexport default ChevronRightSquare;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronRight: IconNode = [\n 'svg',\n defaultAttributes,\n [['polyline', { points: '9 18 15 12 9 6' }]],\n];\n\nexport default ChevronRight;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronUpSquare: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['polyline', { points: '8,14 12,10 16,14' }],\n ],\n];\n\nexport default ChevronUpSquare;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronUp: IconNode = [\n 'svg',\n defaultAttributes,\n [['polyline', { points: '18 15 12 9 6 15' }]],\n];\n\nexport default ChevronUp;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronsDownUp: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm7 20 5-5 5 5' }],\n ['path', { d: 'm7 4 5 5 5-5' }],\n ],\n];\n\nexport default ChevronsDownUp;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronsDown: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '7 13 12 18 17 13' }],\n ['polyline', { points: '7 6 12 11 17 6' }],\n ],\n];\n\nexport default ChevronsDown;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronsLeftRight: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm9 7-5 5 5 5' }],\n ['path', { d: 'm15 7 5 5-5 5' }],\n ],\n];\n\nexport default ChevronsLeftRight;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronsLeft: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '11 17 6 12 11 7' }],\n ['polyline', { points: '18 17 13 12 18 7' }],\n ],\n];\n\nexport default ChevronsLeft;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronsRightLeft: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm20 17-5-5 5-5' }],\n ['path', { d: 'm4 17 5-5-5-5' }],\n ],\n];\n\nexport default ChevronsRightLeft;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronsRight: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '13 17 18 12 13 7' }],\n ['polyline', { points: '6 17 11 12 6 7' }],\n ],\n];\n\nexport default ChevronsRight;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronsUpDown: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm7 15 5 5 5-5' }],\n ['path', { d: 'm7 9 5-5 5 5' }],\n ],\n];\n\nexport default ChevronsUpDown;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ChevronsUp: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '17 11 12 6 7 11' }],\n ['polyline', { points: '17 18 12 13 7 18' }],\n ],\n];\n\nexport default ChevronsUp;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Chrome: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['circle', { cx: '12', cy: '12', r: '4' }],\n ['line', { x1: '21.17', x2: '12', y1: '8', y2: '8' }],\n ['line', { x1: '3.95', x2: '8.54', y1: '6.06', y2: '14' }],\n ['line', { x1: '10.88', x2: '15.46', y1: '21.94', y2: '14' }],\n ],\n];\n\nexport default Chrome;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Church: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm18 7 4 2v11a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9l4-2' }],\n ['path', { d: 'M14 22v-4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v4' }],\n ['path', { d: 'M18 22V5l-6-3-6 3v17' }],\n ['path', { d: 'M12 7v5' }],\n ['path', { d: 'M10 9h4' }],\n ],\n];\n\nexport default Church;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CigaretteOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ['path', { d: 'M12 12H2v4h14' }],\n ['path', { d: 'M22 12v4' }],\n ['path', { d: 'M18 12h-.5' }],\n ['path', { d: 'M7 12v4' }],\n ['path', { d: 'M18 8c0-2.5-2-2.5-2-5' }],\n ['path', { d: 'M22 8c0-2.5-2-2.5-2-5' }],\n ],\n];\n\nexport default CigaretteOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Cigarette: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M18 12H2v4h16' }],\n ['path', { d: 'M22 12v4' }],\n ['path', { d: 'M7 12v4' }],\n ['path', { d: 'M18 8c0-2.5-2-2.5-2-5' }],\n ['path', { d: 'M22 8c0-2.5-2-2.5-2-5' }],\n ],\n];\n\nexport default Cigarette;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CircleDot: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['circle', { cx: '12', cy: '12', r: '1' }],\n ],\n];\n\nexport default CircleDot;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CircleEllipsis: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M17 12h.01' }],\n ['path', { d: 'M12 12h.01' }],\n ['path', { d: 'M7 12h.01' }],\n ],\n];\n\nexport default CircleEllipsis;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CircleEqual: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M7 10h10' }],\n ['path', { d: 'M7 14h10' }],\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ],\n];\n\nexport default CircleEqual;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CircleOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm2 2 20 20' }],\n [\n 'path',\n {\n d: 'M8.4 2.7c1.2-.4 2.4-.7 3.7-.7 5.5 0 10 4.5 10 10 0 1.3-.2 2.5-.7 3.6',\n },\n ],\n [\n 'path',\n {\n d: 'M19.1 19.1C17.3 20.9 14.8 22 12 22 6.5 22 2 17.5 2 12c0-2.7 1.2-5.2 3-7',\n },\n ],\n ],\n];\n\nexport default CircleOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CircleSlash2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M22 2 2 22' }],\n ],\n];\n\nexport default CircleSlash2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CircleSlash: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '9', x2: '15', y1: '15', y2: '9' }],\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ],\n];\n\nexport default CircleSlash;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Circle: IconNode = [\n 'svg',\n defaultAttributes,\n [['circle', { cx: '12', cy: '12', r: '10' }]],\n];\n\nexport default Circle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CircuitBoard: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2' }],\n ['path', { d: 'M11 9h4a2 2 0 0 0 2-2V3' }],\n ['circle', { cx: '9', cy: '9', r: '2' }],\n ['path', { d: 'M7 21v-4a2 2 0 0 1 2-2h4' }],\n ['circle', { cx: '15', cy: '15', r: '2' }],\n ],\n];\n\nexport default CircuitBoard;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Citrus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M21.66 17.67a1.08 1.08 0 0 1-.04 1.6A12 12 0 0 1 4.73 2.38a1.1 1.1 0 0 1 1.61-.04z',\n },\n ],\n ['path', { d: 'M19.65 15.66A8 8 0 0 1 8.35 4.34' }],\n ['path', { d: 'm14 10-5.5 5.5' }],\n ['path', { d: 'M14 17.85V10H6.15' }],\n ],\n];\n\nexport default Citrus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Clapperboard: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 11v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8H4Z' }],\n [\n 'path',\n {\n d: 'm4 11-.88-2.87a2 2 0 0 1 1.33-2.5l11.48-3.5a2 2 0 0 1 2.5 1.32l.87 2.87L4 11.01Z',\n },\n ],\n ['path', { d: 'm6.6 4.99 3.38 4.2' }],\n ['path', { d: 'm11.86 3.38 3.38 4.2' }],\n ],\n];\n\nexport default Clapperboard;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ClipboardCheck: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '8', height: '4', x: '8', y: '2', rx: '1', ry: '1' }],\n [\n 'path',\n {\n d: 'M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2',\n },\n ],\n ['path', { d: 'm9 14 2 2 4-4' }],\n ],\n];\n\nexport default ClipboardCheck;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ClipboardCopy: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '8', height: '4', x: '8', y: '2', rx: '1', ry: '1' }],\n [\n 'path',\n { d: 'M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2' },\n ],\n ['path', { d: 'M16 4h2a2 2 0 0 1 2 2v4' }],\n ['path', { d: 'M21 14H11' }],\n ['path', { d: 'm15 10-4 4 4 4' }],\n ],\n];\n\nexport default ClipboardCopy;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ClipboardEdit: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '8', height: '4', x: '8', y: '2', rx: '1', ry: '1' }],\n [\n 'path',\n {\n d: 'M10.42 12.61a2.1 2.1 0 1 1 2.97 2.97L7.95 21 4 22l.99-3.95 5.43-5.44Z',\n },\n ],\n ['path', { d: 'M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-5.5' }],\n ['path', { d: 'M4 13.5V6a2 2 0 0 1 2-2h2' }],\n ],\n];\n\nexport default ClipboardEdit;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ClipboardList: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '8', height: '4', x: '8', y: '2', rx: '1', ry: '1' }],\n [\n 'path',\n {\n d: 'M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2',\n },\n ],\n ['path', { d: 'M12 11h4' }],\n ['path', { d: 'M12 16h4' }],\n ['path', { d: 'M8 11h.01' }],\n ['path', { d: 'M8 16h.01' }],\n ],\n];\n\nexport default ClipboardList;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ClipboardPaste: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M15 2H9a1 1 0 0 0-1 1v2c0 .6.4 1 1 1h6c.6 0 1-.4 1-1V3c0-.6-.4-1-1-1Z',\n },\n ],\n [\n 'path',\n {\n d: 'M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2M16 4h2a2 2 0 0 1 2 2v2M11 14h10',\n },\n ],\n ['path', { d: 'm17 10 4 4-4 4' }],\n ],\n];\n\nexport default ClipboardPaste;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ClipboardSignature: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '8', height: '4', x: '8', y: '2', rx: '1', ry: '1' }],\n [\n 'path',\n { d: 'M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-.5' },\n ],\n ['path', { d: 'M16 4h2a2 2 0 0 1 1.73 1' }],\n [\n 'path',\n {\n d: 'M18.42 9.61a2.1 2.1 0 1 1 2.97 2.97L16.95 17 13 18l.99-3.95 4.43-4.44Z',\n },\n ],\n ['path', { d: 'M8 18h1' }],\n ],\n];\n\nexport default ClipboardSignature;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ClipboardType: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '8', height: '4', x: '8', y: '2', rx: '1', ry: '1' }],\n [\n 'path',\n {\n d: 'M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2',\n },\n ],\n ['path', { d: 'M9 12v-1h6v1' }],\n ['path', { d: 'M11 17h2' }],\n ['path', { d: 'M12 11v6' }],\n ],\n];\n\nexport default ClipboardType;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ClipboardX: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '8', height: '4', x: '8', y: '2', rx: '1', ry: '1' }],\n [\n 'path',\n {\n d: 'M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2',\n },\n ],\n ['path', { d: 'm15 11-6 6' }],\n ['path', { d: 'm9 11 6 6' }],\n ],\n];\n\nexport default ClipboardX;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Clipboard: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '8', height: '4', x: '8', y: '2', rx: '1', ry: '1' }],\n [\n 'path',\n {\n d: 'M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2',\n },\n ],\n ],\n];\n\nexport default Clipboard;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Clock1: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polyline', { points: '12 6 12 12 14.5 8' }],\n ],\n];\n\nexport default Clock1;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Clock10: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polyline', { points: '12 6 12 12 8 10' }],\n ],\n];\n\nexport default Clock10;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Clock11: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polyline', { points: '12 6 12 12 9.5 8' }],\n ],\n];\n\nexport default Clock11;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Clock12: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polyline', { points: '12 6 12 12' }],\n ],\n];\n\nexport default Clock12;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Clock2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polyline', { points: '12 6 12 12 16 10' }],\n ],\n];\n\nexport default Clock2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Clock3: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polyline', { points: '12 6 12 12 16.5 12' }],\n ],\n];\n\nexport default Clock3;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Clock4: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polyline', { points: '12 6 12 12 16 14' }],\n ],\n];\n\nexport default Clock4;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Clock5: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polyline', { points: '12 6 12 12 14.5 16' }],\n ],\n];\n\nexport default Clock5;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Clock6: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polyline', { points: '12 6 12 12 12 16.5' }],\n ],\n];\n\nexport default Clock6;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Clock7: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polyline', { points: '12 6 12 12 9.5 16' }],\n ],\n];\n\nexport default Clock7;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Clock8: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polyline', { points: '12 6 12 12 8 14' }],\n ],\n];\n\nexport default Clock8;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Clock9: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polyline', { points: '12 6 12 12 7.5 12' }],\n ],\n];\n\nexport default Clock9;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Clock: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polyline', { points: '12 6 12 12 16 14' }],\n ],\n];\n\nexport default Clock;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CloudCog: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M20 16.2A4.5 4.5 0 0 0 17.5 8h-1.8A7 7 0 1 0 4 14.9' }],\n ['circle', { cx: '12', cy: '17', r: '3' }],\n ['path', { d: 'M12 13v1' }],\n ['path', { d: 'M12 20v1' }],\n ['path', { d: 'M16 17h-1' }],\n ['path', { d: 'M9 17H8' }],\n ['path', { d: 'm15 14-.88.88' }],\n ['path', { d: 'M9.88 19.12 9 20' }],\n ['path', { d: 'm15 20-.88-.88' }],\n ['path', { d: 'M9.88 14.88 9 14' }],\n ],\n];\n\nexport default CloudCog;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CloudDrizzle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242' }],\n ['path', { d: 'M8 19v1' }],\n ['path', { d: 'M8 14v1' }],\n ['path', { d: 'M16 19v1' }],\n ['path', { d: 'M16 14v1' }],\n ['path', { d: 'M12 21v1' }],\n ['path', { d: 'M12 16v1' }],\n ],\n];\n\nexport default CloudDrizzle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CloudFog: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242' }],\n ['path', { d: 'M16 17H7' }],\n ['path', { d: 'M17 21H9' }],\n ],\n];\n\nexport default CloudFog;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CloudHail: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242' }],\n ['path', { d: 'M16 14v2' }],\n ['path', { d: 'M8 14v2' }],\n ['path', { d: 'M16 20h.01' }],\n ['path', { d: 'M8 20h.01' }],\n ['path', { d: 'M12 16v2' }],\n ['path', { d: 'M12 22h.01' }],\n ],\n];\n\nexport default CloudHail;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CloudLightning: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M6 16.326A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 .5 8.973' }],\n ['path', { d: 'm13 12-3 5h4l-3 5' }],\n ],\n];\n\nexport default CloudLightning;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CloudMoonRain: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M10.083 9A6.002 6.002 0 0 1 16 4a4.243 4.243 0 0 0 6 6c0 2.22-1.206 4.16-3 5.197',\n },\n ],\n ['path', { d: 'M3 20a5 5 0 1 1 8.9-4H13a3 3 0 0 1 2 5.24' }],\n ['path', { d: 'M11 20v2' }],\n ['path', { d: 'M7 19v2' }],\n ],\n];\n\nexport default CloudMoonRain;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CloudMoon: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M13 22H7a5 5 0 1 1 4.9-6H13a3 3 0 0 1 0 6Z' }],\n [\n 'path',\n {\n d: 'M10.083 9A6.002 6.002 0 0 1 16 4a4.243 4.243 0 0 0 6 6c0 2.22-1.206 4.16-3 5.197',\n },\n ],\n ],\n];\n\nexport default CloudMoon;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CloudOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm2 2 20 20' }],\n ['path', { d: 'M5.782 5.782A7 7 0 0 0 9 19h8.5a4.5 4.5 0 0 0 1.307-.193' }],\n [\n 'path',\n {\n d: 'M21.532 16.5A4.5 4.5 0 0 0 17.5 10h-1.79A7.008 7.008 0 0 0 10 5.07',\n },\n ],\n ],\n];\n\nexport default CloudOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CloudRainWind: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242' }],\n ['path', { d: 'm9.2 22 3-7' }],\n ['path', { d: 'm9 13-3 7' }],\n ['path', { d: 'm17 13-3 7' }],\n ],\n];\n\nexport default CloudRainWind;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CloudRain: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242' }],\n ['path', { d: 'M16 14v6' }],\n ['path', { d: 'M8 14v6' }],\n ['path', { d: 'M12 16v6' }],\n ],\n];\n\nexport default CloudRain;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CloudSnow: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242' }],\n ['path', { d: 'M8 15h.01' }],\n ['path', { d: 'M8 19h.01' }],\n ['path', { d: 'M12 17h.01' }],\n ['path', { d: 'M12 21h.01' }],\n ['path', { d: 'M16 15h.01' }],\n ['path', { d: 'M16 19h.01' }],\n ],\n];\n\nexport default CloudSnow;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CloudSunRain: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 2v2' }],\n ['path', { d: 'm4.93 4.93 1.41 1.41' }],\n ['path', { d: 'M20 12h2' }],\n ['path', { d: 'm19.07 4.93-1.41 1.41' }],\n ['path', { d: 'M15.947 12.65a4 4 0 0 0-5.925-4.128' }],\n ['path', { d: 'M3 20a5 5 0 1 1 8.9-4H13a3 3 0 0 1 2 5.24' }],\n ['path', { d: 'M11 20v2' }],\n ['path', { d: 'M7 19v2' }],\n ],\n];\n\nexport default CloudSunRain;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CloudSun: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 2v2' }],\n ['path', { d: 'm4.93 4.93 1.41 1.41' }],\n ['path', { d: 'M20 12h2' }],\n ['path', { d: 'm19.07 4.93-1.41 1.41' }],\n ['path', { d: 'M15.947 12.65a4 4 0 0 0-5.925-4.128' }],\n ['path', { d: 'M13 22H7a5 5 0 1 1 4.9-6H13a3 3 0 0 1 0 6Z' }],\n ],\n];\n\nexport default CloudSun;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Cloud: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z' }]],\n];\n\nexport default Cloud;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Cloudy: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M17.5 21H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z' }],\n ['path', { d: 'M22 10a3 3 0 0 0-3-3h-2.207a5.502 5.502 0 0 0-10.702.5' }],\n ],\n];\n\nexport default Cloudy;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Clover: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M16.2 3.8a2.7 2.7 0 0 0-3.81 0l-.4.38-.4-.4a2.7 2.7 0 0 0-3.82 0C6.73 4.85 6.67 6.64 8 8l4 4 4-4c1.33-1.36 1.27-3.15.2-4.2z',\n },\n ],\n [\n 'path',\n {\n d: 'M8 8c-1.36-1.33-3.15-1.27-4.2-.2a2.7 2.7 0 0 0 0 3.81l.38.4-.4.4a2.7 2.7 0 0 0 0 3.82C4.85 17.27 6.64 17.33 8 16',\n },\n ],\n [\n 'path',\n {\n d: 'M16 16c1.36 1.33 3.15 1.27 4.2.2a2.7 2.7 0 0 0 0-3.81l-.38-.4.4-.4a2.7 2.7 0 0 0 0-3.82C19.15 6.73 17.36 6.67 16 8',\n },\n ],\n [\n 'path',\n {\n d: 'M7.8 20.2a2.7 2.7 0 0 0 3.81 0l.4-.38.4.4a2.7 2.7 0 0 0 3.82 0c1.06-1.06 1.12-2.85-.21-4.21l-4-4-4 4c-1.33 1.36-1.27 3.15-.2 4.2z',\n },\n ],\n ['path', { d: 'm7 17-5 5' }],\n ],\n];\n\nexport default Clover;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Code2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm18 16 4-4-4-4' }],\n ['path', { d: 'm6 8-4 4 4 4' }],\n ['path', { d: 'm14.5 4-5 16' }],\n ],\n];\n\nexport default Code2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Code: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '16 18 22 12 16 6' }],\n ['polyline', { points: '8 6 2 12 8 18' }],\n ],\n];\n\nexport default Code;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Codepen: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polygon', { points: '12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2' }],\n ['line', { x1: '12', x2: '12', y1: '22', y2: '15.5' }],\n ['polyline', { points: '22 8.5 12 15.5 2 8.5' }],\n ['polyline', { points: '2 15.5 12 8.5 22 15.5' }],\n ['line', { x1: '12', x2: '12', y1: '2', y2: '8.5' }],\n ],\n];\n\nexport default Codepen;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Codesandbox: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z',\n },\n ],\n ['polyline', { points: '7.5 4.21 12 6.81 16.5 4.21' }],\n ['polyline', { points: '7.5 19.79 7.5 14.6 3 12' }],\n ['polyline', { points: '21 12 16.5 14.6 16.5 19.79' }],\n ['polyline', { points: '3.27 6.96 12 12.01 20.73 6.96' }],\n ['line', { x1: '12', x2: '12', y1: '22.08', y2: '12' }],\n ],\n];\n\nexport default Codesandbox;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Coffee: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M17 8h1a4 4 0 1 1 0 8h-1' }],\n ['path', { d: 'M3 8h14v9a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4Z' }],\n ['line', { x1: '6', x2: '6', y1: '2', y2: '4' }],\n ['line', { x1: '10', x2: '10', y1: '2', y2: '4' }],\n ['line', { x1: '14', x2: '14', y1: '2', y2: '4' }],\n ],\n];\n\nexport default Coffee;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Cog: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 20a8 8 0 1 0 0-16 8 8 0 0 0 0 16Z' }],\n ['path', { d: 'M12 14a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z' }],\n ['path', { d: 'M12 2v2' }],\n ['path', { d: 'M12 22v-2' }],\n ['path', { d: 'm17 20.66-1-1.73' }],\n ['path', { d: 'M11 10.27 7 3.34' }],\n ['path', { d: 'm20.66 17-1.73-1' }],\n ['path', { d: 'm3.34 7 1.73 1' }],\n ['path', { d: 'M14 12h8' }],\n ['path', { d: 'M2 12h2' }],\n ['path', { d: 'm20.66 7-1.73 1' }],\n ['path', { d: 'm3.34 17 1.73-1' }],\n ['path', { d: 'm17 3.34-1 1.73' }],\n ['path', { d: 'm11 13.73-4 6.93' }],\n ],\n];\n\nexport default Cog;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Coins: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '8', cy: '8', r: '6' }],\n ['path', { d: 'M18.09 10.37A6 6 0 1 1 10.34 18' }],\n ['path', { d: 'M7 6h1v4' }],\n ['path', { d: 'm16.71 13.88.7.71-2.82 2.82' }],\n ],\n];\n\nexport default Coins;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Columns: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['line', { x1: '12', x2: '12', y1: '3', y2: '21' }],\n ],\n];\n\nexport default Columns;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Command: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3',\n },\n ],\n ],\n];\n\nexport default Command;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Compass: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n [\n 'polygon',\n { points: '16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76' },\n ],\n ],\n];\n\nexport default Compass;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Component: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M5.5 8.5 9 12l-3.5 3.5L2 12l3.5-3.5Z' }],\n ['path', { d: 'm12 2 3.5 3.5L12 9 8.5 5.5 12 2Z' }],\n ['path', { d: 'M18.5 8.5 22 12l-3.5 3.5L15 12l3.5-3.5Z' }],\n ['path', { d: 'm12 15 3.5 3.5L12 22l-3.5-3.5L12 15Z' }],\n ],\n];\n\nexport default Component;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ConciergeBell: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 18a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v2H2v-2Z' }],\n ['path', { d: 'M20 16a8 8 0 1 0-16 0' }],\n ['path', { d: 'M12 4v4' }],\n ['path', { d: 'M10 4h4' }],\n ],\n];\n\nexport default ConciergeBell;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Construction: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { x: '2', y: '6', width: '20', height: '8', rx: '1' }],\n ['path', { d: 'M17 14v7' }],\n ['path', { d: 'M7 14v7' }],\n ['path', { d: 'M17 3v3' }],\n ['path', { d: 'M7 3v3' }],\n ['path', { d: 'M10 14 2.3 6.3' }],\n ['path', { d: 'm14 6 7.7 7.7' }],\n ['path', { d: 'm8 6 8 8' }],\n ],\n];\n\nexport default Construction;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Contact: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M17 18a2 2 0 0 0-2-2H9a2 2 0 0 0-2 2' }],\n ['rect', { width: '18', height: '18', x: '3', y: '4', rx: '2' }],\n ['circle', { cx: '12', cy: '10', r: '2' }],\n ['line', { x1: '8', x2: '8', y1: '2', y2: '4' }],\n ['line', { x1: '16', x2: '16', y1: '2', y2: '4' }],\n ],\n];\n\nexport default Contact;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Contrast: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M12 18a6 6 0 0 0 0-12v12z' }],\n ],\n];\n\nexport default Contrast;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Cookie: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5' }],\n ['path', { d: 'M8.5 8.5v.01' }],\n ['path', { d: 'M16 15.5v.01' }],\n ['path', { d: 'M12 12v.01' }],\n ['path', { d: 'M11 17v.01' }],\n ['path', { d: 'M7 14v.01' }],\n ],\n];\n\nexport default Cookie;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CopyCheck: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm12 15 2 2 4-4' }],\n ['rect', { width: '14', height: '14', x: '8', y: '8', rx: '2', ry: '2' }],\n ['path', { d: 'M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2' }],\n ],\n];\n\nexport default CopyCheck;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CopyMinus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '12', x2: '18', y1: '15', y2: '15' }],\n ['rect', { width: '14', height: '14', x: '8', y: '8', rx: '2', ry: '2' }],\n ['path', { d: 'M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2' }],\n ],\n];\n\nexport default CopyMinus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CopyPlus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '15', x2: '15', y1: '12', y2: '18' }],\n ['line', { x1: '12', x2: '18', y1: '15', y2: '15' }],\n ['rect', { width: '14', height: '14', x: '8', y: '8', rx: '2', ry: '2' }],\n ['path', { d: 'M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2' }],\n ],\n];\n\nexport default CopyPlus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CopySlash: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '12', x2: '18', y1: '18', y2: '12' }],\n ['rect', { width: '14', height: '14', x: '8', y: '8', rx: '2', ry: '2' }],\n ['path', { d: 'M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2' }],\n ],\n];\n\nexport default CopySlash;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CopyX: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '12', x2: '18', y1: '12', y2: '18' }],\n ['line', { x1: '12', x2: '18', y1: '18', y2: '12' }],\n ['rect', { width: '14', height: '14', x: '8', y: '8', rx: '2', ry: '2' }],\n ['path', { d: 'M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2' }],\n ],\n];\n\nexport default CopyX;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Copy: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '14', height: '14', x: '8', y: '8', rx: '2', ry: '2' }],\n ['path', { d: 'M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2' }],\n ],\n];\n\nexport default Copy;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Copyleft: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M9 9.35a4 4 0 1 1 0 5.3' }],\n ],\n];\n\nexport default Copyleft;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Copyright: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M15 9.354a4 4 0 1 0 0 5.292' }],\n ],\n];\n\nexport default Copyright;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CornerDownLeft: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '9 10 4 15 9 20' }],\n ['path', { d: 'M20 4v7a4 4 0 0 1-4 4H4' }],\n ],\n];\n\nexport default CornerDownLeft;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CornerDownRight: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '15 10 20 15 15 20' }],\n ['path', { d: 'M4 4v7a4 4 0 0 0 4 4h12' }],\n ],\n];\n\nexport default CornerDownRight;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CornerLeftDown: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '14 15 9 20 4 15' }],\n ['path', { d: 'M20 4h-7a4 4 0 0 0-4 4v12' }],\n ],\n];\n\nexport default CornerLeftDown;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CornerLeftUp: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '14 9 9 4 4 9' }],\n ['path', { d: 'M20 20h-7a4 4 0 0 1-4-4V4' }],\n ],\n];\n\nexport default CornerLeftUp;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CornerRightDown: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '10 15 15 20 20 15' }],\n ['path', { d: 'M4 4h7a4 4 0 0 1 4 4v12' }],\n ],\n];\n\nexport default CornerRightDown;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CornerRightUp: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '10 9 15 4 20 9' }],\n ['path', { d: 'M4 20h7a4 4 0 0 0 4-4V4' }],\n ],\n];\n\nexport default CornerRightUp;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CornerUpLeft: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '9 14 4 9 9 4' }],\n ['path', { d: 'M20 20v-7a4 4 0 0 0-4-4H4' }],\n ],\n];\n\nexport default CornerUpLeft;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CornerUpRight: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '15 14 20 9 15 4' }],\n ['path', { d: 'M4 20v-7a4 4 0 0 1 4-4h12' }],\n ],\n];\n\nexport default CornerUpRight;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Cpu: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { x: '4', y: '4', width: '16', height: '16', rx: '2' }],\n ['rect', { x: '9', y: '9', width: '6', height: '6' }],\n ['path', { d: 'M15 2v2' }],\n ['path', { d: 'M15 20v2' }],\n ['path', { d: 'M2 15h2' }],\n ['path', { d: 'M2 9h2' }],\n ['path', { d: 'M20 15h2' }],\n ['path', { d: 'M20 9h2' }],\n ['path', { d: 'M9 2v2' }],\n ['path', { d: 'M9 20v2' }],\n ],\n];\n\nexport default Cpu;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CreativeCommons: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n [\n 'path',\n {\n d: 'M10 9.3a2.8 2.8 0 0 0-3.5 1 3.1 3.1 0 0 0 0 3.4 2.7 2.7 0 0 0 3.5 1',\n },\n ],\n [\n 'path',\n {\n d: 'M17 9.3a2.8 2.8 0 0 0-3.5 1 3.1 3.1 0 0 0 0 3.4 2.7 2.7 0 0 0 3.5 1',\n },\n ],\n ],\n];\n\nexport default CreativeCommons;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CreditCard: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '14', x: '2', y: '5', rx: '2' }],\n ['line', { x1: '2', x2: '22', y1: '10', y2: '10' }],\n ],\n];\n\nexport default CreditCard;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Croissant: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'm4.6 13.11 5.79-3.21c1.89-1.05 4.79 1.78 3.71 3.71l-3.22 5.81C8.8 23.16.79 15.23 4.6 13.11Z',\n },\n ],\n [\n 'path',\n {\n d: 'm10.5 9.5-1-2.29C9.2 6.48 8.8 6 8 6H4.5C2.79 6 2 6.5 2 8.5a7.71 7.71 0 0 0 2 4.83',\n },\n ],\n ['path', { d: 'M8 6c0-1.55.24-4-2-4-2 0-2.5 2.17-2.5 4' }],\n [\n 'path',\n {\n d: 'm14.5 13.5 2.29 1c.73.3 1.21.7 1.21 1.5v3.5c0 1.71-.5 2.5-2.5 2.5a7.71 7.71 0 0 1-4.83-2',\n },\n ],\n ['path', { d: 'M18 16c1.55 0 4-.24 4 2 0 2-2.17 2.5-4 2.5' }],\n ],\n];\n\nexport default Croissant;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Crop: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M6 2v14a2 2 0 0 0 2 2h14' }],\n ['path', { d: 'M18 22V8a2 2 0 0 0-2-2H2' }],\n ],\n];\n\nexport default Crop;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Cross: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M11 2a2 2 0 0 0-2 2v5H4a2 2 0 0 0-2 2v2c0 1.1.9 2 2 2h5v5c0 1.1.9 2 2 2h2a2 2 0 0 0 2-2v-5h5a2 2 0 0 0 2-2v-2a2 2 0 0 0-2-2h-5V4a2 2 0 0 0-2-2h-2z',\n },\n ],\n ],\n];\n\nexport default Cross;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Crosshair: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['line', { x1: '22', x2: '18', y1: '12', y2: '12' }],\n ['line', { x1: '6', x2: '2', y1: '12', y2: '12' }],\n ['line', { x1: '12', x2: '12', y1: '6', y2: '2' }],\n ['line', { x1: '12', x2: '12', y1: '22', y2: '18' }],\n ],\n];\n\nexport default Crosshair;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Crown: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'm2 4 3 12h14l3-12-6 7-4-7-4 7-6-7zm3 16h14' }]],\n];\n\nexport default Crown;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CupSoda: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'm6 8 1.75 12.28a2 2 0 0 0 2 1.72h4.54a2 2 0 0 0 2-1.72L18 8' },\n ],\n ['path', { d: 'M5 8h14' }],\n ['path', { d: 'M7 15a6.47 6.47 0 0 1 5 0 6.47 6.47 0 0 0 5 0' }],\n ['path', { d: 'm12 8 1-6h2' }],\n ],\n];\n\nexport default CupSoda;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst CurlyBraces: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1',\n },\n ],\n [\n 'path',\n {\n d: 'M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1',\n },\n ],\n ],\n];\n\nexport default CurlyBraces;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Currency: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '8' }],\n ['line', { x1: '3', x2: '6', y1: '3', y2: '6' }],\n ['line', { x1: '21', x2: '18', y1: '3', y2: '6' }],\n ['line', { x1: '3', x2: '6', y1: '21', y2: '18' }],\n ['line', { x1: '21', x2: '18', y1: '21', y2: '18' }],\n ],\n];\n\nexport default Currency;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst DatabaseBackup: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['ellipse', { cx: '12', cy: '5', rx: '9', ry: '3' }],\n ['path', { d: 'M3 12c0 1.18 2.03 2.2 5 2.7' }],\n ['path', { d: 'M21 5v4.5' }],\n ['path', { d: 'm12 16 1.27-1.35a4.75 4.75 0 1 1 .41 5.74' }],\n ['path', { d: 'M12 12v4h4' }],\n ['path', { d: 'M3 5v14c0 1.43 2.97 2.63 7 2.93' }],\n ],\n];\n\nexport default DatabaseBackup;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Database: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['ellipse', { cx: '12', cy: '5', rx: '9', ry: '3' }],\n ['path', { d: 'M3 5V19A9 3 0 0 0 21 19V5' }],\n ['path', { d: 'M3 12A9 3 0 0 0 21 12' }],\n ],\n];\n\nexport default Database;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Delete: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2Z' }],\n ['line', { x1: '18', x2: '12', y1: '9', y2: '15' }],\n ['line', { x1: '12', x2: '18', y1: '9', y2: '15' }],\n ],\n];\n\nexport default Delete;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Diamond: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'rect',\n {\n width: '15.56',\n height: '15.56',\n x: '12',\n y: '1',\n rx: '2.41',\n transform: 'rotate(45 12 1)',\n },\n ],\n ],\n];\n\nexport default Diamond;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Dice1: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['path', { d: 'M12 12h.01' }],\n ],\n];\n\nexport default Dice1;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Dice2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['path', { d: 'M15 9h.01' }],\n ['path', { d: 'M9 15h.01' }],\n ],\n];\n\nexport default Dice2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Dice3: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['path', { d: 'M16 8h.01' }],\n ['path', { d: 'M12 12h.01' }],\n ['path', { d: 'M8 16h.01' }],\n ],\n];\n\nexport default Dice3;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Dice4: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['path', { d: 'M16 8h.01' }],\n ['path', { d: 'M8 8h.01' }],\n ['path', { d: 'M8 16h.01' }],\n ['path', { d: 'M16 16h.01' }],\n ],\n];\n\nexport default Dice4;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Dice5: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['path', { d: 'M16 8h.01' }],\n ['path', { d: 'M8 8h.01' }],\n ['path', { d: 'M8 16h.01' }],\n ['path', { d: 'M16 16h.01' }],\n ['path', { d: 'M12 12h.01' }],\n ],\n];\n\nexport default Dice5;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Dice6: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['path', { d: 'M16 8h.01' }],\n ['path', { d: 'M16 12h.01' }],\n ['path', { d: 'M16 16h.01' }],\n ['path', { d: 'M8 8h.01' }],\n ['path', { d: 'M8 12h.01' }],\n ['path', { d: 'M8 16h.01' }],\n ],\n];\n\nexport default Dice6;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Dices: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '12', height: '12', x: '2', y: '10', rx: '2', ry: '2' }],\n [\n 'path',\n {\n d: 'm17.92 14 3.5-3.5a2.24 2.24 0 0 0 0-3l-5-4.92a2.24 2.24 0 0 0-3 0L10 6',\n },\n ],\n ['path', { d: 'M6 18h.01' }],\n ['path', { d: 'M10 14h.01' }],\n ['path', { d: 'M15 6h.01' }],\n ['path', { d: 'M18 9h.01' }],\n ],\n];\n\nexport default Dices;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Diff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 3v14' }],\n ['path', { d: 'M5 10h14' }],\n ['path', { d: 'M5 21h14' }],\n ],\n];\n\nexport default Diff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Disc2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '4' }],\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['line', { x1: '12', y1: '12', x2: '12', y2: '12.01' }],\n ],\n];\n\nexport default Disc2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Disc: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['circle', { cx: '12', cy: '12', r: '2' }],\n ],\n];\n\nexport default Disc;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst DivideCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '8', x2: '16', y1: '12', y2: '12' }],\n ['line', { x1: '12', x2: '12', y1: '16', y2: '16' }],\n ['line', { x1: '12', x2: '12', y1: '8', y2: '8' }],\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ],\n];\n\nexport default DivideCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst DivideSquare: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['line', { x1: '8', x2: '16', y1: '12', y2: '12' }],\n ['line', { x1: '12', x2: '12', y1: '16', y2: '16' }],\n ['line', { x1: '12', x2: '12', y1: '8', y2: '8' }],\n ],\n];\n\nexport default DivideSquare;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Divide: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '6', r: '1' }],\n ['line', { x1: '5', x2: '19', y1: '12', y2: '12' }],\n ['circle', { cx: '12', cy: '18', r: '1' }],\n ],\n];\n\nexport default Divide;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst DnaOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M15 2c-1.35 1.5-2.092 3-2.5 4.5M9 22c1.35-1.5 2.092-3 2.5-4.5' },\n ],\n [\n 'path',\n { d: 'M2 15c3.333-3 6.667-3 10-3m10-3c-1.5 1.35-3 2.092-4.5 2.5' },\n ],\n ['path', { d: 'm17 6-2.5-2.5' }],\n ['path', { d: 'm14 8-1.5-1.5' }],\n ['path', { d: 'm7 18 2.5 2.5' }],\n ['path', { d: 'm3.5 14.5.5.5' }],\n ['path', { d: 'm20 9 .5.5' }],\n ['path', { d: 'm6.5 12.5 1 1' }],\n ['path', { d: 'm16.5 10.5 1 1' }],\n ['path', { d: 'm10 16 1.5 1.5' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default DnaOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Dna: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 15c6.667-6 13.333 0 20-6' }],\n ['path', { d: 'M9 22c1.798-1.998 2.518-3.995 2.807-5.993' }],\n ['path', { d: 'M15 2c-1.798 1.998-2.518 3.995-2.807 5.993' }],\n ['path', { d: 'm17 6-2.5-2.5' }],\n ['path', { d: 'm14 8-1-1' }],\n ['path', { d: 'm7 18 2.5 2.5' }],\n ['path', { d: 'm3.5 14.5.5.5' }],\n ['path', { d: 'm20 9 .5.5' }],\n ['path', { d: 'm6.5 12.5 1 1' }],\n ['path', { d: 'm16.5 10.5 1 1' }],\n ['path', { d: 'm10 16 1.5 1.5' }],\n ],\n];\n\nexport default Dna;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Dog: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M10 5.172C10 3.782 8.423 2.679 6.5 3c-2.823.47-4.113 6.006-4 7 .08.703 1.725 1.722 3.656 1 1.261-.472 1.96-1.45 2.344-2.5',\n },\n ],\n [\n 'path',\n {\n d: 'M14.267 5.172c0-1.39 1.577-2.493 3.5-2.172 2.823.47 4.113 6.006 4 7-.08.703-1.725 1.722-3.656 1-1.261-.472-1.855-1.45-2.239-2.5',\n },\n ],\n ['path', { d: 'M8 14v.5' }],\n ['path', { d: 'M16 14v.5' }],\n ['path', { d: 'M11.25 16.25h1.5L12 17l-.75-.75Z' }],\n [\n 'path',\n {\n d: 'M4.42 11.247A13.152 13.152 0 0 0 4 14.556C4 18.728 7.582 21 12 21s8-2.272 8-6.444c0-1.061-.162-2.2-.493-3.309m-9.243-6.082A8.801 8.801 0 0 1 12 5c.78 0 1.5.108 2.161.306',\n },\n ],\n ],\n];\n\nexport default Dog;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst DollarSign: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '12', x2: '12', y1: '2', y2: '22' }],\n ['path', { d: 'M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6' }],\n ],\n];\n\nexport default DollarSign;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst DoorClosed: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M18 20V6a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v14' }],\n ['path', { d: 'M2 20h20' }],\n ['path', { d: 'M14 12v.01' }],\n ],\n];\n\nexport default DoorClosed;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst DoorOpen: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M13 4h3a2 2 0 0 1 2 2v14' }],\n ['path', { d: 'M2 20h3' }],\n ['path', { d: 'M13 20h9' }],\n ['path', { d: 'M10 12v.01' }],\n [\n 'path',\n {\n d: 'M13 4.562v16.157a1 1 0 0 1-1.242.97L5 20V5.562a2 2 0 0 1 1.515-1.94l4-1A2 2 0 0 1 13 4.561Z',\n },\n ],\n ],\n];\n\nexport default DoorOpen;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst DownloadCloud: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242' }],\n ['path', { d: 'M12 12v9' }],\n ['path', { d: 'm8 17 4 4 4-4' }],\n ],\n];\n\nexport default DownloadCloud;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Download: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4' }],\n ['polyline', { points: '7 10 12 15 17 10' }],\n ['line', { x1: '12', x2: '12', y1: '15', y2: '3' }],\n ],\n];\n\nexport default Download;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Dribbble: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M19.13 5.09C15.22 9.14 10 10.44 2.25 10.94' }],\n ['path', { d: 'M21.75 12.84c-6.62-1.41-12.14 1-16.38 6.32' }],\n ['path', { d: 'M8.56 2.75c4.37 6 6 9.42 8 17.72' }],\n ],\n];\n\nexport default Dribbble;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Droplet: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z',\n },\n ],\n ],\n];\n\nexport default Droplet;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Droplets: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M7 16.3c2.2 0 4-1.83 4-4.05 0-1.16-.57-2.26-1.71-3.19S7.29 6.75 7 5.3c-.29 1.45-1.14 2.84-2.29 3.76S3 11.1 3 12.25c0 2.22 1.8 4.05 4 4.05z',\n },\n ],\n [\n 'path',\n {\n d: 'M12.56 6.6A10.97 10.97 0 0 0 14 3.02c.5 2.5 2 4.9 4 6.5s3 3.5 3 5.5a6.98 6.98 0 0 1-11.91 4.97',\n },\n ],\n ],\n];\n\nexport default Droplets;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Drumstick: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M15.45 15.4c-2.13.65-4.3.32-5.7-1.1-2.29-2.27-1.76-6.5 1.17-9.42 2.93-2.93 7.15-3.46 9.43-1.18 1.41 1.41 1.74 3.57 1.1 5.71-1.4-.51-3.26-.02-4.64 1.36-1.38 1.38-1.87 3.23-1.36 4.63z',\n },\n ],\n [\n 'path',\n {\n d: 'm11.25 15.6-2.16 2.16a2.5 2.5 0 1 1-4.56 1.73 2.49 2.49 0 0 1-1.41-4.24 2.5 2.5 0 0 1 3.14-.32l2.16-2.16',\n },\n ],\n ],\n];\n\nexport default Drumstick;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Dumbbell: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm6.5 6.5 11 11' }],\n ['path', { d: 'm21 21-1-1' }],\n ['path', { d: 'm3 3 1 1' }],\n ['path', { d: 'm18 22 4-4' }],\n ['path', { d: 'm2 6 4-4' }],\n ['path', { d: 'm3 10 7-7' }],\n ['path', { d: 'm14 21 7-7' }],\n ],\n];\n\nexport default Dumbbell;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst EarOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M6 18.5a3.5 3.5 0 1 0 7 0c0-1.57.92-2.52 2.04-3.46' }],\n ['path', { d: 'M6 8.5c0-.75.13-1.47.36-2.14' }],\n ['path', { d: 'M8.8 3.15A6.5 6.5 0 0 1 19 8.5c0 1.63-.44 2.81-1.09 3.76' }],\n ['path', { d: 'M12.5 6A2.5 2.5 0 0 1 15 8.5M10 13a2 2 0 0 0 1.82-1.18' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default EarOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Ear: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M6 8.5a6.5 6.5 0 1 1 13 0c0 6-6 6-6 10a3.5 3.5 0 1 1-7 0' }],\n ['path', { d: 'M15 8.5a2.5 2.5 0 0 0-5 0v1a2 2 0 1 1 0 4' }],\n ],\n];\n\nexport default Ear;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Edit2: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z' }]],\n];\n\nexport default Edit2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Edit3: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 20h9' }],\n ['path', { d: 'M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z' }],\n ],\n];\n\nexport default Edit3;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Edit: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7' },\n ],\n ['path', { d: 'M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z' }],\n ],\n];\n\nexport default Edit;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst EggFried: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '11.5', cy: '12.5', r: '3.5' }],\n [\n 'path',\n {\n d: 'M3 8c0-3.5 2.5-6 6.5-6 5 0 4.83 3 7.5 5s5 2 5 6c0 4.5-2.5 6.5-7 6.5-2.5 0-2.5 2.5-6 2.5s-7-2-7-5.5c0-3 1.5-3 1.5-5C3.5 10 3 9 3 8Z',\n },\n ],\n ],\n];\n\nexport default EggFried;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst EggOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M6.399 6.399C5.362 8.157 4.65 10.189 4.5 12c-.37 4.43 1.27 9.95 7.5 10 3.256-.026 5.259-1.547 6.375-3.625',\n },\n ],\n [\n 'path',\n {\n d: 'M19.532 13.875A14.07 14.07 0 0 0 19.5 12c-.36-4.34-3.95-9.96-7.5-10-1.04.012-2.082.502-3.046 1.297',\n },\n ],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default EggOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Egg: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M12 22c6.23-.05 7.87-5.57 7.5-10-.36-4.34-3.95-9.96-7.5-10-3.55.04-7.14 5.66-7.5 10-.37 4.43 1.27 9.95 7.5 10z',\n },\n ],\n ],\n];\n\nexport default Egg;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst EqualNot: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '5', x2: '19', y1: '9', y2: '9' }],\n ['line', { x1: '5', x2: '19', y1: '15', y2: '15' }],\n ['line', { x1: '19', x2: '5', y1: '5', y2: '19' }],\n ],\n];\n\nexport default EqualNot;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Equal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '5', x2: '19', y1: '9', y2: '9' }],\n ['line', { x1: '5', x2: '19', y1: '15', y2: '15' }],\n ],\n];\n\nexport default Equal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Eraser: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'm7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21',\n },\n ],\n ['path', { d: 'M22 21H7' }],\n ['path', { d: 'm5 11 9 9' }],\n ],\n];\n\nexport default Eraser;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Euro: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 10h12' }],\n ['path', { d: 'M4 14h9' }],\n [\n 'path',\n {\n d: 'M19 6a7.7 7.7 0 0 0-5.2-2A7.9 7.9 0 0 0 6 12c0 4.4 3.5 8 7.8 8 2 0 3.8-.8 5.2-2',\n },\n ],\n ],\n];\n\nexport default Euro;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Expand: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm21 21-6-6m6 6v-4.8m0 4.8h-4.8' }],\n ['path', { d: 'M3 16.2V21m0 0h4.8M3 21l6-6' }],\n ['path', { d: 'M21 7.8V3m0 0h-4.8M21 3l-6 6' }],\n ['path', { d: 'M3 7.8V3m0 0h4.8M3 3l6 6' }],\n ],\n];\n\nexport default Expand;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ExternalLink: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6' }],\n ['polyline', { points: '15 3 21 3 21 9' }],\n ['line', { x1: '10', x2: '21', y1: '14', y2: '3' }],\n ],\n];\n\nexport default ExternalLink;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst EyeOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M9.88 9.88a3 3 0 1 0 4.24 4.24' }],\n [\n 'path',\n {\n d: 'M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68',\n },\n ],\n [\n 'path',\n {\n d: 'M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61',\n },\n ],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default EyeOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Eye: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z' }],\n ['circle', { cx: '12', cy: '12', r: '3' }],\n ],\n];\n\nexport default Eye;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Facebook: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z',\n },\n ],\n ],\n];\n\nexport default Facebook;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Factory: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M2 20a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8l-7 5V8l-7 5V4a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z',\n },\n ],\n ['path', { d: 'M17 18h1' }],\n ['path', { d: 'M12 18h1' }],\n ['path', { d: 'M7 18h1' }],\n ],\n];\n\nexport default Factory;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Fan: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M10.827 16.379a6.082 6.082 0 0 1-8.618-7.002l5.412 1.45a6.082 6.082 0 0 1 7.002-8.618l-1.45 5.412a6.082 6.082 0 0 1 8.618 7.002l-5.412-1.45a6.082 6.082 0 0 1-7.002 8.618l1.45-5.412Z',\n },\n ],\n ['path', { d: 'M12 12v.01' }],\n ],\n];\n\nexport default Fan;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FastForward: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polygon', { points: '13 19 22 12 13 5 13 19' }],\n ['polygon', { points: '2 19 11 12 2 5 2 19' }],\n ],\n];\n\nexport default FastForward;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Feather: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z' }],\n ['line', { x1: '16', x2: '2', y1: '8', y2: '22' }],\n ['line', { x1: '17.5', x2: '9', y1: '15', y2: '15' }],\n ],\n];\n\nexport default Feather;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Figma: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z' }],\n ['path', { d: 'M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z' }],\n ['path', { d: 'M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z' }],\n ['path', { d: 'M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z' }],\n [\n 'path',\n { d: 'M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z' },\n ],\n ],\n];\n\nexport default Figma;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileArchive: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4 22V4c0-.5.2-1 .6-1.4C5 2.2 5.5 2 6 2h8.5L20 7.5V20c0 .5-.2 1-.6 1.4-.4.4-.9.6-1.4.6h-2',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['circle', { cx: '10', cy: '20', r: '2' }],\n ['path', { d: 'M10 7V6' }],\n ['path', { d: 'M10 12v-1' }],\n ['path', { d: 'M10 18v-2' }],\n ],\n];\n\nexport default FileArchive;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileAudio2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v2' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M2 17v-3a4 4 0 0 1 8 0v3' }],\n ['circle', { cx: '9', cy: '17', r: '1' }],\n ['circle', { cx: '3', cy: '17', r: '1' }],\n ],\n];\n\nexport default FileAudio2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileAudio: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M17.5 22h.5c.5 0 1-.2 1.4-.6.4-.4.6-.9.6-1.4V7.5L14.5 2H6c-.5 0-1 .2-1.4.6C4.2 3 4 3.5 4 4v3',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M10 20v-1a2 2 0 1 1 4 0v1a2 2 0 1 1-4 0Z' }],\n ['path', { d: 'M6 20v-1a2 2 0 1 0-4 0v1a2 2 0 1 0 4 0Z' }],\n ['path', { d: 'M2 19v-3a6 6 0 0 1 12 0v3' }],\n ],\n];\n\nexport default FileAudio;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileAxis3d: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M8 10v8h8' }],\n ['path', { d: 'm8 18 4-4' }],\n ],\n];\n\nexport default FileAxis3d;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileBadge2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['path', { d: 'M12 13a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z' }],\n ['path', { d: 'm14 12.5 1 5.5-3-1-3 1 1-5.5' }],\n ],\n];\n\nexport default FileBadge2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileBadge: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 7V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2h-6' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M5 17a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z' }],\n ['path', { d: 'M7 16.5 8 22l-3-1-3 1 1-5.5' }],\n ],\n];\n\nexport default FileBadge;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileBarChart2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M12 18v-6' }],\n ['path', { d: 'M8 18v-1' }],\n ['path', { d: 'M16 18v-3' }],\n ],\n];\n\nexport default FileBarChart2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileBarChart: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M12 18v-4' }],\n ['path', { d: 'M8 18v-2' }],\n ['path', { d: 'M16 18v-6' }],\n ],\n];\n\nexport default FileBarChart;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileBox: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M14.5 22H18a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n [\n 'path',\n {\n d: 'M2.97 13.12c-.6.36-.97 1.02-.97 1.74v3.28c0 .72.37 1.38.97 1.74l3 1.83c.63.39 1.43.39 2.06 0l3-1.83c.6-.36.97-1.02.97-1.74v-3.28c0-.72-.37-1.38-.97-1.74l-3-1.83a1.97 1.97 0 0 0-2.06 0l-3 1.83Z',\n },\n ],\n ['path', { d: 'm7 17-4.74-2.85' }],\n ['path', { d: 'm7 17 4.74-2.85' }],\n ['path', { d: 'M7 17v5' }],\n ],\n];\n\nexport default FileBox;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileCheck2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'm3 15 2 2 4-4' }],\n ],\n];\n\nexport default FileCheck2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileCheck: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'm9 15 2 2 4-4' }],\n ],\n];\n\nexport default FileCheck;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileClock: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M16 22h2c.5 0 1-.2 1.4-.6.4-.4.6-.9.6-1.4V7.5L14.5 2H6c-.5 0-1 .2-1.4.6C4.2 3 4 3.5 4 4v3',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['circle', { cx: '8', cy: '16', r: '6' }],\n ['path', { d: 'M9.5 17.5 8 16.25V14' }],\n ],\n];\n\nexport default FileClock;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileCode: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'm9 18 3-3-3-3' }],\n ['path', { d: 'm5 12-3 3 3 3' }],\n ],\n];\n\nexport default FileCode;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileCog2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['circle', { cx: '12', cy: '15', r: '2' }],\n ['path', { d: 'M12 12v1' }],\n ['path', { d: 'M12 17v1' }],\n ['path', { d: 'm14.6 13.5-.87.5' }],\n ['path', { d: 'm10.27 16-.87.5' }],\n ['path', { d: 'm14.6 16.5-.87-.5' }],\n ['path', { d: 'm10.27 14-.87-.5' }],\n ],\n];\n\nexport default FileCog2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileCog: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 6V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['circle', { cx: '6', cy: '14', r: '3' }],\n ['path', { d: 'M6 10v1' }],\n ['path', { d: 'M6 17v1' }],\n ['path', { d: 'M10 14H9' }],\n ['path', { d: 'M3 14H2' }],\n ['path', { d: 'm9 11-.88.88' }],\n ['path', { d: 'M3.88 16.12 3 17' }],\n ['path', { d: 'm9 17-.88-.88' }],\n ['path', { d: 'M3.88 11.88 3 11' }],\n ],\n];\n\nexport default FileCog;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileDiff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['path', { d: 'M12 13V7' }],\n ['path', { d: 'M9 10h6' }],\n ['path', { d: 'M9 17h6' }],\n ],\n];\n\nexport default FileDiff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileDigit: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M10 12h2v6' }],\n ['rect', { width: '4', height: '6', x: '2', y: '12' }],\n ['path', { d: 'M10 18h4' }],\n ],\n];\n\nexport default FileDigit;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileDown: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M12 18v-6' }],\n ['path', { d: 'm9 15 3 3 3-3' }],\n ],\n];\n\nexport default FileDown;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileEdit: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 13.5V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2h-5.5' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n [\n 'path',\n {\n d: 'M10.42 12.61a2.1 2.1 0 1 1 2.97 2.97L7.95 21 4 22l.99-3.95 5.43-5.44Z',\n },\n ],\n ],\n];\n\nexport default FileEdit;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileHeart: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 6V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n [\n 'path',\n {\n d: 'M10.29 10.7a2.43 2.43 0 0 0-2.66-.52c-.29.12-.56.3-.78.53l-.35.34-.35-.34a2.43 2.43 0 0 0-2.65-.53c-.3.12-.56.3-.79.53-.95.94-1 2.53.2 3.74L6.5 18l3.6-3.55c1.2-1.21 1.14-2.8.19-3.74Z',\n },\n ],\n ],\n];\n\nexport default FileHeart;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileImage: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['circle', { cx: '10', cy: '13', r: '2' }],\n ['path', { d: 'm20 17-1.09-1.09a2 2 0 0 0-2.82 0L10 22' }],\n ],\n];\n\nexport default FileImage;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileInput: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M2 15h10' }],\n ['path', { d: 'm9 18 3-3-3-3' }],\n ],\n];\n\nexport default FileInput;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileJson2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n [\n 'path',\n {\n d: 'M4 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1',\n },\n ],\n [\n 'path',\n {\n d: 'M8 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1',\n },\n ],\n ],\n];\n\nexport default FileJson2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileJson: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n [\n 'path',\n {\n d: 'M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1',\n },\n ],\n [\n 'path',\n {\n d: 'M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1',\n },\n ],\n ],\n];\n\nexport default FileJson;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileKey2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 10V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['circle', { cx: '4', cy: '16', r: '2' }],\n ['path', { d: 'm10 10-4.5 4.5' }],\n ['path', { d: 'm9 11 1 1' }],\n ],\n];\n\nexport default FileKey2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileKey: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['circle', { cx: '10', cy: '16', r: '2' }],\n ['path', { d: 'm16 10-4.5 4.5' }],\n ['path', { d: 'm15 11 1 1' }],\n ],\n];\n\nexport default FileKey;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileLineChart: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'm16 13-3.5 3.5-2-2L8 17' }],\n ],\n];\n\nexport default FileLineChart;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileLock2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 5V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['rect', { width: '8', height: '5', x: '2', y: '13', rx: '1' }],\n ['path', { d: 'M8 13v-2a2 2 0 1 0-4 0v2' }],\n ],\n];\n\nexport default FileLock2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileLock: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['rect', { width: '8', height: '6', x: '8', y: '12', rx: '1' }],\n ['path', { d: 'M15 12v-2a3 3 0 1 0-6 0v2' }],\n ],\n];\n\nexport default FileLock;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileMinus2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M3 15h6' }],\n ],\n];\n\nexport default FileMinus2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileMinus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['line', { x1: '9', x2: '15', y1: '15', y2: '15' }],\n ],\n];\n\nexport default FileMinus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileOutput: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M2 15h10' }],\n ['path', { d: 'm5 12-3 3 3 3' }],\n ],\n];\n\nexport default FileOutput;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FilePieChart: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M16 22h2a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v3' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M4.04 11.71a5.84 5.84 0 1 0 8.2 8.29' }],\n ['path', { d: 'M13.83 16A5.83 5.83 0 0 0 8 10.17V16h5.83Z' }],\n ],\n];\n\nexport default FilePieChart;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FilePlus2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M3 15h6' }],\n ['path', { d: 'M6 12v6' }],\n ],\n];\n\nexport default FilePlus2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FilePlus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['line', { x1: '12', x2: '12', y1: '18', y2: '12' }],\n ['line', { x1: '9', x2: '15', y1: '15', y2: '15' }],\n ],\n];\n\nexport default FilePlus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileQuestion: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n [\n 'path',\n {\n d: 'M10 10.3c.2-.4.5-.8.9-1a2.1 2.1 0 0 1 2.6.4c.3.4.5.8.5 1.3 0 1.3-2 2-2 2',\n },\n ],\n ['path', { d: 'M12 17h.01' }],\n ],\n];\n\nexport default FileQuestion;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileScan: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M20 10V7.5L14.5 2H6a2 2 0 0 0-2 2v16c0 1.1.9 2 2 2h4.5' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M16 22a2 2 0 0 1-2-2' }],\n ['path', { d: 'M20 22a2 2 0 0 0 2-2' }],\n ['path', { d: 'M20 14a2 2 0 0 1 2 2' }],\n ['path', { d: 'M16 14a2 2 0 0 0-2 2' }],\n ],\n];\n\nexport default FileScan;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileSearch2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['circle', { cx: '11.5', cy: '14.5', r: '2.5' }],\n ['path', { d: 'M13.25 16.25 15 18' }],\n ],\n];\n\nexport default FileSearch2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileSearch: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v3' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M5 17a3 3 0 1 0 0-6 3 3 0 0 0 0 6z' }],\n ['path', { d: 'm9 18-1.5-1.5' }],\n ],\n];\n\nexport default FileSearch;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileSignature: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M20 19.5v.5a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8.5L18 5.5',\n },\n ],\n ['path', { d: 'M8 18h1' }],\n [\n 'path',\n {\n d: 'M18.42 9.61a2.1 2.1 0 1 1 2.97 2.97L16.95 17 13 18l.99-3.95 4.43-4.44Z',\n },\n ],\n ],\n];\n\nexport default FileSignature;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileSpreadsheet: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M8 13h2' }],\n ['path', { d: 'M8 17h2' }],\n ['path', { d: 'M14 13h2' }],\n ['path', { d: 'M14 17h2' }],\n ],\n];\n\nexport default FileSpreadsheet;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileSymlink: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v7' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'm10 18 3-3-3-3' }],\n ['path', { d: 'M4 18v-1a2 2 0 0 1 2-2h6' }],\n ],\n];\n\nexport default FileSymlink;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileTerminal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'm8 16 2-2-2-2' }],\n ['path', { d: 'M12 18h4' }],\n ],\n];\n\nexport default FileTerminal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileText: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['line', { x1: '16', x2: '8', y1: '13', y2: '13' }],\n ['line', { x1: '16', x2: '8', y1: '17', y2: '17' }],\n ['line', { x1: '10', x2: '8', y1: '9', y2: '9' }],\n ],\n];\n\nexport default FileText;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileType2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M2 13v-1h6v1' }],\n ['path', { d: 'M4 18h2' }],\n ['path', { d: 'M5 12v6' }],\n ],\n];\n\nexport default FileType2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileType: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M9 13v-1h6v1' }],\n ['path', { d: 'M11 18h2' }],\n ['path', { d: 'M12 12v6' }],\n ],\n];\n\nexport default FileType;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileUp: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M12 12v6' }],\n ['path', { d: 'm15 15-3-3-3 3' }],\n ],\n];\n\nexport default FileUp;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileVideo2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 8V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'm10 15.5 4 2.5v-6l-4 2.5' }],\n ['rect', { width: '8', height: '6', x: '2', y: '12', rx: '1' }],\n ],\n];\n\nexport default FileVideo2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileVideo: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'm10 11 5 3-5 3v-6Z' }],\n ],\n];\n\nexport default FileVideo;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileVolume2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'M11.5 13.5c.32.4.5.94.5 1.5s-.18 1.1-.5 1.5' }],\n ['path', { d: 'M15 12c.64.8 1 1.87 1 3s-.36 2.2-1 3' }],\n ['path', { d: 'M8 15h.01' }],\n ],\n];\n\nexport default FileVolume2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileVolume: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v3' }],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['path', { d: 'm7 10-3 2H2v4h2l3 2v-8Z' }],\n ['path', { d: 'M11 11c.64.8 1 1.87 1 3s-.36 2.2-1 3' }],\n ],\n];\n\nexport default FileVolume;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileWarning: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['path', { d: 'M12 9v4' }],\n ['path', { d: 'M12 17h.01' }],\n ],\n];\n\nexport default FileWarning;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileX2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4' }],\n ['path', { d: 'M14 2v6h6' }],\n ['path', { d: 'm3 12.5 5 5' }],\n ['path', { d: 'm8 12.5-5 5' }],\n ],\n];\n\nexport default FileX2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FileX: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ['line', { x1: '9.5', x2: '14.5', y1: '12.5', y2: '17.5' }],\n ['line', { x1: '14.5', x2: '9.5', y1: '12.5', y2: '17.5' }],\n ],\n];\n\nexport default FileX;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst File: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z',\n },\n ],\n ['polyline', { points: '14 2 14 8 20 8' }],\n ],\n];\n\nexport default File;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Files: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M15.5 2H8.6c-.4 0-.8.2-1.1.5-.3.3-.5.7-.5 1.1v12.8c0 .4.2.8.5 1.1.3.3.7.5 1.1.5h9.8c.4 0 .8-.2 1.1-.5.3-.3.5-.7.5-1.1V6.5L15.5 2z',\n },\n ],\n ['path', { d: 'M3 7.6v12.8c0 .4.2.8.5 1.1.3.3.7.5 1.1.5h9.8' }],\n ['path', { d: 'M15 2v5h5' }],\n ],\n];\n\nexport default Files;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Film: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'rect',\n { width: '20', height: '20', x: '2', y: '2', rx: '2.18', ry: '2.18' },\n ],\n ['line', { x1: '7', x2: '7', y1: '2', y2: '22' }],\n ['line', { x1: '17', x2: '17', y1: '2', y2: '22' }],\n ['line', { x1: '2', x2: '22', y1: '12', y2: '12' }],\n ['line', { x1: '2', x2: '7', y1: '7', y2: '7' }],\n ['line', { x1: '2', x2: '7', y1: '17', y2: '17' }],\n ['line', { x1: '17', x2: '22', y1: '17', y2: '17' }],\n ['line', { x1: '17', x2: '22', y1: '7', y2: '7' }],\n ],\n];\n\nexport default Film;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FilterX: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M13.013 3H2l8 9.46V19l4 2v-8.54l.9-1.055' }],\n ['path', { d: 'm22 3-5 5' }],\n ['path', { d: 'm17 3 5 5' }],\n ],\n];\n\nexport default FilterX;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Filter: IconNode = [\n 'svg',\n defaultAttributes,\n [['polygon', { points: '22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3' }]],\n];\n\nexport default Filter;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Fingerprint: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 12C2 6.5 6.5 2 12 2a10 10 0 0 1 8 4' }],\n ['path', { d: 'M5 19.5C5.5 18 6 15 6 12c0-.7.12-1.37.34-2' }],\n ['path', { d: 'M17.29 21.02c.12-.6.43-2.3.5-3.02' }],\n ['path', { d: 'M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4' }],\n ['path', { d: 'M8.65 22c.21-.66.45-1.32.57-2' }],\n ['path', { d: 'M14 13.12c0 2.38 0 6.38-1 8.88' }],\n ['path', { d: 'M2 16h.01' }],\n ['path', { d: 'M21.8 16c.2-2 .131-5.354 0-6' }],\n ['path', { d: 'M9 6.8a6 6 0 0 1 9 5.2c0 .47 0 1.17-.02 2' }],\n ],\n];\n\nexport default Fingerprint;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FishOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M18 12.47v.03m0-.5v.47m-.475 5.056A6.744 6.744 0 0 1 15 18c-3.56 0-7.56-2.53-8.5-6 .348-1.28 1.114-2.433 2.121-3.38m3.444-2.088A8.802 8.802 0 0 1 15 6c3.56 0 6.06 2.54 7 6-.309 1.14-.786 2.177-1.413 3.058',\n },\n ],\n [\n 'path',\n {\n d: 'M7 10.67C7 8 5.58 5.97 2.73 5.5c-1 1.5-1 5 .23 6.5-1.24 1.5-1.24 5-.23 6.5C5.58 18.03 7 16 7 13.33m7.48-4.372A9.77 9.77 0 0 1 16 6.07m0 11.86a9.77 9.77 0 0 1-1.728-3.618',\n },\n ],\n [\n 'path',\n {\n d: 'm16.01 17.93-.23 1.4A2 2 0 0 1 13.8 21H9.5a5.96 5.96 0 0 0 1.49-3.98M8.53 3h5.27a2 2 0 0 1 1.98 1.67l.23 1.4M2 2l20 20',\n },\n ],\n ],\n];\n\nexport default FishOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Fish: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M6.5 12c.94-3.46 4.94-6 8.5-6 3.56 0 6.06 2.54 7 6-.94 3.47-3.44 6-7 6s-7.56-2.53-8.5-6Z',\n },\n ],\n ['path', { d: 'M18 12v.5' }],\n ['path', { d: 'M16 17.93a9.77 9.77 0 0 1 0-11.86' }],\n [\n 'path',\n {\n d: 'M7 10.67C7 8 5.58 5.97 2.73 5.5c-1 1.5-1 5 .23 6.5-1.24 1.5-1.24 5-.23 6.5C5.58 18.03 7 16 7 13.33',\n },\n ],\n [\n 'path',\n {\n d: 'M10.46 7.26C10.2 5.88 9.17 4.24 8 3h5.8a2 2 0 0 1 1.98 1.67l.23 1.4',\n },\n ],\n [\n 'path',\n {\n d: 'm16.01 17.93-.23 1.4A2 2 0 0 1 13.8 21H9.5a5.96 5.96 0 0 0 1.49-3.98',\n },\n ],\n ],\n];\n\nexport default Fish;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FlagOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M8 2c3 0 5 2 8 2s4-1 4-1v11' }],\n ['path', { d: 'M4 22V4' }],\n ['path', { d: 'M4 15s1-1 4-1 5 2 8 2' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default FlagOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FlagTriangleLeft: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M17 22V2L7 7l10 5' }]],\n];\n\nexport default FlagTriangleLeft;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FlagTriangleRight: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M7 22V2l10 5-10 5' }]],\n];\n\nexport default FlagTriangleRight;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Flag: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z' },\n ],\n ['line', { x1: '4', x2: '4', y1: '22', y2: '15' }],\n ],\n];\n\nexport default Flag;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Flame: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z',\n },\n ],\n ],\n];\n\nexport default Flame;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FlashlightOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M16 16v4a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2V10c0-2-2-2-2-4' }],\n ['path', { d: 'M7 2h11v4c0 2-2 2-2 4v1' }],\n ['line', { x1: '11', x2: '18', y1: '6', y2: '6' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default FlashlightOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Flashlight: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M18 6c0 2-2 2-2 4v10a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2V10c0-2-2-2-2-4V2h12z',\n },\n ],\n ['line', { x1: '6', x2: '18', y1: '6', y2: '6' }],\n ['line', { x1: '12', x2: '12', y1: '12', y2: '12' }],\n ],\n];\n\nexport default Flashlight;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FlaskConicalOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M10 10 4.72 20.55a1 1 0 0 0 .9 1.45h12.76a1 1 0 0 0 .9-1.45l-1.272-2.542',\n },\n ],\n ['path', { d: 'M10 2v2.343' }],\n ['path', { d: 'M14 2v6.343' }],\n ['path', { d: 'M8.5 2h7' }],\n ['path', { d: 'M7 16h9' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default FlaskConicalOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FlaskConical: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M10 2v7.527a2 2 0 0 1-.211.896L4.72 20.55a1 1 0 0 0 .9 1.45h12.76a1 1 0 0 0 .9-1.45l-5.069-10.127A2 2 0 0 1 14 9.527V2',\n },\n ],\n ['path', { d: 'M8.5 2h7' }],\n ['path', { d: 'M7 16h10' }],\n ],\n];\n\nexport default FlaskConical;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FlaskRound: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M10 2v7.31' }],\n ['path', { d: 'M14 9.3V1.99' }],\n ['path', { d: 'M8.5 2h7' }],\n ['path', { d: 'M14 9.3a6.5 6.5 0 1 1-4 0' }],\n ['path', { d: 'M5.52 16h12.96' }],\n ],\n];\n\nexport default FlaskRound;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FlipHorizontal2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm3 7 5 5-5 5V7' }],\n ['path', { d: 'm21 7-5 5 5 5V7' }],\n ['path', { d: 'M12 20v2' }],\n ['path', { d: 'M12 14v2' }],\n ['path', { d: 'M12 8v2' }],\n ['path', { d: 'M12 2v2' }],\n ],\n];\n\nexport default FlipHorizontal2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FlipHorizontal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M8 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h3' }],\n ['path', { d: 'M16 3h3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-3' }],\n ['path', { d: 'M12 20v2' }],\n ['path', { d: 'M12 14v2' }],\n ['path', { d: 'M12 8v2' }],\n ['path', { d: 'M12 2v2' }],\n ],\n];\n\nexport default FlipHorizontal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FlipVertical2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm17 3-5 5-5-5h10' }],\n ['path', { d: 'm17 21-5-5-5 5h10' }],\n ['path', { d: 'M4 12H2' }],\n ['path', { d: 'M10 12H8' }],\n ['path', { d: 'M16 12h-2' }],\n ['path', { d: 'M22 12h-2' }],\n ],\n];\n\nexport default FlipVertical2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FlipVertical: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M21 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v3' }],\n ['path', { d: 'M21 16v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-3' }],\n ['path', { d: 'M4 12H2' }],\n ['path', { d: 'M10 12H8' }],\n ['path', { d: 'M16 12h-2' }],\n ['path', { d: 'M22 12h-2' }],\n ],\n];\n\nexport default FlipVertical;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Flower2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M12 5a3 3 0 1 1 3 3m-3-3a3 3 0 1 0-3 3m3-3v1M9 8a3 3 0 1 0 3 3M9 8h1m5 0a3 3 0 1 1-3 3m3-3h-1m-2 3v-1',\n },\n ],\n ['circle', { cx: '12', cy: '8', r: '2' }],\n ['path', { d: 'M12 10v12' }],\n ['path', { d: 'M12 22c4.2 0 7-1.667 7-5-4.2 0-7 1.667-7 5Z' }],\n ['path', { d: 'M12 22c-4.2 0-7-1.667-7-5 4.2 0 7 1.667 7 5Z' }],\n ],\n];\n\nexport default Flower2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Flower: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M12 7.5a4.5 4.5 0 1 1 4.5 4.5M12 7.5A4.5 4.5 0 1 0 7.5 12M12 7.5V9m-4.5 3a4.5 4.5 0 1 0 4.5 4.5M7.5 12H9m7.5 0a4.5 4.5 0 1 1-4.5 4.5m4.5-4.5H15m-3 4.5V15',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3' }],\n ['path', { d: 'm8 16 1.5-1.5' }],\n ['path', { d: 'M14.5 9.5 16 8' }],\n ['path', { d: 'm8 8 1.5 1.5' }],\n ['path', { d: 'M14.5 14.5 16 16' }],\n ],\n];\n\nexport default Flower;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Focus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '3' }],\n ['path', { d: 'M3 7V5a2 2 0 0 1 2-2h2' }],\n ['path', { d: 'M17 3h2a2 2 0 0 1 2 2v2' }],\n ['path', { d: 'M21 17v2a2 2 0 0 1-2 2h-2' }],\n ['path', { d: 'M7 21H5a2 2 0 0 1-2-2v-2' }],\n ],\n];\n\nexport default Focus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderArchive: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M22 20V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2h6',\n },\n ],\n ['circle', { cx: '16', cy: '19', r: '2' }],\n ['path', { d: 'M16 11v-1' }],\n ['path', { d: 'M16 17v-2' }],\n ],\n];\n\nexport default FolderArchive;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderCheck: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z',\n },\n ],\n ['path', { d: 'm9 13 2 2 4-4' }],\n ],\n];\n\nexport default FolderCheck;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderClock: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M7 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2',\n },\n ],\n ['circle', { cx: '16', cy: '16', r: '6' }],\n ['path', { d: 'M16 14v2l1 1' }],\n ],\n];\n\nexport default FolderClock;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderClosed: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z',\n },\n ],\n ['path', { d: 'M2 10h20' }],\n ],\n];\n\nexport default FolderClosed;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderCog2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z',\n },\n ],\n ['circle', { cx: '12', cy: '13', r: '2' }],\n ['path', { d: 'M12 10v1' }],\n ['path', { d: 'M12 15v1' }],\n ['path', { d: 'm14.6 11.5-.87.5' }],\n ['path', { d: 'm10.27 14-.87.5' }],\n ['path', { d: 'm14.6 14.5-.87-.5' }],\n ['path', { d: 'm10.27 12-.87-.5' }],\n ],\n];\n\nexport default FolderCog2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderCog: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M10.5 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v3',\n },\n ],\n ['circle', { cx: '18', cy: '18', r: '3' }],\n ['path', { d: 'M18 14v1' }],\n ['path', { d: 'M18 21v1' }],\n ['path', { d: 'M22 18h-1' }],\n ['path', { d: 'M15 18h-1' }],\n ['path', { d: 'm21 15-.88.88' }],\n ['path', { d: 'M15.88 20.12 15 21' }],\n ['path', { d: 'm21 21-.88-.88' }],\n ['path', { d: 'M15.88 15.88 15 15' }],\n ],\n];\n\nexport default FolderCog;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderDown: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z',\n },\n ],\n ['path', { d: 'M12 10v6' }],\n ['path', { d: 'm15 13-3 3-3-3' }],\n ],\n];\n\nexport default FolderDown;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderEdit: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M8.42 10.61a2.1 2.1 0 1 1 2.97 2.97L5.95 19 2 20l.99-3.95 5.43-5.44Z',\n },\n ],\n [\n 'path',\n {\n d: 'M2 11.5V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-9.5',\n },\n ],\n ],\n];\n\nexport default FolderEdit;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderGit2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M22 13V8a1.974 1.974 0 0 0-2-2h-7.9c-.3 0-.7-.1-.9-.2-.3-.2-.5-.4-.7-.7l-.9-1.2c-.2-.3-.4-.5-.7-.7-.3-.1-.6-.2-1-.2H4a1.974 1.974 0 0 0-2 2v13c0 1.1.9 2 2 2h5',\n },\n ],\n ['circle', { cx: '20', cy: '19', r: '2' }],\n ['circle', { cx: '13', cy: '12.', r: '2' }],\n ['path', { d: 'M18 19c-2.8 0-5-2.2-5-5v8' }],\n ],\n];\n\nexport default FolderGit2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderGit: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z',\n },\n ],\n ['circle', { class: 'st0', cx: '12', cy: '13', r: '2' }],\n ['line', { class: 'st0', x1: '6', y1: '13', x2: '10', y2: '13' }],\n ['line', { class: 'st0', x1: '14', y1: '13', x2: '18', y2: '13' }],\n ],\n];\n\nexport default FolderGit;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderHeart: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M11 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v1.5',\n },\n ],\n [\n 'path',\n {\n d: 'M21.29 13.7a2.43 2.43 0 0 0-2.65-.52c-.3.12-.57.3-.8.53l-.34.34-.35-.34a2.43 2.43 0 0 0-2.65-.53c-.3.12-.56.3-.79.53-.95.94-1 2.53.2 3.74L17.5 21l3.6-3.55c1.2-1.21 1.14-2.8.19-3.74Z',\n },\n ],\n ],\n];\n\nexport default FolderHeart;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderInput: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M2 9V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-1',\n },\n ],\n ['path', { d: 'M2 13h10' }],\n ['path', { d: 'm9 16 3-3-3-3' }],\n ],\n];\n\nexport default FolderInput;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderKey: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M10 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v2',\n },\n ],\n ['circle', { cx: '16', cy: '20', r: '2' }],\n ['path', { d: 'm22 14-4.5 4.5' }],\n ['path', { d: 'm21 15 1 1' }],\n ],\n];\n\nexport default FolderKey;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderLock: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M10 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v2.5',\n },\n ],\n ['rect', { width: '8', height: '5', x: '14', y: '17', rx: '1' }],\n ['path', { d: 'M20 17v-2a2 2 0 1 0-4 0v2' }],\n ],\n];\n\nexport default FolderLock;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderMinus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z',\n },\n ],\n ['line', { x1: '9', x2: '15', y1: '13', y2: '13' }],\n ],\n];\n\nexport default FolderMinus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderOpen: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'm6 14 1.45-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.55 6a2 2 0 0 1-1.94 1.5H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H18a2 2 0 0 1 2 2v2',\n },\n ],\n ],\n];\n\nexport default FolderOpen;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderOutput: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M2 7.5V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2',\n },\n ],\n ['path', { d: 'M2 13h10' }],\n ['path', { d: 'm5 10-3 3 3 3' }],\n ],\n];\n\nexport default FolderOutput;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderPlus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z',\n },\n ],\n ['line', { x1: '12', x2: '12', y1: '10', y2: '16' }],\n ['line', { x1: '9', x2: '15', y1: '13', y2: '13' }],\n ],\n];\n\nexport default FolderPlus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderSearch2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z',\n },\n ],\n ['circle', { cx: '11.5', cy: '12.5', r: '2.5' }],\n ['path', { d: 'M13.27 14.27 15 16' }],\n ],\n];\n\nexport default FolderSearch2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderSearch: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M11 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v4',\n },\n ],\n ['circle', { cx: '17', cy: '17', r: '3' }],\n ['path', { d: 'm21 21-1.5-1.5' }],\n ],\n];\n\nexport default FolderSearch;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderSymlink: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M2 9V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2',\n },\n ],\n ['path', { d: 'm8 16 3-3-3-3' }],\n ['path', { d: 'M2 16v-1a2 2 0 0 1 2-2h6' }],\n ],\n];\n\nexport default FolderSymlink;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderTree: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M13 10h7a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z',\n },\n ],\n [\n 'path',\n {\n d: 'M13 21h7a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.88a1 1 0 0 1-.9-.55l-.44-.9a1 1 0 0 0-.9-.55H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z',\n },\n ],\n ['path', { d: 'M3 3v2c0 1.1.9 2 2 2h3' }],\n ['path', { d: 'M3 3v13c0 1.1.9 2 2 2h3' }],\n ],\n];\n\nexport default FolderTree;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderUp: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z',\n },\n ],\n ['path', { d: 'M12 10v6' }],\n ['path', { d: 'm9 13 3-3 3 3' }],\n ],\n];\n\nexport default FolderUp;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FolderX: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z',\n },\n ],\n ['path', { d: 'm9.5 10.5 5 5' }],\n ['path', { d: 'm14.5 10.5-5 5' }],\n ],\n];\n\nexport default FolderX;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Folder: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z',\n },\n ],\n ],\n];\n\nexport default Folder;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Folders: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M8 17h12a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3.93a2 2 0 0 1-1.66-.9l-.82-1.2a2 2 0 0 0-1.66-.9H8a2 2 0 0 0-2 2v9c0 1.1.9 2 2 2Z',\n },\n ],\n ['path', { d: 'M2 8v11c0 1.1.9 2 2 2h14' }],\n ],\n];\n\nexport default Folders;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Footprints: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4 16v-2.38C4 11.5 2.97 10.5 3 8c.03-2.72 1.49-6 4.5-6C9.37 2 10 3.8 10 5.5c0 3.11-2 5.66-2 8.68V16a2 2 0 1 1-4 0Z',\n },\n ],\n [\n 'path',\n {\n d: 'M20 20v-2.38c0-2.12 1.03-3.12 1-5.62-.03-2.72-1.49-6-4.5-6C14.63 6 14 7.8 14 9.5c0 3.11 2 5.66 2 8.68V20a2 2 0 1 0 4 0Z',\n },\n ],\n ['path', { d: 'M16 17h4' }],\n ['path', { d: 'M4 13h4' }],\n ],\n];\n\nexport default Footprints;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Forklift: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 12H5a2 2 0 0 0-2 2v5' }],\n ['circle', { cx: '13', cy: '19', r: '2' }],\n ['circle', { cx: '5', cy: '19', r: '2' }],\n ['path', { d: 'M8 19h3m5-17v17h6M6 12V7c0-1.1.9-2 2-2h3l5 5' }],\n ],\n];\n\nexport default Forklift;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FormInput: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '12', x: '2', y: '6', rx: '2' }],\n ['path', { d: 'M12 12h.01' }],\n ['path', { d: 'M17 12h.01' }],\n ['path', { d: 'M7 12h.01' }],\n ],\n];\n\nexport default FormInput;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Forward: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '15 17 20 12 15 7' }],\n ['path', { d: 'M4 18v-2a4 4 0 0 1 4-4h12' }],\n ],\n];\n\nexport default Forward;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Frame: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '22', x2: '2', y1: '6', y2: '6' }],\n ['line', { x1: '22', x2: '2', y1: '18', y2: '18' }],\n ['line', { x1: '6', x2: '6', y1: '2', y2: '22' }],\n ['line', { x1: '18', x2: '18', y1: '2', y2: '22' }],\n ],\n];\n\nexport default Frame;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Framer: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M5 16V9h14V2H5l14 14h-7m-7 0 7 7v-7m-7 0h7' }]],\n];\n\nexport default Framer;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Frown: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M16 16s-1.5-2-4-2-4 2-4 2' }],\n ['line', { x1: '9', x2: '9.01', y1: '9', y2: '9' }],\n ['line', { x1: '15', x2: '15.01', y1: '9', y2: '9' }],\n ],\n];\n\nexport default Frown;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Fuel: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '3', x2: '15', y1: '22', y2: '22' }],\n ['line', { x1: '4', x2: '14', y1: '9', y2: '9' }],\n ['path', { d: 'M14 22V4a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v18' }],\n [\n 'path',\n {\n d: 'M14 13h2a2 2 0 0 1 2 2v2a2 2 0 0 0 2 2h0a2 2 0 0 0 2-2V9.83a2 2 0 0 0-.59-1.42L18 5',\n },\n ],\n ],\n];\n\nexport default Fuel;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst FunctionSquare: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['path', { d: 'M9 17c2 0 2.8-1 2.8-2.8V10c0-2 1-3.3 3.2-3' }],\n ['path', { d: 'M9 11.2h5.7' }],\n ],\n];\n\nexport default FunctionSquare;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Gamepad2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '6', x2: '10', y1: '11', y2: '11' }],\n ['line', { x1: '8', x2: '8', y1: '9', y2: '13' }],\n ['line', { x1: '15', x2: '15.01', y1: '12', y2: '12' }],\n ['line', { x1: '18', x2: '18.01', y1: '10', y2: '10' }],\n [\n 'path',\n {\n d: 'M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z',\n },\n ],\n ],\n];\n\nexport default Gamepad2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Gamepad: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '6', x2: '10', y1: '12', y2: '12' }],\n ['line', { x1: '8', x2: '8', y1: '10', y2: '14' }],\n ['line', { x1: '15', x2: '15.01', y1: '13', y2: '13' }],\n ['line', { x1: '18', x2: '18.01', y1: '11', y2: '11' }],\n ['rect', { width: '20', height: '12', x: '2', y: '6', rx: '2' }],\n ],\n];\n\nexport default Gamepad;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Gauge: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm12 15 3.5-3.5' }],\n [\n 'path',\n {\n d: 'M20.3 18c.4-1 .7-2.2.7-3.4C21 9.8 17 6 12 6s-9 3.8-9 8.6c0 1.2.3 2.4.7 3.4',\n },\n ],\n ],\n];\n\nexport default Gauge;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Gavel: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'm14 13-7.5 7.5c-.83.83-2.17.83-3 0 0 0 0 0 0 0a2.12 2.12 0 0 1 0-3L11 10',\n },\n ],\n ['path', { d: 'm16 16 6-6' }],\n ['path', { d: 'm8 8 6-6' }],\n ['path', { d: 'm9 7 8 8' }],\n ['path', { d: 'm21 11-8-8' }],\n ],\n];\n\nexport default Gavel;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Gem: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polygon', { points: '6 3 18 3 22 9 12 22 2 9' }],\n ['path', { d: 'm12 22 4-13-3-6' }],\n ['path', { d: 'M12 22 8 9l3-6' }],\n ['path', { d: 'M2 9h20' }],\n ],\n];\n\nexport default Gem;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Ghost: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M9 10h.01' }],\n ['path', { d: 'M15 10h.01' }],\n [\n 'path',\n {\n d: 'M12 2a8 8 0 0 0-8 8v12l3-3 2.5 2.5L12 19l2.5 2.5L17 19l3 3V10a8 8 0 0 0-8-8z',\n },\n ],\n ],\n];\n\nexport default Ghost;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Gift: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '20 12 20 22 4 22 4 12' }],\n ['rect', { width: '20', height: '5', x: '2', y: '7' }],\n ['line', { x1: '12', x2: '12', y1: '22', y2: '7' }],\n ['path', { d: 'M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z' }],\n ['path', { d: 'M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z' }],\n ],\n];\n\nexport default Gift;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst GitBranchPlus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M6 3v12' }],\n ['path', { d: 'M18 9a3 3 0 1 0 0-6 3 3 0 0 0 0 6z' }],\n ['path', { d: 'M6 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6z' }],\n ['path', { d: 'M15 6a9 9 0 0 0-9 9' }],\n ['path', { d: 'M18 15v6' }],\n ['path', { d: 'M21 18h-6' }],\n ],\n];\n\nexport default GitBranchPlus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst GitBranch: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '6', x2: '6', y1: '3', y2: '15' }],\n ['circle', { cx: '18', cy: '6', r: '3' }],\n ['circle', { cx: '6', cy: '18', r: '3' }],\n ['path', { d: 'M18 9a9 9 0 0 1-9 9' }],\n ],\n];\n\nexport default GitBranch;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst GitCommit: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '3' }],\n ['line', { x1: '3', x2: '9', y1: '12', y2: '12' }],\n ['line', { x1: '15', x2: '21', y1: '12', y2: '12' }],\n ],\n];\n\nexport default GitCommit;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst GitCompare: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '18', cy: '18', r: '3' }],\n ['circle', { cx: '6', cy: '6', r: '3' }],\n ['path', { d: 'M13 6h3a2 2 0 0 1 2 2v7' }],\n ['path', { d: 'M11 18H8a2 2 0 0 1-2-2V9' }],\n ],\n];\n\nexport default GitCompare;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst GitFork: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '18', r: '3' }],\n ['circle', { cx: '6', cy: '6', r: '3' }],\n ['circle', { cx: '18', cy: '6', r: '3' }],\n ['path', { d: 'M18 9v1a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V9' }],\n ['path', { d: 'M12 12v3' }],\n ],\n];\n\nexport default GitFork;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst GitMerge: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '18', cy: '18', r: '3' }],\n ['circle', { cx: '6', cy: '6', r: '3' }],\n ['path', { d: 'M6 21V9a9 9 0 0 0 9 9' }],\n ],\n];\n\nexport default GitMerge;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst GitPullRequestClosed: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '18', cy: '18', r: '3' }],\n ['circle', { cx: '6', cy: '6', r: '3' }],\n ['path', { d: 'M18 11.5V15' }],\n ['path', { d: 'm21 3-6 6' }],\n ['path', { d: 'm21 9-6-6' }],\n ['line', { x1: '6', x2: '6', y1: '9', y2: '21' }],\n ],\n];\n\nexport default GitPullRequestClosed;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst GitPullRequestDraft: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '18', cy: '18', r: '3' }],\n ['circle', { cx: '6', cy: '6', r: '3' }],\n ['path', { d: 'M18 6V5' }],\n ['path', { d: 'M18 11v-1' }],\n ['line', { x1: '6', x2: '6', y1: '9', y2: '21' }],\n ],\n];\n\nexport default GitPullRequestDraft;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst GitPullRequest: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '18', cy: '18', r: '3' }],\n ['circle', { cx: '6', cy: '6', r: '3' }],\n ['path', { d: 'M13 6h3a2 2 0 0 1 2 2v7' }],\n ['line', { x1: '6', x2: '6', y1: '9', y2: '21' }],\n ],\n];\n\nexport default GitPullRequest;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Github: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4',\n },\n ],\n ['path', { d: 'M9 18c-4.51 2-5-2-7-2' }],\n ],\n];\n\nexport default Github;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Gitlab: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'm22 13.29-3.33-10a.42.42 0 0 0-.14-.18.38.38 0 0 0-.22-.11.39.39 0 0 0-.23.07.42.42 0 0 0-.14.18l-2.26 6.67H8.32L6.1 3.26a.42.42 0 0 0-.1-.18.38.38 0 0 0-.26-.08.39.39 0 0 0-.23.07.42.42 0 0 0-.14.18L2 13.29a.74.74 0 0 0 .27.83L12 21l9.69-6.88a.71.71 0 0 0 .31-.83Z',\n },\n ],\n ],\n];\n\nexport default Gitlab;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst GlassWater: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M15.2 22H8.8a2 2 0 0 1-2-1.79L5 3h14l-1.81 17.21A2 2 0 0 1 15.2 22Z',\n },\n ],\n ['path', { d: 'M6 12a5 5 0 0 1 6 0 5 5 0 0 0 6 0' }],\n ],\n];\n\nexport default GlassWater;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Glasses: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '6', cy: '15', r: '4' }],\n ['circle', { cx: '18', cy: '15', r: '4' }],\n ['path', { d: 'M14 15a2 2 0 0 0-2-2 2 2 0 0 0-2 2' }],\n ['path', { d: 'M2.5 13 5 7c.7-1.3 1.4-2 3-2' }],\n ['path', { d: 'M21.5 13 19 7c-.7-1.3-1.5-2-3-2' }],\n ],\n];\n\nexport default Glasses;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Globe2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M21.54 15H17a2 2 0 0 0-2 2v4.54' }],\n [\n 'path',\n {\n d: 'M7 3.34V5a3 3 0 0 0 3 3v0a2 2 0 0 1 2 2v0c0 1.1.9 2 2 2v0a2 2 0 0 0 2-2v0c0-1.1.9-2 2-2h3.17',\n },\n ],\n [\n 'path',\n { d: 'M11 21.95V18a2 2 0 0 0-2-2v0a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05' },\n ],\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ],\n];\n\nexport default Globe2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Globe: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['line', { x1: '2', x2: '22', y1: '12', y2: '12' }],\n [\n 'path',\n {\n d: 'M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z',\n },\n ],\n ],\n];\n\nexport default Globe;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Grab: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M18 11.5V9a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v1.4' }],\n ['path', { d: 'M14 10V8a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v2' }],\n ['path', { d: 'M10 9.9V9a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v5' }],\n ['path', { d: 'M6 14v0a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v0' }],\n [\n 'path',\n {\n d: 'M18 11v0a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-4a8 8 0 0 1-8-8 2 2 0 1 1 4 0',\n },\n ],\n ],\n];\n\nexport default Grab;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst GraduationCap: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M22 10v6M2 10l10-5 10 5-10 5z' }],\n ['path', { d: 'M6 12v5c3 3 9 3 12 0v-5' }],\n ],\n];\n\nexport default GraduationCap;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Grape: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M22 5V2l-5.89 5.89' }],\n ['circle', { cx: '16.6', cy: '15.89', r: '3' }],\n ['circle', { cx: '8.11', cy: '7.4', r: '3' }],\n ['circle', { cx: '12.35', cy: '11.65', r: '3' }],\n ['circle', { cx: '13.91', cy: '5.85', r: '3' }],\n ['circle', { cx: '18.15', cy: '10.09', r: '3' }],\n ['circle', { cx: '6.56', cy: '13.2', r: '3' }],\n ['circle', { cx: '10.8', cy: '17.44', r: '3' }],\n ['circle', { cx: '5', cy: '19', r: '3' }],\n ],\n];\n\nexport default Grape;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Grid: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['line', { x1: '3', x2: '21', y1: '9', y2: '9' }],\n ['line', { x1: '3', x2: '21', y1: '15', y2: '15' }],\n ['line', { x1: '9', x2: '9', y1: '3', y2: '21' }],\n ['line', { x1: '15', x2: '15', y1: '3', y2: '21' }],\n ],\n];\n\nexport default Grid;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst GripHorizontal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '9', r: '1' }],\n ['circle', { cx: '19', cy: '9', r: '1' }],\n ['circle', { cx: '5', cy: '9', r: '1' }],\n ['circle', { cx: '12', cy: '15', r: '1' }],\n ['circle', { cx: '19', cy: '15', r: '1' }],\n ['circle', { cx: '5', cy: '15', r: '1' }],\n ],\n];\n\nexport default GripHorizontal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst GripVertical: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '9', cy: '12', r: '1' }],\n ['circle', { cx: '9', cy: '5', r: '1' }],\n ['circle', { cx: '9', cy: '19', r: '1' }],\n ['circle', { cx: '15', cy: '12', r: '1' }],\n ['circle', { cx: '15', cy: '5', r: '1' }],\n ['circle', { cx: '15', cy: '19', r: '1' }],\n ],\n];\n\nexport default GripVertical;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Grip: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '5', r: '1' }],\n ['circle', { cx: '19', cy: '5', r: '1' }],\n ['circle', { cx: '5', cy: '5', r: '1' }],\n ['circle', { cx: '12', cy: '12', r: '1' }],\n ['circle', { cx: '19', cy: '12', r: '1' }],\n ['circle', { cx: '5', cy: '12', r: '1' }],\n ['circle', { cx: '12', cy: '19', r: '1' }],\n ['circle', { cx: '19', cy: '19', r: '1' }],\n ['circle', { cx: '5', cy: '19', r: '1' }],\n ],\n];\n\nexport default Grip;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Hammer: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'm15 12-8.5 8.5c-.83.83-2.17.83-3 0 0 0 0 0 0 0a2.12 2.12 0 0 1 0-3L12 9',\n },\n ],\n ['path', { d: 'M17.64 15 22 10.64' }],\n [\n 'path',\n {\n d: 'm20.91 11.7-1.25-1.25c-.6-.6-.93-1.4-.93-2.25v-.86L16.01 4.6a5.56 5.56 0 0 0-3.94-1.64H9l.92.82A6.18 6.18 0 0 1 12 8.4v1.56l2 2h2.47l2.26 1.91',\n },\n ],\n ],\n];\n\nexport default Hammer;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst HandMetal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M18 12.5V10a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v1.4' }],\n ['path', { d: 'M14 11V9a2 2 0 1 0-4 0v2' }],\n ['path', { d: 'M10 10.5V5a2 2 0 1 0-4 0v9' }],\n [\n 'path',\n {\n d: 'm7 15-1.76-1.76a2 2 0 0 0-2.83 2.82l3.6 3.6C7.5 21.14 9.2 22 12 22h2a8 8 0 0 0 8-8V7a2 2 0 1 0-4 0v5',\n },\n ],\n ],\n];\n\nexport default HandMetal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Hand: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M18 11V6a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v0' }],\n ['path', { d: 'M14 10V4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v2' }],\n ['path', { d: 'M10 10.5V6a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v8' }],\n [\n 'path',\n {\n d: 'M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15',\n },\n ],\n ],\n];\n\nexport default Hand;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst HardDrive: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '22', x2: '2', y1: '12', y2: '12' }],\n [\n 'path',\n {\n d: 'M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z',\n },\n ],\n ['line', { x1: '6', x2: '6.01', y1: '16', y2: '16' }],\n ['line', { x1: '10', x2: '10.01', y1: '16', y2: '16' }],\n ],\n];\n\nexport default HardDrive;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst HardHat: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M2 18a1 1 0 0 0 1 1h18a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v2z',\n },\n ],\n ['path', { d: 'M10 10V5a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v5' }],\n ['path', { d: 'M4 15v-3a6 6 0 0 1 6-6h0' }],\n ['path', { d: 'M14 6h0a6 6 0 0 1 6 6v3' }],\n ],\n];\n\nexport default HardHat;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Hash: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '4', x2: '20', y1: '9', y2: '9' }],\n ['line', { x1: '4', x2: '20', y1: '15', y2: '15' }],\n ['line', { x1: '10', x2: '8', y1: '3', y2: '21' }],\n ['line', { x1: '16', x2: '14', y1: '3', y2: '21' }],\n ],\n];\n\nexport default Hash;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Haze: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm5.2 6.2 1.4 1.4' }],\n ['path', { d: 'M2 13h2' }],\n ['path', { d: 'M20 13h2' }],\n ['path', { d: 'm17.4 7.6 1.4-1.4' }],\n ['path', { d: 'M22 17H2' }],\n ['path', { d: 'M22 21H2' }],\n ['path', { d: 'M16 13a4 4 0 0 0-8 0' }],\n ['path', { d: 'M12 5V2.5' }],\n ],\n];\n\nexport default Haze;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Heading1: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 12h8' }],\n ['path', { d: 'M4 18V6' }],\n ['path', { d: 'M12 18V6' }],\n ['path', { d: 'm17 12 3-2v8' }],\n ],\n];\n\nexport default Heading1;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Heading2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 12h8' }],\n ['path', { d: 'M4 18V6' }],\n ['path', { d: 'M12 18V6' }],\n ['path', { d: 'M21 18h-4c0-4 4-3 4-6 0-1.5-2-2.5-4-1' }],\n ],\n];\n\nexport default Heading2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Heading3: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 12h8' }],\n ['path', { d: 'M4 18V6' }],\n ['path', { d: 'M12 18V6' }],\n ['path', { d: 'M17.5 10.5c1.7-1 3.5 0 3.5 1.5a2 2 0 0 1-2 2' }],\n ['path', { d: 'M17 17.5c2 1.5 4 .3 4-1.5a2 2 0 0 0-2-2' }],\n ],\n];\n\nexport default Heading3;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Heading4: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 12h8' }],\n ['path', { d: 'M4 18V6' }],\n ['path', { d: 'M12 18V6' }],\n ['path', { d: 'M17 10v4h4' }],\n ['path', { d: 'M21 10v8' }],\n ],\n];\n\nexport default Heading4;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Heading5: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 12h8' }],\n ['path', { d: 'M4 18V6' }],\n ['path', { d: 'M12 18V6' }],\n ['path', { d: 'M17 13v-3h4' }],\n [\n 'path',\n { d: 'M17 17.7c.4.2.8.3 1.3.3 1.5 0 2.7-1.1 2.7-2.5S19.8 13 18.3 13H17' },\n ],\n ],\n];\n\nexport default Heading5;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Heading6: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 12h8' }],\n ['path', { d: 'M4 18V6' }],\n ['path', { d: 'M12 18V6' }],\n ['circle', { cx: '19', cy: '16', r: '2' }],\n ['path', { d: 'M20 10c-2 2-3 3.5-3 6' }],\n ],\n];\n\nexport default Heading6;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Heading: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M6 12h12' }],\n ['path', { d: 'M6 20V4' }],\n ['path', { d: 'M18 20V4' }],\n ],\n];\n\nexport default Heading;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Headphones: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M3 14h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-7a9 9 0 0 1 18 0v7a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3',\n },\n ],\n ],\n];\n\nexport default Headphones;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst HeartCrack: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z',\n },\n ],\n ['path', { d: 'm12 13-1-1 2-2-3-3 2-2' }],\n ],\n];\n\nexport default HeartCrack;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst HeartHandshake: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z',\n },\n ],\n [\n 'path',\n {\n d: 'M12 5 9.04 7.96a2.17 2.17 0 0 0 0 3.08v0c.82.82 2.13.85 3 .07l2.07-1.9a2.82 2.82 0 0 1 3.79 0l2.96 2.66',\n },\n ],\n ['path', { d: 'm18 15-2-2' }],\n ['path', { d: 'm15 18-2-2' }],\n ],\n];\n\nexport default HeartHandshake;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst HeartOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '2', y1: '2', x2: '22', y2: '22' }],\n [\n 'path',\n {\n d: 'M16.5 16.5 12 21l-7-7c-1.5-1.45-3-3.2-3-5.5a5.5 5.5 0 0 1 2.14-4.35',\n },\n ],\n [\n 'path',\n {\n d: 'M8.76 3.1c1.15.22 2.13.78 3.24 1.9 1.5-1.5 2.74-2 4.5-2A5.5 5.5 0 0 1 22 8.5c0 2.12-1.3 3.78-2.67 5.17',\n },\n ],\n ],\n];\n\nexport default HeartOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst HeartPulse: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z',\n },\n ],\n ['path', { d: 'M3.22 12H9.5l.5-1 2 4.5 2-7 1.5 3.5h5.27' }],\n ],\n];\n\nexport default HeartPulse;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Heart: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z',\n },\n ],\n ],\n];\n\nexport default Heart;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst HelpCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3' }],\n ['line', { x1: '12', x2: '12.01', y1: '17', y2: '17' }],\n ],\n];\n\nexport default HelpCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst HelpingHand: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'm3 15 5.12-5.12A3 3 0 0 1 10.24 9H13a2 2 0 1 1 0 4h-2.5m4-.68 4.17-4.89a1.88 1.88 0 0 1 2.92 2.36l-4.2 5.94A3 3 0 0 1 14.96 17H9.83a2 2 0 0 0-1.42.59L7 19',\n },\n ],\n ['path', { d: 'm2 14 6 6' }],\n ],\n];\n\nexport default HelpingHand;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Hexagon: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z',\n },\n ],\n ],\n];\n\nexport default Hexagon;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Highlighter: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm9 11-6 6v3h9l3-3' }],\n [\n 'path',\n { d: 'm22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4' },\n ],\n ],\n];\n\nexport default Highlighter;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst History: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 3v5h5' }],\n ['path', { d: 'M3.05 13A9 9 0 1 0 6 5.3L3 8' }],\n ['path', { d: 'M12 7v5l4 2' }],\n ],\n];\n\nexport default History;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Home: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z' }],\n ['polyline', { points: '9 22 9 12 15 12 15 22' }],\n ],\n];\n\nexport default Home;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst HopOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M17.5 5.5C19 7 20.5 9 21 11c-1.323.265-2.646.39-4.118.226' },\n ],\n ['path', { d: 'M5.5 17.5C7 19 9 20.5 11 21c.5-2.5.5-5-1-8.5' }],\n ['path', { d: 'M17.5 17.5c-2.5 0-4 0-6-1' }],\n ['path', { d: 'M20 11.5c1 1.5 2 3.5 2 4.5' }],\n ['path', { d: 'M11.5 20c1.5 1 3.5 2 4.5 2 .5-1.5 0-3-.5-4.5' }],\n ['path', { d: 'M22 22c-2 0-3.5-.5-5.5-1.5' }],\n [\n 'path',\n {\n d: 'M4.783 4.782C1.073 8.492 1 14.5 5 18c1-1 2-4.5 1.5-6.5 1.5 1 4 1 5.5.5M8.227 2.57C11.578 1.335 15.453 2.089 18 5c-.88.88-3.7 1.761-5.726 1.618',\n },\n ],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default HopOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Hop: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M17.5 5.5C19 7 20.5 9 21 11c-2.5.5-5 .5-8.5-1' }],\n ['path', { d: 'M5.5 17.5C7 19 9 20.5 11 21c.5-2.5.5-5-1-8.5' }],\n ['path', { d: 'M16.5 11.5c1 2 1 3.5 1 6-2.5 0-4 0-6-1' }],\n ['path', { d: 'M20 11.5c1 1.5 2 3.5 2 4.5-1.5.5-3 0-4.5-.5' }],\n ['path', { d: 'M11.5 20c1.5 1 3.5 2 4.5 2 .5-1.5 0-3-.5-4.5' }],\n ['path', { d: 'M20.5 16.5c1 2 1.5 3.5 1.5 5.5-2 0-3.5-.5-5.5-1.5' }],\n [\n 'path',\n {\n d: 'M4.783 4.782C8.493 1.072 14.5 1 18 5c-1 1-4.5 2-6.5 1.5 1 1.5 1 4 .5 5.5-1.5.5-4 .5-5.5-.5C7 13.5 6 17 5 18c-4-3.5-3.927-9.508-.217-13.218Z',\n },\n ],\n ['path', { d: 'M4.5 4.5 3 3c-.184-.185-.184-.816 0-1' }],\n ],\n];\n\nexport default Hop;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Hotel: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M18 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2Z',\n },\n ],\n ['path', { d: 'm9 16 .348-.24c1.465-1.013 3.84-1.013 5.304 0L15 16' }],\n ['path', { d: 'M8 7h.01' }],\n ['path', { d: 'M16 7h.01' }],\n ['path', { d: 'M12 7h.01' }],\n ['path', { d: 'M12 11h.01' }],\n ['path', { d: 'M16 11h.01' }],\n ['path', { d: 'M8 11h.01' }],\n ['path', { d: 'M10 22v-6.5m4 0V22' }],\n ],\n];\n\nexport default Hotel;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Hourglass: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M5 22h14' }],\n ['path', { d: 'M5 2h14' }],\n [\n 'path',\n {\n d: 'M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22',\n },\n ],\n [\n 'path',\n {\n d: 'M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2',\n },\n ],\n ],\n];\n\nexport default Hourglass;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst IceCream2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M12 17c5 0 8-2.69 8-6H4c0 3.31 3 6 8 6Zm-4 4h8m-4-3v3M5.14 11a3.5 3.5 0 1 1 6.71 0',\n },\n ],\n ['path', { d: 'M12.14 11a3.5 3.5 0 1 1 6.71 0' }],\n ['path', { d: 'M15.5 6.5a3.5 3.5 0 1 0-7 0' }],\n ],\n];\n\nexport default IceCream2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst IceCream: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm7 11 4.08 10.35a1 1 0 0 0 1.84 0L17 11' }],\n ['path', { d: 'M17 7A5 5 0 0 0 7 7' }],\n ['path', { d: 'M17 7a2 2 0 0 1 0 4H7a2 2 0 0 1 0-4' }],\n ],\n];\n\nexport default IceCream;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ImageMinus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M21 9v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7' }],\n ['line', { x1: '16', x2: '22', y1: '5', y2: '5' }],\n ['circle', { cx: '9', cy: '9', r: '2' }],\n ['path', { d: 'm21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21' }],\n ],\n];\n\nexport default ImageMinus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ImageOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ['path', { d: 'M10.41 10.41a2 2 0 1 1-2.83-2.83' }],\n ['line', { x1: '13.5', x2: '6', y1: '13.5', y2: '21' }],\n ['line', { x1: '18', x2: '21', y1: '12', y2: '15' }],\n [\n 'path',\n {\n d: 'M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59',\n },\n ],\n ['path', { d: 'M21 15V5a2 2 0 0 0-2-2H9' }],\n ],\n];\n\nexport default ImageOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ImagePlus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7' }],\n ['line', { x1: '16', x2: '22', y1: '5', y2: '5' }],\n ['line', { x1: '19', x2: '19', y1: '2', y2: '8' }],\n ['circle', { cx: '9', cy: '9', r: '2' }],\n ['path', { d: 'm21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21' }],\n ],\n];\n\nexport default ImagePlus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Image: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['circle', { cx: '9', cy: '9', r: '2' }],\n ['path', { d: 'm21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21' }],\n ],\n];\n\nexport default Image;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Import: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 3v12' }],\n ['path', { d: 'm8 11 4 4 4-4' }],\n [\n 'path',\n {\n d: 'M8 5H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-4',\n },\n ],\n ],\n];\n\nexport default Import;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Inbox: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '22 12 16 12 14 15 10 15 8 12 2 12' }],\n [\n 'path',\n {\n d: 'M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z',\n },\n ],\n ],\n];\n\nexport default Inbox;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Indent: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '3 8 7 12 3 16' }],\n ['line', { x1: '21', x2: '11', y1: '12', y2: '12' }],\n ['line', { x1: '21', x2: '11', y1: '6', y2: '6' }],\n ['line', { x1: '21', x2: '11', y1: '18', y2: '18' }],\n ],\n];\n\nexport default Indent;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst IndianRupee: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M6 3h12' }],\n ['path', { d: 'M6 8h12' }],\n ['path', { d: 'm6 13 8.5 8' }],\n ['path', { d: 'M6 13h3' }],\n ['path', { d: 'M9 13c6.667 0 6.667-10 0-10' }],\n ],\n];\n\nexport default IndianRupee;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Infinity: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M12 12c-2-2.67-4-4-6-4a4 4 0 1 0 0 8c2 0 4-1.33 6-4Zm0 0c2 2.67 4 4 6 4a4 4 0 0 0 0-8c-2 0-4 1.33-6 4Z',\n },\n ],\n ],\n];\n\nexport default Infinity;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Info: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['line', { x1: '12', x2: '12', y1: '16', y2: '12' }],\n ['line', { x1: '12', x2: '12.01', y1: '8', y2: '8' }],\n ],\n];\n\nexport default Info;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Inspect: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M21 11V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h6' },\n ],\n ['path', { d: 'm12 12 4 10 1.7-4.3L22 16Z' }],\n ],\n];\n\nexport default Inspect;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Instagram: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '20', x: '2', y: '2', rx: '5', ry: '5' }],\n ['path', { d: 'M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z' }],\n ['line', { x1: '17.5', x2: '17.51', y1: '6.5', y2: '6.5' }],\n ],\n];\n\nexport default Instagram;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Italic: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '19', x2: '10', y1: '4', y2: '4' }],\n ['line', { x1: '14', x2: '5', y1: '20', y2: '20' }],\n ['line', { x1: '15', x2: '9', y1: '4', y2: '20' }],\n ],\n];\n\nexport default Italic;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst IterationCcw: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M20 10c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8h8' }],\n ['polyline', { points: '16 14 20 18 16 22' }],\n ],\n];\n\nexport default IterationCcw;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst IterationCw: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 10c0-4.4 3.6-8 8-8s8 3.6 8 8-3.6 8-8 8H4' }],\n ['polyline', { points: '8 22 4 18 8 14' }],\n ],\n];\n\nexport default IterationCw;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst JapaneseYen: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 9.5V21m0-11.5L6 3m6 6.5L18 3' }],\n ['path', { d: 'M6 15h12' }],\n ['path', { d: 'M6 11h12' }],\n ],\n];\n\nexport default JapaneseYen;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Joystick: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M21 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-2Z',\n },\n ],\n ['path', { d: 'M6 15v-2' }],\n ['path', { d: 'M12 15V9' }],\n ['circle', { cx: '12', cy: '6', r: '3' }],\n ],\n];\n\nexport default Joystick;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Key: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '7.5', cy: '15.5', r: '5.5' }],\n ['path', { d: 'm21 2-9.6 9.6' }],\n ['path', { d: 'm15.5 7.5 3 3L22 7l-3-3' }],\n ],\n];\n\nexport default Key;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Keyboard: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '16', x: '2', y: '4', rx: '2', ry: '2' }],\n ['path', { d: 'M6 8h.001' }],\n ['path', { d: 'M10 8h.001' }],\n ['path', { d: 'M14 8h.001' }],\n ['path', { d: 'M18 8h.001' }],\n ['path', { d: 'M8 12h.001' }],\n ['path', { d: 'M12 12h.001' }],\n ['path', { d: 'M16 12h.001' }],\n ['path', { d: 'M7 16h10' }],\n ],\n];\n\nexport default Keyboard;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst LampCeiling: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 2v5' }],\n ['path', { d: 'M6 7h12l4 9H2l4-9Z' }],\n ['path', { d: 'M9.17 16a3 3 0 1 0 5.66 0' }],\n ],\n];\n\nexport default LampCeiling;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst LampDesk: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm14 5-3 3 2 7 8-8-7-2Z' }],\n ['path', { d: 'm14 5-3 3-3-3 3-3 3 3Z' }],\n ['path', { d: 'M9.5 6.5 4 12l3 6' }],\n ['path', { d: 'M3 22v-2c0-1.1.9-2 2-2h4a2 2 0 0 1 2 2v2H3Z' }],\n ],\n];\n\nexport default LampDesk;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst LampFloor: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M9 2h6l3 7H6l3-7Z' }],\n ['path', { d: 'M12 9v13' }],\n ['path', { d: 'M9 22h6' }],\n ],\n];\n\nexport default LampFloor;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst LampWallDown: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M11 13h6l3 7H8l3-7Z' }],\n ['path', { d: 'M14 13V8a2 2 0 0 0-2-2H8' }],\n ['path', { d: 'M4 9h2a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2H4v6Z' }],\n ],\n];\n\nexport default LampWallDown;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst LampWallUp: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M11 4h6l3 7H8l3-7Z' }],\n ['path', { d: 'M14 11v5a2 2 0 0 1-2 2H8' }],\n ['path', { d: 'M4 15h2a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H4v-6Z' }],\n ],\n];\n\nexport default LampWallUp;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Lamp: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M8 2h8l4 10H4L8 2Z' }],\n ['path', { d: 'M12 12v6' }],\n ['path', { d: 'M8 22v-2c0-1.1.9-2 2-2h4a2 2 0 0 1 2 2v2H8Z' }],\n ],\n];\n\nexport default Lamp;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Landmark: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '3', x2: '21', y1: '22', y2: '22' }],\n ['line', { x1: '6', x2: '6', y1: '18', y2: '11' }],\n ['line', { x1: '10', x2: '10', y1: '18', y2: '11' }],\n ['line', { x1: '14', x2: '14', y1: '18', y2: '11' }],\n ['line', { x1: '18', x2: '18', y1: '18', y2: '11' }],\n ['polygon', { points: '12 2 20 7 4 7' }],\n ],\n];\n\nexport default Landmark;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Languages: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm5 8 6 6' }],\n ['path', { d: 'm4 14 6-6 2-3' }],\n ['path', { d: 'M2 5h12' }],\n ['path', { d: 'M7 2h1' }],\n ['path', { d: 'm22 22-5-10-5 10' }],\n ['path', { d: 'M14 18h6' }],\n ],\n];\n\nexport default Languages;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Laptop2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '12', x: '3', y: '4', rx: '2', ry: '2' }],\n ['line', { x1: '2', x2: '22', y1: '20', y2: '20' }],\n ],\n];\n\nexport default Laptop2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Laptop: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M20 16V7a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v9m16 0H4m16 0 1.28 2.55a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45L4 16',\n },\n ],\n ],\n];\n\nexport default Laptop;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst LassoSelect: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M7 22a5 5 0 0 1-2-4' }],\n ['path', { d: 'M7 16.93c.96.43 1.96.74 2.99.91' }],\n [\n 'path',\n {\n d: 'M3.34 14A6.8 6.8 0 0 1 2 10c0-4.42 4.48-8 10-8s10 3.58 10 8a7.19 7.19 0 0 1-.33 2',\n },\n ],\n ['path', { d: 'M5 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z' }],\n [\n 'path',\n {\n d: 'M14.33 22h-.09a.35.35 0 0 1-.24-.32v-10a.34.34 0 0 1 .33-.34c.08 0 .15.03.21.08l7.34 6a.33.33 0 0 1-.21.59h-4.49l-2.57 3.85a.35.35 0 0 1-.28.14v0z',\n },\n ],\n ],\n];\n\nexport default LassoSelect;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Lasso: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M7 22a5 5 0 0 1-2-4' }],\n [\n 'path',\n {\n d: 'M3.3 14A6.8 6.8 0 0 1 2 10c0-4.4 4.5-8 10-8s10 3.6 10 8-4.5 8-10 8a12 12 0 0 1-5-1',\n },\n ],\n ['path', { d: 'M5 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z' }],\n ],\n];\n\nexport default Lasso;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Laugh: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M18 13a6 6 0 0 1-6 5 6 6 0 0 1-6-5h12Z' }],\n ['line', { x1: '9', x2: '9.01', y1: '9', y2: '9' }],\n ['line', { x1: '15', x2: '15.01', y1: '9', y2: '9' }],\n ],\n];\n\nexport default Laugh;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Layers: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polygon', { points: '12 2 2 7 12 12 22 7 12 2' }],\n ['polyline', { points: '2 17 12 22 22 17' }],\n ['polyline', { points: '2 12 12 17 22 12' }],\n ],\n];\n\nexport default Layers;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst LayoutDashboard: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '7', height: '9', x: '3', y: '3' }],\n ['rect', { width: '7', height: '5', x: '14', y: '3' }],\n ['rect', { width: '7', height: '9', x: '14', y: '12' }],\n ['rect', { width: '7', height: '5', x: '3', y: '16' }],\n ],\n];\n\nexport default LayoutDashboard;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst LayoutGrid: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '7', height: '7', x: '3', y: '3' }],\n ['rect', { width: '7', height: '7', x: '14', y: '3' }],\n ['rect', { width: '7', height: '7', x: '14', y: '14' }],\n ['rect', { width: '7', height: '7', x: '3', y: '14' }],\n ],\n];\n\nexport default LayoutGrid;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst LayoutList: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '7', height: '7', x: '3', y: '14' }],\n ['rect', { width: '7', height: '7', x: '3', y: '3' }],\n ['line', { x1: '14', x2: '21', y1: '4', y2: '4' }],\n ['line', { x1: '14', x2: '21', y1: '9', y2: '9' }],\n ['line', { x1: '14', x2: '21', y1: '15', y2: '15' }],\n ['line', { x1: '14', x2: '21', y1: '20', y2: '20' }],\n ],\n];\n\nexport default LayoutList;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst LayoutTemplate: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M21 3H3v7h18V3z' }],\n ['path', { d: 'M21 14h-5v7h5v-7z' }],\n ['path', { d: 'M12 14H3v7h9v-7z' }],\n ],\n];\n\nexport default LayoutTemplate;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Layout: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['line', { x1: '3', x2: '21', y1: '9', y2: '9' }],\n ['line', { x1: '9', x2: '9', y1: '21', y2: '9' }],\n ],\n];\n\nexport default Layout;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Leaf: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z',\n },\n ],\n ['path', { d: 'M2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12' }],\n ],\n];\n\nexport default Leaf;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Library: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm16 6 4 14' }],\n ['path', { d: 'M12 6v14' }],\n ['path', { d: 'M8 8v12' }],\n ['path', { d: 'M4 4v16' }],\n ],\n];\n\nexport default Library;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst LifeBuoy: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['circle', { cx: '12', cy: '12', r: '4' }],\n ['line', { x1: '4.93', x2: '9.17', y1: '4.93', y2: '9.17' }],\n ['line', { x1: '14.83', x2: '19.07', y1: '14.83', y2: '19.07' }],\n ['line', { x1: '14.83', x2: '19.07', y1: '9.17', y2: '4.93' }],\n ['line', { x1: '14.83', x2: '18.36', y1: '9.17', y2: '5.64' }],\n ['line', { x1: '4.93', x2: '9.17', y1: '19.07', y2: '14.83' }],\n ],\n];\n\nexport default LifeBuoy;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst LightbulbOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M9 18h6' }],\n ['path', { d: 'M10 22h4' }],\n ['path', { d: 'm2 2 20 20' }],\n ['path', { d: 'M9 2.804A6 6 0 0 1 18 8a4.65 4.65 0 0 1-1.03 3' }],\n [\n 'path',\n {\n d: 'M8.91 14a4.61 4.61 0 0 0-1.41-2.5C6.23 10.23 6 9 6 8a6 6 0 0 1 .084-1',\n },\n ],\n ],\n];\n\nexport default LightbulbOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Lightbulb: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '9', x2: '15', y1: '18', y2: '18' }],\n ['line', { x1: '10', x2: '14', y1: '22', y2: '22' }],\n [\n 'path',\n {\n d: 'M15.09 14c.18-.98.65-1.74 1.41-2.5A4.65 4.65 0 0 0 18 8 6 6 0 0 0 6 8c0 1 .23 2.23 1.5 3.5A4.61 4.61 0 0 1 8.91 14',\n },\n ],\n ],\n];\n\nexport default Lightbulb;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst LineChart: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 3v18h18' }],\n ['path', { d: 'm19 9-5 5-4-4-3 3' }],\n ],\n];\n\nexport default LineChart;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Link2Off: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M9 17H7A5 5 0 0 1 7 7' }],\n ['path', { d: 'M15 7h2a5 5 0 0 1 4 8' }],\n ['line', { x1: '8', x2: '12', y1: '12', y2: '12' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default Link2Off;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Link2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M9 17H7A5 5 0 0 1 7 7h2' }],\n ['path', { d: 'M15 7h2a5 5 0 1 1 0 10h-2' }],\n ['line', { x1: '8', x2: '16', y1: '12', y2: '12' }],\n ],\n];\n\nexport default Link2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Link: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71' },\n ],\n [\n 'path',\n { d: 'M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71' },\n ],\n ],\n];\n\nexport default Link;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Linkedin: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z',\n },\n ],\n ['rect', { width: '4', height: '12', x: '2', y: '9' }],\n ['circle', { cx: '4', cy: '4', r: '2' }],\n ],\n];\n\nexport default Linkedin;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ListChecks: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '10', x2: '21', y1: '6', y2: '6' }],\n ['line', { x1: '10', x2: '21', y1: '12', y2: '12' }],\n ['line', { x1: '10', x2: '21', y1: '18', y2: '18' }],\n ['polyline', { points: '3 6 4 7 6 5' }],\n ['polyline', { points: '3 12 4 13 6 11' }],\n ['polyline', { points: '3 18 4 19 6 17' }],\n ],\n];\n\nexport default ListChecks;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ListEnd: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M16 12H3' }],\n ['path', { d: 'M16 6H3' }],\n ['path', { d: 'M10 18H3' }],\n ['path', { d: 'M21 6v10a2 2 0 0 1-2 2h-4' }],\n ['path', { d: 'm16 16-2 2 2 2' }],\n ],\n];\n\nexport default ListEnd;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ListMinus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M11 12H3' }],\n ['path', { d: 'M16 6H3' }],\n ['path', { d: 'M16 18H3' }],\n ['path', { d: 'M21 12h-6' }],\n ],\n];\n\nexport default ListMinus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ListMusic: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M21 15V6' }],\n ['path', { d: 'M18.5 18a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z' }],\n ['path', { d: 'M12 12H3' }],\n ['path', { d: 'M16 6H3' }],\n ['path', { d: 'M12 18H3' }],\n ],\n];\n\nexport default ListMusic;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ListOrdered: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '10', x2: '21', y1: '6', y2: '6' }],\n ['line', { x1: '10', x2: '21', y1: '12', y2: '12' }],\n ['line', { x1: '10', x2: '21', y1: '18', y2: '18' }],\n ['path', { d: 'M4 6h1v4' }],\n ['path', { d: 'M4 10h2' }],\n ['path', { d: 'M6 18H4c0-1 2-2 2-3s-1-1.5-2-1' }],\n ],\n];\n\nexport default ListOrdered;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ListPlus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M11 12H3' }],\n ['path', { d: 'M16 6H3' }],\n ['path', { d: 'M16 18H3' }],\n ['path', { d: 'M18 9v6' }],\n ['path', { d: 'M21 12h-6' }],\n ],\n];\n\nexport default ListPlus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ListStart: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M16 12H3' }],\n ['path', { d: 'M16 18H3' }],\n ['path', { d: 'M10 6H3' }],\n ['path', { d: 'M21 18V8a2 2 0 0 0-2-2h-5' }],\n ['path', { d: 'm16 8-2-2 2-2' }],\n ],\n];\n\nexport default ListStart;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ListTree: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M21 12h-8' }],\n ['path', { d: 'M21 6H8' }],\n ['path', { d: 'M21 18h-8' }],\n ['path', { d: 'M3 6v4c0 1.1.9 2 2 2h3' }],\n ['path', { d: 'M3 10v6c0 1.1.9 2 2 2h3' }],\n ],\n];\n\nexport default ListTree;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ListVideo: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 12H3' }],\n ['path', { d: 'M16 6H3' }],\n ['path', { d: 'M12 18H3' }],\n ['path', { d: 'm16 12 5 3-5 3v-6Z' }],\n ],\n];\n\nexport default ListVideo;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ListX: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M11 12H3' }],\n ['path', { d: 'M16 6H3' }],\n ['path', { d: 'M16 18H3' }],\n ['path', { d: 'm19 10-4 4' }],\n ['path', { d: 'm15 10 4 4' }],\n ],\n];\n\nexport default ListX;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst List: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '8', x2: '21', y1: '6', y2: '6' }],\n ['line', { x1: '8', x2: '21', y1: '12', y2: '12' }],\n ['line', { x1: '8', x2: '21', y1: '18', y2: '18' }],\n ['line', { x1: '3', x2: '3.01', y1: '6', y2: '6' }],\n ['line', { x1: '3', x2: '3.01', y1: '12', y2: '12' }],\n ['line', { x1: '3', x2: '3.01', y1: '18', y2: '18' }],\n ],\n];\n\nexport default List;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Loader2: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M21 12a9 9 0 1 1-6.219-8.56' }]],\n];\n\nexport default Loader2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Loader: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '12', x2: '12', y1: '2', y2: '6' }],\n ['line', { x1: '12', x2: '12', y1: '18', y2: '22' }],\n ['line', { x1: '4.93', x2: '7.76', y1: '4.93', y2: '7.76' }],\n ['line', { x1: '16.24', x2: '19.07', y1: '16.24', y2: '19.07' }],\n ['line', { x1: '2', x2: '6', y1: '12', y2: '12' }],\n ['line', { x1: '18', x2: '22', y1: '12', y2: '12' }],\n ['line', { x1: '4.93', x2: '7.76', y1: '19.07', y2: '16.24' }],\n ['line', { x1: '16.24', x2: '19.07', y1: '7.76', y2: '4.93' }],\n ],\n];\n\nexport default Loader;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst LocateFixed: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '2', x2: '5', y1: '12', y2: '12' }],\n ['line', { x1: '19', x2: '22', y1: '12', y2: '12' }],\n ['line', { x1: '12', x2: '12', y1: '2', y2: '5' }],\n ['line', { x1: '12', x2: '12', y1: '19', y2: '22' }],\n ['circle', { cx: '12', cy: '12', r: '7' }],\n ['circle', { cx: '12', cy: '12', r: '3' }],\n ],\n];\n\nexport default LocateFixed;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst LocateOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '2', x2: '5', y1: '12', y2: '12' }],\n ['line', { x1: '19', x2: '22', y1: '12', y2: '12' }],\n ['line', { x1: '12', x2: '12', y1: '2', y2: '5' }],\n ['line', { x1: '12', x2: '12', y1: '19', y2: '22' }],\n [\n 'path',\n {\n d: 'M7.11 7.11C5.83 8.39 5 10.1 5 12c0 3.87 3.13 7 7 7 1.9 0 3.61-.83 4.89-2.11',\n },\n ],\n [\n 'path',\n {\n d: 'M18.71 13.96c.19-.63.29-1.29.29-1.96 0-3.87-3.13-7-7-7-.67 0-1.33.1-1.96.29',\n },\n ],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default LocateOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Locate: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '2', x2: '5', y1: '12', y2: '12' }],\n ['line', { x1: '19', x2: '22', y1: '12', y2: '12' }],\n ['line', { x1: '12', x2: '12', y1: '2', y2: '5' }],\n ['line', { x1: '12', x2: '12', y1: '19', y2: '22' }],\n ['circle', { cx: '12', cy: '12', r: '7' }],\n ],\n];\n\nexport default Locate;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Lock: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '11', x: '3', y: '11', rx: '2', ry: '2' }],\n ['path', { d: 'M7 11V7a5 5 0 0 1 10 0v4' }],\n ],\n];\n\nexport default Lock;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst LogIn: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4' }],\n ['polyline', { points: '10 17 15 12 10 7' }],\n ['line', { x1: '15', x2: '3', y1: '12', y2: '12' }],\n ],\n];\n\nexport default LogIn;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst LogOut: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4' }],\n ['polyline', { points: '16 17 21 12 16 7' }],\n ['line', { x1: '21', x2: '9', y1: '12', y2: '12' }],\n ],\n];\n\nexport default LogOut;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Luggage: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M6 20h0a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h0',\n },\n ],\n ['path', { d: 'M8 18V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v14' }],\n ['path', { d: 'M10 20h4' }],\n ['circle', { cx: '16', cy: '20', r: '2' }],\n ['circle', { cx: '8', cy: '20', r: '2' }],\n ],\n];\n\nexport default Luggage;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Magnet: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'm6 15-4-4 6.75-6.77a7.79 7.79 0 0 1 11 11L13 22l-4-4 6.39-6.36a2.14 2.14 0 0 0-3-3L6 15',\n },\n ],\n ['path', { d: 'm5 8 4 4' }],\n ['path', { d: 'm12 15 4 4' }],\n ],\n];\n\nexport default Magnet;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MailCheck: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8' },\n ],\n ['path', { d: 'm22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7' }],\n ['path', { d: 'm16 19 2 2 4-4' }],\n ],\n];\n\nexport default MailCheck;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MailMinus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M22 15V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8' },\n ],\n ['path', { d: 'm22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7' }],\n ['path', { d: 'M16 19h6' }],\n ],\n];\n\nexport default MailMinus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MailOpen: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M21.2 8.4c.5.38.8.97.8 1.6v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V10a2 2 0 0 1 .8-1.6l8-6a2 2 0 0 1 2.4 0l8 6Z',\n },\n ],\n ['path', { d: 'm22 10-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 10' }],\n ],\n];\n\nexport default MailOpen;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MailPlus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8' },\n ],\n ['path', { d: 'm22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7' }],\n ['path', { d: 'M19 16v6' }],\n ['path', { d: 'M16 19h6' }],\n ],\n];\n\nexport default MailPlus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MailQuestion: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M22 10.5V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h12.5' },\n ],\n ['path', { d: 'm22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7' }],\n [\n 'path',\n {\n d: 'M18 15.28c.2-.4.5-.8.9-1a2.1 2.1 0 0 1 2.6.4c.3.4.5.8.5 1.3 0 1.3-2 2-2 2',\n },\n ],\n ['path', { d: 'M20 22v.01' }],\n ],\n];\n\nexport default MailQuestion;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MailSearch: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M22 12.5V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h7.5' },\n ],\n ['path', { d: 'm22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7' }],\n ['path', { d: 'M18 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6v0Z' }],\n ['circle', { cx: '18', cy: '18', r: '3' }],\n ['path', { d: 'm22 22-1.5-1.5' }],\n ],\n];\n\nexport default MailSearch;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MailWarning: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M22 10.5V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h12.5' },\n ],\n ['path', { d: 'm22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7' }],\n ['path', { d: 'M20 14v4' }],\n ['path', { d: 'M20 22v.01' }],\n ],\n];\n\nexport default MailWarning;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MailX: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h9' },\n ],\n ['path', { d: 'm22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7' }],\n ['path', { d: 'm17 17 4 4' }],\n ['path', { d: 'm21 17-4 4' }],\n ],\n];\n\nexport default MailX;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Mail: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '16', x: '2', y: '4', rx: '2' }],\n ['path', { d: 'm22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7' }],\n ],\n];\n\nexport default Mail;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Mailbox: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M22 17a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9.5C2 7 4 5 6.5 5H18c2.2 0 4 1.8 4 4v8Z',\n },\n ],\n ['polyline', { points: '15,9 18,9 18,11' }],\n ['path', { d: 'M6.5 5C9 5 11 7 11 9.5V17a2 2 0 0 1-2 2v0' }],\n ['line', { x1: '6', x2: '7', y1: '10', y2: '10' }],\n ],\n];\n\nexport default Mailbox;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Mails: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '16', height: '13', x: '6', y: '4', rx: '2' }],\n ['path', { d: 'm22 7-7.1 3.78c-.57.3-1.23.3-1.8 0L6 7' }],\n ['path', { d: 'M2 8v11c0 1.1.9 2 2 2h14' }],\n ],\n];\n\nexport default Mails;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MapPinOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M5.43 5.43A8.06 8.06 0 0 0 4 10c0 6 8 12 8 12a29.94 29.94 0 0 0 5-5',\n },\n ],\n [\n 'path',\n {\n d: 'M19.18 13.52A8.66 8.66 0 0 0 20 10a8 8 0 0 0-8-8 7.88 7.88 0 0 0-3.52.82',\n },\n ],\n [\n 'path',\n {\n d: 'M9.13 9.13A2.78 2.78 0 0 0 9 10a3 3 0 0 0 3 3 2.78 2.78 0 0 0 .87-.13',\n },\n ],\n ['path', { d: 'M14.9 9.25a3 3 0 0 0-2.15-2.16' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default MapPinOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MapPin: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z' }],\n ['circle', { cx: '12', cy: '10', r: '3' }],\n ],\n];\n\nexport default MapPin;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Map: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polygon', { points: '3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21' }],\n ['line', { x1: '9', x2: '9', y1: '3', y2: '18' }],\n ['line', { x1: '15', x2: '15', y1: '6', y2: '21' }],\n ],\n];\n\nexport default Map;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Martini: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M8 22h8' }],\n ['path', { d: 'M12 11v11' }],\n ['path', { d: 'm19 3-7 8-7-8Z' }],\n ],\n];\n\nexport default Martini;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Maximize2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '15 3 21 3 21 9' }],\n ['polyline', { points: '9 21 3 21 3 15' }],\n ['line', { x1: '21', x2: '14', y1: '3', y2: '10' }],\n ['line', { x1: '3', x2: '10', y1: '21', y2: '14' }],\n ],\n];\n\nexport default Maximize2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Maximize: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M8 3H5a2 2 0 0 0-2 2v3' }],\n ['path', { d: 'M21 8V5a2 2 0 0 0-2-2h-3' }],\n ['path', { d: 'M3 16v3a2 2 0 0 0 2 2h3' }],\n ['path', { d: 'M16 21h3a2 2 0 0 0 2-2v-3' }],\n ],\n];\n\nexport default Maximize;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Medal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M7.21 15 2.66 7.14a2 2 0 0 1 .13-2.2L4.4 2.8A2 2 0 0 1 6 2h12a2 2 0 0 1 1.6.8l1.6 2.14a2 2 0 0 1 .14 2.2L16.79 15',\n },\n ],\n ['path', { d: 'M11 12 5.12 2.2' }],\n ['path', { d: 'm13 12 5.88-9.8' }],\n ['path', { d: 'M8 7h8' }],\n ['circle', { cx: '12', cy: '17', r: '5' }],\n ['path', { d: 'M12 18v-2h-.5' }],\n ],\n];\n\nexport default Medal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MegaphoneOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M9.26 9.26 3 11v3l14.14 3.14' }],\n ['path', { d: 'M21 15.34V6l-7.31 2.03' }],\n ['path', { d: 'M11.6 16.8a3 3 0 1 1-5.8-1.6' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default MegaphoneOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Megaphone: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm3 11 18-5v12L3 14v-3z' }],\n ['path', { d: 'M11.6 16.8a3 3 0 1 1-5.8-1.6' }],\n ],\n];\n\nexport default Megaphone;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Meh: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['line', { x1: '8', x2: '16', y1: '15', y2: '15' }],\n ['line', { x1: '9', x2: '9.01', y1: '9', y2: '9' }],\n ['line', { x1: '15', x2: '15.01', y1: '9', y2: '9' }],\n ],\n];\n\nexport default Meh;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Menu: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '4', x2: '20', y1: '12', y2: '12' }],\n ['line', { x1: '4', x2: '20', y1: '6', y2: '6' }],\n ['line', { x1: '4', x2: '20', y1: '18', y2: '18' }],\n ],\n];\n\nexport default Menu;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MessageCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'm3 21 1.9-5.7a8.5 8.5 0 1 1 3.8 3.8z' }]],\n];\n\nexport default MessageCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MessageSquareDashed: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 6V5c0-1.1.9-2 2-2h2' }],\n ['path', { d: 'M11 3h3' }],\n ['path', { d: 'M18 3h1c1.1 0 2 .9 2 2' }],\n ['path', { d: 'M21 9v2' }],\n ['path', { d: 'M21 15c0 1.1-.9 2-2 2h-1' }],\n ['path', { d: 'M14 17h-3' }],\n ['path', { d: 'm7 17-4 4v-5' }],\n ['path', { d: 'M3 12v-2' }],\n ],\n];\n\nexport default MessageSquareDashed;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MessageSquarePlus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z' },\n ],\n ['line', { x1: '9', x2: '15', y1: '10', y2: '10' }],\n ['line', { x1: '12', x2: '12', y1: '7', y2: '13' }],\n ],\n];\n\nexport default MessageSquarePlus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MessageSquare: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z' },\n ],\n ],\n];\n\nexport default MessageSquare;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MessagesSquare: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M14 9a2 2 0 0 1-2 2H6l-4 4V4c0-1.1.9-2 2-2h8a2 2 0 0 1 2 2v5Z' },\n ],\n ['path', { d: 'M18 9h2a2 2 0 0 1 2 2v11l-4-4h-6a2 2 0 0 1-2-2v-1' }],\n ],\n];\n\nexport default MessagesSquare;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Mic2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm12 8-9.04 9.06a2.82 2.82 0 1 0 3.98 3.98L16 12' }],\n ['circle', { cx: '17', cy: '7', r: '5' }],\n ],\n];\n\nexport default Mic2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MicOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ['path', { d: 'M18.89 13.23A7.12 7.12 0 0 0 19 12v-2' }],\n ['path', { d: 'M5 10v2a7 7 0 0 0 12 5' }],\n ['path', { d: 'M15 9.34V5a3 3 0 0 0-5.68-1.33' }],\n ['path', { d: 'M9 9v3a3 3 0 0 0 5.12 2.12' }],\n ['line', { x1: '12', x2: '12', y1: '19', y2: '22' }],\n ],\n];\n\nexport default MicOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Mic: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z' }],\n ['path', { d: 'M19 10v2a7 7 0 0 1-14 0v-2' }],\n ['line', { x1: '12', x2: '12', y1: '19', y2: '22' }],\n ],\n];\n\nexport default Mic;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Microscope: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M6 18h8' }],\n ['path', { d: 'M3 22h18' }],\n ['path', { d: 'M14 22a7 7 0 1 0 0-14h-1' }],\n ['path', { d: 'M9 14h2' }],\n ['path', { d: 'M8 6h4' }],\n [\n 'path',\n {\n d: 'M13 10V6.5a.5.5 0 0 0-.5-.5.5.5 0 0 1-.5-.5V3a1 1 0 0 0-1-1H9a1 1 0 0 0-1 1v2.5a.5.5 0 0 1-.5.5.5.5 0 0 0-.5.5V10c0 1.1.9 2 2 2h2a2 2 0 0 0 2-2Z',\n },\n ],\n ],\n];\n\nexport default Microscope;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Microwave: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '15', x: '2', y: '4', rx: '2' }],\n ['rect', { width: '8', height: '7', x: '6', y: '8', rx: '1' }],\n ['path', { d: 'M18 8v7' }],\n ['path', { d: 'M6 19v2' }],\n ['path', { d: 'M18 19v2' }],\n ],\n];\n\nexport default Microwave;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Milestone: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M18 6H5a2 2 0 0 0-2 2v3a2 2 0 0 0 2 2h13l4-3.5L18 6Z' }],\n ['path', { d: 'M12 13v8' }],\n ['path', { d: 'M12 3v3' }],\n ],\n];\n\nexport default Milestone;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MilkOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M8 2h8' }],\n [\n 'path',\n {\n d: 'M9 2v1.343M15 2v2.789a4 4 0 0 0 .672 2.219l.656.984a4 4 0 0 1 .672 2.22v1.131M7.8 7.8l-.128.192A4 4 0 0 0 7 10.212V20a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-3',\n },\n ],\n ['path', { d: 'M7 15a6.47 6.47 0 0 1 5 0 6.472 6.472 0 0 0 3.435.435' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default MilkOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Milk: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M8 2h8' }],\n [\n 'path',\n {\n d: 'M9 2v2.789a4 4 0 0 1-.672 2.219l-.656.984A4 4 0 0 0 7 10.212V20a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-9.789a4 4 0 0 0-.672-2.219l-.656-.984A4 4 0 0 1 15 4.788V2',\n },\n ],\n ['path', { d: 'M7 15a6.472 6.472 0 0 1 5 0 6.47 6.47 0 0 0 5 0' }],\n ],\n];\n\nexport default Milk;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Minimize2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '4 14 10 14 10 20' }],\n ['polyline', { points: '20 10 14 10 14 4' }],\n ['line', { x1: '14', x2: '21', y1: '10', y2: '3' }],\n ['line', { x1: '3', x2: '10', y1: '21', y2: '14' }],\n ],\n];\n\nexport default Minimize2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Minimize: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M8 3v3a2 2 0 0 1-2 2H3' }],\n ['path', { d: 'M21 8h-3a2 2 0 0 1-2-2V3' }],\n ['path', { d: 'M3 16h3a2 2 0 0 1 2 2v3' }],\n ['path', { d: 'M16 21v-3a2 2 0 0 1 2-2h3' }],\n ],\n];\n\nexport default Minimize;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MinusCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['line', { x1: '8', x2: '16', y1: '12', y2: '12' }],\n ],\n];\n\nexport default MinusCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MinusSquare: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['line', { x1: '8', x2: '16', y1: '12', y2: '12' }],\n ],\n];\n\nexport default MinusSquare;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Minus: IconNode = [\n 'svg',\n defaultAttributes,\n [['line', { x1: '5', x2: '19', y1: '12', y2: '12' }]],\n];\n\nexport default Minus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MonitorDown: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '14', x: '2', y: '3', rx: '2', ry: '2' }],\n ['line', { x1: '8', x2: '16', y1: '21', y2: '21' }],\n ['line', { x1: '12', x2: '12', y1: '17', y2: '21' }],\n ['path', { d: 'M12 13V7' }],\n ['path', { d: 'm15 10-3 3-3-3' }],\n ],\n];\n\nexport default MonitorDown;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MonitorOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M17 17H4a2 2 0 0 1-2-2V5c0-1.5 1-2 1-2' }],\n ['path', { d: 'M22 15V5a2 2 0 0 0-2-2H9' }],\n ['path', { d: 'M8 21h8' }],\n ['path', { d: 'M12 17v4' }],\n ['path', { d: 'm2 2 20 20' }],\n ],\n];\n\nexport default MonitorOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MonitorSmartphone: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M18 8V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h8' }],\n ['path', { d: 'M10 19v-3.96 3.15' }],\n ['path', { d: 'M7 19h5' }],\n ['rect', { width: '6', height: '10', x: '16', y: '12', rx: '2' }],\n ],\n];\n\nexport default MonitorSmartphone;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MonitorSpeaker: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M5.5 20H8' }],\n ['path', { d: 'M17 9h.01' }],\n ['rect', { width: '10', height: '16', x: '12', y: '4', rx: '2' }],\n ['path', { d: 'M8 6H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h4' }],\n ['circle', { cx: '17', cy: '15', r: '1' }],\n ],\n];\n\nexport default MonitorSpeaker;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MonitorUp: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '14', x: '2', y: '3', rx: '2', ry: '2' }],\n ['line', { x1: '8', x2: '16', y1: '21', y2: '21' }],\n ['line', { x1: '12', x2: '12', y1: '17', y2: '21' }],\n ['path', { d: 'M12 13V7' }],\n ['path', { d: 'm9 10 3-3 3 3' }],\n ],\n];\n\nexport default MonitorUp;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Monitor: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '14', x: '2', y: '3', rx: '2', ry: '2' }],\n ['line', { x1: '8', x2: '16', y1: '21', y2: '21' }],\n ['line', { x1: '12', x2: '12', y1: '17', y2: '21' }],\n ],\n];\n\nexport default Monitor;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MoonStar: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 3a6.364 6.364 0 0 0 9 9 9 9 0 1 1-9-9Z' }],\n ['path', { d: 'M19 3v4' }],\n ['path', { d: 'M21 5h-4' }],\n ],\n];\n\nexport default MoonStar;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Moon: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M12 3a6.364 6.364 0 0 0 9 9 9 9 0 1 1-9-9Z' }]],\n];\n\nexport default Moon;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MoreHorizontal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '1' }],\n ['circle', { cx: '19', cy: '12', r: '1' }],\n ['circle', { cx: '5', cy: '12', r: '1' }],\n ],\n];\n\nexport default MoreHorizontal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MoreVertical: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '1' }],\n ['circle', { cx: '12', cy: '5', r: '1' }],\n ['circle', { cx: '12', cy: '19', r: '1' }],\n ],\n];\n\nexport default MoreVertical;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MountainSnow: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm8 3 4 8 5-5 5 15H2L8 3z' }],\n [\n 'path',\n { d: 'M4.14 15.08c2.62-1.57 5.24-1.43 7.86.42 2.74 1.94 5.49 2 8.23.19' },\n ],\n ],\n];\n\nexport default MountainSnow;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Mountain: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'm8 3 4 8 5-5 5 15H2L8 3z' }]],\n];\n\nexport default Mountain;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MousePointer2: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'm4 4 7.07 17 2.51-7.39L21 11.07z' }]],\n];\n\nexport default MousePointer2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MousePointerClick: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm9 9 5 12 1.774-5.226L21 14 9 9z' }],\n ['path', { d: 'm16.071 16.071 4.243 4.243' }],\n [\n 'path',\n {\n d: 'm7.188 2.239.777 2.897M5.136 7.965l-2.898-.777M13.95 4.05l-2.122 2.122m-5.657 5.656-2.12 2.122',\n },\n ],\n ],\n];\n\nexport default MousePointerClick;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MousePointer: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm3 3 7.07 16.97 2.51-7.39 7.39-2.51L3 3z' }],\n ['path', { d: 'm13 13 6 6' }],\n ],\n];\n\nexport default MousePointer;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Mouse: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '12', height: '18', x: '6', y: '3', rx: '6' }],\n ['path', { d: 'M12 7v4' }],\n ],\n];\n\nexport default Mouse;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Move3d: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M5 3v16h16' }],\n ['path', { d: 'm5 19 6-6' }],\n ['path', { d: 'm2 6 3-3 3 3' }],\n ['path', { d: 'm18 16 3 3-3 3' }],\n ],\n];\n\nexport default Move3d;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MoveDiagonal2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '5 11 5 5 11 5' }],\n ['polyline', { points: '19 13 19 19 13 19' }],\n ['line', { x1: '5', x2: '19', y1: '5', y2: '19' }],\n ],\n];\n\nexport default MoveDiagonal2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MoveDiagonal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '13 5 19 5 19 11' }],\n ['polyline', { points: '11 19 5 19 5 13' }],\n ['line', { x1: '19', x2: '5', y1: '5', y2: '19' }],\n ],\n];\n\nexport default MoveDiagonal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MoveHorizontal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '18 8 22 12 18 16' }],\n ['polyline', { points: '6 8 2 12 6 16' }],\n ['line', { x1: '2', x2: '22', y1: '12', y2: '12' }],\n ],\n];\n\nexport default MoveHorizontal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst MoveVertical: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '8 18 12 22 16 18' }],\n ['polyline', { points: '8 6 12 2 16 6' }],\n ['line', { x1: '12', x2: '12', y1: '2', y2: '22' }],\n ],\n];\n\nexport default MoveVertical;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Move: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '5 9 2 12 5 15' }],\n ['polyline', { points: '9 5 12 2 15 5' }],\n ['polyline', { points: '15 19 12 22 9 19' }],\n ['polyline', { points: '19 9 22 12 19 15' }],\n ['line', { x1: '2', x2: '22', y1: '12', y2: '12' }],\n ['line', { x1: '12', x2: '12', y1: '2', y2: '22' }],\n ],\n];\n\nexport default Move;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Music2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '8', cy: '18', r: '4' }],\n ['path', { d: 'M12 18V2l7 4' }],\n ],\n];\n\nexport default Music2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Music3: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '18', r: '4' }],\n ['path', { d: 'M16 18V2' }],\n ],\n];\n\nexport default Music3;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Music4: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M9 18V5l12-2v13' }],\n ['path', { d: 'm9 9 12-2' }],\n ['circle', { cx: '6', cy: '18', r: '3' }],\n ['circle', { cx: '18', cy: '16', r: '3' }],\n ],\n];\n\nexport default Music4;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Music: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M9 18V5l12-2v13' }],\n ['circle', { cx: '6', cy: '18', r: '3' }],\n ['circle', { cx: '18', cy: '16', r: '3' }],\n ],\n];\n\nexport default Music;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Navigation2Off: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M9.31 9.31 5 21l7-4 7 4-1.17-3.17' }],\n ['path', { d: 'M14.53 8.88 12 2l-1.17 3.17' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default Navigation2Off;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Navigation2: IconNode = [\n 'svg',\n defaultAttributes,\n [['polygon', { points: '12 2 19 21 12 17 5 21 12 2' }]],\n];\n\nexport default Navigation2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst NavigationOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M8.43 8.43 3 11l8 2 2 8 2.57-5.43' }],\n ['path', { d: 'M17.39 11.73 22 2l-9.73 4.61' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default NavigationOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Navigation: IconNode = [\n 'svg',\n defaultAttributes,\n [['polygon', { points: '3 11 22 2 13 21 11 13 3 11' }]],\n];\n\nexport default Navigation;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Network: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '6', height: '6', x: '9', y: '2' }],\n ['rect', { width: '6', height: '6', x: '16', y: '16' }],\n ['rect', { width: '6', height: '6', x: '2', y: '16' }],\n ['path', { d: 'M5 16v-4h14v4' }],\n ['path', { d: 'M12 12V8' }],\n ],\n];\n\nexport default Network;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Newspaper: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Zm0 0a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2',\n },\n ],\n ['path', { d: 'M18 14h-8' }],\n ['path', { d: 'M15 18h-5' }],\n ['path', { d: 'M10 6h8v4h-8V6Z' }],\n ],\n];\n\nexport default Newspaper;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Nfc: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M6 8.32a7.43 7.43 0 0 1 0 7.36' }],\n ['path', { d: 'M9.46 6.21a11.76 11.76 0 0 1 0 11.58' }],\n ['path', { d: 'M12.91 4.1a15.91 15.91 0 0 1 .01 15.8' }],\n ['path', { d: 'M16.37 2a20.16 20.16 0 0 1 0 20' }],\n ],\n];\n\nexport default Nfc;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst NutOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 4V2' }],\n [\n 'path',\n {\n d: 'M5 10v4a7.004 7.004 0 0 0 5.277 6.787c.412.104.802.292 1.102.592L12 22l.621-.621c.3-.3.69-.488 1.102-.592a7.01 7.01 0 0 0 4.125-2.939',\n },\n ],\n ['path', { d: 'M19 10v3.343' }],\n [\n 'path',\n {\n d: 'M12 12c-1.349-.573-1.905-1.005-2.5-2-.546.902-1.048 1.353-2.5 2-1.018-.644-1.46-1.08-2-2-1.028.71-1.69.918-3 1 1.081-1.048 1.757-2.03 2-3 .194-.776.84-1.551 1.79-2.21m11.654 5.997c.887-.457 1.28-.891 1.556-1.787 1.032.916 1.683 1.157 3 1-1.297-1.036-1.758-2.03-2-3-.5-2-4-4-8-4-.74 0-1.461.068-2.15.192',\n },\n ],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default NutOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Nut: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 4V2' }],\n [\n 'path',\n {\n d: 'M5 10v4a7.004 7.004 0 0 0 5.277 6.787c.412.104.802.292 1.102.592L12 22l.621-.621c.3-.3.69-.488 1.102-.592A7.003 7.003 0 0 0 19 14v-4',\n },\n ],\n [\n 'path',\n {\n d: 'M12 4C8 4 4.5 6 4 8c-.243.97-.919 1.952-2 3 1.31-.082 1.972-.29 3-1 .54.92.982 1.356 2 2 1.452-.647 1.954-1.098 2.5-2 .595.995 1.151 1.427 2.5 2 1.31-.621 1.862-1.058 2.5-2 .629.977 1.162 1.423 2.5 2 1.209-.548 1.68-.967 2-2 1.032.916 1.683 1.157 3 1-1.297-1.036-1.758-2.03-2-3-.5-2-4-4-8-4Z',\n },\n ],\n ],\n];\n\nexport default Nut;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Octagon: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'polygon',\n {\n points:\n '7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2',\n },\n ],\n ],\n];\n\nexport default Octagon;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Option: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 3h6l6 18h6' }],\n ['path', { d: 'M14 3h7' }],\n ],\n];\n\nexport default Option;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Orbit: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '3' }],\n ['circle', { cx: '18', cy: '6', r: '2' }],\n ['circle', { cx: '6', cy: '18', r: '2' }],\n ['path', { d: 'M12 20a8 8 0 0 0 6.82-12.17' }],\n ['path', { d: 'M12 4a8 8 0 0 0-6.82 12.17' }],\n ],\n];\n\nexport default Orbit;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Outdent: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '7 8 3 12 7 16' }],\n ['line', { x1: '21', x2: '11', y1: '12', y2: '12' }],\n ['line', { x1: '21', x2: '11', y1: '6', y2: '6' }],\n ['line', { x1: '21', x2: '11', y1: '18', y2: '18' }],\n ],\n];\n\nexport default Outdent;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Package2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 9h18v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9Z' }],\n [\n 'path',\n { d: 'm3 9 2.45-4.9A2 2 0 0 1 7.24 3h9.52a2 2 0 0 1 1.8 1.1L21 9' },\n ],\n ['path', { d: 'M12 3v6' }],\n ],\n];\n\nexport default Package2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PackageCheck: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm16 16 2 2 4-4' }],\n [\n 'path',\n {\n d: 'M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14',\n },\n ],\n ['path', { d: 'M16.5 9.4 7.55 4.24' }],\n ['polyline', { points: '3.29 7 12 12 20.71 7' }],\n ['line', { x1: '12', x2: '12', y1: '22', y2: '12' }],\n ],\n];\n\nexport default PackageCheck;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PackageMinus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M16 16h6' }],\n [\n 'path',\n {\n d: 'M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14',\n },\n ],\n ['path', { d: 'M16.5 9.4 7.55 4.24' }],\n ['polyline', { points: '3.29 7 12 12 20.71 7' }],\n ['line', { x1: '12', x2: '12', y1: '22', y2: '12' }],\n ],\n];\n\nexport default PackageMinus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PackageOpen: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M20.91 8.84 8.56 2.23a1.93 1.93 0 0 0-1.81 0L3.1 4.13a2.12 2.12 0 0 0-.05 3.69l12.22 6.93a2 2 0 0 0 1.94 0L21 12.51a2.12 2.12 0 0 0-.09-3.67Z',\n },\n ],\n [\n 'path',\n {\n d: 'm3.09 8.84 12.35-6.61a1.93 1.93 0 0 1 1.81 0l3.65 1.9a2.12 2.12 0 0 1 .1 3.69L8.73 14.75a2 2 0 0 1-1.94 0L3 12.51a2.12 2.12 0 0 1 .09-3.67Z',\n },\n ],\n ['line', { x1: '12', x2: '12', y1: '22', y2: '13' }],\n [\n 'path',\n {\n d: 'M20 13.5v3.37a2.06 2.06 0 0 1-1.11 1.83l-6 3.08a1.93 1.93 0 0 1-1.78 0l-6-3.08A2.06 2.06 0 0 1 4 16.87V13.5',\n },\n ],\n ],\n];\n\nexport default PackageOpen;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PackagePlus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M16 16h6' }],\n ['path', { d: 'M19 13v6' }],\n [\n 'path',\n {\n d: 'M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14',\n },\n ],\n ['path', { d: 'M16.5 9.4 7.55 4.24' }],\n ['polyline', { points: '3.29 7 12 12 20.71 7' }],\n ['line', { x1: '12', x2: '12', y1: '22', y2: '12' }],\n ],\n];\n\nexport default PackagePlus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PackageSearch: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14',\n },\n ],\n ['path', { d: 'M16.5 9.4 7.55 4.24' }],\n ['polyline', { points: '3.29 7 12 12 20.71 7' }],\n ['line', { x1: '12', x2: '12', y1: '22', y2: '12' }],\n ['circle', { cx: '18.5', cy: '15.5', r: '2.5' }],\n ['path', { d: 'M20.27 17.27 22 19' }],\n ],\n];\n\nexport default PackageSearch;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PackageX: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14',\n },\n ],\n ['path', { d: 'M16.5 9.4 7.55 4.24' }],\n ['polyline', { points: '3.29 7 12 12 20.71 7' }],\n ['line', { x1: '12', x2: '12', y1: '22', y2: '12' }],\n ['path', { d: 'm17 13 5 5m-5 0 5-5' }],\n ],\n];\n\nexport default PackageX;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Package: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M16.5 9.4 7.55 4.24' }],\n [\n 'path',\n {\n d: 'M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z',\n },\n ],\n ['polyline', { points: '3.29 7 12 12 20.71 7' }],\n ['line', { x1: '12', x2: '12', y1: '22', y2: '12' }],\n ],\n];\n\nexport default Package;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PaintBucket: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'm19 11-8-8-8.6 8.6a2 2 0 0 0 0 2.8l5.2 5.2c.8.8 2 .8 2.8 0L19 11Z',\n },\n ],\n ['path', { d: 'm5 2 5 5' }],\n ['path', { d: 'M2 13h15' }],\n ['path', { d: 'M22 20a2 2 0 1 1-4 0c0-1.6 1.7-2.4 2-4 .3 1.6 2 2.4 2 4Z' }],\n ],\n];\n\nexport default PaintBucket;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Paintbrush2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14 19.9V16h3a2 2 0 0 0 2-2v-2H5v2c0 1.1.9 2 2 2h3v3.9a2 2 0 1 0 4 0Z',\n },\n ],\n ['path', { d: 'M6 12V2h12v10' }],\n ['path', { d: 'M14 2v4' }],\n ['path', { d: 'M10 2v2' }],\n ],\n];\n\nexport default Paintbrush2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Paintbrush: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M18.37 2.63 14 7l-1.59-1.59a2 2 0 0 0-2.82 0L8 7l9 9 1.59-1.59a2 2 0 0 0 0-2.82L17 10l4.37-4.37a2.12 2.12 0 1 0-3-3Z',\n },\n ],\n ['path', { d: 'M9 8c-2 3-4 3.5-7 4l8 10c2-1 6-5 6-7' }],\n ['path', { d: 'M14.5 17.5 4.5 15' }],\n ],\n];\n\nexport default Paintbrush;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Palette: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '13.5', cy: '6.5', r: '.5' }],\n ['circle', { cx: '17.5', cy: '10.5', r: '.5' }],\n ['circle', { cx: '8.5', cy: '7.5', r: '.5' }],\n ['circle', { cx: '6.5', cy: '12.5', r: '.5' }],\n [\n 'path',\n {\n d: 'M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z',\n },\n ],\n ],\n];\n\nexport default Palette;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Palmtree: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M13 8c0-2.76-2.46-5-5.5-5S2 5.24 2 8h2l1-1 1 1h4' }],\n [\n 'path',\n {\n d: 'M13 7.14A5.82 5.82 0 0 1 16.5 6c3.04 0 5.5 2.24 5.5 5h-3l-1-1-1 1h-3',\n },\n ],\n [\n 'path',\n {\n d: 'M5.89 9.71c-2.15 2.15-2.3 5.47-.35 7.43l4.24-4.25.7-.7.71-.71 2.12-2.12c-1.95-1.96-5.27-1.8-7.42.35z',\n },\n ],\n ['path', { d: 'M11 15.5c.5 2.5-.17 4.5-1 6.5h4c2-5.5-.5-12-1-14' }],\n ],\n];\n\nexport default Palmtree;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Paperclip: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'm21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48',\n },\n ],\n ],\n];\n\nexport default Paperclip;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ParkingCircleOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'm5 5 14 14' }],\n ['path', { d: 'M13 13a3 3 0 1 0 0-6H9v2' }],\n ['path', { d: 'M9 17v-2.34' }],\n ],\n];\n\nexport default ParkingCircleOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ParkingCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M9 17V7h4a3 3 0 0 1 0 6H9' }],\n ],\n];\n\nexport default ParkingCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ParkingSquareOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M3.59 3.59A2 2 0 0 1 5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1-.59 1.41' },\n ],\n ['path', { d: 'M3 8.66V19c0 1.1.9 2 2 2h10.34' }],\n ['path', { d: 'm2 2 20 20' }],\n ['path', { d: 'M13 13a3 3 0 1 0 0-6H9v2' }],\n ['path', { d: 'M9 17v-2.34' }],\n ],\n];\n\nexport default ParkingSquareOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ParkingSquare: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2' }],\n ['path', { d: 'M9 17V7h4a3 3 0 0 1 0 6H9' }],\n ],\n];\n\nexport default ParkingSquare;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PartyPopper: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M5.8 11.3 2 22l10.7-3.79' }],\n ['path', { d: 'M4 3h.01' }],\n ['path', { d: 'M22 8h.01' }],\n ['path', { d: 'M15 2h.01' }],\n ['path', { d: 'M22 20h.01' }],\n [\n 'path',\n {\n d: 'm22 2-2.24.75a2.9 2.9 0 0 0-1.96 3.12v0c.1.86-.57 1.63-1.45 1.63h-.38c-.86 0-1.6.6-1.76 1.44L14 10',\n },\n ],\n [\n 'path',\n {\n d: 'm22 13-.82-.33c-.86-.34-1.82.2-1.98 1.11v0c-.11.7-.72 1.22-1.43 1.22H17',\n },\n ],\n [\n 'path',\n { d: 'm11 2 .33.82c.34.86-.2 1.82-1.11 1.98v0C9.52 4.9 9 5.52 9 6.23V7' },\n ],\n [\n 'path',\n {\n d: 'M11 13c1.93 1.93 2.83 4.17 2 5-.83.83-3.07-.07-5-2-1.93-1.93-2.83-4.17-2-5 .83-.83 3.07.07 5 2Z',\n },\n ],\n ],\n];\n\nexport default PartyPopper;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PauseCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['line', { x1: '10', x2: '10', y1: '15', y2: '9' }],\n ['line', { x1: '14', x2: '14', y1: '15', y2: '9' }],\n ],\n];\n\nexport default PauseCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PauseOctagon: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M10 15V9' }],\n ['path', { d: 'M14 15V9' }],\n [\n 'path',\n {\n d: 'M7.714 2h8.572L22 7.714v8.572L16.286 22H7.714L2 16.286V7.714L7.714 2z',\n },\n ],\n ],\n];\n\nexport default PauseOctagon;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Pause: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '4', height: '16', x: '6', y: '4' }],\n ['rect', { width: '4', height: '16', x: '14', y: '4' }],\n ],\n];\n\nexport default Pause;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PenTool: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm12 19 7-7 3 3-7 7-3-3z' }],\n ['path', { d: 'm18 13-1.5-7.5L2 2l3.5 14.5L13 18l5-5z' }],\n ['path', { d: 'm2 2 7.586 7.586' }],\n ['circle', { cx: '11', cy: '11', r: '2' }],\n ],\n];\n\nexport default PenTool;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Pencil: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '18', x2: '22', y1: '2', y2: '6' }],\n ['path', { d: 'M7.5 20.5 19 9l-4-4L3.5 16.5 2 22z' }],\n ],\n];\n\nexport default Pencil;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Percent: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '19', x2: '5', y1: '5', y2: '19' }],\n ['circle', { cx: '6.5', cy: '6.5', r: '2.5' }],\n ['circle', { cx: '17.5', cy: '17.5', r: '2.5' }],\n ],\n];\n\nexport default Percent;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PersonStanding: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '5', r: '1' }],\n ['path', { d: 'm9 20 3-6 3 6' }],\n ['path', { d: 'm6 8 6 2 6-2' }],\n ['path', { d: 'M12 10v4' }],\n ],\n];\n\nexport default PersonStanding;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PhoneCall: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z',\n },\n ],\n ['path', { d: 'M14.05 2a9 9 0 0 1 8 7.94' }],\n ['path', { d: 'M14.05 6A5 5 0 0 1 18 10' }],\n ],\n];\n\nexport default PhoneCall;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PhoneForwarded: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '18 2 22 6 18 10' }],\n ['line', { x1: '14', x2: '22', y1: '6', y2: '6' }],\n [\n 'path',\n {\n d: 'M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z',\n },\n ],\n ],\n];\n\nexport default PhoneForwarded;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PhoneIncoming: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '16 2 16 8 22 8' }],\n ['line', { x1: '22', x2: '16', y1: '2', y2: '8' }],\n [\n 'path',\n {\n d: 'M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z',\n },\n ],\n ],\n];\n\nexport default PhoneIncoming;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PhoneMissed: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '22', x2: '16', y1: '2', y2: '8' }],\n ['line', { x1: '16', x2: '22', y1: '2', y2: '8' }],\n [\n 'path',\n {\n d: 'M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z',\n },\n ],\n ],\n];\n\nexport default PhoneMissed;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PhoneOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91',\n },\n ],\n ['line', { x1: '22', x2: '2', y1: '2', y2: '22' }],\n ],\n];\n\nexport default PhoneOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PhoneOutgoing: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '22 8 22 2 16 2' }],\n ['line', { x1: '16', x2: '22', y1: '8', y2: '2' }],\n [\n 'path',\n {\n d: 'M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z',\n },\n ],\n ],\n];\n\nexport default PhoneOutgoing;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Phone: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z',\n },\n ],\n ],\n];\n\nexport default Phone;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PictureInPicture2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M21 9V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v10c0 1.1.9 2 2 2h4' }],\n ['rect', { width: '10', height: '7', x: '12', y: '13', rx: '2' }],\n ],\n];\n\nexport default PictureInPicture2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PictureInPicture: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M8 4.5v5H3m-1-6 6 6m13 0v-3c0-1.16-.84-2-2-2h-7m-9 9v2c0 1.05.95 2 2 2h3',\n },\n ],\n ['rect', { width: '10', height: '7', x: '12', y: '13.5', ry: '2' }],\n ],\n];\n\nexport default PictureInPicture;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PieChart: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M21.21 15.89A10 10 0 1 1 8 2.83' }],\n ['path', { d: 'M22 12A10 10 0 0 0 12 2v10z' }],\n ],\n];\n\nexport default PieChart;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PiggyBank: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M19 5c-1.5 0-2.8 1.4-3 2-3.5-1.5-11-.3-11 5 0 1.8 0 3 2 4.5V20h4v-2h3v2h4v-4c1-.5 1.7-1 2-2h2v-4h-2c0-1-.5-1.5-1-2h0V5z',\n },\n ],\n ['path', { d: 'M2 9v1c0 1.1.9 2 2 2h1' }],\n ['path', { d: 'M16 11h0' }],\n ],\n];\n\nexport default PiggyBank;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Pilcrow: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M13 4v16' }],\n ['path', { d: 'M17 4v16' }],\n ['path', { d: 'M19 4H9.5a4.5 4.5 0 0 0 0 9H13' }],\n ],\n];\n\nexport default Pilcrow;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Pill: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'm10.5 20.5 10-10a4.95 4.95 0 1 0-7-7l-10 10a4.95 4.95 0 1 0 7 7Z' },\n ],\n ['path', { d: 'm8.5 8.5 7 7' }],\n ],\n];\n\nexport default Pill;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PinOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ['line', { x1: '12', x2: '12', y1: '17', y2: '22' }],\n [\n 'path',\n { d: 'M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h12' },\n ],\n ['path', { d: 'M15 9.34V6h1a2 2 0 0 0 0-4H7.89' }],\n ],\n];\n\nexport default PinOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Pin: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '12', x2: '12', y1: '17', y2: '22' }],\n [\n 'path',\n {\n d: 'M5 17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4h1v4.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24Z',\n },\n ],\n ],\n];\n\nexport default Pin;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Pipette: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm2 22 1-1h3l9-9' }],\n ['path', { d: 'M3 21v-3l9-9' }],\n [\n 'path',\n {\n d: 'm15 6 3.4-3.4a2.1 2.1 0 1 1 3 3L18 9l.4.4a2.1 2.1 0 1 1-3 3l-3.8-3.8a2.1 2.1 0 1 1 3-3l.4.4Z',\n },\n ],\n ],\n];\n\nexport default Pipette;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Pizza: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M15 11h.01' }],\n ['path', { d: 'M11 15h.01' }],\n ['path', { d: 'M16 16h.01' }],\n ['path', { d: 'm2 16 20 6-6-20A20 20 0 0 0 2 16' }],\n ['path', { d: 'M5.71 17.11a17.04 17.04 0 0 1 11.4-11.4' }],\n ],\n];\n\nexport default Pizza;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PlaneLanding: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 22h20' }],\n [\n 'path',\n {\n d: 'M3.77 10.77 2 9l2-4.5 1.1.55c.55.28.9.84.9 1.45s.35 1.17.9 1.45L8 8.5l3-6 1.05.53a2 2 0 0 1 1.09 1.52l.72 5.4a2 2 0 0 0 1.09 1.52l4.4 2.2c.42.22.78.55 1.01.96l.6 1.03c.49.88-.06 1.98-1.06 2.1l-1.18.15c-.47.06-.95-.02-1.37-.24L4.29 11.15a2 2 0 0 1-.52-.38Z',\n },\n ],\n ],\n];\n\nexport default PlaneLanding;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PlaneTakeoff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 22h20' }],\n [\n 'path',\n {\n d: 'M6.36 17.4 4 17l-2-4 1.1-.55a2 2 0 0 1 1.8 0l.17.1a2 2 0 0 0 1.8 0L8 12 5 6l.9-.45a2 2 0 0 1 2.09.2l4.02 3a2 2 0 0 0 2.1.2l4.19-2.06a2.41 2.41 0 0 1 1.73-.17L21 7a1.4 1.4 0 0 1 .87 1.99l-.38.76c-.23.46-.6.84-1.07 1.08L7.58 17.2a2 2 0 0 1-1.22.18Z',\n },\n ],\n ],\n];\n\nexport default PlaneTakeoff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Plane: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M17.8 19.2 16 11l3.5-3.5C21 6 21.5 4 21 3c-1-.5-3 0-4.5 1.5L13 8 4.8 6.2c-.5-.1-.9.1-1.1.5l-.3.5c-.2.5-.1 1 .3 1.3L9 12l-2 3H4l-1 1 3 2 2 3 1-1v-3l3-2 3.5 5.3c.3.4.8.5 1.3.3l.5-.2c.4-.3.6-.7.5-1.2z',\n },\n ],\n ],\n];\n\nexport default Plane;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PlayCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['polygon', { points: '10 8 16 12 10 16 10 8' }],\n ],\n];\n\nexport default PlayCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Play: IconNode = [\n 'svg',\n defaultAttributes,\n [['polygon', { points: '5 3 19 12 5 21 5 3' }]],\n];\n\nexport default Play;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Plug2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M9 2v6' }],\n ['path', { d: 'M15 2v6' }],\n ['path', { d: 'M12 17v5' }],\n ['path', { d: 'M5 8h14' }],\n ['path', { d: 'M6 11V8h12v3a6 6 0 1 1-12 0v0Z' }],\n ],\n];\n\nexport default Plug2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PlugZap: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm13 2-2 2.5h3L12 7' }],\n ['path', { d: 'M12 22v-3' }],\n ['path', { d: 'M10 13v-2.5' }],\n ['path', { d: 'M10 12.5v-2' }],\n ['path', { d: 'M14 12.5v-2' }],\n [\n 'path',\n {\n d: 'M16 15a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2v-2z',\n },\n ],\n ],\n];\n\nexport default PlugZap;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Plug: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 22v-5' }],\n ['path', { d: 'M9 7V2' }],\n ['path', { d: 'M15 7V2' }],\n ['path', { d: 'M6 13V8h12v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4Z' }],\n ],\n];\n\nexport default Plug;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PlusCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['line', { x1: '12', x2: '12', y1: '8', y2: '16' }],\n ['line', { x1: '8', x2: '16', y1: '12', y2: '12' }],\n ],\n];\n\nexport default PlusCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PlusSquare: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['line', { x1: '12', x2: '12', y1: '8', y2: '16' }],\n ['line', { x1: '8', x2: '16', y1: '12', y2: '12' }],\n ],\n];\n\nexport default PlusSquare;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Plus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '12', x2: '12', y1: '5', y2: '19' }],\n ['line', { x1: '5', x2: '19', y1: '12', y2: '12' }],\n ],\n];\n\nexport default Plus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Pocket: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4 3h16a2 2 0 0 1 2 2v6a10 10 0 0 1-10 10A10 10 0 0 1 2 11V5a2 2 0 0 1 2-2z',\n },\n ],\n ['polyline', { points: '8 10 12 14 16 10' }],\n ],\n];\n\nexport default Pocket;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Podcast: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '11', r: '1' }],\n [\n 'path',\n {\n d: 'M11 17a1 1 0 0 1 2 0c0 .5-.34 3-.5 4.5a.5.5 0 0 1-1 0c-.16-1.5-.5-4-.5-4.5Z',\n },\n ],\n ['path', { d: 'M8 14a5 5 0 1 1 8 0' }],\n ['path', { d: 'M17 18.5a9 9 0 1 0-10 0' }],\n ],\n];\n\nexport default Podcast;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Pointer: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M22 14a8 8 0 0 1-8 8' }],\n ['path', { d: 'M18 11v-1a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v0' }],\n ['path', { d: 'M14 10V9a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v1' }],\n ['path', { d: 'M10 9.5V4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v10' }],\n [\n 'path',\n {\n d: 'M18 11a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15',\n },\n ],\n ],\n];\n\nexport default Pointer;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PoundSterling: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M18 7c0-5.333-8-5.333-8 0' }],\n ['path', { d: 'M10 7v14' }],\n ['path', { d: 'M6 21h12' }],\n ['path', { d: 'M6 13h10' }],\n ],\n];\n\nexport default PoundSterling;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst PowerOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M18.36 6.64A9 9 0 0 1 20.77 15' }],\n ['path', { d: 'M6.16 6.16a9 9 0 1 0 12.68 12.68' }],\n ['path', { d: 'M12 2v4' }],\n ['path', { d: 'm2 2 20 20' }],\n ],\n];\n\nexport default PowerOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Power: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M18.36 6.64a9 9 0 1 1-12.73 0' }],\n ['line', { x1: '12', x2: '12', y1: '2', y2: '12' }],\n ],\n];\n\nexport default Power;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Printer: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '6 9 6 2 18 2 18 9' }],\n [\n 'path',\n {\n d: 'M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2',\n },\n ],\n ['rect', { width: '12', height: '8', x: '6', y: '14' }],\n ],\n];\n\nexport default Printer;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Puzzle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M19.439 7.85c-.049.322.059.648.289.878l1.568 1.568c.47.47.706 1.087.706 1.704s-.235 1.233-.706 1.704l-1.611 1.611a.98.98 0 0 1-.837.276c-.47-.07-.802-.48-.968-.925a2.501 2.501 0 1 0-3.214 3.214c.446.166.855.497.925.968a.979.979 0 0 1-.276.837l-1.61 1.61a2.404 2.404 0 0 1-1.705.707 2.402 2.402 0 0 1-1.704-.706l-1.568-1.568a1.026 1.026 0 0 0-.877-.29c-.493.074-.84.504-1.02.968a2.5 2.5 0 1 1-3.237-3.237c.464-.18.894-.527.967-1.02a1.026 1.026 0 0 0-.289-.877l-1.568-1.568A2.402 2.402 0 0 1 1.998 12c0-.617.236-1.234.706-1.704L4.23 8.77c.24-.24.581-.353.917-.303.515.077.877.528 1.073 1.01a2.5 2.5 0 1 0 3.259-3.259c-.482-.196-.933-.558-1.01-1.073-.05-.336.062-.676.303-.917l1.525-1.525A2.402 2.402 0 0 1 12 1.998c.617 0 1.234.236 1.704.706l1.568 1.568c.23.23.556.338.877.29.493-.074.84-.504 1.02-.968a2.5 2.5 0 1 1 3.237 3.237c-.464.18-.894.527-.967 1.02Z',\n },\n ],\n ],\n];\n\nexport default Puzzle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst QrCode: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '5', height: '5', x: '3', y: '3', rx: '1' }],\n ['rect', { width: '5', height: '5', x: '16', y: '3', rx: '1' }],\n ['rect', { width: '5', height: '5', x: '3', y: '16', rx: '1' }],\n ['path', { d: 'M21 16h-3a2 2 0 0 0-2 2v3' }],\n ['path', { d: 'M21 21v.01' }],\n ['path', { d: 'M12 7v3a2 2 0 0 1-2 2H7' }],\n ['path', { d: 'M3 12h.01' }],\n ['path', { d: 'M12 3h.01' }],\n ['path', { d: 'M12 16v.01' }],\n ['path', { d: 'M16 12h1' }],\n ['path', { d: 'M21 12v.01' }],\n ['path', { d: 'M12 21v-1' }],\n ],\n];\n\nexport default QrCode;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Quote: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z',\n },\n ],\n [\n 'path',\n {\n d: 'M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z',\n },\n ],\n ],\n];\n\nexport default Quote;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst RadioReceiver: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M5 16v2' }],\n ['path', { d: 'M19 16v2' }],\n ['rect', { width: '20', height: '8', x: '2', y: '8', rx: '2' }],\n ['path', { d: 'M18 12h0' }],\n ],\n];\n\nexport default RadioReceiver;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst RadioTower: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4.9 16.1C1 12.2 1 5.8 4.9 1.9' }],\n ['path', { d: 'M7.8 4.7a6.14 6.14 0 0 0-.8 7.5' }],\n ['circle', { cx: '12', cy: '9', r: '2' }],\n ['path', { d: 'M16.2 4.8c2 2 2.26 5.11.8 7.47' }],\n ['path', { d: 'M19.1 1.9a9.96 9.96 0 0 1 0 14.1' }],\n ['path', { d: 'M9.5 18h5' }],\n ['path', { d: 'm8 22 4-11 4 11' }],\n ],\n];\n\nexport default RadioTower;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Radio: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4.9 19.1C1 15.2 1 8.8 4.9 4.9' }],\n ['path', { d: 'M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5' }],\n ['circle', { cx: '12', cy: '12', r: '2' }],\n ['path', { d: 'M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5' }],\n ['path', { d: 'M19.1 4.9C23 8.8 23 15.1 19.1 19' }],\n ],\n];\n\nexport default Radio;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Rat: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14 16.5v-.77a2.73 2.73 0 0 1 3.27-2.68l3.02.6a1.4 1.4 0 0 0 1.5-2.08l-1.63-2.8a3 3 0 1 0-3.35-4.82',\n },\n ],\n ['path', { d: 'M16 9h-.01' }],\n [\n 'path',\n {\n d: 'M17 5.12V5a3 3 0 1 0-5.24 2h-1A6.77 6.77 0 0 0 4 13.77C4 16.1 5.9 18 8.23 18H9',\n },\n ],\n ['path', { d: 'M13 22H4a2 2 0 1 1 0-4h12' }],\n [\n 'path',\n { d: 'M13.67 18c.21-.44.33-.94.33-1.45A3.65 3.65 0 0 0 10.26 13' },\n ],\n ],\n];\n\nexport default Rat;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Receipt: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4 2v20l2-1 2 1 2-1 2 1 2-1 2 1 2-1 2 1V2l-2 1-2-1-2 1-2-1-2 1-2-1-2 1-2-1Z',\n },\n ],\n ['path', { d: 'M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8' }],\n ['path', { d: 'M12 17V7' }],\n ],\n];\n\nexport default Receipt;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst RectangleHorizontal: IconNode = [\n 'svg',\n defaultAttributes,\n [['rect', { width: '20', height: '12', x: '2', y: '6', rx: '2' }]],\n];\n\nexport default RectangleHorizontal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst RectangleVertical: IconNode = [\n 'svg',\n defaultAttributes,\n [['rect', { width: '12', height: '20', x: '6', y: '2', rx: '2' }]],\n];\n\nexport default RectangleVertical;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Recycle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M7 19H4.815a1.83 1.83 0 0 1-1.57-.881 1.785 1.785 0 0 1-.004-1.784L7.196 9.5',\n },\n ],\n [\n 'path',\n {\n d: 'M11 19h8.203a1.83 1.83 0 0 0 1.556-.89 1.784 1.784 0 0 0 0-1.775l-1.226-2.12',\n },\n ],\n ['path', { d: 'm14 16-3 3 3 3' }],\n ['path', { d: 'M8.293 13.596 7.196 9.5 3.1 10.598' }],\n [\n 'path',\n {\n d: 'm9.344 5.811 1.093-1.892A1.83 1.83 0 0 1 11.985 3a1.784 1.784 0 0 1 1.546.888l3.943 6.843',\n },\n ],\n ['path', { d: 'm13.378 9.633 4.096 1.098 1.097-4.096' }],\n ],\n];\n\nexport default Recycle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Redo2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm15 14 5-5-5-5' }],\n ['path', { d: 'M20 9H9.5A5.5 5.5 0 0 0 4 14.5v0A5.5 5.5 0 0 0 9.5 20H13' }],\n ],\n];\n\nexport default Redo2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Redo: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M21 7v6h-6' }],\n ['path', { d: 'M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7' }],\n ],\n];\n\nexport default Redo;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst RefreshCcw: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 2v6h6' }],\n ['path', { d: 'M21 12A9 9 0 0 0 6 5.3L3 8' }],\n ['path', { d: 'M21 22v-6h-6' }],\n ['path', { d: 'M3 12a9 9 0 0 0 15 6.7l3-2.7' }],\n ],\n];\n\nexport default RefreshCcw;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst RefreshCw: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M21 2v6h-6' }],\n ['path', { d: 'M3 12a9 9 0 0 1 15-6.7L21 8' }],\n ['path', { d: 'M3 22v-6h6' }],\n ['path', { d: 'M21 12a9 9 0 0 1-15 6.7L3 16' }],\n ],\n];\n\nexport default RefreshCw;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Refrigerator: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M5 6a4 4 0 0 1 4-4h6a4 4 0 0 1 4 4v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6Z',\n },\n ],\n ['path', { d: 'M5 10h14' }],\n ['path', { d: 'M15 7v6' }],\n ],\n];\n\nexport default Refrigerator;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Regex: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M17 3v10' }],\n ['path', { d: 'm12.67 5.5 8.66 5' }],\n ['path', { d: 'm12.67 10.5 8.66-5' }],\n [\n 'path',\n {\n d: 'M9 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2v-2z',\n },\n ],\n ],\n];\n\nexport default Regex;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst RemoveFormatting: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 7V4h16v3' }],\n ['path', { d: 'M5 20h6' }],\n ['path', { d: 'M13 4 8 20' }],\n ['path', { d: 'm15 15 5 5' }],\n ['path', { d: 'm20 15-5 5' }],\n ],\n];\n\nexport default RemoveFormatting;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Repeat1: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm17 2 4 4-4 4' }],\n ['path', { d: 'M3 11v-1a4 4 0 0 1 4-4h14' }],\n ['path', { d: 'm7 22-4-4 4-4' }],\n ['path', { d: 'M21 13v1a4 4 0 0 1-4 4H3' }],\n ['path', { d: 'M11 10h1v4' }],\n ],\n];\n\nexport default Repeat1;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Repeat2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm2 9 3-3 3 3' }],\n ['path', { d: 'M13 18H7a2 2 0 0 1-2-2V6' }],\n ['path', { d: 'm22 15-3 3-3-3' }],\n ['path', { d: 'M11 6h6a2 2 0 0 1 2 2v10' }],\n ],\n];\n\nexport default Repeat2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Repeat: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm17 2 4 4-4 4' }],\n ['path', { d: 'M3 11v-1a4 4 0 0 1 4-4h14' }],\n ['path', { d: 'm7 22-4-4 4-4' }],\n ['path', { d: 'M21 13v1a4 4 0 0 1-4 4H3' }],\n ],\n];\n\nexport default Repeat;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ReplaceAll: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { x: '2', y: '14', width: '8', height: '8', rx: '2' }],\n ['path', { d: 'm3 7 3 3 3-3' }],\n ['path', { d: 'M6 10V5a2.95 2.95 0 0 1 3-3h1' }],\n ['path', { d: 'M22 8a2 2 0 0 1-2 2' }],\n ['path', { d: 'M20 2a2 2 0 0 1 2 2' }],\n ['path', { d: 'M14 4a2 2 0 0 1 2-2' }],\n ['path', { d: 'M16 10a2 2 0 0 1-2-2' }],\n ['path', { d: 'M14 14a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2' }],\n ['path', { d: 'M20 14a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2' }],\n ],\n];\n\nexport default ReplaceAll;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Replace: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { x: '2', y: '14', width: '8', height: '8', rx: '2' }],\n ['path', { d: 'm3 7 3 3 3-3' }],\n ['path', { d: 'M6 10V5a2.95 2.95 0 0 1 3-3h1' }],\n ['path', { d: 'M22 8a2 2 0 0 1-2 2' }],\n ['path', { d: 'M20 2a2 2 0 0 1 2 2' }],\n ['path', { d: 'M14 4a2 2 0 0 1 2-2' }],\n ['path', { d: 'M16 10a2 2 0 0 1-2-2' }],\n ],\n];\n\nexport default Replace;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ReplyAll: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '7 17 2 12 7 7' }],\n ['polyline', { points: '12 17 7 12 12 7' }],\n ['path', { d: 'M22 18v-2a4 4 0 0 0-4-4H7' }],\n ],\n];\n\nexport default ReplyAll;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Reply: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '9 17 4 12 9 7' }],\n ['path', { d: 'M20 18v-2a4 4 0 0 0-4-4H4' }],\n ],\n];\n\nexport default Reply;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Rewind: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polygon', { points: '11 19 2 12 11 5 11 19' }],\n ['polygon', { points: '22 19 13 12 22 5 22 19' }],\n ],\n];\n\nexport default Rewind;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Rocket: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z',\n },\n ],\n [\n 'path',\n {\n d: 'm12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z',\n },\n ],\n ['path', { d: 'M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0' }],\n ['path', { d: 'M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5' }],\n ],\n];\n\nexport default Rocket;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst RockingChair: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '3.5 2 6.5 12.5 18 12.5' }],\n ['line', { x1: '9.5', x2: '5.5', y1: '12.5', y2: '20' }],\n ['line', { x1: '15', x2: '18.5', y1: '12.5', y2: '20' }],\n ['path', { d: 'M2.75 18a13 13 0 0 0 18.5 0' }],\n ],\n];\n\nexport default RockingChair;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Rotate3d: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M16.466 7.5C15.643 4.237 13.952 2 12 2 9.239 2 7 6.477 7 12s2.239 10 5 10c.342 0 .677-.069 1-.2',\n },\n ],\n ['path', { d: 'm15.194 13.707 3.814 1.86-1.86 3.814' }],\n [\n 'path',\n {\n d: 'M19 15.57c-1.804.885-4.274 1.43-7 1.43-5.523 0-10-2.239-10-5s4.477-5 10-5c4.838 0 8.873 1.718 9.8 4',\n },\n ],\n ],\n];\n\nexport default Rotate3d;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst RotateCcw: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 2v6h6' }],\n ['path', { d: 'M3 13a9 9 0 1 0 3-7.7L3 8' }],\n ],\n];\n\nexport default RotateCcw;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst RotateCw: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M21 2v6h-6' }],\n ['path', { d: 'M21 13a9 9 0 1 1-3-7.7L21 8' }],\n ],\n];\n\nexport default RotateCw;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Router: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '8', x: '2', y: '14', rx: '2' }],\n ['path', { d: 'M6.01 18H6' }],\n ['path', { d: 'M10.01 18H10' }],\n ['path', { d: 'M15 10v4' }],\n ['path', { d: 'M17.84 7.17a4 4 0 0 0-5.66 0' }],\n ['path', { d: 'M20.66 4.34a8 8 0 0 0-11.31 0' }],\n ],\n];\n\nexport default Router;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Rss: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 11a9 9 0 0 1 9 9' }],\n ['path', { d: 'M4 4a16 16 0 0 1 16 16' }],\n ['circle', { cx: '5', cy: '19', r: '1' }],\n ],\n];\n\nexport default Rss;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Ruler: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M21.3 8.7 8.7 21.3c-1 1-2.5 1-3.4 0l-2.6-2.6c-1-1-1-2.5 0-3.4L15.3 2.7c1-1 2.5-1 3.4 0l2.6 2.6c1 1 1 2.5 0 3.4Z',\n },\n ],\n ['path', { d: 'm7.5 10.5 2 2' }],\n ['path', { d: 'm10.5 7.5 2 2' }],\n ['path', { d: 'm13.5 4.5 2 2' }],\n ['path', { d: 'm4.5 13.5 2 2' }],\n ],\n];\n\nexport default Ruler;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst RussianRuble: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M14 11c5.333 0 5.333-8 0-8' }],\n ['path', { d: 'M6 11h8' }],\n ['path', { d: 'M6 15h8' }],\n ['path', { d: 'M9 21V3' }],\n ['path', { d: 'M9 3h5' }],\n ],\n];\n\nexport default RussianRuble;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Sailboat: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M22 18H2a4 4 0 0 0 4 4h12a4 4 0 0 0 4-4Z' }],\n ['path', { d: 'M21 14 10 2 3 14h18Z' }],\n ['path', { d: 'M10 2v16' }],\n ],\n];\n\nexport default Sailboat;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Salad: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M7 21h10' }],\n ['path', { d: 'M12 21a9 9 0 0 0 9-9H3a9 9 0 0 0 9 9Z' }],\n [\n 'path',\n {\n d: 'M11.38 12a2.4 2.4 0 0 1-.4-4.77 2.4 2.4 0 0 1 3.2-2.77 2.4 2.4 0 0 1 3.47-.63 2.4 2.4 0 0 1 3.37 3.37 2.4 2.4 0 0 1-1.1 3.7 2.51 2.51 0 0 1 .03 1.1',\n },\n ],\n ['path', { d: 'm13 12 4-4' }],\n ['path', { d: 'M10.9 7.25A3.99 3.99 0 0 0 4 10c0 .73.2 1.41.54 2' }],\n ],\n];\n\nexport default Salad;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Sandwich: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 11v3a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1v-3' }],\n [\n 'path',\n {\n d: 'M12 19H4a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-3.83',\n },\n ],\n ['path', { d: 'm3 11 7.77-6.04a2 2 0 0 1 2.46 0L21 11H3Z' }],\n ['path', { d: 'M12.97 19.77 7 15h12.5l-3.75 4.5a2 2 0 0 1-2.78.27Z' }],\n ],\n];\n\nexport default Sandwich;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SaveAll: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M6 4a2 2 0 0 1 2-2h10l4 4v10.2a2 2 0 0 1-2 1.8H8a2 2 0 0 1-2-2Z' },\n ],\n ['path', { d: 'M10 2v4h6' }],\n ['path', { d: 'M18 18v-7h-8v7' }],\n ['path', { d: 'M18 22H4a2 2 0 0 1-2-2V6' }],\n ],\n];\n\nexport default SaveAll;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Save: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z' },\n ],\n ['polyline', { points: '17 21 17 13 7 13 7 21' }],\n ['polyline', { points: '7 3 7 8 15 8' }],\n ],\n];\n\nexport default Save;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Scale3d: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '19', cy: '19', r: '2' }],\n ['circle', { cx: '5', cy: '5', r: '2' }],\n ['path', { d: 'M5 7v12h12' }],\n ['path', { d: 'm5 19 6-6' }],\n ],\n];\n\nexport default Scale3d;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Scale: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z' }],\n ['path', { d: 'm2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z' }],\n ['path', { d: 'M7 21h10' }],\n ['path', { d: 'M12 3v18' }],\n ['path', { d: 'M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2' }],\n ],\n];\n\nexport default Scale;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Scaling: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M21 3 9 15' }],\n ['path', { d: 'M12 3H3v18h18v-9' }],\n ['path', { d: 'M16 3h5v5' }],\n ['path', { d: 'M14 15H9v-5' }],\n ],\n];\n\nexport default Scaling;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ScanFace: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 7V5a2 2 0 0 1 2-2h2' }],\n ['path', { d: 'M17 3h2a2 2 0 0 1 2 2v2' }],\n ['path', { d: 'M21 17v2a2 2 0 0 1-2 2h-2' }],\n ['path', { d: 'M7 21H5a2 2 0 0 1-2-2v-2' }],\n ['path', { d: 'M8 14s1.5 2 4 2 4-2 4-2' }],\n ['path', { d: 'M9 9h.01' }],\n ['path', { d: 'M15 9h.01' }],\n ],\n];\n\nexport default ScanFace;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ScanLine: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 7V5a2 2 0 0 1 2-2h2' }],\n ['path', { d: 'M17 3h2a2 2 0 0 1 2 2v2' }],\n ['path', { d: 'M21 17v2a2 2 0 0 1-2 2h-2' }],\n ['path', { d: 'M7 21H5a2 2 0 0 1-2-2v-2' }],\n ['line', { x1: '7', x2: '17', y1: '12', y2: '12' }],\n ],\n];\n\nexport default ScanLine;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Scan: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 7V5a2 2 0 0 1 2-2h2' }],\n ['path', { d: 'M17 3h2a2 2 0 0 1 2 2v2' }],\n ['path', { d: 'M21 17v2a2 2 0 0 1-2 2h-2' }],\n ['path', { d: 'M7 21H5a2 2 0 0 1-2-2v-2' }],\n ],\n];\n\nexport default Scan;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst School2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '10', r: '1' }],\n [\n 'path',\n { d: 'M22 20V8h-4l-6-4-6 4H2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2Z' },\n ],\n ['path', { d: 'M6 17v.01' }],\n ['path', { d: 'M6 13v.01' }],\n ['path', { d: 'M18 17v.01' }],\n ['path', { d: 'M18 13v.01' }],\n ['path', { d: 'M14 22v-5a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v5' }],\n ],\n];\n\nexport default School2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst School: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm4 6 8-4 8 4' }],\n ['path', { d: 'm18 10 4 2v8a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-8l4-2' }],\n ['path', { d: 'M14 22v-4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v4' }],\n ['path', { d: 'M18 5v17' }],\n ['path', { d: 'M6 5v17' }],\n ['circle', { cx: '12', cy: '9', r: '2' }],\n ],\n];\n\nexport default School;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Scissors: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '6', cy: '6', r: '3' }],\n ['circle', { cx: '6', cy: '18', r: '3' }],\n ['line', { x1: '20', x2: '8.12', y1: '4', y2: '15.88' }],\n ['line', { x1: '14.47', x2: '20', y1: '14.48', y2: '20' }],\n ['line', { x1: '8.12', x2: '12', y1: '8.12', y2: '12' }],\n ],\n];\n\nexport default Scissors;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ScreenShareOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M13 3H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-3' },\n ],\n ['path', { d: 'M8 21h8' }],\n ['path', { d: 'M12 17v4' }],\n ['path', { d: 'm22 3-5 5' }],\n ['path', { d: 'm17 3 5 5' }],\n ],\n];\n\nexport default ScreenShareOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ScreenShare: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M13 3H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-3' },\n ],\n ['path', { d: 'M8 21h8' }],\n ['path', { d: 'M12 17v4' }],\n ['path', { d: 'm17 8 5-5' }],\n ['path', { d: 'M17 3h5v5' }],\n ],\n];\n\nexport default ScreenShare;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Scroll: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M10 17v2a2 2 0 0 1-2 2v0a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v3h3',\n },\n ],\n ['path', { d: 'M22 17v2a2 2 0 0 1-2 2H8' }],\n ['path', { d: 'M19 17V5a2 2 0 0 0-2-2H4' }],\n ['path', { d: 'M22 17H10' }],\n ],\n];\n\nexport default Scroll;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Search: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '11', cy: '11', r: '8' }],\n ['line', { x1: '21', x2: '16.65', y1: '21', y2: '16.65' }],\n ],\n];\n\nexport default Search;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Send: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '22', x2: '11', y1: '2', y2: '13' }],\n ['polygon', { points: '22 2 15 22 11 13 2 9 22 2' }],\n ],\n];\n\nexport default Send;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SeparatorHorizontal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '3', x2: '21', y1: '12', y2: '12' }],\n ['polyline', { points: '8 8 12 4 16 8' }],\n ['polyline', { points: '16 16 12 20 8 16' }],\n ],\n];\n\nexport default SeparatorHorizontal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SeparatorVertical: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '12', x2: '12', y1: '3', y2: '21' }],\n ['polyline', { points: '8 8 4 12 8 16' }],\n ['polyline', { points: '16 16 20 12 16 8' }],\n ],\n];\n\nexport default SeparatorVertical;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ServerCog: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-1',\n },\n ],\n [\n 'path',\n {\n d: 'M5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-1',\n },\n ],\n ['path', { d: 'M6 6h.01' }],\n ['path', { d: 'M6 18h.01' }],\n ['circle', { cx: '12', cy: '12', r: '3' }],\n ['path', { d: 'M12 8v1' }],\n ['path', { d: 'M12 15v1' }],\n ['path', { d: 'M16 12h-1' }],\n ['path', { d: 'M9 12H8' }],\n ['path', { d: 'm15 9-.88.88' }],\n ['path', { d: 'M9.88 14.12 9 15' }],\n ['path', { d: 'm15 15-.88-.88' }],\n ['path', { d: 'M9.88 9.88 9 9' }],\n ],\n];\n\nexport default ServerCog;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ServerCrash: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M6 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-2',\n },\n ],\n [\n 'path',\n {\n d: 'M6 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-2',\n },\n ],\n ['path', { d: 'M6 6h.01' }],\n ['path', { d: 'M6 18h.01' }],\n ['path', { d: 'm13 6-4 6h6l-4 6' }],\n ],\n];\n\nexport default ServerCrash;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ServerOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M7 2h13a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-5' }],\n ['path', { d: 'M10 10 2.5 2.5C2 2 2 2.5 2 5v3a2 2 0 0 0 2 2h6z' }],\n ['path', { d: 'M22 17v-1a2 2 0 0 0-2-2h-1' }],\n ['path', { d: 'M4 14a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16.5l1-.5.5.5-8-8H4z' }],\n ['path', { d: 'M6 18h.01' }],\n ['path', { d: 'm2 2 20 20' }],\n ],\n];\n\nexport default ServerOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Server: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '8', x: '2', y: '2', rx: '2', ry: '2' }],\n ['rect', { width: '20', height: '8', x: '2', y: '14', rx: '2', ry: '2' }],\n ['line', { x1: '6', x2: '6.01', y1: '6', y2: '6' }],\n ['line', { x1: '6', x2: '6.01', y1: '18', y2: '18' }],\n ],\n];\n\nexport default Server;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Settings2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M20 7h-9' }],\n ['path', { d: 'M14 17H5' }],\n ['circle', { cx: '17', cy: '17', r: '3' }],\n ['circle', { cx: '7', cy: '7', r: '3' }],\n ],\n];\n\nexport default Settings2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Settings: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3' }],\n ],\n];\n\nexport default Settings;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Share2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '18', cy: '5', r: '3' }],\n ['circle', { cx: '6', cy: '12', r: '3' }],\n ['circle', { cx: '18', cy: '19', r: '3' }],\n ['line', { x1: '8.59', x2: '15.42', y1: '13.51', y2: '17.49' }],\n ['line', { x1: '15.41', x2: '8.59', y1: '6.51', y2: '10.49' }],\n ],\n];\n\nexport default Share2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Share: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8' }],\n ['polyline', { points: '16 6 12 2 8 6' }],\n ['line', { x1: '12', x2: '12', y1: '2', y2: '15' }],\n ],\n];\n\nexport default Share;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Sheet: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['line', { x1: '3', x2: '21', y1: '9', y2: '9' }],\n ['line', { x1: '3', x2: '21', y1: '15', y2: '15' }],\n ['line', { x1: '9', x2: '9', y1: '9', y2: '21' }],\n ['line', { x1: '15', x2: '15', y1: '9', y2: '21' }],\n ],\n];\n\nexport default Sheet;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ShieldAlert: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z' }],\n ['path', { d: 'M12 8v4' }],\n ['path', { d: 'M12 16h.01' }],\n ],\n];\n\nexport default ShieldAlert;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ShieldCheck: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z' }],\n ['path', { d: 'm9 12 2 2 4-4' }],\n ],\n];\n\nexport default ShieldCheck;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ShieldClose: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z' }],\n ['line', { x1: '9.5', x2: '14.5', y1: '9', y2: '14' }],\n ['line', { x1: '14.5', x2: '9.5', y1: '9', y2: '14' }],\n ],\n];\n\nexport default ShieldClose;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ShieldOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M19.69 14a6.9 6.9 0 0 0 .31-2V5l-8-3-3.16 1.18' }],\n [\n 'path',\n { d: 'M4.73 4.73 4 5v7c0 6 8 10 8 10a20.29 20.29 0 0 0 5.62-4.38' },\n ],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default ShieldOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ShieldQuestion: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 17h.01' }],\n ['path', { d: 'M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10' }],\n ['path', { d: 'M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3' }],\n ],\n];\n\nexport default ShieldQuestion;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Shield: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z' }]],\n];\n\nexport default Shield;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Ship: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1 .6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1',\n },\n ],\n [\n 'path',\n { d: 'M19.38 20A11.6 11.6 0 0 0 21 14l-9-4-9 4c0 2.9.94 5.34 2.81 7.76' },\n ],\n ['path', { d: 'M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6' }],\n ['path', { d: 'M12 10v4' }],\n ['path', { d: 'M12 2v3' }],\n ],\n];\n\nexport default Ship;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Shirt: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M20.38 3.46 16 2a4 4 0 0 1-8 0L3.62 3.46a2 2 0 0 0-1.34 2.23l.58 3.47a1 1 0 0 0 .99.84H6v10c0 1.1.9 2 2 2h8a2 2 0 0 0 2-2V10h2.15a1 1 0 0 0 .99-.84l.58-3.47a2 2 0 0 0-1.34-2.23z',\n },\n ],\n ],\n];\n\nexport default Shirt;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ShoppingBag: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z' }],\n ['line', { x1: '3', x2: '21', y1: '6', y2: '6' }],\n ['path', { d: 'M16 10a4 4 0 0 1-8 0' }],\n ],\n];\n\nexport default ShoppingBag;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ShoppingCart: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '8', cy: '21', r: '1' }],\n ['circle', { cx: '19', cy: '21', r: '1' }],\n [\n 'path',\n {\n d: 'M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12',\n },\n ],\n ],\n];\n\nexport default ShoppingCart;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Shovel: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 22v-5l5-5 5 5-5 5z' }],\n ['path', { d: 'M9.5 14.5 16 8' }],\n [\n 'path',\n {\n d: 'm17 2 5 5-.5.5a3.53 3.53 0 0 1-5 0s0 0 0 0a3.53 3.53 0 0 1 0-5L17 2',\n },\n ],\n ],\n];\n\nexport default Shovel;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ShowerHead: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm4 4 2.5 2.5' }],\n ['path', { d: 'M13.5 6.5a4.95 4.95 0 0 0-7 7' }],\n ['path', { d: 'M15 5 5 15' }],\n ['path', { d: 'M14 17v.01' }],\n ['path', { d: 'M10 16v.01' }],\n ['path', { d: 'M13 13v.01' }],\n ['path', { d: 'M16 10v.01' }],\n ['path', { d: 'M11 20v.01' }],\n ['path', { d: 'M17 14v.01' }],\n ['path', { d: 'M20 11v.01' }],\n ],\n];\n\nexport default ShowerHead;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Shrink: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm15 15 6 6m-6-6v4.8m0-4.8h4.8' }],\n ['path', { d: 'M9 19.8V15m0 0H4.2M9 15l-6 6' }],\n ['path', { d: 'M15 4.2V9m0 0h4.8M15 9l6-6' }],\n ['path', { d: 'M9 4.2V9m0 0H4.2M9 9 3 3' }],\n ],\n];\n\nexport default Shrink;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Shrub: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 22v-7l-2-2' }],\n [\n 'path',\n {\n d: 'M17 8v.8A6 6 0 0 1 13.8 20v0H10v0A6.5 6.5 0 0 1 7 8h0a5 5 0 0 1 10 0Z',\n },\n ],\n ['path', { d: 'm14 14-2 2' }],\n ],\n];\n\nexport default Shrub;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Shuffle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '16 3 21 3 21 8' }],\n ['line', { x1: '4', x2: '21', y1: '20', y2: '3' }],\n ['polyline', { points: '21 16 21 21 16 21' }],\n ['line', { x1: '15', x2: '21', y1: '15', y2: '21' }],\n ['line', { x1: '4', x2: '9', y1: '4', y2: '9' }],\n ],\n];\n\nexport default Shuffle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SidebarClose: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['path', { d: 'M9 3v18' }],\n ['path', { d: 'm16 15-3-3 3-3' }],\n ],\n];\n\nexport default SidebarClose;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SidebarOpen: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['path', { d: 'M9 3v18' }],\n ['path', { d: 'm14 9 3 3-3 3' }],\n ],\n];\n\nexport default SidebarOpen;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Sidebar: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['line', { x1: '9', x2: '9', y1: '3', y2: '21' }],\n ],\n];\n\nexport default Sidebar;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Sigma: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M18 7V4H6l6 8-6 8h12v-3' }]],\n];\n\nexport default Sigma;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SignalHigh: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 20h.01' }],\n ['path', { d: 'M7 20v-4' }],\n ['path', { d: 'M12 20v-8' }],\n ['path', { d: 'M17 20V8' }],\n ],\n];\n\nexport default SignalHigh;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SignalLow: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 20h.01' }],\n ['path', { d: 'M7 20v-4' }],\n ],\n];\n\nexport default SignalLow;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SignalMedium: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 20h.01' }],\n ['path', { d: 'M7 20v-4' }],\n ['path', { d: 'M12 20v-8' }],\n ],\n];\n\nexport default SignalMedium;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SignalZero: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M2 20h.01' }]],\n];\n\nexport default SignalZero;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Signal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 20h.01' }],\n ['path', { d: 'M7 20v-4' }],\n ['path', { d: 'M12 20v-8' }],\n ['path', { d: 'M17 20V8' }],\n ['path', { d: 'M22 4v16' }],\n ],\n];\n\nexport default Signal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Siren: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M7 12a5 5 0 0 1 5-5v0a5 5 0 0 1 5 5v6H7v-6Z' }],\n ['path', { d: 'M5 20a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v2H5v-2Z' }],\n ['path', { d: 'M21 12h1' }],\n ['path', { d: 'M18.5 4.5 18 5' }],\n ['path', { d: 'M2 12h1' }],\n ['path', { d: 'M12 2v1' }],\n ['path', { d: 'm4.929 4.929.707.707' }],\n ['path', { d: 'M12 12v6' }],\n ],\n];\n\nexport default Siren;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SkipBack: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polygon', { points: '19 20 9 12 19 4 19 20' }],\n ['line', { x1: '5', x2: '5', y1: '19', y2: '5' }],\n ],\n];\n\nexport default SkipBack;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SkipForward: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polygon', { points: '5 4 15 12 5 20 5 4' }],\n ['line', { x1: '19', x2: '19', y1: '5', y2: '19' }],\n ],\n];\n\nexport default SkipForward;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Skull: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '9', cy: '12', r: '1' }],\n ['circle', { cx: '15', cy: '12', r: '1' }],\n ['path', { d: 'M8 20v2h8v-2' }],\n ['path', { d: 'm12.5 17-.5-1-.5 1h1z' }],\n [\n 'path',\n { d: 'M16 20a2 2 0 0 0 1.56-3.25 8 8 0 1 0-11.12 0A2 2 0 0 0 8 20' },\n ],\n ],\n];\n\nexport default Skull;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Slack: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '3', height: '8', x: '13', y: '2', rx: '1.5' }],\n ['path', { d: 'M19 8.5V10h1.5A1.5 1.5 0 1 0 19 8.5' }],\n ['rect', { width: '3', height: '8', x: '8', y: '14', rx: '1.5' }],\n ['path', { d: 'M5 15.5V14H3.5A1.5 1.5 0 1 0 5 15.5' }],\n ['rect', { width: '8', height: '3', x: '14', y: '13', rx: '1.5' }],\n ['path', { d: 'M15.5 19H14v1.5a1.5 1.5 0 1 0 1.5-1.5' }],\n ['rect', { width: '8', height: '3', x: '2', y: '8', rx: '1.5' }],\n ['path', { d: 'M8.5 5H10V3.5A1.5 1.5 0 1 0 8.5 5' }],\n ],\n];\n\nexport default Slack;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Slice: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm8 14-6 6h9v-3' }],\n ['path', { d: 'M18.37 3.63 8 14l3 3L21.37 6.63a2.12 2.12 0 1 0-3-3Z' }],\n ],\n];\n\nexport default Slice;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SlidersHorizontal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '21', x2: '14', y1: '4', y2: '4' }],\n ['line', { x1: '10', x2: '3', y1: '4', y2: '4' }],\n ['line', { x1: '21', x2: '12', y1: '12', y2: '12' }],\n ['line', { x1: '8', x2: '3', y1: '12', y2: '12' }],\n ['line', { x1: '21', x2: '16', y1: '20', y2: '20' }],\n ['line', { x1: '12', x2: '3', y1: '20', y2: '20' }],\n ['line', { x1: '14', x2: '14', y1: '2', y2: '6' }],\n ['line', { x1: '8', x2: '8', y1: '10', y2: '14' }],\n ['line', { x1: '16', x2: '16', y1: '18', y2: '22' }],\n ],\n];\n\nexport default SlidersHorizontal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Sliders: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '4', x2: '4', y1: '21', y2: '14' }],\n ['line', { x1: '4', x2: '4', y1: '10', y2: '3' }],\n ['line', { x1: '12', x2: '12', y1: '21', y2: '12' }],\n ['line', { x1: '12', x2: '12', y1: '8', y2: '3' }],\n ['line', { x1: '20', x2: '20', y1: '21', y2: '16' }],\n ['line', { x1: '20', x2: '20', y1: '12', y2: '3' }],\n ['line', { x1: '2', x2: '6', y1: '14', y2: '14' }],\n ['line', { x1: '10', x2: '14', y1: '8', y2: '8' }],\n ['line', { x1: '18', x2: '22', y1: '16', y2: '16' }],\n ],\n];\n\nexport default Sliders;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SmartphoneCharging: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '14', height: '20', x: '5', y: '2', rx: '2', ry: '2' }],\n ['path', { d: 'M12.667 8 10 12h4l-2.667 4' }],\n ],\n];\n\nexport default SmartphoneCharging;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SmartphoneNfc: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '7', height: '12', x: '2', y: '6', rx: '1' }],\n ['path', { d: 'M13 8.32a7.43 7.43 0 0 1 0 7.36' }],\n ['path', { d: 'M16.46 6.21a11.76 11.76 0 0 1 0 11.58' }],\n ['path', { d: 'M19.91 4.1a15.91 15.91 0 0 1 .01 15.8' }],\n ],\n];\n\nexport default SmartphoneNfc;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Smartphone: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '14', height: '20', x: '5', y: '2', rx: '2', ry: '2' }],\n ['path', { d: 'M12 18h.01' }],\n ],\n];\n\nexport default Smartphone;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SmilePlus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M22 11v1a10 10 0 1 1-9-10' }],\n ['path', { d: 'M8 14s1.5 2 4 2 4-2 4-2' }],\n ['line', { x1: '9', x2: '9.01', y1: '9', y2: '9' }],\n ['line', { x1: '15', x2: '15.01', y1: '9', y2: '9' }],\n ['path', { d: 'M16 5h6' }],\n ['path', { d: 'M19 2v6' }],\n ],\n];\n\nexport default SmilePlus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Smile: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M8 14s1.5 2 4 2 4-2 4-2' }],\n ['line', { x1: '9', x2: '9.01', y1: '9', y2: '9' }],\n ['line', { x1: '15', x2: '15.01', y1: '9', y2: '9' }],\n ],\n];\n\nexport default Smile;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Snowflake: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '2', x2: '22', y1: '12', y2: '12' }],\n ['line', { x1: '12', x2: '12', y1: '2', y2: '22' }],\n ['path', { d: 'm20 16-4-4 4-4' }],\n ['path', { d: 'm4 8 4 4-4 4' }],\n ['path', { d: 'm16 4-4 4-4-4' }],\n ['path', { d: 'm8 20 4-4 4 4' }],\n ],\n];\n\nexport default Snowflake;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Sofa: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M20 9V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v3' }],\n [\n 'path',\n {\n d: 'M2 11v5a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5a2 2 0 0 0-4 0v2H6v-2a2 2 0 0 0-4 0Z',\n },\n ],\n ['path', { d: 'M4 18v2' }],\n ['path', { d: 'M20 18v2' }],\n ['path', { d: 'M12 4v9' }],\n ],\n];\n\nexport default Sofa;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Soup: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 21a9 9 0 0 0 9-9H3a9 9 0 0 0 9 9Z' }],\n ['path', { d: 'M7 21h10' }],\n ['path', { d: 'M19.5 12 22 6' }],\n [\n 'path',\n {\n d: 'M16.25 3c.27.1.8.53.75 1.36-.06.83-.93 1.2-1 2.02-.05.78.34 1.24.73 1.62',\n },\n ],\n [\n 'path',\n {\n d: 'M11.25 3c.27.1.8.53.74 1.36-.05.83-.93 1.2-.98 2.02-.06.78.33 1.24.72 1.62',\n },\n ],\n [\n 'path',\n {\n d: 'M6.25 3c.27.1.8.53.75 1.36-.06.83-.93 1.2-1 2.02-.05.78.34 1.24.74 1.62',\n },\n ],\n ],\n];\n\nexport default Soup;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Space: IconNode = [\n 'svg',\n defaultAttributes,\n [['polyline', { points: '22,17 22,19 2,19 2,17' }]],\n];\n\nexport default Space;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Speaker: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '16', height: '20', x: '4', y: '2', rx: '2', ry: '2' }],\n ['circle', { cx: '12', cy: '14', r: '4' }],\n ['line', { x1: '12', x2: '12.01', y1: '6', y2: '6' }],\n ],\n];\n\nexport default Speaker;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Spline: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '19', cy: '5', r: '2' }],\n ['circle', { cx: '5', cy: '19', r: '2' }],\n ['path', { d: 'M5 17A12 12 0 0 1 17 5' }],\n ],\n];\n\nexport default Spline;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SplitSquareHorizontal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M8 19H5c-1 0-2-1-2-2V7c0-1 1-2 2-2h3' }],\n ['path', { d: 'M16 5h3c1 0 2 1 2 2v10c0 1-1 2-2 2h-3' }],\n ['line', { x1: '12', x2: '12', y1: '4', y2: '20' }],\n ],\n];\n\nexport default SplitSquareHorizontal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SplitSquareVertical: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M5 8V5c0-1 1-2 2-2h10c1 0 2 1 2 2v3' }],\n ['path', { d: 'M19 16v3c0 1-1 2-2 2H7c-1 0-2-1-2-2v-3' }],\n ['line', { x1: '4', x2: '20', y1: '12', y2: '12' }],\n ],\n];\n\nexport default SplitSquareVertical;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Sprout: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M7 20h10' }],\n ['path', { d: 'M10 20c5.5-2.5.8-6.4 3-10' }],\n [\n 'path',\n {\n d: 'M9.5 9.4c1.1.8 1.8 2.2 2.3 3.7-2 .4-3.5.4-4.8-.3-1.2-.6-2.3-1.9-3-4.2 2.8-.5 4.4 0 5.5.8z',\n },\n ],\n [\n 'path',\n {\n d: 'M14.1 6a7 7 0 0 0-1.1 4c1.9-.1 3.3-.6 4.3-1.4 1-1 1.6-2.3 1.7-4.6-2.7.1-4 1-4.9 2z',\n },\n ],\n ],\n];\n\nexport default Sprout;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Square: IconNode = [\n 'svg',\n defaultAttributes,\n [['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }]],\n];\n\nexport default Square;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Stamp: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M5 22h14' }],\n [\n 'path',\n {\n d: 'M19.27 13.73A2.5 2.5 0 0 0 17.5 13h-11A2.5 2.5 0 0 0 4 15.5V17a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-1.5c0-.66-.26-1.3-.73-1.77Z',\n },\n ],\n [\n 'path',\n {\n d: 'M14 13V8.5C14 7 15 7 15 5a3 3 0 0 0-3-3c-1.66 0-3 1-3 3s1 2 1 3.5V13',\n },\n ],\n ],\n];\n\nexport default Stamp;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst StarHalf: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M12 17.8 5.8 21 7 14.1 2 9.3l7-1L12 2' }]],\n];\n\nexport default StarHalf;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst StarOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M8.34 8.34 2 9.27l5 4.87L5.82 21 12 17.77 18.18 21l-.59-3.43' },\n ],\n ['path', { d: 'M18.42 12.76 22 9.27l-6.91-1L12 2l-1.44 2.91' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default StarOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Star: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'polygon',\n {\n points:\n '12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2',\n },\n ],\n ],\n];\n\nexport default Star;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Stars: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'm12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z',\n },\n ],\n ['path', { d: 'M5 3v4' }],\n ['path', { d: 'M19 17v4' }],\n ['path', { d: 'M3 5h4' }],\n ['path', { d: 'M17 19h4' }],\n ],\n];\n\nexport default Stars;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst StepBack: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '18', x2: '18', y1: '20', y2: '4' }],\n ['polygon', { points: '14,20 4,12 14,4' }],\n ],\n];\n\nexport default StepBack;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst StepForward: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '6', x2: '6', y1: '4', y2: '20' }],\n ['polygon', { points: '10,4 20,12 10,20' }],\n ],\n];\n\nexport default StepForward;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Stethoscope: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M4.8 2.3A.3.3 0 1 0 5 2H4a2 2 0 0 0-2 2v5a6 6 0 0 0 6 6v0a6 6 0 0 0 6-6V4a2 2 0 0 0-2-2h-1a.2.2 0 1 0 .3.3',\n },\n ],\n ['path', { d: 'M8 15v1a6 6 0 0 0 6 6v0a6 6 0 0 0 6-6v-4' }],\n ['circle', { cx: '20', cy: '10', r: '2' }],\n ],\n];\n\nexport default Stethoscope;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Sticker: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M15.5 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2V8.5L15.5 3Z',\n },\n ],\n ['path', { d: 'M15 3v6h6' }],\n ['path', { d: 'M10 16s.8 1 2 1c1.3 0 2-1 2-1' }],\n ['path', { d: 'M8 13h0' }],\n ['path', { d: 'M16 13h0' }],\n ],\n];\n\nexport default Sticker;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst StickyNote: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M15.5 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2V8.5L15.5 3Z',\n },\n ],\n ['path', { d: 'M15 3v6h6' }],\n ],\n];\n\nexport default StickyNote;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst StopCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['rect', { width: '6', height: '6', x: '9', y: '9' }],\n ],\n];\n\nexport default StopCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Store: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'm2 7 4.41-4.41A2 2 0 0 1 7.83 2h8.34a2 2 0 0 1 1.42.59L22 7' },\n ],\n ['path', { d: 'M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8' }],\n ['path', { d: 'M15 22v-4a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v4' }],\n ['path', { d: 'M2 7h20' }],\n [\n 'path',\n {\n d: 'M22 7v3a2 2 0 0 1-2 2v0a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 16 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 12 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 8 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 4 12v0a2 2 0 0 1-2-2V7',\n },\n ],\n ],\n];\n\nexport default Store;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst StretchHorizontal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '6', x: '2', y: '4', rx: '2' }],\n ['rect', { width: '20', height: '6', x: '2', y: '14', rx: '2' }],\n ],\n];\n\nexport default StretchHorizontal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst StretchVertical: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '6', height: '20', x: '4', y: '2', rx: '2' }],\n ['rect', { width: '6', height: '20', x: '14', y: '2', rx: '2' }],\n ],\n];\n\nexport default StretchVertical;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Strikethrough: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M16 4H9a3 3 0 0 0-2.83 4' }],\n ['path', { d: 'M14 12a4 4 0 0 1 0 8H6' }],\n ['line', { x1: '4', x2: '20', y1: '12', y2: '12' }],\n ],\n];\n\nexport default Strikethrough;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Subscript: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm4 5 8 8' }],\n ['path', { d: 'm12 5-8 8' }],\n [\n 'path',\n {\n d: 'M20 19h-4c0-1.5.44-2 1.5-2.5S20 15.33 20 14c0-.47-.17-.93-.48-1.29a2.11 2.11 0 0 0-2.62-.44c-.42.24-.74.62-.9 1.07',\n },\n ],\n ],\n];\n\nexport default Subscript;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Subtitles: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M7 13h4' }],\n ['path', { d: 'M15 13h2' }],\n ['path', { d: 'M7 9h2' }],\n ['path', { d: 'M13 9h4' }],\n [\n 'path',\n { d: 'M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10Z' },\n ],\n ],\n];\n\nexport default Subtitles;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SunDim: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8z' }],\n ['path', { d: 'M12 4h.01' }],\n ['path', { d: 'M20 12h.01' }],\n ['path', { d: 'M12 20h.01' }],\n ['path', { d: 'M4 12h.01' }],\n ['path', { d: 'M17.657 6.343h.01' }],\n ['path', { d: 'M17.657 17.657h.01' }],\n ['path', { d: 'M6.343 17.657h.01' }],\n ['path', { d: 'M6.343 6.343h.01' }],\n ],\n];\n\nexport default SunDim;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SunMedium: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8z' }],\n ['path', { d: 'M12 3v1' }],\n ['path', { d: 'M12 20v1' }],\n ['path', { d: 'M3 12h1' }],\n ['path', { d: 'M20 12h1' }],\n ['path', { d: 'm18.364 5.636-.707.707' }],\n ['path', { d: 'm6.343 17.657-.707.707' }],\n ['path', { d: 'm5.636 5.636.707.707' }],\n ['path', { d: 'm17.657 17.657.707.707' }],\n ],\n];\n\nexport default SunMedium;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SunMoon: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8z' }],\n ['path', { d: 'M12 8a2.828 2.828 0 1 0 4 4' }],\n ['path', { d: 'M12 2v2' }],\n ['path', { d: 'M12 20v2' }],\n ['path', { d: 'm4.93 4.93 1.41 1.41' }],\n ['path', { d: 'm17.66 17.66 1.41 1.41' }],\n ['path', { d: 'M2 12h2' }],\n ['path', { d: 'M20 12h2' }],\n ['path', { d: 'm6.34 17.66-1.41 1.41' }],\n ['path', { d: 'm19.07 4.93-1.41 1.41' }],\n ],\n];\n\nexport default SunMoon;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SunSnow: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M10 9a3 3 0 1 0 0 6' }],\n ['path', { d: 'M2 12h1' }],\n ['path', { d: 'M14 21V3' }],\n ['path', { d: 'M10 4V3' }],\n ['path', { d: 'M10 21v-1' }],\n ['path', { d: 'm3.64 18.36.7-.7' }],\n ['path', { d: 'm4.34 6.34-.7-.7' }],\n ['path', { d: 'M14 12h8' }],\n ['path', { d: 'm17 4-3 3' }],\n ['path', { d: 'm14 17 3 3' }],\n ['path', { d: 'm21 15-3-3 3-3' }],\n ],\n];\n\nexport default SunSnow;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Sun: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '4' }],\n ['path', { d: 'M12 2v2' }],\n ['path', { d: 'M12 20v2' }],\n ['path', { d: 'm4.93 4.93 1.41 1.41' }],\n ['path', { d: 'm17.66 17.66 1.41 1.41' }],\n ['path', { d: 'M2 12h2' }],\n ['path', { d: 'M20 12h2' }],\n ['path', { d: 'm6.34 17.66-1.41 1.41' }],\n ['path', { d: 'm19.07 4.93-1.41 1.41' }],\n ],\n];\n\nexport default Sun;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Sunrise: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 2v8' }],\n ['path', { d: 'm4.93 10.93 1.41 1.41' }],\n ['path', { d: 'M2 18h2' }],\n ['path', { d: 'M20 18h2' }],\n ['path', { d: 'm19.07 10.93-1.41 1.41' }],\n ['path', { d: 'M22 22H2' }],\n ['path', { d: 'm8 6 4-4 4 4' }],\n ['path', { d: 'M16 18a4 4 0 0 0-8 0' }],\n ],\n];\n\nexport default Sunrise;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Sunset: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 10V2' }],\n ['path', { d: 'm4.93 10.93 1.41 1.41' }],\n ['path', { d: 'M2 18h2' }],\n ['path', { d: 'M20 18h2' }],\n ['path', { d: 'm19.07 10.93-1.41 1.41' }],\n ['path', { d: 'M22 22H2' }],\n ['path', { d: 'm16 6-4 4-4-4' }],\n ['path', { d: 'M16 18a4 4 0 0 0-8 0' }],\n ],\n];\n\nexport default Sunset;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Superscript: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm4 19 8-8' }],\n ['path', { d: 'm12 19-8-8' }],\n [\n 'path',\n {\n d: 'M20 12h-4c0-1.5.442-2 1.5-2.5S20 8.334 20 7.002c0-.472-.17-.93-.484-1.29a2.105 2.105 0 0 0-2.617-.436c-.42.239-.738.614-.899 1.06',\n },\n ],\n ],\n];\n\nexport default Superscript;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SwissFranc: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M10 21V3h8' }],\n ['path', { d: 'M6 16h9' }],\n ['path', { d: 'M10 9.5h7' }],\n ],\n];\n\nexport default SwissFranc;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst SwitchCamera: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M11 19H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h5' }],\n ['path', { d: 'M13 5h7a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-5' }],\n ['circle', { cx: '12', cy: '12', r: '3' }],\n ['path', { d: 'm18 22-3-3 3-3' }],\n ['path', { d: 'm6 2 3 3-3 3' }],\n ],\n];\n\nexport default SwitchCamera;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Sword: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '14.5 17.5 3 6 3 3 6 3 17.5 14.5' }],\n ['line', { x1: '13', x2: '19', y1: '19', y2: '13' }],\n ['line', { x1: '16', x2: '20', y1: '16', y2: '20' }],\n ['line', { x1: '19', x2: '21', y1: '21', y2: '19' }],\n ],\n];\n\nexport default Sword;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Swords: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '14.5 17.5 3 6 3 3 6 3 17.5 14.5' }],\n ['line', { x1: '13', x2: '19', y1: '19', y2: '13' }],\n ['line', { x1: '16', x2: '20', y1: '16', y2: '20' }],\n ['line', { x1: '19', x2: '21', y1: '21', y2: '19' }],\n ['polyline', { points: '14.5 6.5 18 3 21 3 21 6 17.5 9.5' }],\n ['line', { x1: '5', x2: '9', y1: '14', y2: '18' }],\n ['line', { x1: '7', x2: '4', y1: '17', y2: '20' }],\n ['line', { x1: '3', x2: '5', y1: '19', y2: '21' }],\n ],\n];\n\nexport default Swords;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Syringe: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm18 2 4 4' }],\n ['path', { d: 'm17 7 3-3' }],\n [\n 'path',\n { d: 'M19 9 8.7 19.3c-1 1-2.5 1-3.4 0l-.6-.6c-1-1-1-2.5 0-3.4L15 5' },\n ],\n ['path', { d: 'm9 11 4 4' }],\n ['path', { d: 'm5 19-3 3' }],\n ['path', { d: 'm14 4 6 6' }],\n ],\n];\n\nexport default Syringe;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Table2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18',\n },\n ],\n ],\n];\n\nexport default Table2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Table: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['line', { x1: '3', x2: '21', y1: '9', y2: '9' }],\n ['line', { x1: '3', x2: '21', y1: '15', y2: '15' }],\n ['line', { x1: '12', x2: '12', y1: '3', y2: '21' }],\n ],\n];\n\nexport default Table;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Tablet: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '16', height: '20', x: '4', y: '2', rx: '2', ry: '2' }],\n ['line', { x1: '12', x2: '12.01', y1: '18', y2: '18' }],\n ],\n];\n\nexport default Tablet;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Tablets: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '7', cy: '7', r: '5' }],\n ['circle', { cx: '17', cy: '17', r: '5' }],\n ['path', { d: 'M12 17h10' }],\n ['path', { d: 'm3.46 10.54 7.08-7.08' }],\n ],\n];\n\nexport default Tablets;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Tag: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M12 2H2v10l9.29 9.29c.94.94 2.48.94 3.42 0l6.58-6.58c.94-.94.94-2.48 0-3.42L12 2Z',\n },\n ],\n ['path', { d: 'M7 7h.01' }],\n ],\n];\n\nexport default Tag;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Tags: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M9 5H2v7l6.29 6.29c.94.94 2.48.94 3.42 0l3.58-3.58c.94-.94.94-2.48 0-3.42L9 5Z',\n },\n ],\n ['path', { d: 'M6 9.01V9' }],\n ['path', { d: 'm15 5 6.3 6.3a2.4 2.4 0 0 1 0 3.4L17 19' }],\n ],\n];\n\nexport default Tags;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Target: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['circle', { cx: '12', cy: '12', r: '6' }],\n ['circle', { cx: '12', cy: '12', r: '2' }],\n ],\n];\n\nexport default Target;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Tent: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M19 20 10 4' }],\n ['path', { d: 'm5 20 9-16' }],\n ['path', { d: 'M3 20h18' }],\n ['path', { d: 'm12 15-3 5' }],\n ['path', { d: 'm12 15 3 5' }],\n ],\n];\n\nexport default Tent;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst TerminalSquare: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm7 11 2-2-2-2' }],\n ['path', { d: 'M11 13h4' }],\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ],\n];\n\nexport default TerminalSquare;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Terminal: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '4 17 10 11 4 5' }],\n ['line', { x1: '12', x2: '20', y1: '19', y2: '19' }],\n ],\n];\n\nexport default Terminal;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst TestTube2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M21 7 6.82 21.18a2.83 2.83 0 0 1-3.99-.01v0a2.83 2.83 0 0 1 0-4L17 3',\n },\n ],\n ['path', { d: 'm16 2 6 6' }],\n ['path', { d: 'M12 16H4' }],\n ],\n];\n\nexport default TestTube2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst TestTube: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M14.5 2v17.5c0 1.4-1.1 2.5-2.5 2.5h0c-1.4 0-2.5-1.1-2.5-2.5V2' },\n ],\n ['path', { d: 'M8.5 2h7' }],\n ['path', { d: 'M14.5 16h-5' }],\n ],\n];\n\nexport default TestTube;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst TestTubes: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M9 2v17.5A2.5 2.5 0 0 1 6.5 22v0A2.5 2.5 0 0 1 4 19.5V2' }],\n [\n 'path',\n { d: 'M20 2v17.5a2.5 2.5 0 0 1-2.5 2.5v0a2.5 2.5 0 0 1-2.5-2.5V2' },\n ],\n ['path', { d: 'M3 2h7' }],\n ['path', { d: 'M14 2h7' }],\n ['path', { d: 'M9 16H4' }],\n ['path', { d: 'M20 16h-5' }],\n ],\n];\n\nexport default TestTubes;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst TextCursorInput: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M5 4h1a3 3 0 0 1 3 3 3 3 0 0 1 3-3h1' }],\n ['path', { d: 'M13 20h-1a3 3 0 0 1-3-3 3 3 0 0 1-3 3H5' }],\n ['path', { d: 'M5 16H4a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2h1' }],\n ['path', { d: 'M13 8h7a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-7' }],\n ['path', { d: 'M9 7v10' }],\n ],\n];\n\nexport default TextCursorInput;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst TextCursor: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M17 22h-1a4 4 0 0 1-4-4V6a4 4 0 0 1 4-4h1' }],\n ['path', { d: 'M7 22h1a4 4 0 0 0 4-4v-1' }],\n ['path', { d: 'M7 2h1a4 4 0 0 1 4 4v1' }],\n ],\n];\n\nexport default TextCursor;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst TextSelection: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M5 3a2 2 0 0 0-2 2' }],\n ['path', { d: 'M19 3a2 2 0 0 1 2 2' }],\n ['path', { d: 'M21 19a2 2 0 0 1-2 2' }],\n ['path', { d: 'M5 21a2 2 0 0 1-2-2' }],\n ['path', { d: 'M9 3h1' }],\n ['path', { d: 'M9 21h1' }],\n ['path', { d: 'M14 3h1' }],\n ['path', { d: 'M14 21h1' }],\n ['path', { d: 'M3 9v1' }],\n ['path', { d: 'M21 9v1' }],\n ['path', { d: 'M3 14v1' }],\n ['path', { d: 'M21 14v1' }],\n ['line', { x1: '7', x2: '15', y1: '8', y2: '8' }],\n ['line', { x1: '7', x2: '17', y1: '12', y2: '12' }],\n ['line', { x1: '7', x2: '13', y1: '16', y2: '16' }],\n ],\n];\n\nexport default TextSelection;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Text: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M17 6.1H3' }],\n ['path', { d: 'M21 12.1H3' }],\n ['path', { d: 'M15.1 18H3' }],\n ],\n];\n\nexport default Text;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ThermometerSnowflake: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 12h10' }],\n ['path', { d: 'M9 4v16' }],\n ['path', { d: 'm3 9 3 3-3 3' }],\n ['path', { d: 'M12 6 9 9 6 6' }],\n ['path', { d: 'm6 18 3-3 1.5 1.5' }],\n ['path', { d: 'M20 4v10.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0Z' }],\n ],\n];\n\nexport default ThermometerSnowflake;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ThermometerSun: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 9a4 4 0 0 0-2 7.5' }],\n ['path', { d: 'M12 3v2' }],\n ['path', { d: 'm6.6 18.4-1.4 1.4' }],\n ['path', { d: 'M20 4v10.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0Z' }],\n ['path', { d: 'M4 13H2' }],\n ['path', { d: 'M6.34 7.34 4.93 5.93' }],\n ],\n];\n\nexport default ThermometerSun;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Thermometer: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M14 4v10.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0Z' }]],\n];\n\nexport default Thermometer;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ThumbsDown: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M17 14V2' }],\n [\n 'path',\n {\n d: 'M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22h0a3.13 3.13 0 0 1-3-3.88Z',\n },\n ],\n ],\n];\n\nexport default ThumbsDown;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ThumbsUp: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M7 10v12' }],\n [\n 'path',\n {\n d: 'M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2h0a3.13 3.13 0 0 1 3 3.88Z',\n },\n ],\n ],\n];\n\nexport default ThumbsUp;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Ticket: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M3 7v2a3 3 0 1 1 0 6v2c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2v-2a3 3 0 1 1 0-6V7a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2Z',\n },\n ],\n ['path', { d: 'M13 5v2' }],\n ['path', { d: 'M13 17v2' }],\n ['path', { d: 'M13 11v2' }],\n ],\n];\n\nexport default Ticket;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst TimerOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M10 2h4' }],\n ['path', { d: 'M4.6 11a8 8 0 0 0 1.7 8.7 8 8 0 0 0 8.7 1.7' }],\n ['path', { d: 'M7.4 7.4a8 8 0 0 1 10.3 1 8 8 0 0 1 .9 10.2' }],\n ['path', { d: 'm2 2 20 20' }],\n ['path', { d: 'M12 12v-2' }],\n ],\n];\n\nexport default TimerOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst TimerReset: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M10 2h4' }],\n ['path', { d: 'M12 14v-4' }],\n ['path', { d: 'M4 13a8 8 0 0 1 8-7 8 8 0 1 1-5.3 14L4 17.6' }],\n ['path', { d: 'M9 17H4v5' }],\n ],\n];\n\nexport default TimerReset;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Timer: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '10', x2: '14', y1: '2', y2: '2' }],\n ['line', { x1: '12', x2: '15', y1: '14', y2: '11' }],\n ['circle', { cx: '12', cy: '14', r: '8' }],\n ],\n];\n\nexport default Timer;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ToggleLeft: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '12', x: '2', y: '6', rx: '6', ry: '6' }],\n ['circle', { cx: '8', cy: '12', r: '2' }],\n ],\n];\n\nexport default ToggleLeft;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ToggleRight: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '12', x: '2', y: '6', rx: '6', ry: '6' }],\n ['circle', { cx: '16', cy: '12', r: '2' }],\n ],\n];\n\nexport default ToggleRight;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Tornado: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M21 4H3' }],\n ['path', { d: 'M18 8H6' }],\n ['path', { d: 'M19 12H9' }],\n ['path', { d: 'M16 16h-6' }],\n ['path', { d: 'M11 20H9' }],\n ],\n];\n\nexport default Tornado;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst TowerControl: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M18.2 12.27 20 6H4l1.8 6.27a1 1 0 0 0 .95.73h10.5a1 1 0 0 0 .96-.73Z',\n },\n ],\n ['path', { d: 'M8 13v9' }],\n ['path', { d: 'M16 22v-9' }],\n ['path', { d: 'm9 6 1 7' }],\n ['path', { d: 'm15 6-1 7' }],\n ['path', { d: 'M12 6V2' }],\n ['path', { d: 'M13 2h-2' }],\n ],\n];\n\nexport default TowerControl;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ToyBrick: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '12', x: '3', y: '8', rx: '1' }],\n ['path', { d: 'M10 8V5c0-.6-.4-1-1-1H6a1 1 0 0 0-1 1v3' }],\n ['path', { d: 'M19 8V5c0-.6-.4-1-1-1h-3a1 1 0 0 0-1 1v3' }],\n ],\n];\n\nexport default ToyBrick;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Train: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '16', height: '16', x: '4', y: '3', rx: '2' }],\n ['path', { d: 'M4 11h16' }],\n ['path', { d: 'M12 3v8' }],\n ['path', { d: 'm8 19-2 3' }],\n ['path', { d: 'm18 22-2-3' }],\n ['path', { d: 'M8 15h0' }],\n ['path', { d: 'M16 15h0' }],\n ],\n];\n\nexport default Train;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Trash2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 6h18' }],\n ['path', { d: 'M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6' }],\n ['path', { d: 'M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2' }],\n ['line', { x1: '10', x2: '10', y1: '11', y2: '17' }],\n ['line', { x1: '14', x2: '14', y1: '11', y2: '17' }],\n ],\n];\n\nexport default Trash2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Trash: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 6h18' }],\n ['path', { d: 'M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6' }],\n ['path', { d: 'M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2' }],\n ],\n];\n\nexport default Trash;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst TreeDeciduous: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M8 19h8a4 4 0 0 0 3.8-2.8 4 4 0 0 0-1.6-4.5c1-1.1 1-2.7.4-4-.7-1.2-2.2-2-3.6-1.7a3 3 0 0 0-3-3 3 3 0 0 0-3 3c-1.4-.2-2.9.5-3.6 1.7-.7 1.3-.5 2.9.4 4a4 4 0 0 0-1.6 4.5A4 4 0 0 0 8 19Z',\n },\n ],\n ['path', { d: 'M12 19v3' }],\n ],\n];\n\nexport default TreeDeciduous;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst TreePine: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'm17 14 3 3.3a1 1 0 0 1-.7 1.7H4.7a1 1 0 0 1-.7-1.7L7 14h-.3a1 1 0 0 1-.7-1.7L9 9h-.2A1 1 0 0 1 8 7.3L12 3l4 4.3a1 1 0 0 1-.8 1.7H15l3 3.3a1 1 0 0 1-.7 1.7H17Z',\n },\n ],\n ['path', { d: 'M12 22v-3' }],\n ],\n];\n\nexport default TreePine;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Trees: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M10 10v.2A3 3 0 0 1 8.9 16v0H5v0h0a3 3 0 0 1-1-5.8V10a3 3 0 0 1 6 0Z',\n },\n ],\n ['path', { d: 'M7 16v6' }],\n ['path', { d: 'M13 19v3' }],\n [\n 'path',\n {\n d: 'M12 19h8.3a1 1 0 0 0 .7-1.7L18 14h.3a1 1 0 0 0 .7-1.7L16 9h.2a1 1 0 0 0 .8-1.7L13 3l-1.4 1.5',\n },\n ],\n ],\n];\n\nexport default Trees;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Trello: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['rect', { width: '3', height: '9', x: '7', y: '7' }],\n ['rect', { width: '3', height: '5', x: '14', y: '7' }],\n ],\n];\n\nexport default Trello;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst TrendingDown: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '22 17 13.5 8.5 8.5 13.5 2 7' }],\n ['polyline', { points: '16 17 22 17 22 11' }],\n ],\n];\n\nexport default TrendingDown;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst TrendingUp: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '22 7 13.5 15.5 8.5 10.5 2 17' }],\n ['polyline', { points: '16 7 22 7 22 13' }],\n ],\n];\n\nexport default TrendingUp;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Triangle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'm21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z',\n },\n ],\n ],\n];\n\nexport default Triangle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Trophy: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M6 9H4.5a2.5 2.5 0 0 1 0-5H6' }],\n ['path', { d: 'M18 9h1.5a2.5 2.5 0 0 0 0-5H18' }],\n ['path', { d: 'M4 22h16' }],\n [\n 'path',\n { d: 'M10 14.66V17c0 .55-.47.98-.97 1.21C7.85 18.75 7 20.24 7 22' },\n ],\n [\n 'path',\n { d: 'M14 14.66V17c0 .55.47.98.97 1.21C16.15 18.75 17 20.24 17 22' },\n ],\n ['path', { d: 'M18 2H6v7a6 6 0 0 0 12 0V2Z' }],\n ],\n];\n\nexport default Trophy;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Truck: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M10 17h4V5H2v12h3' }],\n ['path', { d: 'M20 17h2v-3.34a4 4 0 0 0-1.17-2.83L19 9h-5' }],\n ['path', { d: 'M14 17h1' }],\n ['circle', { cx: '7.5', cy: '17.5', r: '2.5' }],\n ['circle', { cx: '17.5', cy: '17.5', r: '2.5' }],\n ],\n];\n\nexport default Truck;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Tv2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M7 21h10' }],\n ['rect', { width: '20', height: '14', x: '2', y: '3', rx: '2' }],\n ],\n];\n\nexport default Tv2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Tv: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '20', height: '15', x: '2', y: '7', rx: '2', ry: '2' }],\n ['polyline', { points: '17 2 12 7 7 2' }],\n ],\n];\n\nexport default Tv;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Twitch: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7' }]],\n];\n\nexport default Twitch;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Twitter: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z',\n },\n ],\n ],\n];\n\nexport default Twitter;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Type: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '4 7 4 4 20 4 20 7' }],\n ['line', { x1: '9', x2: '15', y1: '20', y2: '20' }],\n ['line', { x1: '12', x2: '12', y1: '4', y2: '20' }],\n ],\n];\n\nexport default Type;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Umbrella: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M22 12a9.92 9.92 0 0 0-3.24-6.41 10.12 10.12 0 0 0-13.52 0A9.92 9.92 0 0 0 2 12Z',\n },\n ],\n ['path', { d: 'M12 12v8a2 2 0 0 0 4 0' }],\n ['line', { x1: '12', x2: '12', y1: '2', y2: '3' }],\n ],\n];\n\nexport default Umbrella;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Underline: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M6 4v6a6 6 0 0 0 12 0V4' }],\n ['line', { x1: '4', x2: '20', y1: '20', y2: '20' }],\n ],\n];\n\nexport default Underline;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Undo2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M9 14 4 9l5-5' }],\n [\n 'path',\n { d: 'M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5v0a5.5 5.5 0 0 1-5.5 5.5H11' },\n ],\n ],\n];\n\nexport default Undo2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Undo: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 7v6h6' }],\n ['path', { d: 'M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13' }],\n ],\n];\n\nexport default Undo;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Unlink2: IconNode = [\n 'svg',\n defaultAttributes,\n [['path', { d: 'M15 7h2a5 5 0 0 1 0 10h-2m-6 0H7A5 5 0 0 1 7 7h2' }]],\n];\n\nexport default Unlink2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Unlink: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'm18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71',\n },\n ],\n [\n 'path',\n {\n d: 'm5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71',\n },\n ],\n ['line', { x1: '8', x2: '8', y1: '2', y2: '5' }],\n ['line', { x1: '2', x2: '5', y1: '8', y2: '8' }],\n ['line', { x1: '16', x2: '16', y1: '19', y2: '22' }],\n ['line', { x1: '19', x2: '22', y1: '16', y2: '16' }],\n ],\n];\n\nexport default Unlink;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Unlock: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '11', x: '3', y: '11', rx: '2', ry: '2' }],\n ['path', { d: 'M7 11V7a5 5 0 0 1 9.9-1' }],\n ],\n];\n\nexport default Unlock;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst UploadCloud: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242' }],\n ['path', { d: 'M12 12v9' }],\n ['path', { d: 'm16 16-4-4-4 4' }],\n ],\n];\n\nexport default UploadCloud;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Upload: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4' }],\n ['polyline', { points: '17 8 12 3 7 8' }],\n ['line', { x1: '12', x2: '12', y1: '3', y2: '15' }],\n ],\n];\n\nexport default Upload;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Usb: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '10', cy: '7', r: '1' }],\n ['circle', { cx: '4', cy: '20', r: '1' }],\n ['path', { d: 'M4.7 19.3 19 5' }],\n ['path', { d: 'm21 3-3 1 2 2Z' }],\n ['path', { d: 'M9.26 7.68 5 12l2 5' }],\n ['path', { d: 'm10 14 5 2 3.5-3.5' }],\n ['path', { d: 'm18 12 1-1 1 1-1 1Z' }],\n ],\n];\n\nexport default Usb;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst UserCheck: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '9', cy: '7', r: '4' }],\n ['polyline', { points: '16 11 18 13 22 9' }],\n ],\n];\n\nexport default UserCheck;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst UserCog: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '9', cy: '7', r: '4' }],\n ['circle', { cx: '19', cy: '11', r: '2' }],\n ['path', { d: 'M19 8v1' }],\n ['path', { d: 'M19 13v1' }],\n ['path', { d: 'm21.6 9.5-.87.5' }],\n ['path', { d: 'm17.27 12-.87.5' }],\n ['path', { d: 'm21.6 12.5-.87-.5' }],\n ['path', { d: 'm17.27 10-.87-.5' }],\n ],\n];\n\nexport default UserCog;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst UserMinus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '9', cy: '7', r: '4' }],\n ['line', { x1: '22', x2: '16', y1: '11', y2: '11' }],\n ],\n];\n\nexport default UserMinus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst UserPlus: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '9', cy: '7', r: '4' }],\n ['line', { x1: '19', x2: '19', y1: '8', y2: '14' }],\n ['line', { x1: '22', x2: '16', y1: '11', y2: '11' }],\n ],\n];\n\nexport default UserPlus;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst UserX: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '9', cy: '7', r: '4' }],\n ['line', { x1: '17', x2: '22', y1: '8', y2: '13' }],\n ['line', { x1: '22', x2: '17', y1: '8', y2: '13' }],\n ],\n];\n\nexport default UserX;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst User: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '12', cy: '7', r: '4' }],\n ],\n];\n\nexport default User;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Users: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '9', cy: '7', r: '4' }],\n ['path', { d: 'M22 21v-2a4 4 0 0 0-3-3.87' }],\n ['path', { d: 'M16 3.13a4 4 0 0 1 0 7.75' }],\n ],\n];\n\nexport default Users;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst UtensilsCrossed: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'm16 2-2.3 2.3a3 3 0 0 0 0 4.2l1.8 1.8a3 3 0 0 0 4.2 0L22 8' },\n ],\n [\n 'path',\n {\n d: 'M15 15 3.3 3.3a4.2 4.2 0 0 0 0 6l7.3 7.3c.7.7 2 .7 2.8 0L15 15Zm0 0 7 7',\n },\n ],\n ['path', { d: 'm2.1 21.8 6.4-6.3' }],\n ['path', { d: 'm19 5-7 7' }],\n ],\n];\n\nexport default UtensilsCrossed;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Utensils: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M3 2v7c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2V2' }],\n ['path', { d: 'M7 2v20' }],\n ['path', { d: 'M21 15V2v0a5 5 0 0 0-5 5v6c0 1.1.9 2 2 2h3Zm0 0v7' }],\n ],\n];\n\nexport default Utensils;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst UtilityPole: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M12 2v20' }],\n ['path', { d: 'M2 5h20' }],\n ['path', { d: 'M3 3v2' }],\n ['path', { d: 'M7 3v2' }],\n ['path', { d: 'M17 3v2' }],\n ['path', { d: 'M21 3v2' }],\n ['path', { d: 'm19 5-7 7-7-7' }],\n ],\n];\n\nexport default UtilityPole;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Vegan: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 2a26.6 26.6 0 0 1 10 20c.9-6.82 1.5-9.5 4-14' }],\n ['path', { d: 'M16 8c4 0 6-2 6-6-4 0-6 2-6 6' }],\n ['path', { d: 'M17.41 3.6a10 10 0 1 0 3 3' }],\n ],\n];\n\nexport default Vegan;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst VenetianMask: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M2 12a5 5 0 0 0 5 5 8 8 0 0 1 5 2 8 8 0 0 1 5-2 5 5 0 0 0 5-5V7h-5a8 8 0 0 0-5 2 8 8 0 0 0-5-2H2Z',\n },\n ],\n ['path', { d: 'M6 11c1.5 0 3 .5 3 2-2 0-3 0-3-2Z' }],\n ['path', { d: 'M18 11c-1.5 0-3 .5-3 2 2 0 3 0 3-2Z' }],\n ],\n];\n\nexport default VenetianMask;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Verified: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M12 3c-1.2 0-2.4.6-3 1.7A3.6 3.6 0 0 0 4.6 9c-1 .6-1.7 1.8-1.7 3s.7 2.4 1.7 3c-.3 1.2 0 2.5 1 3.4.8.8 2.1 1.2 3.3 1 .6 1 1.8 1.6 3 1.6s2.4-.6 3-1.7c1.2.3 2.5 0 3.4-1 .8-.8 1.2-2 1-3.3 1-.6 1.6-1.8 1.6-3s-.6-2.4-1.7-3c.3-1.2 0-2.5-1-3.4a3.7 3.7 0 0 0-3.3-1c-.6-1-1.8-1.6-3-1.6Z',\n },\n ],\n ['path', { d: 'm9 12 2 2 4-4' }],\n ],\n];\n\nexport default Verified;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst VibrateOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm2 8 2 2-2 2 2 2-2 2' }],\n ['path', { d: 'm22 8-2 2 2 2-2 2 2 2' }],\n ['path', { d: 'M8 8v10c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2' }],\n ['path', { d: 'M16 10.34V6c0-.55-.45-1-1-1h-4.34' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default VibrateOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Vibrate: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm2 8 2 2-2 2 2 2-2 2' }],\n ['path', { d: 'm22 8-2 2 2 2-2 2 2 2' }],\n ['rect', { width: '8', height: '14', x: '8', y: '5', rx: '1' }],\n ],\n];\n\nexport default Vibrate;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst VideoOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M10.66 6H14a2 2 0 0 1 2 2v2.34l1 1L22 8v8' }],\n [\n 'path',\n { d: 'M16 16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h2l10 10Z' },\n ],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default VideoOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Video: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm22 8-6 4 6 4V8Z' }],\n ['rect', { width: '14', height: '12', x: '2', y: '6', rx: '2', ry: '2' }],\n ],\n];\n\nexport default Video;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst View: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n { d: 'M5 12s2.545-5 7-5c4.454 0 7 5 7 5s-2.546 5-7 5c-4.455 0-7-5-7-5z' },\n ],\n ['path', { d: 'M12 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2z' }],\n ['path', { d: 'M21 17v2a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-2' }],\n ['path', { d: 'M21 7V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2' }],\n ],\n];\n\nexport default View;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Voicemail: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '6', cy: '12', r: '4' }],\n ['circle', { cx: '18', cy: '12', r: '4' }],\n ['line', { x1: '6', x2: '18', y1: '16', y2: '16' }],\n ],\n];\n\nexport default Voicemail;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Volume1: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polygon', { points: '11 5 6 9 2 9 2 15 6 15 11 19 11 5' }],\n ['path', { d: 'M15.54 8.46a5 5 0 0 1 0 7.07' }],\n ],\n];\n\nexport default Volume1;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Volume2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polygon', { points: '11 5 6 9 2 9 2 15 6 15 11 19 11 5' }],\n ['path', { d: 'M15.54 8.46a5 5 0 0 1 0 7.07' }],\n ['path', { d: 'M19.07 4.93a10 10 0 0 1 0 14.14' }],\n ],\n];\n\nexport default Volume2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst VolumeX: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polygon', { points: '11 5 6 9 2 9 2 15 6 15 11 19 11 5' }],\n ['line', { x1: '22', x2: '16', y1: '9', y2: '15' }],\n ['line', { x1: '16', x2: '22', y1: '9', y2: '15' }],\n ],\n];\n\nexport default VolumeX;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Volume: IconNode = [\n 'svg',\n defaultAttributes,\n [['polygon', { points: '11 5 6 9 2 9 2 15 6 15 11 19 11 5' }]],\n];\n\nexport default Volume;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Vote: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm9 12 2 2 4-4' }],\n ['path', { d: 'M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z' }],\n ['path', { d: 'M22 19H2' }],\n ],\n];\n\nexport default Vote;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Wallet: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M20 12V8H6a2 2 0 0 1-2-2c0-1.1.9-2 2-2h12v4' }],\n ['path', { d: 'M4 6v12c0 1.1.9 2 2 2h14v-4' }],\n ['path', { d: 'M18 12a2 2 0 0 0-2 2c0 1.1.9 2 2 2h4v-4h-4z' }],\n ],\n];\n\nexport default Wallet;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Wand2: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'm21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72Z',\n },\n ],\n ['path', { d: 'm14 7 3 3' }],\n ['path', { d: 'M5 6v4' }],\n ['path', { d: 'M19 14v4' }],\n ['path', { d: 'M10 2v2' }],\n ['path', { d: 'M7 8H3' }],\n ['path', { d: 'M21 16h-4' }],\n ['path', { d: 'M11 3H9' }],\n ],\n];\n\nexport default Wand2;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Wand: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M15 4V2' }],\n ['path', { d: 'M15 16v-2' }],\n ['path', { d: 'M8 9h2' }],\n ['path', { d: 'M20 9h2' }],\n ['path', { d: 'M17.8 11.8 19 13' }],\n ['path', { d: 'M15 9h0' }],\n ['path', { d: 'M17.8 6.2 19 5' }],\n ['path', { d: 'm3 21 9-9' }],\n ['path', { d: 'M12.2 6.2 11 5' }],\n ],\n];\n\nexport default Wand;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Warehouse: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M22 8.35V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8.35A2 2 0 0 1 3.26 6.5l8-3.2a2 2 0 0 1 1.48 0l8 3.2A2 2 0 0 1 22 8.35Z',\n },\n ],\n ['path', { d: 'M6 18h12' }],\n ['path', { d: 'M6 14h12' }],\n ['rect', { width: '12', height: '12', x: '6', y: '10' }],\n ],\n];\n\nexport default Warehouse;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Watch: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '6' }],\n ['polyline', { points: '12 10 12 12 13 13' }],\n [\n 'path',\n {\n d: 'm16.13 7.66-.81-4.05a2 2 0 0 0-2-1.61h-2.68a2 2 0 0 0-2 1.61l-.78 4.05',\n },\n ],\n [\n 'path',\n { d: 'm7.88 16.36.8 4a2 2 0 0 0 2 1.61h2.72a2 2 0 0 0 2-1.61l.81-4.05' },\n ],\n ],\n];\n\nexport default Watch;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Waves: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M2 6c.6.5 1.2 1 2.5 1C7 7 7 5 9.5 5c2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1',\n },\n ],\n [\n 'path',\n {\n d: 'M2 12c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1',\n },\n ],\n [\n 'path',\n {\n d: 'M2 18c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1',\n },\n ],\n ],\n];\n\nexport default Waves;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Webcam: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '10', r: '8' }],\n ['circle', { cx: '12', cy: '10', r: '3' }],\n ['path', { d: 'M7 22h10' }],\n ['path', { d: 'M12 22v-4' }],\n ],\n];\n\nexport default Webcam;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Webhook: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2',\n },\n ],\n [\n 'path',\n { d: 'm6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06' },\n ],\n ['path', { d: 'm12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8' }],\n ],\n];\n\nexport default Webhook;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst WheatOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'm2 22 10-10' }],\n ['path', { d: 'm16 8-1.17 1.17' }],\n [\n 'path',\n {\n d: 'M3.47 12.53 5 11l1.53 1.53a3.5 3.5 0 0 1 0 4.94L5 19l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z',\n },\n ],\n [\n 'path',\n {\n d: 'm8 8-.53.53a3.5 3.5 0 0 0 0 4.94L9 15l1.53-1.53c.55-.55.88-1.25.98-1.97',\n },\n ],\n [\n 'path',\n {\n d: 'M10.91 5.26c.15-.26.34-.51.56-.73L13 3l1.53 1.53a3.5 3.5 0 0 1 .28 4.62',\n },\n ],\n ['path', { d: 'M20 2h2v2a4 4 0 0 1-4 4h-2V6a4 4 0 0 1 4-4Z' }],\n [\n 'path',\n {\n d: 'M11.47 17.47 13 19l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L5 19l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z',\n },\n ],\n [\n 'path',\n {\n d: 'm16 16-.53.53a3.5 3.5 0 0 1-4.94 0L9 15l1.53-1.53a3.49 3.49 0 0 1 1.97-.98',\n },\n ],\n [\n 'path',\n {\n d: 'M18.74 13.09c.26-.15.51-.34.73-.56L21 11l-1.53-1.53a3.5 3.5 0 0 0-4.62-.28',\n },\n ],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default WheatOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Wheat: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M2 22 16 8' }],\n [\n 'path',\n {\n d: 'M3.47 12.53 5 11l1.53 1.53a3.5 3.5 0 0 1 0 4.94L5 19l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z',\n },\n ],\n [\n 'path',\n {\n d: 'M7.47 8.53 9 7l1.53 1.53a3.5 3.5 0 0 1 0 4.94L9 15l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z',\n },\n ],\n [\n 'path',\n {\n d: 'M11.47 4.53 13 3l1.53 1.53a3.5 3.5 0 0 1 0 4.94L13 11l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z',\n },\n ],\n ['path', { d: 'M20 2h2v2a4 4 0 0 1-4 4h-2V6a4 4 0 0 1 4-4Z' }],\n [\n 'path',\n {\n d: 'M11.47 17.47 13 19l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L5 19l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z',\n },\n ],\n [\n 'path',\n {\n d: 'M15.47 13.47 17 15l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L9 15l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z',\n },\n ],\n [\n 'path',\n {\n d: 'M19.47 9.47 21 11l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L13 11l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z',\n },\n ],\n ],\n];\n\nexport default Wheat;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst WholeWord: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '17', cy: '12', r: '3' }],\n ['line', { x1: '14', x2: '14', y1: '7', y2: '15' }],\n ['circle', { cx: '7', cy: '12', r: '3' }],\n ['line', { x1: '10', x2: '10', y1: '9', y2: '15' }],\n ['polyline', { points: '22,17 22,19 2,19 2,17' }],\n ],\n];\n\nexport default WholeWord;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst WifiOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ['path', { d: 'M8.5 16.5a5 5 0 0 1 7 0' }],\n ['path', { d: 'M2 8.82a15 15 0 0 1 4.17-2.65' }],\n ['path', { d: 'M10.66 5c4.01-.36 8.14.9 11.34 3.76' }],\n ['path', { d: 'M16.85 11.25a10 10 0 0 1 2.22 1.68' }],\n ['path', { d: 'M5 13a10 10 0 0 1 5.24-2.76' }],\n ['line', { x1: '12', x2: '12.01', y1: '20', y2: '20' }],\n ],\n];\n\nexport default WifiOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Wifi: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M5 13a10 10 0 0 1 14 0' }],\n ['path', { d: 'M8.5 16.5a5 5 0 0 1 7 0' }],\n ['path', { d: 'M2 8.82a15 15 0 0 1 20 0' }],\n ['line', { x1: '12', x2: '12.01', y1: '20', y2: '20' }],\n ],\n];\n\nexport default Wifi;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Wind: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M17.7 7.7a2.5 2.5 0 1 1 1.8 4.3H2' }],\n ['path', { d: 'M9.6 4.6A2 2 0 1 1 11 8H2' }],\n ['path', { d: 'M12.6 19.4A2 2 0 1 0 14 16H2' }],\n ],\n];\n\nexport default Wind;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst WineOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M8 22h8' }],\n ['path', { d: 'M7 10h3m7 0h-1.343' }],\n ['path', { d: 'M12 15v7' }],\n [\n 'path',\n {\n d: 'M7.307 7.307A12.33 12.33 0 0 0 7 10a5 5 0 0 0 7.391 4.391M8.638 2.981C8.75 2.668 8.872 2.34 9 2h6c1.5 4 2 6 2 8 0 .407-.05.809-.145 1.198',\n },\n ],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default WineOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Wine: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['path', { d: 'M8 22h8' }],\n ['path', { d: 'M7 10h10' }],\n ['path', { d: 'M12 15v7' }],\n [\n 'path',\n {\n d: 'M12 15a5 5 0 0 0 5-5c0-2-.5-4-2-8H9c-1.5 4-2 6-2 8a5 5 0 0 0 5 5Z',\n },\n ],\n ],\n];\n\nexport default Wine;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Workflow: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '8', height: '8', x: '3', y: '3', rx: '2' }],\n ['path', { d: 'M7 11v4a2 2 0 0 0 2 2h4' }],\n ['rect', { width: '8', height: '8', x: '13', y: '13', rx: '2' }],\n ],\n];\n\nexport default Workflow;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst WrapText: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '3', x2: '21', y1: '6', y2: '6' }],\n ['path', { d: 'M3 12h15a3 3 0 1 1 0 6h-4' }],\n ['polyline', { points: '16 16 14 18 16 20' }],\n ['line', { x1: '3', x2: '10', y1: '18', y2: '18' }],\n ],\n];\n\nexport default WrapText;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Wrench: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z',\n },\n ],\n ],\n];\n\nexport default Wrench;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst XCircle: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['line', { x1: '15', x2: '9', y1: '9', y2: '15' }],\n ['line', { x1: '9', x2: '15', y1: '9', y2: '15' }],\n ],\n];\n\nexport default XCircle;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst XOctagon: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'polygon',\n {\n points:\n '7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2',\n },\n ],\n ['line', { x1: '15', x2: '9', y1: '9', y2: '15' }],\n ['line', { x1: '9', x2: '15', y1: '9', y2: '15' }],\n ],\n];\n\nexport default XOctagon;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst XSquare: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['line', { x1: '9', x2: '15', y1: '9', y2: '15' }],\n ['line', { x1: '15', x2: '9', y1: '9', y2: '15' }],\n ],\n];\n\nexport default XSquare;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst X: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['line', { x1: '18', x2: '6', y1: '6', y2: '18' }],\n ['line', { x1: '6', x2: '18', y1: '6', y2: '18' }],\n ],\n];\n\nexport default X;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Youtube: IconNode = [\n 'svg',\n defaultAttributes,\n [\n [\n 'path',\n {\n d: 'M2.5 17a24.12 24.12 0 0 1 0-10 2 2 0 0 1 1.4-1.4 49.56 49.56 0 0 1 16.2 0A2 2 0 0 1 21.5 7a24.12 24.12 0 0 1 0 10 2 2 0 0 1-1.4 1.4 49.55 49.55 0 0 1-16.2 0A2 2 0 0 1 2.5 17',\n },\n ],\n ['path', { d: 'm10 15 5-3-5-3z' }],\n ],\n];\n\nexport default Youtube;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ZapOff: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['polyline', { points: '12.41 6.75 13 2 10.57 4.92' }],\n ['polyline', { points: '18.57 12.91 21 10 15.66 10' }],\n ['polyline', { points: '8 8 3 14 12 14 11 22 16 16' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22' }],\n ],\n];\n\nexport default ZapOff;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst Zap: IconNode = [\n 'svg',\n defaultAttributes,\n [['polygon', { points: '13 2 3 14 12 14 11 22 21 10 12 10 13 2' }]],\n];\n\nexport default Zap;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ZoomIn: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '11', cy: '11', r: '8' }],\n ['line', { x1: '21', x2: '16.65', y1: '21', y2: '16.65' }],\n ['line', { x1: '11', x2: '11', y1: '8', y2: '14' }],\n ['line', { x1: '8', x2: '14', y1: '11', y2: '11' }],\n ],\n];\n\nexport default ZoomIn;\n","import defaultAttributes from '../defaultAttributes';\nimport type { IconNode } from '../types';\n\nconst ZoomOut: IconNode = [\n 'svg',\n defaultAttributes,\n [\n ['circle', { cx: '11', cy: '11', r: '8' }],\n ['line', { x1: '21', x2: '16.65', y1: '21', y2: '16.65' }],\n ['line', { x1: '8', x2: '14', y1: '11', y2: '11' }],\n ],\n];\n\nexport default ZoomOut;\n","import replaceElement from './replaceElement';\nimport * as allIcons from './icons';\n\n/**\n * Replaces all elements with matching nameAttr with the defined icons\n * @param {{ icons?: object, nameAttr?: string, attrs?: object }} options\n */\nconst createIcons = ({ icons = {}, nameAttr = 'icon-name', attrs = {} } = {}) => {\n if (!Object.values(icons).length) {\n throw new Error(\n \"Please provide an icons object.\\nIf you want to use all the icons you can import it like:\\n `import { createIcons, icons } from 'lucide';\\nlucide.createIcons({icons});`\",\n );\n }\n\n if (typeof document === 'undefined') {\n throw new Error('`createIcons()` only works in a browser environment.');\n }\n\n const elementsToReplace = document.querySelectorAll(`[${nameAttr}]`);\n\n Array.from(elementsToReplace).forEach((element) =>\n replaceElement(element, { nameAttr, icons, attrs }),\n );\n};\n\nexport { createIcons };\n\n/*\n Create Element function export.\n*/\nexport { default as createElement } from './createElement';\n\n/*\n Icons exports.\n*/\nexport { allIcons as icons };\nexport * from './icons';\n"],"names":["createElement","tag","attrs","children","element","name","child","childElement","f","getAttrs","attr","getClassNames","combineClassNames","arrayOfClassnames","classItem","value","index","self","toPascalCase","string","g0","g1","g2","replaceElement","nameAttr","icons","iconName","ComponentName","iconNode","elementAttrs","iconAttributes","iconAttrs","classNames","svgElement","defaultAttributes","Accessibility","Activity","AirVent","Airplay","AlarmCheck","AlarmClockOff","AlarmClock","AlarmMinus","AlarmPlus","Album","AlertCircle","AlertOctagon","AlertTriangle","AlignCenterHorizontal","AlignCenterVertical","AlignCenter","AlignEndHorizontal","AlignEndVertical","AlignHorizontalDistributeCenter","AlignHorizontalDistributeEnd","AlignHorizontalDistributeStart","AlignHorizontalJustifyCenter","AlignHorizontalJustifyEnd","AlignHorizontalJustifyStart","AlignHorizontalSpaceAround","AlignHorizontalSpaceBetween","AlignJustify","AlignLeft","AlignRight","AlignStartHorizontal","AlignStartVertical","AlignVerticalDistributeCenter","AlignVerticalDistributeEnd","AlignVerticalDistributeStart","AlignVerticalJustifyCenter","AlignVerticalJustifyEnd","AlignVerticalJustifyStart","AlignVerticalSpaceAround","AlignVerticalSpaceBetween","Anchor","Angry","Annoyed","Aperture","Apple","ArchiveRestore","Archive","Armchair","ArrowBigDownDash","ArrowBigDown","ArrowBigLeftDash","ArrowBigLeft","ArrowBigRightDash","ArrowBigRight","ArrowBigUpDash","ArrowBigUp","ArrowDown01","ArrowDown10","ArrowDownAZ","ArrowDownCircle","ArrowDownLeftFromCircle","ArrowDownLeft","ArrowDownNarrowWide","ArrowDownRightFromCircle","ArrowDownRight","ArrowDownUp","ArrowDownWideNarrow","ArrowDownZA","ArrowDown","ArrowLeftCircle","ArrowLeftRight","ArrowLeft","ArrowRightCircle","ArrowRightLeft","ArrowRight","ArrowUp01","ArrowUp10","ArrowUpAZ","ArrowUpCircle","ArrowUpDown","ArrowUpLeftFromCircle","ArrowUpLeft","ArrowUpNarrowWide","ArrowUpRightFromCircle","ArrowUpRight","ArrowUpWideNarrow","ArrowUpZA","ArrowUp","Asterisk","AtSign","Atom","Award","Axe","Axis3d","Baby","Backpack","BaggageClaim","Ban","Banana","Banknote","BarChart2","BarChart3","BarChart4","BarChartHorizontal","BarChart","Baseline","Bath","BatteryCharging","BatteryFull","BatteryLow","BatteryMedium","BatteryWarning","Battery","Beaker","BeanOff","Bean","BedDouble","BedSingle","Bed","Beef","Beer","BellMinus","BellOff","BellPlus","BellRing","Bell","Bike","Binary","Bird","Bitcoin","Blinds","BluetoothConnected","BluetoothOff","BluetoothSearching","Bluetooth","Bold","Bomb","Bone","BookCopy","BookDown","BookKey","BookLock","BookMarked","BookMinus","BookOpenCheck","BookOpen","BookPlus","BookTemplate","BookUp","BookX","Book","BookmarkMinus","BookmarkPlus","Bookmark","Bot","BoxSelect","Box","Boxes","BrainCircuit","BrainCog","Brain","Briefcase","Brush","Bug","Building2","Building","Bus","Cake","Calculator","CalendarCheck2","CalendarCheck","CalendarClock","CalendarDays","CalendarHeart","CalendarMinus","CalendarOff","CalendarPlus","CalendarRange","CalendarSearch","CalendarX2","CalendarX","Calendar","CameraOff","Camera","CandyOff","Candy","Car","Carrot","CaseLower","CaseSensitive","CaseUpper","Cast","Castle","Cat","CheckCheck","CheckCircle2","CheckCircle","CheckSquare","Check","ChefHat","Cherry","ChevronDownSquare","ChevronDown","ChevronFirst","ChevronLast","ChevronLeftSquare","ChevronLeft","ChevronRightSquare","ChevronRight","ChevronUpSquare","ChevronUp","ChevronsDownUp","ChevronsDown","ChevronsLeftRight","ChevronsLeft","ChevronsRightLeft","ChevronsRight","ChevronsUpDown","ChevronsUp","Chrome","Church","CigaretteOff","Cigarette","CircleDot","CircleEllipsis","CircleEqual","CircleOff","CircleSlash2","CircleSlash","Circle","CircuitBoard","Citrus","Clapperboard","ClipboardCheck","ClipboardCopy","ClipboardEdit","ClipboardList","ClipboardPaste","ClipboardSignature","ClipboardType","ClipboardX","Clipboard","Clock1","Clock10","Clock11","Clock12","Clock2","Clock3","Clock4","Clock5","Clock6","Clock7","Clock8","Clock9","Clock","CloudCog","CloudDrizzle","CloudFog","CloudHail","CloudLightning","CloudMoonRain","CloudMoon","CloudOff","CloudRainWind","CloudRain","CloudSnow","CloudSunRain","CloudSun","Cloud","Cloudy","Clover","Code2","Code","Codepen","Codesandbox","Coffee","Cog","Coins","Columns","Command","Compass","Component","ConciergeBell","Construction","Contact","Contrast","Cookie","CopyCheck","CopyMinus","CopyPlus","CopySlash","CopyX","Copy","Copyleft","Copyright","CornerDownLeft","CornerDownRight","CornerLeftDown","CornerLeftUp","CornerRightDown","CornerRightUp","CornerUpLeft","CornerUpRight","Cpu","CreativeCommons","CreditCard","Croissant","Crop","Cross","Crosshair","Crown","CupSoda","CurlyBraces","Currency","DatabaseBackup","Database","Delete","Diamond","Dice1","Dice2","Dice3","Dice4","Dice5","Dice6","Dices","Diff","Disc2","Disc","DivideCircle","DivideSquare","Divide","DnaOff","Dna","Dog","DollarSign","DoorClosed","DoorOpen","DownloadCloud","Download","Dribbble","Droplet","Droplets","Drumstick","Dumbbell","EarOff","Ear","Edit2","Edit3","Edit","EggFried","EggOff","Egg","EqualNot","Equal","Eraser","Euro","Expand","ExternalLink","EyeOff","Eye","Facebook","Factory","Fan","FastForward","Feather","Figma","FileArchive","FileAudio2","FileAudio","FileAxis3d","FileBadge2","FileBadge","FileBarChart2","FileBarChart","FileBox","FileCheck2","FileCheck","FileClock","FileCode","FileCog2","FileCog","FileDiff","FileDigit","FileDown","FileEdit","FileHeart","FileImage","FileInput","FileJson2","FileJson","FileKey2","FileKey","FileLineChart","FileLock2","FileLock","FileMinus2","FileMinus","FileOutput","FilePieChart","FilePlus2","FilePlus","FileQuestion","FileScan","FileSearch2","FileSearch","FileSignature","FileSpreadsheet","FileSymlink","FileTerminal","FileText","FileType2","FileType","FileUp","FileVideo2","FileVideo","FileVolume2","FileVolume","FileWarning","FileX2","FileX","File","Files","Film","FilterX","Filter","Fingerprint","FishOff","Fish","FlagOff","FlagTriangleLeft","FlagTriangleRight","Flag","Flame","FlashlightOff","Flashlight","FlaskConicalOff","FlaskConical","FlaskRound","FlipHorizontal2","FlipHorizontal","FlipVertical2","FlipVertical","Flower2","Flower","Focus","FolderArchive","FolderCheck","FolderClock","FolderClosed","FolderCog2","FolderCog","FolderDown","FolderEdit","FolderGit2","FolderGit","FolderHeart","FolderInput","FolderKey","FolderLock","FolderMinus","FolderOpen","FolderOutput","FolderPlus","FolderSearch2","FolderSearch","FolderSymlink","FolderTree","FolderUp","FolderX","Folder","Folders","Footprints","Forklift","FormInput","Forward","Frame","Framer","Frown","Fuel","FunctionSquare","Gamepad2","Gamepad","Gauge","Gavel","Gem","Ghost","Gift","GitBranchPlus","GitBranch","GitCommit","GitCompare","GitFork","GitMerge","GitPullRequestClosed","GitPullRequestDraft","GitPullRequest","Github","Gitlab","GlassWater","Glasses","Globe2","Globe","Grab","GraduationCap","Grape","Grid","GripHorizontal","GripVertical","Grip","Hammer","HandMetal","Hand","HardDrive","HardHat","Hash","Haze","Heading1","Heading2","Heading3","Heading4","Heading5","Heading6","Heading","Headphones","HeartCrack","HeartHandshake","HeartOff","HeartPulse","Heart","HelpCircle","HelpingHand","Hexagon","Highlighter","History","Home","HopOff","Hop","Hotel","Hourglass","IceCream2","IceCream","ImageMinus","ImageOff","ImagePlus","Image","Import","Inbox","Indent","IndianRupee","Infinity","Info","Inspect","Instagram","Italic","IterationCcw","IterationCw","JapaneseYen","Joystick","Key","Keyboard","LampCeiling","LampDesk","LampFloor","LampWallDown","LampWallUp","Lamp","Landmark","Languages","Laptop2","Laptop","LassoSelect","Lasso","Laugh","Layers","LayoutDashboard","LayoutGrid","LayoutList","LayoutTemplate","Layout","Leaf","Library","LifeBuoy","LightbulbOff","Lightbulb","LineChart","Link2Off","Link2","Link","Linkedin","ListChecks","ListEnd","ListMinus","ListMusic","ListOrdered","ListPlus","ListStart","ListTree","ListVideo","ListX","List","Loader2","Loader","LocateFixed","LocateOff","Locate","Lock","LogIn","LogOut","Luggage","Magnet","MailCheck","MailMinus","MailOpen","MailPlus","MailQuestion","MailSearch","MailWarning","MailX","Mail","Mailbox","Mails","MapPinOff","MapPin","Map","Martini","Maximize2","Maximize","Medal","MegaphoneOff","Megaphone","Meh","Menu","MessageCircle","MessageSquareDashed","MessageSquarePlus","MessageSquare","MessagesSquare","Mic2","MicOff","Mic","Microscope","Microwave","Milestone","MilkOff","Milk","Minimize2","Minimize","MinusCircle","MinusSquare","Minus","MonitorDown","MonitorOff","MonitorSmartphone","MonitorSpeaker","MonitorUp","Monitor","MoonStar","Moon","MoreHorizontal","MoreVertical","MountainSnow","Mountain","MousePointer2","MousePointerClick","MousePointer","Mouse","Move3d","MoveDiagonal2","MoveDiagonal","MoveHorizontal","MoveVertical","Move","Music2","Music3","Music4","Music","Navigation2Off","Navigation2","NavigationOff","Navigation","Network","Newspaper","Nfc","NutOff","Nut","Octagon","Option","Orbit","Outdent","Package2","PackageCheck","PackageMinus","PackageOpen","PackagePlus","PackageSearch","PackageX","Package","PaintBucket","Paintbrush2","Paintbrush","Palette","Palmtree","Paperclip","ParkingCircleOff","ParkingCircle","ParkingSquareOff","ParkingSquare","PartyPopper","PauseCircle","PauseOctagon","Pause","PenTool","Pencil","Percent","PersonStanding","PhoneCall","PhoneForwarded","PhoneIncoming","PhoneMissed","PhoneOff","PhoneOutgoing","Phone","PictureInPicture2","PictureInPicture","PieChart","PiggyBank","Pilcrow","Pill","PinOff","Pin","Pipette","Pizza","PlaneLanding","PlaneTakeoff","Plane","PlayCircle","Play","Plug2","PlugZap","Plug","PlusCircle","PlusSquare","Plus","Pocket","Podcast","Pointer","PoundSterling","PowerOff","Power","Printer","Puzzle","QrCode","Quote","RadioReceiver","RadioTower","Radio","Rat","Receipt","RectangleHorizontal","RectangleVertical","Recycle","Redo2","Redo","RefreshCcw","RefreshCw","Refrigerator","Regex","RemoveFormatting","Repeat1","Repeat2","Repeat","ReplaceAll","Replace","ReplyAll","Reply","Rewind","Rocket","RockingChair","Rotate3d","RotateCcw","RotateCw","Router","Rss","Ruler","RussianRuble","Sailboat","Salad","Sandwich","SaveAll","Save","Scale3d","Scale","Scaling","ScanFace","ScanLine","Scan","School2","School","Scissors","ScreenShareOff","ScreenShare","Scroll","Search","Send","SeparatorHorizontal","SeparatorVertical","ServerCog","ServerCrash","ServerOff","Server","Settings2","Settings","Share2","Share","Sheet","ShieldAlert","ShieldCheck","ShieldClose","ShieldOff","ShieldQuestion","Shield","Ship","Shirt","ShoppingBag","ShoppingCart","Shovel","ShowerHead","Shrink","Shrub","Shuffle","SidebarClose","SidebarOpen","Sidebar","Sigma","SignalHigh","SignalLow","SignalMedium","SignalZero","Signal","Siren","SkipBack","SkipForward","Skull","Slack","Slice","SlidersHorizontal","Sliders","SmartphoneCharging","SmartphoneNfc","Smartphone","SmilePlus","Smile","Snowflake","Sofa","Soup","Space","Speaker","Spline","SplitSquareHorizontal","SplitSquareVertical","Sprout","Square","Stamp","StarHalf","StarOff","Star","Stars","StepBack","StepForward","Stethoscope","Sticker","StickyNote","StopCircle","Store","StretchHorizontal","StretchVertical","Strikethrough","Subscript","Subtitles","SunDim","SunMedium","SunMoon","SunSnow","Sun","Sunrise","Sunset","Superscript","SwissFranc","SwitchCamera","Sword","Swords","Syringe","Table2","Table","Tablet","Tablets","Tag","Tags","Target","Tent","TerminalSquare","Terminal","TestTube2","TestTube","TestTubes","TextCursorInput","TextCursor","TextSelection","Text","ThermometerSnowflake","ThermometerSun","Thermometer","ThumbsDown","ThumbsUp","Ticket","TimerOff","TimerReset","Timer","ToggleLeft","ToggleRight","Tornado","TowerControl","ToyBrick","Train","Trash2","Trash","TreeDeciduous","TreePine","Trees","Trello","TrendingDown","TrendingUp","Triangle","Trophy","Truck","Tv2","Tv","Twitch","Twitter","Type","Umbrella","Underline","Undo2","Undo","Unlink2","Unlink","Unlock","UploadCloud","Upload","Usb","UserCheck","UserCog","UserMinus","UserPlus","UserX","User","Users","UtensilsCrossed","Utensils","UtilityPole","Vegan","VenetianMask","Verified","VibrateOff","Vibrate","VideoOff","Video","View","Voicemail","Volume1","Volume2","VolumeX","Volume","Vote","Wallet","Wand2","Wand","Warehouse","Watch","Waves","Webcam","Webhook","WheatOff","Wheat","WholeWord","WifiOff","Wifi","Wind","WineOff","Wine","Workflow","WrapText","Wrench","XCircle","XOctagon","XSquare","X","Youtube","ZapOff","Zap","ZoomIn","ZoomOut","createIcons","elementsToReplace"],"mappings":"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I,EACA,CACE,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,EAAG,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA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AA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CACA,CAAA,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,GAAI,CAAC,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA,CACzB,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAC1B,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAClC,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EACjC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,mBAAoB,CAAC,CAAA,CACnC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmB,CAAC,CACpC,CACF,EClBMgK,CAAkB,CAAA,CAAA,CACtB,CACAhK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAA,CAAG,mKACL,CACF,CAAA,CACA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CACF,CACF,CCjBMiK,CAAAA,CAAAA,CAAAA,CAAsB,CAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CACAjK,EACA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,MAAO,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,IAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAI,CAAA,CAAA,CAAC,CACxE,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAA6C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC9D,CACF,CAAA,CCPMkK,CAAkB,CAAA,CAAA,CACtB,MACAlK,CACA,CAAA,CACE,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA4D,CACnE,CAAA,CACA,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CACF,CACF,CCfMmK,CAAAA,CAAAA,CAAAA,CAAgB,CACpB,CACAnK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,GAAI,CAAC,CAAA,CAC9D,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAC3B,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAC1B,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC5B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC3B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,WAAY,CAAC,CAAA,CAC3B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA,CACzB,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAC3B,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC7B,CACF,ECdMoK,CAAsB,CAAA,CAAA,CAC1B,CACApK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA4C,CAAC,CAC3D,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAA0C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACzD,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAA2C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC1D,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,SAAU,CAAC,CAAA,CACzB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAC1B,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAC1B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,UAAW,CAAC,CAC5B,CACF,CAAA,CCZMqK,GAAqB,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CACArK,CACA,CAAA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAQ,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAG,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CACxE,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC9B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,UAAW,CAAC,CAAA,CAC1B,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAC3B,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC3B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC5B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,YAAa,CAAC,CAAA,CAC5B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAC5B,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAC5B,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC3B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC7B,CACF,CAAA,CChBMsK,CAAgB,CAAA,CAAA,CACpB,MACAtK,CACA,CAAA,CACE,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CAAA,CACA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAC1B,CAAA,CAAC,SAAU,CAAE,CAAA,CAAA,CAAI,MAAO,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAC9C,CAAA,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,KAAM,CAAC,CACjD,CACF,CAAA,CCdMuK,GAAiB,CACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CACAvK,CACA,CAAA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA4C,CAAC,CAC3D,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAuD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACtE,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC1B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,QAAS,CAAC,CAAA,CACxB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA,CACzB,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CACzB,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC1B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,WAAY,CAAC,CAAA,CAC3B,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAC7B,CACF,CCdMwK,CAAAA,CAAAA,CAAAA,CAAuB,CAC3B,CACAxK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,KAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAI,CAAA,CAAA,CAAC,CAC/D,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAChD,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CACnD,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAC5B,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC5B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC3B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAC5B,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC3B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC5B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,WAAY,CAAC,CAC7B,CACF,CAAA,CCfMyK,GAA2B,CAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CACAzK,CACA,CAAA,CACE,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA4D,CACnE,CACA,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAI,CAAA,CAAA,CAAC,CACjD,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAC/C,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAClD,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAClC,CACF,CAAA,CCbM0K,CAA0B,CAAA,CAAA,CAC9B,MACA1K,CACA,CAAA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CACxE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,GAAI,CAAC,CAAA,CACjD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAC,EAC/C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAK,CAAA,CAAA,CAAA,CAAC,CAClD,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACjC,CACF,CAAA,CCVM2K,CAA0B,CAAA,CAAA,CAC9B,MACA3K,CACA,CAAA,CACE,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAA+D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACtE,CACA,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EACzB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,QAAS,CAAC,CAAA,CACxB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA,CACzB,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAyB,CAAC,CACxC,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAwC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACzD,CACF,ECdM4K,CAAyB,CAAA,CAAA,CAC7B,CACA5K,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,KAAM,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,EAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,GAAI,CAAC,CAAA,CACxE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAC,EACjD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,GAAI,CAAC,CAAA,CAC/C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAC,EAClD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,WAAY,CAAC,CAAA,CAC3B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAC5B,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAC5B,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC3B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC5B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,YAAa,CAAC,CAC9B,CACF,CAAA,CCfM6K,GAA0B,CAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CACA7K,CACA,CAAA,CACE,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA4D,CACnE,CACA,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,SAAU,CAAC,CAAA,CACzB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CACxB,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAC1B,CAAA,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,EAAG,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CACF,CACF,EClBM8K,CAA0B,CAAA,CAAA,CAC9B,CACA9K,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAE,CAAA,CAAG,2DAA4D,CACnE,CAAA,CACA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CACjD,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,GAAI,CAAC,CAAA,CAC/C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAC,EAClD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAC,CACrD,CACF,CAAA,CCbM+K,GAAwB,CAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CACA/K,CACA,CAAA,CACE,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmE,CAC1E,CACA,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAA+B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC9C,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EACzB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,SAAU,CAAC,CAAA,CACzB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAA,CAC7B,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAC,CACnD,CACF,CAAA,CCdMgL,GAAyB,CAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CACAhL,CACA,CAAA,CACE,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA4D,CACnE,CACA,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAI,CAAA,CAAA,CAAC,CACjD,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAC/C,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAClD,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CACnD,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CACrD,CACF,CCdMiL,CAAAA,CAAAA,CAAAA,CAA0B,CAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CACAjL,EACA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,MAAO,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,IAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,GAAI,CAAC,CAAA,CACxE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAC,EACjD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAI,CAAA,CAAA,CAAC,CAC/C,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAClD,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC3B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC1B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,WAAY,CAAC,CAAA,CAC3B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAC9B,CACF,CCbMkL,CAAAA,CAAAA,CAAAA,CAA2B,CAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CACAlL,EACA,CACE,CACE,OACA,CAAE,CAAA,CAAG,6DAA8D,CACrE,CAAA,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA,CACzB,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CACxB,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC1B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAwC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EACvD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,gBAAiB,CAAC,CAClC,CACF,CCdMmL,CAAAA,CAAAA,CAAAA,CAAuB,CAC3B,CACAnL,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CACE,OACA,CAAE,CAAA,CAAG,CAA4D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnE,EACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAI,CAAA,CAAA,CAAC,CACjD,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAC/C,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAK,CAAA,CAAA,CAAA,CAAC,CAClD,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CACnD,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CACrD,CACF,CCdMoL,CAAAA,CAAAA,CAAAA,CAAsB,CAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CACApL,EACA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,MAAO,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,IAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAI,CAAA,CAAA,CAAC,CACxE,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CACjD,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAI,CAAA,CAAA,CAAC,CAC/C,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAClD,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CACnD,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAC,CACrD,CACF,CAAA,CCXMqL,GAAqB,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CACArL,CACA,CAAA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAQ,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAG,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CACxE,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CACjD,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAC/C,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CACpD,CACF,CCTMsL,CAAAA,CAAAA,CAAAA,CAAsB,CAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CACAtL,EACA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CACjD,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA0C,CAAC,CACzD,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAoC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACnD,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAsC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACvD,CACF,CAAA,CCTMuL,CAAmB,CAAA,CAAA,CACvB,MACAvL,CACA,CAAA,CACE,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CACA,CAAA,CAAC,SAAU,CAAE,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAG,CAAA,CAAA,CAAA,CAAI,CAAC,CAC3C,CACF,CCZMwL,CAAAA,CAAAA,CAAAA,CAAqB,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CACAxL,EACA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAuC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACtD,CAAA,CACE,OACA,CACE,CAAA,CAAG,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,EACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,aAAc,CAAC,CAAA,CAC7B,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC/B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC5B,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAA,CAAG,gFACL,CACF,CAAA,CACA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CAAA,CACA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAC,CACnD,CACF,CC5BMyL,CAAAA,CAAAA,CAAAA,CAAkB,CACtB,CACAzL,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CACE,OACA,CAAE,CAAA,CAAG,CAA4D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnE,EACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,YAAa,CAAC,CAAA,CAC5B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAC5B,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CACA,CAAA,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,EAAG,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CACF,CACF,ECvBM0L,CAAgB,CAAA,CAAA,CACpB,CACA1L,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAA,CAAG,+HACL,CACF,CAAA,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAC,CAC9C,CAAA,CAAC,SAAU,CAAE,CAAA,CAAA,CAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,OAAQ,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CACjD,CACF,CCbM2L,CAAAA,CAAAA,CAAAA,CAAmB,CACvB,CACA3L,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAA,CAAG,+HACL,CACF,CAAA,CACA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgE,CACvE,CAAA,CACA,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgE,CACvE,CACF,CACF,CCnBM4L,CAAAA,CAAAA,CAAAA,CAAsB,CAC1B,CACA5L,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,SAAU,CAAE,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAG,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CACzC,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAC,CAAA,CAClD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAG,CAAI,CAAA,CAAA,CAAC,CACxC,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CACpD,CACF,ECTM6L,CAA0B,CAAA,CAAA,CAC9B,MACA7L,CACA,CAAA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAC,CAAA,CACzC,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAC,CAAA,CAClD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAG,CAAI,CAAA,CAAA,CAAC,CACzC,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CACpD,CACF,CCTM8L,CAAAA,CAAAA,CAAAA,CAAsB,CAC1B,CACA9L,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,WAAY,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAK,CAAA,CAAA,CAAA,CAAC,CAClD,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,wCAAyC,CAAC,CAAA,CACxD,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA6C,CAAC,CAC9D,CACF,CCTM+L,CAAAA,CAAAA,CAAAA,CAAiB,CACrB,CACA/L,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CACE,OACA,CAAE,CAAA,CAAG,CAA4D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnE,EACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,qBAAsB,CAAC,CAAA,CACrC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAsB,CAAC,CAAA,CACrC,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,OAAQ,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CACtD,CACF,CCZMgM,CAAAA,CAAAA,CAAAA,CAAmB,CACvB,CACAhM,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAgD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC/D,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,cAAe,CAAC,CAAA,CAC9B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA4C,CAAC,CAAA,CAC3D,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC1B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,SAAU,CAAC,CAAA,CACzB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CACxB,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CACzB,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACzB,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC3B,CACF,CAAA,CCdMiM,CAAgB,CAAA,CAAA,CACpB,MACAjM,CACA,CAAA,CACE,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CAAA,CACA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAC1B,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC3B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAmC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACpD,CACF,CAAA,CCdMkM,CAAuB,CAAA,CAAA,CAC3B,MACAlM,CACA,CAAA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACjC,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAuB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACxC,CACF,CAAA,CCPMmM,CAAyB,CAAA,CAAA,CAC7B,MACAnM,CACA,CAAA,CACE,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CAAA,CACA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAC,CACjC,CACF,CCZMoM,CAAAA,CAAAA,CAAAA,CAAwB,CAC5B,CACApM,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAqC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EACpD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,uBAAwB,CAAC,CAClD,CACF,CAAA,CCPMqM,GAAwB,CAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CACArM,CACA,CAAA,CACE,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAC,CAC1C,CAAA,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAA4D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnE,CACF,CACF,ECVMsM,CAAkB,CAAA,CAAA,CACtB,MACAtM,CACA,CAAA,CAAC,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAC,CAAC,CAC7C,CCJMuM,CAAAA,CAAAA,CAAAA,CAAoB,CACxB,CACAvM,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CACE,OACA,CACE,CAAA,CAAG,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,EACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAK,CAAA,CAAA,CAAA,CAAC,CACpD,CACF,ECZMwM,CAAmB,CAAA,CAAA,CACvB,CACAxM,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,wDAAyD,CAAC,CAAA,CACxE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA0D,CAAC,CAAA,CACzE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAuD,CAAC,CACtE,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAoD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACrE,CACF,ECTMyM,CAA8B,CAAA,CAAA,CAClC,CACAzM,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAQ,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAG,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CACxE,CAAA,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,OAAQ,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC7C,CACF,ECPM0M,CAAwB,CAAA,CAAA,CAC5B,CACA1M,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,gBAAiB,CAAC,CAAC,CAC7C,CAAA,CCJM2M,GAAyB,CAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CACA3M,EACA,CACE,CAAC,WAAY,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC3C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,SAAU,CAAC,CAC3B,CACF,CAAA,CCPM4M,GAAwB,CAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CACA5M,CACA,CAAA,CACE,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAC,CACzC,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC5B,CACF,ECPM6M,CAA8B,CAAA,CAAA,CAClC,MACA7M,CACA,CAAA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAQ,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAG,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CACxE,CAAA,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,OAAQ,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC7C,CACF,ECPM8M,CAAwB,CAAA,CAAA,CAC5B,CACA9M,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,iBAAkB,CAAC,CAAC,CAC9C,CAAA,CCJM+M,GAA+B,CACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CACA/M,CACA,CAAA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAQ,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAG,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CACxE,CAAA,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,OAAQ,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC7C,CACF,ECPMgN,CAAyB,CAAA,CAAA,CAC7B,CACAhN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAC,CAAC,CAC7C,CCJMiN,CAAAA,CAAAA,CAAAA,CAA4B,CAChC,CACAjN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,KAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAC,EACxE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,kBAAmB,CAAC,CAC7C,CACF,CAAA,CCPMkN,GAAsB,CAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CACAlN,EACA,CAAC,CAAC,WAAY,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAC9C,CAAA,CCJMmN,CAA2B,CAAA,CAAA,CAC/B,MACAnN,CACA,CAAA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAC,CAAA,CAC/B,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAC,CAChC,CACF,CCPMoN,CAAAA,CAAAA,CAAAA,CAAyB,CAC7B,CACApN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,WAAY,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,kBAAmB,CAAC,CAAA,CAC3C,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAC,CAC3C,CACF,CCPMqN,CAAAA,CAAAA,CAAAA,CAA8B,CAClC,CACArN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC9B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,eAAgB,CAAC,CACjC,CACF,CAAA,CCPMsN,GAAyB,CAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CACAtN,CACA,CAAA,CACE,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAC,CAC1C,CAAA,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,OAAQ,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC7C,CACF,ECPMuN,CAA8B,CAAA,CAAA,CAClC,CACAvN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,gBAAiB,CAAC,CAAA,CAChC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAC,CACjC,CACF,CCPMwN,CAAAA,CAAAA,CAAAA,CAA0B,CAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CACAxN,EACA,CACE,CAAC,WAAY,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,kBAAmB,CAAC,CAAA,CAC3C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAC,CAC3C,CACF,CCPMyN,CAAAA,CAAAA,CAAAA,CAA2B,CAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CACAzN,EACA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC/B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAChC,CACF,CAAA,CCPM0N,CAAuB,CAAA,CAAA,CAC3B,MACA1N,CACA,CAAA,CACE,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,OAAQ,CAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC1C,CAAA,CAAC,WAAY,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC7C,CACF,CAAA,CCPM2N,CAAmB,CAAA,CAAA,CACvB,MACA3N,CACA,CAAA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAG,CAAK,CAAA,CAAA,CAAA,CAAC,CAC1C,CAAA,CAAC,SAAU,CAAE,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAG,CAAA,CAAA,CAAA,CAAI,CAAC,CACzC,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAI,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CACpD,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,OAAQ,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CACzD,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,GAAI,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAC,CAC9D,CACF,CAAA,CCVM4N,GAAmB,CACvB,CAAA,CAAA,CAAA,CAAA,CAAA,CACA5N,CACA,CAAA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmD,CAAC,CAClE,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAA4C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC3D,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAuB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EACtC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,SAAU,CAAC,CAAA,CACzB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAC3B,CACF,ECVM6N,CAAyB,CAAA,CAAA,CAC7B,CACA7N,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAK,CAAA,CAAA,CAAA,CAAC,CACjD,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC/B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,UAAW,CAAC,CAAA,CAC1B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAC5B,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CACzB,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAwB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACvC,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAwB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACzC,CACF,CAAA,CCZM8N,CAAsB,CAAA,CAAA,CAC1B,MACA9N,CACA,CAAA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAC,CAAA,CAC/B,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC1B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,SAAU,CAAC,CAAA,CACzB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAwB,CAAC,CAAA,CACvC,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAwB,CAAC,CACzC,CACF,CCVM+N,CAAAA,CAAAA,CAAAA,CAAsB,CAC1B,CACA/N,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,SAAU,CAAE,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAC1C,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAC,CAC3C,CACF,CAAA,CCPMgO,CAA2B,CAAA,CAAA,CAC/B,MACAhO,CACA,CAAA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAG,CAAK,CAAA,CAAA,CAAA,CAAC,CAC1C,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC5B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAC5B,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC7B,CACF,ECTMiO,CAAwB,CAAA,CAAA,CAC5B,CACAjO,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,UAAW,CAAC,CAAA,CAC1B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAC1B,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,IAAK,CAAC,CAC5C,CACF,CCRMkO,CAAAA,CAAAA,CAAAA,CAAsB,CAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CACAlO,EACA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC5B,CAAA,CACE,OACA,CACE,CAAA,CAAG,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,EACA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAA,CAAG,yEACL,CACF,CACF,CACF,CAAA,CClBMmO,GAAyB,CAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CACAnO,CACA,CAAA,CACE,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAC1C,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAC9B,CACF,CCPMoO,CAAAA,CAAAA,CAAAA,CAAwB,CAC5B,CACApO,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CACjD,CAAA,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,IAAK,CAAC,CAC5C,CACF,CAAA,CCPMqO,GAAmB,CACvB,CAAA,CAAA,CAAA,CAAA,CAAA,CACArO,CACA,CAAA,CAAC,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAC,CAAC,CAC9C,CAAA,CCJMsO,CAAyB,CAAA,CAAA,CAC7B,MACAtO,CACA,CAAA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAG,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAC/D,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAA0B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACzC,CAAA,CAAC,SAAU,CAAE,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAG,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CACvC,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA2B,CAAC,CAC1C,CAAA,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,GAAI,CAAC,CAC3C,CACF,CCVMuO,CAAAA,CAAAA,CAAAA,CAAmB,CACvB,CACAvO,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CACE,OACA,CACE,CAAA,CAAG,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,EACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,kCAAmC,CAAC,CAAA,CAClD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAC,CAAA,CAChC,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAC,CACrC,CACF,CCdMwO,CAAAA,CAAAA,CAAAA,CAAyB,CAC7B,CACAxO,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA+C,CAAC,CAAA,CAC9D,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CACA,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAqB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACpC,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAuB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACxC,CACF,CAAA,CCdMyO,CAA2B,CAAA,CAAA,CAC/B,MACAzO,CACA,CAAA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,EAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CACtE,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CACA,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACjC,CACF,ECbM0O,CAA0B,CAAA,CAAA,CAC9B,CACA1O,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,IAAK,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,EAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAG,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CACtE,CAAA,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAA4D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnE,CACA,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAA0B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,WAAY,CAAC,CAAA,CAC3B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAC,CAClC,CACF,CCbM2O,CAAAA,CAAAA,CAAAA,CAA0B,CAC9B,CACA3O,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,IAAK,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,EAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,GAAI,CAAC,CAAA,CACtE,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CAAA,CACA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA8C,CAAC,CAC7D,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAA4B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC7C,CACF,CAAA,CCdM4O,GAA0B,CAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CACA5O,CACA,CAAA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,OAAQ,CAAK,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAG,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CACtE,CAAA,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,EAAG,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CACA,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC1B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,UAAW,CAAC,CAAA,CAC1B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAC3B,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAC7B,CACF,CChBM6O,CAAAA,CAAAA,CAAAA,CAA2B,CAC/B,CACA7O,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CACE,OACA,CACE,CAAA,CAAG,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,EACA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAA,CAAG,wFACL,CACF,CAAA,CACA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAClC,CACF,EClBM8O,CAA+B,CAAA,CAAA,CACnC,CACA9O,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,IAAK,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,EAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,GAAI,CAAC,CAAA,CACtE,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA6D,CACpE,CAAA,CACA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA2B,CAAC,CAC1C,CAAA,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,EAAG,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CACA,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC3B,CACF,CAAA,CClBM+O,CAA0B,CAAA,CAAA,CAC9B,MACA/O,CACA,CAAA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,EAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CACtE,CAAA,CACE,OACA,CACE,CAAA,CAAG,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,EACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,cAAe,CAAC,CAAA,CAC9B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAC1B,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAC5B,CACF,CCfMgP,CAAAA,CAAAA,CAAAA,CAAuB,CAC3B,CACAhP,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,OAAQ,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,IAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,GAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAC,EACtE,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAA,CAAG,0EACL,CACF,CAAA,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAC5B,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAC7B,CACF,CCdMiP,CAAAA,CAAAA,CAAAA,CAAsB,CAC1B,CACAjP,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,EAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CACtE,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CACF,CACF,CCZMkP,CAAAA,CAAAA,CAAAA,CAAmB,CACvB,CACAlP,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,SAAU,CAAE,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAC1C,CAAA,CAAC,WAAY,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAoB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC9C,CACF,CAAA,CCPMmP,CAAoB,CAAA,CAAA,CACxB,MACAnP,CACA,CAAA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAG,CAAK,CAAA,CAAA,CAAA,CAAC,CAC1C,CAAA,CAAC,WAAY,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC5C,CACF,CAAA,CCPMoP,CAAoB,CAAA,CAAA,CACxB,MACApP,CACA,CAAA,CACE,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,IAAK,CAAC,CAAA,CAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmB,CAAC,CAC7C,CACF,CCPMqP,CAAAA,CAAAA,CAAAA,CAAoB,CACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CACArP,EACA,CACE,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,IAAK,CAAC,CAAA,CAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CACvC,CACF,CCPMsP,CAAAA,CAAAA,CAAAA,CAAmB,CACvB,CAAA,CAAA,CAAA,CAAA,CAAA,CACAtP,EACA,CACE,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,IAAK,CAAC,CAAA,CAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmB,CAAC,CAC7C,CACF,CCPMuP,CAAAA,CAAAA,CAAAA,CAAmB,CACvB,CAAA,CAAA,CAAA,CAAA,CAAA,CACAvP,EACA,CACE,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAC1C,CAAA,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,OAAQ,CAAqB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC/C,CACF,ECPMwP,CAAmB,CAAA,CAAA,CACvB,CACAxP,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAE,CAAA,CAAA,CAAI,KAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAC1C,CAAA,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,OAAQ,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC7C,CACF,ECPMyP,CAAmB,CAAA,CAAA,CACvB,MACAzP,CACA,CAAA,CACE,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAC,EAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,oBAAqB,CAAC,CAC/C,CACF,CAAA,CCPM0P,GAAmB,CACvB,CAAA,CAAA,CAAA,CAAA,CAAA,CACA1P,CACA,CAAA,CACE,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAC,EAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqB,CAAC,CAC/C,CACF,CCPM2P,CAAAA,CAAAA,CAAAA,CAAmB,CACvB,CACA3P,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,SAAU,CAAE,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAC1C,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAC,CAC9C,CACF,CCPM4P,CAAAA,CAAAA,CAAAA,CAAmB,CACvB,CACA5P,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,SAAU,CAAE,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAC1C,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAC,CAC5C,CACF,CCPM6P,CAAAA,CAAAA,CAAAA,CAAmB,CACvB,CACA7P,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,SAAU,CAAE,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAC1C,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAC,CAC9C,CACF,ECPM8P,CAAkB,CAAA,CAAA,CACtB,MACA9P,CACA,CAAA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAG,CAAK,CAAA,CAAA,CAAA,CAAC,CAC1C,CAAA,CAAC,WAAY,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC7C,CACF,CAAA,CCPM+P,CAAqB,CAAA,CAAA,CACzB,MACA/P,CACA,CAAA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAsD,CAAC,CAAA,CACrE,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAM,CAAG,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CACzC,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAC1B,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC1B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC3B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,SAAU,CAAC,CAAA,CACzB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAC,CAC/B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAClC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,gBAAiB,CAAC,CAAA,CAChC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmB,CAAC,CACpC,CACF,CCfMgQ,CAAAA,CAAAA,CAAAA,CAAyB,CAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CACAhQ,EACA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAA2D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC1E,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EACzB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,SAAU,CAAC,CAAA,CACzB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAC1B,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAC1B,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC1B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC5B,CACF,CAAA,CCZMiQ,GAAqB,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CACAjQ,EACA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAA2D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC1E,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC1B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,UAAW,CAAC,CAC5B,CACF,CAAA,CCRMkQ,GAAsB,CAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CACAlQ,CACA,CAAA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA2D,CAAC,CAC1E,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC1B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EACzB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,YAAa,CAAC,CAAA,CAC5B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAC3B,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAC1B,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC9B,CACF,CAAA,CCZMmQ,GAA2B,CAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CACAnQ,CACA,CAAA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA0D,CAAC,CACzE,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAoB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACrC,CACF,ECPMoQ,CAA0B,CAAA,CAAA,CAC9B,CACApQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAA,CAAG,kFACL,CACF,CAAA,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA4C,CAAC,CAAA,CAC3D,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAC1B,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC3B,CACF,ECdMqQ,CAAsB,CAAA,CAAA,CAC1B,CACArQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,4CAA6C,CAAC,CAAA,CAC5D,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CACF,CACF,CCZMsQ,CAAAA,CAAAA,CAAAA,CAAqB,CACzB,CACAtQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,YAAa,CAAC,CAAA,CAC5B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA2D,CAAC,CAAA,CAC1E,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CACF,CACF,CCbMuQ,CAAAA,CAAAA,CAAAA,CAA0B,CAC9B,CACAvQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,CACE,CAAC,OAAQ,CAAE,CAAA,CAAG,CAA2D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC1E,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAC7B,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC3B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC9B,CACF,CAAA,CCTMwQ,CAAsB,CAAA,CAAA,CAC1B,MACAxQ,CACA,CAAA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA2D,CAAC,CAAA,CAC1E,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAC1B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,SAAU,CAAC,CAAA,CACzB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAC5B,CACF,CCTMyQ,CAAAA,CAAAA,CAAAA,CAAsB,CAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CACAzQ,EACA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAA2D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC1E,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC3B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,WAAY,CAAC,CAAA,CAC3B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAC5B,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAC5B,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC5B,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC9B,CACF,CAAA,CCZM0Q,CAAyB,CAAA,CAAA,CAC7B,MACA1Q,CACA,CAAA,CACE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CACzB,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAuB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EACtC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,UAAW,CAAC,CAAA,CAC1B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAwB,CAAC,CAAA,CACvC,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAsC,CAAC,CACrD,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAA4C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC3D,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC1B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAG,SAAU,CAAC,CAC3B,CACF,CAAA,CCbM2Q,GAAqB,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CACA3Q,CACA,CAAA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CACzB,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAuB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACtC,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC1B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAwB,CAAC,CACvC,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAsC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACrD,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAA6C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC9D,CACF,CAAA,CCXM4Q,CAAkB,CAAA,CAAA,CACtB,MACA5Q,CACA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAsD,CAAC,CAAC,CACzE,CCJM6Q,CAAAA,CAAAA,CAAAA,CAAmB,CACvB,CAAA,CAAA,CAAA,CAAA,CAAA,CACA7Q,EACA,CACE,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAG,CAAsD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACrE,CAAA,CAAC,OAAQ,CAAE,CAAA,CAAG,CAAyD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC1E,CACF,CAAA,CCPM8Q,CAAmB,CAAA,CAAA,CACvB,MACA9Q,CACA,CAAA,CACE,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CAAA,CACA,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CACA,CAAA,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,EAAG,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,EACA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,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AAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CAAA,CACA,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,C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A,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CACA,CAAA,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,EAAG,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA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A,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CACA,CAAA,CACE,OACA,CACE,CAAA,CAAG,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA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,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CACA,CAAA,CACE,OACA,CACE,CAAA,CAAG,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA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CAAA,CACA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,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AA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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AA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CAAA,CACA,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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AA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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AAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,EACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAC,CACnD,CACF,CAAA,CCZMgtB,GAA0B,CAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CACAhtB,CACA,CAAA,CACE,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAC,CACzC,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CACjD,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,EAAG,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CACF,CACF,CAAA,CCbMitB,CAAkB,CAAA,CAAA,CACtB,MACAjtB,CACA,CAAA,CACE,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,C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AA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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AA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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ACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,CACJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CACF,CACF,CAAA,CCZMk2B,CAAkB,CAAA,CAAA,CACtB,MACAl2B,CACA,CAAA,CACE,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA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CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CAAA,CACA,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CACF,CACA,CAAA,CACE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,EAAG,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,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"} \ No newline at end of file diff --git a/docker/nginx/dist/html/assets/js/particles.min.js b/docker/nginx/dist/html/assets/js/particles.min.js new file mode 100644 index 00000000..b3d46d12 --- /dev/null +++ b/docker/nginx/dist/html/assets/js/particles.min.js @@ -0,0 +1,9 @@ +/* ----------------------------------------------- +/* Author : Vincent Garreau - vincentgarreau.com +/* MIT license: http://opensource.org/licenses/MIT +/* Demo / Generator : vincentgarreau.com/particles.js +/* GitHub : github.com/VincentGarreau/particles.js +/* How to use? : Check the GitHub README +/* v2.0.0 +/* ----------------------------------------------- */ +function hexToRgb(e){var a=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;e=e.replace(a,function(e,a,t,i){return a+a+t+t+i+i});var t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null}function clamp(e,a,t){return Math.min(Math.max(e,a),t)}function isInArray(e,a){return a.indexOf(e)>-1}var pJS=function(e,a){var t=document.querySelector("#"+e+" > .particles-js-canvas-el");this.pJS={canvas:{el:t,w:t.offsetWidth,h:t.offsetHeight},particles:{number:{value:400,density:{enable:!0,value_area:800}},color:{value:"#fff"},shape:{type:"circle",stroke:{width:0,color:"#ff0000"},polygon:{nb_sides:5},image:{src:"",width:100,height:100}},opacity:{value:1,random:!1,anim:{enable:!1,speed:2,opacity_min:0,sync:!1}},size:{value:20,random:!1,anim:{enable:!1,speed:20,size_min:0,sync:!1}},line_linked:{enable:!0,distance:100,color:"#fff",opacity:1,width:1},move:{enable:!0,speed:2,direction:"none",random:!1,straight:!1,out_mode:"out",bounce:!1,attract:{enable:!1,rotateX:3e3,rotateY:3e3}},array:[]},interactivity:{detect_on:"canvas",events:{onhover:{enable:!0,mode:"grab"},onclick:{enable:!0,mode:"push"},resize:!0},modes:{grab:{distance:100,line_linked:{opacity:1}},bubble:{distance:200,size:80,duration:.4},repulse:{distance:200,duration:.4},push:{particles_nb:4},remove:{particles_nb:2}},mouse:{}},retina_detect:!1,fn:{interact:{},modes:{},vendors:{}},tmp:{}};var i=this.pJS;a&&Object.deepExtend(i,a),i.tmp.obj={size_value:i.particles.size.value,size_anim_speed:i.particles.size.anim.speed,move_speed:i.particles.move.speed,line_linked_distance:i.particles.line_linked.distance,line_linked_width:i.particles.line_linked.width,mode_grab_distance:i.interactivity.modes.grab.distance,mode_bubble_distance:i.interactivity.modes.bubble.distance,mode_bubble_size:i.interactivity.modes.bubble.size,mode_repulse_distance:i.interactivity.modes.repulse.distance},i.fn.retinaInit=function(){i.retina_detect&&window.devicePixelRatio>1?(i.canvas.pxratio=window.devicePixelRatio,i.tmp.retina=!0):(i.canvas.pxratio=1,i.tmp.retina=!1),i.canvas.w=i.canvas.el.offsetWidth*i.canvas.pxratio,i.canvas.h=i.canvas.el.offsetHeight*i.canvas.pxratio,i.particles.size.value=i.tmp.obj.size_value*i.canvas.pxratio,i.particles.size.anim.speed=i.tmp.obj.size_anim_speed*i.canvas.pxratio,i.particles.move.speed=i.tmp.obj.move_speed*i.canvas.pxratio,i.particles.line_linked.distance=i.tmp.obj.line_linked_distance*i.canvas.pxratio,i.interactivity.modes.grab.distance=i.tmp.obj.mode_grab_distance*i.canvas.pxratio,i.interactivity.modes.bubble.distance=i.tmp.obj.mode_bubble_distance*i.canvas.pxratio,i.particles.line_linked.width=i.tmp.obj.line_linked_width*i.canvas.pxratio,i.interactivity.modes.bubble.size=i.tmp.obj.mode_bubble_size*i.canvas.pxratio,i.interactivity.modes.repulse.distance=i.tmp.obj.mode_repulse_distance*i.canvas.pxratio},i.fn.canvasInit=function(){i.canvas.ctx=i.canvas.el.getContext("2d")},i.fn.canvasSize=function(){i.canvas.el.width=i.canvas.w,i.canvas.el.height=i.canvas.h,i&&i.interactivity.events.resize&&window.addEventListener("resize",function(){i.canvas.w=i.canvas.el.offsetWidth,i.canvas.h=i.canvas.el.offsetHeight,i.tmp.retina&&(i.canvas.w*=i.canvas.pxratio,i.canvas.h*=i.canvas.pxratio),i.canvas.el.width=i.canvas.w,i.canvas.el.height=i.canvas.h,i.particles.move.enable||(i.fn.particlesEmpty(),i.fn.particlesCreate(),i.fn.particlesDraw(),i.fn.vendors.densityAutoParticles()),i.fn.vendors.densityAutoParticles()})},i.fn.canvasPaint=function(){i.canvas.ctx.fillRect(0,0,i.canvas.w,i.canvas.h)},i.fn.canvasClear=function(){i.canvas.ctx.clearRect(0,0,i.canvas.w,i.canvas.h)},i.fn.particle=function(e,a,t){if(this.radius=(i.particles.size.random?Math.random():1)*i.particles.size.value,i.particles.size.anim.enable&&(this.size_status=!1,this.vs=i.particles.size.anim.speed/100,i.particles.size.anim.sync||(this.vs=this.vs*Math.random())),this.x=t?t.x:Math.random()*i.canvas.w,this.y=t?t.y:Math.random()*i.canvas.h,this.x>i.canvas.w-2*this.radius?this.x=this.x-this.radius:this.x<2*this.radius&&(this.x=this.x+this.radius),this.y>i.canvas.h-2*this.radius?this.y=this.y-this.radius:this.y<2*this.radius&&(this.y=this.y+this.radius),i.particles.move.bounce&&i.fn.vendors.checkOverlap(this,t),this.color={},"object"==typeof e.value)if(e.value instanceof Array){var s=e.value[Math.floor(Math.random()*i.particles.color.value.length)];this.color.rgb=hexToRgb(s)}else void 0!=e.value.r&&void 0!=e.value.g&&void 0!=e.value.b&&(this.color.rgb={r:e.value.r,g:e.value.g,b:e.value.b}),void 0!=e.value.h&&void 0!=e.value.s&&void 0!=e.value.l&&(this.color.hsl={h:e.value.h,s:e.value.s,l:e.value.l});else"random"==e.value?this.color.rgb={r:Math.floor(256*Math.random())+0,g:Math.floor(256*Math.random())+0,b:Math.floor(256*Math.random())+0}:"string"==typeof e.value&&(this.color=e,this.color.rgb=hexToRgb(this.color.value));this.opacity=(i.particles.opacity.random?Math.random():1)*i.particles.opacity.value,i.particles.opacity.anim.enable&&(this.opacity_status=!1,this.vo=i.particles.opacity.anim.speed/100,i.particles.opacity.anim.sync||(this.vo=this.vo*Math.random()));var n={};switch(i.particles.move.direction){case"top":n={x:0,y:-1};break;case"top-right":n={x:.5,y:-.5};break;case"right":n={x:1,y:-0};break;case"bottom-right":n={x:.5,y:.5};break;case"bottom":n={x:0,y:1};break;case"bottom-left":n={x:-.5,y:1};break;case"left":n={x:-1,y:0};break;case"top-left":n={x:-.5,y:-.5};break;default:n={x:0,y:0}}i.particles.move.straight?(this.vx=n.x,this.vy=n.y,i.particles.move.random&&(this.vx=this.vx*Math.random(),this.vy=this.vy*Math.random())):(this.vx=n.x+Math.random()-.5,this.vy=n.y+Math.random()-.5),this.vx_i=this.vx,this.vy_i=this.vy;var r=i.particles.shape.type;if("object"==typeof r){if(r instanceof Array){var c=r[Math.floor(Math.random()*r.length)];this.shape=c}}else this.shape=r;if("image"==this.shape){var o=i.particles.shape;this.img={src:o.image.src,ratio:o.image.width/o.image.height},this.img.ratio||(this.img.ratio=1),"svg"==i.tmp.img_type&&void 0!=i.tmp.source_svg&&(i.fn.vendors.createSvgImg(this),i.tmp.pushing&&(this.img.loaded=!1))}},i.fn.particle.prototype.draw=function(){function e(){i.canvas.ctx.drawImage(r,a.x-t,a.y-t,2*t,2*t/a.img.ratio)}var a=this;if(void 0!=a.radius_bubble)var t=a.radius_bubble;else var t=a.radius;if(void 0!=a.opacity_bubble)var s=a.opacity_bubble;else var s=a.opacity;if(a.color.rgb)var n="rgba("+a.color.rgb.r+","+a.color.rgb.g+","+a.color.rgb.b+","+s+")";else var n="hsla("+a.color.hsl.h+","+a.color.hsl.s+"%,"+a.color.hsl.l+"%,"+s+")";switch(i.canvas.ctx.fillStyle=n,i.canvas.ctx.beginPath(),a.shape){case"circle":i.canvas.ctx.arc(a.x,a.y,t,0,2*Math.PI,!1);break;case"edge":i.canvas.ctx.rect(a.x-t,a.y-t,2*t,2*t);break;case"triangle":i.fn.vendors.drawShape(i.canvas.ctx,a.x-t,a.y+t/1.66,2*t,3,2);break;case"polygon":i.fn.vendors.drawShape(i.canvas.ctx,a.x-t/(i.particles.shape.polygon.nb_sides/3.5),a.y-t/.76,2.66*t/(i.particles.shape.polygon.nb_sides/3),i.particles.shape.polygon.nb_sides,1);break;case"star":i.fn.vendors.drawShape(i.canvas.ctx,a.x-2*t/(i.particles.shape.polygon.nb_sides/4),a.y-t/1.52,2*t*2.66/(i.particles.shape.polygon.nb_sides/3),i.particles.shape.polygon.nb_sides,2);break;case"image":if("svg"==i.tmp.img_type)var r=a.img.obj;else var r=i.tmp.img_obj;r&&e()}i.canvas.ctx.closePath(),i.particles.shape.stroke.width>0&&(i.canvas.ctx.strokeStyle=i.particles.shape.stroke.color,i.canvas.ctx.lineWidth=i.particles.shape.stroke.width,i.canvas.ctx.stroke()),i.canvas.ctx.fill()},i.fn.particlesCreate=function(){for(var e=0;e=i.particles.opacity.value&&(a.opacity_status=!1),a.opacity+=a.vo):(a.opacity<=i.particles.opacity.anim.opacity_min&&(a.opacity_status=!0),a.opacity-=a.vo),a.opacity<0&&(a.opacity=0)),i.particles.size.anim.enable&&(1==a.size_status?(a.radius>=i.particles.size.value&&(a.size_status=!1),a.radius+=a.vs):(a.radius<=i.particles.size.anim.size_min&&(a.size_status=!0),a.radius-=a.vs),a.radius<0&&(a.radius=0)),"bounce"==i.particles.move.out_mode)var s={x_left:a.radius,x_right:i.canvas.w,y_top:a.radius,y_bottom:i.canvas.h};else var s={x_left:-a.radius,x_right:i.canvas.w+a.radius,y_top:-a.radius,y_bottom:i.canvas.h+a.radius};switch(a.x-a.radius>i.canvas.w?(a.x=s.x_left,a.y=Math.random()*i.canvas.h):a.x+a.radius<0&&(a.x=s.x_right,a.y=Math.random()*i.canvas.h),a.y-a.radius>i.canvas.h?(a.y=s.y_top,a.x=Math.random()*i.canvas.w):a.y+a.radius<0&&(a.y=s.y_bottom,a.x=Math.random()*i.canvas.w),i.particles.move.out_mode){case"bounce":a.x+a.radius>i.canvas.w?a.vx=-a.vx:a.x-a.radius<0&&(a.vx=-a.vx),a.y+a.radius>i.canvas.h?a.vy=-a.vy:a.y-a.radius<0&&(a.vy=-a.vy)}if(isInArray("grab",i.interactivity.events.onhover.mode)&&i.fn.modes.grabParticle(a),(isInArray("bubble",i.interactivity.events.onhover.mode)||isInArray("bubble",i.interactivity.events.onclick.mode))&&i.fn.modes.bubbleParticle(a),(isInArray("repulse",i.interactivity.events.onhover.mode)||isInArray("repulse",i.interactivity.events.onclick.mode))&&i.fn.modes.repulseParticle(a),i.particles.line_linked.enable||i.particles.move.attract.enable)for(var n=e+1;n0){var c=i.particles.line_linked.color_rgb_line;i.canvas.ctx.strokeStyle="rgba("+c.r+","+c.g+","+c.b+","+r+")",i.canvas.ctx.lineWidth=i.particles.line_linked.width,i.canvas.ctx.beginPath(),i.canvas.ctx.moveTo(e.x,e.y),i.canvas.ctx.lineTo(a.x,a.y),i.canvas.ctx.stroke(),i.canvas.ctx.closePath()}}},i.fn.interact.attractParticles=function(e,a){var t=e.x-a.x,s=e.y-a.y,n=Math.sqrt(t*t+s*s);if(n<=i.particles.line_linked.distance){var r=t/(1e3*i.particles.move.attract.rotateX),c=s/(1e3*i.particles.move.attract.rotateY);e.vx-=r,e.vy-=c,a.vx+=r,a.vy+=c}},i.fn.interact.bounceParticles=function(e,a){var t=e.x-a.x,i=e.y-a.y,s=Math.sqrt(t*t+i*i),n=e.radius+a.radius;n>=s&&(e.vx=-e.vx,e.vy=-e.vy,a.vx=-a.vx,a.vy=-a.vy)},i.fn.modes.pushParticles=function(e,a){i.tmp.pushing=!0;for(var t=0;e>t;t++)i.particles.array.push(new i.fn.particle(i.particles.color,i.particles.opacity.value,{x:a?a.pos_x:Math.random()*i.canvas.w,y:a?a.pos_y:Math.random()*i.canvas.h})),t==e-1&&(i.particles.move.enable||i.fn.particlesDraw(),i.tmp.pushing=!1)},i.fn.modes.removeParticles=function(e){i.particles.array.splice(0,e),i.particles.move.enable||i.fn.particlesDraw()},i.fn.modes.bubbleParticle=function(e){function a(){e.opacity_bubble=e.opacity,e.radius_bubble=e.radius}function t(a,t,s,n,c){if(a!=t)if(i.tmp.bubble_duration_end){if(void 0!=s){var o=n-p*(n-a)/i.interactivity.modes.bubble.duration,l=a-o;d=a+l,"size"==c&&(e.radius_bubble=d),"opacity"==c&&(e.opacity_bubble=d)}}else if(r<=i.interactivity.modes.bubble.distance){if(void 0!=s)var v=s;else var v=n;if(v!=a){var d=n-p*(n-a)/i.interactivity.modes.bubble.duration;"size"==c&&(e.radius_bubble=d),"opacity"==c&&(e.opacity_bubble=d)}}else"size"==c&&(e.radius_bubble=void 0),"opacity"==c&&(e.opacity_bubble=void 0)}if(i.interactivity.events.onhover.enable&&isInArray("bubble",i.interactivity.events.onhover.mode)){var s=e.x-i.interactivity.mouse.pos_x,n=e.y-i.interactivity.mouse.pos_y,r=Math.sqrt(s*s+n*n),c=1-r/i.interactivity.modes.bubble.distance;if(r<=i.interactivity.modes.bubble.distance){if(c>=0&&"mousemove"==i.interactivity.status){if(i.interactivity.modes.bubble.size!=i.particles.size.value)if(i.interactivity.modes.bubble.size>i.particles.size.value){var o=e.radius+i.interactivity.modes.bubble.size*c;o>=0&&(e.radius_bubble=o)}else{var l=e.radius-i.interactivity.modes.bubble.size,o=e.radius-l*c;o>0?e.radius_bubble=o:e.radius_bubble=0}if(i.interactivity.modes.bubble.opacity!=i.particles.opacity.value)if(i.interactivity.modes.bubble.opacity>i.particles.opacity.value){var v=i.interactivity.modes.bubble.opacity*c;v>e.opacity&&v<=i.interactivity.modes.bubble.opacity&&(e.opacity_bubble=v)}else{var v=e.opacity-(i.particles.opacity.value-i.interactivity.modes.bubble.opacity)*c;v=i.interactivity.modes.bubble.opacity&&(e.opacity_bubble=v)}}}else a();"mouseleave"==i.interactivity.status&&a()}else if(i.interactivity.events.onclick.enable&&isInArray("bubble",i.interactivity.events.onclick.mode)){if(i.tmp.bubble_clicking){var s=e.x-i.interactivity.mouse.click_pos_x,n=e.y-i.interactivity.mouse.click_pos_y,r=Math.sqrt(s*s+n*n),p=((new Date).getTime()-i.interactivity.mouse.click_time)/1e3;p>i.interactivity.modes.bubble.duration&&(i.tmp.bubble_duration_end=!0),p>2*i.interactivity.modes.bubble.duration&&(i.tmp.bubble_clicking=!1,i.tmp.bubble_duration_end=!1)}i.tmp.bubble_clicking&&(t(i.interactivity.modes.bubble.size,i.particles.size.value,e.radius_bubble,e.radius,"size"),t(i.interactivity.modes.bubble.opacity,i.particles.opacity.value,e.opacity_bubble,e.opacity,"opacity"))}},i.fn.modes.repulseParticle=function(e){function a(){var a=Math.atan2(d,p);if(e.vx=u*Math.cos(a),e.vy=u*Math.sin(a),"bounce"==i.particles.move.out_mode){var t={x:e.x+e.vx,y:e.y+e.vy};t.x+e.radius>i.canvas.w?e.vx=-e.vx:t.x-e.radius<0&&(e.vx=-e.vx),t.y+e.radius>i.canvas.h?e.vy=-e.vy:t.y-e.radius<0&&(e.vy=-e.vy)}}if(i.interactivity.events.onhover.enable&&isInArray("repulse",i.interactivity.events.onhover.mode)&&"mousemove"==i.interactivity.status){var t=e.x-i.interactivity.mouse.pos_x,s=e.y-i.interactivity.mouse.pos_y,n=Math.sqrt(t*t+s*s),r={x:t/n,y:s/n},c=i.interactivity.modes.repulse.distance,o=100,l=clamp(1/c*(-1*Math.pow(n/c,2)+1)*c*o,0,50),v={x:e.x+r.x*l,y:e.y+r.y*l};"bounce"==i.particles.move.out_mode?(v.x-e.radius>0&&v.x+e.radius0&&v.y+e.radius=m&&a()}else 0==i.tmp.repulse_clicking&&(e.vx=e.vx_i,e.vy=e.vy_i)},i.fn.modes.grabParticle=function(e){if(i.interactivity.events.onhover.enable&&"mousemove"==i.interactivity.status){var a=e.x-i.interactivity.mouse.pos_x,t=e.y-i.interactivity.mouse.pos_y,s=Math.sqrt(a*a+t*t);if(s<=i.interactivity.modes.grab.distance){var n=i.interactivity.modes.grab.line_linked.opacity-s/(1/i.interactivity.modes.grab.line_linked.opacity)/i.interactivity.modes.grab.distance;if(n>0){var r=i.particles.line_linked.color_rgb_line;i.canvas.ctx.strokeStyle="rgba("+r.r+","+r.g+","+r.b+","+n+")",i.canvas.ctx.lineWidth=i.particles.line_linked.width,i.canvas.ctx.beginPath(),i.canvas.ctx.moveTo(e.x,e.y),i.canvas.ctx.lineTo(i.interactivity.mouse.pos_x,i.interactivity.mouse.pos_y),i.canvas.ctx.stroke(),i.canvas.ctx.closePath()}}}},i.fn.vendors.eventsListeners=function(){"window"==i.interactivity.detect_on?i.interactivity.el=window:i.interactivity.el=i.canvas.el,(i.interactivity.events.onhover.enable||i.interactivity.events.onclick.enable)&&(i.interactivity.el.addEventListener("mousemove",function(e){if(i.interactivity.el==window)var a=e.clientX,t=e.clientY;else var a=e.offsetX||e.clientX,t=e.offsetY||e.clientY;i.interactivity.mouse.pos_x=a,i.interactivity.mouse.pos_y=t,i.tmp.retina&&(i.interactivity.mouse.pos_x*=i.canvas.pxratio,i.interactivity.mouse.pos_y*=i.canvas.pxratio),i.interactivity.status="mousemove"}),i.interactivity.el.addEventListener("mouseleave",function(e){i.interactivity.mouse.pos_x=null,i.interactivity.mouse.pos_y=null,i.interactivity.status="mouseleave"})),i.interactivity.events.onclick.enable&&i.interactivity.el.addEventListener("click",function(){if(i.interactivity.mouse.click_pos_x=i.interactivity.mouse.pos_x,i.interactivity.mouse.click_pos_y=i.interactivity.mouse.pos_y,i.interactivity.mouse.click_time=(new Date).getTime(),i.interactivity.events.onclick.enable)switch(i.interactivity.events.onclick.mode){case"push":i.particles.move.enable?i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb,i.interactivity.mouse):1==i.interactivity.modes.push.particles_nb?i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb,i.interactivity.mouse):i.interactivity.modes.push.particles_nb>1&&i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb);break;case"remove":i.fn.modes.removeParticles(i.interactivity.modes.remove.particles_nb);break;case"bubble":i.tmp.bubble_clicking=!0;break;case"repulse":i.tmp.repulse_clicking=!0,i.tmp.repulse_count=0,i.tmp.repulse_finish=!1,setTimeout(function(){i.tmp.repulse_clicking=!1},1e3*i.interactivity.modes.repulse.duration)}})},i.fn.vendors.densityAutoParticles=function(){if(i.particles.number.density.enable){var e=i.canvas.el.width*i.canvas.el.height/1e3;i.tmp.retina&&(e/=2*i.canvas.pxratio);var a=e*i.particles.number.value/i.particles.number.density.value_area,t=i.particles.array.length-a;0>t?i.fn.modes.pushParticles(Math.abs(t)):i.fn.modes.removeParticles(t)}},i.fn.vendors.checkOverlap=function(e,a){for(var t=0;tv;v++)e.lineTo(i,0),e.translate(i,0),e.rotate(l);e.fill(),e.restore()},i.fn.vendors.exportImg=function(){window.open(i.canvas.el.toDataURL("image/png"),"_blank")},i.fn.vendors.loadImg=function(e){if(i.tmp.img_error=void 0,""!=i.particles.shape.image.src)if("svg"==e){var a=new XMLHttpRequest;a.open("GET",i.particles.shape.image.src),a.onreadystatechange=function(e){4==a.readyState&&(200==a.status?(i.tmp.source_svg=e.currentTarget.response,i.fn.vendors.checkBeforeDraw()):(console.log("Error pJS - Image not found"),i.tmp.img_error=!0))},a.send()}else{var t=new Image;t.addEventListener("load",function(){i.tmp.img_obj=t,i.fn.vendors.checkBeforeDraw()}),t.src=i.particles.shape.image.src}else console.log("Error pJS - No image.src"),i.tmp.img_error=!0},i.fn.vendors.draw=function(){"image"==i.particles.shape.type?"svg"==i.tmp.img_type?i.tmp.count_svg>=i.particles.number.value?(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame)):i.tmp.img_error||(i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw)):void 0!=i.tmp.img_obj?(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame)):i.tmp.img_error||(i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw)):(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame))},i.fn.vendors.checkBeforeDraw=function(){"image"==i.particles.shape.type?"svg"==i.tmp.img_type&&void 0==i.tmp.source_svg?i.tmp.checkAnimFrame=requestAnimFrame(check):(cancelRequestAnimFrame(i.tmp.checkAnimFrame),i.tmp.img_error||(i.fn.vendors.init(),i.fn.vendors.draw())):(i.fn.vendors.init(),i.fn.vendors.draw())},i.fn.vendors.init=function(){i.fn.retinaInit(),i.fn.canvasInit(),i.fn.canvasSize(),i.fn.canvasPaint(),i.fn.particlesCreate(),i.fn.vendors.densityAutoParticles(),i.particles.line_linked.color_rgb_line=hexToRgb(i.particles.line_linked.color)},i.fn.vendors.start=function(){isInArray("image",i.particles.shape.type)?(i.tmp.img_type=i.particles.shape.image.src.substr(i.particles.shape.image.src.length-3),i.fn.vendors.loadImg(i.tmp.img_type)):i.fn.vendors.checkBeforeDraw()},i.fn.vendors.eventsListeners(),i.fn.vendors.start()};Object.deepExtend=function(e,a){for(var t in a)a[t]&&a[t].constructor&&a[t].constructor===Object?(e[t]=e[t]||{},arguments.callee(e[t],a[t])):e[t]=a[t];return e},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)}}(),window.cancelRequestAnimFrame=function(){return window.cancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.mozCancelRequestAnimationFrame||window.oCancelRequestAnimationFrame||window.msCancelRequestAnimationFrame||clearTimeout}(),window.pJSDom=[],window.particlesJS=function(e,a){"string"!=typeof e&&(a=e,e="particles-js"),e||(e="particles-js");var t=document.getElementById(e),i="particles-js-canvas-el",s=t.getElementsByClassName(i);if(s.length)for(;s.length>0;)t.removeChild(s[0]);var n=document.createElement("canvas");n.className=i,n.style.width="100%",n.style.height="100%";var r=document.getElementById(e).appendChild(n);null!=r&&pJSDom.push(new pJS(e,a))},window.particlesJS.load=function(e,a,t){var i=new XMLHttpRequest;i.open("GET",a),i.onreadystatechange=function(a){if(4==i.readyState)if(200==i.status){var s=JSON.parse(a.currentTarget.response);window.particlesJS(e,s),t&&t()}else console.log("Error pJS - XMLHttpRequest status: "+i.status),console.log("Error pJS - File config not found")},i.send()}; \ No newline at end of file diff --git a/docker/nginx/dist/html/assets/js/particles_conf.js b/docker/nginx/dist/html/assets/js/particles_conf.js new file mode 100644 index 00000000..f59f9453 --- /dev/null +++ b/docker/nginx/dist/html/assets/js/particles_conf.js @@ -0,0 +1,54 @@ +particlesJS('particles-js', { + particles: { + number: { value: 80, density: { enable: true, value_area: 800 } }, + color: { value: '#e20074' }, + shape: { + type: 'polygon', + stroke: { width: 0, color: '#000000' }, + polygon: { nb_sides: 6 }, + }, + opacity: { + value: 0.5, + random: false, + anim: { enable: true, speed: 1, opacity_min: 0.1, sync: false } + }, + size: { + value: 6, + random: true, + anim: { enable: false, speed: 40, size_min: 0.1, sync: false } + }, + line_linked: { + enable: true, + distance: 150, + color: '#e20074', + opacity: 0.4, + width: 2 + }, + move: { + enable: true, + speed: 6, + direction: 'none', + random: false, + straight: false, + out_mode: 'out', + bounce: false, + attract: { enable: false, rotateX: 600, rotateY: 1200 } + }, + }, + interactivity: { + detect_on: 'canvas', + events: { + onhover: { enable: true, mode: 'repulse' }, + onclick: { enable: true, mode: 'push' }, + resize: true + }, + modes: { + grab: { distance: 400, line_linked: { opacity: 1 } }, + bubble: { distance: 400, size: 40, duration: 2, opacity: 8, speed: 3 }, + repulse: { distance: 200, duration: 0.4 }, + push: { particles_nb: 4 }, + remove: { particles_nb: 2 } + } + }, + retina_detect: true +}); diff --git a/docker/nginx/dist/html/assets/js/theme.js b/docker/nginx/dist/html/assets/js/theme.js deleted file mode 100644 index d8d9c936..00000000 --- a/docker/nginx/dist/html/assets/js/theme.js +++ /dev/null @@ -1,7 +0,0 @@ -// β”Œβ”¬β”β”¬ β”¬β”Œβ”€β”β”Œβ”¬β”β”Œβ”€β” -// β”‚ β”œβ”€β”€β”œβ”€ β”‚β”‚β”‚β”œβ”€ -// β”΄ β”΄ β”΄β””β”€β”˜β”΄ β”΄β””β”€β”˜ - -if (CONFIG.imageBackground) { - document.body.classList.add('withImageBackground'); -} \ No newline at end of file diff --git a/docker/nginx/dist/html/assets/js/time.js b/docker/nginx/dist/html/assets/js/time.js deleted file mode 100644 index 68e80cb6..00000000 --- a/docker/nginx/dist/html/assets/js/time.js +++ /dev/null @@ -1,28 +0,0 @@ -// β”Œβ”¬β”β”¬β”Œβ”¬β”β”Œβ”€β” -// β”‚ β”‚β”‚β”‚β”‚β”œβ”€ -// β”΄ β”΄β”΄ β”΄β””β”€β”˜ -// Set time and Date - -window.onload = displayClock(); -function displayClock() { - const monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; - - var d = new Date(); - var mm = monthNames[d.getMonth()]; - var dd = d.getDate(); - var min = (mins = ('0' + d.getMinutes()).slice(-2)); - var hh = d.getHours(); - var ampm = ''; - - if (CONFIG.twelveHourFormat) { - ampm = hh >= 12 ? ' pm' : ' am'; - hh = hh % 12; - hh = hh ? hh : 12; - } - - document.getElementById('hour').innerText = hh; - document.getElementById('separator').innerHTML = ' : '; - document.getElementById('minutes').innerText = min + ampm; - - setTimeout(displayClock, 1000); -} \ No newline at end of file diff --git a/docker/nginx/dist/html/cockpit.html b/docker/nginx/dist/html/cockpit.html deleted file mode 100644 index 96c71fac..00000000 --- a/docker/nginx/dist/html/cockpit.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - Redirect to Cockpit - - - - - - diff --git a/docker/nginx/dist/html/config.js b/docker/nginx/dist/html/config.js deleted file mode 100644 index 3ec00428..00000000 --- a/docker/nginx/dist/html/config.js +++ /dev/null @@ -1,75 +0,0 @@ -// β•”β•— ╔═╗╔╗╔╔╦╗╔═╗ -// β• β•©β•—β•‘β•£ β•‘β•‘β•‘ β•‘ β•‘ β•‘ -// β•šβ•β•β•šβ•β•β•β•šβ• β•© β•šβ•β• -// β”Œβ”€β”β”Œβ”€β”β”Œβ”β”Œβ”Œβ”€β”β”¬β”Œβ”€β”β”¬ β”¬β”¬β”€β”β”Œβ”€β”β”Œβ”¬β”β”¬β”Œβ”€β”β”Œβ”β”Œ -// β”‚ β”‚ β”‚β”‚β”‚β”‚β”œβ”€ β”‚β”‚ ┬│ β”‚β”œβ”¬β”˜β”œβ”€β”€ β”‚ β”‚β”‚ β”‚β”‚β”‚β”‚ -// β””β”€β”˜β””β”€β”˜β”˜β””β”˜β”” β”΄β””β”€β”˜β””β”€β”˜β”΄β””β”€β”΄ β”΄ β”΄ β”΄β””β”€β”˜β”˜β””β”˜ - -const CONFIG = { - // β”Œβ” β”Œβ”€β”β”Œβ”€β”β”¬β”Œβ”€β”β”Œβ”€β” - // β”œβ”΄β”β”œβ”€β”€β””β”€β”β”‚β”‚ └─┐ - // β””β”€β”˜β”΄ β”΄β””β”€β”˜β”΄β””β”€β”˜β””β”€β”˜ - - // General - imageBackground: true, - openInNewTab: true, - twelveHourFormat: false, - - // Greetings - greetingMorning: 'Good morning β˜•', - greetingAfternoon: 'Good afternoon 🍯', - greetingEvening: 'Good evening 😁', - greetingNight: 'Go to Sleep πŸ₯±', - - // ┬ β”¬β”Œβ”€β”β”Œβ”¬β”β”Œβ”€β” - // β”‚ │└─┐ β”‚ └─┐ - // β”΄β”€β”˜β”΄β””β”€β”˜ β”΄ β””β”€β”˜ - - //Icons - firstListIcon: 'home', - secondListIcon: 'external-link', - - // Links - lists: { - firstList: [ - { - name: 'Attack Map', - link: '/map/', - }, - { - name: 'Cockpit', - link: '/cockpit.html', - }, - { - name: 'Cyberchef', - link: '/cyberchef/', - }, - { - name: 'Elasticvue', - link: '/elasticvue/', - }, - { - name: 'Kibana', - link: '/kibana/', - }, - { - name: 'Spiderfoot', - link: '/spiderfoot/', - }, - ], - secondList: [ - { - name: 'SecurityMeter', - link: 'https://sicherheitstacho.eu', - }, - { - name: 'T-Pot @ GitHub', - link: 'https://github.com/telekom-security/tpotce/', - }, - { - name: 'T-Pot ReadMe', - link: 'https://github.com/telekom-security/tpotce/blob/master/README.md', - }, - ], - }, -}; diff --git a/docker/nginx/dist/html/config_light.js b/docker/nginx/dist/html/config_light.js deleted file mode 100644 index f1af7436..00000000 --- a/docker/nginx/dist/html/config_light.js +++ /dev/null @@ -1,71 +0,0 @@ -// β•”β•— ╔═╗╔╗╔╔╦╗╔═╗ -// β• β•©β•—β•‘β•£ β•‘β•‘β•‘ β•‘ β•‘ β•‘ -// β•šβ•β•β•šβ•β•β•β•šβ• β•© β•šβ•β• -// β”Œβ”€β”β”Œβ”€β”β”Œβ”β”Œβ”Œβ”€β”β”¬β”Œβ”€β”β”¬ β”¬β”¬β”€β”β”Œβ”€β”β”Œβ”¬β”β”¬β”Œβ”€β”β”Œβ”β”Œ -// β”‚ β”‚ β”‚β”‚β”‚β”‚β”œβ”€ β”‚β”‚ ┬│ β”‚β”œβ”¬β”˜β”œβ”€β”€ β”‚ β”‚β”‚ β”‚β”‚β”‚β”‚ -// β””β”€β”˜β””β”€β”˜β”˜β””β”˜β”” β”΄β””β”€β”˜β””β”€β”˜β”΄β””β”€β”΄ β”΄ β”΄ β”΄β””β”€β”˜β”˜β””β”˜ - -const CONFIG = { - // β”Œβ” β”Œβ”€β”β”Œβ”€β”β”¬β”Œβ”€β”β”Œβ”€β” - // β”œβ”΄β”β”œβ”€β”€β””β”€β”β”‚β”‚ └─┐ - // β””β”€β”˜β”΄ β”΄β””β”€β”˜β”΄β””β”€β”˜β””β”€β”˜ - - // General - imageBackground: true, - openInNewTab: true, - twelveHourFormat: false, - - // Greetings - greetingMorning: 'Good morning β˜•', - greetingAfternoon: 'Good afternoon 🍯', - greetingEvening: 'Good evening 😁', - greetingNight: 'Go to Sleep πŸ₯±', - - // ┬ β”¬β”Œβ”€β”β”Œβ”¬β”β”Œβ”€β” - // β”‚ │└─┐ β”‚ └─┐ - // β”΄β”€β”˜β”΄β””β”€β”˜ β”΄ β””β”€β”˜ - - //Icons - firstListIcon: 'home', - secondListIcon: 'external-link', - - // Links - lists: { - firstList: [ - { - name: 'Attack Map', - link: '/map/', - }, - { - name: 'Cyberchef', - link: '/cyberchef/', - }, - { - name: 'Elasticvue', - link: '/elasticvue/', - }, - { - name: 'Kibana', - link: '/kibana/', - }, - { - name: 'Spiderfoot', - link: '/spiderfoot/', - }, - ], - secondList: [ - { - name: 'SecurityMeter', - link: 'https://sicherheitstacho.eu', - }, - { - name: 'T-Pot @ GitHub', - link: 'https://github.com/telekom-security/tpotce/', - }, - { - name: 'T-Pot ReadMe', - link: 'https://github.com/telekom-security/tpotce/blob/master/README.md', - }, - ], - }, -}; diff --git a/docker/nginx/dist/html/cyberchef/cyberchef.tgz b/docker/nginx/dist/html/cyberchef/cyberchef.tgz index 57f5bd08..9e16a539 100644 Binary files a/docker/nginx/dist/html/cyberchef/cyberchef.tgz and b/docker/nginx/dist/html/cyberchef/cyberchef.tgz differ diff --git a/docker/nginx/dist/html/esvue/esvue.tgz b/docker/nginx/dist/html/esvue/esvue.tgz index dfd419c5..fd831e2a 100644 Binary files a/docker/nginx/dist/html/esvue/esvue.tgz and b/docker/nginx/dist/html/esvue/esvue.tgz differ diff --git a/docker/nginx/dist/html/index.html b/docker/nginx/dist/html/index.html index a80543ef..97fc5c1e 100644 --- a/docker/nginx/dist/html/index.html +++ b/docker/nginx/dist/html/index.html @@ -1,60 +1,163 @@ - - + + + + + + + + + + + T-Pot - - - - + + + - +
- -
- +
+
+
T-Pot 24.04.0
+
-
-
-
-
-
-
-
-
+
+ +
- - -
- -
+
+ - - - - - - - - - - - - - - + +
+ diff --git a/docker/nginx/dist/html/index_light.html b/docker/nginx/dist/html/index_light.html deleted file mode 100644 index 7d92f100..00000000 --- a/docker/nginx/dist/html/index_light.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - T-Pot - - - - - - - - -
- - -
-
-
-
-
-
-
-
- - - -
- -
-
- - - - - - - - - - - - - - - diff --git a/docker/nginx/dist/html/package.json b/docker/nginx/dist/html/package.json deleted file mode 100644 index 868e8c82..00000000 --- a/docker/nginx/dist/html/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "bento", - "version": "1.2.0", - "description": "🍱 Minimalist, elegant and hackable startpage inspired by the Bento box!", - "author": "Miguel Ávila", - "license": "ISC" -} \ No newline at end of file diff --git a/docker/nginx/docker-compose.yml b/docker/nginx/docker-compose.yml index 1029a4d9..fd3824e8 100644 --- a/docker/nginx/docker-compose.yml +++ b/docker/nginx/docker-compose.yml @@ -5,8 +5,7 @@ services: # nginx service nginx: build: . - environment: - - COCKPIT=false +# environment: container_name: nginx restart: always tmpfs: @@ -23,9 +22,9 @@ services: # ports: # - "64297:64297" # - "127.0.0.1:64304:64304" - image: "dtagdevsec/nginx:2204" + image: "dtagdevsec/nginx:24.04" read_only: true volumes: - - /data/nginx/cert/:/etc/nginx/cert/:ro - - /data/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro - - /data/nginx/log/:/var/log/nginx/ + - $HOME/tpotce/data/nginx/cert/:/etc/nginx/cert/:ro + - $HOME/tpotce/data/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro + - $HOME/tpotce/data/nginx/log/:/var/log/nginx/ diff --git a/docker/p0f/Dockerfile b/docker/p0f/Dockerfile index d64163ff..0fc64988 100644 --- a/docker/p0f/Dockerfile +++ b/docker/p0f/Dockerfile @@ -1,19 +1,19 @@ # In case of problems Alpine 3.13 needs to be used: # https://wiki.alpinelinux.org/wiki/Release_Notes_for_Alpine_3.14.0#faccessat2 -FROM alpine:3.17 +FROM alpine:3.19 # # Add source COPY . /opt/p0f # # Install packages RUN apk -U --no-cache add \ - bash \ - build-base \ - jansson \ - jansson-dev \ - libcap \ - libpcap \ - libpcap-dev && \ + bash \ + build-base \ + jansson \ + jansson-dev \ + libcap \ + libpcap \ + libpcap-dev && \ # # Setup user, groups and configs addgroup -g 2000 p0f && \ diff --git a/docker/p0f/docker-compose.yml b/docker/p0f/docker-compose.yml index 14139d5d..039aad5b 100644 --- a/docker/p0f/docker-compose.yml +++ b/docker/p0f/docker-compose.yml @@ -10,7 +10,7 @@ services: # cpu_count: 1 # cpus: 0.75 network_mode: "host" - image: "dtagdevsec/p0f:2204" + image: "dtagdevsec/p0f:24.04" read_only: true volumes: - - /data/p0f/log:/var/log/p0f + - $HOME/tpotce/data/p0f/log:/var/log/p0f diff --git a/docker/redishoneypot/Dockerfile b/docker/redishoneypot/Dockerfile index 2227e2f1..d04f6aa1 100644 --- a/docker/redishoneypot/Dockerfile +++ b/docker/redishoneypot/Dockerfile @@ -1,14 +1,14 @@ -FROM alpine:3.17 +FROM golang:1.21-alpine as builder # # Include dist COPY dist/ /root/dist/ # # Setup apk RUN apk -U --no-cache add \ - build-base \ - git \ - go \ - g++ && \ + build-base \ + git \ + go \ + g++ && \ # # Setup go, hellpot cd /root && \ @@ -18,25 +18,19 @@ RUN apk -U --no-cache add \ cd RedisHoneyPot && \ git checkout 45adc622a423d12d76392c3a54274f6cff111d58 && \ go mod download && \ - go install && \ - mkdir -p /opt/redishoneypot && \ - mv /opt/go/bin/RedisHoneyPot /opt/redishoneypot/ && \ - mv /root/dist/redis.conf /opt/redishoneypot && \ + go install +# +FROM alpine:3.19 +# +# Setup redishoneypot +# +COPY --from=builder /opt/go/bin/RedisHoneyPot /opt/redishoneypot/ +COPY --from=builder /root/dist/redis.conf /opt/redishoneypot/ # # Setup user, groups and configs - addgroup -g 2000 redishoneypot && \ +RUN addgroup -g 2000 redishoneypot && \ adduser -S -s /bin/ash -u 2000 -D -g 2000 redishoneypot && \ - mkdir -p /var/log/redishoneypot && \ -# -# Clean up - apk del --purge build-base \ - git \ - go \ - g++ && \ - rm -rf /var/cache/apk/* \ - /opt/go \ - /root/* \ - /opt/redishoneypot/.git + mkdir -p /var/log/redishoneypot # # Start redishoneypot WORKDIR /opt/redishoneypot diff --git a/docker/redishoneypot/docker-compose.yml b/docker/redishoneypot/docker-compose.yml index 93b9f61a..347a84eb 100644 --- a/docker/redishoneypot/docker-compose.yml +++ b/docker/redishoneypot/docker-compose.yml @@ -16,7 +16,7 @@ services: - redishoneypot_local ports: - "6379:6379" - image: "dtagdevsec/redishoneypot:2204" + image: "dtagdevsec/redishoneypot:24.04" read_only: true volumes: - - /data/redishoneypot/log:/var/log/redishoneypot + - $HOME/tpotce/data/redishoneypot/log:/var/log/redishoneypot diff --git a/docker/sentrypeer/Dockerfile b/docker/sentrypeer/Dockerfile index 47fe3494..641ee719 100644 --- a/docker/sentrypeer/Dockerfile +++ b/docker/sentrypeer/Dockerfile @@ -2,7 +2,7 @@ FROM alpine:edge # # Install packages RUN apk -U add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing \ - sentrypeer && \ + sentrypeer && \ # # Setup user, groups and configs mkdir -p /var/log/sentrypeer && \ diff --git a/docker/sentrypeer/docker-compose.yml b/docker/sentrypeer/docker-compose.yml index fbe40881..4741324d 100644 --- a/docker/sentrypeer/docker-compose.yml +++ b/docker/sentrypeer/docker-compose.yml @@ -13,18 +13,18 @@ services: # cpu_count: 1 # cpus: 0.25 environment: -# - SENTRYPEER_WEB_GUI=0 -# - SENTRYPEER_PEER_TO_PEER=0 +# - SENTRYPEER_PEER_TO_PEER=1 # - SENTRYPEER_BOOTSTRAP_NODE=bootstrap.sentrypeer.org - SENTRYPEER_VERBOSE=1 - SENTRYPEER_DEBUG=1 networks: - sentrypeer_local ports: - - "4222:4222/udp" +# - "4222:4222/udp" - "5060:5060/udp" - - "127.0.0.1:8082:8082" - image: "dtagdevsec/sentrypeer:2204" + - "5060:5060/tcp" +# - "127.0.0.1:8082:8082" + image: "dtagdevsec/sentrypeer:24.04" read_only: true volumes: - - /data/sentrypeer/log:/var/log/sentrypeer + - $HOME/tpotce/data/sentrypeer/log:/var/log/sentrypeer diff --git a/docker/spiderfoot/Dockerfile b/docker/spiderfoot/Dockerfile index 516b6b13..c18b4ca9 100644 --- a/docker/spiderfoot/Dockerfile +++ b/docker/spiderfoot/Dockerfile @@ -1,67 +1,70 @@ -FROM alpine:3.17 +FROM alpine:3.19 # # Include dist COPY dist/ /root/dist/ # # Get and install dependencies & packages RUN apk -U --no-cache add \ - build-base \ - curl \ - git \ - jpeg-dev \ - libffi-dev \ - libxml2 \ - libxml2-dev \ - libxslt \ - libxslt-dev \ - musl \ - musl-dev \ - openjpeg-dev \ - openssl \ - openssl-dev \ - python3 \ - python3-dev \ - py3-cryptography \ - py3-ipaddr \ - py3-beautifulsoup4 \ - py3-dnspython \ - py3-exifread \ - py3-future \ - py3-jaraco.classes \ - py3-jaraco.context \ - py3-jaraco.functools \ - py3-lxml \ - py3-mako \ - py3-more-itertools \ - py3-netaddr \ - py3-networkx \ - py3-openssl \ - py3-pillow \ - py3-portend \ - py3-pypdf2 \ - py3-phonenumbers \ - py3-pip \ - py3-pysocks \ - py3-requests \ - py3-tempora \ - py3-wheel \ - py3-xlsxwriter \ - py3-yaml \ - swig \ - tinyxml \ - tinyxml-dev \ - zlib-dev && \ + build-base \ + curl \ + git \ + jpeg-dev \ + libffi-dev \ + libxml2 \ + libxml2-dev \ + libxslt \ + libxslt-dev \ + musl \ + musl-dev \ + openjpeg-dev \ + openssl \ + openssl-dev \ + python3 \ + python3-dev \ + py3-cryptography \ + py3-ipaddr \ + py3-beautifulsoup4 \ + py3-dnspython \ + py3-exifread \ + py3-future \ + py3-jaraco.classes \ + py3-jaraco.context \ + py3-jaraco.functools \ + py3-lxml \ + py3-mako \ + py3-more-itertools \ + py3-netaddr \ + py3-networkx \ + py3-openssl \ + py3-pillow \ + py3-portend \ +# py3-pypdf2 \ + py3-phonenumbers \ + py3-pip \ + py3-pysocks \ + py3-requests \ + py3-tempora \ + py3-wheel \ + py3-xlsxwriter \ + py3-yaml \ + swig \ + tinyxml \ + tinyxml-dev \ + zlib-dev && \ # # Setup user addgroup -g 2000 spiderfoot && \ adduser -S -s /bin/ash -u 2000 -D -g 2000 spiderfoot && \ # # Install spiderfoot - git clone --depth=1 -b v4.0 https://github.com/smicallef/spiderfoot /home/spiderfoot && \ + # git clone --depth=1 -b v4.0 https://github.com/smicallef/spiderfoot /home/spiderfoot && \ + git config --global --add safe.directory /home/spiderfoot && \ + git clone https://github.com/smicallef/spiderfoot /home/spiderfoot && \ cd /home/spiderfoot && \ - pip3 install --upgrade pip && \ + git checkout 0f815a203afebf05c98b605dba5cf0475a0ee5fd && \ + pip3 install --break-system-packages --upgrade pip && \ cp /root/dist/requirements.txt . && \ - pip3 install --no-cache-dir -r requirements.txt && \ + pip3 install --break-system-packages --no-cache-dir -r requirements.txt && \ mkdir -p /home/spiderfoot/.spiderfoot/logs && \ chown -R spiderfoot:spiderfoot /home/spiderfoot && \ sed -i "s#'root': '\/'#'root': '\/spiderfoot'#" /home/spiderfoot/sf.py && \ @@ -69,16 +72,16 @@ RUN apk -U --no-cache add \ # # Clean up apk del --purge build-base \ - gcc \ - git \ - libffi-dev \ - libxml2-dev \ - libxslt-dev \ - musl-dev \ - openssl-dev \ - python3-dev \ - swig \ - tinyxml-dev && \ + gcc \ + git \ + libffi-dev \ + libxml2-dev \ + libxslt-dev \ + musl-dev \ + openssl-dev \ + python3-dev \ + swig \ + tinyxml-dev && \ rm -rf /var/cache/apk/* /home/spiderfoot/.git # # Healthcheck diff --git a/docker/spiderfoot/dist/requirements.txt b/docker/spiderfoot/dist/requirements.txt index 3da7bd68..ffa40284 100644 --- a/docker/spiderfoot/dist/requirements.txt +++ b/docker/spiderfoot/dist/requirements.txt @@ -9,3 +9,4 @@ python-docx>=0.8.11,<0.9 python-pptx>=0.6.21,<0.7 publicsuffixlist>=0.7.9,<0.8 openpyxl>=3.0.9,<4 +PyPDF2>=1.28.6,<2 diff --git a/docker/spiderfoot/docker-compose.yml b/docker/spiderfoot/docker-compose.yml index 30a60696..064e8169 100644 --- a/docker/spiderfoot/docker-compose.yml +++ b/docker/spiderfoot/docker-compose.yml @@ -16,6 +16,6 @@ services: - spiderfoot_local ports: - "127.0.0.1:64303:8080" - image: "dtagdevsec/spiderfoot:2204" + image: "dtagdevsec/spiderfoot:24.04" volumes: - - /data/spiderfoot:/home/spiderfoot/.spiderfoot + - $HOME/tpotce/data/spiderfoot:/home/spiderfoot/.spiderfoot diff --git a/docker/suricata/Dockerfile b/docker/suricata/Dockerfile index dac3172d..cd5454fe 100644 --- a/docker/suricata/Dockerfile +++ b/docker/suricata/Dockerfile @@ -5,13 +5,13 @@ COPY dist/ /root/dist/ # # Install packages RUN apk -U --no-cache add \ - ca-certificates \ - curl \ - file \ - hiredis \ - libcap \ - wget \ - suricata && \ + ca-certificates \ + curl \ + file \ + hiredis \ + libcap \ + wget \ + suricata && \ # # Setup user, groups and configs addgroup -g 2000 suri && \ diff --git a/docker/suricata/dist/capture-filter.bpf b/docker/suricata/dist/capture-filter.bpf index 3dc80bba..c53c0bb7 100644 --- a/docker/suricata/dist/capture-filter.bpf +++ b/docker/suricata/dist/capture-filter.bpf @@ -1,6 +1,3 @@ not (host sicherheitstacho.eu or community.sicherheitstacho.eu or listbot.sicherheitstacho.eu) and -not (host rules.emergingthreats.net or rules.emergingthreatspro.com) and -not (host deb.debian.org) and -not (host ghcr.io) and -not (host index.docker.io or docker.io) and +not (tcp port 64294) and not (tcp port 64305) diff --git a/docker/suricata/dist/suricata.yaml b/docker/suricata/dist/suricata.yaml index bb523417..beda0779 100644 --- a/docker/suricata/dist/suricata.yaml +++ b/docker/suricata/dist/suricata.yaml @@ -3,7 +3,10 @@ # Suricata configuration file. In addition to the comments describing all # options in this file, full documentation can be found at: -# https://suricata.readthedocs.io/en/latest/configuration/suricata-yaml.html +# https://docs.suricata.io/en/latest/configuration/suricata-yaml.html + +# This configuration file generated by Suricata 7.0.2. +suricata-version: "7.0" ## ## Step 1: Inform Suricata about your network @@ -18,8 +21,8 @@ vars: #HOME_NET: "[172.16.0.0/12]" #HOME_NET: "any" - #EXTERNAL_NET: "!$HOME_NET" - EXTERNAL_NET: "any" + EXTERNAL_NET: "!$HOME_NET" + #EXTERNAL_NET: "any" HTTP_SERVERS: "$HOME_NET" SMTP_SERVERS: "$HOME_NET" @@ -67,10 +70,14 @@ stats: #decoder-events: true # Decoder event prefix in stats. Has been 'decoder' before, but that leads # to missing events in the eve.stats records. See issue #2225. - decoder-events-prefix: "decoder.event" + #decoder-events-prefix: "decoder.event" # Add stream events as stats. #stream-events: false +# Plugins -- Experimental -- specify the filename for each plugin shared object +plugins: +# - /path/to/plugin.so + # Configure the type of alert (and other) logging you would like. outputs: # a line based alerts log similar to Snort's fast.log @@ -86,7 +93,7 @@ outputs: filetype: regular #regular|syslog|unix_dgram|unix_stream|redis filename: eve.json # Enable for multi-threaded eve.json output; output files are amended with - # with an identifier, e.g., eve.9.json + # an identifier, e.g., eve.9.json #threaded: false #prefix: "@cee: " # prefix to prepend to each log entry # the following are valid when type: syslog above @@ -161,6 +168,14 @@ outputs: # Enable the logging of tagged packets for rules using the # "tag" keyword. tagged-packets: yes + # Enable logging the final action taken on a packet by the engine + # (e.g: the alert may have action 'allowed' but the verdict be + # 'drop' due to another alert. That's the engine's verdict) + # verdict: yes + # app layer frames + - frame: + # disabled by default as this is very verbose. + enabled: no - anomaly: # Anomaly log records describe unexpected conditions such # as truncated packets, packets with invalid IP/UDP/TCP @@ -206,7 +221,7 @@ outputs: - dns: # This configuration uses the new DNS logging format, # the old configuration is still available: - # https://suricata.readthedocs.io/en/latest/output/eve/eve-json-output.html#dns-v1-format + # https://docs.suricata.io/en/latest/output/eve/eve-json-output.html#dns-v1-format # As of Suricata 5.0, version 2 of the eve dns output # format is the default. @@ -247,6 +262,9 @@ outputs: # alerts: yes # log alerts that caused drops # flows: all # start or all: 'start' logs only a single drop # # per flow direction. All logs each dropped pkt. + # Enable logging the final action taken on a packet by the engine + # (will show more information in case of a drop caused by 'reject') + # verdict: yes - smtp: extended: yes # enable this for extended logging information # this includes: bcc, message-id, subject, x_mailer, user-agent @@ -254,7 +272,7 @@ outputs: # reply-to, bcc, message-id, subject, x-mailer, user-agent, received, # x-originating-ip, in-reply-to, references, importance, priority, # sensitivity, organization, content-md5, date - custom: [reply-to, bcc, message-id, subject, x-mailer, user-agent, received, x-originating-ip, in-reply-to, references, organization, date] + custom: [bcc, message-id, subject, x_mailer, user-agent, reply-to, received, x-originating-ip, in-reply-to, references, importance, priority, sensitivity, organization, content-md5, date, relays] # output md5 of fields: body, subject # for the body you need to set app-layer.protocols.smtp.mime.body-md5 # to yes @@ -266,12 +284,14 @@ outputs: - nfs - smb - tftp - - ikev2 + - ike - dcerpc - krb5 + - bittorrent-dht - snmp - rfb - sip + - quic - dhcp: enabled: no # When extended mode is on, all DHCP messages are logged @@ -282,16 +302,16 @@ outputs: - ssh - mqtt: passwords: yes # enable output of passwords - # HTTP2 logging. HTTP2 support is currently experimental and - # disabled by default. To enable, uncomment the following line - # and be sure to enable http2 in the app-layer section. - #- http2 + - http2 + - pgsql: + enabled: yes + passwords: yes # enable output of passwords. Disabled by default #- stats: - #totals: yes # stats for all threads merged together - #threads: no # per thread stats - #deltas: no # include delta values + # totals: no # stats for all threads merged together + # threads: no # per thread stats + # deltas: no # include delta values # bi-directional flows - #- flow + - flow # uni-directional flows #- netflow @@ -300,6 +320,16 @@ outputs: # flowints. #- metadata + # EXPERIMENTAL per packet output giving TCP state tracking details + # including internal state, flags, etc. + # This output is experimental, meant for debugging and subject to + # change in both config and output without any notice. + #- stream: + # all: false # log all TCP packets + # event-set: false # log packets that have a decoder/stream event + # state-update: false # log packets triggering a TCP state update + # spurious-retransmission: false # log spurious retransmission packets + # a line based log of HTTP requests (no alerts) - http-log: enabled: no @@ -390,6 +420,9 @@ outputs: #ts-format: usec # sec or usec second format (default) is filename.sec usec is filename.sec.usec use-stream-depth: no #If set to "yes" packets seen after reaching stream inspection depth are ignored. "no" logs all packets honor-pass-rules: no # If set to "yes", flows in which a pass rule matched will stop being logged. + # Use "all" to log all packets or use "alerts" to log only alerted packets and flows or "tag" + # to log only flow tagged via the "tag" keyword + #conditional: all # a full alert log containing much information for signature writers # or for investigating suspected false positives. @@ -399,14 +432,6 @@ outputs: append: yes #filetype: regular # 'regular', 'unix_stream' or 'unix_dgram' - # alert output to prelude (https://www.prelude-siem.org/) only - # available if Suricata has been compiled with --enable-prelude - - alert-prelude: - enabled: no - profile: suricata - log-packet-content: no - log-packet-header: yes - # Stats.log contains data from various counters of the Suricata engine. - stats: enabled: no @@ -521,7 +546,7 @@ outputs: # Lua Output Support - execute lua script to generate alert and event # output. # Documented at: - # https://suricata.readthedocs.io/en/latest/output/lua-output.html + # https://docs.suricata.io/en/latest/output/lua-output.html - lua: enabled: no #scripts-dir: /etc/suricata/lua-output/ @@ -542,8 +567,11 @@ logging: # something reasonable if not provided. Can be overridden in an # output section. You can leave this out to get the default. # - # This value is overridden by the SC_LOG_FORMAT env var. - #default-log-format: "[%i] %t - (%f:%l) <%d> (%n) -- " + # This console log format value can be overridden by the SC_LOG_FORMAT env var. + #default-log-format: "%D: %S: %M" + # + # For the pre-7.0 log format use: + #default-log-format: "[%i] %t [%S] - (%f:%l) <%d> (%n) -- " # A regex to filter output. Can be overridden in an output section. # Defaults to empty (no filter). @@ -551,6 +579,11 @@ logging: # This value is overridden by the SC_LOG_OP_FILTER env var. default-output-filter: + # Requires libunwind to be available when Suricata is configured and built. + # If a signal unexpectedly terminates Suricata, displays a brief diagnostic + # message with the offending stacktrace if enabled. + #stacktrace-on-signal: on + # Define your logging outputs. If none are defined, or they are all # disabled you will get the default: console output. outputs: @@ -561,6 +594,7 @@ logging: enabled: yes level: info filename: /var/log/suricata/suricata.log + # format: "[%i - %m] %z %d: %S: %M" # type: json - syslog: enabled: no @@ -594,6 +628,7 @@ af-packet: # more info. # Recommended modes are cluster_flow on most boxes and cluster_cpu or cluster_qm on system # with capture card using RSS (requires cpu affinity tuning and system IRQ tuning) + # cluster_rollover has been deprecated; if used, it'll be replaced with cluster_flow. cluster-type: cluster_flow # In some fragmentation cases, the hash can not be computed. If "defrag" is set # to yes, the kernel will do the needed defragmentation before sending the packets. @@ -656,6 +691,117 @@ af-packet: #use-mmap: no #tpacket-v3: yes +# Linux high speed af-xdp capture support +af-xdp: + - interface: default + # Number of receive threads. "auto" uses least between the number + # of cores and RX queues + #threads: auto + #disable-promisc: false + # XDP_DRV mode can be chosen when the driver supports XDP + # XDP_SKB mode can be chosen when the driver does not support XDP + # Possible values are: + # - drv: enable XDP_DRV mode + # - skb: enable XDP_SKB mode + # - none: disable (kernel in charge of applying mode) + #force-xdp-mode: none + # During socket binding the kernel will attempt zero-copy, if this + # fails it will fallback to copy. If this fails, the bind fails. + # The bind can be explicitly configured using the option below. + # If configured, the bind will fail if not successful (no fallback). + # Possible values are: + # - zero: enable zero-copy mode + # - copy: enable copy mode + # - none: disable (kernel in charge of applying mode) + #force-bind-mode: none + # Memory alignment mode can vary between two modes, aligned and + # unaligned chunk modes. By default, aligned chunk mode is selected. + # select 'yes' to enable unaligned chunk mode. + # Note: unaligned chunk mode uses hugepages, so the required number + # of pages must be available. + #mem-unaligned: no + # The following options configure the prefer-busy-polling socket + # options. The polling time and budget can be edited here. + # Possible values are: + # - yes: enable (default) + # - no: disable + #enable-busy-poll: yes + # busy-poll-time sets the approximate time in microseconds to busy + # poll on a blocking receive when there is no data. + #busy-poll-time: 20 + # busy-poll-budget is the budget allowed for packet batches + #busy-poll-budget: 64 + # These two tunables are used to configure the Linux OS's NAPI + # context. Their purpose is to defer enabling of interrupts and + # instead schedule the NAPI context from a watchdog timer. + # The softirq NAPI will exit early, allowing busy polling to be + # performed. Successfully setting these tunables alongside busy-polling + # should improve performance. + # Defaults are: + #gro-flush-timeout: 2000000 + #napi-defer-hard-irq: 2 + +dpdk: + eal-params: + proc-type: primary + + # DPDK capture support + # RX queues (and TX queues in IPS mode) are assigned to cores in 1:1 ratio + interfaces: + - interface: 0000:3b:00.0 # PCIe address of the NIC port + # Threading: possible values are either "auto" or number of threads + # - auto takes all cores + # in IPS mode it is required to specify the number of cores and the numbers on both interfaces must match + threads: auto + promisc: true # promiscuous mode - capture all packets + multicast: true # enables also detection on multicast packets + checksum-checks: true # if Suricata should validate checksums + checksum-checks-offload: true # if possible offload checksum validation to the NIC (saves Suricata resources) + mtu: 1500 # Set MTU of the device in bytes + # rss-hash-functions: 0x0 # advanced configuration option, use only if you use untested NIC card and experience RSS warnings, + # For `rss-hash-functions` use hexadecimal 0x01ab format to specify RSS hash function flags - DumpRssFlags can help (you can see output if you use -vvv option during Suri startup) + # setting auto to rss_hf sets the default RSS hash functions (based on IP addresses) + + # To approximately calculate required amount of space (in bytes) for interface's mempool: mempool-size * mtu + # Make sure you have enough allocated hugepages. + # The optimum size for the packet memory pool (in terms of memory usage) is power of two minus one: n = (2^q - 1) + mempool-size: 65535 # The number of elements in the mbuf pool + + # Mempool cache size must be lower or equal to: + # - RTE_MEMPOOL_CACHE_MAX_SIZE (by default 512) and + # - "mempool-size / 1.5" + # It is advised to choose cache_size to have "mempool-size modulo cache_size == 0". + # If this is not the case, some elements will always stay in the pool and will never be used. + # The cache can be disabled if the cache_size argument is set to 0, can be useful to avoid losing objects in cache + # If the value is empty or set to "auto", Suricata will attempt to set cache size of the mempool to a value + # that matches the previously mentioned recommendations + mempool-cache-size: 257 + rx-descriptors: 1024 + tx-descriptors: 1024 + # + # IPS mode for Suricata works in 3 modes - none, tap, ips + # - none: IDS mode only - disables IPS functionality (does not further forward packets) + # - tap: forwards all packets and generates alerts (omits DROP action) This is not DPDK TAP + # - ips: the same as tap mode but it also drops packets that are flagged by rules to be dropped + copy-mode: none + copy-iface: none # or PCIe address of the second interface + + - interface: default + threads: auto + promisc: true + multicast: true + checksum-checks: true + checksum-checks-offload: true + mtu: 1500 + rss-hash-functions: auto + mempool-size: 65535 + mempool-cache-size: 257 + rx-descriptors: 1024 + tx-descriptors: 1024 + copy-mode: none + copy-iface: none + + # Cross platform libpcap capture support pcap: - interface: eth0 @@ -706,27 +852,40 @@ pcap-file: ## Step 4: App Layer Protocol configuration ## -# Configure the app-layer parsers. The protocol's section details each -# protocol. +# Configure the app-layer parsers. +# +# The error-policy setting applies to all app-layer parsers. Values can be +# "drop-flow", "pass-flow", "bypass", "drop-packet", "pass-packet", "reject" or +# "ignore" (the default). +# +# The protocol's section details each protocol. # # The option "enabled" takes 3 values - "yes", "no", "detection-only". # "yes" enables both detection and the parser, "no" disables both, and # "detection-only" enables protocol detection only (parser disabled). app-layer: + # error-policy: ignore protocols: + telnet: + enabled: yes rfb: enabled: yes detection-ports: dp: 5900, 5901, 5902, 5903, 5904, 5905, 5906, 5907, 5908, 5909 - # MQTT, disabled by default. mqtt: enabled: yes - max-msg-length: 1mb + # max-msg-length: 1mb + # subscribe-topic-match-limit: 100 + # unsubscribe-topic-match-limit: 100 + # Maximum number of live MQTT transactions per flow + # max-tx: 4096 krb5: enabled: yes + bittorrent-dht: + enabled: yes snmp: enabled: yes - ikev2: + ike: enabled: yes tls: enabled: yes @@ -751,8 +910,16 @@ app-layer: # #encryption-handling: default + pgsql: + enabled: yes + # Stream reassembly size for PostgreSQL. By default, track it completely. + stream-depth: 0 + # Maximum number of live PostgreSQL transactions per flow + # max-tx: 1024 dcerpc: enabled: yes + # Maximum number of live DCERPC transactions per flow + # max-tx: 1024 ftp: enabled: yes # memcap: 64mb @@ -761,9 +928,12 @@ app-layer: ssh: enabled: yes hassh: yes - # HTTP2: Experimental HTTP 2 support. Disabled by default. http2: - enabled: no + enabled: yes + # Maximum number of live HTTP2 streams in a flow + #max-streams: 4096 + # Maximum headers table size + #max-table-size: 65536 smtp: enabled: yes raw-extraction: no @@ -785,6 +955,12 @@ app-layer: # Extract URLs and save in state data structure extract-urls: yes + # Scheme of URLs to extract + # (default is [http]) + extract-urls-schemes: [http, https, ftp, mailto] + # Log the scheme of URLs that are extracted + # (default is no) + log-url-scheme: yes # Set to yes to compute the md5 of the mail body. You will then # be able to journalize it. body-md5: yes @@ -799,12 +975,15 @@ app-layer: enabled: yes detection-ports: dp: 139, 445 + # Maximum number of live SMB transactions per flow + # max-tx: 1024 # Stream reassembly size for SMB streams. By default track it completely. #stream-depth: 0 nfs: enabled: yes + # max-tx: 1024 tftp: enabled: yes dns: @@ -818,6 +997,12 @@ app-layer: dp: 53 http: enabled: yes + + # Byte Range Containers default settings + # byterange: + # memcap: 100mb + # timeout: 60 + # memcap: Maximum memory capacity for HTTP # Default is unlimited, values can be 64mb, e.g. @@ -861,7 +1046,7 @@ app-layer: # auto will use http-body-inline mode in IPS mode, yes or no set it statically http-body-inline: auto - # Decompress SWF files. + # Decompress SWF files. Disabled by default. # Two types: 'deflate', 'lzma', 'both' will decompress deflate and lzma # compress-depth: # Specifies the maximum amount of data to decompress, @@ -870,10 +1055,10 @@ app-layer: # Specifies the maximum amount of decompressed data to obtain, # set 0 for unlimited. swf-decompression: - enabled: yes + enabled: no type: both - compress-depth: 0 - decompress-depth: 0 + compress-depth: 100kb + decompress-depth: 100kb # Use a random value for inspection sizes around the specified value. # This lowers the risk of some evasion techniques but could lead @@ -897,6 +1082,8 @@ app-layer: # Maximum decompressed size with a compression ratio # above 2048 (only LZMA can reach this ratio, deflate cannot) #compression-bomb-limit: 1mb + # Maximum time spent decompressing a single transaction in usec + #decompression-time-limit: 100000 server-config: @@ -952,7 +1139,7 @@ app-layer: # SCADA EtherNet/IP and CIP protocol support enip: - enabled: no + enabled: yes detection-ports: dp: 44818 sp: 44818 @@ -960,6 +1147,9 @@ app-layer: ntp: enabled: yes + quic: + enabled: yes + dhcp: enabled: no @@ -970,12 +1160,23 @@ app-layer: asn1-max-frames: 256 # Datasets default settings -# datasets: -# # Default fallback memcap and hashsize values for datasets in case these -# # were not explicitly defined. -# defaults: -# memcap: 100mb -# hashsize: 2048 +datasets: + # Default fallback memcap and hashsize values for datasets in case these + # were not explicitly defined. + defaults: + #memcap: 100mb + #hashsize: 2048 + + rules: + # Set to true to allow absolute filenames and filenames that use + # ".." components to reference parent directories in rules that specify + # their filenames. + #allow-absolute-filenames: false + + # Allow datasets in rules write access for "save" and + # "state". This is enabled by default, however write access is + # limited to the data directory. + #allow-write: true ############################################################################## ## @@ -992,6 +1193,27 @@ run-as: user: suri group: suri +security: + # if true, prevents process creation from Suricata by calling + # setrlimit(RLIMIT_NPROC, 0) + limit-noproc: true + # Use landlock security module under Linux + landlock: + enabled: no + directories: + #write: + # - /var/run/ + # /usr and /etc folders are added to read list to allow + # file magic to be used. + read: + - /usr/ + - /etc/ + - /etc/suricata/ + + lua: + # Allow Lua rules. Disabled by default. + #allow-rules: false + # Some logging modules will use that name in event as identifier. The default # value is the hostname #sensor-name: suricata @@ -1046,6 +1268,8 @@ host-mode: auto # # hash - Flow assigned to threads using the 5-7 tuple hash. # ippair - Flow assigned to threads using addresses only. +# ftp-hash - Flow assigned to threads using the hash, except for FTP, so that +# ftp-data flows will be handled by the same thread # #autofp-scheduler: hash @@ -1061,12 +1285,12 @@ host-mode: auto # activated in live capture mode. You can use the filename variable to set # the file name of the socket. unix-command: - enabled: yes + enabled: auto #filename: custom.socket # Magic file. The extension .mgc is added to the value here. -#magic-file: /usr/share/file/magic -magic-file: /usr/share/misc/magic.mgc +magic-file: /usr/share/misc/magic.mgc +#magic-file: # GeoIP2 database file. Specify path and filename of GeoIP2 database # if using rules with "geoip" rule option. @@ -1087,6 +1311,22 @@ legacy: # - reject # - alert +# Define maximum number of possible alerts that can be triggered for the same +# packet. Default is 15 +#packet-alert-max: 15 + +# Exception Policies +# +# Define a common behavior for all exception policies. +# In IPS mode, the default is drop-flow. For cases when that's not possible, the +# engine will fall to drop-packet. To fallback to old behavior (setting each of +# them individually, or ignoring all), set this to ignore. +# All values available for exception policies can be used, and there is one +# extra option: auto - which means drop-flow or drop-packet (as explained above) +# in IPS mode, and ignore in IDS mode. Exception policy values are: drop-packet, +# drop-flow, reject, bypass, pass-packet, pass-flow, ignore (disable). +exception-policy: auto + # IP Reputation #reputation-categories-file: /etc/suricata/iprep/categories.txt #default-reputation-path: /etc/suricata/iprep @@ -1134,8 +1374,11 @@ host-os-policy: # Defrag settings: +# The memcap-policy value can be "drop-packet", "pass-packet", "reject" or +# "ignore" (which is the default). defrag: memcap: 32mb + # memcap-policy: ignore hash-size: 65536 trackers: 65535 # number of defragmented flows to follow max-frags: 65535 # number of fragments to keep (higher than trackers) @@ -1175,9 +1418,12 @@ defrag: # last time seen flows. # The memcap can be specified in kb, mb, gb. Just a number indicates it's # in bytes. +# The memcap-policy can be "drop-packet", "pass-packet", "reject" or "ignore" +# (which is the default). flow: memcap: 128mb + #memcap-policy: ignore hash-size: 65536 prealloc: 10000 emergency-recovery: 30 @@ -1191,6 +1437,12 @@ flow: vlan: use-for-tracking: true +# This option controls the use of livedev ids in the flow (and defrag) +# hashing. This is enabled by default and should be disabled if +# multiple live devices are used to capture traffic from the same network +livedev: + use-for-tracking: true + # Specific timeouts for flows. Here you can specify the timeouts that the # active flows will wait to transit from the current state to another, on each # protocol. The value of "new" determines the seconds to wait after a handshake or @@ -1248,8 +1500,11 @@ flow-timeouts: # engine is configured. # # stream: -# memcap: 32mb # Can be specified in kb, mb, gb. Just a +# memcap: 64mb # Can be specified in kb, mb, gb. Just a # # number indicates it's in bytes. +# memcap-policy: ignore # Can be "drop-flow", "pass-flow", "bypass", +# # "drop-packet", "pass-packet", "reject" or +# # "ignore" default is "ignore" # checksum-validation: yes # To validate the checksum of received # # packet. If csum validation is specified as # # "yes", then packets with invalid csum values will not @@ -1259,19 +1514,28 @@ flow-timeouts: # # of checksum. You can control the handling of checksum # # on a per-interface basis via the 'checksum-checks' # # option -# prealloc-sessions: 2k # 2k sessions prealloc'd per stream thread +# prealloc-sessions: 2048 # 2k sessions prealloc'd per stream thread # midstream: false # don't allow midstream session pickups +# midstream-policy: ignore # Can be "drop-flow", "pass-flow", "bypass", +# # "drop-packet", "pass-packet", "reject" or +# # "ignore" default is "ignore" # async-oneside: false # don't enable async stream handling # inline: no # stream inline mode # drop-invalid: yes # in inline mode, drop packets that are invalid with regards to streaming engine +# max-syn-queued: 10 # Max different SYNs to queue # max-synack-queued: 5 # Max different SYN/ACKs to queue # bypass: no # Bypass packets when stream.reassembly.depth is reached. # # Warning: first side to reach this triggers # # the bypass. +# liberal-timestamps: false # Treat all timestamps as if the Linux policy applies. This +# # means it's slightly more permissive. Enabled by default. # # reassembly: -# memcap: 64mb # Can be specified in kb, mb, gb. Just a number +# memcap: 256mb # Can be specified in kb, mb, gb. Just a number # # indicates it's in bytes. +# memcap-policy: ignore # Can be "drop-flow", "pass-flow", "bypass", +# # "drop-packet", "pass-packet", "reject" or +# # "ignore" default is "ignore" # depth: 1mb # Can be specified in kb, mb, gb. Just a number # # indicates it's in bytes. # toserver-chunk-size: 2560 # inspect raw stream in chunks of at least @@ -1305,10 +1569,14 @@ flow-timeouts: # stream: memcap: 64mb + #memcap-policy: ignore checksum-validation: yes # reject incorrect csums + #midstream: false + #midstream-policy: ignore inline: auto # auto will use inline mode in IPS mode, yes or no set it statically reassembly: memcap: 256mb + #memcap-policy: ignore depth: 1mb # reassemble 1mb into a stream toserver-chunk-size: 2560 toclient-chunk-size: 2560 @@ -1359,6 +1627,9 @@ decoder: enabled: true ports: $GENEVE_PORTS # syntax: '[6081, 1234]' or '6081'. + # maximum number of decoder layers for a packet + # max-layers: 16 + ## ## Performance tuning and profiling ## @@ -1492,6 +1763,14 @@ threading: # thread will always be created. # detect-thread-ratio: 1.0 + # + # By default, the per-thread stack size is left to its default setting. If + # the default thread stack size is too small, use the following configuration + # setting to change the size. Note that if any thread's stack size cannot be + # set to this value, a fatal error occurs. + # + # Generally, the per-thread stack-size should not exceed 8MB. + #stack-size: 8mb # Luajit has a strange memory requirement, its 'states' need to be in the # first 2G of the process' memory. @@ -1507,9 +1786,9 @@ luajit: # profiling: # Run profiling for every X-th packet. The default is 1, which means we - # profile every packet. If set to 1000, one packet is profiled for every - # 1000 received. - #sample-rate: 1000 + # profile every packet. If set to 1024, one packet is profiled for every + # 1024 received. The sample rate must be a power of 2. + #sample-rate: 1024 # rule profiling rules: @@ -1594,7 +1873,7 @@ profiling: # accept the packet if Suricata is not able to keep pace. # bypass mark and mask can be used to implement NFQ bypass. If bypass mark is # set then the NFQ bypass is activated. Suricata will set the bypass mark/mask -# on packet of a flow that need to be bypassed. The Nefilter ruleset has to +# on packet of a flow that need to be bypassed. The Netfilter ruleset has to # directly accept all packets of a flow once a packet has been marked. nfq: # mode: accept @@ -1634,7 +1913,7 @@ capture: #disable-offloading: false # # disable checksum validation. Same as setting '-k none' on the - # commandline. + # command-line. #checksum-validation: none # Netmap support @@ -1703,7 +1982,13 @@ pfring: cluster-id: 99 # Default PF_RING cluster type. PF_RING can load balance per flow. - # Possible values are cluster_flow or cluster_round_robin. + # Possible values are: + # - cluster_flow: 6-tuple: + # - cluster_inner_flow: 6-tuple: + # - cluster_inner_flow_2_tuple: 2-tuple: + # - cluster_inner_flow_4_tuple: 4-tuple: + # - cluster_inner_flow_5_tuple: 5-tuple: + # - cluster_round_robin (NOT RECOMMENDED) cluster-type: cluster_flow # bpf filter for this interface @@ -1762,12 +2047,6 @@ ipfw: napatech: - # The Host Buffer Allowance for all streams - # (-1 = OFF, 1 - 100 = percentage of the host buffer that can be held back) - # This may be enabled when sharing streams with another application. - # Otherwise, it should be turned off. - #hba: -1 - # When use_all_streams is set to "yes" the initialization code will query # the Napatech service for all configured streams and listen on all of them. # When set to "no" the streams config array will be used. @@ -1863,14 +2142,15 @@ napatech: ## default-rule-path: /var/lib/suricata/rules + rule-files: - - suricata.rules + - suricata.rules ## ## Auxiliary configuration files. ## -classification-file: /var/lib/suricata/rules/classification.config +classification-file: /etc/suricata/classification.config reference-config-file: /etc/suricata/reference.config # threshold-file: /etc/suricata/threshold.config @@ -1882,6 +2162,6 @@ reference-config-file: /etc/suricata/reference.config # in this configuration file. Files with relative pathnames will be # searched for in the same directory as this configuration file. You may # use absolute pathnames too. -# You can specify more than 2 configuration files, if needed. -#include: include1.yaml -#include: include2.yaml +#include: +# - include1.yaml +# - include2.yaml diff --git a/docker/suricata/docker-compose.yml b/docker/suricata/docker-compose.yml index b9eed19c..7ac6c580 100644 --- a/docker/suricata/docker-compose.yml +++ b/docker/suricata/docker-compose.yml @@ -17,6 +17,6 @@ services: - NET_ADMIN - SYS_NICE - NET_RAW - image: "dtagdevsec/suricata:2204" + image: "dtagdevsec/suricata:24.04" volumes: - - /data/suricata/log:/var/log/suricata + - $HOME/tpotce/data/suricata/log:/var/log/suricata diff --git a/docker/tanner/docker-compose.yml b/docker/tanner/docker-compose.yml index b477a845..e3ed8799 100644 --- a/docker/tanner/docker-compose.yml +++ b/docker/tanner/docker-compose.yml @@ -16,7 +16,7 @@ services: # cpus: 0.25 networks: - tanner_local - image: "dtagdevsec/redis:2204" + image: "dtagdevsec/redis:24.04" read_only: true # PHP Sandbox service @@ -32,7 +32,7 @@ services: # cpus: 0.25 networks: - tanner_local - image: "dtagdevsec/phpox:2204" + image: "dtagdevsec/phpox:24.04" read_only: true # Tanner API Service @@ -48,10 +48,10 @@ services: # cpus: 0.25 networks: - tanner_local - image: "dtagdevsec/tanner:2204" + image: "dtagdevsec/tanner:24.04" read_only: true volumes: - - /data/tanner/log:/var/log/tanner + - $HOME/tpotce/data/tanner/log:/var/log/tanner command: tannerapi depends_on: - tanner_redis @@ -69,7 +69,7 @@ services: # - tanner_local # ports: # - "127.0.0.1:8091:8091" -# image: "dtagdevsec/tanner:2204" +# image: "dtagdevsec/tanner:24.04" # command: tannerweb # read_only: true # volumes: @@ -90,12 +90,12 @@ services: # cpus: 0.25 networks: - tanner_local - image: "dtagdevsec/tanner:2204" + image: "dtagdevsec/tanner:24.04" command: tanner read_only: true volumes: - - /data/tanner/log:/var/log/tanner - - /data/tanner/files:/opt/tanner/files + - $HOME/tpotce/data/tanner/log:/var/log/tanner + - $HOME/tpotce/data/tanner/files:/opt/tanner/files depends_on: - tanner_api # - tanner_web @@ -114,6 +114,6 @@ services: - tanner_local ports: - "80:80" - image: "dtagdevsec/snare:2204" + image: "dtagdevsec/snare:24.04" depends_on: - tanner diff --git a/docker/tanner/phpox/Dockerfile b/docker/tanner/phpox/Dockerfile index cebf5591..dd214f13 100644 --- a/docker/tanner/phpox/Dockerfile +++ b/docker/tanner/phpox/Dockerfile @@ -1,42 +1,42 @@ -FROM alpine:3.15 +FROM alpine:3.19 # # Install packages RUN apk -U --no-cache add \ - build-base \ - file \ - git \ - make \ - php7 \ - php7-dev \ - py3-aiohttp \ - python3 \ - python3-dev \ - re2c && \ + build-base \ + file \ + git \ + make \ + php83 \ + php83-dev \ + py3-aiohttp \ + python3 \ + python3-dev \ + re2c && \ # # Install bfr sandbox from git - git clone https://github.com/mushorg/BFR /opt/BFR && \ + git clone https://github.com/mushorg/BFR -b v1.0.0 /opt/BFR && \ cd /opt/BFR && \ -# git checkout 508729202428a35bcc6bb27dd97b831f7e5009b5 && \ - phpize7 && \ +# git checkout 91a8a4e155875c50b69d5c6af454e304994815a7 && \ + phpize83 && \ ./configure \ - --with-php-config=/usr/bin/php-config7 \ + --with-php-config=/usr/bin/php-config83 \ --enable-bfr && \ make && \ make install && \ cd / && \ rm -rf /opt/BFR /tmp/* /var/tmp/* && \ - echo "zend_extension = "$(find /usr -name bfr.so) >> /etc/php7/php.ini && \ + echo "zend_extension = "$(find /usr -name bfr.so) >> /etc/php83/php.ini && \ # # Install PHP Sandbox git clone https://github.com/mushorg/phpox /opt/phpox && \ cd /opt/phpox && \ - git checkout a62c8136ec7b3ebab0c989f4235e2960175121f8 && \ + #git checkout a62c8136ec7b3ebab0c989f4235e2960175121f8 && \ make && \ # # Clean up apk del --purge build-base \ git \ - php7-dev \ + php83-dev \ python3-dev && \ rm -rf /root/* /var/cache/apk/* /opt/phpox/.git # diff --git a/docker/tanner/redis/Dockerfile b/docker/tanner/redis/Dockerfile index c69949bd..5c85d4cd 100644 --- a/docker/tanner/redis/Dockerfile +++ b/docker/tanner/redis/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.17 +FROM alpine:3.19 # # Include dist COPY dist/ /root/dist/ diff --git a/docker/tanner/snare/Dockerfile b/docker/tanner/snare/Dockerfile index 801272d8..fade6ede 100644 --- a/docker/tanner/snare/Dockerfile +++ b/docker/tanner/snare/Dockerfile @@ -1,31 +1,32 @@ -FROM alpine:3.17 +FROM alpine:3.19 # # Include dist COPY dist/ /root/dist/ # # Setup apt RUN apk -U --no-cache add \ - build-base \ - git \ - linux-headers \ - python3 \ - python3-dev \ - py3-aiohttp \ - py3-beautifulsoup4 \ - py3-gitpython \ - py3-jinja2 \ - py3-markupsafe \ - py3-setuptools \ - py3-pip \ - py3-pycodestyle \ - py3-wheel && \ + build-base \ + git \ + linux-headers \ + python3 \ + python3-dev \ + py3-aiohttp \ + py3-beautifulsoup4 \ + py3-gitpython \ + py3-jinja2 \ + py3-markupsafe \ + py3-setuptools \ + py3-pip \ + py3-pycodestyle \ + py3-wheel && \ # # Setup Snare git clone https://github.com/mushorg/snare /opt/snare && \ cd /opt/snare/ && \ - git checkout 0919a80838eb0823a3b7029b0264628ee0a36211 && \ + # git checkout 0919a80838eb0823a3b7029b0264628ee0a36211 && \ + git checkout 08c69b7165354ea2040b6170c37d92ff3c304f96 && \ cp /root/dist/requirements.txt . && \ - pip3 install --no-cache-dir -r requirements.txt && \ + pip3 install --break-system-packages --no-cache-dir -r requirements.txt && \ python3 setup.py install && \ cd / && \ rm -rf /opt/snare && \ diff --git a/docker/tanner/tanner/Dockerfile b/docker/tanner/tanner/Dockerfile index 4193b000..4deaa0f6 100644 --- a/docker/tanner/tanner/Dockerfile +++ b/docker/tanner/tanner/Dockerfile @@ -5,41 +5,36 @@ COPY dist/ /root/dist/ # # Setup apt RUN apk -U --no-cache add \ - build-base \ - git \ - libcap \ - libffi-dev \ - openssl-dev \ - linux-headers \ - py3-aiohttp \ - py3-geoip2 \ - py3-jinja2 \ - py3-jwt \ - py3-mako \ - py3-mysqlclient \ - py3-packaging \ - py3-pip \ - py3-redis \ - py3-pycodestyle \ - py3-setuptools \ - py3-tornado \ - py3-websocket-client \ - py3-wheel \ - py3-yaml \ - py3-yarl \ - python3 \ - python3-dev && \ + build-base \ + git \ + libcap \ + libffi-dev \ + openssl-dev \ + linux-headers \ + py3-aiohttp \ + py3-geoip2 \ + py3-jinja2 \ + py3-jwt \ + py3-mako \ + py3-mysqlclient \ + py3-packaging \ + py3-pip \ + py3-redis \ + py3-pycodestyle \ + py3-setuptools \ + py3-tornado \ + py3-websocket-client \ + py3-wheel \ + py3-yaml \ + py3-yarl \ + python3 \ + python3-dev && \ # # Setup Tanner -# git clone https://github.com/mushorg/tanner /opt/tanner && \ - git clone https://github.com/t3chn0m4g3/tanner /opt/tanner && \ +# git clone https://github.com/t3chn0m4g3/tanner /opt/tanner && \ + git clone https://github.com/mushorg/tanner /opt/tanner && \ cd /opt/tanner/ && \ -# git fetch origin pull/364/head:test && \ -# git checkout test && \ -# git checkout 20dabcbccc50f8878525677b925a4c9abcaf9f54 && \ -# git checkout 2fdce2e2ad7e125012c7e6dcbfa02b50f73c128e && \ -# sed -i 's/aioredis/aioredis==1.3.1/g' requirements.txt && \ -# sed -i 's/^aiohttp$/aiohttp==3.7.4/g' requirements.txt && \ + git checkout 245d628f4023e5462c7035e760a6b5eed0a33fbe && \ cp /root/dist/config.yaml /opt/tanner/tanner/data && \ cp /root/dist/requirements.txt . && \ pip3 install --no-cache-dir -r requirements.txt && \ diff --git a/docker/tpotinit/Dockerfile b/docker/tpotinit/Dockerfile new file mode 100644 index 00000000..f78354f8 --- /dev/null +++ b/docker/tpotinit/Dockerfile @@ -0,0 +1,49 @@ +FROM alpine:edge +# +# Include dist +COPY dist/ /opt/tpot/ +# +# Get and install dependencies & packages +RUN apk --no-cache -U add \ + aria2 \ + apache2-utils \ + bash \ + bind-tools \ + conntrack-tools \ + cracklib \ + curl \ + ethtool \ + figlet \ + git \ + grep \ + iproute2 \ + iptables \ +# iptables-legacy \ + jq \ + logrotate \ + lsblk \ + net-tools \ + openssl \ + pigz \ + tar \ + uuidgen && \ + apk --no-cache -U add --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community \ + yq && \ +# +# Setup user + addgroup -g 2000 tpot && \ + adduser -S -s /bin/ash -u 2000 -D -g 2000 tpot && \ +# +# Clean up + apk del --purge git && \ + rm -rf /root/* /tmp/* && \ + rm -rf /root/.cache /opt/tpot/.git && \ + rm -rf /var/cache/apk/* +# +# Run tpotinit +WORKDIR /opt/tpot +#HEALTHCHECK --interval=5s --timeout=30s --retries=3 CMD pgrep -f autoheal || exit 1 +HEALTHCHECK --retries=1000 --interval=5s CMD test -f /tmp/success || exit 1 +STOPSIGNAL SIGTERM +# Using ENTRYPOINT so we can catch SIGTERM for cleanup +ENTRYPOINT ["/opt/tpot/entrypoint.sh"] diff --git a/docker/tpotinit/dist/autoheal.sh b/docker/tpotinit/dist/autoheal.sh new file mode 100755 index 00000000..22078c67 --- /dev/null +++ b/docker/tpotinit/dist/autoheal.sh @@ -0,0 +1,171 @@ +#!/usr/bin/env sh + +#################################################################### +# docker-autoheal: https://github.com/willfarrell/docker-autoheal +#################################################################### + +set -e +# shellcheck disable=2039 +set -o pipefail + +DOCKER_SOCK=${DOCKER_SOCK:-/var/run/docker.sock} +UNIX_SOCK="" +CURL_TIMEOUT=${CURL_TIMEOUT:-30} +WEBHOOK_URL=${WEBHOOK_URL:-""} +WEBHOOK_JSON_KEY=${WEBHOOK_JSON_KEY:-"text"} +APPRISE_URL=${APPRISE_URL:-""} + +# only use unix domain socket if no TCP endpoint is defined +case "${DOCKER_SOCK}" in + "tcp://"*) HTTP_ENDPOINT="$(echo ${DOCKER_SOCK} | sed 's#tcp://#http://#')" + ;; + "tcps://"*) HTTP_ENDPOINT="$(echo ${DOCKER_SOCK} | sed 's#tcps://#https://#')" + CA="--cacert /certs/ca.pem" + CLIENT_KEY="--key /certs/client-key.pem" + CLIENT_CERT="--cert /certs/client-cert.pem" + ;; + *) HTTP_ENDPOINT="http://localhost" + UNIX_SOCK="--unix-socket ${DOCKER_SOCK}" + ;; +esac + +# AUTOHEAL_CONTAINER_LABEL=${AUTOHEAL_CONTAINER_LABEL:-autoheal} +AUTOHEAL_CONTAINER_LABEL=${AUTOHEAL_CONTAINER_LABEL:-all} +AUTOHEAL_START_PERIOD=${AUTOHEAL_START_PERIOD:-0} +AUTOHEAL_INTERVAL=${AUTOHEAL_INTERVAL:-5} +AUTOHEAL_DEFAULT_STOP_TIMEOUT=${AUTOHEAL_DEFAULT_STOP_TIMEOUT:-10} + +docker_curl() { + curl --max-time "${CURL_TIMEOUT}" --no-buffer -s \ + ${CA} ${CLIENT_KEY} ${CLIENT_CERT} \ + ${UNIX_SOCK} \ + "$@" +} + +# shellcheck disable=2039 +get_container_info() { + local label_filter + local url + + # Set container selector + if [ "$AUTOHEAL_CONTAINER_LABEL" = "all" ] + then + label_filter="" + else + label_filter=",\"label\":\[\"${AUTOHEAL_CONTAINER_LABEL}=true\"\]" + fi + url="${HTTP_ENDPOINT}/containers/json?filters=\{\"health\":\[\"unhealthy\"\]${label_filter}\}" + docker_curl "$url" +} + +# shellcheck disable=2039 +restart_container() { + local container_id="$1" + local timeout="$2" + + docker_curl -f -X POST "${HTTP_ENDPOINT}/containers/${container_id}/restart?t=${timeout}" +} + +notify_webhook() { + local text="$@" + + if [ -n "$WEBHOOK_URL" ] + then + # execute webhook requests as background process to prevent healer from blocking + curl -s -X POST -H "Content-type: application/json" -d "$(generate_webhook_payload $text)" $WEBHOOK_URL + fi + + if [ -n "$APPRISE_URL" ] + then + # execute webhook requests as background process to prevent healer from blocking + curl -s -X POST -H "Content-type: application/json" -d "$(generate_apprise_payload $text)" $APPRISE_URL + fi +} + +notify_post_restart_script() { + if [ -n "$POST_RESTART_SCRIPT" ] + then + # execute post restart script as background process to prevent healer from blocking + $POST_RESTART_SCRIPT "$@" & + fi +} + +# https://towardsdatascience.com/proper-ways-to-pass-environment-variables-in-json-for-curl-post-f797d2698bf3 +generate_webhook_payload() { + local text="$@" + cat <&2 + exit 1 + fi + # Delayed startup + if [ "$AUTOHEAL_START_PERIOD" -gt 0 ] + then + echo "Monitoring containers for unhealthy status in $AUTOHEAL_START_PERIOD second(s)" + sleep "$AUTOHEAL_START_PERIOD" & + wait $! + fi + + while true + do + STOP_TIMEOUT=".Labels[\"autoheal.stop.timeout\"] // $AUTOHEAL_DEFAULT_STOP_TIMEOUT" + get_container_info | \ + jq -r ".[] | select(.Labels[\"autoheal\"] != \"False\") | foreach . as \$CONTAINER([];[]; \$CONTAINER | .Id, .Names[0], .State, ${STOP_TIMEOUT})" | \ + while read -r CONTAINER_ID && read -r CONTAINER_NAME && read -r CONTAINER_STATE && read -r TIMEOUT + do + # shellcheck disable=2039 + CONTAINER_SHORT_ID=${CONTAINER_ID:0:12} + DATE=$(date +%d-%m-%Y" "%H:%M:%S) + + if [ "$CONTAINER_NAME" = "null" ] + then + echo "$DATE Container name of (${CONTAINER_SHORT_ID}) is null, which implies container does not exist - don't restart" >&2 + elif [ "$CONTAINER_STATE" = "restarting" ] + then + echo "$DATE Container $CONTAINER_NAME (${CONTAINER_SHORT_ID}) found to be restarting - don't restart" + else + echo "$DATE Container $CONTAINER_NAME (${CONTAINER_SHORT_ID}) found to be unhealthy - Restarting container now with ${TIMEOUT}s timeout" + if ! restart_container "$CONTAINER_ID" "$TIMEOUT" + then + echo "$DATE Restarting container $CONTAINER_SHORT_ID failed" >&2 + notify_webhook "Container ${CONTAINER_NAME:1} (${CONTAINER_SHORT_ID}) found to be unhealthy. Failed to restart the container!" & + else + notify_webhook "Container ${CONTAINER_NAME:1} (${CONTAINER_SHORT_ID}) found to be unhealthy. Successfully restarted the container!" & + fi + notify_post_restart_script "$CONTAINER_NAME" "$CONTAINER_SHORT_ID" "$CONTAINER_STATE" "$TIMEOUT" & + fi + done + sleep "$AUTOHEAL_INTERVAL" & + wait $! + done + +else + exec "$@" +fi diff --git a/docker/tpotinit/dist/bin/backup_es_folders.sh b/docker/tpotinit/dist/bin/backup_es_folders.sh new file mode 100755 index 00000000..294e4c24 --- /dev/null +++ b/docker/tpotinit/dist/bin/backup_es_folders.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +if [ "$1" == "" ] || [ "$1" != "all" ] && [ "$1" != "base" ]; + then + echo "Usage: backup_es_folders [all, base]" + echo " all = backup all ES folder" + echo " base = backup only Kibana index". + echo + exit +fi + +# Backup all ES relevant folders +# Make sure ES is available +myES="http://127.0.0.1:64298/" +myESSTATUS=$(curl -s -XGET ''$myES'_cluster/health' | jq '.' | grep -c green) +if ! [ "$myESSTATUS" = "1" ] + then + echo "### Elasticsearch is not available." + exit + else + echo "### Elasticsearch is available, now continuing." + echo +fi + +# Set vars +myDATE=$(date +%Y%m%d%H%M) +myPATH=$PWD +myELKPATH="data/elk/data" +myKIBANAINDEXNAMES=$(curl -s -XGET ''$myES'_cat/indices/.kibana_*?v&s=index&h=uuid' | tail -n +2) +#echo $myKIBANAINDEXNAMES +for i in $myKIBANAINDEXNAMES; + do + myKIBANAINDEXPATHS="$myKIBANAINDEXPATHS $myELKPATH/indices/$i" +done + +# Backup DB in 2 flavors +cd $HOME/tpotce + +echo "### Now backing up Elasticsearch folders ..." +if [ "$1" == "all" ]; + then + tar cvfz $myPATH"/elkall_"$myDATE".tgz" $myELKPATH +elif [ "$1" == "base" ]; + then + tar cvfz $myPATH"/elkbase_"$myDATE".tgz" $myKIBANAINDEXPATHS +fi + +cd $myPATH diff --git a/bin/blackhole.sh b/docker/tpotinit/dist/bin/blackhole.sh similarity index 100% rename from bin/blackhole.sh rename to docker/tpotinit/dist/bin/blackhole.sh diff --git a/bin/clean.sh b/docker/tpotinit/dist/bin/clean.sh similarity index 80% rename from bin/clean.sh rename to docker/tpotinit/dist/bin/clean.sh index c9e6cb44..897d08a0 100755 --- a/bin/clean.sh +++ b/docker/tpotinit/dist/bin/clean.sh @@ -20,7 +20,7 @@ echo $(ls $myFOLDER | wc -l) # Let's create a function to rotate and compress logs fuLOGROTATE () { - local mySTATUS="/opt/tpot/etc/logrotate/status" + local mySTATUS="/data/tpot/etc/logrotate/status" local myCONF="/opt/tpot/etc/logrotate/logrotate.conf" local myADBHONEYTGZ="/data/adbhoney/downloads.tgz" local myADBHONEYDL="/data/adbhoney/downloads/" @@ -42,8 +42,8 @@ fuLOGROTATE () { # Ensure correct permissions and ownerships for logrotate to run without issues chmod 770 /data/ -R chown tpot:tpot /data -R -chmod 644 /data/nginx/conf -R -chmod 644 /data/nginx/cert -R +chmod 774 /data/nginx/conf -R +chmod 774 /data/nginx/cert -R # Run logrotate with force (-f) first, so the status file can be written and race conditions (with tar) be avoided logrotate -f -s $mySTATUS $myCONF @@ -74,10 +74,23 @@ chown tpot:tpot $myADBHONEYDL $myCOWRIETTYLOGS $myCOWRIEDL $myDIONAEABI $myDIONA logrotate -s $mySTATUS $myCONF } +# Let's create a function to clean up and prepare tpotinit data +fuTPOTINIT () { + mkdir -vp /data/ews/conf \ + /data/tpot/etc/{compose,logrotate} \ + /tmp/etc/ + chmod 770 /data/ews/ -R + chmod 770 /data/tpot/ -R + chmod 770 /tmp/etc/ -R + chown tpot:tpot /data/ews/ -R + chown tpot:tpot /data/tpot/ -R + chown tpot:tpot /tmp/etc/ -R +} + # Let's create a function to clean up and prepare honeytrap data fuADBHONEY () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/adbhoney/*; fi - mkdir -p /data/adbhoney/log/ /data/adbhoney/downloads/ + mkdir -vp /data/adbhoney/{downloads,log} chmod 770 /data/adbhoney/ -R chown tpot:tpot /data/adbhoney/ -R } @@ -85,7 +98,7 @@ fuADBHONEY () { # Let's create a function to clean up and prepare ciscoasa data fuCISCOASA () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/ciscoasa/*; fi - mkdir -p /data/ciscoasa/log + mkdir -vp /data/ciscoasa/log chmod 770 /data/ciscoasa -R chown tpot:tpot /data/ciscoasa -R } @@ -93,7 +106,7 @@ fuCISCOASA () { # Let's create a function to clean up and prepare citrixhoneypot data fuCITRIXHONEYPOT () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/citrixhoneypot/*; fi - mkdir -p /data/citrixhoneypot/logs/ + mkdir -vp /data/citrixhoneypot/log/ chmod 770 /data/citrixhoneypot/ -R chown tpot:tpot /data/citrixhoneypot/ -R } @@ -101,7 +114,7 @@ fuCITRIXHONEYPOT () { # Let's create a function to clean up and prepare conpot data fuCONPOT () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/conpot/*; fi - mkdir -p /data/conpot/log + mkdir -vp /data/conpot/log chmod 770 /data/conpot -R chown tpot:tpot /data/conpot -R } @@ -109,7 +122,7 @@ fuCONPOT () { # Let's create a function to clean up and prepare cowrie data fuCOWRIE () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/cowrie/*; fi - mkdir -p /data/cowrie/log/tty/ /data/cowrie/downloads/ /data/cowrie/keys/ /data/cowrie/misc/ + mkdir -vp /data/cowrie/{downloads,keys,misc,log,log/tty} chmod 770 /data/cowrie -R chown tpot:tpot /data/cowrie -R } @@ -117,7 +130,7 @@ fuCOWRIE () { # Let's create a function to clean up and prepare ddospot data fuDDOSPOT () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/ddospot/log; fi - mkdir -p /data/ddospot/bl /data/ddospot/db /data/ddospot/log + mkdir -vp /data/ddospot/{bl,db,log} chmod 770 /data/ddospot -R chown tpot:tpot /data/ddospot -R } @@ -125,8 +138,7 @@ fuDDOSPOT () { # Let's create a function to clean up and prepare dicompot data fuDICOMPOT () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/dicompot/log; fi - mkdir -p /data/dicompot/log - mkdir -p /data/dicompot/images + mkdir -vp /data/dicompot/{images,log} chmod 770 /data/dicompot -R chown tpot:tpot /data/dicompot -R } @@ -134,7 +146,12 @@ fuDICOMPOT () { # Let's create a function to clean up and prepare dionaea data fuDIONAEA () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/dionaea/*; fi - mkdir -p /data/dionaea/log /data/dionaea/bistreams /data/dionaea/binaries /data/dionaea/rtp /data/dionaea/roots/ftp /data/dionaea/roots/tftp /data/dionaea/roots/www /data/dionaea/roots/upnp + mkdir -vp /data/dionaea/{log,bistreams,binaries,rtp,roots,roots/ftp,roots/tftp,roots/www,roots/upnp} + touch /data/dionaea/dionaea-errors.log + touch /data/dionaea/sipaccounts.sqlite + touch /data/dionaea/sipaccounts.sqlite-journal + touch /data/dionaea/log/dionaea.json + touch /data/dionaea/log/dionaea.sqlite chmod 770 /data/dionaea -R chown tpot:tpot /data/dionaea -R } @@ -142,7 +159,7 @@ fuDIONAEA () { # Let's create a function to clean up and prepare elasticpot data fuELASTICPOT () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/elasticpot/*; fi - mkdir -p /data/elasticpot/log + mkdir -vp /data/elasticpot/log chmod 770 /data/elasticpot -R chown tpot:tpot /data/elasticpot -R } @@ -152,7 +169,7 @@ fuELK () { # ELK data will be kept for <= 90 days, check /etc/crontab for curator modification # ELK daemon log files will be removed if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/elk/log/*; fi - mkdir -p /data/elk + mkdir -vp /data/elk/{data,log} chmod 770 /data/elk -R chown tpot:tpot /data/elk -R } @@ -160,7 +177,7 @@ fuELK () { # Let's create a function to clean up and prepare endlessh data fuENDLESSH () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/endlessh/log; fi - mkdir -p /data/endlessh/log + mkdir -vp /data/endlessh/log chmod 770 /data/endlessh -R chown tpot:tpot /data/endlessh -R } @@ -168,7 +185,7 @@ fuENDLESSH () { # Let's create a function to clean up and prepare fatt data fuFATT () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/fatt/*; fi - mkdir -p /data/fatt/log + mkdir -vp /data/fatt/log chmod 770 -R /data/fatt chown tpot:tpot -R /data/fatt } @@ -176,7 +193,7 @@ fuFATT () { # Let's create a function to clean up and prepare glastopf data fuGLUTTON () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/glutton/*; fi - mkdir -p /data/glutton/log + mkdir -vp /data/glutton/{log,payloads} chmod 770 /data/glutton -R chown tpot:tpot /data/glutton -R } @@ -184,7 +201,7 @@ fuGLUTTON () { # Let's create a function to clean up and prepare hellpot data fuHELLPOT () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/hellpot/log; fi - mkdir -p /data/hellpot/log + mkdir -vp /data/hellpot/log chmod 770 /data/hellpot -R chown tpot:tpot /data/hellpot -R } @@ -192,7 +209,7 @@ fuHELLPOT () { # Let's create a function to clean up and prepare heralding data fuHERALDING () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/heralding/*; fi - mkdir -p /data/heralding/log + mkdir -vp /data/heralding/log chmod 770 /data/heralding -R chown tpot:tpot /data/heralding -R } @@ -200,7 +217,7 @@ fuHERALDING () { # Let's create a function to clean up and prepare honeypots data fuHONEYPOTS () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/honeypots/*; fi - mkdir -p /data/honeypots/log + mkdir -vp /data/honeypots/log chmod 770 /data/honeypots -R chown tpot:tpot /data/honeypots -R } @@ -208,7 +225,7 @@ fuHONEYPOTS () { # Let's create a function to clean up and prepare honeysap data fuHONEYSAP () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/honeysap/*; fi - mkdir -p /data/honeysap/log + mkdir -vp /data/honeysap/log chmod 770 /data/honeysap -R chown tpot:tpot /data/honeysap -R } @@ -216,7 +233,7 @@ fuHONEYSAP () { # Let's create a function to clean up and prepare honeytrap data fuHONEYTRAP () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/honeytrap/*; fi - mkdir -p /data/honeytrap/log/ /data/honeytrap/attacks/ /data/honeytrap/downloads/ + mkdir -vp /data/honeytrap/{log,attacks,downloads} chmod 770 /data/honeytrap/ -R chown tpot:tpot /data/honeytrap/ -R } @@ -224,7 +241,7 @@ fuHONEYTRAP () { # Let's create a function to clean up and prepare ipphoney data fuIPPHONEY () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/ipphoney/*; fi - mkdir -p /data/ipphoney/log + mkdir -vp /data/ipphoney/log chmod 770 /data/ipphoney -R chown tpot:tpot /data/ipphoney -R } @@ -232,7 +249,7 @@ fuIPPHONEY () { # Let's create a function to clean up and prepare log4pot data fuLOG4POT () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/log4pot/*; fi - mkdir -p /data/log4pot/log + mkdir -vp /data/log4pot/{log,payloads} chmod 770 /data/log4pot -R chown tpot:tpot /data/log4pot -R } @@ -240,7 +257,7 @@ fuLOG4POT () { # Let's create a function to clean up and prepare mailoney data fuMAILONEY () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/mailoney/*; fi - mkdir -p /data/mailoney/log/ + mkdir -vp /data/mailoney/log/ chmod 770 /data/mailoney/ -R chown tpot:tpot /data/mailoney/ -R } @@ -248,7 +265,7 @@ fuMAILONEY () { # Let's create a function to clean up and prepare mailoney data fuMEDPOT () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/medpot/*; fi - mkdir -p /data/medpot/log/ + mkdir -vp /data/medpot/log/ chmod 770 /data/medpot/ -R chown tpot:tpot /data/medpot/ -R } @@ -256,23 +273,17 @@ fuMEDPOT () { # Let's create a function to clean up nginx logs fuNGINX () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/nginx/log/*; fi + mkdir -vp /data/nginx/{cert,conf,log} touch /data/nginx/log/error.log - chmod 644 /data/nginx/conf -R - chmod 644 /data/nginx/cert -R -} - -# Let's create a function to clean up and prepare rdpy data -fuRDPY () { - if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/rdpy/*; fi - mkdir -p /data/rdpy/log/ - chmod 770 /data/rdpy/ -R - chown tpot:tpot /data/rdpy/ -R + chmod 774 /data/nginx/conf -R + chmod 774 /data/nginx/cert -R + chown tpot:tpot /data/nginx -R } # Let's create a function to clean up and prepare redishoneypot data fuREDISHONEYPOT () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/redishoneypot/log; fi - mkdir -p /data/redishoneypot/log + mkdir -vp /data/redishoneypot/log chmod 770 /data/redishoneypot -R chown tpot:tpot /data/redishoneypot -R } @@ -280,14 +291,14 @@ fuREDISHONEYPOT () { # Let's create a function to clean up and prepare sentrypeer data fuSENTRYPEER () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/sentrypeer/log; fi - mkdir -p /data/sentrypeer/log + mkdir -vp /data/sentrypeer/log chmod 770 /data/sentrypeer -R chown tpot:tpot /data/sentrypeer -R } # Let's create a function to prepare spiderfoot db fuSPIDERFOOT () { - mkdir -p /data/spiderfoot + mkdir -vp /data/spiderfoot touch /data/spiderfoot/spiderfoot.db chmod 770 -R /data/spiderfoot chown tpot:tpot -R /data/spiderfoot @@ -296,7 +307,7 @@ fuSPIDERFOOT () { # Let's create a function to clean up and prepare suricata data fuSURICATA () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/suricata/*; fi - mkdir -p /data/suricata/log + mkdir -vp /data/suricata/log chmod 770 -R /data/suricata chown tpot:tpot -R /data/suricata } @@ -304,7 +315,7 @@ fuSURICATA () { # Let's create a function to clean up and prepare p0f data fuP0F () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/p0f/*; fi - mkdir -p /data/p0f/log + mkdir -vp /data/p0f/log chmod 770 -R /data/p0f chown tpot:tpot -R /data/p0f } @@ -312,11 +323,19 @@ fuP0F () { # Let's create a function to clean up and prepare p0f data fuTANNER () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/tanner/*; fi - mkdir -p /data/tanner/log /data/tanner/files + mkdir -vp /data/tanner/{log,files} chmod 770 -R /data/tanner chown tpot:tpot -R /data/tanner } +# Let's create a function to clean up and prepare wordpot data +fuWORDPOT () { + if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/wordpot/log; fi + mkdir -vp /data/wordpot/log + chmod 770 /data/wordpot -R + chown tpot:tpot /data/wordpot -R +} + # Avoid unwanted cleaning if [ "$myPERSISTENCE" = "" ]; then @@ -337,36 +356,38 @@ if [ "$myPERSISTENCE" = "on" ]; then echo "Persistence enabled, now rotating and compressing logs." fuLOGROTATE - else - echo "Cleaning up and preparing data folders." - fuADBHONEY - fuCISCOASA - fuCITRIXHONEYPOT - fuCONPOT - fuCOWRIE - fuDDOSPOT - fuDICOMPOT - fuDIONAEA - fuELASTICPOT - fuELK - fuENDLESSH - fuFATT - fuGLUTTON - fuHERALDING - fuHELLPOT - fuHONEYSAP - fuHONEYPOTS - fuHONEYTRAP - fuIPPHONEY - fuLOG4POT - fuMAILONEY - fuMEDPOT - fuNGINX - fuREDISHONEYPOT - fuRDPY - fuSENTRYPEER - fuSPIDERFOOT - fuSURICATA - fuP0F - fuTANNER - fi +fi + +echo +echo "Checking and preparing data folders." +fuTPOTINIT +fuADBHONEY +fuCISCOASA +fuCITRIXHONEYPOT +fuCONPOT +fuCOWRIE +fuDDOSPOT +fuDICOMPOT +fuDIONAEA +fuELASTICPOT +fuELK +fuENDLESSH +fuFATT +fuGLUTTON +fuHERALDING +fuHELLPOT +fuHONEYSAP +fuHONEYPOTS +fuHONEYTRAP +fuIPPHONEY +fuLOG4POT +fuMAILONEY +fuMEDPOT +fuNGINX +fuREDISHONEYPOT +fuSENTRYPEER +fuSPIDERFOOT +fuSURICATA +fuP0F +fuTANNER +fuWORDPOT diff --git a/bin/change_ews_config.sh b/docker/tpotinit/dist/bin/deprecated/change_ews_config.sh similarity index 100% rename from bin/change_ews_config.sh rename to docker/tpotinit/dist/bin/deprecated/change_ews_config.sh diff --git a/bin/deploy.sh b/docker/tpotinit/dist/bin/deprecated/deploy.sh similarity index 100% rename from bin/deploy.sh rename to docker/tpotinit/dist/bin/deprecated/deploy.sh diff --git a/bin/dump_es.sh b/docker/tpotinit/dist/bin/deprecated/dump_es.sh similarity index 100% rename from bin/dump_es.sh rename to docker/tpotinit/dist/bin/deprecated/dump_es.sh diff --git a/bin/deprecated/export_kibana-objects.sh b/docker/tpotinit/dist/bin/deprecated/export_kibana-objects.sh similarity index 100% rename from bin/deprecated/export_kibana-objects.sh rename to docker/tpotinit/dist/bin/deprecated/export_kibana-objects.sh diff --git a/bin/hpfeeds_optin.sh b/docker/tpotinit/dist/bin/deprecated/hpfeeds_optin.sh similarity index 100% rename from bin/hpfeeds_optin.sh rename to docker/tpotinit/dist/bin/deprecated/hpfeeds_optin.sh diff --git a/bin/deprecated/hptest.sh b/docker/tpotinit/dist/bin/deprecated/hptest.sh similarity index 100% rename from bin/deprecated/hptest.sh rename to docker/tpotinit/dist/bin/deprecated/hptest.sh diff --git a/bin/deprecated/import_kibana-objects.sh b/docker/tpotinit/dist/bin/deprecated/import_kibana-objects.sh similarity index 100% rename from bin/deprecated/import_kibana-objects.sh rename to docker/tpotinit/dist/bin/deprecated/import_kibana-objects.sh diff --git a/bin/restore_es.sh b/docker/tpotinit/dist/bin/deprecated/restore_es.sh similarity index 100% rename from bin/restore_es.sh rename to docker/tpotinit/dist/bin/deprecated/restore_es.sh diff --git a/bin/unlock_es.sh b/docker/tpotinit/dist/bin/deprecated/unlock_es.sh similarity index 100% rename from bin/unlock_es.sh rename to docker/tpotinit/dist/bin/deprecated/unlock_es.sh diff --git a/docker/tpotinit/dist/bin/genuser.sh b/docker/tpotinit/dist/bin/genuser.sh new file mode 100755 index 00000000..ed392f70 --- /dev/null +++ b/docker/tpotinit/dist/bin/genuser.sh @@ -0,0 +1,115 @@ +#!/usr/bin/env bash +myTPOT_CONF_FILE=/data/.env + +# Read WEB_USER from file +WEB_USER=$(grep "^WEB_USER=" "${myTPOT_CONF_FILE}" | sed 's/^WEB_USER=//g' | tr -d "\"'") + +myPW=$(cat << "EOF" +__ __ _ _ _ [ T-Pot ] +\ \ / /__| |__ | | | |___ ___ _ __ + \ \ /\ / / _ \ '_ \| | | / __|/ _ \ '__| + \ V V / __/ |_) | |_| \__ \ __/ | + \_/\_/ \___|_.__/ \___/|___/\___|_| +EOF +) + +# Generate T-Pot WebUser +echo "$myPW" +echo +echo "### This script will ask for and create T-Pot web users." +echo + +# Preparing web user for T-Pot +echo +echo "### T-Pot User Configuration ..." +echo +# Asking for web user name +myWEB_USER="" +while [ 1 != 2 ]; + do + myOK="" + read -rp "### Enter your web user name: " myWEB_USER + myWEB_USER=$(echo $myWEB_USER | tr -cd "[:alnum:]_.-") + echo "### Your username is: ${myWEB_USER}" + while [[ ! "${myOK}" =~ [YyNn] ]]; + do + read -rp "### Is this correct? (y/n) " myOK + done + if [[ "${myOK}" =~ [Yy] ]] && [ "$myWEB_USER" != "" ]; + then + break + else + echo + fi + done + +# Asking for web user password +myWEB_PW="pass1" +myWEB_PW2="pass2" +mySECURE=0 +myOK="" +while [ "${myWEB_PW}" != "${myWEB_PW2}" ] && [ "${mySECURE}" == "0" ] + do + echo + while [ "${myWEB_PW}" == "pass1" ] || [ "${myWEB_PW}" == "" ] + do + read -rsp "### Enter password for your web user: " myWEB_PW + echo + done + read -rsp "### Repeat password you your web user: " myWEB_PW2 + echo + if [ "${myWEB_PW}" != "${myWEB_PW2}" ]; + then + echo "### Passwords do not match." + myWEB_PW="pass1" + myWEB_PW2="pass2" + fi + mySECURE=$(printf "%s" "$myWEB_PW" | /usr/sbin/cracklib-check | grep -c "OK") + if [ "$mySECURE" == "0" ] && [ "$myWEB_PW" == "$myWEB_PW2" ]; + then + while [[ ! "${myOK}" =~ [YyNn] ]]; + do + read -rp "### Keep insecure password? (y/n) " myOK + done + if [[ "${myOK}" =~ [Nn] ]] || [ "$myWEB_PW" == "" ]; + then + myWEB_PW="pass1" + myWEB_PW2="pass2" + mySECURE=0 + myOK="" + fi + fi +done + +# Write username and password to T-Pot config file +echo "### Creating base64 encoded htpasswd username and password for T-Pot config file: ${myTPOT_CONF_FILE}" +myWEB_USER_ENC=$(htpasswd -b -n "${myWEB_USER}" "${myWEB_PW}") +myWEB_USER_ENC_B64=$(echo -n "${myWEB_USER_ENC}" | base64 -w0) + +# Add the new web user +if [ "${WEB_USER}" == "" ]; + then + WEB_USER="${myWEB_USER_ENC_B64}" + else + WEB_USER="${WEB_USER} ${myWEB_USER_ENC_B64}" +fi +sed -i "s|^WEB_USER=.*|WEB_USER=${WEB_USER}|" ${myTPOT_CONF_FILE} + +# Done +echo +echo "### The following users are now configured in the .env:" +echo +for i in ${WEB_USER}; + do + if [[ -n $i ]]; + then + # Need to control newlines as they kept coming up for some reason + echo -n "$i" | base64 -d -w0 | tr -d '\n'; echo -n " => [$i]"; + echo + fi + done +echo +echo "### You can remove them by opening the .env and adjust the WEB_USER entry." +echo +echo "### Done." +echo diff --git a/bin/hptest.sh b/docker/tpotinit/dist/bin/hptest.sh similarity index 100% rename from bin/hptest.sh rename to docker/tpotinit/dist/bin/hptest.sh diff --git a/bin/myip.sh b/docker/tpotinit/dist/bin/myip.sh similarity index 100% rename from bin/myip.sh rename to docker/tpotinit/dist/bin/myip.sh diff --git a/bin/mytopips.sh b/docker/tpotinit/dist/bin/mytopips.sh similarity index 87% rename from bin/mytopips.sh rename to docker/tpotinit/dist/bin/mytopips.sh index e343ff02..7453a7d4 100755 --- a/bin/mytopips.sh +++ b/docker/tpotinit/dist/bin/mytopips.sh @@ -4,7 +4,7 @@ myES="http://127.0.0.1:64298/" myESSTATUS=$(curl -s -XGET ''$myES'_cluster/health' | jq '.' | grep -c green) if ! [ "$myESSTATUS" = "1" ] then - echo "### Elasticsearch is not available, try starting via 'systemctl start elk'." + echo "### Elasticsearch is not available." exit 1 else echo "### Elasticsearch is available, now continuing." diff --git a/bin/rules.sh b/docker/tpotinit/dist/bin/rules.sh similarity index 62% rename from bin/rules.sh rename to docker/tpotinit/dist/bin/rules.sh index c4a964da..1ffb2145 100755 --- a/bin/rules.sh +++ b/docker/tpotinit/dist/bin/rules.sh @@ -1,7 +1,7 @@ #!/bin/bash ### Vars, Ports for Standard services -myHOSTPORTS="7634 64294 64295 64297 64304" +myHOSTPORTS="7634 64294 64295" myDOCKERCOMPOSEYML="$1" myRULESFUNCTION="$2" @@ -33,7 +33,7 @@ fi function fuGETPORTS { ### Get ports from docker-compose.yml -myDOCKERCOMPOSEPORTS=$(cat $myDOCKERCOMPOSEYML | yq -r '.services[].ports' | grep ':' | sed -e s/127.0.0.1// | tr -d '", ' | sed -e s/^:// | cut -f1 -d ':' ) +myDOCKERCOMPOSEPORTS=$(cat $myDOCKERCOMPOSEYML | yq -r '.services[].ports' | grep ':' | sed -e s/127.0.0.1// | tr -d '", ,#,-' | sed -e s/^:// | cut -f1 -d ':' ) myDOCKERCOMPOSEPORTS+=" $myHOSTPORTS" myRULESPORTS=$(for i in $myDOCKERCOMPOSEPORTS; do echo $i; done | sort -gu) echo "Setting up / removing these ports:" @@ -44,24 +44,24 @@ function fuSETRULES { ### Setting up iptables-legacy rules for honeytrap if [ "$myNFQCHECK" == "honeytrap" ]; then - /usr/sbin/iptables-legacy -w -A INPUT -s 127.0.0.1 -j ACCEPT - /usr/sbin/iptables-legacy -w -A INPUT -d 127.0.0.1 -j ACCEPT + iptables -w -A INPUT -s 127.0.0.1 -j ACCEPT + iptables -w -A INPUT -d 127.0.0.1 -j ACCEPT for myPORT in $myRULESPORTS; do - /usr/sbin/iptables-legacy -w -A INPUT -p tcp --dport $myPORT -j ACCEPT + iptables -w -A INPUT -p tcp --dport $myPORT -j ACCEPT done - /usr/sbin/iptables-legacy -w -A INPUT -p tcp --syn -m state --state NEW -j NFQUEUE + iptables -w -A INPUT -p tcp --syn -m state --state NEW -j NFQUEUE fi ### Setting up iptables-legacy rules for glutton if [ "$myNFQCHECK" == "glutton" ]; then - /usr/sbin/iptables-legacy -w -t raw -A PREROUTING -s 127.0.0.1 -j ACCEPT - /usr/sbin/iptables-legacy -w -t raw -A PREROUTING -d 127.0.0.1 -j ACCEPT + iptables -w -t mangle -A PREROUTING -s 127.0.0.1 -j ACCEPT + iptables -w -t mangle -A PREROUTING -d 127.0.0.1 -j ACCEPT for myPORT in $myRULESPORTS; do - /usr/sbin/iptables-legacy -w -t raw -A PREROUTING -p tcp --dport $myPORT -j ACCEPT + iptables -w -t mangle -A PREROUTING -p tcp --dport $myPORT -j ACCEPT done # No need for NFQ forwarding, such rules are set up by glutton fi @@ -71,24 +71,24 @@ function fuUNSETRULES { ### Removing iptables-legacy rules for honeytrap if [ "$myNFQCHECK" == "honeytrap" ]; then - /usr/sbin/iptables-legacy -w -D INPUT -s 127.0.0.1 -j ACCEPT - /usr/sbin/iptables-legacy -w -D INPUT -d 127.0.0.1 -j ACCEPT + iptables -w -D INPUT -s 127.0.0.1 -j ACCEPT + iptables -w -D INPUT -d 127.0.0.1 -j ACCEPT for myPORT in $myRULESPORTS; do - /usr/sbin/iptables-legacy -w -D INPUT -p tcp --dport $myPORT -j ACCEPT + iptables -w -D INPUT -p tcp --dport $myPORT -j ACCEPT done - /usr/sbin/iptables-legacy -w -D INPUT -p tcp --syn -m state --state NEW -j NFQUEUE + iptables -w -D INPUT -p tcp --syn -m state --state NEW -j NFQUEUE fi ### Removing iptables-legacy rules for glutton if [ "$myNFQCHECK" == "glutton" ]; then - /usr/sbin/iptables-legacy -w -t raw -D PREROUTING -s 127.0.0.1 -j ACCEPT - /usr/sbin/iptables-legacy -w -t raw -D PREROUTING -d 127.0.0.1 -j ACCEPT + iptables -w -t mangle -D PREROUTING -s 127.0.0.1 -j ACCEPT + iptables -w -t mangle -D PREROUTING -d 127.0.0.1 -j ACCEPT for myPORT in $myRULESPORTS; do - /usr/sbin/iptables-legacy -w -t raw -D PREROUTING -p tcp --dport $myPORT -j ACCEPT + iptables -w -t mangle -D PREROUTING -p tcp --dport $myPORT -j ACCEPT done # No need for removing NFQ forwarding, such rules are removed by glutton fi diff --git a/docker/tpotinit/dist/bin/updateip.sh b/docker/tpotinit/dist/bin/updateip.sh new file mode 100755 index 00000000..4e7035d3 --- /dev/null +++ b/docker/tpotinit/dist/bin/updateip.sh @@ -0,0 +1,49 @@ +#!/bin/bash +# Let's add the first local ip to the /tmp/etc/issue and external ip to ews.ip file +# If the external IP cannot be detected, the internal IP will be inherited. +myUUID=$(cat /data/uuid) +myLOCALIP=$(ip address show | awk '/inet .*brd/{split($2,a,"/"); print a[1]; exit}') +myEXTIP=$(/opt/tpot/bin/myip.sh) +if [ "$myEXTIP" = "" ]; + then + myEXTIP=$myLOCALIP +fi + +myBLACKHOLE_STATUS=$(ip r | grep "blackhole" -c) +if [ "$myBLACKHOLE_STATUS" -gt "500" ]; + then + myBLACKHOLE_STATUS="| BLACKHOLE: [ ENABLED ]" + else + myBLACKHOLE_STATUS="| BLACKHOLE: [ DISABLED ]" +fi + +# Build issue +echo "" > /tmp/etc/issue +echo "T-Pot 23.12" >> /tmp/etc/issue +echo >> /tmp/etc/issue +echo ",---- [ \n ] [ \d ] [ \t ]" >> /tmp/etc/issue +echo "|" >> /tmp/etc/issue +echo "| IP: $myLOCALIP ($myEXTIP)" >> /tmp/etc/issue +echo "| SSH: ssh -l tsec -p 64295 $myLOCALIP" >> /tmp/etc/issue +#if [ "$myCHECKIFSENSOR" == "0" ]; +# then +echo "| WEB: https://$myLOCALIP:64297" >> /tmp/etc/issue +#fi +echo "| ADMIN: https://$myLOCALIP:64294" >> /tmp/etc/issue +echo "$myBLACKHOLE_STATUS" >> /tmp/etc/issue +echo "|" >> /tmp/etc/issue +echo "\`----" >> /tmp/etc/issue +echo >> /tmp/etc/issue +tee /data/ews/conf/ews.ip << EOF +[MAIN] +ip = $myEXTIP +EOF +tee /data/tpot/etc/compose/elk_environment << EOF +HONEY_UUID=$myUUID +MY_EXTIP=$myEXTIP +MY_INTIP=$myLOCALIP +MY_HOSTNAME=$HOSTNAME +EOF + +chown tpot:tpot /data/ews/conf/ews.ip +chmod 770 /data/ews/conf/ews.ip diff --git a/docker/tpotinit/dist/entrypoint.sh b/docker/tpotinit/dist/entrypoint.sh new file mode 100755 index 00000000..d765e317 --- /dev/null +++ b/docker/tpotinit/dist/entrypoint.sh @@ -0,0 +1,354 @@ +#!/usr/bin/env bash + +COMPOSE="/tmp/tpot/docker-compose.yml" +exec > >(tee /data/tpotinit.log) 2>&1 + +# Function to handle SIGTERM +cleanup() { + echo "# SIGTERM received, cleaning up ..." + echo + echo "## ... removing firewall rules." + /opt/tpot/bin/rules.sh ${COMPOSE} unset + echo + if [ "${TPOT_BLACKHOLE}" == "ENABLED" ] && [ -f "/etc/blackhole/mass_scanner.txt" ]; + then + echo "## ... removing Blackhole routes." + /opt/tpot/bin/blackhole.sh del + echo + fi + kill -TERM "$PID" + rm -f /tmp/success + echo "# Cleanup done." + echo +} +trap cleanup SIGTERM + +# Function to check if a variable is set, not empty +check_var() { + local var_name="$1" + local var_value=$(eval echo \$$var_name) + + # Check if variable is set and not empty + if [[ -z "$var_value" ]]; + then + echo "# Error: $var_name is not set or empty. Please check T-Pot .env config." + echo + echo "# Aborting" + exit 1 + fi +} + +# Function to check for potentially unsafe characters in most variables +check_safety() { + local var_name="$1" + local var_value=$(eval echo \$$var_name) + + # General safety check for most variables + if [[ $var_value =~ [^a-zA-Z0-9_/.:-] ]]; + then + echo "# Error: Unsafe characters detected in $var_name. Please check T-Pot .env config." + echo + echo "# Aborting" + exit 1 + fi +} + +validate_base64() { + local myCHECK=$1 + # base64 pattern match + for i in ${myCHECK}; + do + if [[ $i =~ ^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$ ]]; + then + echo -n "Found valid user: " + echo $i | base64 -d -w0 | cut -f1 -d":" + else + echo "$i is not a valid base64 string. Please check T-Pot .env config." + echo + echo "# Aborting" + exit 1 + fi + done +} + +# Function to validate specific variable formats +validate_format() { + local var_name="$1" + local var_value=$(eval echo \$$var_name) + + case "$var_name" in + TPOT_BLACKHOLE|TPOT_PERSISTENCE|TPOT_ATTACKMAP_TEXT) + if ! [[ $var_value =~ ^(ENABLED|DISABLED|on|off|true|false)$ ]]; + then + echo "# Error: Invalid value for $var_name. Expected ENABLED/DISABLED, on/off, true/false. Please check T-Pot .env config." + echo + echo "# Aborting" + exit 1 + fi + ;; + esac +} + +validate_ip_or_domain() { + local myCHECK=$1 + + # Regular expression for validating IPv4 addresses + local ipv4Regex='^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$' + + # Regular expression for validating domain names (including subdomains) + local domainRegex='^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$' + + # Check if TPOT_HIVE_IP matches IPv4 or domain name + if [[ ${myCHECK} =~ $ipv4Regex ]]; then + echo "${myCHECK} is a valid IPv4 address." + elif [[ ${myCHECK} =~ $domainRegex ]]; then + echo "${myCHECK} is a valid domain name." + else + echo "# Error: $myCHECK is not a valid IPv4 address or domain name. Please check T-Pot .env config." + echo + echo "# Aborting" + exit 1 + fi +} + +create_web_users() { + echo + echo "# Creating passwd files based on T-Pot .env config ..." + # Clear / create the passwd files + : > /data/nginx/conf/nginxpasswd + : > /data/nginx/conf/lswebpasswd + for i in ${WEB_USER}; + do + if [[ -n $i ]]; + then + # Need to control newlines as they kept coming up for some reason + echo -n "$i" | base64 -d -w0 | tr -d '\n' >> /data/nginx/conf/nginxpasswd + echo >> /data/nginx/conf/nginxpasswd + fi + done + + for i in ${LS_WEB_USER}; + do + if [[ -n $i ]]; + then + # Need to control newlines as they kept coming up for some reason + echo -n "$i" | base64 -d -w0 | tr -d '\n' >> /data/nginx/conf/lswebpasswd + echo >> /data/nginx/conf/lswebpasswd + fi + done +} + +update_permissions() { + echo + echo "# Updating permissions ..." + echo + chown -R tpot:tpot /data + chmod -R 770 /data + chmod 774 -R /data/nginx/conf + chmod 774 -R /data/nginx/cert +} + +# Update permissions +update_permissions + +# Check for compatible OSType +echo +echo "# Checking if OSType is compatible." +echo +myOSTYPE=$(uname -a | grep -Eo "linuxkit") +if [ "${myOSTYPE}" == "linuxkit" ] && [ "${TPOT_OSTYPE}" == "linux" ]; + then + echo "# Docker Desktop for macOS or Windows detected." + echo "# 1. You need to adjust the OSType the T-Pot .env config." + echo "# 2. You need to use the macos or win docker compose file." + echo + echo "# Aborting." + echo + exit 1 + else + if ! [ -S /var/run/docker.sock ]; + then + echo "# Cannot access /var/run/docker.sock, check docker-compose.yml for proper volume definition." + echo + echo "# Aborting." + exit 1 + fi +fi + +# Validate environment variables +for var in TPOT_BLACKHOLE TPOT_PERSISTENCE TPOT_ATTACKMAP_TEXT TPOT_ATTACKMAP_TEXT_TIMEZONE TPOT_REPO TPOT_VERSION TPOT_PULL_POLICY TPOT_OSTYPE; + do + check_var "$var" + check_safety "$var" + validate_format "$var" +done + +if [ "${TPOT_TYPE}" == "HIVE" ]; + then + # No $ for check_var + check_var "WEB_USER" + validate_base64 "${WEB_USER}" + TPOT_HIVE_USER="" + TPOT_HIVE_IP="" + if [ "${LS_WEB_USER}" == "" ]; + then + echo "# Warning: No LS_WEB_USER detected! T-Pots of type SENSOR will not be able to submit logs to this HIVE." + echo + else + validate_base64 "${LS_WEB_USER}" + fi +fi +if [ "${TPOT_TYPE}" == "SENSOR" ]; + then + # No $ for check_var + check_var "TPOT_HIVE_USER" + check_var "TPOT_HIVE_IP" + validate_base64 "$TPOT_HIVE_USER" + validate_ip_or_domain "$TPOT_HIVE_IP" + WEB_USER="" +fi +echo + +echo +echo "# All settings seem to be valid." +echo + +# Data folder management +if [ -f "/data/uuid" ]; + then + figlet "Initializing ..." + figlet "T-Pot: ${TPOT_VERSION}" + create_web_users + echo + echo "# Data folder is present, just cleaning up, please be patient ..." + echo + /opt/tpot/bin/clean.sh "${TPOT_PERSISTENCE}" + echo + else + figlet "Setting up ..." + figlet "T-Pot: ${TPOT_VERSION}" + echo + echo "# Setting up data folder structure ..." + echo + /opt/tpot/bin/clean.sh off + echo + echo "# Generating self signed certificate ..." + echo + myINTIP=$(/sbin/ip address show | awk '/inet .*brd/{split($2,a,"/"); print a[1]; exit}') + openssl req \ + -nodes \ + -x509 \ + -sha512 \ + -newkey rsa:8192 \ + -keyout "/data/nginx/cert/nginx.key" \ + -out "/data/nginx/cert/nginx.crt" \ + -days 3650 \ + -subj '/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd' \ + -addext "subjectAltName = IP:${myINTIP}" + echo + create_web_users + echo + echo "# Extracting objects, final touches and permissions ..." + echo + tar xvfz /opt/tpot/etc/objects/elkbase.tgz -C / + uuidgen > /data/uuid +fi + +# Check if TPOT_BLACKHOLE is enabled +if [ "${myOSTYPE}" == "linuxkit" ]; + then + echo + echo "# Docker Desktop for macOS or Windows detected, Blackhole feature is not supported." + echo + else + if [ "${TPOT_BLACKHOLE}" == "ENABLED" ] && [ ! -f "/etc/blackhole/mass_scanner.txt" ]; + then + echo + echo "# Adding Blackhole routes." + /opt/tpot/bin/blackhole.sh add + echo + fi + if [ "${TPOT_BLACKHOLE}" == "DISABLED" ] && [ -f "/etc/blackhole/mass_scanner.txt" ]; + then + echo + echo "# Removing Blackhole routes." + /opt/tpot/bin/blackhole.sh del + echo + else + echo + echo "# Blackhole is not active." + fi +fi + +# Get IP +echo +echo "# Updating IP Info ..." +echo +/opt/tpot/bin/updateip.sh + +# Update permissions +update_permissions + +# Update interface settings (p0f and Suricata) and setup iptables to support NFQ based honeypots (glutton, honeytrap) +### This is currently not supported on Docker for Desktop, only on Docker Engine for Linux +if [ "${myOSTYPE}" != "linuxkit" ] && [ "${TPOT_OSTYPE}" == "linux" ]; + then + echo + echo "# Get IF, disable offloading, enable promiscious mode for p0f and suricata ..." + echo + ethtool --offload $(/sbin/ip address | grep "^2: " | awk '{ print $2 }' | tr -d [:punct:]) rx off tx off + ethtool -K $(/sbin/ip address | grep "^2: " | awk '{ print $2 }' | tr -d [:punct:]) gso off gro off + ip link set $(/sbin/ip address | grep "^2: " | awk '{ print $2 }' | tr -d [:punct:]) promisc on + echo + echo "# Adding firewall rules ..." + echo + /opt/tpot/bin/rules.sh ${COMPOSE} set +fi + +# Display open ports +if [ "${myOSTYPE}" != "linuxkit" ]; + then + echo + echo "# This is a list of open ports on the host (netstat -tulpen)." + echo "# Make sure there are no conflicting ports by checking the docker compose file." + echo "# Conflicting ports will prevent the startup of T-Pot." + echo + netstat -tulpen | grep -Eo ':([0-9]+)' | cut -d ":" -f 2 | uniq + echo + else + echo + echo "# Docker Desktop for macOS or Windows detected, cannot show open ports on the host." + echo +fi + + +# Done +echo +figlet "Starting ..." +figlet "T-Pot: ${TPOT_VERSION}" +echo +touch /tmp/success + +# We want to see true source for UDP packets in container (https://github.com/moby/libnetwork/issues/1994) +# Start autoheal if running on a supported os +if [ "${myOSTYPE}" != "linuxkit" ]; + then + sleep 60 + echo "# Dropping UDP connection tables to improve visibility of true source IPs." + /usr/sbin/conntrack -D -p udp + # Starting container health monitoring + echo + figlet "Starting ..." + figlet "Autoheal" + echo "# Now monitoring healthcheck enabled containers to automatically restart them when unhealthy." + echo + # exec /opt/tpot/autoheal.sh autoheal + /opt/tpot/autoheal.sh autoheal & + PID=$! + wait $PID + echo "# T-Pot Init and Autoheal were stopped. Exiting." + else + echo + echo "# Docker Desktop for macOS or Windows detected, Conntrack feature is not supported." + echo +fi diff --git a/etc/logrotate/logrotate.conf b/docker/tpotinit/dist/etc/logrotate/logrotate.conf similarity index 98% rename from etc/logrotate/logrotate.conf rename to docker/tpotinit/dist/etc/logrotate/logrotate.conf index 07223601..90178dbe 100644 --- a/etc/logrotate/logrotate.conf +++ b/docker/tpotinit/dist/etc/logrotate/logrotate.conf @@ -33,12 +33,12 @@ /data/medpot/log/*.log /data/nginx/log/*.log /data/p0f/log/p0f.json -/data/rdpy/log/rdpy.log /data/redishoneypot/log/*.log /data/sentrypeer/log/*.json /data/suricata/log/*.log /data/suricata/log/*.json /data/tanner/log/*.json +/data/wordpot/log/*.log { su tpot tpot copytruncate diff --git a/docker/tpotinit/dist/etc/objects/elkbase.tgz b/docker/tpotinit/dist/etc/objects/elkbase.tgz new file mode 100644 index 00000000..002c28b5 Binary files /dev/null and b/docker/tpotinit/dist/etc/objects/elkbase.tgz differ diff --git a/docker/tpotinit/dist/etc/objects/kibana_export.ndjson.zip b/docker/tpotinit/dist/etc/objects/kibana_export.ndjson.zip new file mode 100644 index 00000000..b939639b Binary files /dev/null and b/docker/tpotinit/dist/etc/objects/kibana_export.ndjson.zip differ diff --git a/docker/tpotinit/docker-compose.yml b/docker/tpotinit/docker-compose.yml new file mode 100644 index 00000000..e5e43ab7 --- /dev/null +++ b/docker/tpotinit/docker-compose.yml @@ -0,0 +1,19 @@ +version: '3.9' + +services: + +# T-Pot Init Service + tpotinit: + build: . + container_name: tpotinit + env_file: + - $HOME/tpotce/.env + restart: "no" + stop_grace_period: 60s + image: "dtagdevsec/tpotinit:24.04" + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - $HOME/tpotce/data:/data + network_mode: "host" + cap_add: + - NET_ADMIN diff --git a/preview/docker/macvlan/docker-compose.yml b/docker/tpotinit/macvlan/docker-compose.yml similarity index 100% rename from preview/docker/macvlan/docker-compose.yml rename to docker/tpotinit/macvlan/docker-compose.yml diff --git a/docker/wordpot/Dockerfile b/docker/wordpot/Dockerfile index e31b4668..9b862f67 100644 --- a/docker/wordpot/Dockerfile +++ b/docker/wordpot/Dockerfile @@ -1,47 +1,48 @@ -FROM alpine:3.17 +FROM alpine:3.19 # # Include dist COPY dist/ /root/dist/ # # Install packages RUN apk -U --no-cache add \ - build-base \ - git \ - libcap \ - py3-click \ - py3-flask \ - py3-itsdangerous \ - py3-jinja2 \ - py3-markupsafe \ - py3-pip \ - py3-werkzeug \ - python3 \ - python3-dev && \ + build-base \ + git \ + libcap \ + py3-click \ + py3-flask \ + py3-itsdangerous \ + py3-jinja2 \ + py3-markupsafe \ + py3-pip \ + py3-ua-parser \ + py3-werkzeug \ + py3-yaml \ + python3 \ + python3-dev && \ # # Install wordpot from GitHub and setup mkdir -p /opt && \ cd /opt/ && \ - git clone https://github.com/Will-777/wordpot2 && \ - cd wordpot2 && \ - git checkout e93a2e00d84d280b0acd58ba6889b4bee8a6e4d2 && \ -# cp /root/dist/views.py /opt/wordpot2/wordpot/views.py && \ + git clone https://github.com/t3chn0m4g3/wordpot && \ + cd wordpot && \ + git checkout 8fedeb1b74e1d225da2a7273656bf0afa84a20aa && \ cp /root/dist/requirements.txt . && \ - pip3 install -r requirements.txt && \ - setcap cap_net_bind_service=+ep /usr/bin/python3.10 && \ + pip3 install --break-system-packages -r requirements.txt && \ + setcap cap_net_bind_service=+ep $(readlink -f $(type -P python3)) && \ # # Setup user, groups and configs addgroup -g 2000 wordpot && \ adduser -S -H -s /bin/ash -u 2000 -D -g 2000 wordpot && \ - chown wordpot:wordpot -R /opt/wordpot2 && \ + chown wordpot:wordpot -R /opt/wordpot && \ # # Clean up apk del --purge build-base \ - git \ - python3-dev && \ - rm -rf /root/* /var/cache/apk/* /opt/wordpot2/.git + git \ + python3-dev && \ + rm -rf /root/* /var/cache/apk/* /opt/wordpot/.git # # Start wordpot STOPSIGNAL SIGINT USER wordpot:wordpot -WORKDIR /opt/wordpot2 -CMD ["/usr/bin/python3","wordpot2.py", "--host", "0.0.0.0", "--port", "80", "--title", "Wordpress"] +WORKDIR /opt/wordpot +CMD ["/usr/bin/python3","wordpot.py", "--host", "0.0.0.0", "--port", "80", "--title", "Wordpress"] diff --git a/docker/wordpot/dist/requirements.txt b/docker/wordpot/dist/requirements.txt index b2378c53..e7c70da7 100644 --- a/docker/wordpot/dist/requirements.txt +++ b/docker/wordpot/dist/requirements.txt @@ -1 +1,2 @@ hpfeeds-threatstream==1.1 +user-agents diff --git a/docker/wordpot/docker-compose.yml b/docker/wordpot/docker-compose.yml index fc16d0a0..405f4a85 100644 --- a/docker/wordpot/docker-compose.yml +++ b/docker/wordpot/docker-compose.yml @@ -16,7 +16,7 @@ services: - wordpot_local ports: - "80:80" - image: "dtagdevsec/wordpot:2204" - # read_only: true - # volumes: - # - /data/wordpot/log:/opt/ddospot/ddospot/db + image: "dtagdevsec/wordpot:24.04" + read_only: true + volumes: + - $HOME/tpotce/data/wordpot/log:/opt/wordpot/logs/ diff --git a/env.example b/env.example new file mode 100644 index 00000000..56106905 --- /dev/null +++ b/env.example @@ -0,0 +1,125 @@ +# T-Pot config file. Do not remove. + +############################################### +# T-Pot Base Settings - Adjust to your needs. # +############################################### + +# Set Web usernames and passwords here. This section will be used to create / update the Nginx password file nginxpasswd. +# : This is the default +# : +# Use 'htpasswd -n -b "username" "password" | base64 -w0' to create the WEB_USER if you want to manually deploy T-Pot, run 'install.sh' to automatically add a user during installation, or 'genuser.sh' if you just want to add a web user. +# Example: 'htpasswd -n -b "tsec" "tsec" | base64 -w0' will print dHNlYzokYXByMSRYUnE2SC5rbiRVRjZQM1VVQmJVNWJUQmNmSGRuUFQxCgo= +# Copy the string and replace WEB_USER=dHNlYzokYXByMSRYUnE2SC5rbiRVRjZQM1VVQmJVNWJUQmNmSGRuUFQxCgo= +# Multiple users are possible: +# WEB_USER=dHNlYzokYXByMSRYUnE2SC5rbiRVRjZQM1VVQmJVNWJUQmNmSGRuUFQxCgo= dHNlYzokYXByMSR6VUFHVWdmOCRROXI3a09CTjFjY3lCeU1DTloyanEvCgo= +WEB_USER= + +# Set Logstash Web usernames and passwords here. This section will be used to create / update the Nginx password file lswebpasswd. +# The Lostsash Web usernames are used for T-Pot log ingestion via Logstash, each sensor should have its own user. +# : This is empty by default. +# <'htpasswd encoded usernames / passwords'>: +# Use 'htpasswd -n -b "username" "password" | base64 -w0' to create the LS_WEB_USER if you want to manually deploy the sensor. +# Example: 'htpasswd -n -b "sensor" "sensor" | base64 -w0' will print c2Vuc29yOiRhcHIxJGVpMHdzUmdYJHNyWHF4UG53ZzZqWUc3aEFaUWxrWDEKCg== +# Copy the string and replace / add LS_WEB_USER=c2Vuc29yOiRhcHIxJGVpMHdzUmdYJHNyWHF4UG53ZzZqWUc3aEFaUWxrWDEKCg== +# Multiple users are possible: +# LS_WEB_USER=c2Vuc29yMTokYXByMSQ5aXhNRk5yMCR6d3F2dGFwQ2x0cFBhU1pqMm9ZemYxCgo= c2Vuc29yMjokYXByMSRtYTlOS1J2NCQvU3dsVVBMeW5RaVIyM3pyWVAzOUkwCgo= +LS_WEB_USER= + +# T-Pot Blackhole +# ENABLED: T-Pot will download a db of known mass scanners and nullroute them. +# Be aware, this will put T-Pot off the map for stealth reasons and +# you will get less traffic. Routes will be active until next reboot +# and will be re-added with every T-Pot start until disabled. +# DISABLED: This is the default and no stealth efforts are in place. +TPOT_BLACKHOLE=DISABLED + +# T-Pot Persistence +# on: This is the default. T-Pot will keep the honeypot logfiles and rotate +# with logrotate for 30 days. +# off: This is recommended for Raspberry Pi or setups with weaker CPUs or +# if you just do not need any of the logfiles. +TPOT_PERSISTENCE=on + +# T-Pot Type +# HIVE: This is the default and offers everything to connect T-Pot sensors. +# SENSOR: This needs to be used when running a sensor. Be aware to adjust all other +# settings as well. +# 1. You will need to copy compose/sensor.yml to ./docker-comopose.yml +# 2. From HIVE host you will need to copy ~/tpotce/data/nginx/cert/nginx.crt to +# your SENSOR host to ~/tpotce/data/hive.crt +# 3. On HIVE: Create a web user per SENSOR on HIVE and provide credentials below +# Create credentials with 'htpasswd ~/tpotce/data/nginx/conf/lswebpasswd ' +# 4. On SENSOR: Provide username / password from (3) for TPOT_HIVE_USER as base64 encoded string: +# "echo -n 'username:password' | base64 -w0" +TPOT_TYPE=HIVE + +# T-Pot Hive User (only relevant for SENSOR deployment) +# : This is empty by default. +# : Provide a base64 encoded string "echo -n 'username:password' | base64 -w0" +# i.e. TPOT_HIVE_USER='dXNlcm5hbWU6cGFzc3dvcmQ=' +TPOT_HIVE_USER= + +# T-Pot Hive IP (only relevant for SENSOR deployment) +# : This is empty by default. +# : This can be either a IP (i.e. 192.168.1.1) or a FQDN (i.e. foo.bar.local) +TPOT_HIVE_IP= + +# T-Pot AttackMap Text Output +# ENABLED: This is the default and the docker container map_data will print events to the console. +# DISABLED: Printing events to the console is disabled. +TPOT_ATTACKMAP_TEXT=ENABLED + +# T-Pot AttackMap Text Output Timezone +# UTC: (T-Pot default) This is usually the best option. +# Continent/City: In Linux you can check our timezone with `readlink` /etc/localtime or +# see the full list here: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones +# Examples: America/New_York, Asia/Taipei, Australia/Melbourne, Europe/Athens, Europe/Berlin +TPOT_ATTACKMAP_TEXT_TIMEZONE=UTC + +################################################################################### +# Honeypots / Tools settings +################################################################################### +# Some services / tools offer adjustments using ENVs which can be adjusted here. +################################################################################### + +# Suricata ET Pro ruleset +# OPEN: This is the default and will the ET Open ruleset +# OINKCODE: Replace OPEN with your Oinkcode to use the ET Pro ruleset +OINKCODE=OPEN + + +################################################################################### +# NEVER MAKE CHANGES TO THIS SECTION UNLESS YOU REALLY KNOW WHAT YOU ARE DOING!!! # +################################################################################### + +# docker.sock Path +TPOT_DOCKER_SOCK=/var/run/docker.sock + +# docker compose .env +TPOT_DOCKER_ENV=./.env + +# Docker-Compose file +TPOT_DOCKER_COMPOSE=./docker-compose.yml + +# T-Pot Docker Repo +# Depending on where you are located you may choose between DockerHub and GHCR +# dtagdevsec: This will use the DockerHub image registry +# ghcr.io/telekom-security: This will use the GitHub container registry +TPOT_REPO=dtagdevsec + +# T-Pot Version Tag +TPOT_VERSION=24.04 + +# T-Pot Pull Policy +# always: (T-Pot default) Compose implementations SHOULD always pull the image from the registry. +# never: Compose implementations SHOULD NOT pull the image from a registry and SHOULD rely on the platform cached image. +# missing: Compose implementations SHOULD pull the image only if it's not available in the platform cache. +# build: Compose implementations SHOULD build the image. Compose implementations SHOULD rebuild the image if already present. +TPOT_PULL_POLICY=always + +# T-Pot Data Path +TPOT_DATA_PATH=./data + +# OSType (linux, mac, win) +# Most docker features are available on linux +TPOT_OSTYPE=linux diff --git a/etc/compose/collector.yml b/etc/compose/collector.yml deleted file mode 100644 index 9e72ef1a..00000000 --- a/etc/compose/collector.yml +++ /dev/null @@ -1,260 +0,0 @@ -# T-Pot (Collector) -# Do not erase ports sections, these are used by /opt/tpot/bin/rules.sh to setup iptables ACCEPT rules for NFQ (honeytrap / glutton) -version: '2.3' - -networks: - heralding_local: - ewsposter_local: - spiderfoot_local: - -services: - -################## -#### Honeypots -################## - -# Heralding service - heralding: - container_name: heralding - restart: always - tmpfs: - - /tmp/heralding:uid=2000,gid=2000 - networks: - - heralding_local - ports: - - "21:21" - - "22:22" - - "23:23" - - "25:25" - - "80:80" - - "110:110" - - "143:143" - - "443:443" - - "465:465" - - "993:993" - - "995:995" - - "1080:1080" - - "3306:3306" - - "3389:3389" - - "5432:5432" - - "5900:5900" - image: "dtagdevsec/heralding:2204" - read_only: true - volumes: - - /data/heralding/log:/var/log/heralding - -# Honeytrap service - honeytrap: - container_name: honeytrap - restart: always - tmpfs: - - /tmp/honeytrap:uid=2000,gid=2000 - network_mode: "host" - cap_add: - - NET_ADMIN - image: "dtagdevsec/honeytrap:2204" - read_only: true - volumes: - - /data/honeytrap/attacks:/opt/honeytrap/var/attacks - - /data/honeytrap/downloads:/opt/honeytrap/var/downloads - - /data/honeytrap/log:/opt/honeytrap/var/log - - -################## -#### NSM -################## - -# Fatt service - fatt: - container_name: fatt - restart: always - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/fatt:2204" - volumes: - - /data/fatt/log:/opt/fatt/log - -# P0f service - p0f: - container_name: p0f - restart: always - network_mode: "host" - image: "dtagdevsec/p0f:2204" - read_only: true - volumes: - - /data/p0f/log:/var/log/p0f - -# Suricata service - suricata: - container_name: suricata - restart: always - environment: - # For ET Pro ruleset replace "OPEN" with your OINKCODE - - OINKCODE=OPEN - # Loading externel Rules from URL - # - FROMURL="https://username:password@yoururl.com|https://username:password@otherurl.com" - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/suricata:2204" - volumes: - - /data/suricata/log:/var/log/suricata - - -################## -#### Tools -################## - -#### ELK -## Elasticsearch service - elasticsearch: - container_name: elasticsearch - restart: always - environment: - - bootstrap.memory_lock=true - - ES_JAVA_OPTS=-Xms2048m -Xmx2048m - - ES_TMPDIR=/tmp - cap_add: - - IPC_LOCK - ulimits: - memlock: - soft: -1 - hard: -1 - nofile: - soft: 65536 - hard: 65536 - mem_limit: 4g - ports: - - "127.0.0.1:64298:9200" - image: "dtagdevsec/elasticsearch:2204" - volumes: - - /data:/data - -## Kibana service - kibana: - container_name: kibana - restart: always - depends_on: - elasticsearch: - condition: service_healthy - mem_limit: 1g - ports: - - "127.0.0.1:64296:5601" - image: "dtagdevsec/kibana:2204" - -## Logstash service - logstash: - container_name: logstash - restart: always - environment: - - LS_JAVA_OPTS=-Xms1024m -Xmx1024m - depends_on: - elasticsearch: - condition: service_healthy - env_file: - - /opt/tpot/etc/compose/elk_environment - mem_limit: 2g - image: "dtagdevsec/logstash:2204" - volumes: - - /data:/data - -## Map Redis Service - map_redis: - container_name: map_redis - restart: always - stop_signal: SIGKILL - tty: true - image: "dtagdevsec/redis:2204" - read_only: true - -## Map Web Service - map_web: - container_name: map_web - restart: always - environment: - - MAP_COMMAND=AttackMapServer.py - env_file: - - /opt/tpot/etc/compose/elk_environment - stop_signal: SIGKILL - tty: true - ports: - - "127.0.0.1:64299:64299" - image: "dtagdevsec/map:2204" - -## Map Data Service - map_data: - container_name: map_data - restart: always - depends_on: - elasticsearch: - condition: service_healthy - environment: - - MAP_COMMAND=DataServer_v2.py - env_file: - - /opt/tpot/etc/compose/elk_environment - stop_signal: SIGKILL - tty: true - image: "dtagdevsec/map:2204" -#### /ELK - -# Ewsposter service - ewsposter: - container_name: ewsposter - restart: always - networks: - - ewsposter_local - environment: - - EWS_HPFEEDS_ENABLE=false - - EWS_HPFEEDS_HOST=host - - EWS_HPFEEDS_PORT=port - - EWS_HPFEEDS_CHANNELS=channels - - EWS_HPFEEDS_IDENT=user - - EWS_HPFEEDS_SECRET=secret - - EWS_HPFEEDS_TLSCERT=false - - EWS_HPFEEDS_FORMAT=json - env_file: - - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/ewsposter:2204" - volumes: - - /data:/data - - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip - -# Nginx service - nginx: - container_name: nginx - restart: always - tmpfs: - - /var/tmp/nginx/client_body - - /var/tmp/nginx/proxy - - /var/tmp/nginx/fastcgi - - /var/tmp/nginx/uwsgi - - /var/tmp/nginx/scgi - - /run - - /var/lib/nginx/tmp:uid=100,gid=82 - network_mode: "host" - # ports: - # - "64297:64297" - # - "127.0.0.1:64304:64304" - image: "dtagdevsec/nginx:2204" - read_only: true - volumes: - - /data/nginx/cert/:/etc/nginx/cert/:ro - - /data/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro - - /data/nginx/log/:/var/log/nginx/ - -# Spiderfoot service - spiderfoot: - container_name: spiderfoot - restart: always - networks: - - spiderfoot_local - ports: - - "127.0.0.1:64303:8080" - image: "dtagdevsec/spiderfoot:2204" - volumes: - - /data/spiderfoot:/home/spiderfoot/.spiderfoot diff --git a/etc/compose/hive.yml b/etc/compose/hive.yml deleted file mode 100644 index 4ed8cedc..00000000 --- a/etc/compose/hive.yml +++ /dev/null @@ -1,141 +0,0 @@ -# T-Pot (Hive) -# Do not erase ports sections, these are used by /opt/tpot/bin/rules.sh to setup iptables ACCEPT rules for NFQ (honeytrap / glutton) -version: '2.3' - -networks: - spiderfoot_local: - -services: - -################## -#### Tools -################## - -#### ELK -## Elasticsearch service - elasticsearch: - container_name: elasticsearch - restart: always - environment: - - bootstrap.memory_lock=true - - ES_JAVA_OPTS=-Xms2048m -Xmx2048m - - ES_TMPDIR=/tmp - cap_add: - - IPC_LOCK - ulimits: - memlock: - soft: -1 - hard: -1 - nofile: - soft: 65536 - hard: 65536 -# mem_limit: 4g - ports: - - "127.0.0.1:64298:9200" - image: "dtagdevsec/elasticsearch:2204" - volumes: - - /data:/data - -## Kibana service - kibana: - container_name: kibana - restart: always - depends_on: - elasticsearch: - condition: service_healthy -# mem_limit: 1g - ports: - - "127.0.0.1:64296:5601" - image: "dtagdevsec/kibana:2204" - -## Logstash service - logstash: - container_name: logstash - restart: always - environment: - - LS_JAVA_OPTS=-Xms2048m -Xmx2048m - depends_on: - elasticsearch: - condition: service_healthy - env_file: - - /opt/tpot/etc/compose/elk_environment - ports: - - "127.0.0.1:64305:64305" -# mem_limit: 2g - image: "dtagdevsec/logstash:2204" - volumes: - - /data:/data - -## Map Redis Service - map_redis: - container_name: map_redis - restart: always - stop_signal: SIGKILL - tty: true - image: "dtagdevsec/redis:2204" - read_only: true - -## Map Web Service - map_web: - container_name: map_web - restart: always - environment: - - MAP_COMMAND=AttackMapServer.py - env_file: - - /opt/tpot/etc/compose/elk_environment - stop_signal: SIGKILL - tty: true - ports: - - "127.0.0.1:64299:64299" - image: "dtagdevsec/map:2204" - -## Map Data Service - map_data: - container_name: map_data - restart: always - depends_on: - elasticsearch: - condition: service_healthy - environment: - - MAP_COMMAND=DataServer_v2.py - env_file: - - /opt/tpot/etc/compose/elk_environment - stop_signal: SIGKILL - tty: true - image: "dtagdevsec/map:2204" -#### /ELK - -# Nginx service - nginx: - container_name: nginx - restart: always - tmpfs: - - /var/tmp/nginx/client_body - - /var/tmp/nginx/proxy - - /var/tmp/nginx/fastcgi - - /var/tmp/nginx/uwsgi - - /var/tmp/nginx/scgi - - /run - - /var/lib/nginx/tmp:uid=100,gid=82 - network_mode: "host" - # ports: - # - "64297:64297" - # - "127.0.0.1:64304:64304" - image: "dtagdevsec/nginx:2204" - read_only: true - volumes: - - /data/nginx/cert/:/etc/nginx/cert/:ro - - /data/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro - - /data/nginx/log/:/var/log/nginx/ - -# Spiderfoot service - spiderfoot: - container_name: spiderfoot - restart: always - networks: - - spiderfoot_local - ports: - - "127.0.0.1:64303:8080" - image: "dtagdevsec/spiderfoot:2204" - volumes: - - /data/spiderfoot:/home/spiderfoot/.spiderfoot diff --git a/etc/compose/hive_sensor.yml b/etc/compose/hive_sensor.yml deleted file mode 100644 index db16863d..00000000 --- a/etc/compose/hive_sensor.yml +++ /dev/null @@ -1,548 +0,0 @@ -# T-Pot (Hive_Sensor) -# Do not erase ports sections, these are used by /opt/tpot/bin/rules.sh to setup iptables ACCEPT rules for NFQ (honeytrap / glutton) -version: '2.3' - -networks: - adbhoney_local: - ciscoasa_local: - citrixhoneypot_local: - conpot_local_IEC104: - conpot_local_guardian_ast: - conpot_local_ipmi: - conpot_local_kamstrup_382: - cowrie_local: - ddospot_local: - dicompot_local: - dionaea_local: - elasticpot_local: - heralding_local: - ipphoney_local: - mailoney_local: - medpot_local: - redishoneypot_local: - tanner_local: - ewsposter_local: - sentrypeer_local: - spiderfoot_local: - -services: - -################## -#### Honeypots -################## - -# Adbhoney service - adbhoney: - container_name: adbhoney - restart: always - networks: - - adbhoney_local - ports: - - "5555:5555" - image: "dtagdevsec/adbhoney:2204" - read_only: true - volumes: - - /data/adbhoney/log:/opt/adbhoney/log - - /data/adbhoney/downloads:/opt/adbhoney/dl - -# Ciscoasa service - ciscoasa: - container_name: ciscoasa - restart: always - tmpfs: - - /tmp/ciscoasa:uid=2000,gid=2000 - networks: - - ciscoasa_local - ports: - - "5000:5000/udp" - - "8443:8443" - image: "dtagdevsec/ciscoasa:2204" - read_only: true - volumes: - - /data/ciscoasa/log:/var/log/ciscoasa - -# CitrixHoneypot service - citrixhoneypot: - container_name: citrixhoneypot - restart: always - networks: - - citrixhoneypot_local - ports: - - "443:443" - image: "dtagdevsec/citrixhoneypot:2204" - read_only: true - volumes: - - /data/citrixhoneypot/logs:/opt/citrixhoneypot/logs - -# Conpot IEC104 service - conpot_IEC104: - container_name: conpot_iec104 - restart: always - environment: - - CONPOT_CONFIG=/etc/conpot/conpot.cfg - - CONPOT_JSON_LOG=/var/log/conpot/conpot_IEC104.json - - CONPOT_LOG=/var/log/conpot/conpot_IEC104.log - - CONPOT_TEMPLATE=IEC104 - - CONPOT_TMP=/tmp/conpot - tmpfs: - - /tmp/conpot:uid=2000,gid=2000 - networks: - - conpot_local_IEC104 - ports: - - "161:161/udp" - - "2404:2404" - image: "dtagdevsec/conpot:2204" - read_only: true - volumes: - - /data/conpot/log:/var/log/conpot - -# Conpot guardian_ast service - conpot_guardian_ast: - container_name: conpot_guardian_ast - restart: always - environment: - - CONPOT_CONFIG=/etc/conpot/conpot.cfg - - CONPOT_JSON_LOG=/var/log/conpot/conpot_guardian_ast.json - - CONPOT_LOG=/var/log/conpot/conpot_guardian_ast.log - - CONPOT_TEMPLATE=guardian_ast - - CONPOT_TMP=/tmp/conpot - tmpfs: - - /tmp/conpot:uid=2000,gid=2000 - networks: - - conpot_local_guardian_ast - ports: - - "10001:10001" - image: "dtagdevsec/conpot:2204" - read_only: true - volumes: - - /data/conpot/log:/var/log/conpot - -# Conpot ipmi - conpot_ipmi: - container_name: conpot_ipmi - restart: always - environment: - - CONPOT_CONFIG=/etc/conpot/conpot.cfg - - CONPOT_JSON_LOG=/var/log/conpot/conpot_ipmi.json - - CONPOT_LOG=/var/log/conpot/conpot_ipmi.log - - CONPOT_TEMPLATE=ipmi - - CONPOT_TMP=/tmp/conpot - tmpfs: - - /tmp/conpot:uid=2000,gid=2000 - networks: - - conpot_local_ipmi - ports: - - "623:623/udp" - image: "dtagdevsec/conpot:2204" - read_only: true - volumes: - - /data/conpot/log:/var/log/conpot - -# Conpot kamstrup_382 - conpot_kamstrup_382: - container_name: conpot_kamstrup_382 - restart: always - environment: - - CONPOT_CONFIG=/etc/conpot/conpot.cfg - - CONPOT_JSON_LOG=/var/log/conpot/conpot_kamstrup_382.json - - CONPOT_LOG=/var/log/conpot/conpot_kamstrup_382.log - - CONPOT_TEMPLATE=kamstrup_382 - - CONPOT_TMP=/tmp/conpot - tmpfs: - - /tmp/conpot:uid=2000,gid=2000 - networks: - - conpot_local_kamstrup_382 - ports: - - "1025:1025" - - "50100:50100" - image: "dtagdevsec/conpot:2204" - read_only: true - volumes: - - /data/conpot/log:/var/log/conpot - -# Cowrie service - cowrie: - container_name: cowrie - restart: always - tmpfs: - - /tmp/cowrie:uid=2000,gid=2000 - - /tmp/cowrie/data:uid=2000,gid=2000 - networks: - - cowrie_local - ports: - - "22:22" - - "23:23" - image: "dtagdevsec/cowrie:2204" - read_only: true - volumes: - - /data/cowrie/downloads:/home/cowrie/cowrie/dl - - /data/cowrie/keys:/home/cowrie/cowrie/etc - - /data/cowrie/log:/home/cowrie/cowrie/log - - /data/cowrie/log/tty:/home/cowrie/cowrie/log/tty - -# Ddospot service - ddospot: - container_name: ddospot - restart: always - networks: - - ddospot_local - ports: - - "19:19/udp" - - "53:53/udp" - - "123:123/udp" -# - "161:161/udp" - - "1900:1900/udp" - image: "dtagdevsec/ddospot:2204" - read_only: true - volumes: - - /data/ddospot/log:/opt/ddospot/ddospot/logs - - /data/ddospot/bl:/opt/ddospot/ddospot/bl - - /data/ddospot/db:/opt/ddospot/ddospot/db - -# Dicompot service -# Get the Horos Client for testing: https://horosproject.org/ -# Get Dicom images (CC BY 3.0): https://www.cancerimagingarchive.net/collections/ -# Put images (which must be in Dicom DCM format or it will not work!) into /data/dicompot/images - dicompot: - container_name: dicompot - restart: always - networks: - - dicompot_local - ports: - - "11112:11112" - image: "dtagdevsec/dicompot:2204" - read_only: true - volumes: - - /data/dicompot/log:/var/log/dicompot -# - /data/dicompot/images:/opt/dicompot/images - -# Dionaea service - dionaea: - container_name: dionaea - stdin_open: true - tty: true - restart: always - networks: - - dionaea_local - ports: - - "20:20" - - "21:21" - - "42:42" - - "69:69/udp" - - "81:81" - - "135:135" - # - "443:443" - - "445:445" - - "1433:1433" - - "1723:1723" - - "1883:1883" - - "3306:3306" - # - "5060:5060" - # - "5060:5060/udp" - # - "5061:5061" - - "27017:27017" - image: "dtagdevsec/dionaea:2204" - read_only: true - volumes: - - /data/dionaea/roots/ftp:/opt/dionaea/var/dionaea/roots/ftp - - /data/dionaea/roots/tftp:/opt/dionaea/var/dionaea/roots/tftp - - /data/dionaea/roots/www:/opt/dionaea/var/dionaea/roots/www - - /data/dionaea/roots/upnp:/opt/dionaea/var/dionaea/roots/upnp - - /data/dionaea:/opt/dionaea/var/dionaea - - /data/dionaea/binaries:/opt/dionaea/var/dionaea/binaries - - /data/dionaea/log:/opt/dionaea/var/log - - /data/dionaea/rtp:/opt/dionaea/var/dionaea/rtp - -# ElasticPot service - elasticpot: - container_name: elasticpot - restart: always - networks: - - elasticpot_local - ports: - - "9200:9200" - image: "dtagdevsec/elasticpot:2204" - read_only: true - volumes: - - /data/elasticpot/log:/opt/elasticpot/log - -# Heralding service - heralding: - container_name: heralding - restart: always - tmpfs: - - /tmp/heralding:uid=2000,gid=2000 - networks: - - heralding_local - ports: - # - "21:21" - # - "22:22" - # - "23:23" - # - "25:25" - # - "80:80" - - "110:110" - - "143:143" - # - "443:443" - - "465:465" - - "993:993" - - "995:995" - # - "3306:3306" - # - "3389:3389" - - "1080:1080" - - "5432:5432" - - "5900:5900" - image: "dtagdevsec/heralding:2204" - read_only: true - volumes: - - /data/heralding/log:/var/log/heralding - -# Honeytrap service - honeytrap: - container_name: honeytrap - restart: always - tmpfs: - - /tmp/honeytrap:uid=2000,gid=2000 - network_mode: "host" - cap_add: - - NET_ADMIN - image: "dtagdevsec/honeytrap:2204" - read_only: true - volumes: - - /data/honeytrap/attacks:/opt/honeytrap/var/attacks - - /data/honeytrap/downloads:/opt/honeytrap/var/downloads - - /data/honeytrap/log:/opt/honeytrap/var/log - -# Ipphoney service - ipphoney: - container_name: ipphoney - restart: always - networks: - - ipphoney_local - ports: - - "631:631" - image: "dtagdevsec/ipphoney:2204" - read_only: true - volumes: - - /data/ipphoney/log:/opt/ipphoney/log - -# Mailoney service - mailoney: - container_name: mailoney - restart: always - environment: - - HPFEEDS_SERVER= - - HPFEEDS_IDENT=user - - HPFEEDS_SECRET=pass - - HPFEEDS_PORT=20000 - - HPFEEDS_CHANNELPREFIX=prefix - networks: - - mailoney_local - ports: - - "25:25" - image: "dtagdevsec/mailoney:2204" - read_only: true - volumes: - - /data/mailoney/log:/opt/mailoney/logs - -# Medpot service - medpot: - container_name: medpot - restart: always - networks: - - medpot_local - ports: - - "2575:2575" - image: "dtagdevsec/medpot:2204" - read_only: true - volumes: - - /data/medpot/log/:/var/log/medpot - -# Redishoneypot service - redishoneypot: - container_name: redishoneypot - restart: always - networks: - - redishoneypot_local - ports: - - "6379:6379" - image: "dtagdevsec/redishoneypot:2204" - read_only: true - volumes: - - /data/redishoneypot/log:/var/log/redishoneypot - -# SentryPeer service - sentrypeer: - container_name: sentrypeer - restart: always -# SentryPeer offers to exchange bad actor data via DHT / P2P mode by setting the ENV to true (1) -# In some cases (i.e. internally deployed T-Pots) this might be confusing as SentryPeer will show -# the bad actors in its logs. Therefore this option is opt-in based. -# environment: -# - SENTRYPEER_PEER_TO_PEER=0 - networks: - - sentrypeer_local - ports: -# - "4222:4222/udp" - - "5060:5060/udp" -# - "127.0.0.1:8082:8082" - image: "dtagdevsec/sentrypeer:2204" - read_only: true - volumes: - - /data/sentrypeer/log:/var/log/sentrypeer - -#### Snare / Tanner -## Tanner Redis Service - tanner_redis: - container_name: tanner_redis - restart: always - tty: true - networks: - - tanner_local - image: "dtagdevsec/redis:2204" - read_only: true - -## PHP Sandbox service - tanner_phpox: - container_name: tanner_phpox - restart: always - tty: true - networks: - - tanner_local - image: "dtagdevsec/phpox:2204" - read_only: true - -## Tanner API Service - tanner_api: - container_name: tanner_api - restart: always - tmpfs: - - /tmp/tanner:uid=2000,gid=2000 - tty: true - networks: - - tanner_local - image: "dtagdevsec/tanner:2204" - read_only: true - volumes: - - /data/tanner/log:/var/log/tanner - command: tannerapi - depends_on: - - tanner_redis - -## Tanner Service - tanner: - container_name: tanner - restart: always - tmpfs: - - /tmp/tanner:uid=2000,gid=2000 - tty: true - networks: - - tanner_local - image: "dtagdevsec/tanner:2204" - command: tanner - read_only: true - volumes: - - /data/tanner/log:/var/log/tanner - - /data/tanner/files:/opt/tanner/files - depends_on: - - tanner_api -# - tanner_web - - tanner_phpox - -## Snare Service - snare: - container_name: snare - restart: always - tty: true - networks: - - tanner_local - ports: - - "80:80" - image: "dtagdevsec/snare:2204" - depends_on: - - tanner - - -################## -#### NSM -################## - -# Fatt service - fatt: - container_name: fatt - restart: always - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/fatt:2204" - volumes: - - /data/fatt/log:/opt/fatt/log - -# P0f service - p0f: - container_name: p0f - restart: always - network_mode: "host" - image: "dtagdevsec/p0f:2204" - read_only: true - volumes: - - /data/p0f/log:/var/log/p0f - -# Suricata service - suricata: - container_name: suricata - restart: always - environment: - # For ET Pro ruleset replace "OPEN" with your OINKCODE - - OINKCODE=OPEN - # Loading externel Rules from URL - # - FROMURL="https://username:password@yoururl.com|https://username:password@otherurl.com" - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/suricata:2204" - volumes: - - /data/suricata/log:/var/log/suricata - - -################## -#### Tools -################## - -## Logstash service - logstash: - container_name: logstash - restart: always - environment: - - LS_JAVA_OPTS=-Xms1024m -Xmx1024m - env_file: - - /opt/tpot/etc/compose/elk_environment - mem_limit: 2g - image: "dtagdevsec/logstash:2204" - volumes: - - /data:/data - -# Ewsposter service - ewsposter: - container_name: ewsposter - restart: always - networks: - - ewsposter_local - environment: - - EWS_HPFEEDS_ENABLE=false - - EWS_HPFEEDS_HOST=host - - EWS_HPFEEDS_PORT=port - - EWS_HPFEEDS_CHANNELS=channels - - EWS_HPFEEDS_IDENT=user - - EWS_HPFEEDS_SECRET=secret - - EWS_HPFEEDS_TLSCERT=false - - EWS_HPFEEDS_FORMAT=json - env_file: - - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/ewsposter:2204" - volumes: - - /data:/data - - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip diff --git a/etc/compose/industrial.yml b/etc/compose/industrial.yml deleted file mode 100644 index ab9a6490..00000000 --- a/etc/compose/industrial.yml +++ /dev/null @@ -1,431 +0,0 @@ -# T-Pot (Industrial) -# Do not erase ports sections, these are used by /opt/tpot/bin/rules.sh to setup iptables ACCEPT rules for NFQ (honeytrap / glutton) -version: '2.3' - -networks: - conpot_local_default: - conpot_local_IEC104: - conpot_local_guardian_ast: - conpot_local_ipmi: - conpot_local_kamstrup_382: - cowrie_local: - dicompot_local: - heralding_local: - medpot_local: - ewsposter_local: - spiderfoot_local: - -services: - -################## -#### Honeypots -################## - -# Conpot default service - conpot_default: - container_name: conpot_default - restart: always - environment: - - CONPOT_CONFIG=/etc/conpot/conpot.cfg - - CONPOT_JSON_LOG=/var/log/conpot/conpot_default.json - - CONPOT_LOG=/var/log/conpot/conpot_default.log - - CONPOT_TEMPLATE=default - - CONPOT_TMP=/tmp/conpot - tmpfs: - - /tmp/conpot:uid=2000,gid=2000 - networks: - - conpot_local_default - ports: - - "69:69/udp" - - "80:80" - - "102:102" - - "161:161/udp" - - "502:502" -# - "623:623/udp" - - "21:21" - - "44818:44818" - - "47808:47808/udp" - image: "dtagdevsec/conpot:2204" - read_only: true - volumes: - - /data/conpot/log:/var/log/conpot - -# Conpot IEC104 service - conpot_IEC104: - container_name: conpot_iec104 - restart: always - environment: - - CONPOT_CONFIG=/etc/conpot/conpot.cfg - - CONPOT_JSON_LOG=/var/log/conpot/conpot_IEC104.json - - CONPOT_LOG=/var/log/conpot/conpot_IEC104.log - - CONPOT_TEMPLATE=IEC104 - - CONPOT_TMP=/tmp/conpot - tmpfs: - - /tmp/conpot:uid=2000,gid=2000 - networks: - - conpot_local_IEC104 - ports: -# - "161:161/udp" - - "2404:2404" - image: "dtagdevsec/conpot:2204" - read_only: true - volumes: - - /data/conpot/log:/var/log/conpot - -# Conpot guardian_ast service - conpot_guardian_ast: - container_name: conpot_guardian_ast - restart: always - environment: - - CONPOT_CONFIG=/etc/conpot/conpot.cfg - - CONPOT_JSON_LOG=/var/log/conpot/conpot_guardian_ast.json - - CONPOT_LOG=/var/log/conpot/conpot_guardian_ast.log - - CONPOT_TEMPLATE=guardian_ast - - CONPOT_TMP=/tmp/conpot - tmpfs: - - /tmp/conpot:uid=2000,gid=2000 - networks: - - conpot_local_guardian_ast - ports: - - "10001:10001" - image: "dtagdevsec/conpot:2204" - read_only: true - volumes: - - /data/conpot/log:/var/log/conpot - -# Conpot ipmi - conpot_ipmi: - container_name: conpot_ipmi - restart: always - environment: - - CONPOT_CONFIG=/etc/conpot/conpot.cfg - - CONPOT_JSON_LOG=/var/log/conpot/conpot_ipmi.json - - CONPOT_LOG=/var/log/conpot/conpot_ipmi.log - - CONPOT_TEMPLATE=ipmi - - CONPOT_TMP=/tmp/conpot - tmpfs: - - /tmp/conpot:uid=2000,gid=2000 - networks: - - conpot_local_ipmi - ports: - - "623:623/udp" - image: "dtagdevsec/conpot:2204" - read_only: true - volumes: - - /data/conpot/log:/var/log/conpot - -# Conpot kamstrup_382 - conpot_kamstrup_382: - container_name: conpot_kamstrup_382 - restart: always - environment: - - CONPOT_CONFIG=/etc/conpot/conpot.cfg - - CONPOT_JSON_LOG=/var/log/conpot/conpot_kamstrup_382.json - - CONPOT_LOG=/var/log/conpot/conpot_kamstrup_382.log - - CONPOT_TEMPLATE=kamstrup_382 - - CONPOT_TMP=/tmp/conpot - tmpfs: - - /tmp/conpot:uid=2000,gid=2000 - networks: - - conpot_local_kamstrup_382 - ports: - - "1025:1025" - - "50100:50100" - image: "dtagdevsec/conpot:2204" - read_only: true - volumes: - - /data/conpot/log:/var/log/conpot - -# Cowrie service - cowrie: - container_name: cowrie - restart: always - tmpfs: - - /tmp/cowrie:uid=2000,gid=2000 - - /tmp/cowrie/data:uid=2000,gid=2000 - networks: - - cowrie_local - ports: - - "22:22" - - "23:23" - image: "dtagdevsec/cowrie:2204" - read_only: true - volumes: - - /data/cowrie/downloads:/home/cowrie/cowrie/dl - - /data/cowrie/keys:/home/cowrie/cowrie/etc - - /data/cowrie/log:/home/cowrie/cowrie/log - - /data/cowrie/log/tty:/home/cowrie/cowrie/log/tty - -# Dicompot service -# Get the Horos Client for testing: https://horosproject.org/ -# Get Dicom images (CC BY 3.0): https://www.cancerimagingarchive.net/collections/ -# Put images (which must be in Dicom DCM format or it will not work!) into /data/dicompot/images - dicompot: - container_name: dicompot - restart: always - networks: - - dicompot_local - ports: - - "11112:11112" - image: "dtagdevsec/dicompot:2204" - read_only: true - volumes: - - /data/dicompot/log:/var/log/dicompot -# - /data/dicompot/images:/opt/dicompot/images - -# Heralding service - heralding: - container_name: heralding - restart: always - tmpfs: - - /tmp/heralding:uid=2000,gid=2000 - networks: - - heralding_local - ports: - # - "21:21" - # - "22:22" - # - "23:23" - # - "25:25" - # - "80:80" - # - "110:110" - # - "143:143" - # - "443:443" - # - "465:465" - # - "993:993" - # - "995:995" - # - "3306:3306" - # - "3389:3389" - # - "5432:5432" - - "5900:5900" - image: "dtagdevsec/heralding:2204" - read_only: true - volumes: - - /data/heralding/log:/var/log/heralding - -# Honeytrap service - honeytrap: - container_name: honeytrap - restart: always - tmpfs: - - /tmp/honeytrap:uid=2000,gid=2000 - network_mode: "host" - cap_add: - - NET_ADMIN - image: "dtagdevsec/honeytrap:2204" - read_only: true - volumes: - - /data/honeytrap/attacks:/opt/honeytrap/var/attacks - - /data/honeytrap/downloads:/opt/honeytrap/var/downloads - - /data/honeytrap/log:/opt/honeytrap/var/log - -# Medpot service - medpot: - container_name: medpot - restart: always - networks: - - medpot_local - ports: - - "2575:2575" - image: "dtagdevsec/medpot:2204" - read_only: true - volumes: - - /data/medpot/log/:/var/log/medpot - -################## -#### NSM -################## - -# Fatt service - fatt: - container_name: fatt - restart: always - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/fatt:2204" - volumes: - - /data/fatt/log:/opt/fatt/log - -# P0f service - p0f: - container_name: p0f - restart: always - network_mode: "host" - image: "dtagdevsec/p0f:2204" - read_only: true - volumes: - - /data/p0f/log:/var/log/p0f - -# Suricata service - suricata: - container_name: suricata - restart: always - environment: - # For ET Pro ruleset replace "OPEN" with your OINKCODE - - OINKCODE=OPEN - # Loading externel Rules from URL - # - FROMURL="https://username:password@yoururl.com|https://username:password@otherurl.com" - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/suricata:2204" - volumes: - - /data/suricata/log:/var/log/suricata - - -################## -#### Tools -################## - -#### ELK -## Elasticsearch service - elasticsearch: - container_name: elasticsearch - restart: always - environment: - - bootstrap.memory_lock=true - - ES_JAVA_OPTS=-Xms2048m -Xmx2048m - - ES_TMPDIR=/tmp - cap_add: - - IPC_LOCK - ulimits: - memlock: - soft: -1 - hard: -1 - nofile: - soft: 65536 - hard: 65536 - mem_limit: 4g - ports: - - "127.0.0.1:64298:9200" - image: "dtagdevsec/elasticsearch:2204" - volumes: - - /data:/data - -## Kibana service - kibana: - container_name: kibana - restart: always - depends_on: - elasticsearch: - condition: service_healthy - mem_limit: 1g - ports: - - "127.0.0.1:64296:5601" - image: "dtagdevsec/kibana:2204" - -## Logstash service - logstash: - container_name: logstash - restart: always - environment: - - LS_JAVA_OPTS=-Xms1024m -Xmx1024m - depends_on: - elasticsearch: - condition: service_healthy - env_file: - - /opt/tpot/etc/compose/elk_environment - mem_limit: 2g - image: "dtagdevsec/logstash:2204" - volumes: - - /data:/data - -## Map Redis Service - map_redis: - container_name: map_redis - restart: always - stop_signal: SIGKILL - tty: true - image: "dtagdevsec/redis:2204" - read_only: true - -## Map Web Service - map_web: - container_name: map_web - restart: always - environment: - - MAP_COMMAND=AttackMapServer.py - env_file: - - /opt/tpot/etc/compose/elk_environment - stop_signal: SIGKILL - tty: true - ports: - - "127.0.0.1:64299:64299" - image: "dtagdevsec/map:2204" - -## Map Data Service - map_data: - container_name: map_data - restart: always - depends_on: - elasticsearch: - condition: service_healthy - environment: - - MAP_COMMAND=DataServer_v2.py - env_file: - - /opt/tpot/etc/compose/elk_environment - stop_signal: SIGKILL - tty: true - image: "dtagdevsec/map:2204" -#### /ELK - -# Ewsposter service - ewsposter: - container_name: ewsposter - restart: always - networks: - - ewsposter_local - environment: - - EWS_HPFEEDS_ENABLE=false - - EWS_HPFEEDS_HOST=host - - EWS_HPFEEDS_PORT=port - - EWS_HPFEEDS_CHANNELS=channels - - EWS_HPFEEDS_IDENT=user - - EWS_HPFEEDS_SECRET=secret - - EWS_HPFEEDS_TLSCERT=false - - EWS_HPFEEDS_FORMAT=json - env_file: - - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/ewsposter:2204" - volumes: - - /data:/data - - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip - -# Nginx service - nginx: - container_name: nginx - restart: always - tmpfs: - - /var/tmp/nginx/client_body - - /var/tmp/nginx/proxy - - /var/tmp/nginx/fastcgi - - /var/tmp/nginx/uwsgi - - /var/tmp/nginx/scgi - - /run - - /var/lib/nginx/tmp:uid=100,gid=82 - network_mode: "host" - # ports: - # - "64297:64297" - # - "127.0.0.1:64304:64304" - image: "dtagdevsec/nginx:2204" - read_only: true - volumes: - - /data/nginx/cert/:/etc/nginx/cert/:ro - - /data/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro - - /data/nginx/log/:/var/log/nginx/ - -# Spiderfoot service - spiderfoot: - container_name: spiderfoot - restart: always - networks: - - spiderfoot_local - ports: - - "127.0.0.1:64303:8080" - image: "dtagdevsec/spiderfoot:2204" - volumes: - - /data/spiderfoot:/home/spiderfoot/.spiderfoot diff --git a/etc/compose/log4j.yml b/etc/compose/log4j.yml deleted file mode 100644 index 666716c7..00000000 --- a/etc/compose/log4j.yml +++ /dev/null @@ -1,250 +0,0 @@ -# T-Pot (Log4j) -# Do not erase ports sections, these are used by /opt/tpot/bin/rules.sh to setup iptables ACCEPT rules for NFQ (honeytrap / glutton) -version: '2.3' - -networks: - log4pot_local: - ewsposter_local: - spiderfoot_local: - -services: - -################## -#### Honeypots -################## - -# Log4pot service - log4pot: - container_name: log4pot - restart: always - tmpfs: - - /tmp:uid=2000,gid=2000 - networks: - - log4pot_local - ports: - - "80:8080" - - "443:8080" - - "8080:8080" - - "9200:8080" - - "25565:8080" - image: "dtagdevsec/log4pot:2204" - read_only: true - volumes: - - /data/log4pot/log:/var/log/log4pot/log - - /data/log4pot/payloads:/var/log/log4pot/payloads - -# Honeytrap service - honeytrap: - container_name: honeytrap - restart: always - tmpfs: - - /tmp/honeytrap:uid=2000,gid=2000 - network_mode: "host" - cap_add: - - NET_ADMIN - image: "dtagdevsec/honeytrap:2204" - read_only: true - volumes: - - /data/honeytrap/attacks:/opt/honeytrap/var/attacks - - /data/honeytrap/downloads:/opt/honeytrap/var/downloads - - /data/honeytrap/log:/opt/honeytrap/var/log - - -################## -#### NSM -################## - -# Fatt service - fatt: - container_name: fatt - restart: always - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/fatt:2204" - volumes: - - /data/fatt/log:/opt/fatt/log - -# P0f service - p0f: - container_name: p0f - restart: always - network_mode: "host" - image: "dtagdevsec/p0f:2204" - read_only: true - volumes: - - /data/p0f/log:/var/log/p0f - -# Suricata service - suricata: - container_name: suricata - restart: always - environment: - # For ET Pro ruleset replace "OPEN" with your OINKCODE - - OINKCODE=OPEN - # Loading externel Rules from URL - # - FROMURL="https://username:password@yoururl.com|https://username:password@otherurl.com" - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/suricata:2204" - volumes: - - /data/suricata/log:/var/log/suricata - - -################## -#### Tools -################## - -#### ELK -## Elasticsearch service - elasticsearch: - container_name: elasticsearch - restart: always - environment: - - bootstrap.memory_lock=true - - ES_JAVA_OPTS=-Xms2048m -Xmx2048m - - ES_TMPDIR=/tmp - cap_add: - - IPC_LOCK - ulimits: - memlock: - soft: -1 - hard: -1 - nofile: - soft: 65536 - hard: 65536 - mem_limit: 4g - ports: - - "127.0.0.1:64298:9200" - image: "dtagdevsec/elasticsearch:2204" - volumes: - - /data:/data - -## Kibana service - kibana: - container_name: kibana - restart: always - depends_on: - elasticsearch: - condition: service_healthy - mem_limit: 1g - ports: - - "127.0.0.1:64296:5601" - image: "dtagdevsec/kibana:2204" - -## Logstash service - logstash: - container_name: logstash - restart: always - environment: - - LS_JAVA_OPTS=-Xms1024m -Xmx1024m - depends_on: - elasticsearch: - condition: service_healthy - env_file: - - /opt/tpot/etc/compose/elk_environment - mem_limit: 2g - image: "dtagdevsec/logstash:2204" - volumes: - - /data:/data - -## Map Redis Service - map_redis: - container_name: map_redis - restart: always - stop_signal: SIGKILL - tty: true - image: "dtagdevsec/redis:2204" - read_only: true - -## Map Web Service - map_web: - container_name: map_web - restart: always - environment: - - MAP_COMMAND=AttackMapServer.py - env_file: - - /opt/tpot/etc/compose/elk_environment - stop_signal: SIGKILL - tty: true - ports: - - "127.0.0.1:64299:64299" - image: "dtagdevsec/map:2204" - -## Map Data Service - map_data: - container_name: map_data - restart: always - depends_on: - elasticsearch: - condition: service_healthy - environment: - - MAP_COMMAND=DataServer_v2.py - env_file: - - /opt/tpot/etc/compose/elk_environment - stop_signal: SIGKILL - tty: true - image: "dtagdevsec/map:2204" -#### /ELK - -# Ewsposter service - ewsposter: - container_name: ewsposter - restart: always - networks: - - ewsposter_local - environment: - - EWS_HPFEEDS_ENABLE=false - - EWS_HPFEEDS_HOST=host - - EWS_HPFEEDS_PORT=port - - EWS_HPFEEDS_CHANNELS=channels - - EWS_HPFEEDS_IDENT=user - - EWS_HPFEEDS_SECRET=secret - - EWS_HPFEEDS_TLSCERT=false - - EWS_HPFEEDS_FORMAT=json - env_file: - - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/ewsposter:2204" - volumes: - - /data:/data - - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip - -# Nginx service - nginx: - container_name: nginx - restart: always - tmpfs: - - /var/tmp/nginx/client_body - - /var/tmp/nginx/proxy - - /var/tmp/nginx/fastcgi - - /var/tmp/nginx/uwsgi - - /var/tmp/nginx/scgi - - /run - - /var/lib/nginx/tmp:uid=100,gid=82 - network_mode: "host" - # ports: - # - "64297:64297" - # - "127.0.0.1:64304:64304" - image: "dtagdevsec/nginx:2204" - read_only: true - volumes: - - /data/nginx/cert/:/etc/nginx/cert/:ro - - /data/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro - - /data/nginx/log/:/var/log/nginx/ - -# Spiderfoot service - spiderfoot: - container_name: spiderfoot - restart: always - networks: - - spiderfoot_local - ports: - - "127.0.0.1:64303:8080" - image: "dtagdevsec/spiderfoot:2204" - volumes: - - /data/spiderfoot:/home/spiderfoot/.spiderfoot diff --git a/etc/compose/medical.yml b/etc/compose/medical.yml deleted file mode 100644 index 73c56ea7..00000000 --- a/etc/compose/medical.yml +++ /dev/null @@ -1,244 +0,0 @@ -# T-Pot (Medical) -# Do not erase ports sections, these are used by /opt/tpot/bin/rules.sh to setup iptables ACCEPT rules for NFQ (honeytrap / glutton) -version: '2.3' - -networks: - dicompot_local: - medpot_local: - ewsposter_local: - spiderfoot_local: - -services: - -################## -#### Honeypots -################## - -# Dicompot service -# Get the Horos Client for testing: https://horosproject.org/ -# Get Dicom images (CC BY 3.0): https://www.cancerimagingarchive.net/collections/ -# Put images (which must be in Dicom DCM format or it will not work!) into /data/dicompot/images - dicompot: - container_name: dicompot - restart: always - networks: - - dicompot_local - ports: - - "11112:11112" - image: "dtagdevsec/dicompot:2204" - read_only: true - volumes: - - /data/dicompot/log:/var/log/dicompot -# - /data/dicompot/images:/opt/dicompot/images - -# Medpot service - medpot: - container_name: medpot - restart: always - networks: - - medpot_local - ports: - - "2575:2575" - image: "dtagdevsec/medpot:2204" - read_only: true - volumes: - - /data/medpot/log/:/var/log/medpot - -################## -#### NSM -################## - -# Fatt service - fatt: - container_name: fatt - restart: always - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/fatt:2204" - volumes: - - /data/fatt/log:/opt/fatt/log - -# P0f service - p0f: - container_name: p0f - restart: always - network_mode: "host" - image: "dtagdevsec/p0f:2204" - read_only: true - volumes: - - /data/p0f/log:/var/log/p0f - -# Suricata service - suricata: - container_name: suricata - restart: always - environment: - # For ET Pro ruleset replace "OPEN" with your OINKCODE - - OINKCODE=OPEN - # Loading externel Rules from URL - # - FROMURL="https://username:password@yoururl.com|https://username:password@otherurl.com" - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/suricata:2204" - volumes: - - /data/suricata/log:/var/log/suricata - - -################## -#### Tools -################## - -#### ELK -## Elasticsearch service - elasticsearch: - container_name: elasticsearch - restart: always - environment: - - bootstrap.memory_lock=true - - ES_JAVA_OPTS=-Xms2048m -Xmx2048m - - ES_TMPDIR=/tmp - cap_add: - - IPC_LOCK - ulimits: - memlock: - soft: -1 - hard: -1 - nofile: - soft: 65536 - hard: 65536 - mem_limit: 4g - ports: - - "127.0.0.1:64298:9200" - image: "dtagdevsec/elasticsearch:2204" - volumes: - - /data:/data - -## Kibana service - kibana: - container_name: kibana - restart: always - depends_on: - elasticsearch: - condition: service_healthy - mem_limit: 1g - ports: - - "127.0.0.1:64296:5601" - image: "dtagdevsec/kibana:2204" - -## Logstash service - logstash: - container_name: logstash - restart: always - environment: - - LS_JAVA_OPTS=-Xms1024m -Xmx1024m - depends_on: - elasticsearch: - condition: service_healthy - env_file: - - /opt/tpot/etc/compose/elk_environment - mem_limit: 2g - image: "dtagdevsec/logstash:2204" - volumes: - - /data:/data - -## Map Redis Service - map_redis: - container_name: map_redis - restart: always - stop_signal: SIGKILL - tty: true - image: "dtagdevsec/redis:2204" - read_only: true - -## Map Web Service - map_web: - container_name: map_web - restart: always - environment: - - MAP_COMMAND=AttackMapServer.py - env_file: - - /opt/tpot/etc/compose/elk_environment - stop_signal: SIGKILL - tty: true - ports: - - "127.0.0.1:64299:64299" - image: "dtagdevsec/map:2204" - -## Map Data Service - map_data: - container_name: map_data - restart: always - depends_on: - elasticsearch: - condition: service_healthy - environment: - - MAP_COMMAND=DataServer_v2.py - env_file: - - /opt/tpot/etc/compose/elk_environment - stop_signal: SIGKILL - tty: true - image: "dtagdevsec/map:2204" -#### /ELK - -# Ewsposter service - ewsposter: - container_name: ewsposter - restart: always - networks: - - ewsposter_local - environment: - - EWS_HPFEEDS_ENABLE=false - - EWS_HPFEEDS_HOST=host - - EWS_HPFEEDS_PORT=port - - EWS_HPFEEDS_CHANNELS=channels - - EWS_HPFEEDS_IDENT=user - - EWS_HPFEEDS_SECRET=secret - - EWS_HPFEEDS_TLSCERT=false - - EWS_HPFEEDS_FORMAT=json - env_file: - - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/ewsposter:2204" - volumes: - - /data:/data - - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip - -# Nginx service - nginx: - container_name: nginx - restart: always - tmpfs: - - /var/tmp/nginx/client_body - - /var/tmp/nginx/proxy - - /var/tmp/nginx/fastcgi - - /var/tmp/nginx/uwsgi - - /var/tmp/nginx/scgi - - /run - - /var/lib/nginx/tmp:uid=100,gid=82 - network_mode: "host" - # ports: - # - "64297:64297" - # - "127.0.0.1:64304:64304" - image: "dtagdevsec/nginx:2204" - read_only: true - volumes: - - /data/nginx/cert/:/etc/nginx/cert/:ro - - /data/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro - - /data/nginx/log/:/var/log/nginx/ - -# Spiderfoot service - spiderfoot: - container_name: spiderfoot - restart: always - networks: - - spiderfoot_local - ports: - - "127.0.0.1:64303:8080" - image: "dtagdevsec/spiderfoot:2204" - volumes: - - /data/spiderfoot:/home/spiderfoot/.spiderfoot diff --git a/etc/compose/mini.yml b/etc/compose/mini.yml deleted file mode 100644 index 1c328af3..00000000 --- a/etc/compose/mini.yml +++ /dev/null @@ -1,271 +0,0 @@ -# T-Pot (Mini) -# Do not erase ports sections, these are used by /opt/tpot/bin/rules.sh to setup iptables ACCEPT rules for NFQ (honeytrap / glutton) -version: '2.3' - -networks: - honeypots_local: - ewsposter_local: - spiderfoot_local: - -services: - -################## -#### Honeypots -################## - -# qHoneypots service - honeypots: - container_name: honeypots - stdin_open: true - tty: true - restart: always - tmpfs: - - /tmp:uid=2000,gid=2000 - networks: - - honeypots_local - ports: - - "21:21" - - "22:22" - - "23:23" - - "25:25" - - "53:53/udp" - - "80:80" - - "110:110" - - "123:123" - - "143:143" - - "161:161" - - "389:389" - - "443:443" - - "445:445" - - "1080:1080" - - "1433:1433" - - "1521:1521" - - "3306:3306" - - "5060:5060" - - "5432:5432" - - "5900:5900" - - "6379:6379" - - "6667:6667" - - "8080:8080" - - "9200:9200" - - "11211:11211" - image: "dtagdevsec/honeypots:2204" - read_only: true - volumes: - - /data/honeypots/log:/var/log/honeypots - -# Honeytrap service - honeytrap: - container_name: honeytrap - restart: always - tmpfs: - - /tmp/honeytrap:uid=2000,gid=2000 - network_mode: "host" - cap_add: - - NET_ADMIN - image: "dtagdevsec/honeytrap:2204" - read_only: true - volumes: - - /data/honeytrap/attacks:/opt/honeytrap/var/attacks - - /data/honeytrap/downloads:/opt/honeytrap/var/downloads - - /data/honeytrap/log:/opt/honeytrap/var/log - - -################## -#### NSM -################## - -# Fatt service - fatt: - container_name: fatt - restart: always - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/fatt:2204" - volumes: - - /data/fatt/log:/opt/fatt/log - -# P0f service - p0f: - container_name: p0f - restart: always - network_mode: "host" - image: "dtagdevsec/p0f:2204" - read_only: true - volumes: - - /data/p0f/log:/var/log/p0f - -# Suricata service - suricata: - container_name: suricata - restart: always - environment: - # For ET Pro ruleset replace "OPEN" with your OINKCODE - - OINKCODE=OPEN - # Loading externel Rules from URL - # - FROMURL="https://username:password@yoururl.com|https://username:password@otherurl.com" - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/suricata:2204" - volumes: - - /data/suricata/log:/var/log/suricata - - -################## -#### Tools -################## - -#### ELK -## Elasticsearch service - elasticsearch: - container_name: elasticsearch - restart: always - environment: - - bootstrap.memory_lock=true - - ES_JAVA_OPTS=-Xms2048m -Xmx2048m - - ES_TMPDIR=/tmp - cap_add: - - IPC_LOCK - ulimits: - memlock: - soft: -1 - hard: -1 - nofile: - soft: 65536 - hard: 65536 - mem_limit: 4g - ports: - - "127.0.0.1:64298:9200" - image: "dtagdevsec/elasticsearch:2204" - volumes: - - /data:/data - -## Kibana service - kibana: - container_name: kibana - restart: always - depends_on: - elasticsearch: - condition: service_healthy - mem_limit: 1g - ports: - - "127.0.0.1:64296:5601" - image: "dtagdevsec/kibana:2204" - -## Logstash service - logstash: - container_name: logstash - restart: always - environment: - - LS_JAVA_OPTS=-Xms1024m -Xmx1024m - depends_on: - elasticsearch: - condition: service_healthy - env_file: - - /opt/tpot/etc/compose/elk_environment - mem_limit: 2g - image: "dtagdevsec/logstash:2204" - volumes: - - /data:/data - -## Map Redis Service - map_redis: - container_name: map_redis - restart: always - stop_signal: SIGKILL - tty: true - image: "dtagdevsec/redis:2204" - read_only: true - -## Map Web Service - map_web: - container_name: map_web - restart: always - environment: - - MAP_COMMAND=AttackMapServer.py - env_file: - - /opt/tpot/etc/compose/elk_environment - stop_signal: SIGKILL - tty: true - ports: - - "127.0.0.1:64299:64299" - image: "dtagdevsec/map:2204" - -## Map Data Service - map_data: - container_name: map_data - restart: always - depends_on: - elasticsearch: - condition: service_healthy - environment: - - MAP_COMMAND=DataServer_v2.py - env_file: - - /opt/tpot/etc/compose/elk_environment - stop_signal: SIGKILL - tty: true - image: "dtagdevsec/map:2204" -#### /ELK - -# Ewsposter service - ewsposter: - container_name: ewsposter - restart: always - networks: - - ewsposter_local - environment: - - EWS_HPFEEDS_ENABLE=false - - EWS_HPFEEDS_HOST=host - - EWS_HPFEEDS_PORT=port - - EWS_HPFEEDS_CHANNELS=channels - - EWS_HPFEEDS_IDENT=user - - EWS_HPFEEDS_SECRET=secret - - EWS_HPFEEDS_TLSCERT=false - - EWS_HPFEEDS_FORMAT=json - env_file: - - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/ewsposter:2204" - volumes: - - /data:/data - - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip - -# Nginx service - nginx: - container_name: nginx - restart: always - tmpfs: - - /var/tmp/nginx/client_body - - /var/tmp/nginx/proxy - - /var/tmp/nginx/fastcgi - - /var/tmp/nginx/uwsgi - - /var/tmp/nginx/scgi - - /run - - /var/lib/nginx/tmp:uid=100,gid=82 - network_mode: "host" - # ports: - # - "64297:64297" - # - "127.0.0.1:64304:64304" - image: "dtagdevsec/nginx:2204" - read_only: true - volumes: - - /data/nginx/cert/:/etc/nginx/cert/:ro - - /data/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro - - /data/nginx/log/:/var/log/nginx/ - -# Spiderfoot service - spiderfoot: - container_name: spiderfoot - restart: always - networks: - - spiderfoot_local - ports: - - "127.0.0.1:64303:8080" - image: "dtagdevsec/spiderfoot:2204" - volumes: - - /data/spiderfoot:/home/spiderfoot/.spiderfoot diff --git a/etc/compose/sensor.yml b/etc/compose/sensor.yml deleted file mode 100644 index 15cd5613..00000000 --- a/etc/compose/sensor.yml +++ /dev/null @@ -1,535 +0,0 @@ -# T-Pot (Sensor) -# Do not erase ports sections, these are used by /opt/tpot/bin/rules.sh to setup iptables ACCEPT rules for NFQ (honeytrap / glutton) -version: '2.3' - -networks: - adbhoney_local: - ciscoasa_local: - citrixhoneypot_local: - conpot_local_IEC104: - conpot_local_guardian_ast: - conpot_local_ipmi: - conpot_local_kamstrup_382: - cowrie_local: - ddospot_local: - dicompot_local: - dionaea_local: - elasticpot_local: - heralding_local: - ipphoney_local: - mailoney_local: - medpot_local: - redishoneypot_local: - tanner_local: - ewsposter_local: - sentrypeer_local: - spiderfoot_local: - -services: - -################## -#### Honeypots -################## - -# Adbhoney service - adbhoney: - container_name: adbhoney - restart: always - networks: - - adbhoney_local - ports: - - "5555:5555" - image: "dtagdevsec/adbhoney:2204" - read_only: true - volumes: - - /data/adbhoney/log:/opt/adbhoney/log - - /data/adbhoney/downloads:/opt/adbhoney/dl - -# Ciscoasa service - ciscoasa: - container_name: ciscoasa - restart: always - tmpfs: - - /tmp/ciscoasa:uid=2000,gid=2000 - networks: - - ciscoasa_local - ports: - - "5000:5000/udp" - - "8443:8443" - image: "dtagdevsec/ciscoasa:2204" - read_only: true - volumes: - - /data/ciscoasa/log:/var/log/ciscoasa - -# CitrixHoneypot service - citrixhoneypot: - container_name: citrixhoneypot - restart: always - networks: - - citrixhoneypot_local - ports: - - "443:443" - image: "dtagdevsec/citrixhoneypot:2204" - read_only: true - volumes: - - /data/citrixhoneypot/logs:/opt/citrixhoneypot/logs - -# Conpot IEC104 service - conpot_IEC104: - container_name: conpot_iec104 - restart: always - environment: - - CONPOT_CONFIG=/etc/conpot/conpot.cfg - - CONPOT_JSON_LOG=/var/log/conpot/conpot_IEC104.json - - CONPOT_LOG=/var/log/conpot/conpot_IEC104.log - - CONPOT_TEMPLATE=IEC104 - - CONPOT_TMP=/tmp/conpot - tmpfs: - - /tmp/conpot:uid=2000,gid=2000 - networks: - - conpot_local_IEC104 - ports: - - "161:161/udp" - - "2404:2404" - image: "dtagdevsec/conpot:2204" - read_only: true - volumes: - - /data/conpot/log:/var/log/conpot - -# Conpot guardian_ast service - conpot_guardian_ast: - container_name: conpot_guardian_ast - restart: always - environment: - - CONPOT_CONFIG=/etc/conpot/conpot.cfg - - CONPOT_JSON_LOG=/var/log/conpot/conpot_guardian_ast.json - - CONPOT_LOG=/var/log/conpot/conpot_guardian_ast.log - - CONPOT_TEMPLATE=guardian_ast - - CONPOT_TMP=/tmp/conpot - tmpfs: - - /tmp/conpot:uid=2000,gid=2000 - networks: - - conpot_local_guardian_ast - ports: - - "10001:10001" - image: "dtagdevsec/conpot:2204" - read_only: true - volumes: - - /data/conpot/log:/var/log/conpot - -# Conpot ipmi - conpot_ipmi: - container_name: conpot_ipmi - restart: always - environment: - - CONPOT_CONFIG=/etc/conpot/conpot.cfg - - CONPOT_JSON_LOG=/var/log/conpot/conpot_ipmi.json - - CONPOT_LOG=/var/log/conpot/conpot_ipmi.log - - CONPOT_TEMPLATE=ipmi - - CONPOT_TMP=/tmp/conpot - tmpfs: - - /tmp/conpot:uid=2000,gid=2000 - networks: - - conpot_local_ipmi - ports: - - "623:623/udp" - image: "dtagdevsec/conpot:2204" - read_only: true - volumes: - - /data/conpot/log:/var/log/conpot - -# Conpot kamstrup_382 - conpot_kamstrup_382: - container_name: conpot_kamstrup_382 - restart: always - environment: - - CONPOT_CONFIG=/etc/conpot/conpot.cfg - - CONPOT_JSON_LOG=/var/log/conpot/conpot_kamstrup_382.json - - CONPOT_LOG=/var/log/conpot/conpot_kamstrup_382.log - - CONPOT_TEMPLATE=kamstrup_382 - - CONPOT_TMP=/tmp/conpot - tmpfs: - - /tmp/conpot:uid=2000,gid=2000 - networks: - - conpot_local_kamstrup_382 - ports: - - "1025:1025" - - "50100:50100" - image: "dtagdevsec/conpot:2204" - read_only: true - volumes: - - /data/conpot/log:/var/log/conpot - -# Cowrie service - cowrie: - container_name: cowrie - restart: always - tmpfs: - - /tmp/cowrie:uid=2000,gid=2000 - - /tmp/cowrie/data:uid=2000,gid=2000 - networks: - - cowrie_local - ports: - - "22:22" - - "23:23" - image: "dtagdevsec/cowrie:2204" - read_only: true - volumes: - - /data/cowrie/downloads:/home/cowrie/cowrie/dl - - /data/cowrie/keys:/home/cowrie/cowrie/etc - - /data/cowrie/log:/home/cowrie/cowrie/log - - /data/cowrie/log/tty:/home/cowrie/cowrie/log/tty - -# Ddospot service - ddospot: - container_name: ddospot - restart: always - networks: - - ddospot_local - ports: - - "19:19/udp" - - "53:53/udp" - - "123:123/udp" -# - "161:161/udp" - - "1900:1900/udp" - image: "dtagdevsec/ddospot:2204" - read_only: true - volumes: - - /data/ddospot/log:/opt/ddospot/ddospot/logs - - /data/ddospot/bl:/opt/ddospot/ddospot/bl - - /data/ddospot/db:/opt/ddospot/ddospot/db - -# Dicompot service -# Get the Horos Client for testing: https://horosproject.org/ -# Get Dicom images (CC BY 3.0): https://www.cancerimagingarchive.net/collections/ -# Put images (which must be in Dicom DCM format or it will not work!) into /data/dicompot/images - dicompot: - container_name: dicompot - restart: always - networks: - - dicompot_local - ports: - - "11112:11112" - image: "dtagdevsec/dicompot:2204" - read_only: true - volumes: - - /data/dicompot/log:/var/log/dicompot -# - /data/dicompot/images:/opt/dicompot/images - -# Dionaea service - dionaea: - container_name: dionaea - stdin_open: true - tty: true - restart: always - networks: - - dionaea_local - ports: - - "20:20" - - "21:21" - - "42:42" - - "69:69/udp" - - "81:81" - - "135:135" - # - "443:443" - - "445:445" - - "1433:1433" - - "1723:1723" - - "1883:1883" - - "3306:3306" - # - "5060:5060" - # - "5060:5060/udp" - # - "5061:5061" - - "27017:27017" - image: "dtagdevsec/dionaea:2204" - read_only: true - volumes: - - /data/dionaea/roots/ftp:/opt/dionaea/var/dionaea/roots/ftp - - /data/dionaea/roots/tftp:/opt/dionaea/var/dionaea/roots/tftp - - /data/dionaea/roots/www:/opt/dionaea/var/dionaea/roots/www - - /data/dionaea/roots/upnp:/opt/dionaea/var/dionaea/roots/upnp - - /data/dionaea:/opt/dionaea/var/dionaea - - /data/dionaea/binaries:/opt/dionaea/var/dionaea/binaries - - /data/dionaea/log:/opt/dionaea/var/log - - /data/dionaea/rtp:/opt/dionaea/var/dionaea/rtp - -# ElasticPot service - elasticpot: - container_name: elasticpot - restart: always - networks: - - elasticpot_local - ports: - - "9200:9200" - image: "dtagdevsec/elasticpot:2204" - read_only: true - volumes: - - /data/elasticpot/log:/opt/elasticpot/log - -# Heralding service - heralding: - container_name: heralding - restart: always - tmpfs: - - /tmp/heralding:uid=2000,gid=2000 - networks: - - heralding_local - ports: - # - "21:21" - # - "22:22" - # - "23:23" - # - "25:25" - # - "80:80" - - "110:110" - - "143:143" - # - "443:443" - - "465:465" - - "993:993" - - "995:995" - # - "3306:3306" - # - "3389:3389" - - "1080:1080" - - "5432:5432" - - "5900:5900" - image: "dtagdevsec/heralding:2204" - read_only: true - volumes: - - /data/heralding/log:/var/log/heralding - -# Honeytrap service - honeytrap: - container_name: honeytrap - restart: always - tmpfs: - - /tmp/honeytrap:uid=2000,gid=2000 - network_mode: "host" - cap_add: - - NET_ADMIN - image: "dtagdevsec/honeytrap:2204" - read_only: true - volumes: - - /data/honeytrap/attacks:/opt/honeytrap/var/attacks - - /data/honeytrap/downloads:/opt/honeytrap/var/downloads - - /data/honeytrap/log:/opt/honeytrap/var/log - -# Ipphoney service - ipphoney: - container_name: ipphoney - restart: always - networks: - - ipphoney_local - ports: - - "631:631" - image: "dtagdevsec/ipphoney:2204" - read_only: true - volumes: - - /data/ipphoney/log:/opt/ipphoney/log - -# Mailoney service - mailoney: - container_name: mailoney - restart: always - environment: - - HPFEEDS_SERVER= - - HPFEEDS_IDENT=user - - HPFEEDS_SECRET=pass - - HPFEEDS_PORT=20000 - - HPFEEDS_CHANNELPREFIX=prefix - networks: - - mailoney_local - ports: - - "25:25" - image: "dtagdevsec/mailoney:2204" - read_only: true - volumes: - - /data/mailoney/log:/opt/mailoney/logs - -# Medpot service - medpot: - container_name: medpot - restart: always - networks: - - medpot_local - ports: - - "2575:2575" - image: "dtagdevsec/medpot:2204" - read_only: true - volumes: - - /data/medpot/log/:/var/log/medpot - -# Redishoneypot service - redishoneypot: - container_name: redishoneypot - restart: always - networks: - - redishoneypot_local - ports: - - "6379:6379" - image: "dtagdevsec/redishoneypot:2204" - read_only: true - volumes: - - /data/redishoneypot/log:/var/log/redishoneypot - -# SentryPeer service - sentrypeer: - container_name: sentrypeer - restart: always -# SentryPeer offers to exchange bad actor data via DHT / P2P mode by setting the ENV to true (1) -# In some cases (i.e. internally deployed T-Pots) this might be confusing as SentryPeer will show -# the bad actors in its logs. Therefore this option is opt-in based. -# environment: -# - SENTRYPEER_PEER_TO_PEER=0 - networks: - - sentrypeer_local - ports: -# - "4222:4222/udp" - - "5060:5060/udp" -# - "127.0.0.1:8082:8082" - image: "dtagdevsec/sentrypeer:2204" - read_only: true - volumes: - - /data/sentrypeer/log:/var/log/sentrypeer - -#### Snare / Tanner -## Tanner Redis Service - tanner_redis: - container_name: tanner_redis - restart: always - tty: true - networks: - - tanner_local - image: "dtagdevsec/redis:2204" - read_only: true - -## PHP Sandbox service - tanner_phpox: - container_name: tanner_phpox - restart: always - tty: true - networks: - - tanner_local - image: "dtagdevsec/phpox:2204" - read_only: true - -## Tanner API Service - tanner_api: - container_name: tanner_api - restart: always - tmpfs: - - /tmp/tanner:uid=2000,gid=2000 - tty: true - networks: - - tanner_local - image: "dtagdevsec/tanner:2204" - read_only: true - volumes: - - /data/tanner/log:/var/log/tanner - command: tannerapi - depends_on: - - tanner_redis - -## Tanner Service - tanner: - container_name: tanner - restart: always - tmpfs: - - /tmp/tanner:uid=2000,gid=2000 - tty: true - networks: - - tanner_local - image: "dtagdevsec/tanner:2204" - command: tanner - read_only: true - volumes: - - /data/tanner/log:/var/log/tanner - - /data/tanner/files:/opt/tanner/files - depends_on: - - tanner_api -# - tanner_web - - tanner_phpox - -## Snare Service - snare: - container_name: snare - restart: always - tty: true - networks: - - tanner_local - ports: - - "80:80" - image: "dtagdevsec/snare:2204" - depends_on: - - tanner - - -################## -#### NSM -################## - -# Fatt service - fatt: - container_name: fatt - restart: always - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/fatt:2204" - volumes: - - /data/fatt/log:/opt/fatt/log - -# P0f service - p0f: - container_name: p0f - restart: always - network_mode: "host" - image: "dtagdevsec/p0f:2204" - read_only: true - volumes: - - /data/p0f/log:/var/log/p0f - -# Suricata service - suricata: - container_name: suricata - restart: always - environment: - # For ET Pro ruleset replace "OPEN" with your OINKCODE - - OINKCODE=OPEN - # Loading externel Rules from URL - # - FROMURL="https://username:password@yoururl.com|https://username:password@otherurl.com" - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/suricata:2204" - volumes: - - /data/suricata/log:/var/log/suricata - - -################## -#### Tools -################## - -# Ewsposter service - ewsposter: - container_name: ewsposter - restart: always - networks: - - ewsposter_local - environment: - - EWS_HPFEEDS_ENABLE=false - - EWS_HPFEEDS_HOST=host - - EWS_HPFEEDS_PORT=port - - EWS_HPFEEDS_CHANNELS=channels - - EWS_HPFEEDS_IDENT=user - - EWS_HPFEEDS_SECRET=secret - - EWS_HPFEEDS_TLSCERT=false - - EWS_HPFEEDS_FORMAT=json - env_file: - - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/ewsposter:2204" - volumes: - - /data:/data - - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip diff --git a/etc/compose/tarpit.yml b/etc/compose/tarpit.yml deleted file mode 100644 index 377e94ec..00000000 --- a/etc/compose/tarpit.yml +++ /dev/null @@ -1,287 +0,0 @@ -# T-Pot (Tarpit) -# Do not erase ports sections, these are used by /opt/tpot/bin/rules.sh to setup iptables ACCEPT rules for NFQ (honeytrap / glutton) -version: '2.3' - -networks: - endlessh_local: - hellpot_local: - heralding_local: - ewsposter_local: - spiderfoot_local: - -services: - -################## -#### Honeypots -################## - -# Endlessh service - endlessh: - container_name: endlessh - restart: always - networks: - - endlessh_local - ports: - - "22:2222" - image: "dtagdevsec/endlessh:2204" - read_only: true - volumes: - - /data/endlessh/log:/var/log/endlessh - -# Heralding service - heralding: - container_name: heralding - restart: always - tmpfs: - - /tmp/heralding:uid=2000,gid=2000 - networks: - - heralding_local - ports: - # - "21:21" - # - "22:22" - # - "23:23" - # - "25:25" - # - "80:80" - - "110:110" - - "143:143" - # - "443:443" - - "465:465" - - "993:993" - - "995:995" - # - "3306:3306" - # - "3389:3389" - - "1080:1080" - - "5432:5432" - - "5900:5900" - image: "dtagdevsec/heralding:2204" - read_only: true - volumes: - - /data/heralding/log:/var/log/heralding - -# Honeytrap service - honeytrap: - container_name: honeytrap - restart: always - tmpfs: - - /tmp/honeytrap:uid=2000,gid=2000 - network_mode: "host" - cap_add: - - NET_ADMIN - image: "dtagdevsec/honeytrap:2204" - read_only: true - volumes: - - /data/honeytrap/attacks:/opt/honeytrap/var/attacks - - /data/honeytrap/downloads:/opt/honeytrap/var/downloads - - /data/honeytrap/log:/opt/honeytrap/var/log - -# Hellpot service - hellpot: - container_name: hellpot - restart: always - networks: - - hellpot_local - ports: - - "80:8080" - image: "dtagdevsec/hellpot:2204" - read_only: true - volumes: - - /data/hellpot/log:/var/log/hellpot - -################## -#### NSM -################## - -# Fatt service - fatt: - container_name: fatt - restart: always - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/fatt:2204" - volumes: - - /data/fatt/log:/opt/fatt/log - -# P0f service - p0f: - container_name: p0f - restart: always - network_mode: "host" - image: "dtagdevsec/p0f:2204" - read_only: true - volumes: - - /data/p0f/log:/var/log/p0f - -# Suricata service - suricata: - container_name: suricata - restart: always - environment: - # For ET Pro ruleset replace "OPEN" with your OINKCODE - - OINKCODE=OPEN - # Loading externel Rules from URL - # - FROMURL="https://username:password@yoururl.com|https://username:password@otherurl.com" - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/suricata:2204" - volumes: - - /data/suricata/log:/var/log/suricata - - -################## -#### Tools -################## - -#### ELK -## Elasticsearch service - elasticsearch: - container_name: elasticsearch - restart: always - environment: - - bootstrap.memory_lock=true - - ES_JAVA_OPTS=-Xms2048m -Xmx2048m - - ES_TMPDIR=/tmp - cap_add: - - IPC_LOCK - ulimits: - memlock: - soft: -1 - hard: -1 - nofile: - soft: 65536 - hard: 65536 - mem_limit: 4g - ports: - - "127.0.0.1:64298:9200" - image: "dtagdevsec/elasticsearch:2204" - volumes: - - /data:/data - -## Kibana service - kibana: - container_name: kibana - restart: always - depends_on: - elasticsearch: - condition: service_healthy - mem_limit: 1g - ports: - - "127.0.0.1:64296:5601" - image: "dtagdevsec/kibana:2204" - -## Logstash service - logstash: - container_name: logstash - restart: always - environment: - - LS_JAVA_OPTS=-Xms1024m -Xmx1024m - depends_on: - elasticsearch: - condition: service_healthy - env_file: - - /opt/tpot/etc/compose/elk_environment - mem_limit: 2g - image: "dtagdevsec/logstash:2204" - volumes: - - /data:/data - -## Map Redis Service - map_redis: - container_name: map_redis - restart: always - stop_signal: SIGKILL - tty: true - image: "dtagdevsec/redis:2204" - read_only: true - -## Map Web Service - map_web: - container_name: map_web - restart: always - environment: - - MAP_COMMAND=AttackMapServer.py - env_file: - - /opt/tpot/etc/compose/elk_environment - stop_signal: SIGKILL - tty: true - ports: - - "127.0.0.1:64299:64299" - image: "dtagdevsec/map:2204" - -## Map Data Service - map_data: - container_name: map_data - restart: always - depends_on: - elasticsearch: - condition: service_healthy - environment: - - MAP_COMMAND=DataServer_v2.py - env_file: - - /opt/tpot/etc/compose/elk_environment - stop_signal: SIGKILL - tty: true - image: "dtagdevsec/map:2204" -#### /ELK - -# Ewsposter service - ewsposter: - container_name: ewsposter - restart: always - networks: - - ewsposter_local - environment: - - EWS_HPFEEDS_ENABLE=false - - EWS_HPFEEDS_HOST=host - - EWS_HPFEEDS_PORT=port - - EWS_HPFEEDS_CHANNELS=channels - - EWS_HPFEEDS_IDENT=user - - EWS_HPFEEDS_SECRET=secret - - EWS_HPFEEDS_TLSCERT=false - - EWS_HPFEEDS_FORMAT=json - env_file: - - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/ewsposter:2204" - volumes: - - /data:/data - - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip - -# Nginx service - nginx: - container_name: nginx - restart: always - tmpfs: - - /var/tmp/nginx/client_body - - /var/tmp/nginx/proxy - - /var/tmp/nginx/fastcgi - - /var/tmp/nginx/uwsgi - - /var/tmp/nginx/scgi - - /run - - /var/lib/nginx/tmp:uid=100,gid=82 - network_mode: "host" - # ports: - # - "64297:64297" - # - "127.0.0.1:64304:64304" - image: "dtagdevsec/nginx:2204" - read_only: true - volumes: - - /data/nginx/cert/:/etc/nginx/cert/:ro - - /data/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro - - /data/nginx/log/:/var/log/nginx/ - -# Spiderfoot service - spiderfoot: - container_name: spiderfoot - restart: always - networks: - - spiderfoot_local - ports: - - "127.0.0.1:64303:8080" - image: "dtagdevsec/spiderfoot:2204" - volumes: - - /data/spiderfoot:/home/spiderfoot/.spiderfoot diff --git a/etc/objects/elkbase.tgz b/etc/objects/elkbase.tgz deleted file mode 100644 index 8370fec4..00000000 Binary files a/etc/objects/elkbase.tgz and /dev/null differ diff --git a/etc/objects/kibana_export.ndjson.zip b/etc/objects/kibana_export.ndjson.zip deleted file mode 100644 index 121d12d2..00000000 Binary files a/etc/objects/kibana_export.ndjson.zip and /dev/null differ diff --git a/genuser.sh b/genuser.sh new file mode 100755 index 00000000..7835721f --- /dev/null +++ b/genuser.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +docker run -v $HOME/tpotce:/data --entrypoint bash -it -u $(id -u):$(id -g) dtagdevsec/tpotinit:24.04 "/opt/tpot/bin/genuser.sh" diff --git a/host/etc/rc.local b/host/etc/rc.local deleted file mode 100755 index 68f6775a..00000000 --- a/host/etc/rc.local +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -/opt/tpot/bin/updateip.sh -exit 0 diff --git a/host/etc/systemd/tpot.service b/host/etc/systemd/tpot.service deleted file mode 100644 index 96241fa2..00000000 --- a/host/etc/systemd/tpot.service +++ /dev/null @@ -1,42 +0,0 @@ -[Unit] -Description=tpot -Requires=docker.service -After=docker.service - -[Service] -Restart=always -RestartSec=5 -TimeoutSec=infinity - -# Get and set internal, external IP infos, but ignore errors -ExecStartPre=-/opt/tpot/bin/updateip.sh - -# Clear state or if persistence is enabled rotate and compress logs from /data -ExecStartPre=-/bin/bash -c '/opt/tpot/bin/clean.sh on' - -# Remove old containers, images and volumes -ExecStartPre=/opt/tpot/bin/tpdclean.sh -y - -# Get IF, disable offloading, enable promiscious mode for p0f and suricata -ExecStartPre=-/bin/bash -c '/sbin/ethtool --offload $(/sbin/ip address | grep "^2: " | awk \'{ print $2 }\' | tr -d [:punct:]) rx off tx off' -ExecStartPre=/bin/bash -c '/sbin/ethtool -K $(/sbin/ip address | grep "^2: " | awk \'{ print $2 }\' | tr -d [:punct:]) gso off gro off' -ExecStartPre=/bin/bash -c '/sbin/ip link set $(/sbin/ip address | grep "^2: " | awk \'{ print $2 }\' | tr -d [:punct:]) promisc on' - -# Set iptables accept rules to avoid forwarding to honeytrap / NFQUEUE -# Forward all other connections to honeytrap / NFQUEUE -ExecStartPre=/opt/tpot/bin/rules.sh /opt/tpot/etc/tpot.yml set - -# Compose T-Pot up -ExecStart=/usr/bin/docker-compose -f /opt/tpot/etc/tpot.yml up --no-color - -# We want to see true source for UDP packets in container (https://github.com/moby/libnetwork/issues/1994) -ExecStartPost=/bin/bash -c '/usr/bin/sleep 30 && /usr/sbin/conntrack -D -p udp' - -# Compose T-Pot down, remove containers and volumes -ExecStop=/usr/bin/docker-compose -f /opt/tpot/etc/tpot.yml down -v - -# Remove only previously set iptables rules -ExecStopPost=/opt/tpot/bin/rules.sh /opt/tpot/etc/tpot.yml unset - -[Install] -WantedBy=multi-user.target diff --git a/host/usr/share/dict/a.txt b/host/usr/share/dict/a.txt deleted file mode 100644 index a663034c..00000000 --- a/host/usr/share/dict/a.txt +++ /dev/null @@ -1,1466 +0,0 @@ -average -big -colossal -fat -giant -gigantic -great -huge -immense -large -little -long -mammoth -massive -miniature -petite -puny -short -small -tall -tiny -boiling -breezy -broken -bumpy -chilly -cold -cool -creepy -crooked -cuddly -curly -damaged -damp -dirty -dry -dusty -filthy -flaky -fluffy -wet -broad -chubby -crooked -curved -deep -flat -high -hollow -low -narrow -round -shallow -skinny -square -steep -straight -wide -ancient -brief -early -fast -late -long -modern -old -oldfashioned -quick -rapid -short -slow -swift -young -abundant -empty -few -heavy -light -many -numerous -Sound -cooing -deafening -faint -harsh -highpitched -hissing -hushed -husky -loud -melodic -moaning -mute -noisy -purring -quiet -raspy -resonant -screeching -shrill -silent -soft -squealing -thundering -voiceless -whispering -bitter -delicious -fresh -juicy -ripe -rotten -salty -sour -spicy -stale -sticky -strong -sweet -tasteless -tasty -thirsty -fluttering -fuzzy -greasy -grubby -hard -hot -icy -loose -melted -plastic -prickly -rainy -rough -scattered -shaggy -shaky -sharp -shivering -silky -slimy -slippery -smooth -soft -solid -steady -sticky -tender -tight -uneven -weak -wet -wooden -afraid -angry -annoyed -anxious -arrogant -ashamed -awful -bad -bewildered -bored -combative -condemned -confused -creepy -cruel -dangerous -defeated -defiant -depressed -disgusted -disturbed -eerie -embarrassed -envious -evil -fierce -foolish -frantic -frightened -grieving -helpless -homeless -hungry -hurt -ill -jealous -lonely -mysterious -naughty -nervous -obnoxious -outrageous -panicky -repulsive -scary -scornful -selfish -sore -tense -terrible -thoughtless -tired -troubled -upset -uptight -weary -wicked -worried -agreeable -amused -brave -calm -charming -cheerful -comfortable -cooperative -courageous -delightful -determined -eager -elated -enchanting -encouraging -energetic -enthusiastic -excited -exuberant -fair -faithful -fantastic -fine -friendly -funny -gentle -glorious -good -happy -healthy -helpful -hilarious -jolly -joyous -kind -lively -lovely -lucky -obedient -perfect -pleasant -proud -relieved -silly -smiling -splendid -successful -thoughtful -victorious -vivacious -witty -wonderful -zealous -zany -other -good -new -old -great -high -small -different -large -local -social -important -long -young -national -british -right -early -possible -big -little -political -able -late -general -full -far -low -public -available -bad -main -sure -clear -major -economic -only -likely -real -black -particular -international -special -difficult -certain -open -whole -white -free -short -easy -strong -european -central -similar -human -common -necessary -single -personal -hard -private -poor -financial -wide -foreign -simple -recent -concerned -american -various -close -fine -english -wrong -present -royal -natural -individual -nice -french -following -current -modern -labour -legal -happy -final -red -normal -serious -previous -total -prime -significant -industrial -sorry -dead -specific -appropriate -top -soviet -basic -military -original -successful -aware -hon -popular -heavy -professional -direct -dark -cold -ready -green -useful -effective -western -traditional -scottish -german -independent -deep -interesting -considerable -involved -physical -left -hot -existing -responsible -complete -medical -blue -extra -past -male -interested -fair -essential -beautiful -civil -primary -obvious -future -environmental -positive -senior -nuclear -annual -relevant -huge -rich -commercial -safe -regional -practical -official -separate -key -chief -regular -due -additional -active -powerful -complex -standard -impossible -light -warm -middle -fresh -sexual -front -domestic -actual -united -technical -ordinary -cheap -strange -internal -excellent -quiet -soft -potential -northern -religious -quick -very -famous -cultural -proper -broad -joint -formal -limited -conservative -lovely -usual -ltd -unable -rural -initial -substantial -christian -bright -average -leading -reasonable -immediate -suitable -equal -detailed -working -overall -female -afraid -democratic -growing -sufficient -scientific -eastern -correct -inc -irish -expensive -educational -mental -dangerous -critical -increased -familiar -unlikely -double -perfect -slow -tiny -dry -historical -thin -daily -southern -increasing -wild -alone -urban -empty -married -narrow -liberal -supposed -upper -apparent -tall -busy -bloody -prepared -russian -moral -careful -clean -attractive -japanese -vital -thick -alternative -fast -ancient -elderly -rare -external -capable -brief -wonderful -grand -typical -entire -grey -constant -vast -surprised -ideal -terrible -academic -funny -minor -pleased -severe -ill -corporate -negative -permanent -weak -brown -fundamental -odd -crucial -inner -used -criminal -contemporary -sharp -sick -near -roman -massive -unique -secondary -parliamentary -african -unknown -subsequent -angry -alive -guilty -lucky -enormous -well -communist -yellow -unusual -net -longterm -tough -dear -extensive -glad -remaining -agricultural -alright -healthy -italian -principal -tired -efficient -comfortable -chinese -relative -friendly -conventional -willing -sudden -proposed -voluntary -slight -valuable -dramatic -golden -temporary -federal -keen -flat -silent -indian -videotaped -worried -pale -statutory -welsh -dependent -firm -wet -competitive -armed -radical -outside -acceptable -sensitive -living -pure -global -emotional -sad -secret -rapid -adequate -fixed -sweet -administrative -wooden -remarkable -comprehensive -surprising -solid -rough -mere -mass -brilliant -maximum -absolute -tory -electronic -visual -electric -cool -spanish -literary -continuing -supreme -chemical -genuine -exciting -written -stupid -advanced -extreme -classical -fit -favourite -socialist -widespread -confident -straight -catholic -proud -numerous -opposite -distinct -mad -helpful -given -disabled -consistent -anxious -nervous -awful -stable -constitutional -satisfied -conscious -developing -strategic -holy -smooth -dominant -remote -theoretical -outstanding -pink -pretty -clinical -minimum -honest -impressive -related -residential -extraordinary -plain -visible -accurate -distant -still -greek -complicated -musical -precise -gentle -broken -live -silly -fat -tight -monetary -round -psychological -violent -unemployed -inevitable -junior -sensible -grateful -pleasant -dirty -structural -welcome -socalled -deaf -above -continuous -blind -overseas -mean -entitled -delighted -loose -occasional -evident -desperate -fellow -universal -square -steady -classic -equivalent -intellectual -victorian -level -ultimate -creative -lost -medieval -clever -linguistic -convinced -judicial -raw -sophisticated -asleep -vulnerable -illegal -outer -revolutionary -bitter -changing -australian -native -imperial -strict -wise -informal -flexible -collective -frequent -experimental -spiritual -intense -rational -ethnic -generous -inadequate -prominent -logical -bare -historic -modest -dutch -acute -electrical -valid -weekly -gross -automatic -loud -reliable -mutual -liable -multiple -ruling -curious -arab -sole -jewish -managing -pregnant -latin -nearby -exact -underlying -identical -satisfactory -marginal -distinctive -electoral -urgent -presidential -controversial -oral -everyday -encouraging -organic -continued -expected -statistical -desirable -innocent -improved -exclusive -marked -experienced -unexpected -superb -sheer -disappointed -frightened -fulltime -gastric -capitalist -romantic -naked -reluctant -magnificent -convenient -established -closed -uncertain -artificial -diplomatic -tremendous -marine -mechanical -retail -institutional -mixed -required -biological -known -functional -straightforward -superior -digital -parttime -spectacular -unhappy -confused -unfair -aggressive -spare -painful -abstract -asian -associated -legislative -monthly -intelligent -hungry -explicit -nasty -just -faint -coloured -ridiculous -amazing -comparable -successive -workingclass -realistic -back -decent -unnecessary -flying -fucking -random -influential -dull -genetic -neat -marvellous -crazy -damp -giant -secure -bottom -skilled -subtle -elegant -brave -lesser -parallel -steep -intensive -casual -tropical -lonely -partial -preliminary -concrete -alleged -assistant -vertical -upset -delicate -mild -occupational -excessive -progressive -iraqi -exceptional -integrated -striking -continental -okay -harsh -combined -fierce -handsome -characteristic -chronic -compulsory -interim -objective -splendid -magic -shortterm -systematic -obliged -payable -fun -horrible -primitive -fascinating -ideological -metropolitan -surrounding -estimated -peaceful -premier -operational -technological -kind -advisory -hostile -precious -gay -accessible -determined -excited -impressed -provincial -smart -endless -isolated -postwar -drunk -geographical -like -dynamic -boring -forthcoming -unfortunate -definite -super -notable -indirect -stiff -wealthy -awkward -lively -neutral -artistic -content -mature -colonial -ambitious -evil -magnetic -verbal -legitimate -sympathetic -wellknown -empirical -head -shallow -vague -naval -depressed -shared -added -shocked -mid -worthwhile -qualified -missing -blank -absent -favourable -polish -israeli -developed -profound -representative -enthusiastic -dreadful -rigid -reduced -cruel -coastal -peculiar -racial -ugly -swiss -crude -extended -selected -eager -feminist -canadian -bold -relaxed -corresponding -running -planned -applicable -immense -allied -comparative -uncomfortable -conservation -productive -beneficial -bored -charming -minimal -mobile -turkish -orange -rear -passive -suspicious -overwhelming -fatal -resulting -symbolic -registered -neighbouring -calm -irrelevant -patient -compact -profitable -rival -loyal -moderate -distinguished -interior -noble -insufficient -eligible -mysterious -varying -middleclass -managerial -molecular -olympic -linear -prospective -printed -parental -diverse -elaborate -furious -fiscal -burning -useless -semantic -embarrassed -inherent -philosophical -deliberate -awake -variable -promising -unpleasant -varied -sacred -selective -inclined -tender -hidden -worthy -intermediate -sound -protective -fortunate -slim -islamic -defensive -divine -stuck -driving -invisible -misleading -circular -mathematical -inappropriate -liquid -persistent -solar -doubtful -manual -architectural -intact -incredible -devoted -prior -tragic -respectable -optimistic -convincing -unacceptable -decisive -competent -spatial -respective -binding -relieved -nursing -toxic -select -redundant -integral -then -probable -amateur -fond -passing -specified -territorial -horizontal -oldfashioned -inland -cognitive -regulatory -miserable -resident -polite -scared -marxist -gothic -civilian -instant -lengthy -adverse -korean -unconscious -anonymous -aesthetic -orthodox -static -unaware -costly -fantastic -foolish -fashionable -causal -compatible -wee -implicit -dual -ok -cheerful -subjective -forward -surviving -exotic -purple -cautious -visiting -aggregate -ethical -protestant -teenage -largescale -dying -disastrous -delicious -confidential -underground -thorough -grim -autonomous -atomic -frozen -colourful -injured -uniform -ashamed -glorious -wicked -coherent -rising -shy -novel -balanced -delightful -arbitrary -adjacent -psychiatric -worrying -weird -unchanged -rolling -evolutionary -intimate -sporting -disciplinary -formidable -lexical -noisy -gradual -accused -homeless -supporting -coming -renewed -excess -retired -rubber -chosen -outdoor -embarrassing -preferred -bizarre -appalling -agreed -imaginative -governing -accepted -vocational -palestinian -mighty -puzzled -worldwide -handicapped -organisational -sunny -eldest -eventual -spontaneous -vivid -rude -nineteenthcentury -faithful -ministerial -innovative -controlled -conceptual -unwilling -civic -meaningful -disturbing -alive -brainy -breakable -busy -careful -cautious -clever -concerned -crazy -curious -dead -different -difficult -doubtful -easy -famous -fragile -helpful -helpless -important -impossible -innocent -inquisitive -modern -open -outstanding -poor -powerful -puzzled -real -rich -shy -sleepy -stupid -super -tame -uninterested -wandering -wild -wrong -adorable -alert -average -beautiful -blonde -bloody -blushing -bright -clean -clear -cloudy -colorful -crowded -cute -dark -drab -distinct -dull -elegant -fancy -filthy -glamorous -gleaming -graceful -grotesque -homely -light -misty -motionless -muddy -plain -poised -quaint -shiny -smoggy -sparkling -spotless -stormy -strange -ugly -unsightly -unusual -bad -better -beautiful -big -black -blue -bright -clumsy -crazy -dizzy -dull -fat -frail -friendly -funny -great -green -gigantic -gorgeous -grumpy -handsome -happy -horrible -itchy -jittery -jolly -kind -long -lazy -magnificent -magenta -many -mighty -mushy -nasty -new -nice -nosy -nutty -nutritious -odd -orange -ordinary -pretty -precious -prickly -purple -quaint -quiet -quick -quickest -rainy -rare -ratty -red -roasted -robust -round -sad -scary -scrawny -short -silly -stingy -strange -striped -spotty -tart -tall -tame -tan -tender -testy -tricky -tough -ugly -ugliest -vast -watery -wasteful -wideeyed -wonderful -yellow -yummy -zany diff --git a/host/usr/share/dict/n.txt b/host/usr/share/dict/n.txt deleted file mode 100644 index 0e5f2c37..00000000 --- a/host/usr/share/dict/n.txt +++ /dev/null @@ -1,4401 +0,0 @@ -aardvark -abacus -abbey -abdomen -ability -abolishment -abroad -accelerant -accelerator -accident -accompanist -accordion -account -accountant -achieve -achiever -acid -acknowledgment -acoustic -acoustics -acrylic -act -action -active -activity -actor -actress -acupuncture -ad -adapter -addiction -addition -address -adjustment -administration -adrenalin -adult -advancement -advantage -advertisement -advertising -advice -affair -affect -afghanistan -africa -aftermath -afternoon -aftershave -aftershock -afterthought -age -agency -agenda -agent -aglet -agreement -air -airbag -airbus -airfare -airforce -airline -airmail -airplane -airport -airship -alarm -alb -albatross -alcohol -alcove -alder -algebra -algeria -alibi -allergist -alley -alligator -alloy -almanac -almond -alpaca -alpenglow -alpenhorn -alpha -alphabet -alternative -altitude -alto -aluminium -aluminum -ambassador -ambition -ambulance -amendment -america -amount -amusement -anagram -analgesia -analog -analysis -analyst -anatomy -anesthesiology -anethesiologist -anger -angiosperm -angle -angora -angstrom -anguish -animal -anime -ankle -anklet -annual -anorak -answer -ant -antarctica -anteater -antechamber -antelope -anthony -anthropology -antler -anxiety -anybody -anything -anywhere -apartment -ape -aperitif -apology -apparatus -apparel -appeal -appearance -appendix -apple -applewood -appliance -application -appointment -approval -april -apron -apse -aquarius -aquifer -arch -archaeology -archeology -archer -architect -architecture -archrival -area -argentina -argument -aries -arithmetic -arm -armadillo -armament -armchair -armoire -armor -armrest -army -arrival -arrow -art -artichoke -article -artificer -ascot -ash -ashram -ashtray -asia -asparagus -aspect -asphalt -assignment -assistance -assistant -associate -association -assumption -asterisk -astrakhan -astrolabe -astrologer -astrology -astronomy -atelier -athelete -athlete -atm -atmosphere -atom -atrium -attachment -attack -attempt -attendant -attention -attenuation -attic -attitude -attorney -attraction -audience -auditorium -august -aunt -australia -author -authorisation -authority -authorization -automaton -avalanche -avenue -average -awareness -azimuth -babe -babies -baboon -babushka -baby -back -backbone -backdrop -backpack -bacon -bad -badge -badger -bafflement -bag -bagel -bagpipe -bagpipes -bail -bait -bake -baker -bakery -bakeware -balaclava -balalaika -balance -balcony -balinese -ball -balloon -ballpark -bamboo -banana -band -bandana -bandanna -bandolier -bangladesh -bangle -banjo -bank -bankbook -banker -banquette -baobab -bar -barbara -barbeque -barber -barbiturate -barge -baritone -barium -barn -barometer -barracks -barstool -base -baseball -basement -basin -basis -basket -basketball -bass -bassinet -bassoon -bat -bath -bather -bathhouse -bathrobe -bathroom -bathtub -batter -battery -batting -battle -battleship -bay -bayou -beach -bead -beak -beam -bean -beanie -beanstalk -bear -beard -beast -beat -beautician -beauty -beaver -bed -bedroom -bee -beech -beef -beer -beet -beetle -beggar -beginner -begonia -behavior -beheading -behest -belfry -belief -believe -bell -belligerency -bellows -belly -belt -bench -bend -beneficiary -benefit -bengal -beret -berry -bestseller -bestseller -betty -beverage -beyond -bibliography -bicycle -bid -bidet -bifocals -big -bigrig -bijou -bike -bikini -bill -billboard -bin -biology -biplane -birch -bird -birdbath -birdcage -birdhouse -birdwatcher -birth -birthday -bit -bite -black -blackberry -blackboard -blackfish -bladder -blade -blame -blank -blanket -blazer -blight -blinker -blister -blizzard -block -blocker -blood -bloodflow -bloom -bloomers -blossom -blouse -blow -blowgun -blowhole -blue -blueberry -boar -board -boat -boatbuilding -boatload -boatyard -bobcat -body -bog -bolero -bolt -bomb -bomber -bondsman -bone -bongo -bonnet -bonsai -bonus -boogeyman -book -bookcase -bookend -booklet -booster -boot -bootee -bootie -boots -booty -border -bore -bosom -botany -bottle -bottling -bottom -bottomline -boudoir -bough -boundary -bow -bower -bowl -bowler -bowling -bowtie -box -boxer -boxspring -boy -boyfriend -bra -brace -bracelet -bracket -brain -brake -branch -brand -brandy -brass -brassiere -bratwurst -brazil -bread -breadcrumb -break -breakfast -breakpoint -breast -breastplate -breath -breeze -bribery -brick -bricklaying -bridge -brief -briefs -brilliant -british -broccoli -brochure -broiler -broker -brome -bronchitis -bronco -bronze -brooch -brood -brook -broom -brother -brotherinlaw -brow -brown -brush -brushfire -brushing -bubble -bucket -buckle -bud -budget -buffer -buffet -bug -buggy -bugle -building -bulb -bull -bulldozer -bullet -bullfighter -bumper -bun -bunch -bungalow -bunghole -bunkhouse -burglar -burlesque -burma -burn -burnout -burst -bus -bush -business -bust -bustle -butane -butcher -butter -button -buy -buyer -buzzard -cabana -cabbage -cabin -cabinet -cable -caboose -cacao -cactus -caddy -cadet -cafe -caftan -cake -calcification -calculation -calculator -calculus -calendar -calf -calico -call -calm -camel -cameo -camera -camp -campaign -campanile -can -canada -canal -cancel -cancer -candelabra -candidate -candle -candy -cane -cannon -canoe -canon -canopy -canteen -canvas -cap -cape -capital -capitulation -capon -cappelletti -cappuccino -capricorn -captain -caption -car -caravan -carbon -card -cardboard -cardigan -care -cargo -carload -carnation -carol -carotene -carp -carpenter -carpet -carport -carriage -carrier -carrot -carry -cart -cartilage -cartload -cartoon -cartridge -cascade -case -casement -cash -cashier -casino -casserole -cassock -cast -castanet -castanets -castle -cat -catacomb -catamaran -category -caterpillar -cathedral -catsup -cattle -cauliflower -cause -caution -cave -cclamp -cd -ceiling -celebration -celeriac -celery -celeste -cell -cellar -cello -celsius -cement -cemetery -cenotaph -census -cent -centenarian -center -centimeter -centurion -century -cephalopod -ceramic -cereal -certification -cesspool -chador -chafe -chain -chainstay -chair -chairlift -chairman -chairperson -chairwoman -chaise -chalet -chalice -chalk -champion -championship -chance -chandelier -change -channel -chap -chapel -chapter -character -chard -charge -charity -charlatan -charles -charm -chart -chastity -chasuble -chateau -chauffeur -chauvinist -check -checkroom -cheek -cheese -cheetah -chef -chemistry -cheque -cherries -cherry -chess -chest -chick -chicken -chicory -chief -chiffonier -child -childhood -children -chill -chime -chimpanzee -chin -china -chinese -chino -chipmunk -chitchat -chivalry -chive -chocolate -choice -choker -chop -chopstick -chord -chowder -christmas -christopher -chrome -chromolithograph -chronograph -chronometer -chub -chug -church -churn -cicada -cigarette -cinema -circle -circulation -circumference -cirrus -citizenship -city -civilisation -clam -clank -clapboard -clarinet -clasp -class -classroom -claus -clave -clavicle -clavier -cleaner -cleat -cleavage -clef -cleric -clerk -click -client -cliff -climate -climb -clip -clipper -cloak -cloakroom -clock -clockwork -clogs -cloister -close -closet -cloth -clothes -clothing -cloud -cloudburst -cloudy -clove -clover -club -clutch -coach -coal -coast -coat -cob -cobweb -cockpit -cockroach -cocktail -cocoa -cod -codon -codpiece -coevolution -coffee -coffin -coil -coin -coinsurance -coke -cold -coliseum -collar -collection -college -collision -colloquia -colombia -colon -colonisation -colony -color -colt -column -columnist -comb -combat -combination -comfort -comfortable -comic -comma -command -commercial -commission -committee -communicant -communication -community -company -comparison -competition -competitor -complaint -complement -complex -component -comportment -composer -composition -compost -compulsion -computer -comradeship -concept -concert -conclusion -concrete -condition -condominium -condor -conductor -cone -confectionery -conference -confidence -confirmation -conflict -confusion -conga -congo -congressman -congressperson -congresswoman -conifer -connection -consent -consequence -console -consonant -conspirator -constant -constellation -construction -consul -consulate -contactlens -contagion -contest -context -continent -contract -contrail -contrary -contribution -control -convection -conversation -convert -convertible -cook -cookie -cooking -coonskin -cope -copout -copper -coproducer -copy -copyright -copywriter -cord -corduroy -cork -cormorant -corn -cornerstone -cornet -corral -correspondent -corridor -corsage -cost -costume -cot -cottage -cotton -couch -cougar -cough -council -councilman -councilor -councilperson -councilwoman -counter -counterforce -countess -country -county -couple -courage -course -court -cousin -covariate -cover -coverall -cow -cowbell -cowboy -crab -crack -cracker -crackers -cradle -craftsman -crash -crate -cravat -craw -crawdad -crayfish -crayon -cream -creative -creator -creature -creche -credenza -credit -creditor -creek -cremebrulee -crest -crew -crib -cribbage -cricket -cricketer -crime -criminal -crinoline -criteria -criterion -criticism -crocodile -crocus -croissant -crook -crop -cross -crosscontamination -crossstitch -crotch -croup -crow -crowd -crown -crude -crush -cry -crystallography -cub -cuban -cuckoo -cucumber -cufflinks -cultivar -cultivator -culture -culvert -cummerbund -cup -cupboard -cupcake -cupola -curio -curl -curler -currency -current -cursor -curtain -curve -cushion -custard -custodian -customer -cut -cuticle -cutlet -cutover -cutting -cyclamen -cycle -cyclone -cylinder -cymbal -cymbals -cynic -cyst -cytoplasm -dad -daffodil -dagger -dahlia -daisy -damage -dame -dance -dancer -danger -daniel -dark -dart -dash -dashboard -data -database -date -daughter -david -day -daybed -dead -deadline -deal -dealer -dear -death -deathwatch -deborah -debt -debtor -decade -december -decimal -decision -deck -declination -decongestant -decrease -decryption -dedication -deer -defense -deficit -definition -deformation -degree -delete -delivery -demand -demur -den -denim -dentist -deodorant -department -departure -dependent -deployment -deposit -depression -depressive -depth -deputy -derby -derrick -description -desert -design -designer -desire -desk -dessert -destiny -destroyer -destruction -detail -detainment -detective -detention -determination -development -deviance -device -dew -dhow -diadem -diamond -diaphragm -diarist -dibble -dickey -dictaphone -diction -dictionary -diet -dietician -difference -differential -difficulty -digestion -digger -digital -dilapidation -dill -dime -dimension -dimple -diner -dinghy -dinner -dinosaur -diploma -dipstick -direction -director -dirndl -dirt -disadvantage -disarmament -disaster -disco -disconnection -discount -discovery -discrepancy -discussion -disease -disembodiment -disengagement -disguise -disgust -dish -dishes -dishwasher -disk -display -disposer -distance -distribution -distributor -district -divan -diver -divide -divider -diving -division -dock -doctor -document -doe -dog -dogsled -dogwood -doll -dollar -dolman -dolphin -domain -donald -donkey -donna -door -doorknob -doorpost -dorothy -dory -dot -double -doubling -doubt -doubter -downforce -downgrade -downtown -draft -dragon -dragonfly -dragster -drain -drake -drama -dramaturge -draw -drawbridge -drawer -drawing -dream -dredger -dress -dresser -dressing -drill -drink -drive -driver -driveway -driving -drizzle -dromedary -drop -drug -drum -drummer -drunk -dry -dryer -duck -duckling -dud -duffel -dugout -dulcimer -dumbwaiter -dumptruck -dunebuggy -dungarees -dungeon -duplexer -dust -duststorm -duster -duty -dwarf -dwelling -dynamo -eagle -ear -eardrum -earmuffs -earplug -earrings -earth -earthquake -earthworm -ease -easel -east -eave -eavesdropper -ebook -ecclesia -eclipse -ecliptic -economics -ecumenist -eddy -edge -edger -editor -editorial -education -edward -eel -effacement -effect -effective -efficacy -efficiency -effort -egg -egghead -eggnog -eggplant -egypt -eight -ejector -elbow -election -electrocardiogram -element -elephant -elevator -elixir -elizabeth -elk -ellipse -elm -elongation -embossing -emergence -emergent -emery -emotion -emphasis -employ -employee -employer -employment -empowerment -emu -encirclement -encyclopedia -end -endothelium -enemy -energy -engine -engineer -engineering -english -enigma -enquiry -entertainment -enthusiasm -entrance -entry -environment -epauliere -epee -ephemera -ephemeris -epoch -eponym -epoxy -equinox -equipment -era -ereader -error -escape -espadrille -espalier -establishment -estate -estimate -estrogen -estuary -ethernet -ethiopia -euphonium -eurocentrism -europe -evaluator -evening -eveningwear -event -eviction -evidence -evocation -exam -examination -examiner -example -exchange -excitement -exclamation -excuse -executor -exhaust -exhusband -exile -existence -exit -expansion -expansionism -experience -expert -explanation -exposition -expression -extension -extent -extreme -exwife -eye -eyeball -eyebrow -eyebrows -eyeglasses -eyelash -eyelashes -eyelid -eyelids -eyeliner -eyestrain -face -facelift -facet -facilities -facsimile -fact -factor -factory -faculty -fahrenheit -failure -fairies -fairy -fall -fallingout -familiar -family -fan -fang -fanlight -fanny -fannypack -farm -farmer -fascia -fat -father -fatherinlaw -fatigues -faucet -fault -fawn -fax -fear -feast -feather -feature -february -fedelini -fedora -feed -feedback -feeling -feet -felony -female -fen -fence -fencing -fender -ferry -ferryboat -fertilizer -few -fiber -fiberglass -fibre -fiction -fiddle -field -fifth -fight -fighter -figurine -file -fill -filly -filth -final -finance -find -finding -fine -finger -fingernail -finisher -fir -fire -fireman -fireplace -firewall -fish -fishbone -fisherman -fishery -fishing -fishmonger -fishnet -fisting -fix -fixture -flag -flame -flanker -flare -flash -flat -flatboat -flavor -flax -fleck -fleece -flesh -flight -flintlock -flipflops -flock -flood -floor -floozie -flower -flu -flugelhorn -fluke -flute -fly -flytrap -foam -fob -focus -fog -fold -folder -fondue -font -food -foot -football -footnote -footrest -footrest -footstool -foray -force -forearm -forebear -forecast -forehead -forest -forestry -forgery -fork -form -formal -format -former -fort -fortnight -fortress -fortune -forum -foundation -fountain -fowl -fox -foxglove -fragrance -frame -france -fratricide -fraudster -frazzle -freckle -freedom -freeplay -freeze -freezer -freight -freighter -french -freon -fresco -friction -friday -fridge -friend -friendship -frigate -fringe -frock -frog -front -frost -frown -fruit -frustration -fuel -fulfillment -full -function -fundraising -funeral -funny -fur -furnace -furniture -fusarium -futon -future -gaffer -gaiters -gale -gallbladder -galleon -gallery -galley -gallon -galoshes -game -gamebird -gammaray -gander -gap -garage -garb -garbage -garden -garlic -garment -garter -gas -gasoline -gastropod -gate -gateway -gather -gauge -gauntlet -gazebo -gazelle -gear -gearshift -geese -gelding -gem -gemini -gemsbok -gender -gene -general -genetics -geography -geology -geometry -george -geranium -gerbil -geriatrician -german -germany -geyser -ghana -gherkin -ghost -giant -gigantism -ginseng -giraffe -girdle -girl -girlfriend -git -glad -gladiolus -gland -glass -glasses -glen -glider -gliding -glockenspiel -glove -gloves -glue -glut -goal -goat -gobbler -godmother -goggles -gokart -gold -goldfish -golf -gondola -gong -good -goodbye -goodbye -goodie -goose -gopher -goretex -gorilla -gosling -governance -government -governor -gown -grabbag -grade -grain -gram -granddaughter -grandfather -grandmom -grandmother -grandson -granny -grape -grapefruit -graph -graphic -grass -grasshopper -grassland -gray -grease -great -greatgrandfather -greatgrandmother -greece -greek -green -greenhouse -grenade -grey -grief -grill -grip -grit -grocery -ground -group -grouper -grouse -growth -guarantee -guatemalan -guest -guestbook -guidance -guide -guilty -guitar -guitarist -gum -gumshoes -gun -gutter -guy -gym -gymnast -gynaecology -gyro -hacienda -hacksaw -hackwork -hail -hair -haircut -half -halfbrother -halfsister -halibut -hall -hallway -hamaki -hamburger -hammer -hammock -hamster -hand -handball -handholding -handicap -handle -handlebar -handmaiden -handsaw -hang -harbor -harbour -hardboard -hardcover -hardening -hardhat -hardhat -hardware -harm -harmonica -harmony -harp -harpooner -harpsichord -hassock -hat -hatbox -hatchet -hate -haunt -haversack -hawk -hay -head -headlight -headline -headrest -health -hearing -heart -heartache -hearth -hearthside -heartthrob -heartwood -heat -heater -heaven -heavy -hedge -hedgehog -heel -height -heirloom -helen -helicopter -helium -hell -hellcat -helmet -helo -help -hemp -hen -herb -heron -herring -hexagon -heyday -hide -high -highlight -highrise -highway -hill -himalayan -hip -hippodrome -hippopotamus -historian -history -hit -hive -hobbies -hobbit -hobby -hockey -hoe -hog -hold -hole -holiday -home -homework -homogenate -homonym -honey -honeybee -honoree -hood -hoof -hook -hope -hops -horn -hornet -horse -hose -hosiery -hospice -hospital -host -hostel -hostess -hot -hotdog -hotel -hour -hourglass -house -houseboat -housing -hovel -hovercraft -howitzer -hub -hubcap -hugger -human -humidity -humor -hunger -hurdler -hurricane -hurry -hurt -husband -hut -hutch -hyacinth -hybridisation -hydrant -hydraulics -hydrofoil -hydrogen -hyena -hygienic -hyphenation -hypochondria -hypothermia -ice -icebreaker -icecream -icecream -icicle -icon -idea -ideal -igloo -ikebana -illegal -image -imagination -impact -implement -importance -impress -impression -imprisonment -improvement -impudence -impulse -inbox -incandescence -inch -income -increase -independence -independent -index -india -indication -indigence -indonesia -industry -infancy -inflammation -inflation -information -infusion -inglenook -ingrate -initial -initiative -injoke -injury -ink -inlaws -inlay -inn -innervation -innocent -input -inquiry -inscription -insect -inside -insolence -inspection -inspector -instance -instruction -instrument -instrumentalist -instrumentation -insulation -insurance -insurgence -intelligence -intention -interaction -interactive -interest -interferometer -interior -interloper -internal -internet -interpreter -intervenor -interview -interviewer -intestine -intestines -introduction -invention -inventor -inventory -investment -invite -invoice -iPad -iran -iraq -iridescence -iris -iron -ironclad -island -israel -issue -italy -jackal -jacket -jaguar -jail -jailhouse -jam -james -january -japan -japanese -jar -jasmine -jason -jaw -jeans -jeep -jeff -jelly -jellyfish -jennifer -jet -jewel -jewelry -jiffy -job -jockey -jodhpurs -joey -jogging -john -join -joke -joseph -jot -journey -judge -judgment -judo -juggernaut -juice -july -jumbo -jump -jumper -jumpsuit -june -junior -junk -junker -junket -jury -justice -jute -kale -kamikaze -kangaroo -karate -karen -kayak -kazoo -kendo -kenneth -kenya -ketch -ketchup -kettle -kettledrum -kevin -key -keyboard -keyboarding -keystone -kick -kickoff -kid -kidney -kidneys -kielbasa -kill -kilogram -kilometer -kilt -kimberly -kimono -kind -king -kingfish -kiosk -kiss -kitchen -kite -kitten -kitty -kleenex -klomps -knee -kneejerk -knickers -knife -knifeedge -knight -knitting -knot -knowledge -knuckle -koala -kohlrabi -korean -lab -laborer -lace -lacquerware -ladder -lady -ladybug -lake -lamb -lamp -lan -lanai -land -landform -landmine -language -lantern -lap -laparoscope -lapdog -laptop -larch -larder -lark -laryngitis -lasagna -latency -latex -lathe -latte -laugh -laundry -laura -law -lawn -lawsuit -lawyer -layer -lead -leader -leadership -leaf -league -leaker -learning -leash -leather -leaver -lecture -leek -leg -legal -legging -legume -lei -lemon -lemonade -lemur -length -lentil -leo -leopard -leotard -leprosy -let -letter -lettuce -level -lever -leverage -libra -librarian -library -license -lier -life -lift -light -lighting -lightning -lilac -lily -limit -limo -line -linen -liner -link -linseed -lion -lip -lipstick -liquid -liquor -lisa -list -literature -litigation -litter -liver -living -lizard -llama -loaf -loafer -loan -lobotomy -lobster -location -lock -locker -locket -locomotive -locust -loft -log -loggia -loincloth -look -loss -lot -lotion -lounge -lout -love -low -loyalty -luck -luggage -lumber -lumberman -lunch -luncheonette -lunchroom -lung -lunge -lute -luttuce -lycra -lye -lymphocyte -lynx -lyocell -lyre -lyric -macadamia -macaroni -machine -macrame -macrofauna -maelstrom -maestro -magazine -magic -magician -maid -maiden -mail -mailbox -mailman -maintenance -major -majorleague -makeup -malaysia -male -mall -mallet -mambo -mammoth -man -management -manager -mandarin -mandolin -mangrove -manhunt -maniac -manicure -manner -manor -mansard -manservant -mansion -mantel -mantle -mantua -manufacturer -manx -map -maple -maraca -maracas -marble -march -mare -margaret -margin -maria -mariachi -marimba -mark -market -marketing -marksman -marriage -marsh -marshland -marxism -mary -mascara -mask -mass -massage -master -mastication -mastoid -mat -match -material -math -mattock -mattress -maximum -may -maybe -mayonnaise -mayor -meal -meaning -measure -measurement -meat -mechanic -media -medicine -medium -meet -meeting -megalomaniac -melody -member -membership -memory -men -menorah -mention -menu -mercury -mess -message -metal -metallurgist -meteor -meteorology -meter -methane -method -methodology -metro -metronome -mexican -mexico -mezzanine -mice -michael -michelle -microlending -microwave -midcourse -middle -middleman -midi -midline -midnight -midwife -might -migrant -mile -milk -milkshake -millennium -millimeter -millisecond -mime -mimosa -mind -mine -mini -minibus -minion -miniskirt -minister -minor -minorleague -mint -minute -mirror -miscarriage -miscommunication -misfit -misogyny -misplacement -misreading -missile -mission -mist -mistake -mister -miter -mitten -mix -mixer -mixture -moat -mobile -moccasins -mocha -mode -model -modem -mole -mom -moment -monastery -monasticism -monday -money -monger -monitor -monkey -monocle -monotheism -monsoon -monster -month -mood -moon -moonscape -moonshine -mop -Mormon -morning -morocco -morsel -mortise -mosque -mosquito -most -motel -moth -mother -motherinlaw -motion -motor -motorboat -motorcar -motorcycle -mound -mountain -mouse -mouser -mousse -moustache -mouth -mouton -move -mover -movie -mower -mud -mug -mukluk -mule -multimedia -muscle -musculature -museum -music -musicbox -musician -musicmaking -mustache -mustard -mutt -myanmar -mycoplasma -nail -name -naming -nancy -nanoparticle -napkin -narcissus -nation -naturalisation -nature -neat -neck -necklace -necktie -necromancer -need -needle -negligee -negotiation -neologism -neon -nepal -nephew -nerve -nest -net -netball -netbook -netsuke -network -neurobiologist -neuropathologist -neuropsychiatry -news -newspaper -newsprint -newsstand -nexus -nic -nicety -niche -nickel -niece -nigeria -night -nightclub -nightgown -nightingale -nightlight -nitrogen -node -noise -nonbeliever -nonconformist -nondisclosure -noodle -normal -norse -north -northamerica -northkorea -nose -note -notebook -notice -notify -notoriety -nougat -novel -november -nudge -number -numeracy -numeric -numismatist -nurse -nursery -nurture -nut -nylon -oak -oar -oasis -oatmeal -obi -objective -obligation -oboe -observation -observatory -occasion -occupation -ocean -ocelot -octagon -octave -octavo -octet -october -octopus -odometer -oeuvre -offence -offer -office -official -offramp -oil -okra -oldie -olive -omega -omelet -oncology -one -onion -open -opening -opera -operation -ophthalmologist -opinion -opium -opossum -opportunist -opportunity -opposite -option -orange -orangutan -orator -orchard -orchestra -orchid -order -ordinary -ordination -organ -organisation -organization -original -ornament -osmosis -osprey -ostrich -others -otter -ottoman -ounce -outback -outcome -outfit -outhouse -outlay -output -outrigger -outset -outside -oval -ovary -oven -overcharge -overclocking -overcoat -overexertion -overflight -overnighter -overshoot -owl -owner -ox -oxen -oxford -oxygen -oyster -pacemaker -pack -package -packet -pad -paddle -paddock -page -pagoda -pail -pain -paint -painter -painting -paintwork -pair -pajama -pajamas -pakistan -paleontologist -paleontology -palm -pamphlet -pan -pancake -pancreas -panda -panic -pannier -panpipe -pansy -panther -panties -pantry -pants -pantsuit -panty -pantyhose -paper -paperback -parable -parachute -parade -parallelogram -paramedic -parcel -parchment -parent -parentheses -park -parka -parrot -parsnip -part -participant -particle -particular -partner -partridge -party -passage -passbook -passenger -passion -passive -pasta -paste -pastor -pastoralist -pastry -patch -path -patience -patient -patina -patio -patriarch -patricia -patrimony -patriot -patrol -pattern -paul -pavement -pavilion -paw -pawnshop -payee -payment -pea -peace -peach -peacoat -peacock -peak -peanut -pear -pearl -pedal -pedestrian -pediatrician -peen -peer -peertopeer -pegboard -pelican -pelt -pen -penalty -pencil -pendant -pendulum -penicillin -pension -pentagon -peony -people -pepper -percentage -perception -perch -performance -perfume -period -periodical -peripheral -permafrost -permission -permit -perp -person -personality -perspective -peru -pest -pet -petal -petticoat -pew -pharmacist -pharmacopoeia -phase -pheasant -philippines -philosopher -philosophy -phone -photo -photographer -phrase -physical -physician -physics -pianist -piano -piccolo -pick -pickax -picket -pickle -picture -pie -piece -pier -piety -pig -pigeon -pike -pile -pilgrimage -pillbox -pillow -pilot -pimp -pimple -pin -pinafore -pincenez -pine -pineapple -pinecone -ping -pink -pinkie -pinstripe -pint -pinto -pinworm -pioneer -pipe -piracy -piranha -pisces -piss -pitch -pitching -pith -pizza -place -plain -plane -planet -plant -plantation -planter -plaster -plasterboard -plastic -plate -platform -platinum -platypus -play -player -playground -playroom -pleasure -pleated -plier -plot -plough -plover -plow -plowman -plume -plunger -plywood -pneumonia -pocket -pocketbook -pocketwatch -poem -poet -poetry -poignance -point -poison -poisoning -poland -pole -polenta -police -policeman -policy -polish -politician -politics -pollution -polo -polyester -pompom -poncho -pond -pony -poof -pool -popcorn -poppy -popsicle -population -populist -porch -porcupine -port -porter -portfolio -porthole -position -positive -possession -possibility -postage -postbox -poster -pot -potato -potential -potty -pouch -poultry -pound -pounding -powder -power -precedent -precipitation -preface -preference -prelude -premeditation -premier -preoccupation -preparation -presence -presentation -president -pressroom -pressure -pressurisation -price -pride -priest -priesthood -primary -primate -prince -princess -principal -print -printer -priority -prison -prize -prizefight -probation -problem -procedure -process -processing -produce -producer -product -production -profession -professional -professor -profit -program -project -promotion -prompt -proofreader -propane -property -proposal -prose -prosecution -protection -protest -protocol -prow -pruner -pseudoscience -psychiatrist -psychoanalyst -psychologist -psychology -ptarmigan -publisher -pudding -puddle -puffin -pull -pulley -puma -pump -pumpkin -pumpkinseed -punch -punishment -pupa -pupil -puppy -purchase -puritan -purple -purpose -purse -push -pusher -put -pvc -pyjama -pyramid -quadrant -quail -quality -quantity -quart -quarter -quartz -queen -question -quicksand -quiet -quill -quilt -quince -quit -quiver -quotation -rabbi -rabbit -raccoon -race -racer -racing -racist -rack -radar -radiator -radio -radiosonde -radish -raffle -raft -rag -rage -rail -railway -raiment -rain -rainbow -raincoat -rainmaker -rainstorm -raise -rake -ram -rambler -ramie -ranch -random -randomisation -range -rank -raspberry -rat -rate -ratio -raven -ravioli -raw -rawhide -ray -rayon -reactant -reaction -read -reading -reality -reamer -rear -reason -receipt -reception -recess -recipe -recliner -recognition -recommendation -record -recorder -recording -recover -recruit -rectangle -red -redesign -rediscovery -reduction -reef -refectory -reflection -refrigerator -refund -refuse -region -register -regret -regular -regulation -reindeer -reinscription -reject -relation -relationship -relative -religion -relish -reminder -rent -repair -reparation -repeat -replace -replacement -replication -reply -report -representative -reprocessing -republic -reputation -request -requirement -resale -research -resident -resist -resolution -resource -respect -respite -response -responsibility -rest -restaurant -result -retailer -rethinking -retina -retouch -return -reveal -revenant -revenue -review -revolution -revolve -revolver -reward -rheumatism -rhinoceros -rhyme -rhythm -rice -richard -riddle -ride -rider -ridge -rifle -right -rim -ring -ringworm -ripple -rise -riser -risk -river -riverbed -rivulet -road -roadway -roast -robe -robert -robin -rock -rocker -rocket -rocketship -rod -role -roll -roller -romania -ronald -roof -room -rooster -root -rope -rose -rostrum -rotate -roundabout -route -router -routine -row -rowboat -royal -rub -rubber -rubric -ruckus -ruffle -rugby -rule -run -runaway -runner -russia -rutabaga -ruth -sabre -sack -sad -saddle -safe -safety -sage -sagittarius -sail -sailboat -sailor -salad -salary -sale -salesman -salmon -salon -saloon -salt -samovar -sampan -sample -samurai -sand -sandals -sandbar -sandra -sandwich -santa -sarah -sardine -sari -sarong -sash -satellite -satin -satire -satisfaction -saturday -sauce -saudiarabia -sausage -save -saving -savior -saviour -saw -saxophone -scale -scallion -scanner -scarecrow -scarf -scarification -scene -scent -schedule -scheme -schizophrenic -schnitzel -school -schoolhouse -schooner -science -scimitar -scissors -scooter -score -scorn -scorpio -scorpion -scow -scraper -screamer -screen -screenwriting -screw -screwdriver -screwup -scrim -scrip -sculpting -sculpture -sea -seagull -seal -seaplane -search -seashore -season -seat -second -secretariat -secretary -section -sectional -sector -secure -security -seed -seeder -segment -select -selection -self -sell -semicircle -semicolon -senator -sense -sentence -sepal -september -septicaemia -series -servant -server -service -session -set -setting -settler -sewer -sex -shack -shade -shadow -shadowbox -shake -shakedown -shaker -shallot -shame -shampoo -shanty -shape -share -shark -sharon -shawl -shearling -shears -sheath -shed -sheep -sheet -shelf -shell -sherry -shield -shift -shin -shine -shingle -ship -shirt -shirtdress -shoat -shock -shoe -shoehorn -shoehorn -shoelace -shoemaker -shoes -shoestring -shofar -shoot -shootdown -shop -shopper -shopping -shore -shortage -shorts -shortwave -shot -shoulder -shovel -show -shower -showstopper -shred -shrimp -shrine -siamese -sibling -sick -side -sideboard -sideburns -sidecar -sidestream -sidewalk -siding -sign -signature -signet -significance -signup -silica -silk -silkworm -sill -silo -silver -simple -sing -singer -single -sink -sir -sister -sisterinlaw -sit -sitar -situation -size -skate -skiing -skill -skin -skirt -skulduggery -skull -skullcap -skullduggery -skunk -sky -skylight -skyscraper -skywalk -slapstick -slash -slave -sled -sledge -sleep -sleet -sleuth -slice -slider -slime -slip -slipper -slippers -slope -sloth -smash -smell -smelting -smile -smock -smog -smoke -smuggling -snail -snake -snakebite -sneakers -sneeze -snob -snorer -snow -snowboarding -snowflake -snowman -snowmobiling -snowplow -snowstorm -snowsuit -snuggle -soap -soccer -society -sociology -sock -socks -soda -sofa -softball -softdrink -softening -software -soil -soldier -solid -solitaire -solution -sombrero -somersault -somewhere -son -song -songbird -sonnet -soot -soprano -sorbet -sort -soulmate -sound -soup -source -sourwood -sousaphone -south -southafrica -southamerica -southkorea -sow -soy -soybean -space -spacing -spade -spaghetti -spain -spandex -spank -spark -sparrow -spasm -speaker -speakerphone -spear -special -specialist -specific -spectacle -spectacles -spectrograph -speech -speedboat -spend -sphere -sphynx -spider -spike -spinach -spine -spiral -spirit -spiritual -spite -spleen -split -sponge -spoon -sport -spot -spotlight -spray -spread -spring -sprinter -sprout -spruce -spume -spur -spy -square -squash -squatter -squeegee -squid -squirrel -stable -stack -stacking -stadium -staff -stag -stage -stain -stair -staircase -stallion -stamen -stamina -stamp -stance -standoff -star -start -starter -state -statement -station -stationwagon -statistic -statistician -steak -steal -steam -steamroller -steel -steeple -stem -stencil -step -stepaunt -stepbrother -stepdaughter -stepdaughter -stepfather -stepgrandfather -stepgrandmother -stepmother -stepmother -steppingstone -steps -stepsister -stepson -stepson -stepuncle -steven -stew -stick -stiletto -still -stinger -stitch -stock -stocking -stockings -stockintrade -stole -stomach -stone -stonework -stool -stop -stopsign -stopwatch -storage -store -storey -storm -story -storyboard -storytelling -stove -strait -stranger -strap -strategy -straw -strawberry -stream -street -streetcar -stress -stretch -strike -string -strip -structure -struggle -stud -student -studio -study -stuff -stumbling -sturgeon -style -styling -stylus -subcomponent -subconscious -submarine -subroutine -subsidence -substance -suburb -subway -success -suck -sudan -suede -suffocation -sugar -suggestion -suit -suitcase -sultan -summer -sun -sunbeam -sunbonnet -sunday -sundial -sunflower -sunglasses -sunlamp -sunroom -sunshine -supermarket -supply -support -supporter -suppression -surface -surfboard -surgeon -surgery -surname -surprise -susan -sushi -suspect -suspenders -sustainment -SUV -swallow -swamp -swan -swath -sweat -sweater -sweats -sweatshirt -sweatshop -sweatsuit -swedish -sweets -swell -swim -swimming -swimsuit -swing -swiss -switch -switchboard -swivel -sword -swordfish -sycamore -sympathy -syndicate -synergy -synod -syria -syrup -system -tabby -tabernacle -table -tablecloth -tabletop -tachometer -tackle -tadpole -tail -tailor -tailspin -taiwan -tale -talk -tam -tambour -tambourine -tamo'shanter -tandem -tangerine -tank -tanker -tankful -tanktop -tanzania -tap -target -tassel -taste -tatami -tattler -tattoo -taurus -tavern -tax -taxi -taxicab -tea -teacher -teaching -team -tear -technician -technologist -technology -teen -teeth -telephone -telescreen -teletype -television -teller -temp -temper -temperature -temple -tempo -temporariness -temptress -tendency -tenement -tennis -tenor -tension -tent -tepee -term -terracotta -terrapin -territory -test -text -textbook -texture -thailand -thanks -thaw -theater -theism -theme -theoretician -theory -therapist -thermals -thermometer -thigh -thing -thinking -thistle -thomas -thong -thongs -thorn -thought -thread -thrill -throat -throne -thrush -thumb -thunder -thunderbolt -thunderhead -thunderstorm -thursday -tiara -tic -ticket -tie -tiger -tight -tights -tile -till -timbale -time -timeline -timeout -timer -timpani -tin -tinderbox -tinkle -tintype -tip -tire -tissue -titanium -title -toad -toast -toe -toenail -toga -togs -toilet -tom -tomato -tomography -tomorrow -tomtom -ton -tongue -toot -tooth -toothbrush -toothpaste -toothpick -top -tophat -topic -topsail -toque -torchiere -toreador -tornado -torso -tortellini -tortoise -tosser -total -tote -touch -tough -toughguy -tour -tourist -towel -tower -town -townhouse -towtruck -toy -trachoma -track -tracksuit -tractor -trade -tradition -traditionalism -traffic -trail -trailer -train -trainer -training -tram -tramp -transaction -translation -transmission -transom -transport -transportation -trapdoor -trapezium -trapezoid -trash -travel -tray -treatment -tree -trellis -tremor -trench -trial -triangle -tribe -trick -trigonometry -trim -trinket -trip -tripod -trolley -trombone -trooper -trouble -trousers -trout -trove -trowel -truck -truckit -trumpet -trunk -trust -truth -try -tshirt -tsunami -tub -tuba -tube -tuesday -tugboat -tulip -tummy -tuna -tune -tuneup -tunic -tunnel -turban -turkey -turkish -turn -turnip -turnover -turnstile -turret -turtle -tussle -tutu -tuxedo -tv -twig -twilight -twine -twist -twister -two -typewriter -typhoon -tyvek -uganda -ukraine -ukulele -umbrella -unblinking -uncle -underclothes -underground -underneath -underpants -underpass -undershirt -understanding -underwear -underwire -unibody -uniform -union -unit -unitedkingdom -university -urn -use -user -usher -utensil -uzbekistan -vacation -vacuum -vagrant -valance -valley -valuable -value -van -vane -vanity -variation -variety -vase -vast -vault -vaulting -veal -vegetable -vegetarian -vehicle -veil -vein -veldt -vellum -velodrome -velvet -venezuela -venezuelan -venom -veranda -verdict -vermicelli -verse -version -vertigo -verve -vessel -vest -vestment -vibe -vibraphone -vibration -video -vietnam -view -villa -village -vineyard -vinyl -viola -violet -violin -virginal -virgo -virtue -virus -viscose -vise -vision -visit -visitor -visor -vixen -voice -volcano -volleyball -volume -voyage -vulture -wad -wafer -waffle -waist -waistband -waiter -waitress -walk -walker -walkway -wall -wallaby -wallet -walnut -walrus -wampum -wannabe -war -warden -warlock -warmup -warning -wash -washbasin -washcloth -washer -washtub -wasp -waste -wastebasket -watch -watchmaker -water -waterbed -waterfall -waterskiing -waterspout -wave -wax -way -weakness -wealth -weapon -weasel -weather -web -wedding -wedge -wednesday -weed -weeder -weedkiller -week -weekend -weekender -weight -weird -well -west -western -wetbar -wetsuit -whale -wharf -wheel -whip -whirlpool -whirlwind -whisker -whiskey -whistle -white -whole -wholesale -wholesaler -whorl -wife -wilderness -will -william -willow -wind -windage -windchime -window -windscreen -windshield -wine -wing -wingman -wingtip -winner -winter -wire -wiseguy -wish -wisteria -witch -witchhunt -withdrawal -witness -wolf -woman -wombat -women -wood -woodland -woodshed -woodwind -wool -woolen -word -work -workbench -worker -workhorse -worklife -workshop -world -worm -worthy -wound -wrap -wraparound -wrecker -wren -wrench -wrestler -wrinkle -wrist -writer -writing -wrong -xylophone -yacht -yak -yam -yard -yarmulke -yarn -yawl -year -yellow -yesterday -yew -yin -yogurt -yoke -young -youth -yurt -zampone -zebra -zebrafish -zephyr -ziggurat -zinc -zipper -zither -zone -zoo -zoologist -zoology -zootsuit -zucchini diff --git a/host/usr/share/dict/names b/host/usr/share/dict/names deleted file mode 100644 index 9bd0182e..00000000 --- a/host/usr/share/dict/names +++ /dev/null @@ -1,3947 +0,0 @@ -charlestiger -silvergore-tex -changebutter -bonsaiscrew -pajamabuilding -roosterrainbow -dungeongender -tempergrenade -fronttadpole -slavecarpenter -schoolcreator -mimosapayment -heronmexico -airportjudge -cuticleemery -rubberflute -timbaleselection -jellyfishforgery -hyenarabbit -revolveramie -biologygasoline -detailprofit -increaseverdict -hamsterguitar -patiodiamond -dugouthimalayan -turkeypropane -earthcollision -fleshlyocell -cablekilogram -athletealgeria -trombonethrill -carpentercement -bumperbrandy -transportcover -stockingdollar -spainaddress -whalegrade -denimhalibut -watchbritish -custardberry -penaltysecure -beardpendulum -activitycurtain -octopustsunami -ferrynumeric -snowflakecomposer -sentencemaraca -patioelizabeth -buttonblade -dessertattack -pansydetail -trianglehandle -gliderpound -jameschristmas -scannergalley -pimpletrumpet -governorfridge -parcelcrime -aluminiumfather -epochrevolve -hyacinthparent -museumchina -powertramp -patiocapital -frameeight -buglemichael -sharkowner -chickmouth -dressgiant -glidingtitanium -lotioncyclone -swordfishspider -bongobarometer -hockeypants -signaturevalley -headlightalibi -sundialattempt -layerraven -advantagefloor -mexicokayak -balineseoxygen -goldfishrelation -witnesstoilet -anglefireman -chequecomma -offernotify -margaretpolyester -insurancemetal -copperlinda -metalselection -pastekettle -bomberdoubt -canoegore-tex -whaleturret -frownpatio -brownchime -porchincome -sailboatturnover -kitchencheck -shrimpairbus -secondeagle -pictureplayroom -timerbroker -libraroute -copyrightaustralia -patchwoolen -rutabagavelvet -cannonthought -tsunamikeyboard -africaprison -airplaneexhaust -bandanacover -polandcandle -trumpetscreen -bufferdeadline -asteriskdrink -susancongo -respectgliding -enquiryhammer -coughhacksaw -malaysiahardhat -kayaktendency -peonydanger -separatedgearshift -desserteurope -shovelalmanac -lotioncabinet -airshipseashore -believeblinker -tortoiseapparatus -saturdayverse -chimefebruary -umbrellaquince -mosquepuppy -signaturecarnation -pantyslice -routercornet -nephewpassenger -georgefriday -locustgerman -screenfedelini -expertscorpio -trainswimming -comfortsundial -scarecrowradiator -kilometerrayon -poultrycreditor -februaryproperty -lungehacksaw -grillfibre -jumbosociology -bonsairainbow -equinoxfibre -coffeeinput -caravanshade -communityporcupine -sycamorelaugh -browngender -tradevacuum -troubleairport -pastepizza -octobersugar -reportmaraca -routenitrogen -helmetgemini -rocketpayment -ostrichknickers -inputbankbook -staircaseprofit -wristcrayon -blacksuede -objectivepackage -mailboxmailman -printshrine -octagonformat -almanacrotate -boardgeology -alibicello -willowmotion -radioclaus -wednesdayboard -microwavewitness -tuliptongue -xylophoneequinox -ronaldhearing -teethtempo -buttonattention -eggplantcredit -regretarcher -scorpionolive -crimecaptain -joggingspade -creamdeadline -jasonmusician -blacksparrow -hobbiescancer -aftermathpheasant -quicksandmiddle -brokerforce -kevinspain -cornetsidecar -brickselect -spherepillow -sharkhelen -pockettyvek -repairfrench -studycommunity -bladderlawyer -riverbedforecast -continenttuesday -laborerpressure -arrowquiver -larchcherry -whorlradiator -scarfboundary -partnersidecar -coloncloudy -dipsticktramp -vesselsandwich -salesmanlawyer -reductionmargin -quotationgender -mousewindow -secretarydentist -guidespandex -batteryweasel -banjorevolver -glassdorothy -elbowheron -africasandwich -kittynumber -japansoftdrink -bargecellar -bricktreatment -pyjamadrake -eggplantcrocus -templedoubt -francenapkin -wealthfactory -titaniumjourney -galleyclimb -bettysoftball -propanehardcover -doubtsausage -cupcakebowling -fighterseason -paymentquart -eyelinerbrick -manageracoustic -michaelsoldier -wristfriction -currentteaching -humorsociology -sneezeapparatus -underwearbirth -spinachbookcase -cattlespinach -touchcopper -octavehardware -copyrightlinen -processpantry -birchnapkin -downtownmacrame -typhoonargument -daisycello -relishfootball -disgustadvantage -diaphragmmeasure -doctorchildren -offenceoutput -meetingweapon -spherestation -portercylinder -piscescougar -dinnerfather -foreheadtsunami -optionnerve -whitequarter -marriedcough -quivercanoe -larchstomach -woundspain -forestwoolen -ministerfreeze -cookingkorean -treatmentdamage -shamecurrent -gardenknife -bladdergraphic -tankershelf -grapemechanic -bombercarrot -fedeliniwalrus -holidaywhite -supportriverbed -businesseggnog -captionevening -rangelotion -sparkvault -sausagemexican -colombiaorder -oliveacoustic -tadpoleslice -footballgoldfish -snowstormchinese -saturdaybalance -fairiessusan -directioncloudy -belieftreatment -butcherspring -marginsense -activechurch -clavesurname -decadetrowel -tempometal -buildingattempt -peacenight -railwayjudge -celerybrian -footnoteagreement -kettlegiraffe -geometrysaturday -lyocellbathtub -francebuffet -spearcattle -relativeshrimp -lycradigger -creditorrevolve -carrotpolice -tulipmosquito -kilometerdiploma -scrapertrial -cycleoctopus -pasteprose -printearth -smellkevin -flutemountain -marchkidney -typhoonstool -salmonmemory -statesurgeon -bronzedirection -handsawradar -crushexpert -trafficsturgeon -grasscomic -freezethought -dragonflylobster -luttucewrench -notebookporch -faucetbumper -systemscience -singerliquor -swimmingenquiry -tornadoteeth -partybakery -thronesquash -bassoonnotify -flavorpotato -rainbowscent -bookleteffect -pantryitaly -layerromanian -graphicavenue -meterslope -riddleslime -chineseshrine -ganderfragrance -teachingblack -magazinecalendar -servantorange -graincurler -carriageplaster -reportblowgun -sproutpeony -creditorinnocent -communityapparatus -editorpaper -featurereading -gazelleindia -routeattempt -sprucepuppy -equipmentglass -sleetcrack -cannonregret -capricornnigeria -surnamebench -dentisthedge -swedishaddition -mouseexpansion -firewallindustry -librallama -flaredecade -prosesquash -clippersubmarine -witchturnip -forecastlunge -inventionlunge -josephshallot -mimosacable -snowflakeharmonica -rewardposition -octavemedicine -circleasphalt -beechgymnast -conditiontimer -pantyhoseforehead -skatebrush -screenpromotion -playroomswamp -brasscannon -clarinetmailman -cameldiploma -wheelsquare -creammeter -michellepackage -noveldiploma -malaysiabottom -aluminumsingle -plaincamel -turkeyhimalayan -inventorycharacter -blowgunturnover -lunchroommuseum -vacuumathlete -kamikazerifle -clausweight -visionvision -networkplatinum -chicorymother -engineclarinet -treatmentoffence -bobcatturtle -exhaustmicrowave -snowplowprotest -dipstickguarantee -successrespect -afternoonpurple -smellknowledge -gradeeyebrow -leatherbarbara -chimeweight -eyelashrutabaga -dinghyproperty -postboxaccount -squarebattery -gore-texcomma -marchquicksand -brazilcucumber -securerailway -kenyaverse -weederitalian -frontbrian -selectionhandicap -squareweapon -licenseasterisk -flarecommunity -step-sonbaseball -toastmimosa -ceramicstopsign -heroncolon -snailskirt -congabreak -dieticianbeginner -cabinetrainbow -tyvekceleste -basketpoliceman -spiderlimit -chemistryfight -buildingdredger -benchplaster -oysterattic -networkpowder -servantzipper -saturdayflute -laundrycrocus -spoondryer -otterguarantee -livernoodle -designpigeon -cloudcraftsman -protocolgallon -britishpyjama -ocelotcrocodile -fendercartoon -digitalbehavior -limitsword -bumperbasket -americaexchange -placecatsup -cathedralalphabet -incomeshorts -wealthactivity -forecastparsnip -ministertortoise -swisserror -signaturesamurai -stampspeedboat -c-clampbulldozer -peanutindia -reductiondeborah -rugbyeyelash -euphoniumbrandy -matchstove -watchattention -basementhandball -commandapril -hedgedetective -separatedcolon -smellswing -currentflame -clutchferry -bloodcushion -stockliquid -odometerchristmas -napkincough -porcupineresult -clutchsalad -relativeskiing -saxophonedresser -readingdamage -goslingbrush -waterfallspoon -glidingwallet -cocoacotton -shouldergovernor -chillincrease -supplymessage -footballgrandson -heightsudan -collegestatistic -pilotornament -novembersusan -clothgroup -susanmaraca -hardwarelimit -treatmentlunge -badgerrotate -refundbandana -ostrichlightning -prefacepostage -drakeauthority -captionnigeria -barberbumper -radishskiing -quietporter -teethraincoat -fedeliniactor -jellybeaver -frameshake -employeehobbies -asparagusbrick -shearstreatment -davidswimming -herringpoint -pleasuresalad -breakdiscovery -waiterthrill -giantmilkshake -daughteroxygen -pendulumbirth -clarinetchill -novelcondor -magazinealibi -ouncedimple -scentpressure -skillspeedboat -novelbagel -umbrellariddle -frenchcatsup -riflevessel -processskate -sweetsvacuum -shampoocreator -passiverepair -bubbleprofit -rowboatdollar -earthbonsai -aluminiumcharacter -racingsubway -viscoseharmonica -ministerbrush -footnotefriday -agreementforehead -helenexpert -professorsuccess -mercurygeography -deathfight -chillvessel -quarterwitch -incomealcohol -armchairfemale -methanesleep -octavedorothy -pilotfeedback -valuespoon -lunchauthority -revolveapology -emerynewsprint -rubberdesert -floodlunchroom -spooncapricorn -islandrubber -authoritycelery -saturdaypenalty -businesscouch -cirrusorgan -periodnotebook -adviceshrine -waterfallgrowth -capricorntimpani -wealthrelish -brothercarbon -macaronigliding -powderleopard -invoicewhiskey -clockkarate -goslingdeficit -deadlinelatex -nursecuban -separatedjapanese -cricketpenalty -thingpotato -swallowwomen -glidingraven -powderex-wife -seederfedelini -candlecowbell -snailgazelle -step-auntaccordion -burstapparel -cheetahcongo -karenposition -armenianrooster -pencildancer -employerchocolate -burmaalbatross -clockcarrot -burglardomain -forestargument -tenorfaucet -enemynylon -nitrogendisgust -christmassoftball -mexicanscanner -desiredatabase -lentiltaurus -pyramidstone -effectswimming -courseacoustic -hourglassgrowth -marketdiscovery -cardiganyacht -tyvekstinger -graphicwhistle -handballchance -wristbeast -ethiopiastomach -croissanttaste -cinemaplywood -learningpuffin -chesspruner -backbonecattle -batteryarmenian -pricesurfboard -carnationcopyright -mittensuede -dramacircle -activedashboard -scheduleathlete -closedelete -kittencabinet -good-byemimosa -insectsalesman -bottledrama -meterseptember -hydrofoilrowboat -slopesushi -coastmarble -robertorder -cloudyjoseph -zebramouth -levelthought -mechanicpumpkin -kettlegrass -scienceriddle -radarjennifer -basketchicken -creamnickel -shieldbucket -michellefield -radiatorchocolate -revolvernylon -shortsfreon -bottomchance -dreampancreas -kendobanana -handballtrapezoid -euphoniumproperty -crackhearing -spinachbalance -housetimer -oysterjustice -linenmaraca -braceacrylic -zebraknowledge -needlepoint -legalrevolve -bathtubdress -drainsearch -balancecommand -liquidbanker -magicmaple -supportsneeze -marblecrocodile -stingerorange -accountdegree -freongliding -thailandfriend -freezerwallet -plasterronald -policefriday -garagetyphoon -alarmcollege -targetkamikaze -larchnumber -childrenpatio -keyboardradish -attentionpeony -effectburglar -castanetfeature -heavenukrainian -databasetwilight -mountainsister -postagecentury -witchcollision -knowledgemouth -temperceleste -prosebaseball -waterfallmailman -memoryankle -clothapple -exhaustwaste -belgianmattock -queenlipstick -threadrefund -mailboxmotorboat -daffodilviola -snailprocess -gearshiftseaplane -walrusfebruary -featurerayon -quarterelephant -schoolpastor -mimosaporter -breadglider -shamesanta -turnipreading -multi-hopintestine -glassbarber -preparedviolin -kettlecrime -fireplaceadapter -inventorybuffet -kittenbelief -elizabethtyphoon -postagepostbox -raincoatfootnote -softballmailbox -stretchliquid -francelevel -impulsecurve -innocentpumpkin -puppymirror -brandyillegal -quotationchess -climbschedule -discoverysusan -medicinediploma -thailandhardcover -cucumbernylon -freonghana -aardvarkdietician -draindesire -cloakroomprison -romanianblade -ashtrayshadow -visioncinema -nationprofit -crocusspring -kevinpants -feedbackpatio -popcornquartz -twilightbanker -storeagreement -dahliabiology -dieticianinsurance -hygienicraincoat -elizabethpizza -microwavescent -vaultbalance -notifycolon -epochpicture -animalchannel -deathcobweb -sheepmaple -semicolontanker -sproutbranch -edwardpaint -earthshoemaker -servergeometry -journeywheel -brazilarmenian -deborahcarriage -systempassbook -routearmchair -platecatsup -budgetstinger -bageleditorial -lathepropane -chainlumber -lumbercroissant -sausageshorts -giantchain -breakdistance -eyebrowpanther -babiescormorant -plieraluminum -curlerdaniel -parsnipbritish -septembersweater -radarcloud -ptarmiganturkey -operationchive -creditorbedroom -bucketcourse -clippermarble -ariescracker -velvetspeedboat -purpledeficit -ambulancehydrogen -driversushi -titlesatin -dugoutoctober -trouserscolumnist -dahliaattic -snowstormramie -athletethread -steeldigital -silveraddition -industryfender -buzzarddipstick -writerbroccoli -snowflakecelsius -denimnumber -birthshoemaker -beardmarch -sushilyric -sharkstation -policegarage -algebrahalibut -frontconsonant -languagewrecker -softballbadger -leatherbetty -garlicgender -giantlyric -asparaguswater -craftsmandistance -croissantladybug -scarecrownewsprint -pencilteeth -elbowstock -edwardbrazil -decademustard -birchacrylic -riddleporter -badgechauffeur -liquorghost -roastathlete -hydrantwrench -salmonexpansion -softdrinkkaren -skirtpromotion -cornetanthony -kittydrain -chinaapology -birchseeder -appliancesardine -napkintaiwan -priestquicksand -avenuewaiter -mimosatrunk -sphynxchalk -measurecolor -thursdayptarmigan -pollutionschool -clientprose -guitarhalibut -plantafternoon -dorothybrown -journeyfactory -viscosechain -rhythmscience -timerrefund -congobacon -squiddeficit -skillswordfish -skatesteel -bangleinput -orchestradorothy -reactionmulti-hop -rutabagafurniture -flameronald -actorcredit -condorronald -euphoniumsmash -accordionafternoon -seaplanenancy -mailmanrevolver -reindeerrailway -tablepound -pantsbronze -michellepilot -trampsugar -footballlettuce -circleground -employerstreetcar -numbercheese -theorybabies -australiaplane -quotationplace -ex-wifequiet -shapeincrease -handballcharles -branchguide -violincanvas -familyaugust -crayfishcompany -laughmeasure -perchliquid -bedroomincome -mittenvacation -februaryscorpion -japanpassenger -employeeground -judgetenor -conditionchauffeur -englishtwine -birchbutter -refundmistake -phoneaccordion -alloywrist -valleygliding -clockcourt -tradesurname -reductioncaution -pimpleclarinet -equipmenttexture -geesediamond -elementsemicolon -trafficporter -deficitfired -letterfortnight -burstcolony -novelchange -saucecracker -marketwasher -selectionbracket -shoulderdeborah -ellipsecopyright -denimastronomy -surprisecrown -locustturkish -zipperbrick -partridgesemicolon -stormsemicolon -secretaryjennifer -intestinecornet -fedelinisupport -writercough -divingblack -growthtrick -deficitrepair -wrinklegauge -classcomma -divorcedspade -trailfront -networkcream -frownbrochure -garlicdrawer -trumpetstock -beavertrouble -exchangemichelle -farmercover -adaptergoose -latexapparel -edgerstretch -thoughtquality -firemansession -berrycomfort -cancercolon -pastrystructure -marbleblanket -dentistcocktail -scenelicense -kenyabengal -questiondebtor -actionplant -jeansbassoon -damageoption -frameattack -mouthselect -bicyclediaphragm -divingsquirrel -switchjapan -recessillegal -comichurricane -turnipsoftware -hygienicjaguar -kennethvietnam -brianpamphlet -latencyclave -collarcymbal -rainboworgan -yellowcaravan -equipmentedger -fairiesbegonia -illegalappliance -routersurgeon -handlestation -badgelipstick -reportframe -soldiertexture -knowledgesandra -addressalphabet -harmonicaaftermath -gaugebrand -georgegosling -editorsupport -custardattic -reasonantelope -drakeshrimp -tradeappeal -driveoffice -morningmyanmar -cylinderpoison -fedelinizoology -vegetablevelvet -graphicchair -surgeongeranium -antelopeshoemaker -cupboardbassoon -handsawbudget -knifegymnast -mouthvalley -guiltyhydrofoil -heavenblack -startlathe -edwardterritory -odometerlobster -magiciannumeric -nylonobjective -smashdowntown -perchgateway -pendulumaccount -chemistrytreatment -bloodpollution -turkishbrian -ladybugsalary -authorsoprano -familyadapter -seagullalarm -periodtrunk -companygrass -jumperrouter -halibutbronze -optionelbow -reporttenor -airplaneblinker -kenyagrape -jewelclick -lentillevel -sweatshopkimberly -eagledimple -jamessampan -mexicansundial -partnerbrazil -romaniahelium -thrillharmony -mirrororchestra -subwayschool -mailboxravioli -secretarycloth -frownconifer -cicadapeanut -tankersword -sleepniece -recessschedule -healthdashboard -plywoodmagic -captionbasket -cucumbertraffic -pimpleairport -limitadult -customerbooklet -flowercement -diamondcandle -monkeyfender -romanianstinger -leopardlanguage -pajamaknowledge -arrowcricket -coverbomber -cartoonclass -fieldpiano -stevenwhite -badgesecurity -galleystamp -hexagonfisherman -timerchinese -dragonminute -slicereaction -hardboardnoise -dinnermosque -peanutopera -propanestation -diggerwinter -eggnoggirdle -milkshakearmenian -italiancooking -revolvetrain -languagefactory -textbookpreface -blinkerblock -pepperbeauty -eggplantheadlight -daffodilbeach -pantherwitch -michaelsword -alleycousin -indiachina -softballfrench -agreementcough -moustachehumor -forecastcloth -rocketprison -actresssilver -libradugout -beautyocean -sweatshopswitch -celsiusfeast -pepperskill -curlerreligion -cymbalbangle -mustardethiopia -ankleclimb -coughtower -sturgeonjelly -cautionchina -aquariusbankbook -stopsignperch -slicecreek -sprucezephyr -utensilcarbon -creatorsmash -tableprison -operationdeadline -rewardpantyhose -decreasehydrant -cookingairmail -frecklepurple -castanetellipse -shinglecamel -hurricanecousin -feastshingle -planetaccount -steeldolphin -ballooncheek -glidingshears -sheepchest -platinumrepair -bronzesundial -entrancecopyright -snowstormclock -gorillanylon -sunshinedivision -tortoiseharbor -tailordecision -dahliadowntown -thoughtintestine -cyclecolumn -bridgedahlia -cautionspinach -tabletopbrake -refundkeyboard -subwaybarge -carnationbladder -rabbirutabaga -cemeteryrussian -sparkthomas -bamboohardcover -michaelproduct -downtownsiberian -professorwasher -uncleshoemaker -colorbucket -wrenchbrake -decisionviola -climbgoldfish -closetplanet -elementbillboard -windowwrinkle -groundpoliceman -butanemattock -frictionvoice -dredgersurfboard -accordionbadge -canoebillboard -fridayslipper -middlecalendar -bombersilver -answerisrael -daviddrake -enquiryaluminium -scissorsstage -davidstatement -butchersmoke -aprilemployer -hardboardpheasant -downtownchime -kenyapigeon -hospitalcotton -offencequail -fatherclave -salmonamerica -dipstickwinter -bookcasedeposit -clipperdredger -defensepurpose -lentilceramic -rutabagaviolet -alibidefense -paintsilica -backboneclimb -saturdayanime -passivebasin -yachtwrecker -ferrycommittee -musicianspinach -asparaguspyramid -feathercheetah -vesseltanker -prosebrass -rocketyogurt -propertysoybean -collarplaster -startshovel -messagecello -thumboctave -diggerrecord -shapeargentina -chequevessel -peacebarometer -laughsuede -committeestamp -skiingshrine -crookcartoon -swallowcousin -apparatusinventory -successcougar -alarmantelope -nitrogenmanicure -typhoonbeggar -radarraven -nationdietician -trainheight -aquariusbutcher -angorasunflower -baseballstarter -ketchupmichael -structureostrich -crackskate -shellbadge -mistakepocket -stormmustard -bonsaistreetcar -aardvarkcommunity -packageorchid -directioneyebrow -whorlperch -systemcurtain -wednesdaymailbox -pumpkinreminder -requestbrochure -plastercroissant -refundbudget -fathernumeric -effectcardigan -canoecapricorn -wedgecandle -epochpepper -popcorndivision -turnoversubstance -headlinegallon -edwardsnowstorm -thingkilogram -childrensauce -middlestudy -aardvarkshark -cornetstatement -dieticianmouse -kilogrammallet -platescissors -courtshingle -lilacdistance -newsprintsegment -pyramidmustard -badgeskill -weederillegal -benchdenim -sweaterplier -innocentcontrol -budgetchristmas -jasonchristmas -sheetrutabaga -bomberpancreas -creaturedisease -ceilingcreature -securebamboo -chickcolumnist -tankerclipper -ramiechalk -libratyphoon -vaultshampoo -prefaceformat -serverminister -childanswer -museumukrainian -sharontheater -swingequinox -nancycatamaran -metalbankbook -marimbacentury -piccolomotion -clockdigger -buffereurope -successshark -reductioncustomer -vacuumdomain -sidecarmotion -englishbasement -salarysweatshop -sandrakilogram -commandbaker -appleoctagon -gaugecloakroom -glassbalinese -actorfired -gradeemery -olivesoprano -jumbolawyer -narcissusutensil -producenovember -secretaryairplane -discoverystore -inputproperty -trapezoidpropane -decisioncongo -fightscene -sweatshopcobweb -cupcakescrew -grapelilac -chiefnovember -receipttoenail -chesshydrant -parrotlaundry -signaturefrown -cirruscatsup -dresserblanket -trombonecrime -asphaltwhiskey -weightmagician -shellfeedback -throneprinter -flowerastronomy -storyrobert -josephcement -geesemarimba -yogurtclave -sopranodessert -germanwaitress -cottonweeder -shirtbathroom -narcissusstick -groupcathedral -dreamstranger -pastortrial -davidpaperback -cougarvirgo -recordturkish -rangetooth -vacuumoxygen -mirrorlinen -soybeanlibra -softwareradar -emerycrack -capitaldebtor -catamaranpolice -scallionsecurity -hallwayexpansion -cousinclaus -cylinderreason -harbordavid -shearsstomach -airportfather -kitchennight -doubtapparatus -ferryarrow -dibblesegment -tanzaniamissile -pancreasvision -beggarpriest -calculuscucumber -suedechicken -diggerriver -signaturemosquito -joggingdamage -effectbarbara -limitthrill -manicurecrown -centuryjelly -seaplanestaircase -penaltycooking -policemanegypt -beastrefund -attentioncushion -collisionsampan -humorvalley -skiingmargin -backbonegorilla -jameshistory -chickberry -titledesert -hamsterdredger -prefaceattic -relativeeditor -sweetschannel -crayonimpulse -frenchhumor -violetbritish -carolchurch -hardhatshorts -cockroachspark -whalespeedboat -pollutioncherry -brothercrown -raincoatdecision -septembertendency -willowdesire -lobstervinyl -carbonstep-son -sweatersoftball -shrinecelsius -cloversturgeon -passivelocket -daviddesign -selectionoperation -utensilairplane -accounttower -moustacheturtle -coveranger -northcemetery -glidingantelope -kittydivision -maracashrimp -herondrawer -goslingroute -stingershame -postboxvietnam -smokecrayon -cloudground -middlealcohol -continentgazelle -applecustard -goldfishattic -handballhexagon -chessmistake -grainmorocco -orchidpencil -pyramiddetective -diplomaegypt -brakemercury -guiltybehavior -mandolinnovel -eggnogfireman -shovelwitch -ounceaccordion -mercuryburglar -gymnastmother -harboranime -bakerysinger -blackbrain -kevinskill -yellowsilver -marbleflame -polanddaffodil -bronzespring -womanproperty -sidecarsprout -radiatorestimate -pakistanoxygen -quillsaturday -featherhelen -orchestraniece -kayaktoast -birthdaybronze -nephewhistory -condorjanuary -creditorchannel -almanacdesire -cirrusbiplane -brickcello -willowshare -quartzronald -cheeseglider -pandasnowflake -coursechick -domainarmenian -planebacon -marginoyster -currentcroissant -footballargentina -swimmingstraw -dressingbrother -vacuumhyena -americabeaver -porchpackage -blowgunvisitor -writercello -bladderroute -radiounderwear -potatohistory -titaniummagic -brazilweapon -dressflare -clothdigger -middletemple -crayonwinter -factoryattempt -hallwaybranch -giantptarmigan -troubletaste -sweatshoptyphoon -customerrespect -singledigger -authorrespect -siberianpriest -countrydecrease -nervegauge -handleerror -chickendigger -canadiandelivery -shapechalk -litterxylophone -seaplanesword -barbaraseaplane -mercuryhimalayan -algebramirror -clockwhite -ploughguilty -honeythistle -receiptwilliam -feastfootnote -grapeparent -waitereight -zoologyvinyl -frenchbomber -sudantrail -donnaacrylic -wedgecarrot -mechaniccomic -geographyfeather -noisefield -motherblouse -februarygender -visioncommittee -selectioncello -sailoreight -fatherappendix -frictionblinker -septemberwhiskey -routesphere -helenapartment -rubberreason -separatedcamel -sphynxbackbone -sheetdrink -jellydress -inventorythrone -lathemichael -pendulumblizzard -birthdayexchange -emerynancy -banglecattle -decisionbanker -voyagepuppy -rowboathardware -ornamentforehead -truckthumb -enquirycheese -turnipblowgun -arieswhite -nephewquiet -numericoption -napkinmicrowave -characterbaboon -uncleorder -moustachewater -thursdayinvention -angletarget -stationshovel -activeangora -fleshconga -sudanpheasant -musicianschedule -actorrotate -appealpakistan -purposesideboard -bathroomrevolve -insuranceeyebrow -tellerraincoat -powdercircle -collegegoose -drainmarble -commandhamster -thursdayfisherman -malletteaching -deliverymethane -mimosacarol -nursecloakroom -grousepantyhose -rewardcoast -commanddrizzle -kittydashboard -heavenbutter -diseasepromotion -drivercrocodile -ticketgarden -lyocellpickle -wreckerleopard -lasagnadonald -aprilarmchair -sugarsearch -cougaraustralia -moroccofridge -startquart -pantrysalary -badgerchauffeur -hamburgerlaugh -lunchapparatus -indexchain -congoavenue -phonegarden -butcherbugle -decisionslime -locustcoast -retailermanager -statevoice -sistercousin -roastpopcorn -mouthlotion -locustmacaroni -climbadvice -turretcrate -cyclehedge -soccertemper -donaldrichard -cautioncomma -softwarechina -clausraven -diaphragmbladder -digitalsneeze -canadianreading -locketspade -sunflowerapproval -sweatshopdefense -skatestory -thistlejapan -litterramie -herringwindow -missileminute -structurestep-son -revolverhydrogen -heavencrate -jumperdrake -sweaterpentagon -soybeancreature -crayfishdonna -washerchicory -haircutscarecrow -luttucebrake -dungeontwine -estimatebrother -broccoliravioli -angoraalcohol -camelwrecker -custardtenor -twilightconga -frictionnephew -chairgoldfish -hacksawsubmarine -sarahrichard -japanknowledge -latencyrhythm -chivepyramid -oxygenhobbies -bakeryspark -laundrysampan -ownertyphoon -croissantdredger -turtleladybug -thoughtmandolin -troublequilt -raincoatmailbox -kittystocking -damageflame -gardenbulldozer -printercrown -calculusepoch -wallabycontrol -bowlingticket -armeniantrapezoid -interestbeast -fibrewhorl -eventlocust -odometersunshine -blizzardpropane -ceramicgirdle -gondolatitanium -cloverprice -ghanabicycle -liquorjellyfish -eyebrowcreek -bandanapilot -volcanoclimb -shampoosardine -screwdrain -chocolatecolor -poppyaries -animalmarble -stickhedge -balancejogging -cockroachopinion -seederverdict -separatedshelf -grassglider -dungeonpeanut -toenailoutrigger -hospitalkimberly -turkeyfather -operaengine -mattockaccordion -baseballadult -birchtitanium -baseballnoise -grapeswallow -vegetablechest -landminebubble -satinsquare -familybrian -skiingcoast -squidsoprano -buzzardpassbook -deathlinda -quietmiddle -smokeoctagon -secondimpulse -skiingintestine -messageoctober -babiestextbook -snailmachine -workshopasterisk -cemeteryquestion -macaronisleet -uncleagreement -reindeershelf -pyjamaparent -decreasegerman -crawdadwasher -supplyrichard -ouncesarah -pigeonapple -drillselection -bicycleramie -chessjourney -eventclover -hygieniccamel -prunercemetery -cricketsteam -physicianhexagon -celeryindia -expertcontrol -argentinapaper -bladegasoline -cardboardtexture -floorgasoline -asphaltlight -botanycarnation -bomberswiss -friendhalibut -diamondhydrofoil -octopussidecar -franceclient -octopushockey -pastoremployer -saucepencil -comicinvoice -nigeriarange -guiltyankle -pricefelony -authorrichard -scalebattery -skirtpolice -romaniadaniel -pointwrinkle -animalimpulse -ukrainiannephew -scarecrowtrombone -chimecicada -romanialunge -ornamenttrout -partyfortnight -eggnogquestion -peacefaucet -nightwednesday -cherrysneeze -ravendeborah -coachradar -hedgebattery -cheesetreatment -ikebanajeans -ladybugeuphonium -badgerliver -pansysingle -lizardbabies -postboxplatinum -eyelinerberry -antelopeleopard -screwmanicure -priestjellyfish -tightsmonth -lightningperfume -liquorscorpio -hubcappyramid -squidmorning -enemyreminder -ministerturret -nationroadway -ravenpickle -racingstate -foresteffect -turnipcuban -lathemanager -churchhandball -groupcondor -lyocellsweatshop -fighterbranch -threadsteven -humidityvolcano -karenspandex -bathtubdamage -barberforgery -drinkceramic -faucettimpani -oliveapartment -heavenvault -checkequipment -hardwareinterest -separatedgasoline -attemptblanket -indextrumpet -controlsecure -georgerooster -textbookslave -greenwinter -randomthumb -violetmilkshake -eggplantpurpose -shellpeanut -flowersecure -middlebarge -numberdollar -layerpackage -gymnastwaitress -canoewaitress -oxygenperson -thrillflame -zephyrstate -washerseaplane -chequedigger -kayakbelgian -tanzaniapartridge -swedishcable -notebookdrizzle -lasagnapromotion -parcelforgery -needleslime -stitchbagel -knickersantelope -footballanthony -liquidtimer -ethernetgrease -zebraskill -jellyfishopera -valuemascara -camelbelgian -strangerbooklet -snakefeedback -stingerformat -englishegypt -cactuslyocell -clockalbatross -cocktailbabies -bangledrill -jellyfishswordfish -internetmicrowave -quillyellow -organdinghy -thunderplane -couchaugust -tom-tomanime -hydrantattic -greenblock -gazellesoftware -plastermalaysia -geologycartoon -statementbumper -woolenconsonant -velvetchemistry -successviolet -signatureaction -wallabygrandson -lizardrussian -coughhardware -womanadapter -objectiveinventory -stopsignearth -framevalley -karatehoney -canoeaddress -harmonicacheese -ticketpatch -engineerdavid -eightbucket -hamburgerhexagon -alleyairmail -selectionaugust -judgejames -quartzcrack -spandextwist -weederliver -successex-wife -illegalhimalayan -hardcovervinyl -sushicouch -witchdiscovery -pancreaslatex -bamboobattle -magicianskill -armadillobritish -cymbaleagle -buzzardtom-tom -behaviorsystem -turtlemilkshake -lemonadepamphlet -donalddefense -flowerteacher -mistakeslice -objectiveattempt -capitaldatabase -stateprotest -jennifergrowth -handlebritish -jeanshobbies -slopemethane -professoruncle -silverlyocell -crayonneedle -francekendo -heronairplane -pounddimple -fridgesoftball -tsunamiactivity -troutharmony -purchasebutane -stagecolumnist -skateberry -romanianbagel -storerange -croissantcrate -protestgateway -detectivekangaroo -polyesterchick -fleshkohlrabi -riverpancake -questionbench -argentinachicory -flaresupply -norwegianpartner -mexicanbarbara -checkbrochure -coachpantyhose -larchdungeon -toothhexagon -passivearmadillo -dentistindex -reasonoctopus -secondadvantage -sweaterswallow -porchbiplane -heightswitch -brassniece -femaledream -notifypilot -statementjudge -fieldfather -diaphragmgrandson -bonsaiscanner -bufferjumbo -myanmarfifth -circlecurtain -toastcopyright -woolencherries -pocketbakery -shadowpromotion -vacuumlaugh -nightstreetcar -recordnotebook -magicianobjective -chardexpansion -crackflare -blousealuminium -capricornwhiskey -mirrorpatch -apartmentbrace -bottomaluminium -substancepressure -apparatussecretary -ukrainiansecure -roadwaynepal -answerhubcap -juicewheel -spaghettiethernet -gladiolushardboard -ukrainiansentence -donkeyemployer -beggarparrot -zoologyalphabet -policemanoctopus -leathertemper -basementclient -postageviolet -ladybugfreon -sentenceparty -batteryptarmigan -memoryfiber -shaperussian -amusementparent -japanesesiamese -elementvacation -aftermathaftermath -columnistgoose -transportstove -networkbronze -butterlatex -lunchgemini -apartmentspark -trafficequinox -employeecanadian -tugboatcontrol -cancerpantry -sciencethistle -letterbanana -fatherhedge -lyocellasparagus -ugandasheet -employersecure -patientcouch -workshopparticle -femaledatabase -willowgreen -whalecrocodile -quivertrumpet -thoughtwillow -airbusjapanese -kamikazealphabet -edwarddiscovery -courtclaus -meetingenquiry -beretplanet -pepperreceipt -theorysalary -pointmarimba -missilenotebook -spikepentagon -gorillaex-wife -williamchief -scissorsdaisy -noisemissile -cherryburglar -skatefield -searchborder -womandance -dinghybranch -swingwriter -argentinamichelle -causeweather -radishbiology -linensquash -vinyloutrigger -outputsurfboard -anteaterumbrella -captainpakistan -bankerspark -quicksandepoch -consonantground -networktrombone -pantrypartridge -objectivepolice -fighthospital -roastsardine -gazelleviscose -debtorairship -bangleplayroom -wedgestate -dungeonarcher -washerdonkey -versesquirrel -bookcasepiccolo -templelocket -crooktraffic -nephewchord -coniferstore -pricebuilding -beginnerspleen -stormtsunami -weaponcoach -airshipcactus -hospitalpound -quailvirgo -brotherprose -effecttimpani -asphaltroadway -crackbanjo -spongeweapon -visitorelizabeth -belgianmarket -dragontitanium -spainsquid -insectchina -walrustanker -divisionrabbit -ashtraystart -margaretbandana -oxygenbattery -velvetumbrella -tom-tommandolin -radiosidewalk -strawsurfboard -oceaneditor -rubberoffence -smokeblowgun -chairshingle -bumperhygienic -robertbrochure -partyutensil -croissantvacuum -timerrugby -karenhalibut -blackoctopus -sprucegorilla -chestdiploma -hexagongeorge -poisonbasin -buildingplate -ketchupskill -humorzipper -drizzleenquiry -planecocktail -shallotspinach -crackerstove -spoonraincoat -sweatertractor -moneylipstick -thronec-clamp -seagullflame -fridaycommand -mirrorshield -beastrobert -towersaxophone -halibutgrape -statementbrush -boardcrowd -appendixchalk -bracedinner -lilacturnip -thoughtperson -poundsteel -chancethrone -mailboxemery -rainstormbugle -climbquail -step-sonevening -swedishoctober -modemhedge -airshipcredit -scissorsalmanac -digitalaccordion -jaguarsyria -houseramie -radarwilliam -creaturesunshine -preparedrotate -relationbumper -baboonframe -passivegemini -wedgebiplane -roosterhaircut -liquidwasher -bufferhaircut -cablenylon -asparagusdress -euphoniumflight -stampbroker -equinoxghost -pilotmatch -octobershoulder -pakistansponge -ashtraydefense -lunchroomwindchime -signaturescooter -witnessprison -knickersdelete -soldierniece -resultsinger -shapecloud -rhythmcurrency -fruitdiploma -trowelcrush -crocuspants -partridgeclipper -fedeliniknowledge -daffodiltrombone -narcissuscycle -geometryjuice -paintgoose -successappliance -marchopera -desiredanger -edwardbakery -bargelarch -faucetcrook -weederlinen -apparatusrobin -velvetclipper -prosetoilet -postboxswedish -replacemistake -fragranceweasel -syriadrive -pantiesapartment -theorydoctor -saxophonepilot -nitrogenquince -swallowpastor -prosematch -bubblepamphlet -novelgrease -appendixbandana -tom-tomregret -berrynurse -nursememory -soybeancatsup -sharonpenalty -smellcapital -step-auntarmadillo -alcoholpreface -israeldorothy -bengalaftermath -memoryfridge -computerlaundry -timbaleapology -germanysound -nitrogenstranger -ronaldairport -thunderrainstorm -streamparade -denimpanty -freighterforehead -beardbench -weaponsurgeon -nickeltheater -strangertaste -cobwebcurler -musclehandicap -cushionspark -cymbalscene -donaldchalk -shelfghost -bathroompuppy -educationpickle -creaturespear -continentorange -cylindersociety -transportketchup -lindapopcorn -mirroraluminum -turretcardboard -brainniece -quaildrake -haircutslipper -packagekitchen -lotionnoise -freighteremployer -minibusstart -attentionmattock -thailandpatio -parsnipamerica -kevinchain -spherequart -educationporter -riveryellow -geometryindustry -sweatshopreminder -karenalbatross -raincoatwaiter -hexagonglass -skirtscrew -canadianweasel -libraryquality -tulippanther -piscesemployee -gradepressure -amusementcocoa -accountwallaby -drivingsemicolon -crossclose -networkstool -exhaustparade -forcekevin -luttucedigger -cirrusbotany -propertylathe -basketcloakroom -armchairdinghy -bladehumor -hyacinthpaste -dinosaurmacaroni -greenfloor -stretchbrand -sparrowfebruary -reminderinternet -snailbeast -trousersshelf -algeriajacket -printerdaughter -capitalaustralia -creamhyena -voyageweight -timbalehurricane -spearpanties -frametexture -herringbeach -jenniferstep-aunt -saxophonenancy -agendajudge -fedelinipolish -giantfreeze -zoologydomain -cyclealloy -ptarmigansleep -printpuffin -voicetrade -dahliacheque -cockroachlaugh -currentgirdle -bettyplastic -mexicancirrus -williamhouse -arrowappendix -quartmercury -octoberbedroom -rainstormantelope -streamblock -cormorantyogurt -channelbaboon -orangepiano -balinesequotation -romanianromanian -bufferscorpion -indonesiaradiator -buildingvolcano -cucumberrouter -consonantbotany -seagulljuice -rocketjoseph -anteatertortoise -oatmealrecess -celerytrial -thingwrecker -underweardiaphragm -step-sonanthony -celestecousin -purpleequinox -chimespruce -taxicabshame -jenniferitalian -separatedmeter -bagelhalibut -butanepollution -grandsonkevin -timermulti-hop -quailsquare -haircutrussian -zephyrmakeup -baseballcheque -sugartanzania -potatoathlete -ceilingsardine -croissantsquash -offerswiss -borderpakistan -bettypolish -educationsharon -bumperbeard -pajamaoctave -messagebadger -healthglove -goldfishbowling -spruceagreement -witnesspostage -housewitness -pansystitch -armchairblade -replacequince -kidneyracing -childsubstance -gymnastdrink -chestherring -kennethmessage -thundersycamore -gianttruck -chauffeurfrost -tongueopinion -alloytemper -turnoverdaughter -controldigestion -musclepiano -chardreligion -securefight -clothbladder -quincetrial -melodyrequest -internetmakeup -epoxymitten -featureethernet -airmailbabies -peonycyclone -mirrorpassenger -rotatemosquito -checksupport -degreesphere -mexicolentil -whaleminute -beasttights -timerblanket -ceilingslice -computerdavid -singlebeetle -blockanimal -ronaldtoast -educationraincoat -partnerbudget -forestromanian -illegalfortnight -draineditor -ariescrayon -spoonrussia -coniferphone -interestcapital -shellsanta -toenailharbor -numerictsunami -bracetsunami -bettysociology -sphynxnorwegian -hobbiesformat -formatobjective -marimbatouch -magicblowgun -adapterprofessor -carriagebrandy -apparatusservant -plantsinger -collarpyramid -patchsoldier -propertyshingle -scorpioncurtain -januaryquarter -porcupinephysician -criminalcheque -debtorcactus -indiainternet -invoicepatricia -fightertrail -kendovenezuela -medicinecircle -streetcarnigeria -mistakethrone -comfortsearch -cirrusnickel -agendaamerica -turkeyevent -woundnoodle -scorpiongondola -greasechime -galleyvenezuela -frienddinghy -scorpioheaven -breadlegal -missiletheory -queencucumber -snowplowegypt -stretchdragonfly -beetlepurchase -teachingscanner -tendencymotorboat -wastecactus -zebraroute -boundaryamerica -bugleisland -cushionaftermath -algeriasquid -alcoholikebana -oniontrial -williamquestion -templegreen -saucebagel -dryerriver -tomatochild -sundialscorpion -animetextbook -processhardcover -firemansardine -ukraineadvice -dorothytooth -dressingquince -bookcasehistory -hacksawarmadillo -cuticlesilica -condorgender -eventtreatment -animewatch -floodbrass -rubberfibre -ghanafamily -inputpassbook -pyjamascooter -partyriver -chalkimpulse -tornadonewsstand -historygallon -carnationpastry -davidwound -forecasttuesday -actionsmell -backbonebladder -canadacancer -targetjapan -meterradiator -flightslave -offencereceipt -incomeairport -squirrelenergy -trialbrake -davidmachine -insectchurch -gliderturnover -airplaneorchid -colonvalue -motorboatinput -cherrypoison -stickmascara -pastorsparrow -alphabetcello -digitalnickel -hallwayflight -carolpimple -glovebutane -printoutput -salarybread -timpaniparsnip -changeburst -licensecougar -timpanilunch -cartoonbreak -brackethacksaw -searchtitle -driveprofessor -georgetaxicab -israelavenue -recordblock -hammertrunk -cottonraven -notifybeech -pancakequotation -chalkheadline -washerlentil -actionverdict -christmascreature -sarahpizza -chalkhoney -sturgeonwedge -cementmacrame -bracketorchid -harbordelivery -singlesurfboard -innocentunderwear -chainviolin -keyboarddream -typhoonmarket -zephyramount -davidsemicolon -algebraclick -profitvolcano -saturdaycanada -pendulummusic -sharksaxophone -orchiderror -recordprotocol -foxgloveaugust -cougargermany -spiderspinach -rutabagaspark -roadwaycrayfish -zephyrwhale -hubcaprussian -trialavenue -kayakaries -studymarket -blockfamily -chequeoutrigger -divorcedalphabet -blockdirection -potatospinach -basintornado -graphicgosling -numericdeficit -temperscreen -englishmustard -sopranohoney -airportbranch -oceanspoon -seashoresuede -inputcable -fairiesappliance -drizzleenglish -mexicoschool -turnipduckling -propertysideboard -bargefountain -bobcatbarometer -baritonecrowd -creatoractivity -porcupinelimit -breathfreezer -leopardbanana -breakdaisy -engineerhealth -forgerylibrary -treatmentobjective -dinghyikebana -ticketpromotion -systemchair -brokervision -liquidbutcher -russiashrine -siameseperson -drizzleincome -snowflakeceleste -ministerriver -picklemarble -dungeonbedroom -americatrial -tastehumidity -recesskenneth -trickaccount -newsstandfeather -brownswamp -crushhouse -pyjamaopinion -equipmentbookcase -musicianguilty -sugarquestion -englishswedish -closetcolumn -notifyotter -rainbowmarimba -healthbanjo -tsunamistomach -freighteraquarius -clockinvoice -reportankle -weaponsunshine -linenfeedback -coastpocket -distancedecrease -packethyena -companysurgeon -bargepeony -debtorbongo -jellyfishhearing -believemother -butchercuban -advantagemexico -friendstone -brazilearth -burglarwhite -kangaroocurtain -saucedrain -lyocellsidewalk -ownerwedge -crayonjewel -buffetwealth -pantrycemetery -threadclipper -orangejason -pastryplaster -algeriaagenda -cylinderarcher -monthbillboard -partyshears -fortnightharmonica -lightdeadline -lungepatient -burstapartment -companyknight -patchsalesman -securitywhite -spaghetticrook -storyvolcano -armenianbicycle -peacebroker -grouprepair -customerstocking -landminesurfboard -consonantrevolver -halibutcolor -officedessert -swordfishequinox -sailorsidecar -industryapparel -gore-texchinese -couchdorothy -englishanger -shoemakergemini -walletpayment -donnaapartment -chestpoint -brandtractor -answerbasket -cricketshrine -trunkcathedral -drawercarpenter -plasticknight -dinghysushi -subwayoatmeal -cartoonbudget -streetcaropera -studycomic -submarinebasement -elizabethwednesday -luttucechildren -squashinsurance -tastecontinent -patientteacher -jacketaftermath -japaneseexistence -plasticclaus -bedroomtrumpet -resultsanta -powersidecar -spaghettivalley -cyclefrench -bedroommiddle -tendencytrain -seagullravioli -latexpackage -streamselection -washerrelish -zoologyemployee -pantyhosedesign -managercentury -mascarahumor -edgerrhythm -trumpetcousin -romaniansoybean -microwavemoustache -ghostmaria -cricketdance -freoncondor -pentagontouch -magazineeight -cardboardwitness -optionjapanese -aprilbrake -mondayblouse -attackpickle -thoughtguide -harmonicatruck -shallotcarol -repairsmash -crosswalrus -streetclose -zoologyorchestra -cirruskitten -kilogrambaseball -shortstoenail -acrylicbooklet -cloudyblock -waitresscurrency -africaeyelash -jenniferalcohol -diaphragmslipper -pencilsprout -harborstreetcar -magicgarden -monkeybeggar -stockingbabies -novelgearshift -wastegemini -ministerpajama -egyptgazelle -armadilloplant -powderlizard -forcecougar -hallwayhydrofoil -clarinetswallow -womenpyjama -ariesbrand -kayakcollar -viscoseliquid -buzzarddouble -melodyschedule -outputyogurt -dipstickasparagus -hyenaneedle -cupcakebulldozer -messageorchestra -beachfisherman -clothexistence -recorderlunge -dorothycoast -propertyplough -karatemargaret -hallwaylearning -asteriskreindeer -mariabreakfast -creditsister -airbusholiday -trunkexhaust -aftermathgrenade -officesurprise -accordionthistle -moustacheanteater -eggplantbuffet -myanmarchord -spaghettisaturday -dahliahobbies -stingernight -stationwitness -interestburst -britishasparagus -snakegroup -gooseexample -step-sonpackage -cardigandorothy -printergeology -brokercellar -jewelbuzzard -jasoncaption -benchtoast -lightcellar -windowjelly -successtanker -insuranceicicle -sleepswiss -carolfrench -produceonion -pocketsnail -schedulelotion -brushkamikaze -guaranteemexico -cerealunderwear -sweatercourt -bottomcaption -crossepoch -wastelasagna -dogsledbranch -skilleffect -passivelemonade -congotiger -newsstandclass -tastethread -spaindetail -sandwichfather -statisticitalian -turtleolive -greekstring -ferryboattwilight -cheesealgeria -lobsterbeach -spinachlettuce -sentencewrench -ravioliquartz -mimosawriter -motherliver -felonywilliam -croissantchinese -inventoryex-wife -honeyperson -germanytrail -zipperracing -touchdrive -angoravault -offencecriminal -chinesedollar -bugleapril -celloplant -dinosaurshock -beliefvault -cupcakeberet -shadowbadger -educationorange -camelodometer -riverprofit -lindaburglar -dimplebladder -biplanemoney -periodrouter -japanindex -squirrelsheep -ariessmell -celsiuskorean -recordbirch -tailorbabies -barberkevin -baboonalarm -disgustfemale -packageshallot -halibutoxygen -norwegiannarcissus -sistercouch -kittenreport -dancercurler -stovefrance -islandsunflower -fluteinventory -decadeverse -heliumbarometer -creatorfrance -depositplate -richardunderwear -ferryboatcymbal -broccolialbatross -sentencebreakfast -saturdayleopard -barometergateway -cymbalsecure -hacksawswordfish -orchestratiger -accountporcupine -shearsaftermath -vinyljennifer -gallonparticle -pressurestart -handballplant -chalkmicrowave -inventorymallet -skillmexican -digestionpollution -garagenewsstand -sproutcelery -octopusaddition -raviolibugle -edwardperfume -violetprice -prunerhallway -apparatuscause -wreckerhyena -aprilrainbow -desiredivorced -anatomycannon -chairmarch -bargegarden -scalliongrandson -footnoteharmony -hurricanedragon -debtorsunflower -governorblanket -coastchurch -activebutcher -parsnipjoseph -fluteniece -priceafrica -tromboneheight -lobsterstick -discoverytrick -slopemustard -footnotequestion -stevensnowplow -bathtubvolcano -raviolilicense -chauffeurbubble -crayongeese -comictrial -patiotom-tom -europechick -snowstormfamily -anthonyregret -seashorecurrency -enquirygiant -dinosaurhamburger -cougarcricket -internetukraine -spandexcanadian -jeansgladiolus -asphaltedger -storyagenda -equinoxactive -spearrelative -columnistsoybean -vulturefisherman -scentastronomy -bufferbrace -treatmentplier -sunshineblizzard -collegeamount -breakfastspear -gasolineaddition -throneactivity -lightheart -stepsonbrass -williambuffet -thingsociety -bathtubcornet -nursewoolen -organstep-son -cinemapassbook -womenchill -newsprintethiopia -tendencytugboat -cactusepoch -tanzaniadoctor -spherepayment -cobwebmusic -postboxdollar -creaturemexico -disgustfountain -spadepajama -paperbackwaiter -italiantanzania -myanmardoubt -trialpoppy -slashrowboat -hacksawdeodorant -blizzardsweatshop -physicianpoland -nightriddle -sweetsmonday -vegetabledisgust -oniontoilet -strawgrandson -cowbellthursday -dibblemelody -stockingfactory -c-clampharmony -advantageknowledge -crawdadfireman -drivechicory -woundparsnip -yachtengine -venezuelanickel -chickjeans -enquirystopsign -rutabagashrimp -geminisuede -pancreaslatex -ikebanapatio -turtlecaptain -shellpassbook -glidingspoon -whorlmaraca -japanesescraper -kohlrabieggnog -marriedsharon -sweatshopsnowman -streamthrill -targethydrofoil -blizzardrooster -saxophonedollar -laborerpanty -purchaseyogurt -cyclonepromotion -sociologysnowflake -armchairprofit -whistlequeen -schoolstick -arrowuganda -creatureaddition -freonutensil -buildingflight -tenorroadway -poppysociology -chickenhorse -bearddorothy -crayonplatinum -susanmonday -trouserslumber -goosedrizzle -octavenigeria -kevinmachine -clipperclerk -disgustbelieve -pamphletsnowman -ex-wifeforehead -toiletscent -crackercuban -swordfishbritish -fishermancomposer -foxglovenephew -soybeangrandson -depositbobcat -sturgeoncaravan -waterfallcheese -potatoblood -broccoliforce -productseashore -treatmentshell -cricketaluminium -chickensponge -territorygondola -reportferry -chordchest -consonantniece -juicelentil -cherriesitaly -calendarpelican -throatporch -gore-texfeedback -outputclass -calendarlyocell -spaghettipants -bloodliquor -mustardspider -twistthing -libramosque -firewallkilogram -continentsheep -tradequeen -ploughcockroach -smokeheadlight -searchwhale -zebramotion -handicapcover -willowjames -apologylaborer -grousexylophone -cousindonkey -timbalesneeze -mosquitolatency -leopardseagull -criminalpersian -whiskeywalrus -multi-hopstep-aunt -radiatorgorilla -handledrizzle -coastdeborah -softwarestory -crossdryer -streetketchup -stoollipstick -silversaxophone -angledigger -angoraaugust -mandolindress -stoolactive -afternoonocelot -skillwheel -ladybugshape -centurysturgeon -girdleindonesia -walruslatex -discoverysheep -snowmanshark -williamengine -energyguilty -canvaswillow -cinemacherries -throneornament -shoemakerplayroom -giantalibi -formathandball -tuesdaynitrogen -moneypoint -ceramicpostage -timbaleskiing -scissorsamusement -glidertom-tom -ukrainianbuffer -borderlimit -lycradrama -additionhimalayan -eventagenda -barometerliquid -slipperrocket -bracketagreement -aquariusmichael -octavemacaroni -effectsignature -copperenemy -melodydirection -lizardflower -sandwichladybug -spinachcaution -turretvision -motherspoon -mistakeeggnog -jumpersnail -professordamage -pickletsunami -pyjamabelieve -decreaseronald -weaponfifth -theaterfirewall -belgiandugout -scorpionrubber -searchodometer -marketresult -sweetssalary -minibusketchup -mailboxbench -spleeneurope -geraniumhouse -dramamakeup -banglecrime -gondolacaption -dahliaparent -violettoenail -peppereducation -japanesefeeling -onionquotation -furnituretongue -surgeonselect -angercrate -knifecarrot -marginsearch -luttucesense -sessionforce -plainbongo -custardburglar -thursdayfreezer -historyscanner -mascarafelony -paperexample -recorderglider -marginbillboard -fluteavenue -collarvoyage -prosepantyhose -drilllyric -hexagonpancreas -sudanjellyfish -syrupforest -cubancaution -throatconifer -cemeterycornet -donnawaitress -clipperappeal -lentilestimate -jumperreduction -wastelatex -approvalplanet -dieticianshark -pencilsyrup -communitygoldfish -strangersubway -governormelody -thailandheron -georgetennis -springtimbale -cloverrabbit -chinesefemale -banjoswimming -shovelsalary -waterfallplier -calculusmaple -syrupbeard -babiestoast -step-auntgraphic -step-sonclaus -smokecoffee -skirtcactus -ferrybathroom -driverex-wife -pelicanconifer -riverbedmarket -actressbakery -trailretailer -mechaniccontrol -magicdeadline -epochkenya -broccolimulti-hop -alloyshield -drainspeedboat -geologymacrame -violetstorm -cicadarabbit -forecastheadline -companyaddition -featherstore -illegalheadlight -baboonoffice -herringaluminium -blanketdenim -tenorkettle -freightermailbox -furnitureeducation -pointsurprise -weaponflood -farmercanvas -chineseattention -versequiet -centurystudy -goldfishdungeon -slopesquirrel -canvasclaus -yogurtcanvas -lilacfaucet -bottlethumb -harmonicacereal -pantrycapricorn -tortoisenotify -toenailfloor -middletheater -calendarswallow -celestecopyright -monthcountry -zebraspace -alloyasphalt -propanewound -knickerssurfboard -deficitsmile -matchtriangle -paperdinner -teachingbrick -stopwatchthomas -authorbridge -readinggrade -minibusknowledge -armadilloformat -kittyminute -relativeindia -feelingaftermath -mustardquartz -gatewaybranch -prosechief -statisticthread -towerhaircut -processwalrus -temperreason -drilltoilet -karatefriction -summerpersian -tsunamibeard -pancreashelmet -separatedtugboat -shadowrespect -brakemotion -step-soncalendar -printerror -femalecomposer -chocolatesmash -taiwanvoice -formatrubber -apparatushourglass -shelfdugout -positionpollution -clothmuscle -visitorshrine -enquirykayak -anglepasta -kohlrabibronze -pansyequinox -susanpastor -liquormelody -canadianstraw -popcornpassenger -deadlinebamboo -bankbooksquare -pastordaniel -cuticlefarmer -bookcaseparsnip -ikebanabathroom -catsupjason -papergoose -syriawinter -scraperrainbow -exchangewinter -segmentwound -flavorjuice -clausquartz -chocolateminibus -layergermany -successsunflower -stepsonhealth -gallontyvek -nervebengal -pamphletspace -soccershorts -kevinparcel -timbalearies -paraderocket -yogurtcathedral -candlecreature -mountaincontinent -juiceradio -passbooksoccer -juiceknight -priestpurpose -shieldapartment -lizardangle -snowflakeclient -religionfireman -multi-hopbottle -februarysmell -zephyrrutabaga -effectnigeria -nickelbalance -apartmentquiet -impulsesidewalk -beavercrush -titlehistory -congojacket -aftermathgander -woundbamboo -mondayjaguar -titaniumbladder -beechwealth -ramieoxygen -blacktaiwan -tendencyclimb -lizardmoney -minutecylinder -carpenterinventory -richardperiod -operationpayment -bumpersharon -bargehammer -onionbutcher -ferrystore -surfboardviscose -numericpiccolo -successdogsled -quincemarket -softwarerelish -canadageese -cubannovember -liverbracket -babiesbulldozer -fightercarnation -sessionjewel -anteaterminibus -mondaypaper -gearshiftfelony -adaptertornado -shrimpcactus -valleygauge -lyocellpilot -applesparrow -atticdrink -step-sonsweatshop -elephantstocking -producefireman -macaroniwomen -decimaldresser -doctorrhythm -channelphysician -camerapyjama -cirruschicory -mandolinpurchase -pandacoast -laborerpolice -fridgemusician -decadehoney -summersycamore -stationlemonade -communityswimming -collisiongliding -educationbookcase -formatpersian -aluminumrhythm -colorweather -boardscarecrow -bumpersnowstorm -meetinggeese -couchbuffer -chancesoftdrink -airplanemeasure -muscletongue -adaptervirgo -mimosaalloy -bladderhamburger -childcolor -stopwatchtrial -middleletter -wallabyjeans -musicdenim -broccolination -slopecatsup -waterchick -currentnarcissus -quivermailman -selectiondanger -angerslime -avenueparrot -ukrainiansarah -davidradar -pelicanmascara -hurricanetimbale -liquorriver -drawerberry -replacehobbies -underwearseason -firewallbreak -sproutlarch -bracecarol -bottompolyester -hockeyheight -peonyseeder -clientmeter -wastetwilight -peppergarlic -gymnasthearing -drivingbutton -sliceikebana -zephyrviolet -badgerambulance -asteriskenglish -pantyhoseplanet -karatemodem -scalechildren -baseballpastor -crateoutput -recorderpanda -broccolitrumpet -brochureporcupine -passivehurricane -vulturevacation -pyjamaforgery -bubblecopyright -octavecloudy -grousestream -supplycannon -bagelbench -punchairplane -copperwhale -polandshears -canvasseptember -friendlight -lipstickrevolver -shrimpjewel -scorpionairship -bagpipeturkish -timpanivessel -airbustyvek -makeupbeetle -egyptriverbed -clutchpencil -equinoxbobcat -bronzesyria -brokersecure -astronomylilac -wrenchsponge -flightapproval -bucketmorning -lemonadestudy -condoreagle -diaphragmmanager -melodyheadline -decimaldrill -carolgoldfish -illegalferryboat -faucetfeather -mountaindebtor -trickgosling -knifejason -personreindeer -postboxknowledge -backbonesnowman -capricorncattle -shoemakerbirthday -shamecrawdad -pheasantsidecar -christmasburst -rainbowexhaust -monthholiday -hacksawradio -machinethailand -letterchildren -bracetoenail -edwardbudget -screenstation -giraffedeficit -eyelashpiccolo -workshopbrain -swordferryboat -quiverswing -animeturret -yellowsecure -pantsselection -edgeremery -donnadinosaur -fedelinielephant -latheposition -calculussushi -alligatorlicense -divingorchestra -custardankle -apparatusglass -librablanket -cheekdesign -dugouttwist -kangarooitalian -strawbarometer -friendappliance -cocoacoast -relationgirdle -kayakevent -tenorsauce -streamcurtain -ugandabuffet -questionappendix -rangesardine -mistakeliquor -italyoatmeal -bandanastep-son -swallowbrian -libraryrooster -guitarcormorant -alligatorarmadillo -olivediploma -mandolinvietnam -chequeonion -moustachestaircase -tugboatpepper -babiesmandolin -chickenbobcat -sleeptrade -ticketfeature -governortanker -priestsubstance -squarelegal -badgemacaroni -hospitalcream -chieffriction -birthdaycloudy -sandrapancreas -licensepimple -chauffeurstraw -sandrabalinese -sailboatboard -eyelinergreece -ceramicvulture -wasteturtle -dragonflybiplane -squareglass -doubleplywood -aluminumeyelash -cougarlearning -swordcanvas -digestioncloset -kittycuban -cratebarge -timbaleepoxy -mosquitocolor -stoolsurname -brushlocust -noisestatement -blockcrocus -weedermusic -ounceedward -preparedrabbi -umbrellatimbale -eveningpuffin -mondayoffence -ferrydrain -multi-hopfriday -clerkcollege -yogurtpatio -coastlotion -elizabethepoxy -denimlanguage -estimatelaugh -blackeffect -bugleheight -jasonrectangle -sneezebusiness -drainsarah -countryattack -fifthnephew -blacklaura -parcelbangle -russiaforce -australiavoice -linenviola -shelfcicada -sidewalkbusiness -slashhospital -saxophonereceipt -dressingmeasure -heavendressing -spinachsweets -marriedspeedboat -tendencyhobbies -barbarafront -doublemirror -pantiesnumeric -shademailman -hobbiesgarage -tradepyjama -engineerashtray -thunderlizard -targetbench -hydrantspleen -trunkfisherman -africapastry -violintrain -spoonstep-son -managereducation -brickalibi -kangaroofirewall -stovehydrogen -internetpassbook -expansioncupcake -operationsecretary -methanesmash -skillopera -prefacebulldozer -scorpionsaxophone -valleyangora -twistacrylic -puppymaria -acousticniece -nephewemployee -turretrelish -potatosleet -cupboardthistle -apartmentpunch -smelljaguar -sociologyquilt -modemfelony -otterlizard -guiltyharmony -spandexfridge -groundferryboat -onionwillow -cocoascience -pizzaentrance -mouthbattery -soccerviolet -tortoiseenemy -radiatorceiling -boardblood -grandsonwhite -fieldcushion -chequeelbow -freondriving -birthalbatross -armeniangirdle -davidbulldozer -applelipstick -policemanlatex -wristbranch -gendershare -yachtchest -macramefeeling -adaptercoach -successtennis -teacherfeeling -innocentsubmarine -furnituregalley -biplanetexture -coverwrinkle -cucumberspider -hobbiespriest -womenmichael -harmonicaskirt -valleypatch -agreementdungeon -quivermirror -crickethygienic -humorpoultry -fleshdolphin -broccolibrand -cylindermarried -noodlecanadian -leopardcowbell -chestglove -singlejames -cocktailsundial -inventoryconifer -nationnerve -swisspostage -hyacinthsociety -surgeonsidecar -otterswamp -pocketperson -cousinnoise -epoxyllama -teacherzipper -asphaltalarm -aluminiumdouble -submarinekarate -singerenquiry -airmailgermany -coppersquash -quicksandquartz -cucumbermotorboat -ostrichcurrent -numericparrot -pancakecolor -bracketflower -requestcicada -seaplanerouter -softballtoilet -segmentlibrary -lemonadeyacht -vacationmuseum -yellowtheater -officemagician -mechaniccheck -randomswallow -bargearcher -cricketbrother -guitarronald -fedeliniinnocent -spongecreek -firemandebtor -discoverytimpani -tigerbelgian -camelworkshop -yogurtmilkshake -himalayanferryboat -ceilingwhale -kidneyfortnight -japandancer -questionflight -chiveleopard -woolenanthony -indonesiatennis -greecehimalayan -jellydatabase -orchidsoybean -pelicanferryboat -luttucepancake -featuregander -spacebanjo -spherefoxglove -cormorantpaste -housebladder -dancercraftsman -pyramidjanuary -cicadachime -singlesweatshop -pancreasdebtor -kittyprice -cubansalad -prunergeorge -doubtbanjo -blowgunsquash -syriageranium -sentencebagel -substancekenya -ukrainianplatinum -camelitalian -kittytheory -relativeconga -alleypoland -wastebeast -dahliaflood -cannongeranium -objectiveappendix -parsnipspace -humorsmash -kimberlytractor -cookingbrand -paintnitrogen -asterisklyocell -calendarrainbow -lindadinner -interestbanana -richardmercury -algeriadragon -featuremarch -offencepackage -entrancesession -donkeyglove -messagehyacinth -slashsugar -invoicebiology -slavestock -fightfeather -wallabyhacksaw -bucketalloy -methaneliver -carolhalibut -pricecolony -staircasesoftdrink -insectcolor -telleremery -siberianrooster -messagerussian -gatewaymuseum -columnistpajama -adapterinterest -chemistrygeorge -flightporch -c-clampbeginner -egyptwalrus -honeyvessel -spherelentil -brandyjasmine -shadowshovel -ellipseshoulder diff --git a/install.sh b/install.sh index 417cc9c7..80de81a7 100755 --- a/install.sh +++ b/install.sh @@ -1,3 +1,293 @@ -#!/bin/bash -cd iso/installer -./install.sh "$@" +#!/usr/bin/env bash + +myINSTALL_NOTIFICATION="### Now installing required packages ..." +myUSER=$(whoami) +myTPOT_CONF_FILE="/home/${myUSER}/tpotce/.env" +myPACKAGES_DEBIAN="ansible apache2-utils cracklib-runtime wget" +myPACKAGES_FEDORA="ansible cracklib httpd-tools wget" +myPACKAGES_ROCKY="ansible-core ansible-collection-redhat-rhel_mgmt epel-release cracklib httpd-tools wget" +myPACKAGES_OPENSUSE="ansible apache2-utils cracklib wget" + + +myINSTALLER=$(cat << "EOF" + _____ ____ _ ___ _ _ _ +|_ _| | _ \ ___ | |_ |_ _|_ __ ___| |_ __ _| | | ___ _ __ + | |_____| |_) / _ \| __| | || '_ \/ __| __/ _` | | |/ _ \ '__| + | |_____| __/ (_) | |_ | || | | \__ \ || (_| | | | __/ | + |_| |_| \___/ \__| |___|_| |_|___/\__\__,_|_|_|\___|_| +EOF +) + +# Check if running with root privileges +if [ ${EUID} -eq 0 ]; + then + echo "This script should not be run as root. Please run it as a regular user." + echo + exit 1 +fi + +# Check if running on a supported distribution +mySUPPORTED_DISTRIBUTIONS=("AlmaLinux" "Debian GNU/Linux" "Fedora Linux" "openSUSE Tumbleweed" "Raspbian GNU/Linux" "Rocky Linux" "Ubuntu") +myCURRENT_DISTRIBUTION=$(awk -F= '/^NAME/{print $2}' /etc/os-release | tr -d '"') + +if [[ ! " ${mySUPPORTED_DISTRIBUTIONS[@]} " =~ " ${myCURRENT_DISTRIBUTION} " ]]; + then + echo "### Only the following distributions are supported: AlmaLinux, Fedora, Debian, openSUSE Tumbleweed, Rocky Linux and Ubuntu." + echo "### Please follow the T-Pot documentation on how to run T-Pot on macOS, Windows and other currently unsupported platforms." + echo + exit 1 +fi + +# Begin of Installer +echo "$myINSTALLER" +echo +echo +echo "### This script will now install T-Pot and all of its dependencies." +while [ "${myQST}" != "y" ] && [ "${myQST}" != "n" ]; + do + echo + read -p "### Install? (y/n) " myQST + echo + done +if [ "${myQST}" = "n" ]; + then + echo + echo "### Aborting!" + echo + exit 0 +fi + +# Install packages based on the distribution +case ${myCURRENT_DISTRIBUTION} in + "Fedora Linux") + echo + echo ${myINSTALL_NOTIFICATION} + echo + sudo dnf -y --refresh install ${myPACKAGES_FEDORA} + ;; + "Debian GNU/Linux"|"Raspbian GNU/Linux"|"Ubuntu") + echo + echo ${myINSTALL_NOTIFICATION} + echo + if ! command -v sudo >/dev/null; + then + echo "### β€˜sudoβ€˜ is not installed. To continue you need to provide the β€˜rootβ€˜ password" + echo "### or press CTRL-C to manually install β€˜sudoβ€˜ and add your user to the sudoers." + echo + su -c "apt -y update && \ + NEEDRESTART_SUSPEND=1 apt -y install sudo ${myPACKAGES_DEBIAN} && \ + /usr/sbin/usermod -aG sudo ${myUSER} && \ + echo '${myUSER} ALL=(ALL:ALL) ALL' | tee /etc/sudoers.d/${myUSER} >/dev/null && \ + chmod 440 /etc/sudoers.d/${myUSER}" + echo "### We need sudo for Ansible, please enter the sudo password ..." + sudo echo "### ... sudo for Ansible acquired." + echo + else + sudo apt update + sudo NEEDRESTART_SUSPEND=1 apt install -y ${myPACKAGES_DEBIAN} + fi + ;; + "openSUSE Tumbleweed") + echo + echo ${myINSTALL_NOTIFICATION} + echo + sudo zypper refresh + sudo zypper install -y ${myPACKAGES_OPENSUSE} + echo "export ANSIBLE_PYTHON_INTERPRETER=/bin/python3" | sudo tee /etc/profile.d/ansible.sh >/dev/null + source /etc/profile.d/ansible.sh + ;; + "AlmaLinux"|"Rocky Linux") + echo + echo ${myINSTALL_NOTIFICATION} + echo + sudo dnf -y --refresh install ${myPACKAGES_ROCKY} + ansible-galaxy collection install ansible.posix + ;; +esac +echo + +# Define tag for Ansible +myANSIBLE_DISTRIBUTIONS=("Fedora Linux" "Debian GNU/Linux" "Raspbian GNU/Linux" "Rocky Linux") +if [[ "${myANSIBLE_DISTRIBUTIONS[@]}" =~ "${myCURRENT_DISTRIBUTION}" ]]; + then + myANSIBLE_TAG=$(echo ${myCURRENT_DISTRIBUTION} | cut -d " " -f 1) + else + myANSIBLE_TAG=${myCURRENT_DISTRIBUTION} +fi + +# Download tpot.yml if not found locally +if [ ! -f installer/install/tpot.yml ] && [ ! -f tpot.yml ]; + then + echo "### Now downloading T-Pot Ansible Installation Playbook ... " + wget -qO tpot.yml https://github.com/telekom-security/tpotce/raw/master/installer/install/tpot.yml + myANSIBLE_TPOT_PLAYBOOK="tpot.yml" + echo + else + echo "### Using local T-Pot Ansible Installation Playbook ... " + if [ -f "installer/install/tpot.yml" ]; + then + myANSIBLE_TPOT_PLAYBOOK="installer/install/tpot.yml" + else + myANSIBLE_TPOT_PLAYBOOK="tpot.yml" + fi +fi + +# Check type of sudo access +sudo -n true > /dev/null 2>&1 +if [ $? -eq 1 ]; + then + myANSIBLE_BECOME_OPTION="--ask-become-pass" + echo "### β€˜sudoβ€˜ not acquired, setting ansible become option to ${myANSIBLE_BECOME_OPTION}." + echo "### Ansible will ask for the β€˜BECOME passwordβ€˜ which is typically the password you ’sudo’ with." + echo + else + myANSIBLE_BECOME_OPTION="--become" + echo "### β€˜sudoβ€˜ acquired, setting ansible become option to ${myANSIBLE_BECOME_OPTION}." + echo +fi + +# Run Ansible Playbook +echo "### Now running T-Pot Ansible Installation Playbook ..." +echo +rm ${HOME}/install_tpot.log > /dev/null 2>&1 +ANSIBLE_LOG_PATH=${HOME}/install_tpot.log ansible-playbook ${myANSIBLE_TPOT_PLAYBOOK} -i 127.0.0.1, -c local --tags "${myANSIBLE_TAG}" ${myANSIBLE_BECOME_OPTION} + +# Something went wrong +if [ ! $? -eq 0 ]; + then + echo "### Something went wrong with the Playbook, please review the output and / or install_tpot.log for clues." + echo "### Aborting." + echo + exit 1 + else + echo "### Playbook was successful." + echo +fi + +# Ask for T-Pot Installation Type +echo +echo "### Choose your T-Pot type:" +echo "### (H)ive - T-Pot Standard / HIVE installation." +echo "### Includes also everything you need for a distributed setup with sensors." +echo "### (S)ensor - T-Pot Sensor installation." +echo "### Optimized for a distributed installation, without WebUI, Elasticsearch and Kibana." +while true; do + read -p "### Install Type? (h/s) " myTPOT_TYPE + case "${myTPOT_TYPE}" in + h|H) + echo + echo "### Installing T-Pot Standard / HIVE installation." + myTPOT_TYPE="HIVE" + break ;; + s|S) + echo + echo "### Installing T-Pot Sensor installation." + myTPOT_TYPE="SENSOR" + break ;; + esac +done + +if [ "${myTPOT_TYPE}" == "HIVE" ]; + # Install T-Pot Type HIVE and ask for WebUI username and password + then + # Preparing web user for T-Pot + echo + echo "### T-Pot User Configuration ..." + echo + # Asking for web user name + myWEB_USER="" + while [ 1 != 2 ]; + do + myOK="" + read -rp "### Enter your web user name: " myWEB_USER + myWEB_USER=$(echo $myWEB_USER | tr -cd "[:alnum:]_.-") + echo "### Your username is: ${myWEB_USER}" + while [[ ! "${myOK}" =~ [YyNn] ]]; + do + read -rp "### Is this correct? (y/n) " myOK + done + if [[ "${myOK}" =~ [Yy] ]] && [ "$myWEB_USER" != "" ]; + then + break + else + echo + fi + done + + # Asking for web user password + myWEB_PW="pass1" + myWEB_PW2="pass2" + mySECURE=0 + myOK="" + while [ "${myWEB_PW}" != "${myWEB_PW2}" ] && [ "${mySECURE}" == "0" ] + do + echo + while [ "${myWEB_PW}" == "pass1" ] || [ "${myWEB_PW}" == "" ] + do + read -rsp "### Enter password for your web user: " myWEB_PW + echo + done + read -rsp "### Repeat password you your web user: " myWEB_PW2 + echo + if [ "${myWEB_PW}" != "${myWEB_PW2}" ]; + then + echo "### Passwords do not match." + myWEB_PW="pass1" + myWEB_PW2="pass2" + fi + mySECURE=$(printf "%s" "$myWEB_PW" | /usr/sbin/cracklib-check | grep -c "OK") + if [ "$mySECURE" == "0" ] && [ "$myWEB_PW" == "$myWEB_PW2" ]; + then + while [[ ! "${myOK}" =~ [YyNn] ]]; + do + read -rp "### Keep insecure password? (y/n) " myOK + done + if [[ "${myOK}" =~ [Nn] ]] || [ "$myWEB_PW" == "" ]; + then + myWEB_PW="pass1" + myWEB_PW2="pass2" + mySECURE=0 + myOK="" + fi + fi + done + + # Write username and password to T-Pot config file + echo "### Creating base64 encoded htpasswd username and password for T-Pot config file: ${myTPOT_CONF_FILE}" + myWEB_USER_ENC=$(htpasswd -b -n "${myWEB_USER}" "${myWEB_PW}") + myWEB_USER_ENC_B64=$(echo -n "${myWEB_USER_ENC}" | base64 -w0) + + echo + sed -i "s|^WEB_USER=.*|WEB_USER=${myWEB_USER_ENC_B64}|" ${myTPOT_CONF_FILE} + + # Install T-Pot Type HIVE and use standard.yml for installation + cp ${HOME}/tpotce/compose/standard.yml ${HOME}/tpotce/docker-compose.yml + myINFO="" +fi + + +if [ "${myTPOT_TYPE}" == "SENSOR" ]; + # Install T-Pot Type SENSOR and use sensor.yml for installation + then + cp ${HOME}/tpotce/compose/sensor.yml ${HOME}/tpotce/docker-compose.yml + myINFO="### Make sure to deploy SSH keys to this sensor and disable SSH password authentication. +### On hive run the tpotce/deploy.sh script to join this sensor to the hive." +fi + +# Pull docker images +echo "### Now pulling images ..." +sudo docker compose -f /home/${myUSER}/tpotce/docker-compose.yml pull +echo + +# Show running services +echo "### Please review for possible honeypot port conflicts." +echo "### While SSH is taken care of, other services such as" +echo "### SMTP, HTTP, etc. might prevent T-Pot from starting." +echo +sudo grc netstat -tulpen +echo + +# Done +echo "### Done. Please reboot and re-connect via SSH on tcp/64295." +echo "${myINFO}" +echo diff --git a/installer/install/a.txt b/installer/install/a.txt new file mode 100644 index 00000000..d35a6ca1 --- /dev/null +++ b/installer/install/a.txt @@ -0,0 +1,27320 @@ +abactinal +abandoned +abased +abashed +abatable +abating +abaxial +abbatial +abbreviated +abdicable +abdicant +abdominal +abdominous +abducent +abducted +abducting +abecedarian +aberrant +aberrational +abessive +abeyant +abhominable +abhorrent +abiding +abiogenetic +abiotic +abject +ablated +ablatival +ablative +ablaze +able +able-bodied +abler +ablest +abloom +ablush +ablutionary +abnormal +abolishable +abolition +abolitionary +abomasal +abominable +aboral +aboriginal +aborning +abortifacient +abortional +abortive +abounding +about +above +above-board +above-mentioned +above-named +abradant +abraded +abranchial +abranchiate +abrasive +abreast +abridgable +abridgeable +abridged +abroach +abroad +abrogative +abrupt +abscessed +absent +absent-minded +absolute +absolutist +absolutory +absolved +absonant +absorbable +absorbed +absorbefacient +absorbent +absorbing +absorptive +abstemious +abstentious +abstergent +abstersive +abstinent +abstract +abstracted +abstractional +abstractionist +abstractive +abstruse +absurd +abundant +abused +abusive +abutting +abuzz +abysmal +abyssal +academic +academical +acanthaceous +acanthine +acanthocephalan +acanthoid +acanthopterygian +acanthous +acarid +acaridan +acarine +acaroid +acarpellous +acarpelous +acarpous +acatalectic +acaudal +acaudate +acaulescent +accelerando +accelerated +accelerating +accelerative +acceleratory +accented +accentual +acceptable +acceptant +accepted +accepting +acceptive +accessible +accessorial +accessory +accident-prone +accidental +accipitrine +acclamatory +acclimatisable +acclimatizable +acclivitous +acclivous +accommodable +accommodating +accommodative +accompanied +accompanying +accomplishable +accomplished +accordable +accordant +according +accordion +accostable +accosted +accountable +accoutered +accoutred +accredited +accrescent +accrete +accretive +accrued +accumbent +accumulated +accumulative +accurate +accursed +accurst +accusable +accusatival +accusative +accusatorial +accusatory +accusing +accustomed +ace +acellular +acephalous +acerate +acerb +acerbic +acerose +acerous +acervate +acescent +acetabular +acetic +acetose +acetous +achenial +achievable +aching +achlamydeous +achondroplastic +achromatic +achromatous +achy +acicular +aciculate +acid +acid-fast +acidic +acidifiable +acidulated +acidulent +acidulous +aciform +acinaceous +acinaciform +aciniform +acinose +acinous +acknowledgeable +acknowledged +acock +acold +aconitic +acorned +acotyledonous +acoustic +acoustical +acquainted +acquiescent +acquirable +acquired +acquisitive +acquitted +acred +acrid +acrimonious +acrobatic +acrocentric +acrogenic +acrogenous +acrolithic +acromegalic +acronical +acronychal +acronymic +acronymous +acropetal +acrophonic +across +across-the-board +acroterial +acrylic +actable +actinal +acting +actinian +actinic +actinoid +actinomorphic +actionable +activated +activating +active +activist +actual +actualist +actualized +actuarial +actuated +actuating +aculeate +aculeated +acuminate +acuminous +acute +acyclic +ad-lib +adactylous +adagio +adamant +adamantine +adaptable +adaptative +adapted +adaptive +adaxial +added +addicted +addictive +additional +additive +addle +addled +addorsed +addressable +addressed +adducent +adducible +adducting +adductive +adenoid +adenoidal +adenomatous +adept +adequate +adessive +adherent +adhesive +adiabatic +adiaphoristic +adiaphorous +adipose +adjacent +adjectival +adjective +adjoining +adjudicative +adjunct +adjunctive +adjuratory +adjustable +adjusted +adjuvant +adminicular +administrable +administrant +administrative +admirable +admirative +admired +admiring +admissible +admissive +admittable +admitted +admonished +admonishing +admonitory +adnate +adnominal +adolescent +adopted +adoptive +adorable +adored +adoring +adorned +adpressed +adrenal +adrenergic +adrenocorticotrophic +adrenocorticotropic +adrift +adroit +adscititious +adscript +adsorbable +adsorbate +adsorbed +adsorbent +adulatory +adult +adulterant +adulterate +adulterated +adulterating +adulterine +adulterous +adumbrative +adunc +adust +advance +advanced +advancing +advantaged +advantageous +adventitious +adventive +adventuresome +adventuristic +adventurous +adverbial +adversative +adverse +advertent +advertised +advisable +advised +advisory +advocatory +adynamic +aeneous +aeolian +aeolotropic +aeonian +aerated +aerial +aeriform +aerobatic +aerobic +aerobiological +aerobiosis +aerobiotic +aerodynamic +aerodynamical +aeroelastic +aerolitic +aerological +aerometric +aeronautic +aeronautical +aerophobic +aerostatic +aerotropic +aeruginous +aery +aesthetic +aesthetical +aestival +aetiological +afeard +afeared +affable +affected +affecting +affectional +affectionate +affectioned +affective +afferent +affettuoso +affianced +affiliable +affiliated +affine +affined +affinitive +affirmable +affirmative +affirmatory +affixed +afflated +afflicted +afflictive +affluent +affordable +affricative +affronted +affrontive +afghan +afghani +afire +aflame +afloat +aflutter +afoot +aforementioned +aforesaid +aforethought +afoul +afraid +aft +after +after-dinner +aftermost +afternoon +aftmost +agamic +agamid +agamous +agape +agaze +age-old +aged +agee +ageing +ageless +agelong +agential +agentive +agglomerate +agglomerated +agglomerative +agglutinable +agglutinant +agglutinate +agglutinative +aggravated +aggravating +aggregate +aggregately +aggregative +aggressive +aggrieved +aghast +agile +aging +agitated +agitating +agitative +agitato +agleam +agley +aglimmer +aglitter +aglow +agnate +agnatic +agnatical +agnominal +agnostic +ago +agog +agone +agonic +agonistic +agonistical +agonized +agonizing +agoraphobic +agraphic +agrarian +agravic +agreeable +agreed +agreeing +agrestal +agrestic +agricultural +agrobiological +agrological +agronomic +agronomical +agrostological +aground +aguish +ahead +ahistorical +ahorse +ahorseback +ahull +ahungered +aided +aidful +aidless +ailing +ailurophilic +ailurophobic +aimless +ain +air +air-conditioned +air-conditioning +air-cooled +air-mail +air-minded +air-raid +air-to-air +airborne +aired +airier +airiest +airless +airsick +airtight +airworthy +airy +airy-fairy +aisled +ajar +akimbo +akin +alabaster +alabastrine +alar +alarmed +alarming +alarmist +alary +alate +alated +albescent +albinic +albinistic +albinotic +albitic +albuminoid +albuminous +alburnous +alchemic +alchemical +alcoholic +alcyonarian +aldermanic +aldermanly +aleatory +alembicated +alert +alexic +alexipharmic +alfresco +algal +algebraic +algebraical +algid +algoid +algological +algorithmic +alicyclic +alien +alienable +alienated +alienating +aliform +alight +aligned +aligning +alike +alimental +alimentary +alimentative +alined +aliped +aliphatic +aliquant +aliquot +aliunde +alive +alkalescent +alkaline +all +all-American +all-day +all-fired +all-important +all-in +all-inclusive +all-night +all-out +all-over +all-powerful +all-purpose +all-round +all-star +all-time +all-weather +allantoic +allantoid +allargando +allative +alleged +allegiant +allegoric +allegorical +allegretto +allegro +allelomorphic +allergenic +allergic +alleviated +alleviative +alleviatory +alliaceous +allied +alliterative +allocable +allocatable +allochthonous +allodial +allogamous +allometric +allonymous +allopathic +allopatric +allophonic +allotriomorphic +allotropic +allotted +allowable +allowed +alloyed +alluring +allusive +alluvial +almighty +almond-eyed +alodial +aloetic +alone +aloof +alpha +alphabetic +alphabetical +alphabetized +alphameric +alphamerical +alphanumeric +alphanumerical +alpine +alright +alt +alterable +alterant +alterative +altered +altern +alternant +alternate +alternating +alternative +altimetrical +altissimo +altitudinal +altitudinous +alto +altricial +altruistic +aluminiferous +aluminous +aluminum +alveated +alveolar +alveolate +alvine +amalgamate +amalgamated +amalgamative +amandine +amaranthaceous +amaranthine +amaryllidaceous +amassable +amassed +amateur +amateurish +amative +amatory +amaurotic +amazed +amazing +ambagious +ambassadorial +amber +amberous +ambery +ambidexter +ambidextrous +ambient +ambiguous +ambilateral +ambisexual +ambitionless +ambitious +ambivalent +ambrosial +ambrosian +ambulacral +ambulant +ambulatory +amebic +ameboid +ameliorating +ameliorative +amenable +amendable +amendatory +amended +amentaceous +amental +amentiferous +amerceable +amerciable +ametabolic +ametabolous +amethyst +amethystine +amiable +amicable +amiss +amitotic +ammoniac +ammoniacal +ammoniated +ammophilous +amnesiac +amnesic +amniotic +amoebaean +amoebic +amoeboid +amok +amoral +amoroso +amorous +amorphous +amort +amphibian +amphibious +amphibolic +amphibological +amphibolous +amphibrachic +amphictyonic +amphipod +amphiprotic +amphisbaenic +amphitheatric +amphitheatrical +amphitropous +amphoric +amphoteric +ample +ampler +amplest +amplexicaul +amuck +amusable +amused +amusing +amusive +amygdalaceous +amygdaloid +amygdaloidal +amylaceous +amyloid +amyloidal +an-end +anabatic +anabiotic +anabolic +anacardiaceous +anachronic +anachronistic +anachronous +anaclastic +anacrustic +anadromous +anaemic +anaerobic +anaerobiotic +anaesthetic +anaesthetized +anaglyphic +anaglyptic +anagogic +anagogical +anagrammatic +anagrammatical +anal +analectic +analeptic +analgesic +analog +analogical +analogous +analogue +analphabetic +analysable +analytic +analytical +analyzable +analyzed +anamnestic +anamorphic +anandrous +ananthous +anapaestic +anaphoric +anaphrodisiac +anaphylactic +anaplastic +anaptyctic +anarchic +anarchical +anarchistic +anarthrous +anastigmatic +anastomotic +anatomic +anatomical +anatropous +ancestral +anchoretic +anchoritic +anchorless +ancient +ancillary +ancipital +andante +andantino +andesitic +androcentric +androdioecious +androecial +androgenic +androgenous +androgynous +android +andromonoecious +ane +anecdotal +anecdotical +anechoic +anemic +anemographic +anemometric +anemometrical +anemophilous +anencephalic +aneroid +anesthetic +anesthetized +aneuploid +aneurismal +aneurysmal +anfractuous +angelic +angelical +angered +anginal +angiocarpous +angiospermous +angled +anglophilic +anglophobic +angrier +angriest +angry +anguilliform +anguine +anguished +angular +angulate +anharmonic +anhedonic +anhydrous +aniconic +anile +animal +animalcular +animalic +animate +animated +animating +animist +animistic +anionic +anisodactylous +anisomerous +anisophyllous +anisotropic +annalistic +annealed +annectent +annelid +annihilated +annihilating +annihilative +anniversary +announced +annoyed +annoying +annual +annular +annulate +annulated +annulose +annunciative +anodal +anodic +anodyne +anoestrous +anoetic +anomalistic +anomalous +anomic +anonymous +anopheline +anorectal +anorectic +anorexic +anorthic +another +anourous +anoxic +ansate +anserine +answerable +answering +answerless +ant +antacid +antagonistic +antagonizing +antarthritic +antasthmatic +ante +ante-Nicene +ante-bellum +antecedent +antediluvial +antediluvian +antefixal +antemeridian +antemundane +antenatal +antennal +antennary +antenniform +antenuptial +anteorbital +antepenultimate +anteprandial +anterior +anthelminthic +anthelmintic +anthocarpous +anthophilous +anthracitic +anthracoid +anthropic +anthropical +anthropocentric +anthropogenic +anthropoid +anthropoidal +anthropological +anthropometric +anthropomorphic +anthropomorphous +anthropopathic +anthropophagous +anthroposophical +anti +anti-Semitic +antibacterial +antiballistic +antibilious +antibiotic +antic +anticholinergic +antichristian +anticipant +anticipated +anticipative +anticipatory +anticivic +anticlerical +anticlimactic +anticlinal +anticlockwise +anticoagulant +anticonvulsant +anticorrosive +anticyclone +anticyclonic +antidepressant +antidiuretic +antidotal +antidromic +antifouling +antifriction +antigenic +antiknock +antimalarial +antimicrobial +antimodernist +antimonarchical +antimonarchist +antimonial +antimonic +antimonious +antinodal +antinoise +antinomian +antinomic +antinomical +antiodontalgic +antipapal +antiparallel +antipathetic +antipathetical +antiperiodic +antiperistaltic +antiperspirant +antipetalous +antiphlogistic +antiphonal +antiphonary +antiphonic +antiphrastic +antiphrastical +antipodal +antipodean +antipruritic +antipyretic +antiquarian +antiquated +antique +antirachitic +antirust +antiscorbutic +antiscriptural +antisepalous +antiseptic +antiskid +antisocial +antispasmodic +antistatic +antistrophic +antisubmarine +antitank +antithetic +antithetical +antitoxic +antitrade +antitussive +antitypic +antitypical +antiviral +antivirus +antiwar +antlered +antliate +antlike +antonymous +antrorse +anucleate +anurous +anxiolytic +anxious +any +aoristic +aortal +aortic +apart +apartmental +apatetic +apathetic +apeak +aperient +aperiodic +aperitive +apetalous +aphasic +aphelian +apheliotropic +aphetic +aphidian +aphidious +aphonic +aphoristic +aphotic +aphrodisiac +aphyllous +apian +apiarian +apical +apiculate +apish +apivorous +aplacental +aplanatic +aplastic +apocalyptic +apocalyptical +apocarpous +apochromatic +apocrine +apocryphal +apocynaceous +apodal +apodeictic +apodictic +apodous +apogamic +apogamous +apogeal +apogean +apogeotropic +apolitical +apologetic +apomictic +apomictical +aponeurotic +apopemptic +apophthegmatic +apophthegmatical +apoplectic +aposematic +aposiopetic +apostate +apostolic +apostolical +apostrophic +apothecial +apothegmatic +apothegmatical +apotropaic +appalled +appalling +apparent +apparitional +appassionato +appealable +appealing +appeasable +appeasing +appellant +appellate +appellative +appendant +appendicular +appendiculate +apperceptive +appetent +appetitive +appetizing +applausive +appliable +applicable +applicative +applicatory +applied +appointed +appointive +apportioned +apposite +appositely +appositional +appositive +appraisable +appraising +appraisive +appreciable +appreciated +appreciative +appreciatory +apprehensible +apprehensive +apprentice +apprenticed +appressed +approachable +approaching +approbative +approbatory +appropriate +appropriated +appropriative +approvable +approved +approving +approximal +approximate +approximative +appurtenant +apropos +apsidal +apt +apteral +apterous +apterygial +apyretic +aqua +aquaphobic +aquarian +aquatic +aqueous +aquiline +arabesque +arable +araceous +arachnidan +arachnoid +araeostyle +araeosystyle +araliaceous +arbitrable +arbitral +arbitrary +arboraceous +arboreal +arboreous +arborescent +arboricultural +arborous +arc +arcane +arced +arch +archaeological +archaic +archaistic +archangelic +archducal +arched +archegonial +archegoniate +archetypal +archetypical +archidiaconal +archiepiscopal +arching +archipelagic +architectonic +architectural +architraved +archival +arctic +arcuate +ardent +arduous +areal +arenaceous +arenicolous +areolar +areolate +areostyle +argent +argentiferous +argillaceous +arguable +arguing +argumentative +argus-eyed +argyle +arhythmic +arid +arillate +arilloid +aristate +aristocratic +aristocratical +arithmetic +arithmetical +armchair +armed +armigeral +armigerous +armillary +armipotent +armless +armor-plated +armored +armorial +armour-clad +armour-plated +armoured +aroid +aromatic +around-the-clock +aroused +arow +arpeggiated +arranged +arrant +arrased +arrayed +arrestable +arrested +arresting +arrestive +arrhythmic +arriving +arrogant +arrogated +arrowy +arsenic +arsenical +arsenious +artefactual +arterial +arteriosclerotic +artful +arthralgic +arthritic +arthropodal +articled +articulable +articular +articulate +articulated +articulating +articulatory +artier +artiest +artificial +artiodactyl +artisanal +artistic +artless +arty +arty-crafty +arundinaceous +aryballoid +arytenoid +asbestine +asbestous +ascendable +ascendant +ascendent +ascendible +ascending +ascensional +ascensive +ascertainable +ascertained +ascetic +ascetical +ascidian +ascitic +ascitical +asclepiadaceous +ascribable +asepalous +aseptic +asexual +ashake +ashamed +ashen +ashier +ashiest +ashy +asinine +askance +askant +askew +asking +aslant +asleep +aslope +asocial +aspectual +aspen +aspersive +asphalt +asphaltic +aspheric +asphyxial +asphyxiant +asphyxiated +asphyxiating +aspirant +aspirate +aspiratory +aspiring +asprawl +asquint +assailable +assassinated +assault +assaulted +assayable +assembled +assentient +assenting +assentive +assertable +asserted +asserting +assertive +assertory +assessable +assessorial +assiduous +assignable +assigned +assimilable +assimilating +assimilative +assistant +assisted +associable +associate +associated +associative +assonant +assonantal +assortative +assorted +assuasive +assumable +assumed +assuming +assumptive +assured +assurgent +assuring +astable +astatic +asteriated +asterisked +asteroid +asteroidal +asthenic +asthmatic +astigmatic +astir +astomatous +astonied +astonished +astonishing +astounded +astounding +astral +astrictive +astringent +astrological +astronomic +astronomical +astrophysical +astucious +astute +astylar +asunder +aswarm +asymmetric +asymmetrical +asymptomatic +asymptotic +asynchronous +asyndetic +asyntactic +at-home +atactic +ataractic +ataraxic +atavistic +ataxic +atelectatic +atheism +atheist +atheistic +atheistical +athematic +atherine +athermanous +atheromatous +atherosclerotic +athetoid +athetosic +athirst +athletic +athrill +atilt +atingle +atmospheric +atmospherical +atomic +atomism +atomistic +atonal +atonic +atrabilious +atrial +atrip +atrocious +atrophied +attachable +attached +attack +attackable +attacking +attainable +attained +attemptable +attempted +attendant +attended +attending +attent +attentional +attentive +attenuant +attenuate +attenuated +attestable +attestative +attested +attic +attired +attitudinal +attractable +attractive +attrahent +attributable +attributive +attrite +attritional +attuned +atwitter +atypical +auburn +auctionary +auctorial +audacious +audible +audient +audile +audiometric +audiovisual +auditive +auditory +augitic +augmentable +augmentative +augmented +augmenting +augural +august +auld +aulic +aural +aureate +auric +auricled +auricular +auriculate +auriculated +auriferous +auriform +auroral +aurorean +aurous +auscultatory +auspicious +austenitic +austere +austral +autarchic +autarchical +autarkic +autarkical +autecologic +autecological +authentic +authentical +authenticated +authorial +authorisable +authorised +authoritarian +authoritative +authorizable +authorized +authorless +autistic +autobiographic +autobiographical +autocatalytic +autocephalous +autochthonous +autocratic +autodidactic +autoerotic +autogamic +autogamous +autogenic +autogenous +autographed +autographic +autokinetic +autologous +autolytic +automated +automatic +automorphic +automotive +autonomic +autonomous +autoplastic +autoradiograph +autoradiographic +autosomal +autotelic +autotrophic +autumn +autumnal +auxetic +auxiliary +available +avant-garde +avaricious +avascular +avenaceous +avengeful +avenging +average +averse +aversive +avertable +avertible +avian +avid +avionic +avocado +avoidable +avowable +avowed +avulsed +avuncular +awaited +awake +awakened +awakening +aware +awash +away +awe-inspiring +aweary +awed +aweless +awesome +awestricken +awestruck +awful +awheel +awing +awkward +awned +awnless +awny +awry +axial +axile +axillary +axiological +axiomatic +axiomatical +axonometric +azeotropic +azimuthal +azoic +azonal +azonic +azotic +azure +azygos +azygous +babbling +baboonish +baby +babyish +baccate +bacchanal +bacchanalian +bacciferous +bacciform +baccivorous +bacillar +bacillary +bacilliform +back +back-to-back +backboned +backboneless +backbreaking +backed +backhand +backhanded +backless +backmost +backstage +backstair +backstairs +backswept +backward +backwoods +bacterial +bactericidal +bacterioid +bacteriological +bacteriolytic +bacteriostatic +bacteroid +baculiform +baculine +bad +bad-tempered +baddish +badgerly +baffled +baffling +baggier +baggiest +baggy +bailable +bairnly +baked +baking +baking-hot +balanced +balconied +bald +bald-headed +balding +baldish +baldpated +baleful +balked +balkier +balkiest +balking +balky +ball-bearing +balled +balletic +ballistic +ballooning +bally +balmier +balmiest +balmy +balneal +balsamic +balsamiferous +balsamy +baluster +balustered +balustraded +bamboo +banal +bananas +banausic +bandaged +banded +bandoleered +bandoliered +bandy +bandy-legged +baneful +bang-up +banging +bangled +bankable +bankrupt +banned +banner +bannered +bantam +bantering +baptismal +baptist +bar +barbarian +barbaric +barbarous +barbate +barbecued +barbed +barbellate +barbituric +bardic +bardy +bare +bareback +barebacked +bared +barefaced +barefoot +barefooted +barehanded +bareheaded +bareknuckle +barelegged +barer +barest +bargain +bargain-basement +baric +baring +barish +baritone +barkier +barkiest +barkless +barky +barmier +barmiest +barmy +barnacled +barometric +barometrical +baronetical +baronial +baroque +barratrous +barred +barrel-chested +barrel-vaulted +barrelled +barren +barricaded +barristerial +bartizaned +barytic +barytone +basal +basaltic +base +based +baseless +baser +basest +bashful +basic +basidial +basidiomycetous +basifixed +basilar +basilican +basipetal +basophil +basophilic +bass +bassy +bastard +bastardized +bastardly +bastioned +bated +bathetic +batholithic +batholitic +bathyal +bathymetric +bathymetrical +bathypelagic +batrachian +bats +bats-in-the-belfry +battailous +battered +battier +battiest +battle-scarred +battled +battlemented +battological +batty +batwing +bausond +bauxitic +bawdier +bawdiest +bawdy +bawling +bay +beached +beachy +beaded +beadier +beadiest +beady +beady-eyed +beaked +beaky +beamier +beamiest +beaming +beamish +beamless +beamy +bearable +bearded +beardless +bearing +bearish +bearlike +beastlier +beastliest +beastlike +beastly +beat +beat-up +beatable +beaten +beatific +beatified +beating +beauish +beaut +beauteous +beautiful +becalmed +becoming +bedaubed +beddable +bedded +bedecked +bedewed +bedfast +bedight +bedimmed +bedraggled +bedrid +bedridden +beechen +beef-witted +beefier +beefiest +beefy +beerier +beeriest +beery +beetle +beetle-browed +beetling +befitting +befogged +beforehand +befouled +befuddled +beggarly +beginning +begotten +begrimed +begrudging +beguiled +beguiling +behavioral +behaviorist +behavioural +behaviourist +beheaded +behind +beholden +beige +bejeweled +bejewelled +belated +believable +belittled +belittling +bell-bottomed +belletristic +bellicose +bellied +belligerent +bellying +beloved +belted +bemazed +bemused +ben +bended +bending +bendwise +bendy +benedictional +benedictive +benedictory +benefic +beneficed +beneficent +beneficial +beneficiary +benevolent +benighted +benign +benignant +bent +benthic +benthonic +benumbed +benzal +benzoic +bequeathable +berberidaceous +bereaved +bereft +beribboned +berried +berserk +beseeching +besetting +besieged +besmeared +besmirched +besotted +bespangled +bespattered +bespectacled +bespoke +bespoken +besprent +best +best-ball +best-selling +bestead +bested +bestial +bestowed +betraying +betrothed +better +bettering +betting +bevel +beveled +bewhiskered +bewildered +bewildering +bewitched +bewitching +biannual +bias +biased +biaxal +biaxial +bibbed +biblical +bibliographic +bibliographical +bibliolatrous +bibliological +bibliomania +bibliomaniacal +bibliopegic +bibliopolic +bibliopolical +bibulous +bicameral +bicentenary +bicentennial +bicephalous +bicipital +biconcave +biconvex +bicorn +bicuspid +bicuspidate +biddable +bidentate +bidirectional +biennial +bifacial +bifarious +bifid +bifilar +bifocal +bifold +bifoliate +bifoliolate +biform +bifurcate +bifurcated +big +big-bellied +big-league +big-name +big-ticket +big-time +bigamous +bigeneric +bigger +biggest +biggish +bigheaded +bighearted +bignoniaceous +bigoted +bijou +bilabial +bilabiate +bilateral +bilgier +bilgiest +bilgy +biliary +bilingual +bilious +biliteral +billed +billion +billionth +billowier +billowiest +billowing +billowy +bilobate +bilobed +bilocular +bimanous +bimanual +bimestrial +bimetallic +bimillenary +bimodal +bimolecular +bimonthly +binary +binate +binaural +binding +binocular +binomial +binominal +biobibliographical +biochemical +biodegradable +biodynamic +biogenetic +biogenic +biogenous +biogeochemical +biogeographical +biographic +biographical +biological +bioluminescent +biomedical +biometric +biomorphic +bionic +bionomic +biophysical +bioplasmic +biosynthetic +biosystematic +biotechnological +biotic +biparous +bipartisan +bipartite +biped +bipedal +bipetalous +bipinnate +bipolar +biquadratic +biracial +biramous +birch +birchen +bird's-eye +bird-brained +birdlike +birefringent +birk +birken +birthing +biserial +biserrate +bisexual +bissextile +bistable +bistred +bisulcate +bit +bitchier +bitchiest +bitchy +biting +bitless +bitonal +bitten +bitter +bitterish +bittersweet +bitty +bituminous +bivalent +bivalve +bivalvular +bivariate +biyearly +bizarre +bizonal +black +black-a-vised +black-and-blue +black-and-tan +black-and-white +black-coated +black-figure +black-hearted +black-letter +blackened +blackguardly +blackish +bladdery +bladed +blae +blah +blamable +blame +blameable +blamed +blameful +blameless +blameworthy +blanched +bland +blank +blanket +blankety +blankety-blank +blaring +blasphemous +blasted +blasting +blastoderm +blastular +blatant +blate +blathering +blazing +bleached +bleak +blear +blear-eyed +blearier +bleariest +bleary +bleary-eyed +bleeding +blemished +blended +blending +blessed +blest +blighted +blightingly +blimpish +blind +blinded +blindfold +blindfolded +blinding +blinking +blissful +blissless +blistered +blistering +blistery +blithe +blithering +blithesome +blizzardly +blizzardy +bloated +blockaded +blockading +blocked +blockish +blocky +blond +blonde +blood-and-thunder +blood-red +blooded +bloodied +bloodier +bloodiest +bloodless +bloodshot +bloodstained +bloodsucking +bloodthirsty +bloody +bloody-minded +bloodying +bloomed +bloomier +bloomiest +blooming +bloomless +bloomy +blossomy +blotched +blotchier +blotchiest +blotchy +blotto +blotty +blow-by-blow +blowhard +blowier +blowiest +blown +blowsier +blowsiest +blowsy +blowy +blowzed +blowzier +blowziest +blowzy +blubber +blubbery +blue +blue-black +blue-blooded +blue-collar +blue-eyed +blue-sky +bluer +bluest +bluff +bluish +blunt +blunted +blurred +blurry +blushful +blushing +blushless +blustering +blusterous +blustery +boarish +boastful +boastless +bobbery +bobs +bobtail +bobtailed +bodacious +bodger +bodied +bodiless +bodily +boding +body-line +boggy +bogus +boiled +boiling +boisterous +bold +bold-faced +bolometric +bolshevist +bolshie +bolshy +bolted +bomb +bombacaceous +bombastic +bombproof +bombycid +bond +bonded +bone +bone-dry +bone-idle +boned +boneheaded +boneless +bonhomous +bonier +boniest +bonism +bonkers +bonnie +bonnier +bonniest +bonny +bony +bonzer +boobyish +book-learned +bookable +booked +bookish +bookless +bookmaking +booming +boon +boorish +booted +bootleg +bootless +bootlicking +boozier +booziest +boozy +boracic +boraginaceous +bordered +bordering +borderless +borderline +boreal +bored +boric +boring +born +born-again +bosker +boskier +boskiest +bosky +bosom +bosomed +bosomy +boss +boss-eyed +bossier +bossiest +bossy +botanic +botanical +botched +botchier +botchiest +botchy +both +bothered +bothersome +botryoid +botryoidal +botryose +bottle-fed +bottle-green +bottle-nosed +bottom +bottom-up +bottomed +bottomless +bottommost +bouffant +bought +boughten +bouilli +boulle +bouncing +bouncy +bound +bounded +bounden +bounding +boundless +bounteous +bountiful +bourgeois +boustrophedon +bousy +bovid +bovine +bow +bow-windowed +bowed +bowery +bowing +box-office +boxed +boxlike +boxy +boy-meets-girl +boyish +braced +brachial +brachiate +brachiopod +brachycephalic +brachydactylic +brachydactylous +brachypterous +brachyurous +bracing +brackish +bracteal +bracteate +bracteolate +bractless +brag +braggart +bragging +braided +brainier +brainiest +brainish +brainless +brainsick +brainwashed +brainy +braised +brakeless +braky +braless +bramblier +brambliest +brambly +bran-new +branched +branchial +branchiate +branching +branchiopod +branchless +branchlike +branchy +brand-new +branded +brannier +branniest +branny +brash +brashier +brashiest +brashy +brassier +brassiest +brassy +brattish +bratty +brave +braver +bravest +braving +braw +brawling +brawny +brazen +brazen-faced +breached +bread-and-butter +breakable +breakaway +breaking +breakneck +breast-fed +breasted +breathable +breathed +breathier +breathiest +breathing +breathless +breathtaking +breathy +breeched +breechless +breechloading +breeding +breezeless +breezier +breeziest +breezy +bregmatic +brevipennate +bribable +bribeable +brick +brick-red +brickier +brickiest +brickle +bricky +bridal +bridgeable +bridgeless +brief +briefless +briery +bright +brilliant +brilliant-cut +brimful +brimless +brimming +brimstony +brinded +brindle +brindled +brinier +briniest +brinish +briny +brisk +bristled +bristly +brittle +broached +broad +broad-gauge +broad-leaved +broad-minded +broadband +broadcast +broadish +broadloom +broadside +brocaded +broch +broguish +broiled +broke +broken +broken-backed +broken-down +broken-hearted +broken-in +broken-winded +bromeliaceous +bromic +bromidic +bronchial +bronchitic +bronchoscopic +bronze +bronzed +bronzy +brood +broodier +broodiest +brooding +broody +broomy +brother +brotherlike +brotherly +browbeaten +browless +brown +browned +brownish +browny +bruised +bruising +brumal +brumous +brunet +brunette +brush-fire +brushed +brushless +brushy +brusque +brut +brutal +brute +brutelike +brutish +bryological +bubaline +bubblier +bubbliest +bubbling +bubbly +bubonic +buccal +buccaneerish +buccinatory +buck +bucked +buckish +buckram +buckshee +buckskin +bucktooth +bucktoothed +bucolic +budding +buddy-buddy +budgetary +budless +buff +buffeted +bug-eyed +bugged +buggy +bughouse +bugs +buhl +building +built +built-in +built-up +buirdly +bulbar +bulbed +bulbiferous +bulbous +bulging +bulgy +bulimic +bulk +bulkier +bulkiest +bulky +bull +bull-headed +bull-necked +bull-nosed +bullate +bulldog +bullet-headed +bullied +bullish +bullocky +bully +bullying +bum +bumbling +bumper +bumper-to-bumper +bumpier +bumpiest +bumpkinish +bumptious +bumpy +bunched +bunchier +bunchiest +bunchy +bung +bungaloid +bungled +bungling +bunodont +bunted +buoyant +buprestid +bur-reed +burbling +burdened +burdensome +bureaucratic +burghal +burglarious +buried +burked +burled +burlesque +burlier +burliest +burly +burned +burning +burnished +burnt +burred +burrier +burriest +burry +bursal +bursarial +burseraceous +bursiform +burst +bursting +bush +bushed +bushier +bushiest +bushwhacking +bushy +busied +busier +busiest +business +busked +buskined +bust +busted +bustier +bustiest +bustled +bustling +busty +busy +busying +butch +butcherly +buttery +buttocked +button-down +buttoned +buttony +buttressed +butyraceous +butyric +buxom +buyable +buzzing +by-past +bye +bygone +byssaceous +byssal +byssoid +cabalistic +cabbagy +cabbalistic +cabbalistical +cabinet +cable-laid +caboched +caboshed +cacciatore +cachectic +cachectical +cachinnatory +cack-handed +cacodylic +cacographic +cacographical +cacophonic +cacophonous +cactaceous +cacuminal +cadastral +cadaveric +cadaverous +caddish +cade +cadenced +cadent +cadential +cadgy +caducean +caducous +caecal +caecilian +caesalpiniaceous +caespitose +caesural +cagey +cagier +cagiest +cagy +cairned +caitiff +calamitous +calando +calcaneal +calcanean +calcareous +calced +calceiform +calceolate +calcic +calcicolous +calciferous +calcific +calcifugous +calcinable +calculable +calculated +calculating +calculational +calculative +calculous +calefacient +calefactive +calefactory +calendered +calendric +calendrical +calfless +calibered +calibred +calico +caliginous +caliphal +calisthenic +callable +called +called-for +caller +calligraphic +calligraphical +callisthenic +callous +callow +calm +calmative +calming +calmy +caloric +calorific +calumniatory +calumnious +calved +calyciform +calycinal +calycine +calycled +calyculate +calyptrate +cambial +camera-shy +cameral +camouflaged +camp +campanological +campanulaceous +campanular +campanulate +campestral +camphoraceous +camphorated +camphoric +campodeid +campodeiform +campy +campylotropous +can-do +canalicular +canaliculate +canaliculated +canary +cancellate +cancellated +cancelled +cancellous +cancerous +cancrine +cancrizans +cancroid +candent +candescent +candid +candied +candy-striped +canescent +canicular +canine +cankered +cankerous +cannabic +canned +cannibalistic +cannier +canniest +cannonball +cannular +canny +canonic +canonical +canonist +canonistic +canonized +canopied +canorous +cant +cantabile +cantankerous +canted +cantering +cantharidal +cantharidian +cantonal +cantorial +cantoris +canty +cany +capable +capacious +caparisoned +caped +capeskin +capillaceous +capillary +capital +capitalist +capitalistic +capitate +capitular +capitulary +capitulatory +capparidaceous +capped +capreolate +capricious +caprifoliaceous +caprine +caprylic +capsizable +capsular +capsulate +captious +captivated +captivating +captive +carabid +caramel +carangid +carangoid +carapacial +carbocyclic +carbolic +carbonaceous +carbonated +carbonic +carboniferous +carbonyl +carboxyl +carboxylic +carbuncled +carbuncular +carcinogenic +carcinomatous +card-carrying +cardboard +cardiac +cardinal +cardiological +cardiopulmonary +cardiorespiratory +cardiovascular +carefree +careful +careless +caressing +caressive +careworn +carinate +caring +cariogenic +carious +carking +carlish +carminative +carmine +carnal +carnassial +carnation +carneous +carnivalesque +carnivorous +carnose +carotenoid +carotid +carousing +carpal +carpellary +carpellate +carpetbag +carpeted +carping +carpophagous +carroty +carsick +cartelist +cartilaginous +cartographic +cartographical +caruncular +carunculate +carunculous +carved +carvel-built +carven +caryatidal +caryophyllaceous +case-hardened +casebook +cased +casemated +casemented +caseous +cash-and-carry +cashed +cassocked +cast +cast-iron +cast-off +castaway +casteless +castellated +castigatory +castled +castor +castrated +casual +casuistic +casuistical +cat-and-dog +cat-eyed +catabolic +catacaustic +catachrestic +catachrestical +cataclysmal +cataclysmic +catacumbal +catadioptric +catadromous +catalectic +cataleptic +catalogued +catalytic +catalytical +catamenial +cataphractic +cataphyllary +cataplexy +catapultic +catarrhal +catarrhine +catarrhous +catastrophic +catatonic +catch-as-catch-can +catchable +catchier +catchiest +catching +catchpenny +catchweight +catchy +catechetic +catechetical +catechismal +catechistic +catechistical +catechumenical +categorial +categoric +categorical +categorized +catenary +catenate +catercorner +caterpillar +cathartic +cathectic +cathedral +cathodic +catholic +catoptric +cattish +catty +catty-cornered +caudal +caudate +caudated +cauld +caulescent +caulicolous +cauliform +cauline +caulked +causal +causative +causeless +caustic +cauterant +cautionary +cautious +cavalier +cavalierly +cavernous +cavicorn +caviling +cavitied +cayenned +ceaseless +cecal +cedar +cedarn +ceilinged +celebrated +celebratory +celestial +celiac +celibate +cellular +celluloid +cellulosic +cementitious +censored +censorial +censorian +censorious +censual +censurable +censured +centaurian +centenarian +centenary +centennial +center +centered +centesimal +centigrade +centillionth +central +central-fire +centralism +centralist +centralized +centralizing +centre-fire +centred +centric +centrical +centrifugal +centripetal +centrist +centrobaric +centroclinal +centroidal +centrosome +centum +centuple +centuplicate +centurial +cephalalgic +cephalate +cephalic +cephalochordate +cephalopod +cephalous +ceraceous +ceramic +cerated +ceratoid +cercal +cercarian +cereal +cerebellar +cerebral +cerebric +cerebrospinal +cerebrotonic +cerebrovascular +cered +ceremonial +ceremonious +cereous +ceric +ceriferous +cerise +cernuous +cerographic +cerographical +ceroplastic +cerous +certain +certifiable +certificated +certificatory +certified +cerulean +ceruminous +cervical +cervid +cervine +cespitose +cestoid +cesural +cetacean +cetaceous +chad +chafed +chaffier +chaffiest +chaffless +chaffy +chagrined +chain-driven +chained +chainless +chairborne +chalcedonic +chalcographic +chalcographical +chalcolithic +chaliced +chalkier +chalkiest +chalky +challengeable +challenging +chalybeate +chambered +chameleonic +chameleonlike +champertous +champion +chance +chanceful +chanceless +chancier +chanciest +chancroid +chancroidal +chancrous +chancy +changeable +changed +changeful +changeless +changing +chanted +chaotic +chapeless +chapfallen +chapleted +chapped +characterful +characteristic +characterized +characterless +charcoal +chargeable +charged +chargeful +chargeless +charier +chariest +charismatic +charitable +charlatanic +charlatanical +charmed +charming +charmless +charnel +charrier +charriest +charry +chartaceous +chartered +chartless +chary +chasmal +chasmed +chasmic +chasmogamic +chasmy +chasseur +chaste +chastened +chaster +chastest +chastisable +chastised +chatoyant +chattering +chattier +chattiest +chatty +chauvinistic +cheap +cheap-jack +cheating +checked +checkered +checky +cheek +cheeked +cheekier +cheekiest +cheeky +cheerful +cheerier +cheeriest +cheering +cheerless +cheerly +cheery +cheese-head +cheesed +cheesy +chelate +chelated +chelicerate +cheliferous +cheliform +chelonian +chemic +chemical +chemoreceptive +chemotactic +chemotropic +chemurgic +chemurgical +chenopodiaceous +chequered +chequy +cherished +cherry +cherty +cherubic +cherubical +chestier +chestiest +chestnut +chesty +chevroned +chewable +chewier +chewiest +chewy +chiastic +chic +chichi +chicken +chicken-hearted +chicken-livered +chief +chiefless +chiefly +chiffon +childbearing +childing +childish +childless +childlike +childly +chiliastic +chill +chilled +chillier +chilliest +chilling +chilly +chilopod +chimeric +chimerical +chin +china +chinked +chinless +chintzier +chintziest +chintzy +chipped +chipper +chippy +chirk +chiromantic +chiromantical +chiropodial +chiropteran +chirpier +chirpiest +chirpy +chirrupy +chiseled +chiselled +chitinoid +chitinous +chivalric +chivalrous +chlamydate +chlamydeous +chloric +chloritic +chlorotic +chlorous +chock-a-block +chock-full +chocker +chocolate +chocolaty +choice +choicer +choicest +choke-full +choked +chokey +chokier +chokiest +choking +choky +cholagogue +choleraic +choleric +cholinergic +chondral +chondritic +choosey +choosier +choosiest +choosy +chopfallen +chopped +choppier +choppiest +chopping +choppy +choragic +choral +chordal +chordate +choreic +choreographic +chorial +choriambic +choric +chorioid +chorionic +chorographic +chorographical +choroid +chosen +chrematistic +chrestomathic +chrismal +chromatic +chromatographic +chromic +chromophil +chromosomal +chronic +chronological +chronometric +chronometrical +chrysalid +chryselephantine +chthonian +chthonic +chubbier +chubbiest +chubby +chuck-full +chuffier +chuffiest +chuffy +chummier +chummiest +chummy +chunderous +chunkier +chunkiest +chunky +churchier +churchiest +churchless +churchly +churchward +churchy +churlish +churning +churrigueresque +chylaceous +chyliferous +chymous +ci-devant +cichlid +cigar-shaped +ciliary +ciliate +ciliated +ciliolate +cinchonic +cindery +cinematic +cinematographic +cinerary +cinereous +cinnabarine +cinnamic +cinnamonic +circadian +circinate +circling +circuital +circuitous +circulable +circular +circulating +circulative +circulatory +circumambient +circumferential +circumflex +circumfluent +circumfluous +circumgyratory +circumjacent +circumlocutional +circumlocutionary +circumlocutory +circumlunar +circumnavigable +circumnutatory +circumpolar +circumscissile +circumscribable +circumscribed +circumscriptive +circumsolar +circumspect +circumspective +circumstantial +circumventive +cirrate +cirrhotic +cirriform +cirriped +cirripede +cirrose +cirsoid +cislunar +cismontane +cissoid +cissy +cistaceous +cisted +cistic +citable +citatory +citeable +citified +citreous +citric +citrous +citrus +cityfied +civic +civil +civilian +civilisable +civilizable +civilized +clad +claimable +clairvoyant +clamant +clammy +clamorous +clandestine +clanging +clangorous +clanking +clankless +clannish +clarified +clarifying +clarino +clarion +clashing +clasping +class-conscious +classable +classic +classical +classier +classiest +classifiable +classificatory +classified +classless +classy +clastic +clathrate +clattering +clattery +clausal +claustral +claustrophobic +clausular +clavate +clavicorn +clavicular +claviform +clawed +clawless +clayey +clayish +clean +clean-cut +clean-limbed +clean-living +clean-shaven +cleanable +cleaned +cleanlier +cleanliest +cleanly +cleansable +cleansed +cleansing +clear +clear-cut +clear-eyed +clear-headed +clear-sighted +cleared +cleavable +cleft +cleidoic +cleistogamic +cleistogamous +clement +clenched +clerical +clerkish +clerklier +clerkliest +clerkly +clever +clever-clever +cleverish +cliental +cliffier +cliffiest +cliffy +climacteric +climactic +climactical +climatic +climatical +climatological +climbable +climbing +clinched +clincher-built +clingier +clingiest +clingy +clinical +clinker-built +clinking +clinometric +clinquant +clip-fed +clip-on +clipped +clipping +cliquey +cliquish +cliquy +clithral +clitic +clitoral +cloacal +cloak-and-dagger +cloaked +clockwise +cloddish +cloddy +clodhopping +clogged +clogging +cloggy +cloistered +cloistral +clonal +clonic +close +close-cropped +close-fisted +close-fitting +close-grained +close-hauled +close-knit +close-lipped +close-mouthed +close-reefed +closed +closed-circuit +closed-door +closer +closest +closet +closing +clostridial +cloth-eared +clothed +clotted +clotty +clouded +cloudier +cloudiest +cloudless +cloudy +cloven +cloven-hoofed +clovered +clovery +clownish +cloying +clubable +clubbable +clubbish +clubby +clucky +clueless +clumpy +clumsier +clumsiest +clumsy +clunky +clupeid +clupeoid +clustered +clustery +cluttered +clypeal +clypeate +cnemial +cnidarian +co-optative +co-ordinal +coach-built +coactive +coadjutant +coadunate +coagulable +coagulate +coagulated +coagulatory +coal-black +coal-tar +coalesced +coalescent +coalier +coalitional +coaly +coarctate +coarse +coarse-grained +coarsened +coarser +coarsest +coastal +coastward +coastwise +coated +coatless +coaxial +coaxing +cobaltic +cobblestone +cobwebby +coccal +coccoid +coccygeal +cochlear +cochleate +cock-a-hoop +cockamamie +cockeyed +cockfighting +cockier +cockiest +cockney +cockneyish +cocksure +cocky +coconscious +coconut +cod +coddled +codicillary +codified +coeducational +coelanaglyphic +coelenterate +coeliac +coelomate +coenobitic +coenobitical +coequal +coercible +coercive +coetaneous +coeternal +coeval +coffered +cogent +cogged +cogitable +cogitative +cognate +cognisable +cognisant +cognitional +cognitive +cognizable +cognizant +cognominal +cognoscible +coherent +cohesive +cohortative +coiled +coiling +coincident +coincidental +coinciding +coital +coky +cold +cold-blooded +cold-drawn +cold-hearted +cold-short +coldish +coleopteran +coleopterous +colicky +coliform +collaborative +collapsable +collapsed +collapsible +collatable +collateral +collative +collect +collectable +collected +collectible +collective +collectivist +collectivized +collegial +collegiate +collembolan +collenchymatous +colligative +collinear +colloid +colloidal +colloquial +collotypic +collusive +colly +colonial +colonialism +colonialist +colonic +colonized +colonnaded +color +color-blind +colorable +coloratura +colored +colorfast +colorful +colorific +colorless +colory +colossal +colour +colour-blind +colourable +coloured +colourful +colourless +coltish +colubrid +colubrine +columbine +columnar +columned +comal +comate +comatose +combatable +combatant +combative +combed +combinable +combinative +combinatorial +combinatory +combined +combining +combless +combust +combustible +combustion +combustive +come-at-able +come-hither +comedic +comelier +comeliest +comely +comestible +cometary +comether +cometic +comfier +comfiest +comfortable +comforted +comforting +comfortless +comfy +comic +comical +coming +comitative +commanding +commeasurable +commemorable +commemorating +commemorative +commemoratory +commendable +commendatory +commensal +commensurable +commensurate +commentatorial +commercial +commercialized +commie +comminative +comminatory +commiserable +commiserative +commissarial +commissioned +commissural +committed +commo +commodious +common +common-law +commonable +commonplace +commonsense +commonsensical +commorant +commotional +communal +communicable +communicant +communicative +communicatory +communist +communistic +community +commutable +commutative +commutual +comose +compact +companionable +companionate +companionless +comparable +comparative +compartmental +compartmentalized +compassable +compassionate +compatible +compatriotic +compellable +compelled +compelling +compendious +compensated +compensational +compensative +compensatory +competent +competing +competitive +compilatory +complacent +complaining +complaisant +complanate +compleat +complected +complemental +complementary +complemented +completable +complete +completed +completing +completive +complex +complexional +complexioned +complexionless +compliable +compliant +complicate +complicated +complicative +complimentary +complying +compo +component +componental +componential +compony +composed +composite +compositional +compositive +compossible +compotatory +compound +compoundable +compounded +comprehended +comprehensible +comprehensive +compressed +compressible +compressional +compressive +comprisable +compromising +compulsive +compulsory +compunctious +compurgatorial +compurgatory +computable +computational +computative +computerized +comradely +conative +concatenate +concave +concavo-concave +concavo-convex +concealable +concealed +concealing +conceded +conceding +conceited +conceivable +conceived +concentrated +concentrative +concentric +concentrical +conceptional +conceptive +conceptual +conceptualistic +concerned +concerning +concertante +concerted +concessible +concessionary +concessive +conchal +conchate +conched +conchiferous +conchoidal +conchological +conciliable +conciliar +conciliating +conciliative +conciliatory +concinnous +concise +concluded +concluding +conclusive +concoctive +concomitant +concordant +concrete +concretionary +concretive +concubinary +concubine +concupiscent +concupiscible +concurrent +concurring +concussive +concyclic +condemnable +condemnatory +condemned +condemning +condensable +condensed +condescending +condign +conditional +conditioned +condolatory +condolent +condonable +conducible +conducive +conducted +conductible +conductive +conduplicate +condylar +condyloid +condylomatous +confabulatory +confarreate +confectionary +confederate +confederative +conferential +conferrable +conferred +conferva +confervoid +confessed +confessional +confessionary +confident +confidential +confiding +configurational +configured +confinable +confined +confineless +confining +confirmable +confirmative +confirmatory +confirmed +confirming +confiscable +confiscate +confiscated +confiscatory +conflagrant +conflicting +conflictive +confluent +confocal +conformable +conformal +conforming +conformist +confounded +confounding +confrontational +confusable +confused +confusing +confutable +confutative +congealable +congealed +congeneric +congenerical +congenial +congenital +congested +congestible +congestive +conglobate +conglomerate +conglomeratic +conglutinant +conglutinative +congratulant +congratulatory +congregate +congregational +congressional +congruent +congruous +conic +conical +conidial +coniferous +conirostral +conjecturable +conjectural +conjoined +conjoint +conjugal +conjugate +conjugated +conjugational +conjugative +conjunct +conjunctional +conjunctival +conjunctive +conjuring +connate +connatural +connectable +connected +connectible +connecting +connective +connivent +conniving +connotative +connotive +connubial +conoid +conquerable +conquered +conquering +consanguine +consanguineous +conscience-smitten +conscience-stricken +conscienceless +conscientious +conscionable +conscious +conscriptional +consecrate +consecrated +consecrative +consecratory +consecutive +consensual +consentaneous +consentient +consenting +consequent +consequential +conservable +conservant +conservational +conservative +conservatory +conserved +conserving +considerable +considerate +considered +consignable +consistent +consistorial +consistorian +consociate +consolable +consolatory +consolidated +consolidative +consoling +consolingly +consolute +consonant +consonantal +conspecific +conspicuous +conspiratorial +constabulary +constant +constellatory +constipated +constipating +constituent +constitutional +constitutive +constrainable +constrained +constraining +constricted +constricting +constrictive +constringent +construable +constructible +constructional +constructive +consubstantial +consuetudinary +consular +consultative +consultatory +consulting +consultive +consumable +consumed +consumerism +consuming +consummate +consummated +consummative +consummatory +consumptive +contactual +contagious +containable +contained +containerized +contaminable +contaminate +contaminated +contaminating +contaminative +contemnible +contemplable +contemplative +contemporaneous +contemporary +contemptible +contemptuous +contending +content +contented +contentious +conterminous +contestable +contextual +contiguous +continent +continental +contingent +continuable +continual +continuant +continuate +continuative +continued +continuing +continuous +contorted +contortional +contortive +contraband +contrabass +contraceptive +contractable +contracted +contractible +contractile +contractional +contractive +contractual +contradictable +contradictious +contradictive +contradictory +contradistinctive +contralateral +contralto +contrapositive +contrapuntal +contrarious +contrary +contrasting +contrastive +contrasty +contrasuggestible +contrate +contributable +contributing +contributive +contributory +contrite +contrivable +contrived +controllable +controlled +controlling +controversial +controvertible +contumacious +contumelious +contused +contusive +convalescence +convalescent +convectional +convective +convenable +convenient +conventional +conventionalized +conventual +convergent +converging +conversable +conversant +conversational +converse +converted +convertible +convex +convexo-concave +convexo-convex +conveyable +conveyed +convict +convicted +convictive +convinced +convincible +convincing +convivial +convocational +convolute +convoluted +convolvulaceous +convulsant +convulsible +convulsionary +convulsive +cooing +cookable +cooked +cooking +cool +cool-headed +cooled +cooling +cooling-off +coolish +cooperative +coordinate +coordinated +coordinating +coordinative +copacetic +copepod +copesettic +copied +copious +coplanar +copper-bottomed +coppery +coppiced +coprolaliac +coprolitic +coprophagous +coprophilous +copular +copulative +copulatory +copyright +copyrightable +copyrighted +coquettish +coraciiform +coral +coralliferous +coralline +coralloid +corbelled +corbiculate +cordate +corded +cordial +cordiform +cordless +corduroy +coreferential +coreless +coriaceous +cork-tipped +corked +corkier +corkiest +corking +corky +cormophytic +cormous +corn-fed +cornaceous +corneal +corned +corneous +cornered +corniculate +cornier +corniest +cornual +cornucopian +cornute +corny +corollaceous +corollary +coronal +coronary +coronate +coroneted +corporal +corporate +corporatist +corporative +corporeal +corpulent +corpuscular +correct +correctable +corrected +correctible +correctional +corrective +correlatable +correlate +correlated +correlative +correspondent +corresponding +corresponsive +corrigible +corroborant +corroborate +corroborated +corroborative +corroboratory +corroded +corrodible +corrosive +corrugate +corrugated +corrupt +corrupted +corruptible +corrupting +corruptive +cortical +corticate +corticolous +coruscant +corvine +corybantic +corymbose +coseismal +coseismic +cosher +cosier +cosies +cosiest +cosmetic +cosmic +cosmogonic +cosmogonical +cosmographic +cosmographical +cosmological +cosmopolitan +cosmoramic +cost-effective +cost-plus +costal +costate +costive +costlier +costliest +costly +costume +costumed +cosy +cotemporaneous +coterminous +cottaged +cotton-picking +cottony +cotyledonary +cotyledonous +cotyloid +couchant +councilmanic +counsellable +countable +counter +counter-passant +counter-revolutionary +counteractive +counterbalanced +counterbalancing +counterclockwise +counterfeit +countermandable +counterpoised +countervailing +countless +countrified +country +countryfied +countrywide +county +couped +coupled +courageous +courant +coursed +courteous +courtlier +courtliest +courtly +cousinly +couth +couthie +couthy +covalent +covariant +coverable +covered +covering +coverless +covert +covetable +coveted +covetous +covinous +coward +cowardly +cowed +cowering +cowled +coxal +coxcombic +coxcombical +coy +coyish +cozier +coziest +cozy +crabbed +crabbier +crabbiest +crabby +crablike +crabwise +crack +crackajack +crackbrained +cracked +cracker-barrel +crackerjack +crackers +cracking +crackjaw +crackle +crackled +cracklier +crackliest +crackling +crackly +crackpot +craftier +craftiest +craftless +crafty +cragged +craggier +craggiest +craggy +cram-full +cramoisy +cramped +crane-fly +cranial +craniate +craniological +crank +crankier +crankiest +cranky +crannied +crapulent +crapulous +crash +crashing +crass +crassulaceous +craterous +craved +craven +crawlier +crawliest +crawling +crawly +crazed +crazier +craziest +crazy +creakier +creakiest +creaking +creaky +cream +creamier +creamiest +creamlaid +creamy +crease-resistant +creased +creasy +creatable +creational +creative +creatural +creaturely +credal +credent +credential +credible +creditable +credited +creditworthy +credulous +creedal +creepier +creepiest +creeping +creepy +creepy-crawly +crematory +crenate +crenelate +crenelated +crenellate +crenellated +crenulate +crenulated +creole +creolized +creophagous +crepitant +crepuscular +crescendo +crescent +crescentic +crescive +cressy +crested +crestfallen +crestless +cresylic +cretaceous +cretinoid +cretinous +crew-necked +cribriform +cricoid +crimeless +criminal +criminative +criminatory +crimpier +crimpiest +crimpy +crimson +crinal +crinated +crined +cringing +crinite +crinkled +crinklier +crinkliest +crinkly +crinoid +crinose +criollo +crippled +crippling +crisp +crispate +crispier +crispiest +crispy +crisscross +crisscrossed +cristate +critical +criticisable +criticizable +croakier +croakiest +croaking +croaky +crocked +crocodilian +crocus +cronk +crook +crookback +crookbacked +crooked +crop-eared +cropped +crosiered +cross +cross-armed +cross-country +cross-cultural +cross-eyed +cross-grained +cross-legged +cross-ply +cross-ratio +cross-section +cross-sectional +crossbanded +crossbred +crosscut +crossed +crosshatched +crossing +crossopterygian +crosstown +crosswise +crotched +crotchety +crouched +crouching +croupiest +croupous +croupy +crouse +crowded +crowing +crowned +crowning +crownless +crucial +cruciate +cruciferous +cruciform +crude +cruder +crudest +cruel +crumb +crumbier +crumbiest +crumbled +crumblier +crumbliest +crumbly +crumby +crummier +crummies +crummiest +crummy +crumpled +crunched +crunchier +crunchiest +crunchy +crural +crushable +crushed +crushing +crustacean +crustaceous +crustal +crusted +crustier +crustiest +crustless +crusty +crutched +crying +cryogenic +cryophilic +cryoscopic +cryptal +cryptic +cryptical +cryptocrystalline +cryptogamic +cryptogamous +cryptogenic +cryptographic +cryptonymous +cryptorchid +crystal +crystal-clear +crystalline +crystallisable +crystallizable +crystallized +crystallographic +crystalloid +ctenoid +ctenophoran +cubbish +cubic +cubical +cubiform +cubist +cubistic +cubital +cuboid +cuboidal +cuckoo +cucullate +cucumiform +cucurbitaceous +cuddlesome +cuddly +cuffed +culicid +culinary +culmiferous +culminant +culpable +cultic +cultish +cultivable +cultivatable +cultivated +cultrate +cultural +cultured +cultureless +cumberless +cumbersome +cumbrous +cumulate +cumulative +cumuliform +cunctatious +cunctatory +cuneal +cuneate +cuneatic +cuneiform +cunning +cup-tied +cupidinous +cupolated +cupped +cupreous +cupric +cupriferous +cuprous +cupular +cupulate +cur +curable +curative +curatorial +curbable +curbed +curbless +curdier +curdiest +curdled +curdling +curdy +cured +cureless +curious +curled +curlier +curliest +curling +curly +curmudgeonly +current +curricular +currish +cursed +cursing +cursive +cursorial +cursory +curst +curt +curtained +curtal +curtate +curule +curvaceous +curved +curvier +curviest +curvilineal +curvilinear +curving +curvy +cushier +cushiest +cushioned +cushiony +cushy +cuspate +cusped +cuspidal +cuspidate +cuspidated +cussed +custodial +custom +custom-built +custom-made +customable +customary +cut +cut-off +cut-out +cut-price +cut-rate +cut-up +cutaneous +cutcha +cute +cuter +cutest +cuticular +cutting +cutty +cyan +cyanic +cyanophyte +cyanotic +cyathiform +cybernetic +cycadaceous +cyclamen +cyclic +cyclical +cycloid +cycloidal +cyclone +cyclonic +cyclopean +cyclopedic +cyclostome +cyclothymic +cylindraceous +cylindric +cylindrical +cylindroid +cymbiform +cymoid +cymose +cymotrichous +cynic +cynical +cyperaceous +cyprian +cyprinid +cyprinoid +cystic +cystoid +cytogenetic +cytoid +cytological +cytoplasmic +cytotoxic +czarist +dabbled +dactylic +daedal +daemonic +daffier +daffiest +daffy +daft +daily +daimen +daimonic +daintier +dainties +daintiest +dainty +daisied +dam +damageable +damaged +damaging +damascene +damascened +damask +damfool +damn +damnable +damnatory +damned +damning +damp +dampish +danceable +dancing +dandiacal +dandified +dandy +dandyish +dang +danged +dangerous +dangling +dank +dapper +dapple +dappled +daring +dark +darkened +darkening +darkish +darkling +darksome +darling +darn +darned +darting +dash +dashed +dashing +dastard +dastardly +dasyphyllous +datable +dateable +dated +dateless +datival +dative +daubed +dauby +daughterly +daunted +daunting +dauntless +dawdling +day-old +day-to-day +daylong +daytime +dazed +dazzled +dazzling +dead +dead-and-alive +dead-letter +dead-on +dead-set +deadened +deadening +deadlier +deadliest +deadlocked +deadly +deaf +deaf-and-dumb +deaf-mute +deafened +deafening +deal +dear +deathful +deathless +deathlike +deathly +deathy +debased +debasing +debatable +debauched +debentured +debilitated +debilitating +debilitative +debonair +deboned +debonnaire +decadal +decadent +decagonal +decahedral +decamerous +decanal +decani +decapitated +decapod +decapodous +decasyllabic +decayed +deceased +deceitful +decemviral +decennary +decennial +decent +decentralize +decentralized +decentralizing +deceptive +decidable +decided +deciding +decidual +deciduate +deciduous +decillionth +decimal +decinormal +decipherable +deciphered +decisive +decked +deckle-edged +deckled +declamatory +declarable +declarative +declaratory +declared +declassified +declensional +declinable +declinate +declinatory +declining +declivitous +declivous +decoctive +decolorant +decomposable +decomposed +decomposing +decompound +decompressive +decongestant +decongestive +deconsecrated +deconstructionist +decontaminative +decorated +decorative +decorous +decreased +decreasing +decreed +decrepit +decrescendo +decrescent +decretal +decretive +decretory +decuman +decumbent +decuple +decurrent +decurved +decussate +dedal +dedicate +dedicated +dedicational +dedicatory +deducible +deducted +deductible +deductive +deedless +deep +deep-dyed +deep-fried +deep-laid +deep-rooted +deep-sea +deep-seated +deep-set +deepened +deepening +defaced +defamatory +defeasible +defeated +defeatism +defeatist +defectible +defective +defenceless +defendable +defendant +defending +defenseless +defensible +defensive +deferable +deferent +deferential +deferrable +deferred +defiant +deficient +defiled +definable +defined +definite +definitive +deflagrable +deflated +deflation +deflationary +deflationist +deflected +deflective +deflexed +defoliate +defoliated +deformable +deformed +defrayable +deft +defunct +defunctive +degenerate +degenerative +degradable +degraded +degrading +degree +degressive +dehiscent +dehortative +dehortatory +dehumanized +dehydrated +deicidal +deictic +deific +deiform +deism +deistic +deistical +deject +dejected +delayed +delectable +delegable +deleterious +deliberate +deliberative +delible +delicate +delicious +delighted +delightful +delightless +delightsome +delimitative +delimited +delineable +delineate +delineated +delineative +delinquent +deliquescent +delirious +delitescent +deliverable +deltaic +deltoid +delusional +delusive +delusory +demagogic +demagogical +demandable +demanding +demeaning +demented +demersal +demisable +demiurgeous +demiurgic +demiurgical +democratic +demoded +demographic +demographical +demolished +demolition +demoniac +demoniacal +demonic +demonologic +demonological +demonology +demonstrable +demonstrated +demonstrative +demoralising +demoralized +demoralizing +demotic +demountable +demulcent +demure +demurer +demurest +demurrable +demythologized +denary +denatured +denaturized +dendriform +dendritic +dendrochronological +dendroid +dendroidal +dendrological +deniable +denigrating +denominate +denominational +denominationalism +denominative +denotable +denotative +dense +denser +densest +densimetric +densitometric +dental +dentate +dented +denticulate +dentiform +dentilingual +dentirostral +dentoid +denudate +denuded +denumerable +denunciatory +deontic +deontological +departed +departing +departmental +depauperate +dependable +dependant +dependent +depicted +depictive +depilatory +depletable +depleted +depletive +depletory +deplorable +deponent +depopulated +deposable +deposed +depositional +depraved +deprecating +deprecative +deprecatory +depreciating +depreciative +depreciatory +depredatory +depressant +depressed +depressible +depressing +depressive +deprivable +deprivative +deprived +depurative +deputy +deranged +dere +derelict +derisible +derisive +derisory +derivable +derivational +derivative +derived +dermal +dermatic +dermatographic +dermatoid +dermatological +dermatoplastic +dermic +dermoid +dern +dernier +derogate +derogative +derogatory +descant +descendant +descendent +descendible +descending +describable +described +descriptive +desecrated +desegregate +desensitized +desensitizing +desert +deserted +deserved +deserving +desiccant +desiccate +desiccated +desiccative +desiderative +designate +designated +designative +designatory +designed +designer +designing +desinent +desirable +desired +desireless +desirous +desktop +desmoid +desolate +desolated +despairful +despairing +desperate +despicable +despisable +despised +despiteful +despiteous +despoiled +despondent +despotic +despotical +destined +destitute +destroyable +destroyed +destructible +destructive +desultory +detachable +detached +detailed +detainable +detectable +detected +detectible +detective +detergent +deteriorating +deteriorative +determinable +determinant +determinate +determinately +determinative +determined +determining +determinism +determinist +deterministic +deterrent +detersive +detestable +detested +detonating +detoxicant +detractive +detrimental +detrital +deuced +deuteranopic +deutoplasmic +devalued +devastated +devastating +devastative +developable +developed +developing +developmental +deviant +deviate +deviationism +deviatory +deviceful +devil-may-care +deviled +devilish +devious +devisable +devoid +devolution +devoted +devotional +devoured +devouring +devout +dewlapped +dewy +dewy-eyed +dexter +dexterous +dextral +dextrogyrate +dextrorotatory +dextrorse +dextrous +diabasic +diabetic +diabolic +diabolical +diacaustic +diachronic +diacid +diaconal +diacritic +diacritical +diactinic +diadelphous +diagenetic +diageotropic +diagnosable +diagnostic +diagonal +diagrammatic +dialectal +dialectic +dialectical +dialogic +dialogistic +dialysable +dialytic +dialyzable +diamagnetic +diamantiferous +diamantine +diametral +diametric +diametrical +diandrous +dianoetic +diapedetic +diaphanous +diaphoretic +diaphragmatic +diapophysial +diarch +diarchic +diarrheal +diarrheic +diarrhoeal +diarrhoeic +diastatic +diastolic +diastrophic +diastyle +diathermic +diathetic +diatomaceous +diatomic +diatonic +diatropic +diazo +dibasic +dibranchiate +dicastic +dicephalous +dicey +dichasial +dichlamydeous +dichogamous +dichotomic +dichotomous +dichroic +dichromatic +dichromic +dichroscopic +dickey +dicky +diclinous +dicotyledonous +dicrotic +dictated +dictatorial +didactic +didactical +didymous +didynamous +die-cast +die-casting +die-hard +dielectric +diesel-electric +diesel-hydraulic +diet +dietary +dietetic +dietetical +different +differential +differentiated +differing +difficile +difficult +diffident +diffluent +diffractive +diffuse +diffused +diffusible +diffusing +diffusive +digamous +digastric +digested +digestible +digestive +dighted +digital +digitate +digitiform +digitigrade +diglot +dignified +dignifying +digressional +digressive +dihedral +dihydric +dilapidated +dilatable +dilatant +dilated +dilative +dilatory +dilemmatic +dilettante +dilettantish +diligent +diluent +dilute +diluted +diluvial +diluvian +dim +dime +dimensional +dimensioning +dimensionless +dimerous +dimetric +dimidiate +diminishable +diminished +diminishing +diminuendo +diminutive +dimissory +dimmed +dimmest +dimming +dimorphous +dimply +ding-dong +dingbats +dinge +dingier +dingiest +dingy +dink +dinkier +dinkies +dinkiest +dinkum +dinky +dinky-di +dinnerless +dinoflagellate +diocesan +dioecious +dioptric +dioramic +dioritic +diorthotic +dipetalous +diphtheritic +diphtheroid +diphthongal +diphthongic +diphycercal +diphyletic +diphyodont +diplex +diploid +diplomatic +diplomatical +diplostemonous +dipnoan +dipolar +dipped +dippier +dippiest +dippy +dipsomaniac +dipteral +dipteran +dipterocarpaceous +dipterous +dire +direct +directed +directing +directional +directionless +directive +directorial +directory +direful +direr +direst +dirigible +diriment +dirt +dirt-cheap +dirtier +dirtiest +dirty +disabled +disabling +disabused +disadvantaged +disadvantageous +disaffected +disagreeable +disallowable +disappearing +disappointed +disappointing +disapproved +disapproving +disarming +disarranged +disarrayed +disastrous +disbelieving +discalceate +discalced +discarded +discarnate +discernible +discerning +discerptible +discharged +disciplinable +disciplinal +disciplinarian +disciplinary +disciplined +disclosed +disclosing +discoid +discoidal +discolored +discoloured +discombobulated +discomfited +discomfortable +discommodious +discomposed +discomycetous +disconcerted +disconcerting +disconfirming +disconnected +disconsolate +discontent +discontented +discontinued +discontinuous +discordant +discorporate +discountable +discouraged +discouraging +discourteous +discoverable +discovered +discovert +discreditable +discredited +discreet +discrepant +discrete +discretional +discretionary +discriminate +discriminating +discriminative +discriminatory +discursive +discussable +discussible +disdainful +diseased +disembodied +disenchanted +disenchanting +disenfranchised +disentangled +disepalous +disfigured +disfranchised +disgraced +disgraceful +disgruntled +disguisable +disguised +disgusted +disgustful +disgusting +disgustingly +disharmonious +disheartened +disheartening +dished +disheveled +dishevelled +dishonest +dishonorable +dishonored +dishonourable +dishy +disillusioned +disillusioning +disillusive +disimpassioned +disincentive +disinclined +disinfectant +disingenuous +disinherited +disintegrable +disintegrative +disinterested +disjoined +disjoint +disjointed +disjunct +disjunctive +dislikable +disliked +dislocated +disloyal +dismal +dismantled +dismayed +dismaying +dismissed +dismissible +dismissive +dismounted +disobedient +disobliging +disordered +disorderly +disorganized +disoriented +disorienting +disowned +disparaging +disparate +dispassionate +dispatched +dispensable +dispensational +dispensatory +dispensed +dispermous +disperse +dispersed +dispersive +dispirited +dispiriting +dispiteous +displaceable +displayed +displeased +displeasing +disposable +disposed +dispositional +dispossessed +disproportionable +disproportional +disproportionate +disprovable +disputable +disputant +disputatious +disputative +disputed +disqualifiable +disqualified +disqualifying +disquiet +disquieted +disquieting +disquisitional +disregarded +disregardful +disreputable +disrespectable +disrespectful +disrupted +disruptive +dissatisfactory +dissatisfied +dissected +dissectible +dissembling +disseminating +disseminative +dissentient +dissenting +dissentious +dissepimental +dissertational +dissident +dissilient +dissimilar +dissimulating +dissimulative +dissipated +dissipative +dissociable +dissocial +dissociated +dissociative +dissoluble +dissolute +dissolvable +dissolved +dissolvent +dissonant +dissuasive +dissymmetric +dissymmetrical +distaff +distal +distanceless +distant +distasteful +distended +distensible +distensile +distent +distichal +distichous +distillable +distillatory +distilled +distinct +distinctive +distinguishable +distinguished +distinguishing +distorted +distortive +distracted +distractible +distractive +distrainable +distrait +distraught +distressed +distressful +distressing +distributable +distributed +distributional +distributive +district +distrustful +disturbed +disturbing +distyle +disunited +disused +disyllabic +ditheistic +ditheistical +dithyrambic +ditriglyphic +diuretic +diurnal +divalent +divaricate +divergent +diverging +divers +diverse +diversifiable +diversified +diversionary +diverted +divertible +diverticular +diverting +divertive +divestible +dividable +divided +dividing +dividual +divinatory +divine +divisible +divisional +divisionary +divisionism +divisive +divorceable +divorced +divorcive +divulsive +dizygotic +dizzied +dizzier +dizziest +dizzy +dizzying +do-it-yourself +do-nothing +doable +docile +docked +dockside +doctoral +doctorial +doctrinaire +doctrinal +documental +documentary +documented +doddered +doddering +doddery +dodecahedral +dodecaphonic +dodecastyle +dodecasyllabic +dodgy +dog-cheap +dog-eared +dog-eat-dog +dog-legged +dog-tired +dogged +doggier +doggiest +dogging +doggish +doggone +doggoned +doggy +doglike +dogmatic +dogmatical +doiled +doited +dolabriform +dolce +doleful +doleritic +dolesome +dolichocephalic +dollish +dolomitic +doloroso +dolorous +doltish +domanial +domed +domestic +domesticable +domesticated +domical +domiciliary +dominant +dominated +dominating +dominative +domineering +dominical +donated +donative +done +donnard +donnered +donnish +donsie +doomed +door-to-door +doped +dopey +dopier +dopiest +dopy +dormant +dormie +dormient +dormy +dorsal +dorsiferous +dorsigrade +dorsiventral +dorsolumbar +dorty +dosed +dotal +dotier +dotiest +doting +dotted +dottier +dottiest +dotty +doty +double +double-acting +double-barreled +double-barrelled +double-bass +double-blind +double-breasted +double-chinned +double-dealing +double-dyed +double-edged +double-faced +double-hung +double-jointed +double-minded +double-quick +double-reed +double-spaced +double-tongued +doubled +doubling +doubtable +doubtful +doubting +doubtless +douce +doughier +doughiest +doughtier +doughtiest +doughty +doughy +dour +dovelike +dovetailed +dovish +dowable +dowdy +dowdyish +dowered +dowerless +dowf +dowie +down +down-and-out +down-at-heel +down-market +down-the-line +down-to-earth +downbeat +downed +downfallen +downhearted +downhill +downier +downiest +downrange +downright +downstage +downstair +downstairs +downstate +downstream +downtrodden +downward +downwind +downy +dozen +dozenth +dozier +doziest +dozing +dozy +drab +draconian +draconic +draffy +draftier +draftiest +drafty +dragging +draggled +draggy +dragonish +dragonlike +drainable +drained +draining +dramatic +dramatisable +dramatizable +dramaturgic +dramaturgical +draped +draperied +drastic +dratted +draughtier +draughtiest +draughty +drawable +drawing-room +drawling +drawn +drawn-out +dread +dreaded +dreadful +dreamed +dreamful +dreamier +dreamiest +dreamless +dreamlike +dreamy +drear +drearier +dreariest +drearisome +dreary +dree +dreggy +dreich +drenched +dress +dressed +dressier +dressiest +dressy +dried +drier +driest +driftier +driftiest +drifting +driftless +drifty +drilled +drinkable +drinking +drip-dry +dripping +drippy +drivable +driveable +driven +driverless +driving +drizzling +drizzly +droll +droning +dronish +droopier +droopiest +drooping +droopy +dropped +dropping +dropsical +dropsied +drossier +drossiest +drossy +droughtier +droughtiest +droughty +drouthier +drouthiest +drouthy +drowned +drowsier +drowsiest +drowsing +drowsy +drudging +drugged +druidic +druidical +drumhead +drumlier +drumliest +drumly +drunk +drunken +drupaceous +dry +dry-cleaned +dry-eyed +dry-shod +dry-stone +dryer +drying +dual +dual-purpose +dualistic +dubious +dubitable +dubitative +ducal +duck-billed +duck-legged +duckbill +duckie +duckier +duckiest +ducky +ductile +ductless +dud +duddy +dudish +due +duff +dulcet +dull +dulled +dullish +dulotic +dumb +dumbfounded +dumbfounding +dumbstruck +dumfounded +dumfounding +dummy +dumped +dumpier +dumpiest +dumpish +dumpy +dun +dunderheaded +dungy +dunked +duodecimal +duodenal +duodenary +dupable +duple +duplex +duplicate +duplicative +duplicitous +durable +dural +durational +durative +dure +dusk +duskier +duskiest +duskish +dusky +dustier +dustiest +dustless +dustproof +dusty +dutch +duteous +dutiable +dutiful +duty-bound +duty-free +dwarf +dwarfish +dwindling +dyable +dyadic +dyeable +dyed +dyed-in-the-wool +dyeline +dying +dynamic +dynamical +dynamistic +dynamometric +dynamometrical +dynastic +dynastical +dysaesthetic +dysenteric +dysfunctional +dysgenic +dyslectic +dyslexic +dyslogistic +dysmenorrheal +dyspathetic +dyspeptic +dysphagic +dysphemistic +dysphonic +dysphoric +dysplastic +dyspneal +dyspneic +dyspnoeal +dyspnoeic +dysteleological +dysthymic +dystonic +dystopian +dystrophic +dysuric +dytiscid +each +eager +eagle-eyed +ear-piercing +ear-splitting +eared +earless +earlier +earliest +early +earned +earnest +earthborn +earthbound +earthen +earthier +earthiest +earthlier +earthliest +earthly +earthquaked +earthquaking +earthshaking +earthward +earthy +earwiggy +eased +easeful +easier +easiest +east +east-by-north +eastbound +easterly +eastern +easternmost +eastmost +eastward +eastwardly +easy +easy-going +eatable +eaten +eath +eating +ebb +ebon +ebony +ebracteate +ebullient +ecaudate +ecbolic +eccentric +eccentrical +ecchymotic +ecclesiastic +ecclesiastical +ecclesiological +eccrine +echinate +echinodermatous +echinoid +echoic +echoing +echoless +echt +eclamptic +eclectic +ecliptic +ecologic +ecological +econometric +econometrical +economic +economical +ecru +ecstatic +ectoblastic +ectodermal +ectodermic +ectogenetic +ectogenous +ectomorphic +ectophytic +ectopic +ectoplasmic +ectotrophic +ectozoan +ectozoic +ectypal +ecumenic +ecumenical +eczematous +edacious +edaphic +edematous +edental +edentate +edentulous +edge +edged +edgeless +edgier +edgiest +edging +edgy +edible +edictal +edificatory +edificial +edified +edifying +edited +editorial +educable +educated +educational +educative +educatory +educible +edulcorative +eely +eerie +eerier +eeriest +eery +effable +effaceable +effected +effectible +effective +effectless +effectual +effeminate +efferent +effervescent +effervescible +effervescing +effete +efficacious +efficient +efflorescent +effluent +effluvial +effortful +effortless +effulgent +effuse +effusive +egal +egalitarian +egestive +egg-shaped +eggshell +egocentric +egoistic +egoistical +egomaniacal +egotistic +egotistical +egregious +eidetic +eight +eighteen +eighteenth +eightfold +eighth +eightieth +eightpenny +eighty +eild +eirenic +eisteddfodic +ejaculatory +ejective +elaborate +elaborated +elaborative +elapsed +elasmobranch +elastic +elasticized +elastomeric +elated +elating +elative +elder +elderly +eldest +eldritch +elect +elected +electioneer +elective +electoral +electric +electrical +electrifying +electroacoustic +electroanalytical +electrochemical +electroencephalographic +electrolytic +electromagnetic +electromechanical +electrometallurgical +electrometric +electrometrical +electromotive +electronegative +electronic +electrophilic +electrophoresis +electrophoretic +electrophotographic +electrophysiological +electroplate +electropositive +electroscopic +electrostatic +electrothermal +electrotonic +electrotypic +electrovalent +eleemosynary +elegant +elegiac +elemental +elementary +elenctic +elephantine +elephantoid +elevated +eleven +eleventh +elfin +elfish +elicited +eligible +eliminable +eliminative +eliminatory +elite +ellipsoid +ellipsoidal +elliptic +elliptical +elmier +elmiest +elmy +elocutionary +elongate +elongated +eloquent +else +elucidative +elusive +eluvial +elvish +emaciated +emanant +emanational +emanative +emanatory +emancipated +emancipating +emancipatory +emarginate +emasculate +emasculated +emasculatory +embarrassed +embarrassing +embattled +embedded +embellished +embezzled +emblematic +emblematical +embodied +emboldened +embolic +embolismic +embonpoint +embossed +embowed +embowered +embraceable +embracive +embroidered +embroiled +embryo +embryoid +embryologic +embryological +embryonal +embryonic +embryotic +emendable +emendatory +emended +emergency +emergent +emerging +emeritus +emersed +emetic +emigrational +emigratory +eminent +emissive +emitting +emmenagogue +emmetropic +emollient +emotionable +emotional +emotionless +emotive +empathetic +empathic +emphasized +emphatic +emphysematous +empire-builder +empiric +empirical +empiricism +empiricist +employable +employed +empowered +emptied +empties +emptiest +empty +empty-handed +empty-headed +emptying +empurpled +empyemic +empyreal +empyrean +emulative +emulous +emulsified +emulsive +emunctory +enabling +enactive +enameled +enamored +enantiomorphic +enantiomorphous +enantiotropic +enarched +enarthrodial +enate +encased +encaustic +enceinte +encephalic +encephalitic +enchained +enchanted +enchanting +enchorial +encircled +encircling +enclitic +enclosed +encomiastic +encompassing +encouraged +encouraging +encroaching +encrusted +encumbered +encyclical +encyclopaedic +encyclopedic +encysted +end-stopped +endangered +endarch +endearing +ended +endemic +endermatic +endermic +endless +endmost +endocardial +endocrinal +endocrine +endodermal +endodermic +endogamic +endogamous +endogenic +endogenous +endometrial +endomorphic +endophytic +endoplasmic +endorsable +endorsed +endoscopic +endoskeletal +endosmotic +endothelial +endothermic +endotrophic +endowed +endozoic +endurable +enduring +endways +enemy +energetic +energising +energizing +enervate +enervated +enervating +enervative +enfeebled +enfeebling +enforceable +enforced +enfranchised +engaged +engaging +engorged +engrailed +engrained +engraved +engrossed +engrossing +engulfed +enhanced +enhancive +enharmonic +enigmatic +enigmatical +enjambed +enjoyable +enkindled +enlargeable +enlarged +enlightened +enlightening +enlisted +enlivened +enlivening +enmeshed +enneadic +enneahedral +enneastyle +ennobling +enorm +enormous +enough +enow +enraged +enrapt +enraptured +enrolled +ensiform +enslaved +ensorcelled +ensuing +entangled +enterable +enteral +enteric +entering +enterprising +entertained +entertaining +enthetic +enthralled +enthralling +enthusiastic +enticing +entire +entitative +entitled +entomic +entomological +entomophagous +entomophilous +entomostracan +entomostracous +entophytic +entopic +entozoic +entranced +entrancing +entrenched +entrepreneurial +enucleate +enumerable +enumerative +enunciable +enunciative +enunciatory +enured +enuretic +enveloped +enveloping +enviable +envious +environmental +envisioned +enwrapped +enzootic +enzymatic +eolithic +eosinophilic +epagogic +epaxial +epeirogenic +epencephalic +epenthetic +epexegetic +ephebic +ephemeral +epiblast +epiblastic +epic +epical +epicanthic +epicedial +epicedian +epicene +epicentral +epicontinental +epicritic +epicyclic +epicycloidal +epideictic +epidemic +epidemiological +epidermal +epidermic +epidermoid +epidotic +epidural +epifocal +epigamic +epigastric +epigeal +epigene +epigenetic +epigeous +epiglottic +epigrammatic +epigraphic +epigynous +epileptic +epimeric +epinastic +epipetalous +epiphanic +epiphyllous +epiphytic +epiphytical +epiploic +episcopal +episcopalian +episcopally +episematic +episepalous +episodic +epispastic +epistatic +epistemic +epistemological +epistolary +epistolatory +epistolic +epitaphic +epitaxial +epithalamic +epithelial +epitheliomatous +epithetic +epitomic +epitomical +epizoan +epizoic +epizootic +epoch-making +epochal +eponymic +eponymous +epoxy +equable +equal +equalised +equalitarian +equalized +equanimous +equatable +equatorial +equestrian +equiangular +equidistant +equilateral +equine +equinoctial +equipoised +equipollent +equiponderant +equipotent +equipotential +equipped +equiprobable +equisetic +equitable +equitant +equivalent +equivalve +equivocal +eradicable +eradicative +erasable +erased +erect +erectile +erective +eremitic +erethismic +erethistic +ergative +ergodic +ergonomic +ericaceous +ericoid +eristic +ermined +eroded +erodent +erodible +erogenous +erose +erosive +erotic +erotically +erotogenic +errable +errant +erratic +errhine +erring +erroneous +ersatz +erstwhile +erubescent +eruciform +erudite +erumpent +erupting +eruptional +eruptive +erysipelatous +erythemal +erythematic +erythrocyte +escapable +escaped +escapeless +escapism +escapist +escharotic +eschatological +escheatable +esculent +escutcheoned +esemplastic +esophageal +esoteric +especial +essayistic +essential +essive +established +establishmentarian +esteemed +esthetic +estimable +estimated +estimative +estipulate +estival +estranged +estranging +estrous +estuarial +estuarine +esurient +etched +eternal +eterne +etesian +ethereal +ethereous +ethic +ethical +ethmoid +ethnic +ethnical +ethnocentric +ethnographic +ethnographical +ethnolinguistic +ethnological +ethological +ethylene +etiolate +etiolated +etiological +etymological +eucaryotic +eucharistic +eudaemonic +eudemonic +eugenic +euhemeristic +eukaryotic +eulogistic +eunuchoid +eupeptic +euphemistic +euphonic +euphonical +euphonious +euphorbiaceous +euphoriant +euphoric +euphuistic +eurhythmic +eurythermal +eurythmic +eurythmical +eusporangiate +eustatic +eustyle +eutectic +eutectoid +eutherian +eutrophic +evacuant +evacuated +evacuative +evadable +evaluative +evanescent +evangelical +evangelistic +evaporable +evaporated +evaporative +evasive +even +even-handed +even-minded +even-tempered +evens +eventful +eventual +evergreen +everlasting +eversible +every +everyday +evidenced +evident +evidential +evidentiary +evil +evil-eyed +evil-minded +evincible +evincive +eviscerate +evitable +evocable +evocative +evoked +evolutional +evolutionary +evolutionist +evolutive +evolvable +ewe-necked +ex-directory +ex-service +exacerbating +exact +exactable +exacting +exaggerated +exaggerative +exalted +exalting +examinable +examinational +exanimate +exanthematic +exarate +exarch +exarchal +exasperate +exasperated +exasperating +excaudate +exceeding +excellent +excentric +exceptionable +exceptional +exceptive +excerptible +excess +excessive +exchangeable +exchanged +excisable +excitable +excitant +excitative +excitatory +excited +exciting +exclamational +exclamatory +excludable +exclusionary +exclusionist +exclusive +exclusory +excogitative +excommunicable +excommunicate +excommunicative +excommunicatory +excrementitious +excrescent +excretal +excretive +excretory +excruciating +exculpable +exculpated +exculpatory +excurrent +excursive +excusable +excusatory +excused +excusive +execrable +execrative +execratory +executable +executed +executive +executorial +executory +exegetic +exegetical +exemplary +exemplifiable +exemplificative +exemplifying +exempt +exenterate +exequial +exercisable +exergonic +exergual +exertive +exfoliative +exhalant +exhaled +exhaling +exhausted +exhaustible +exhausting +exhaustive +exhaustless +exhibitionist +exhibitionistic +exhibitive +exhibitory +exhilarant +exhilarated +exhilarating +exhilarative +exhortative +exhortatory +exigeant +exigent +exigible +exiguous +exilic +eximious +existent +existential +existentialist +existing +exocrine +exodermal +exoergic +exogamic +exogamous +exogenetic +exogenous +exonerated +exonerative +exophthalmic +exopoditic +exorable +exorbitant +exordial +exoskeletal +exosmotic +exospherical +exosporal +exosporous +exoteric +exothermal +exothermic +exotic +exotoxic +expandable +expanded +expanding +expansible +expansile +expansional +expansionary +expansionism +expansionistic +expansive +expatriate +expectable +expectant +expectative +expected +expecting +expectorant +expedient +expediential +expedite +expedited +expeditionary +expeditious +expellant +expendable +expended +expensive +experienced +experienceless +experiential +experimental +experimentative +expert +expiable +expiatory +expiratory +expired +expiring +expiscatory +explainable +explanatory +expletive +explicable +explicative +explicit +exploding +exploitable +exploitative +exploited +exploitive +explorative +exploratory +explosible +explosive +exponent +exponential +exponible +exportable +exposable +exposed +expositional +expositive +expository +expostulatory +express +expressed +expressible +expressional +expressionism +expressionist +expressionistic +expressionless +expressive +expropriable +expropriated +expugnable +expulsive +expurgated +expurgatorial +expurgatory +exquisite +exsanguine +exsert +exserted +exsertile +exsiccative +exstipulate +exsufflicate +extant +extemporal +extemporaneous +extemporary +extempore +extendable +extended +extended-play +extendible +extensible +extensile +extensional +extensive +extenuating +extenuative +extenuatory +exterior +exterminable +exterminated +exterminatory +external +exteroceptive +exterritorial +extinct +extinctive +extinguishable +extinguished +extirpable +extirpative +extorsive +extortionary +extortionate +extortive +extra +extra-condensed +extracanonical +extracorporeal +extractable +extractible +extractive +extraditable +extraneous +extranuclear +extraordinary +extrapolated +extrapolative +extrapolatory +extravagant +extravehicular +extraversive +extravert +extraverted +extreme +extremer +extremest +extremist +extricable +extricated +extrinsic +extrorse +extroversive +extrovert +extroverted +extrusible +extrusive +exuberant +exudative +exultant +exulting +exuvial +eye-catching +eyed +eyeless +fab +fabaceous +fabled +fabricated +fabricative +fabulous +face-saving +faced +faceless +facete +faceted +facetious +facial +facile +facilitated +facilitative +facinorous +fact-finding +factional +factious +factitious +factitive +factorable +factorial +factual +facular +facultative +fadable +faddier +faddiest +faddish +faddy +faded +fadeless +fading +faecal +faerie +faery +fagaceous +fagged +fail-safe +failed +failing +fain +faint +faintish +fair +fair-haired +fair-minded +fair-spoken +fair-weather +fairish +fairy +fairylike +faithful +faithless +fake +falcate +falciform +falconine +fallacious +fallen +fallibilist +fallible +falling +fallow +false +false-hearted +falser +falsest +falsetto +falsifiable +faltering +famed +fameless +familial +familiar +familiarized +familiarizing +familistic +famished +famous +fanatic +fanatical +fancied +fanciful +fanciless +fancy +fancy-free +fanfold +fanged +fangled +fangless +fanned +fantastic +fantastical +far +far-flung +far-gone +far-off +far-out +far-reaching +far-seeing +far-sighted +faradic +farand +faraway +farci +farcical +fardel-bound +farewell +farfetched +farinaceous +farinose +farm +farming +farouche +farraginous +farrow +farther +farthermost +farthest +fascial +fasciate +fascicular +fasciculate +fascinated +fascinating +fascist +fascistic +fashionable +fashioned +fast +fastened +fastidious +fastigiate +fastuous +fat +fat-faced +fat-free +fat-witted +fatal +fatalist +fatalistic +fated +fateful +fatherless +fatherlike +fatherly +fathomable +fathomless +fatigable +fatigate +fatigue +fatigued +fatless +fattened +fattening +fatter +fattest +fattier +fattiest +fattish +fatty +fatuitous +fatuous +faucal +faucial +fault-finding +faultier +faultiest +faultless +faulty +faunal +faustian +faux +faveolate +favorable +favored +favoring +favorite +favorless +favourable +favoured +favourite +favourless +fawning +fay +fazed +feal +fearful +fearless +fearsome +feasible +feastful +feat +featherbrained +feathered +featherless +feathery +feature-length +featured +featureless +febrifacient +febrific +febrifugal +febrifuge +febrile +fecal +feckless +feculent +fecund +federal +federalism +federalist +federate +federated +federative +feeble +feeble-minded +feebler +feeblest +feeblish +feeling +feelingless +feetless +feigned +feisty +feldspathic +feldspathoid +felicific +felicitous +feline +fell +fellable +felled +fellow +felon +felonious +felsic +felsitic +felspathic +felt +felted +female +feminine +feminism +feminist +feministic +femoral +fencible +fenestral +fenestrated +fenny +feodal +feracious +feral +ferial +ferine +fermentable +fermentation +fermentative +fermented +fernier +ferniest +ferny +ferocious +ferreous +ferrety +ferric +ferriferous +ferroelectric +ferromagnesian +ferromagnetic +ferrous +ferruginous +fertile +fertilised +fertilized +ferulaceous +fervent +fervid +fesswise +festal +festering +festinate +festive +fetal +fetching +fetial +fetichistic +feticidal +fetid +fetishistic +fettered +fetterless +feudal +feudalist +feudalistic +feudatory +fevered +feverish +feverous +few +fewer +fewest +fey +fezzed +fibered +fiberless +fibreless +fibriform +fibrillar +fibrillose +fibrinous +fibroblastic +fibroid +fibrotic +fibrous +fibrovascular +fibular +fickle +fictile +fictional +fictitious +fictive +fiddling +fiddly +fidgety +fiducial +fiduciary +fiendish +fierce +fiercer +fiercest +fierier +fieriest +fiery +fifteen +fifteenth +fifth +fiftieth +fifty +fifty-fifty +fightable +fighting +figuline +figurable +figural +figurate +figurative +figured +filaceous +filagree +filamentary +filamentous +filar +filarial +filial +filibusterous +filiform +filigree +filigreed +filled +filmable +filmed +filmier +filmiest +filmy +filose +filter-tipped +filterable +filthier +filthiest +filthy +filtrable +fimbriate +fin-footed +finable +final +financed +financial +fine +fine-drawn +fineable +fined +finer +finest +fingered +fingerless +finical +finicky +finished +finite +finless +finned +finnier +finniest +finny +fire-and-brimstone +fire-eater +fire-new +fire-resistant +fire-resisting +fired +fireless +fireproof +firm +firmamental +firry +first +first-aid +first-born +first-chop +first-class +first-generation +first-hand +first-rate +first-string +fiscal +fish-bellied +fishable +fishier +fishiest +fishy +fishyback +fissile +fissionable +fissiparous +fissiped +fissirostral +fistic +fistular +fistulous +fit +fitchy +fitful +fitted +fitter +fitting +five +fivefold +fivepenny +fixable +fixative +fixed +fizzier +fizziest +fizzing +fizzy +flabbergasted +flabbier +flabbiest +flabby +flabellate +flaccid +flag-waving +flagellate +flagellated +flagellatory +flagelliform +flaggier +flaggiest +flagging +flaggy +flagitious +flagrant +flailing +flakier +flakiest +flaky +flamboyant +flameproof +flamier +flamiest +flaming +flammable +flamy +flannelly +flapperish +flappy +flared +flaring +flash +flashier +flashiest +flashing +flashy +flat +flat-footed +flatling +flattened +flattering +flattest +flattish +flatulent +flauntier +flauntiest +flaunty +flavescent +flavored +flavorful +flavorless +flavorous +flavorsome +flavoured +flavourful +flavourless +flavourous +flavoursome +flawed +flawier +flawiest +flawless +flawy +flaxen +flea-bitten +flecked +fleckless +fledged +fledgeling +fledgier +fledgiest +fledgling +fledgy +fleeceless +fleecier +fleeciest +fleecy +fleeing +fleet +fleeting +fleshier +fleshiest +fleshless +fleshly +fleshy +fleury +flexed +flexible +flexile +flexuous +flexural +flickering +flighted +flightier +flightiest +flightless +flighty +flimsier +flimsies +flimsy +flintier +flintiest +flinty +flip +flippant +flipping +flirtatious +flittering +flitting +floatable +floatier +floatiest +floating +floaty +floccose +flocculent +floccus +flood +flooded +flooding +floodlighted +floodlit +floored +floppier +floppiest +floppy +floral +floreated +florentine +florescent +floriated +floricultural +florid +floriferous +floristic +flory +flossy +flourishing +floury +flowered +flowering +flowerless +flowery +flowing +flown +fluctuant +fluctuating +fluent +fluffier +fluffiest +fluffy +fluid +fluidal +fluidic +flukey +flukier +flukiest +fluky +fluorescent +fluoric +fluorometric +fluoroscopic +flurried +flush +flushed +flustered +fluted +flutier +flutiest +fluttering +fluttery +fluty +fluvial +fluviatile +fluxional +fluxionary +fly +fly-by-night +flyable +flyaway +flying +flyweight +foaled +foamier +foamiest +foaming +foamless +foamy +focal +focused +focussed +foetal +foetid +fogbound +fogged +foggier +foggiest +foggy +fogless +fogyish +foiled +fold +foldable +foldaway +folded +folding +foliaceous +foliaged +foliar +foliate +foliated +folio +foliolate +foliose +folk +folkish +folklore +folkloric +folksier +folksiest +folksy +follicular +follow-up +following +fond +fontal +foodless +fool +foolhardier +foolhardiest +foolhardy +fooling +foolish +foolproof +foot-loose +footed +footier +footiest +footless +footling +footsore +footworn +foppish +foraminal +foraminiferal +foraminiferous +forbearing +forbidden +forbidding +forced +forceful +forceless +forcible +forcipate +fordable +fore +foreboding +foreclosable +foregoing +foregone +forehand +forehanded +foreign +foreknowable +foremost +forenamed +forensic +foreordained +foresaid +foreseeable +foreseen +foreshadowing +foresighted +foresightful +forespent +forestal +forested +forethoughtful +foretold +forfeit +forfeitable +forfeited +forficate +forgeable +forged +forgetful +forgetive +forgettable +forgivable +forgiving +forgotten +forked +forkier +forkiest +forky +forlorn +formable +formal +formalistic +formalized +formational +formative +formed +former +formic +formidable +formless +formulaic +formulary +formulated +formulism +fornent +fornical +fornicate +forsaken +forspent +forte +forthcoming +forthright +fortieth +fortifiable +fortified +fortifying +fortis +fortissimo +fortitudinous +fortnightly +fortuitism +fortuitist +fortuitous +fortunate +fortuneless +forty +fortyish +forward +forward-looking +forworn +forzando +fossiliferous +fossilized +fossorial +foster +fostered +fou +foudroyant +foughten +foul +foul-mouthed +foul-spoken +fouled +found +foundational +founded +founderous +fountainless +four +four-dimensional +four-footed +four-handed +four-legged +four-part +four-stroke +four-wheel +fourfold +fourpenny +fourscore +foursquare +fourteen +fourteenth +fourth +fourth-class +fourth-dimensional +foveal +foveate +foxier +foxiest +foxy +fozier +foziest +fozy +fractional +fractious +fractured +fragile +fragmental +fragmentary +fragmented +fragrant +frail +framed +francophone +frangible +frank +frantic +fratchy +fraternal +fratricidal +fraudful +fraudulent +fraught +frayed +frazzled +freakier +freakiest +freakish +freaky +frecklier +freckliest +freckly +free +free-and-easy +free-floating +free-form +free-hand +free-handed +free-hearted +free-living +free-range +free-soil +free-spoken +free-swimming +free-thinking +free-trade +freebie +freeborn +freed +freehold +freeing +freemasonic +freer +freest +freewheeling +freezable +freeze-dried +freezing +fremd +french +frenetic +frenzied +frequent +frequentative +fresh +fresh-run +freshman +freshwater +fretful +fretted +fretty +friable +fribble +fricative +frictional +frictionless +fried +friended +friendless +friendlier +friendliest +friendly +frightened +frightening +frightful +frigid +frigorific +frilled +frilly +fringe +fringed +fringeless +fringillid +fringilline +fringy +friskier +friskiest +frisky +frivolous +frizzier +frizziest +frizzlier +frizzliest +frizzly +frizzy +frockless +frogged +froggier +froggiest +froggy +frolic +frolicsome +fronded +frondescent +front +front-rank +frontal +frontier +frontless +frore +frostbitten +frosted +frostier +frostiest +frostless +frostlike +frosty +frothier +frothiest +frothing +frothy +froward +frowning +frowsier +frowsiest +frowsty +frowsy +frowzier +frowziest +frowzy +frozen +fructed +fructiferous +fructuous +frugal +frugivorous +fruitarian +fruited +fruitful +fruitier +fruitiest +fruiting +fruitive +fruitless +fruity +frumentaceous +frumpier +frumpiest +frumpish +frumpy +frustrate +frustrated +frustrating +frutescent +fruticose +fubsier +fubsiest +fubsy +fucoid +fuddled +fugacious +fugal +fugato +fuggy +fugitive +fulfilled +fulgent +fulgid +fulgorous +fulgurant +fulgurating +fulgurous +fuliginous +full +full-blooded +full-blown +full-bodied +full-bottomed +full-bound +full-cream +full-dress +full-face +full-faced +full-fashioned +full-fledged +full-frontal +full-grown +full-length +full-mouthed +full-page +full-rigged +full-sailed +full-scale +full-size +full-time +fully-fashioned +fully-fledged +fully-grown +fulminant +fulminatory +fulminous +fulsome +fulvous +fumarolic +fumatory +fumbling +fumed +fumier +fumiest +fumigatory +fumy +fun +functional +functionalism +functionalist +functionary +functioning +functionless +fundamental +fundamentalism +fundamentalist +funded +funerary +funereal +funest +fungal +fungible +fungicidal +fungiform +fungistatic +fungoid +fungous +funicular +funiculate +funked +funkier +funkiest +funky +funnier +funniest +funny +furcate +furcular +furfuraceous +furibund +furioso +furious +furled +furnished +furred +furriest +furrowed +furrowy +furry +further +furthermost +furthest +furtive +furuncular +furunculous +furzy +fuscous +fused +fusible +fusiform +fusil +fusile +fusionism +fusionist +fussier +fussiest +fussy +fustian +fustier +fustiest +fusty +futile +futilitarian +future +future-perfect +futureless +futurism +futurist +futuristic +fuzzed +fuzzier +fuzziest +fuzzy +gabbling +gabbroic +gabbroid +gabbroitic +gabby +gabled +gadoid +gadrooned +gaff-rigged +gaga +gaillard +gainable +gainful +gainless +gainly +gaited +gala +galactagogue +galactic +galactophorous +galactopoietic +galeate +gallant +galled +galleried +galliambic +galliard +gallinaceous +galling +gallooned +galloping +galore +galvanic +galvanizing +galvanometric +galvanoplastic +gambling +gambogian +gambrel +game +gamer +gamesome +gamest +gametic +gamey +gamic +gamier +gamiest +gammy +gamopetalous +gamophyllous +gamosepalous +gamy +gangliar +gangliate +ganglier +gangliest +gangliform +gangling +ganglionic +gangly +gangrenous +ganoid +gap-toothed +gaping +garbed +garbled +gardant +gargantuan +gargety +garish +garlandless +garlicky +garmented +garmentless +garni +garnished +garreted +garrulous +gas-fired +gaseous +gashed +gasified +gasiform +gasometric +gasometrical +gasping +gassier +gassiest +gassy +gasteropod +gastralgic +gastric +gastroenteric +gastrointestinal +gastronomic +gastronomical +gastropod +gated +gateless +gathered +gathering +gauche +gaudy +gauge +gaugeable +gaumless +gaunt +gauntleted +gaussian +gauzier +gauziest +gauzy +gawkier +gawkiest +gawky +gawsy +gay +geanticlinal +geared +gearless +geegaw +geitonogamous +gelatinoid +gelatinous +gelded +gelid +gemel +geminate +gemmaceous +gemmate +gemmed +gemmier +gemmiest +gemmiferous +gemmiparous +gemmological +gemmy +gemological +genal +genealogic +genealogical +generable +general +general-purpose +generalisable +generalizable +generalized +generative +generic +generous +genethliac +genethliacally +genethlialogic +genethlialogical +genetic +genetical +genial +genic +geniculate +genital +genitalic +genitival +genitive +genocidal +genotypic +genteel +gentianaceous +gentile +gentle +gentled +gentlemanlike +gentlemanly +gentler +gentlest +gentlewomanly +gentling +genty +genuine +geocentric +geochemical +geochronological +geodesic +geodesical +geodetic +geodic +geodynamic +geodynamical +geognostic +geognostical +geographic +geographical +geoidal +geologic +geological +geomagnetic +geomantic +geomedical +geometric +geometrical +geometrid +geomorphologic +geomorphological +geophagous +geophilous +geophysical +geophytic +geopolitical +geoponic +georgic +geostatic +geostationary +geostrophic +geosynchronous +geosynclinal +geotactic +geotectonic +geothermal +geotropic +geriatric +german +germane +germanous +germicidal +germinable +germinal +germinant +germinative +gerontological +gerundial +gerundival +gerundive +gestational +gestative +gestic +gesticulating +gesticulative +gesticulatory +gestural +gettable +gewgaw +ghast +ghastful +ghastlier +ghastliest +ghastly +ghostlier +ghostliest +ghostly +ghoulish +giant +gibbed +gibbose +gibbous +giddied +giddier +giddiest +giddy +giddying +gifted +gigantean +gigantesque +gigantic +gigglier +giggliest +giggly +gilded +gilled +gilt +gilt-edged +gimcrack +gimlet +gimlet-eyed +gimmicky +gimpy +ginger +gingerly +gingery +gingival +ginned +giocoso +girlish +girly +girt +given +giving +glabellar +glabrate +glabrous +glacial +glaciated +glaciological +glad +gladdened +gladiate +gladiatorial +gladsome +glaikit +glairier +glairiest +glairy +glaived +glamorous +glamourous +glandered +glanderous +glandular +glandulous +glare +glarier +glariest +glaring +glary +glass-faced +glassed +glassier +glassiest +glasslike +glassy +glaucescent +glaucomatous +glauconitic +glaucous +glazed +gleaming +gleeful +gleesome +gleetier +gleetiest +gleety +gleg +glenoid +glial +glib +glibber +glibbest +gliddery +glimmering +glimmery +glinting +gliomatous +glistening +glistering +glittering +glittery +global +globate +globoid +globose +globular +globuliferous +glomerate +glomerular +gloomful +gloomier +gloomiest +glooming +gloomy +glorified +glorious +glossarial +glossier +glossies +glossiest +glossographical +glossological +glossy +glottal +glottic +glottidean +glottogonic +gloved +glowering +glowing +gluconeogenic +glucosic +glucosuric +glued +gluey +glum +glumaceous +glummer +glummest +glumpier +glumpiest +glumpy +gluteal +glutenous +glutinous +glutted +gluttonous +glyceric +glycogen +glycogenetic +glycogenic +glycolic +glycolytic +glycosidic +glycosuric +glyphic +glyphographic +glyptic +glyptographic +gnarled +gnarlier +gnarliest +gnarly +gnathic +gnathonic +gneissic +gneissoid +gnomic +gnomish +gnomonic +gnostic +gnotobiotic +go-ahead +go-as-you-please +go-to-meeting +goaded +goalless +goateed +goatish +gobioid +gobony +god-fearing +goddam +goddamn +goddamned +godless +godlier +godliest +godlike +godly +goggle-eyed +going +goitrous +gold +gold-foil +gold-leaf +golden +goliardic +gonadal +gonadial +gonadotropic +gone +gonidial +gonidic +goniometric +goniometrical +gonococcal +gonococcic +gonococcoid +gonorrheal +gonorrheic +good +good-for-nothing +good-humoured +good-looking +good-natured +good-sized +good-tempered +goodish +goodlier +goodliest +goodly +goody-goody +gooey +goofier +goofiest +goofy +gooier +gooiest +goosey +goosy +gorged +gorgeous +gorgonian +gorier +goriest +gorillian +gorilline +gorilloid +gormless +gorsy +gory +gossamer +gossipy +goutier +goutiest +gouty +governable +governessy +governing +governmental +gowaned +gowany +gowned +goyish +grab +graceful +graceless +gracile +gracious +gradable +gradational +gradatory +grade +graded +gradely +gradient +gradual +gradualism +gradualist +gradualistic +graduate +graduated +grained +grainier +grainiest +grainy +grallatorial +gram-negative +gram-positive +gramineous +graminivorous +grammatic +grammatical +gramophonic +grand +grand-ducal +grandfatherly +grandiloquent +grandiose +grandioso +grandmotherly +granitic +granitoid +granivorous +granolithic +granophyric +grantable +granted +granular +granulated +granulative +granuliferous +granulitic +granulocytic +granulomatous +granulose +grapey +graphic +graphical +graphitic +graphologic +graphological +grapier +grapiest +graptolitic +grapy +graspable +grasping +graspless +grass-green +grass-roots +grassier +grassiest +grassy +grateful +gratified +gratifying +grating +gratis +gratuitous +gratulant +gratulatory +grave +gravel +gravel-blind +graveless +gravelly +graven +gravest +gravid +gravimetric +gravitational +gravitative +gray +grayed +grayish +grazed +greased +greasier +greasiest +greasy +great +great-bellied +great-hearted +greater +greatest +greaved +greedier +greediest +greedy +green +green-eyed +greening +greenish +greensick +gregarine +gregarious +greige +gressorial +grey +grey-haired +grey-headed +greyish +grief-stricken +griefless +grieving +grievous +griffinish +grilled +grim +grimier +grimiest +grimmer +grimmest +grimy +grippier +grippiest +gripping +gripple +grippy +griseous +grislier +grisliest +grisly +gristlier +gristliest +gristly +grittier +grittiest +gritty +grizzled +grizzlier +grizzlies +grizzliest +grizzly +groaning +groggier +groggiest +groggy +groomed +grooved +groovier +grooviest +groovy +groping +gross +grotesque +grotty +grouchier +grouchiest +grouchy +ground +groundless +group +grouped +grouse +groutier +groutiest +grouty +groveling +grovelling +growable +growing +grown +grown-up +grubbier +grubbiest +grubby +grudging +grueling +gruelling +gruesome +gruff +gruffish +grum +grumbling +grumbly +grummer +grummest +grumose +grumous +grumpier +grumpiest +grumpy +grungy +grunting +gruntled +guaranteed +guardable +guardant +guarded +guardian +guardless +gubernacular +gubernatorial +gude +guerilla +guerrilla +guessable +guest +guidable +guided +guideless +guiding +guileful +guileless +guiltier +guiltiest +guiltless +guilty +gular +gules +gulfy +gull-wing +gullable +gullible +gummatous +gummed +gummier +gummiest +gummous +gummy +gumptious +gun-shy +gunless +gunned +guns +gushier +gushiest +gushing +gushy +gusseted +gustable +gustative +gustatory +gustier +gustiest +gusty +gutless +gutsier +gutsiest +gutsy +gutta +guttate +guttering +guttural +gutturalized +gymnasial +gymnastic +gymnorhinal +gymnospermous +gynaecocracy +gynaecocratic +gynaecoid +gynaecologic +gynaecological +gynandromorphic +gynandromorphous +gynandrous +gynecoid +gynecologic +gynecological +gynodioecious +gynomonoecious +gypseous +gypsiferous +gypsy +gyral +gyrate +gyrational +gyratory +gyroidal +gyromagnetic +gyronny +gyroscopic +gyrose +gyrostatic +habile +habit-forming +habitable +habitational +habited +habitual +habitudinal +hack +hacking +hackly +hackneyed +hadal +haemal +haematic +haematinic +haematogenous +haematoid +haematopoiesis +haematopoietic +haemic +haemolysis +haemolytic +haemorrhagic +haemorrhoidal +haemostatic +hag-ridden +haggard +haggish +hagiographic +hagiographical +hagiologic +hagiological +hagioscopic +hail-fellow +hail-fellow-well-met +hair-raising +hair-trigger +haired +hairier +hairiest +hairless +hairlike +hairy +halcyon +hale +halest +half +half-a-dozen +half-and-half +half-asleep +half-assed +half-baked +half-blooded +half-bound +half-bred +half-breed +half-calf +half-caste +half-cocked +half-cut +half-dead +half-done +half-door +half-dozen +half-hardy +half-hearted +half-hour +half-hourly +half-length +half-pound +half-price +half-round +half-seas-over +half-size +half-starved +half-timbered +half-time +half-track +half-tracked +half-witted +halftone +halfway +hallowed +hallucinating +hallucinative +hallucinatory +hallucinogenic +halogenous +haloid +halophilous +halt +halted +halting +ham-fisted +ham-handed +hamate +hammered +hammerless +hammier +hammiest +hammy +hamular +hamulate +hand-held +hand-knit +hand-me-down +hand-picked +hand-to-hand +hand-to-mouth +handcrafted +handed +handicapped +handier +handiest +handled +handless +handmade +hands-off +handsome +handsomer +handsomest +handworked +handwritten +handwrought +handy +hangable +hangdog +hanging +haphazard +hapless +haploid +happening +happier +happiest +happy +happy-go-lucky +haptic +harassed +harborless +harbourless +hard +hard-and-fast +hard-bitten +hard-boiled +hard-featured +hard-fisted +hard-fought +hard-handed +hard-headed +hard-hit +hard-hitting +hard-mouthed +hard-nosed +hard-pressed +hard-set +hard-up +hard-wearing +hard-working +hardback +hardbacked +hardcover +hardened +hardier +hardiest +hardscrabble +hardwood +hardy +harlequin +harlot +harmed +harmful +harmless +harmonic +harmonical +harmonious +harmonistic +harmonized +harnessed +harried +harrowing +harsh +harum-scarum +haruspical +hask +hastate +hastening +hastier +hastiest +hasty +hatable +hatched +hatching +hateable +hated +hateful +hatless +hatted +haughtier +haughtiest +haughty +haunched +haunted +haunting +hauriant +haustellate +hawk-eyed +hawkish +hawklike +hawser-laid +haywire +hazardable +hazardous +hazel +hazelly +hazier +haziest +hazy +head +head-on +headachy +headed +headfirst +headhunting +headier +headiest +headless +headlong +headmost +headstrong +heady +healable +healed +healing +healthful +healthier +healthiest +healthy +heaped +heaping +heapy +heard +hearing +hearing-impaired +hearsay +heart-free +heart-rending +heart-shaped +heart-stricken +heart-to-heart +heart-warming +heart-whole +heartbreaking +heartbroken +hearted +heartening +heartfelt +heartier +hearties +heartiest +heartless +heartsome +hearty +heated +heathen +heathenish +heather +heathery +heathier +heathiest +heathy +heating +heaven-born +heaven-sent +heavenly +heavenward +heavier +heavier-than-air +heavies +heaviest +heaving +heavy +heavy-armed +heavy-duty +heavy-handed +heavy-hearted +heavy-laden +heavyweight +hebdomadal +hebdomadary +hebephrenic +hebetate +hebetudinous +hectic +hectographic +hedged +hedgier +hedgiest +hedgy +hedonic +hedonist +hedonistic +heedful +heedless +heel-and-toe +heeled +heelless +heftier +heftiest +hefty +hegemonic +hegemonical +heigh +heightening +heinous +heirless +held +heliac +heliacal +helical +helicoid +helicoidal +heliocentric +heliochromic +heliographic +heliographical +heliolatrous +heliolithic +heliometric +heliometrical +helioscopic +heliotropic +heliotypic +hell-bent +hellish +helluva +helmed +helmeted +helminthic +helminthoid +helminthologic +helminthological +helmless +helpable +helpful +helpless +helter-skelter +hemal +hematologic +hemicyclic +hemihedral +hemimorphic +hemiopic +hemiparasitic +hemiplegic +hemipterous +hemispheric +hemispherical +hemispheroidal +hemistichal +hemitropic +hemizygous +hemorrhagic +hempen +hempy +hendecagonal +hendecasyllabic +hennaed +henotheistic +henpecked +heortological +hep +hepatic +heptagonal +heptamerous +heptarchic +heptasyllabic +heptavalent +heralded +heraldic +herbaceous +herbaged +herbal +herbicidal +herbier +herbiest +herbivorous +herbless +herby +herding +here +hereditable +hereditary +heretical +heretofore +heritable +hermaphrodite +hermaphroditic +hermeneutic +hermetic +hermitical +hernial +herniated +heroic +heroical +herpetic +herpetologic +herpetological +hesitant +hesitating +hesitative +het +hetero +heterocercal +heterochromatic +heterochromous +heteroclite +heterocyclic +heterodactyl +heterodactylous +heterodont +heterodox +heterodyne +heteroecious +heterogamous +heterogeneous +heterogenetic +heterogonous +heterologous +heteromerous +heteromorphic +heteronomous +heterophyllous +heteroplastic +heteropolar +heteropterous +heterosexual +heterosporous +heterostyled +heterotactic +heterothallic +heterotopic +heterotrophic +heterotypic +heterozygous +heuristic +hewn +hex +hexadecimal +hexadic +hexagonal +hexahedral +hexamerous +hexametric +hexametrical +hexaplar +hexaplaric +hexastyle +hexavalent +hexed +hi-fi +hibernal +hibernating +hick +hidden +hideous +hidrotic +hiemal +hierarchal +hierarchic +hierarchical +hieratic +hierocratic +hieroglyphic +hieroglyphical +hierogrammatic +hierogrammatical +hierologic +hierological +hierophantic +hierurgical +higgledy-piggledy +high +high-class +high-fidelity +high-flown +high-flying +high-grade +high-handed +high-hat +high-key +high-keyed +high-level +high-minded +high-necked +high-octane +high-pitched +high-powered +high-pressure +high-priced +high-principled +high-proof +high-ranking +high-rise +high-risk +high-sounding +high-speed +high-spirited +high-stepping +high-strung +high-tension +high-test +high-toned +high-top +high-voltage +highbrow +higher +highest +highland +highty-tighty +hijacking +hilar +hilarious +hilding +hillier +hilliest +hillocky +hilly +hind +hinder +hindering +hindermost +hindmost +hindward +hip +hipped +hipper +hippest +hippiatric +hippier +hippiest +hippocampal +hippodromic +hippophagous +hippopotamic +hippy +hirable +hircine +hireable +hired +hirsute +hirudinean +hirudinoid +hirundine +hispid +hissing +histie +histiocytic +histioid +histogenetic +histoid +histologic +histological +histolytic +histopathological +historiated +historic +historical +historicism +historicist +historiographic +historiographical +histrionic +hit +hit-and-run +hitchy +hither +hithermost +hiveless +hivelike +ho-hum +hoar +hoarier +hoariest +hoarse +hoary +hobbyless +hobnail +hobnailed +hoc +hogged +hoggish +hoiden +hoity-toity +hokey +holding +hole-and-corner +holey +holier +holier-than-thou +holies +holiest +holistic +hollow +hollow-eyed +hollowed +hollowhearted +holmic +holoblastic +holocaustal +holocaustic +holocrine +holograph +holographic +holohedral +holometabolic +holometabolous +holophrastic +holophytic +holothurian +holotypic +holozoic +holstered +holy +home +home-baked +home-brewed +home-grown +home-made +homebound +homeless +homelier +homeliest +homelike +homely +homemaker +homemaking +homeomorphic +homeomorphous +homeopathic +homeostatic +homeothermal +homeothermic +homesick +homespun +homeward +homeward-bound +homey +homicidal +homier +homiest +homiletic +homiletical +homing +hominid +hominoid +homocentric +homocercal +homochromatic +homochromous +homocyclic +homodont +homodyne +homoeomorphic +homoeomorphous +homoeopathic +homoerotic +homogamous +homogeneous +homogenetic +homogenized +homogenous +homoiothermal +homoiothermic +homological +homologous +homomorphic +homomorphous +homonymic +homonymous +homophile +homophonic +homophonous +homoplastic +homopolar +homopterous +homosexual +homosporous +homotaxial +homotaxic +homothallic +homothermal +homothermic +homotypic +homozygous +homuncular +homy +honest +honey +honey-sweet +honeycombed +honeyed +honeyless +honied +honorable +honorary +honorific +honour +honourable +honoured +honourless +hooded +hoodless +hoofed +hoofless +hook-nosed +hooked +hookier +hookiest +hooly +hopeful +hopeless +hopping +horal +horary +horizontal +hormonal +hormonic +horn-mad +horn-rimmed +hornblendic +horned +hornier +horniest +hornish +hornless +hornlike +horny +horologic +horoscopic +horrendous +horrent +horrible +horrid +horrific +horrified +horrifying +horror-stricken +horror-struck +horse-and-buggy +horse-faced +horsey +horsier +horsiest +horsy +hortative +hortatory +horticultural +hospitable +hostile +hot +hot-blooded +hot-short +hot-tempered +hotfoot +hotheaded +hotshot +hotter +hottest +hotting +hottish +hourlong +hourly +house-broken +house-proud +house-to-house +housebound +household +houseless +housewifely +hoven +how-to +howe +howling +hoyden +hoydenish +huddled +hued +hueless +huffier +huffiest +huffing +huffish +huffy +huge +huger +hugest +huggable +hugger-mugger +hulkier +hulkiest +hulking +hulky +hull-down +human +humane +humanist +humanistic +humanitarian +humanlike +humanoid +humble +humbled +humbler +humblest +humbling +humdrum +humectant +humeral +humic +humid +humiliated +humiliating +humiliatory +hummel +humming +hummocky +humongous +humoral +humoristic +humorless +humorous +humourless +humoursome +humpbacked +humped +humpier +humpiest +humpy +hunchback +hunchbacked +hunched +hundred +hundredfold +hundredth +hung +hungerly +hungry +hunkered +hunky +hunky-dory +huntaway +hunted +hurling +hurly-burly +hurried +hurry-scurry +hurry-skurry +hurrying +hurt +hurtful +hurtless +hurtling +husbandless +husbandly +hush-hush +hushed +huskier +huskiest +husky +hyacinthine +hyaline +hyaloid +hybrid +hybridisable +hybridizable +hydra-headed +hydragogue +hydrated +hydraulic +hydric +hydriodic +hydro +hydrobromic +hydrocephalic +hydrochloric +hydrocyanic +hydrodynamic +hydroelectric +hydrofluoric +hydrogenous +hydrographic +hydrographical +hydroid +hydrokinetic +hydrologic +hydrological +hydrolytic +hydromantic +hydromedusan +hydrometric +hydrometrical +hydropathic +hydropathical +hydrophanous +hydrophilic +hydrophilous +hydrophobic +hydrophytic +hydropic +hydroponic +hydroptic +hydrostatic +hydrotactic +hydrotherapeutic +hydrothermal +hydrotropic +hydrous +hydroxy +hydrozoan +hyetal +hyetographic +hyetographical +hygienic +hygrometric +hygrophilous +hygrophytic +hygroscopic +hylomorphic +hylophagous +hylotheist +hylozoistic +hymenal +hymeneal +hymenial +hymenopterous +hymnal +hyoid +hypabyssal +hypaethral +hypalgesic +hyperactive +hyperacute +hyperaemic +hyperaesthetic +hyperalgesic +hyperbaric +hyperbatic +hyperbolic +hypercatalectic +hyperconscious +hypercorrect +hypercritical +hyperemetic +hyperemic +hyperesthetic +hypereutectic +hypergamous +hypergolic +hypermetrical +hypermetropic +hyperphysical +hyperplastic +hyperpyretic +hypersensitive +hypersensitized +hypersensual +hypersonic +hypersthenic +hypertensive +hyperthermal +hypertonic +hypertrophic +hypertrophied +hyphal +hyphenated +hyphenic +hypnagogic +hypnogenetic +hypnoid +hypnoidal +hypnopompic +hypnotic +hypnotisable +hypnotised +hypnotistic +hypnotizable +hypnotized +hypoblastic +hypochondriac +hypochondriacal +hypocoristic +hypocritical +hypocycloidal +hypodermal +hypodermic +hypoeutectic +hypogastric +hypogeal +hypogene +hypogeous +hypoglossal +hypoglycemic +hypognathous +hypogynous +hypomanic +hypophosphorous +hypophyseal +hypophysial +hypoplastic +hypostatic +hypostyle +hypotactic +hypotensive +hypothalamic +hypothecary +hypothermal +hypothetic +hypothetical +hypothyroid +hypothyroidism +hypotonic +hypoxic +hypsometric +hyracoid +hysteretic +hysteric +hysterical +hysterogenic +hysteroid +iambic +iatric +iatrochemical +iatrogenic +ice-cold +ice-cube +ice-free +iced +ichnographic +ichnographical +ichorous +ichthyic +ichthyoid +ichthyolitic +ichthyological +ichthyophagous +ichthyosaurian +ichthyotic +icier +iciest +ickier +ickiest +icky +iconic +iconoclastic +iconomatic +icosahedral +icteric +ictic +icy +ideal +idealess +idealist +idealistic +idealized +ideational +ideative +idem +idempotent +identic +identical +identifiable +identified +identifying +ideographic +ideographical +ideologic +ideological +ideomotor +idioblastic +idiographic +idiomatic +idiomatical +idiomorphic +idiopathic +idiorrhythmic +idiosyncratic +idiotic +idle +idled +idlest +idling +idolatrous +idolized +idyllic +iffy +igneous +ignescent +ignitable +ignited +ignitible +ignoble +ignominious +ignorable +ignorant +ignored +iguana +iguanid +ileac +iliac +ilka +ill +ill-advised +ill-affected +ill-assorted +ill-behaved +ill-boding +ill-bred +ill-conceived +ill-conditioned +ill-considered +ill-defined +ill-disposed +ill-equipped +ill-fated +ill-favored +ill-favoured +ill-founded +ill-gotten +ill-humoured +ill-judged +ill-looking +ill-mannered +ill-natured +ill-omened +ill-spent +ill-starred +ill-tempered +ill-timed +ill-treated +ill-used +illative +illaudable +illegal +illegible +illegitimate +illiberal +illicit +illimitable +illiquid +illiterate +illogical +illuminable +illuminant +illuminate +illuminated +illuminating +illuminative +illusive +illusory +illustrated +illustrational +illustrative +illustrious +illuvial +imageable +imaginable +imaginal +imaginary +imaginative +imagined +imagism +imagist +imagistic +imbecile +imbecilic +imbibitional +imbricate +imbricated +imbued +imidic +imitable +imitation +imitative +immaculate +immane +immanent +immaterial +immature +immeasurable +immediate +immedicable +immemorial +immense +immensurable +immersed +immersible +immethodical +imminent +immiscible +immitigable +immobile +immoderate +immodest +immoral +immortal +immotile +immovable +immoveable +immune +immunized +immunogenic +immunological +immunosuppressive +immutable +impacted +impactive +impaired +impalpable +imparipinnate +imparisyllabic +impartable +impartial +impartible +impassable +impassible +impassionate +impassioned +impassive +impatient +impavid +impeachable +impeccable +impeccant +impecunious +impeded +impedimental +impeding +impeditive +impel +impelled +impellent +impelling +impendent +impending +impenetrable +impenitent +impennate +imperative +imperatorial +imperceptible +imperceptive +impercipient +imperfect +imperfectible +imperfective +imperforate +imperial +imperialist +imperialistic +imperious +imperishable +impermanent +impermeable +impermissible +impersonal +impertinent +imperturbable +imperviable +impervious +impetiginous +impetrative +impetratory +impetuous +impingent +impious +impish +implacable +implacental +implanted +implausible +implemental +implemented +implicated +implicative +implicit +implied +imploratory +imploring +implosive +impolite +impolitic +imponderable +importable +important +imported +importunate +imposable +imposed +imposing +impossible +impotent +impoundable +impoverished +impracticable +impractical +imprecatory +imprecise +impregnable +impregnate +impregnated +imprescriptible +impressed +impressible +impressionable +impressionist +impressionistic +impressive +imprisonable +imprisoned +improbable +impromptu +improper +impropriate +improvable +improved +improvident +improving +improvisational +improvisatory +improvised +imprudent +impudent +impugnable +impuissant +impulsive +impure +imputable +imputative +in-and-in +in-between +in-built +in-car +in-depth +in-flight +in-house +in-service +inaccessible +inaccurate +inactive +inadaptable +inadequate +inadmissible +inadvertent +inadvisable +inalienable +inalterable +inane +inanimate +inappeasable +inappellable +inappetent +inapplicable +inapposite +inappreciable +inappreciative +inapprehensible +inapprehensive +inapproachable +inappropriate +inapt +inarticulate +inartificial +inartistic +inattentive +inaudible +inaugural +inauspicious +inauthentic +inboard +inborn +inbound +inbred +inbreed +inby +incalculable +incalescent +incandescent +incantational +incantatory +incapable +incapacious +incapacitated +incapacitating +incarcerate +incarnadine +incarnate +incased +incautious +incendiary +incensed +incentive +inceptive +incertain +incessant +incestuous +inchoate +inchoative +incident +incidental +incipient +incised +incisive +incisory +incitant +incivil +inclement +inclinable +inclinational +inclinatory +inclined +includable +included +includible +inclusive +incoercible +incog +incogitable +incogitant +incognita +incognito +incognizable +incognizant +incognoscible +incoherent +incombustible +incoming +incommensurable +incommensurate +incommodious +incommunicable +incommunicado +incommunicative +incommutable +incomparable +incompatible +incompetent +incomplete +incompliant +incomprehensible +incomprehensive +incompressible +incomputable +inconceivable +inconclusive +incondensable +incondite +incongruent +incongruous +inconsecutive +inconsequent +inconsequential +inconsiderable +inconsiderate +inconsistent +inconsolable +inconsonant +inconspicuous +inconstant +inconsumable +incontestable +incontinent +incontrollable +incontrovertible +inconvenient +inconvertible +inconvincible +incoordinate +incorporate +incorporated +incorporating +incorporative +incorporeal +incorrect +incorrigible +incorrupt +incorruptible +incrassate +incrassative +increasable +increased +increasing +increate +incredible +incredulous +incremental +increscent +incriminating +incriminatory +incrust +incubative +incubatory +incubous +inculcative +inculpable +inculpatory +incult +incumbent +incunabular +incurable +incurious +incurrable +incurrent +incursive +incurvate +incurved +incuse +indagative +indebted +indecent +indeciduate +indeciduous +indecipherable +indecisive +indeclinable +indecomposable +indecorous +indefatigable +indefeasible +indefectible +indefensible +indefinable +indefinite +indehiscent +indelible +indelicate +indemonstrable +indented +indentured +independent +indescribable +indestructible +indeterminable +indeterminate +indeterminism +indeterminist +index-linked +indexical +indexless +indicative +indicatory +indicial +indictable +indifferent +indigenous +indigent +indigested +indigestible +indigestive +indign +indignant +indigo-blue +indirect +indiscernible +indiscerptible +indiscoverable +indiscreet +indiscrete +indiscriminate +indiscriminating +indiscriminative +indispensable +indisposed +indisputable +indissoluble +indistinct +indistinctive +indistinguishable +indivertible +individual +individualist +individualistic +individualized +indivisible +indocile +indolent +indomitable +indoor +indrawn +indubitable +induced +inducible +inductile +inductive +indulgent +induplicate +indurate +indurative +indusial +indusiate +industrial +industrialized +industrious +indwelling +inebriant +inebriate +inebriated +inedible +inedited +ineducable +ineffable +ineffaceable +ineffective +ineffectual +inefficacious +inefficient +inelaborate +inelastic +inelegant +ineligible +ineloquent +ineluctable +inenarrable +inept +inequable +inequitable +ineradicable +inerasable +inerrable +inerrant +inert +inertial +inescapable +inessential +inessive +inestimable +inevitable +inexact +inexcusable +inexhaustible +inexistent +inexorable +inexpedient +inexpensive +inexperienced +inexpert +inexpiable +inexplainable +inexplicable +inexplicit +inexpressible +inexpressive +inexpugnable +inexpungible +inextensible +inextinguishable +inextirpable +inextricable +infallible +infamous +infant +infanticidal +infantile +infantine +infatuate +infatuated +infeasible +infect +infected +infectious +infective +infecund +infelicitous +infelt +inferable +inferential +inferior +infernal +inferrible +infertile +infested +infidel +infiltrative +infinite +infinitesimal +infinitival +infinitive +infirm +inflamed +inflammable +inflammatory +inflatable +inflated +inflationary +inflationism +inflected +inflectional +inflectionless +inflective +inflexed +inflexible +inflexional +inflexionless +inflictive +inflorescent +inflowing +influent +influential +influenzal +inform +informal +informational +informative +informatory +informed +infracostal +infrahuman +inframaxillary +infrangible +infrasonic +infrequent +infundibular +infundibulate +infundibuliform +infuriate +infuriated +infuriating +infuscate +infusible +infusive +infusorial +infusorian +ingenerate +ingenious +ingenuous +ingested +ingestible +ingestive +inglorious +ingoing +ingrain +ingrained +ingrate +ingratiating +ingravescent +ingressive +ingrowing +ingrown +inguinal +inhabitable +inhabited +inhalant +inhaled +inhaling +inharmonic +inharmonious +inherent +inheritable +inherited +inheriting +inhibited +inhibiting +inhibitory +inhomogeneous +inhospitable +inhuman +inhumane +inhumed +inimical +inimitable +iniquitous +initial +initiate +initiated +initiative +initiatory +injectable +injudicious +injunctive +injured +injurious +inkier +inkiest +inky +inlaid +inland +inlying +inmost +innate +inner +inner-directed +innermost +innocent +innocuous +innominate +innovative +innovatory +innoxious +innumerable +innumerate +innumerous +innutritious +inobservant +inoculable +inoculative +inodorous +inoffensive +inofficious +inoperable +inoperative +inopportune +inordinate +inorganic +inotropic +inphase +inpouring +inquiline +inquilinous +inquiring +inquisitional +inquisitive +inquisitorial +inrush +inrushing +insalubrious +insane +insanitary +insatiable +insatiate +inscribable +inscribed +inscriptional +inscriptive +inscrutable +insecticidal +insectile +insectivorous +insecure +inseminated +insensate +insensible +insensitive +insentient +inseparable +insertable +inserted +insertional +insessorial +inseverable +inshore +inside +inside-out +insides +insidious +insightful +insignificant +insincere +insinuating +insinuative +insipid +insipient +insistent +insociable +insolent +insoluble +insolvable +insolvent +insomniac +insomnious +insouciant +inspectional +inspective +inspectorial +inspirable +inspirational +inspirative +inspiratory +inspired +inspiring +inspiriting +instable +instant +instantaneous +instigative +instinct +instinctive +instinctual +institutional +institutionalized +institutionary +institutive +instructed +instructible +instructional +instructive +instrumental +instrumentalist +insubordinate +insubstantial +insufferable +insufficient +insular +insultable +insulted +insulting +insuperable +insupportable +insuppressible +insurable +insured +insurgent +insurmountable +insurrection +insurrectional +insurrectionary +insusceptible +intact +intangible +integrable +integral +integrant +integrate +integrated +integrative +integumentary +intellective +intellectual +intellectualism +intelligent +intelligential +intelligible +intemerate +intemperate +intended +intense +intensified +intensifying +intensional +intensive +intent +intentional +intentioned +inter +interactionist +interactive +interatomic +interbank +interbedded +interbred +intercalary +intercalative +intercellular +interceptive +intercessional +intercessorial +intercessory +interchangeable +intercity +interclavicular +intercollegiate +intercolonial +intercolumnar +intercommunal +intercommunicable +intercommunity +interconnected +intercontinental +interconvertible +intercostal +intercrossed +intercrural +intercurrent +interdenominational +interdental +interdepartmental +interdependent +interdictory +interdigital +interdisciplinary +interested +interesting +interfacial +interfaith +interfascicular +interfemoral +interferential +interfering +interferometric +interfertile +interfluent +interfrontal +intergalactic +interglacial +intergovernmental +interim +interior +interior-sprung +interjacent +interjaculatory +interjectional +interjectural +interlaced +interlacing +interlaminar +interlinear +interlinking +interlobular +interlocking +interlocutory +interludial +interlunar +intermaxillary +intermediary +intermediate +intermediatory +intermetallic +interminable +intermingled +intermissive +intermittent +intermolecular +intermontane +intermundane +intern +internal +international +internationalist +internationalistic +internecine +interneural +internodal +internuncial +interoceanic +interoceptive +interocular +interorbital +interosseous +interparietal +interpellant +interpenetrable +interpenetrant +interpenetrative +interpersonal +interpetiolar +interplanetary +interpleural +interpolable +interpolar +interpolative +interpretable +interpretative +interpreted +interpretive +interprovincial +interproximal +interracial +interradial +interramal +interred +interrelated +interrogable +interrogative +interrogatory +interrupted +interruptive +interscapular +interscholastic +intersecting +intersectional +interseptal +intersexual +intersidereal +interspatial +interspecific +interspinal +interspinous +interstadial +interstate +interstellar +interstitial +intersubjective +intertarsal +intertentacular +interterritorial +intertidal +intertissued +intertribal +intertropical +intertwined +interunion +interurban +intervenient +intervening +interventionist +intervocalic +interwoven +interwrought +interzonal +intestate +intestinal +intimate +intime +intimidated +intimidating +intimidatory +intimist +intimiste +intoed +intolerable +intolerant +intoned +intown +intoxicant +intoxicated +intoxicating +intracardiac +intracellular +intracranial +intractable +intradermal +intramolecular +intramundane +intramural +intramuscular +intranational +intransigent +intransitive +intrastate +intravascular +intravenous +intrepid +intricate +intriguing +intrinsic +intrinsical +introducible +introductory +introjected +intromissive +intromittent +introrse +introspectionist +introspective +introversive +introvert +introverted +introvertive +intruding +intrusive +intuitional +intuitionist +intuitive +intumescent +intussusceptive +inundant +inundated +inurbane +inured +invading +invaginate +invalid +invalidated +invalidating +invaluable +invariable +invariant +invasive +invected +invective +inventable +invented +inventible +inventive +inventorial +inverse +inversive +invertebrate +inverted +invested +investigable +investigative +investigatory +investitive +inveterate +inviable +invidious +invigorated +invigorating +invincible +inviolable +inviolate +invisible +invitation +invitatory +invited +inviting +invocatory +involucral +involucrate +involuntary +involute +involutional +involved +invulnerable +inward +inwrought +iodic +iodized +iodometric +iodous +ionic +ionized +ionospheric +ipsilateral +iracund +irascible +irate +ireful +irenic +iridaceous +iridescent +iridic +iritic +irksome +iron +iron-gray +iron-grey +iron-hearted +iron-sick +ironclad +ironed +ironfisted +ironic +ironical +irony +irradiant +irradiative +irrational +irrationalist +irrationalistic +irrebuttable +irreclaimable +irreconcilable +irrecoverable +irrecusable +irredeemable +irredentist +irreducible +irreformable +irrefragable +irrefrangible +irrefutable +irregular +irrelative +irrelevant +irrelievable +irreligious +irremeable +irremediable +irremissible +irremovable +irreparable +irrepealable +irreplaceable +irrepleviable +irreplevisable +irrepressible +irreproachable +irreproducible +irresistible +irresoluble +irresolute +irresolvable +irrespective +irrespirable +irresponsible +irresponsive +irretentive +irretrievable +irreverent +irreversible +irrevocable +irrigable +irrigational +irrigative +irriguous +irritable +irritant +irritated +irritating +irritative +irruptive +isagogic +ischaemic +ischemic +ischiadic +isentropic +ish +isobaric +isobathic +isobilateral +isochasmic +isocheimal +isocheimenal +isocheimic +isochimal +isochoric +isochromatic +isochronal +isochronous +isoclinal +isocratic +isocyclic +isodiametric +isodimorphic +isodimorphous +isodynamic +isoelectric +isoelectronic +isogamous +isogamy +isogenous +isogeothermal +isogeothermic +isoglossal +isogonal +isogonic +isohyetal +isolable +isolate +isolated +isolating +isolationism +isolationist +isolative +isolecithal +isologous +isomagnetic +isomeric +isomerous +isometric +isometrical +isomorphic +isomorphous +isonomic +isonomous +isoperimetrical +isopod +isopodan +isopodous +isorhythmic +isosceles +isoseismal +isoseismic +isostatic +isostemonous +isosteric +isotactic +isotheral +isothermal +isotonic +isotopic +isotropic +isotropous +issuable +issuant +issueless +isthmian +italic +itchier +itchiest +itching +itchy +iterant +iterative +ithyphallic +itinerant +itinerary +itty-bitty +ivied +ivory-towered +jabbering +jack +jacketed +jaculatory +jade +jaded +jadish +jagged +jaggier +jaggiest +jaggy +jailed +jake +jalapic +jalousied +jam-packed +jammed +jammy +jangling +jangly +janiform +janitorial +jannock +japan +jarring +jasp +jaspery +jaundiced +jauntier +jauntiest +jaunty +jawbreaking +jazzier +jazziest +jazzy +jealous +jeering +jejune +jelled +jellied +jeopardous +jerkier +jerkiest +jerking +jerkwater +jerky +jerry-built +jessant +jestful +jesting +jet +jet-black +jet-propelled +jet-propulsion +jetting +jetty +jeweled +jewelled +jiggered +jiggish +jiggly +jilted +jim-crow +jim-dandy +jimp +jingling +jingly +jingoish +jingoism +jingoist +jingoistic +jinxed +jittery +jobless +jocose +jocular +jocund +joined +joint +jointed +jointless +jointured +joking +jollier +jolliest +jolly +jolted +joltier +joltiest +jolting +jolty +jouncing +journalistic +jovial +jowled +jowlier +jowliest +jowly +joyful +joyless +joyous +jubate +jubilant +judge-made +judgemental +judgmental +judicable +judicative +judicatory +judicial +judiciary +judicious +jugal +jugate +juglandaceous +jugular +juiceless +juicier +juiciest +juicy +julienne +jumbled +jumbo +jumpable +jumpier +jumpiest +jumping +jumpy +juncaceous +jungly +junior +junked +jural +jurant +juratory +juridic +juridical +jurisdictional +jurisdictive +jurisprudent +jurisprudential +juristic +jury +jury-rigged +jussive +just +justiciable +justiciary +justifiable +justificative +justificatory +justified +jutting +juvenal +juvenescent +juvenile +juxtaposed +juxtapositional +kacha +kaleidoscopic +kaput +karmic +karstic +karyotypic +kashmiri +katabatic +katabolic +kayoed +keeled +keen +keeperless +keloidal +kempt +kenotic +kenspeckle +kept +keramic +keratinous +keratogenous +keratoid +keratose +kerchiefed +kernelly +kerygmatic +key +keyed +keyless +khaki +khedival +khedivial +kickable +kid-glove +kidnapped +kidney-shaped +killing +kilted +kin +kinaesthetic +kind +kind-hearted +kindled +kindless +kindlier +kindliest +kindly +kindred +kinematic +kinematical +kinesthetic +kinetic +king-size +king-sized +kingdomless +kingless +kinglier +kingliest +kinglike +kingly +kinkier +kinkiest +kinky +kinless +kirtled +kissable +kitsch +kittenish +kittle +kitty-cornered +klephtic +klutzy +knaggy +knarred +knavish +knee-deep +knee-high +knee-length +kneeling +knickered +knifeless +knightless +knightly +knitted +knobbed +knobbier +knobbiest +knobbly +knobby +knock-down +knock-kneed +knockabout +knocked-down +knockout +knotless +knotted +knottier +knottiest +knotty +know-it-all +know-nothing +knowable +knowing +knowledgeable +known +knuckleheaded +knuckly +knurled +knurlier +knurliest +knurly +kookie +kookier +kookiest +kooky +kosher +kraal +kutcha +kymographic +kyphotic +la-di-da +labelled +labelloid +labial +labialized +labiate +labile +labiodental +labiovelar +labored +laboring +laborious +labour-saving +laboured +labouring +labrid +labroid +labyrinthian +labyrinthine +laccolithic +lace-up +laced +lacerable +lacerant +lacerate +lacerated +lacerative +lacertilian +lachrymal +lachrymatory +lachrymose +lacier +laciest +laciniate +lackadaisical +lacking +lackluster +lacklustre +laconic +laconical +lacrimal +lacrimatory +lactating +lacteal +lacteous +lactescent +lactic +lactiferous +lactogenic +lacunal +lacunar +lacunose +lacustrine +lacy +laddery +laddish +laden +lady-killer +ladyish +ladylike +laevorotatory +lageniform +laggard +laggardly +lagomorphic +lagomorphous +lagoonal +lah-di-dah +laic +laid +laid-back +laigh +lairy +laissez-faire +laith +lakier +lakiest +laky +lambdoid +lambent +lamblike +lame +lamellar +lamellate +lamellibranch +lamellicorn +lamelliform +lamellirostral +lamellose +lamentable +lamented +lamenting +lamer +lamest +laminable +laminar +laminate +laming +laminose +lamplit +lamprophyric +lanate +lanceolate +lanceted +lanciform +lancinate +land +land-poor +landed +landholding +landless +landowner +landscaped +landward +lane +lang +langued +languid +languishing +languorous +laniary +laniferous +lank +lanky +lanose +lantern-jawed +lanuginose +lap-jointed +lapelled +lapidarian +lapidary +lapidific +lappeted +lapsable +lapsed +lapstrake +larboard +larcenous +lardaceous +lardier +lardiest +lardy +large +large-handed +large-hearted +large-minded +large-scale +larger +largest +larghetto +largish +largo +larine +larkish +larky +larval +larvicidal +larviparous +laryngeal +laryngitic +laryngological +laryngoscopic +lascivious +lashed +lashing +last +last-minute +lasting +latched +late +lated +lateen +latent +later +lateral +laterigrade +lateritic +lateritious +latest +lathery +lathier +lathiest +lathlike +lathy +laticiferous +latino +latish +latitudinal +latitudinarian +latitudinous +latter +latter-day +lattermost +latticed +laudable +laudatory +laughable +laughing +lauraceous +laureate +laurelled +lavender +lavish +law-abiding +lawful +lawgiver +lawless +lawny +lawyerly +lax +laxative +lay +layered +lazier +laziest +lazy +leachier +leachiest +leachy +lead-free +leaded +leaden +leaderless +leadier +leadiest +leading +leadless +leady +leafed +leafier +leafiest +leafless +leafy +leaking +leaky +leal +lean +lean-faced +leaning +leaping +learnable +learned +leary +leasable +leased +least +leathered +leathern +leathery +leaved +leavened +lecherous +led +ledgier +ledgiest +ledgy +lee +leerier +leeriest +leering +leery +leeward +left +left-hand +left-handed +left-wing +leftish +leftist +leftover +leftward +legal +legalism +legalistic +legatine +legato +legendary +legged +leggier +leggiest +leggy +legible +legion +legionary +legislative +legislatorial +legit +legitimate +legitimist +legless +leguminous +leisurable +leisure +leisured +leisurely +lemony +lemuroid +lengthened +lengthening +lengthier +lengthiest +lengthways +lengthwise +lengthy +lenient +lenis +lenitive +lentando +lenten +lentic +lenticellate +lenticular +lentiform +lentiginous +lentissimo +lento +lentoid +leonine +lepidopterous +lepidote +leporine +leprose +leprous +leptodactylous +leptophyllous +leptorrhine +leptosomatic +leptosomic +leptosporangiate +lesbian +less +lessened +lessening +lesser +let-out +lethal +lethargic +lethiferous +letter-perfect +lettered +letterless +leucitic +leucocratic +leucocytic +leucoderma +leucopoiesis +leukemic +level +level-headed +leviable +levigate +leviratical +levitical +levorotatory +lewd +lexical +lexicographic +lexicographical +liable +lianoid +libellous +libelous +liberal +liberalism +liberalist +liberalistic +liberated +liberating +liberatory +libertarian +liberticidal +libertine +libidinal +libidinous +librational +libratory +licenced +licensed +licentious +lichenoid +lichenous +licht +licit +licked +lickerish +lidded +lidless +lief +liege +lienal +lienteric +life-and-death +life-giving +life-size +life-sized +lifeful +lifeless +lifelike +lifelong +liftable +lifted +ligamentous +light +light-armed +light-fingered +light-footed +light-handed +light-headed +light-hearted +light-minded +light-sensitive +lighted +lighter-than-air +lightfast +lightful +lightish +lightless +lightsome +lightweight +ligneous +lignified +ligniform +lignite +lignitic +lignivorous +ligular +ligulate +liguloid +likable +like +like-minded +likeable +liked +likelier +likeliest +likely +lilac +liliaceous +lilied +lilliputian +lilting +lily-livered +lily-white +limacine +limbate +limbed +limber +limbic +limbless +lime +limey +limicolous +limier +limiest +liminal +limitable +limitary +limitative +limited +limiting +limitless +limitrophe +limnetic +limnological +limonitic +limp +limpid +limy +lineal +linear +lineate +lined +lineolate +liney +lingering +lingual +linguiform +linguistic +linguistical +lingulate +linked +lintier +lintiest +linty +liny +lion-hearted +lionly +lipless +lipogrammatic +lipoid +lipomatous +lipped +lippy +liquefacient +liquefiable +liquefied +liquescent +liquid +liquified +liquorish +lissom +lissome +lissotrichous +listed +listening +listless +lit +lite +literal +literalistic +literary +literate +lithe +lither +lithesome +lithest +lithic +litho +lithographic +lithographical +lithoid +lithologic +lithological +lithophytic +lithotomic +lithotomical +litigable +litigant +litigious +litten +littered +littery +little +littler +littlest +littoral +liturgical +livable +live +liveable +lived +livelier +liveliest +livelong +lively +liveried +liverish +livery +livid +living +load-bearing +loaded +loading +loaferish +loamy +loanable +loath +loathful +loathly +loathsome +lobar +lobate +lobed +lobose +lobular +lobulate +local +localized +locatable +located +locative +lochial +lockable +locked +loco +locomobile +locomotive +locomotor +locular +loculate +loculicidal +lodged +loftier +loftiest +lofty +log +logaoedic +logarithmic +loggerheaded +logical +logistic +logistical +logographic +logopedic +logy +lolling +lomentaceous +lone +lonelier +loneliest +lonely +lonesome +long +long-ago +long-dated +long-distance +long-drawn +long-drawn-out +long-faced +long-haired +long-headed +long-lasting +long-legged +long-lived +long-playing +long-range +long-sighted +long-standing +long-suffering +long-term +long-tongued +long-waisted +long-winded +longanimous +longer +longest +longevous +longhand +longicorn +longing +longish +longitudinal +longshore +longsome +longwall +longwise +looking +loonier +loonies +looniest +loony +looped +loopy +loose +loose-jointed +loose-leaf +loose-limbed +loosened +looser +loosest +looted +lop-eared +lophobranch +lophobranchiate +lophodont +lopped +lopsided +loquacious +loral +lordless +lordlier +lordliest +lordly +lordotic +loricate +lorn +losable +losel +losing +lossy +lost +loth +lotic +louche +loud +loud-mouthed +loudish +lounging +louring +loury +lousier +lousiest +lousy +loutish +louvered +louvred +lovable +loveable +loved +loveless +lovelier +loveliest +lovelorn +lovely +loverless +loverly +lovesick +lovesome +lovey-dovey +loving +low +low-cal +low-cut +low-down +low-frequency +low-key +low-keyed +low-lying +low-minded +low-necked +low-pitched +low-pressure +low-rise +low-spirited +low-tension +lower +lower-case +lowered +lowering +lowermost +lowery +lowest +lowland +lowlier +lowliest +lowly +lown +lowse +loxodromic +loyal +lozenged +lozengy +lubberly +lubric +lubricant +lubricated +lubricative +lubricious +lubricous +lucent +lucid +luciferous +luckier +luckiest +luckless +lucky +lucrative +luculent +ludicrous +luetic +lugubrious +lukewarm +lulling +lumbar +lumbering +lumbricoid +luminary +luminescent +luminiferous +luminous +lumpen +lumpier +lumpiest +lumpish +lumpy +lunar +lunate +lunatic +lunisolar +lunitidal +lunular +lunulate +lupine +lurching +lurdan +lurid +lurking +luscious +lush +lushy +lusterless +lustful +lustier +lustiest +lustral +lustred +lustreless +lustrous +lusty +luteal +luteous +luxe +luxuriant +luxurious +luxury +lycanthropic +lying +lying-in +lymphangial +lymphatic +lymphoid +lyncean +lynx-eyed +lyophilic +lyophilised +lyophilized +lyophobic +lyrate +lyric +lyrical +lyriform +lythraceous +macabre +macadam +macadamized +macaronic +machinable +machine-made +macho +macled +macro +macrobiotic +macrocephalic +macrocephalous +macrocosmic +macromolecular +macropterous +macroscopic +macrurous +macular +maculate +mad +madcap +maddened +maddening +maddest +madding +made +made-to-order +made-up +madrigalian +maenadic +maestoso +magenta +maggoty +magic +magical +magisterial +magistral +magmatic +magnanimous +magnesian +magnetic +magnetized +magnetomotive +magnific +magnificent +magnified +magniloquent +magnoliaceous +maiden +maidenish +maidenlike +maidenly +maieutic +maigre +mail-clad +mailable +mailed +maimed +main +mainstream +mainstreamed +maintainable +maintained +mair +majestic +major +majuscular +majuscule +makable +make-believe +make-or-break +makeless +makeshift +malacological +malacophilous +malacopterygian +malacostracan +maladapted +maladaptive +maladjusted +maladroit +malapert +malapropos +malar +malarial +malarian +malarious +malcontent +male +maledict +maledictive +maledictory +malefic +maleficent +malevolent +malfeasance +malformed +malfunctioning +malicious +malign +malignant +maligned +malleable +malnourished +malodorous +maltreated +malty +malvaceous +mammalian +mammalogical +mammary +mammiferous +mammonistic +mammoth +man +man-eating +man-made +man-sized +man-to-man +manageable +managerial +managing +mandatory +mandible +mandibular +mandibulate +manducable +manducatory +maned +maneless +maneuverable +manful +manganic +manganous +mangey +mangier +mangiest +mangled +mangy +maniac +maniacal +manic +manic-depressive +manifest +manifestative +manifold +maniform +manipulable +manipular +manipulatable +manipulative +manky +manlier +manliest +manlike +manly +manned +mannered +manneristic +mannerless +mannerly +mannish +manoeuvrable +manometric +manometrical +manorial +mansard +mantic +mantled +manual +manubrial +manufactural +manufactured +many +many-sided +marauding +marble +marbled +marcescent +marching +mardy +margaric +marginal +marginate +marine +marish +marital +maritime +marked +marketable +marled +marly +marmalade +marmoreal +maroon +marooned +marred +marriageable +married +marrowish +marshier +marshiest +marshy +marsipobranch +marsupial +martensitic +martial +martyrological +marvellous +marvelous +masculine +masked +masking +masochistic +masonic +mass +mass-produced +massed +massier +massiest +massive +massy +masted +master +mastered +masterful +masterless +masterly +masticable +masticatory +mastigophoran +mastless +mastoid +mastoidal +masturbatory +mat +matchable +matched +matching +matchless +matchmaker +matchmaking +mated +mateless +material +materialistic +maternal +matey +mathematical +matin +matriarchal +matrilineal +matrilinear +matrilocal +matrimonial +matroclinous +matronal +matronly +matronymic +matt +matte +matted +matterful +matterless +mattery +maturational +maturative +mature +matured +matutinal +maudlin +maungy +mausolean +mauve +maverick +mawkish +maxi +maxillary +maxillofacial +maximal +maximizing +maximum +mayoral +mazed +mazier +maziest +mazy +meager +meagerly +meagre +mealier +mealiest +mealy +mealy-mouthed +mean +meandering +meandrous +meaning +meaningful +meaningless +measled +measlier +measliest +measly +measurable +measured +measureless +meatal +meatier +meatiest +meatless +meaty +mechanic +mechanical +mechanistic +mechanized +medal +medallic +meddlesome +meddling +mediaeval +medial +median +mediastinal +mediate +mediated +mediative +mediatorial +medicable +medical +medicamental +medicative +medicinable +medicinal +medieval +mediocre +meditative +mediterranean +medium +medium-dated +medium-sized +medley +medullary +medullated +medusoid +meek +meet +megalithic +megalomaniacal +megalopolitan +megaphonic +megascopic +meiotic +melancholic +melancholy +melanic +melanistic +melanous +meliaceous +melic +meliorative +meliorist +melioristic +melismatic +melliferous +mellifluent +mellifluous +mellow +mellowed +mellowing +melodic +melodious +melodramatic +melted +melting +membranous +memorable +memorial +memoriter +menacing +mendacious +mendicant +menial +meningeal +meningococcal +meningococcic +meniscoid +menispermaceous +menopausal +mensal +menseful +menseless +menstrual +menstruating +mensurable +mensural +mental +mentholated +mentionable +mephitic +mercantile +mercantilism +mercenary +merchantable +merchantlike +merciful +merciless +mercurial +mercuric +merdivorous +mere +merest +meretricious +merged +merging +meridian +meridional +merino +meristematic +meristic +merited +meriting +meritorious +meroblastic +merrier +merriest +merry +mesarch +mesencephalic +mesenteric +meshed +meshuga +mesial +mesic +mesmeric +mesmerised +mesmerized +mesmerizing +mesne +mesoblastic +mesocephalic +mesomorphic +mesonic +mesophytic +mesothelial +mesothoracic +messier +messiest +messy +metabolic +metacarpal +metacentric +metagalactic +metagnathous +metagrabolized +metagrobolized +metal +metaleptic +metaleptical +metalinguistic +metalled +metallic +metalliferous +metalline +metallographic +metalloid +metallurgic +metallurgical +metamere +metameric +metamorphic +metaphoric +metaphorical +metaphrastic +metaphysic +metaphysical +metapsychological +metastable +metastatic +metatarsal +metathetic +metathetical +metathoracic +metazoan +metazoic +metempirical +meteoric +meteoritic +meteoritical +meteorologic +meteorological +methodical +methodist +methodological +methylated +methylic +meticulous +metonymic +metonymical +metopic +metric +metrical +metrological +metronymic +metropolitan +mettled +mettlesome +mezzo-rilievo +miasmal +miasmatic +miasmic +micellar +mickle +micro +microanalytical +microbial +microbian +microbic +microbiological +microcephalic +microcephalous +micrococcal +microcosmic +microcosmical +microcrystalline +microelectronic +micrographic +micrologic +micrological +micrometrical +microminiature +microphotographic +microphytic +microporous +microscopic +microscopical +microseismic +microseismical +microsomal +microtonal +mid +mid-Victorian +middle +middle-aged +middle-distance +middle-of-the-road +middlebrow +middlemost +middleweight +middling +midget +midi +midland +midmost +midnightly +midship +midships +midway +miffed +miffier +miffiest +miffy +mightier +mightiest +mighty +mignon +mignonette +migrainous +migrant +migratory +milch +mild +mild-mannered +mildewy +miliary +militant +militaristic +militarized +military +milk +milk-and-water +milk-livered +milk-white +milkier +milkiest +milkless +milklike +milky +milled +millenarian +millenary +millennial +millesimal +milliary +milling +million +millionth +millrun +mim +mimetic +mimic +mimical +mimosaceous +minacious +minatory +mincing +mind-altering +mind-bending +mind-blowing +mind-boggling +mind-expanding +minded +mindful +mindless +mined +mineral +mineralized +mineralogical +mingling +mingy +mini +miniature +minikin +minim +minimal +minimized +minimum +minimus +minion +miniscule +ministerial +ministering +ministrant +ministrative +minor +mint +minus +minuscular +minuscule +minute +minutely +miotic +miraculous +mired +mirier +miriest +mirkier +mirkiest +mirky +mirrored +mirthful +mirthless +miry +mis +misanthropic +misanthropical +misapplied +misapprehensive +misappropriated +misbegot +misbegotten +miscellaneous +mischief-making +mischievous +miscible +miscreant +miscreate +miscreated +miscreative +miserable +miserly +misfeatured +misformed +misguided +mislaid +misleading +mismatched +mismated +misogynistic +misogynous +misplaced +misproud +misrelated +misrepresented +missed +misshapen +missing +missive +mistakable +mistaken +mistier +mistiest +mistreated +mistrustful +misty +mistyped +misunderstood +misused +mitered +mitigable +mitigated +mitigative +mitigatory +mitochondrial +mitotic +mitrailleur +mitral +mixable +mixed +mixed-up +mixolydian +mizzen +mnemic +mnemonic +mnemotechnic +moanful +moaning +moated +mob +mobbish +mobile +mobocratic +mock +mock-heroic +mocking +mod +modal +model +modeled +moderate +moderated +moderating +moderato +modern +modernism +modernist +modernistic +modernized +modest +modifiable +modified +modiolar +modish +modular +modulated +moire +moist +molal +molar +molded +moldered +moldering +moldy +molecular +molested +moline +molluscoid +molluscous +molten +molybdic +molybdous +momentaneous +momentary +momentous +monachal +monachist +monacid +monadelphous +monandrous +monarch +monarchal +monarchial +monarchic +monarchical +monarchist +monarchistic +monasterial +monastic +monastical +monatomic +monaural +monaxial +mondial +monecious +monetary +money-grubbing +moneyed +moneyless +monger +mongol +mongoloid +mongrel +monied +moniliform +monism +monistic +monistical +monitorial +monitory +monkeyish +monkish +mono +monoacid +monobasic +monocarpellary +monocarpic +monocarpous +monochasial +monochromatic +monochrome +monochromic +monocled +monoclinal +monoclinic +monoclinous +monoclonal +monocoque +monocotyledonous +monocular +monocultural +monocyclic +monodic +monodical +monodramatic +monoecious +monogamic +monogamous +monogenetic +monogenic +monogenistic +monogenous +monogrammatic +monographic +monographical +monogynous +monohydric +monolatrous +monolingual +monolithic +monologic +monological +monomaniacal +monomeric +monometallic +monomial +monomolecular +monomorphic +mononuclear +monopetalous +monophagous +monophonic +monophthongal +monophyletic +monopodial +monopolistic +monopteral +monosepalous +monostichous +monostrophic +monosyllabic +monosymmetric +monotheism +monotheistic +monotheistical +monotone +monotonic +monotonous +monotypic +monovalent +monozygotic +monsoonal +monstrous +montane +monthly +monticulate +monticulous +monumental +mony +monzonitic +moodier +moodiest +moody +moon-eyed +moon-faced +mooned +moonish +moonless +moonlit +moonshiny +moonstruck +moony +moorish +moory +moot +mop-headed +mopey +mopier +mopiest +mopy +moraceous +morainal +morainic +moral +moralistic +morbid +morbific +mordacious +mordant +more +moreish +morganatic +moribund +morish +mornay +morning +moronic +morose +morphemic +morphogenetic +morphologic +morphological +morphophonemic +morphotic +mortal +mortgaged +mortiferous +mortified +mortifying +mortuary +mosaic +moss-grown +mossier +mossiest +mossy +most +motey +moth-eaten +mother-naked +motherless +motherlike +motherly +mothier +mothiest +mothy +motile +motional +motionless +motivated +motivating +motivational +motive +motiveless +motley +motor +motor-driven +motorable +motored +motorized +mottled +mouldered +mouldering +mouldier +mouldiest +mouldy +mountain +mountainous +mounted +mournful +mourning +mousey +mousier +mousiest +mousy +mouth-to-mouth +mouthier +mouthiest +mouthless +mouthwatering +mouthy +movable +moveable +moved +moveless +moving +mowburnt +mown +mozambican +much +mucic +mucid +muciferous +mucilaginous +muckier +muckiest +mucking +muckle +mucky +mucoid +mucopurulent +mucous +mucronate +muddied +muddier +muddiest +muddled +muddleheaded +muddy +muffled +muggier +muggiest +muggy +mulatto +muley +mulish +mulley +mullioned +multangular +multiarticulate +multicapitate +multicellular +multicentral +multicentric +multicoloured +multicostate +multicultural +multicuspidate +multidentate +multidenticulate +multidigitate +multidimensional +multidirectional +multidisciplinary +multifaced +multifaceted +multifactorial +multifarious +multifid +multiflorous +multifoliate +multiform +multijugate +multilateral +multilineal +multilinear +multilingual +multilobate +multilobed +multilobular +multinational +multinominal +multinuclear +multinucleate +multinucleolate +multiparous +multipartite +multiped +multiphase +multiple +multiple-choice +multiplex +multiplicate +multiplicative +multiplied +multipolar +multipurpose +multiracial +multiramified +multiscreen +multiseptate +multiseriate +multispiral +multistorey +multistory +multisulcate +multituberculate +multitudinous +multivalent +multivariate +multivocal +multivoltine +mum +mumbling +mumchance +mundane +municipal +munificent +mural +murdered +murderous +muriatic +muricate +murine +murk +murky +murmuring +murmurous +murrey +murrhine +musaceous +muscid +muscle-bound +muscly +muscular +museful +mushier +mushiest +mushy +musical +musicianly +musicological +musing +muskier +muskiest +musky +mussier +mussiest +mussy +must +mustached +mustachioed +musteline +mustier +mustiest +musty +mutable +mutagenic +mutant +mutational +mutative +mute +muted +muticous +mutilated +mutinous +muttering +muttony +mutual +mutualism +muzzy +myalgic +myasthenic +mycelial +mycologic +mycological +mydriatic +myeloid +mylohyoid +myocardial +myogenic +myographic +myoid +myological +myopic +myotic +myotonia +myriad +myriapod +myriopod +myrmecological +myrmecophagous +myrmecophilous +myrtaceous +mystagogic +mystagogical +mysterious +mystic +mystical +mystified +mystifying +mythic +mythical +mythologic +mythological +mythomania +mythomaniac +mythopoeic +myxomycete +mzee +n-type +nacred +nacreous +nae +naevoid +nagging +naggy +naiant +naif +nailless +naissant +naive +naked +namby-pamby +namby-pambyish +named +nameless +naming +naphthalic +napiform +napless +napped +nappier +nappiest +napping +nappy +narcissistic +narcoleptic +narcotic +narcotized +narcotizing +narial +narratable +narrative +narrow +narrow-gauge +narrow-minded +narrowed +narrowing +nary +nasal +nascent +nasofrontal +nastier +nastiest +nasty +natal +natant +natatorial +natatory +national +nationalism +nationalist +nationalistic +nationwide +native +native-born +nativism +nativist +nativistic +nattier +nattiest +natty +natural +natural-born +naturalistic +naturalized +naturism +naturistic +naturopathic +naught +naughtier +naughtiest +naughty +nauplioid +nauseated +nauseating +nauseous +nautical +naval +navicular +navigable +navigational +ne'er-do-well +neap +neaped +near +near-hand +near-sighted +nearer +nearest +neat +nebular +nebule +nebulous +nebuly +necessarian +necessary +necessitarianism +necessitous +necked +necrologic +necrological +necromantic +necromantical +necrophiliac +necrophilic +necrophobic +necrotic +nectareous +nectariferous +nectarous +needed +needful +needier +neediest +needless +needy +nefarious +negative +negativism +neglected +neglectful +negligent +negligible +negotiable +negroid +neighbor +neighboring +neighborless +neighborly +neighbour +neighbouring +neighbourless +neighbourly +nematic +nematocystic +nemertean +neoclassic +neoclassical +neoclassicist +neologic +neological +neologistic +neologistical +neonatal +neophytic +neoplastic +neotenous +neoteric +nepenthean +nephological +nephric +nephritic +nephrotic +nepotic +nepotistic +neritic +nerval +nervate +nerve-racking +nerve-wracking +nerveless +nervine +nervous +nervy +nescient +nesh +nested +nestled +nestlike +net +nether +nethermost +netherward +nett +netted +nettled +nettlelike +nettlesome +nettly +neural +neuralgic +neurasthenic +neuritic +neuroanatomical +neurobiological +neurogenic +neurological +neuromuscular +neuron +neuronal +neuronic +neuropathic +neurophysiological +neuropsychiatric +neuropterous +neurosurgical +neurotic +neurotropic +neurovascular +neuter +neutered +neutral +neutralism +neutralized +neutrophil +never-ending +never-never +never-say-die +new +new-fashioned +new-made +new-model +new-mown +newborn +newest +newfangled +newish +newsier +newsiest +newsless +newsworthy +newsy +next +next-door +nibbed +nice +nicer +nicest +nickel +nickel-and-dime +nickelic +nickeliferous +nickelous +nicotined +nicotinic +niddering +niddle-noddle +nidicolous +nidifugous +niffy +niftier +niftiest +nifty +niggard +niggardly +niggling +nigh +nighted +nightless +nightlong +nightly +nightmarish +nigrescent +nihilism +nihilist +nihilistic +nimble +nimble-fingered +nimbused +niminy-piminy +nine +ninefold +ninepenny +nineteen +nineteenth +ninetieth +ninety +ninth +niobic +niobous +nipping +nippy +nisi +nitid +nitpicking +nitric +nitrogenous +nitrous +nittier +nittiest +nitty +nitwitted +nival +niveous +no-account +no-fault +no-nonsense +nobbier +nobbiest +nobby +nobiliary +noble +noble-minded +nobler +noblest +nocent +nociceptive +noctilucent +noctuid +nocturnal +nocuous +nodal +nodding +nodical +nodose +nodous +nodular +nodulated +noduled +nodulose +noetic +noiseless +noisemaker +noisette +noisier +noisiest +noisome +noisy +nomadic +nomenclatorial +nomenclatural +nominal +nominalistic +nominate +nominated +nominative +nomistic +nomographic +nomographical +nomological +nomothetic +non +non-Christian +non-Euclidean +non-U +non-iron +non-profit-making +nonabrasive +nonabsorbent +nonacademic +nonaddictive +nonadministrative +nonaged +nonagenarian +nonagon +nonary +nonautomatic +nonbelligerent +nonbiological +nonbreakable +nonchalant +nonchromosomal +nonclassified +nonclinical +noncognizable +noncommercial +nonconclusive +nonconcurrent +nonconforming +nonconformist +noncontagious +noncontroversial +nondescript +nondestructive +nonexecutive +nonflowering +nonfunctional +nonharmonic +nonillionth +nonionic +nonjudgmental +nonlethal +nonnegotiable +nonoperational +nonpareil +nonparous +nonpathogenic +nonpersistent +nonplused +nonplussed +nonpoisonous +nonpolar +nonprofit +nonracial +nonscientific +nonsense +nonsensical +nonstandard +nonstick +nontechnical +nontoxic +nonuple +nonverbal +nonvintage +nonvolatile +normal +norman +normative +north +northerly +northern +northernmost +northmost +northward +nosed +noseless +nosey +nosier +nosiest +nosographic +nosological +nostalgic +nostologic +nosy +notable +notal +notarial +notational +notched +notchy +noted +noteless +noteworthy +noticeable +noticed +notifiable +notional +notochordal +notorious +notoungulate +notour +noumenal +noumenon +nourishable +nourished +nourishing +novel +novelettish +novelistic +novercal +novice +nowed +noxious +nth +nubblier +nubbliest +nubbly +nubby +nubile +nubilous +nuclear +nucleate +nucleolar +nucleolated +nucleophilic +nucleoplasm +nude +nudicaul +nudist +nugatory +nuggety +null +nullifidian +nullified +nulliparous +numb +numberless +numbing +numerable +numeral +numerary +numerate +numeric +numerical +numerous +numinous +nummary +nummular +nummulitic +nuncupative +nuptial +nursed +nurturable +nurtural +nutant +nutational +nutlike +nutmegged +nutrient +nutrimental +nutritional +nutritious +nutritive +nuts +nutty +nyctaginaceous +nyctitropic +nymphaeaceous +nymphal +nymphalid +nymphean +nymphomania +nymphomaniac +nymphomaniacal +nystagmic +oafish +oak +oaken +oared +oarless +oaten +obbligato +obconic +obconical +obcordate +obdurate +obedient +obeisant +obeliscal +obese +objectionable +objective +objectivist +objectivistic +objurgative +objurgatory +oblanceolate +oblate +oblatory +obligate +obligated +obligational +obligato +obligatory +obliged +obliging +oblique +obliterate +obliterated +obliterating +obliterative +oblivious +oblong +obnoxious +obovate +obovoid +obreptitious +obscene +obscurant +obscurantist +obscure +obsequent +obsequious +observable +observant +observational +observed +observing +obsessed +obsessional +obsessive +obsessive-compulsive +obsolescent +obsolete +obstetric +obstetrical +obstinate +obstreperous +obstructed +obstructive +obstruent +obtainable +obtect +obtrusive +obtundent +obtuse +obtuse-angled +obtuse-angular +obumbrate +obverse +obviating +obvious +obvolute +occasional +occidental +occipital +occluded +occludent +occlusal +occlusive +occult +occultism +occultist +occupational +occupative +occupied +occurrent +ocean-going +oceanic +oceanographic +oceanographical +ocellar +ocellated +oceloid +ocher +ocherous +ochery +ochlocratic +ochlocratical +ochre +ochreous +ocker +ocreate +octachordal +octadic +octagonal +octahedral +octal +octamerous +octangular +octantal +octastyle +octaval +octave +octennial +octennially +octillionth +octogenarian +octonary +octopod +octosyllabic +octuple +octupled +octuplet +octupling +ocular +oculomotor +odd +odd-job +oddball +odds-on +odious +odontalgic +odontoid +odontological +odontophorous +odoriferous +odorless +odorous +odourless +oecumenic +oecumenical +oesophageal +oestrous +off +off-Broadway +off-centre +off-key +off-line +off-off-Broadway +off-putting +off-road +off-site +off-street +off-the-cuff +off-the-peg +off-the-shelf +off-white +offbeat +offenceless +offended +offending +offensive +offerable +offhand +offhanded +official +officinal +officious +offish +offscreen +offsetting +offshore +offside +often +ogreish +ohmic +oil-fired +oiled +oilier +oiliest +oily +okay +oke +okey-doke +old +old-established +old-fashioned +old-fogeyish +old-fogyish +old-maidish +old-rose +old-time +old-womanish +old-world +olde-worlde +olden +older +oldest +oldfangled +oldish +oleaceous +oleaginous +oleic +oleophilic +olfactive +olfactory +olid +oligarchic +oligarchical +oligochaete +oligopolistic +oligopsonistic +oligotrophic +olivaceous +olivary +olive +omental +ominous +omissible +omissive +omnibus +omnicompetent +omnidirectional +omnifarious +omnific +omnipotent +omnipresent +omniscient +omnivorous +omophagic +on-line +on-site +on-stream +on-the-spot +onagraceous +onanistic +once +oncogenic +oncoming +one +one-armed +one-dimensional +one-eyed +one-handed +one-horse +one-man +one-on-one +one-piece +one-sided +one-time +one-to-one +one-track +one-up +one-way +oneiric +oneirocritical +onerous +ongoing +oniony +only +only-begotten +onomastic +onomatopoeic +onomatopoetic +onshore +onside +onstage +ontogenetic +ontogenic +ontological +onward +onymous +oogamous +oogenetic +oolitic +oozier +ooziest +oozing +oozy +opalescent +opaline +opaque +ope +open +open-air +open-and-shut +open-chain +open-door +open-end +open-ended +open-eyed +open-faced +open-field +open-handed +open-hearted +open-hearth +open-letter +open-minded +open-mouthed +open-plan +open-shop +opencast +opened +opening +operable +operant +operatic +operating +operational +operative +operculate +operculated +operose +ophidian +ophiolatrous +ophiologic +ophiological +ophitic +ophthalmic +ophthalmological +ophthalmoscopic +ophthalmoscopical +opiate +opinionated +opinionative +opisthognathous +oppidan +opponent +opportune +opportunist +opportunistic +opposable +opposed +opposing +opposite +oppositional +oppositive +oppressed +oppressive +opprobrious +oppugnant +opsonic +optative +optic +optical +optimal +optimistic +optimum +optional +optometrical +opulent +opuscule +oracular +oral +orange +oratorical +orbicular +orbiculate +orbital +orchestral +orchestrated +orchidaceous +orchitic +ordainable +ordained +ordered +orderly +ordinaire +ordinal +ordinary +ordinate +ordurous +orectic +organic +organicism +organisable +organisational +organismal +organismic +organizable +organizational +organized +organoleptic +organometallic +orgasmic +orgastic +orgiastic +orgulous +orient +oriental +orientated +orientating +oriented +orienting +original +originative +orinasal +ornamental +ornamented +ornate +ornery +ornithic +ornithischian +ornithoid +ornithological +orobanchaceous +orogenetic +orogenic +orological +orotund +orphan +orphaned +ortho +orthochromatic +orthodontic +orthodontics +orthodox +orthogenetic +orthogenic +orthognathous +orthogonal +orthographic +orthopaedic +orthopedic +orthopedical +orthophosphoric +orthophyric +orthopterous +orthoptic +orthorhombic +orthoscopic +orthostichous +orthotone +orthotropic +orthotropous +oscillating +oscillatory +oscine +oscitant +osculant +oscular +osculatory +osiered +osmic +osmious +osmotic +osmous +osseous +ossicular +ossiferous +ossified +osteal +ostensible +ostensive +ostentatious +osteoarthritis +osteogenetic +osteoid +osteological +osteopathic +osteophytic +osteoplastic +ostracodan +ostracodous +other +othergates +otherguess +otherwise +otherworldly +otic +otiose +out +out-and-out +out-of-bounds +out-of-date +out-of-door +out-of-fashion +out-of-place +out-of-pocket +out-of-print +out-of-stock +out-of-the-way +out-of-town +out-of-work +outback +outboard +outbound +outbred +outcast +outcaste +outclassed +outdated +outdone +outdoor +outdoorsy +outer +outermost +outfitted +outflowing +outgoing +outland +outlandish +outlaw +outlawed +outlined +outlying +outmoded +outmost +outraged +outrageous +outremer +outright +outside +outsize +outsized +outspoken +outspread +outstanding +outstretched +outward +outward-bound +outworn +oval +ovarian +ovate +oven-ready +over +over-the-counter +overabundant +overactive +overall +overambitious +overarm +overawed +overbearing +overblown +overbold +overburdened +overburdensome +overbusy +overcareful +overcast +overcautious +overcome +overcorrect +overcredulous +overcritical +overcurious +overdelicate +overdone +overdressed +overdue +overeager +overearnest +overemotional +overenthusiastic +overexcitable +overexcited +overfar +overfed +overflowing +overfond +overforward +overfraught +overfree +overfull +overgenerous +overglaze +overgreat +overgreedy +overground +overgrown +overhand +overhanded +overhanging +overhappy +overhasty +overhead +overheated +overindulgent +overjoyed +overkind +overladen +overland +overlapping +overlarge +overloaded +overlong +overlooked +overlooking +overloud +overlying +overmerry +overmodest +overmuch +overneat +overnice +overnight +overoptimistic +overpowered +overpowering +overpriced +overproof +overprotective +overproud +overrank +overrash +overreaching +overriding +overripe +overrun +overscrupulous +oversea +overseas +oversensitive +oversewn +oversexed +overshot +oversimplified +oversize +oversized +overspreading +overstated +overstayed +overstrong +overstrung +overstuffed +oversubscribed +oversubtle +oversuspicious +overt +overtedious +overthrown +overturned +overviolent +overweary +overweening +overweight +overwhelmed +overwhelming +overwrought +overzealous +oviferous +oviform +ovine +oviparous +ovoid +ovoviviparous +ovular +owed +owing +owlish +owlishly +owllike +own +owned +owner-occupied +ownerless +ox-eyed +oxalic +oxblood +oxidised +oxidizable +oxidized +oxygenated +oxytocic +ozoniferous +p-type +paced +pachydermal +pachydermatous +pachydermic +pachydermous +pacific +pacifical +pacifist +pacifying +packaged +packed +pactional +padded +paddle-wheel +paederastic +paediatric +paedophilia +pagan +paginal +pagurian +paid +paid-up +pained +painful +painless +painstaking +paintable +painted +painterly +paired +palaeanthropic +palaeobotanic +palaeobotanical +palaeoecological +palaeolithic +palaeontological +palaeozoological +palaeozoology +palaestral +palaestric +palatable +palatal +palatalized +palatial +palatine +pale +paleaceous +paled +paleolithic +paler +palest +palimpsest +palindromic +palindromical +paling +palish +palladic +palladous +pallial +palliative +pallid +pally +palmaceous +palmar +palmary +palmate +palmatifid +palmier +palmiest +palmitic +palmy +palpable +palpate +palpebral +palpitant +palpitating +palsied +palsy-walsy +paltrier +paltriest +paltry +paludal +paly +palynological +pampean +pampered +pampering +pan +panchromatic +pancratic +pancreatic +pandanaceous +pandemic +pandemoniacal +pandurate +panduriform +paned +panegyric +panegyrical +paneled +pangenetic +panhellenic +panic-stricken +panic-struck +panicked +panicky +panicled +paniculate +panniered +panoplied +panoptic +panoptical +panoramic +panpsychistic +pansophic +pansophical +pantaletted +pantalooned +pantheist +pantheistic +pantheistical +panting +pantographic +pantographical +pantomimic +pantomimical +panzer +papal +papaveraceous +paper +paperback +paperbacked +paperbound +papery +papilionaceous +papillar +papillary +papillate +papillomatous +papillose +papist +papistic +papistical +pappose +pappy +papular +papulose +papyraceous +par +parabolic +parabolical +paraboloid +paraboloidal +paradigmatic +paradigmatical +paradisaic +paradisaical +paradisal +paradisiac +paradisiacal +paradisial +paradoxal +paradoxical +paraffinic +paraffinoid +paragenetic +paraglossate +paragogic +paragogical +paragraphic +parallactic +parallel +parallelism +paralytic +paralyzed +paramagnetic +paramedic +paramedical +parametric +paramilitary +paramorphic +paramount +paranoiac +paranoid +paranormal +parapeted +paraphrastic +paraplegic +parapodial +parapsychological +parasitic +parasitical +parasiticide +parasympathetic +parasynthetic +paratactic +paratactical +parathyroid +paratyphoid +paravail +parcel-gilt +parched +pardine +pardonable +pardonless +parecious +parenchymatous +parental +parented +parenteral +parenthetic +parenthetical +parentless +paretic +parheliacal +parietal +paripinnate +parisyllabic +parked +parklike +parky +parlando +parliamentarian +parliamentary +parlous +parochial +parodic +parodistic +paroicous +parol +paronomastic +paronymous +parotic +parotid +paroxysmal +paroxytone +parricidal +parsimonious +parsonic +parsonical +parsonish +part +part-time +parted +parthenocarpic +parthenogenetic +partial +partible +participant +participating +participatory +participial +particular +particularised +particularism +particularistic +particularized +particulate +parting +partisan +partite +partitioned +partitive +partizan +parturient +party +party-spirited +parvenu +parvenue +paschal +pass +passable +passant +passed +passerine +passible +passing +passional +passionate +passionless +passive +passless +past +pasteboard +pasted +pastel +pasteurized +pastier +pasties +pastiest +pastoral +pastural +pastureless +pasty +pasty-faced +pat +patchable +patched +patchier +patchiest +patchy +patellar +patellate +patelliform +patent +patentable +patented +paternal +paternalism +paternalistic +pathetic +pathic +pathless +pathogenetic +pathogenic +pathognomonic +pathologic +pathological +patient +patriarchal +patrician +patricidal +patrilineage +patrilineal +patrilinear +patrilocal +patrimonial +patriotic +patristic +patristical +patronal +patronising +patronized +patronizing +patronless +patronymic +patterned +patulous +paunchy +pausal +pauseful +pauseless +paved +pavid +pavonine +pawky +payable +paying +payoff +pea-green +peaceable +peaceful +peaceless +peacemaking +peach-blow +peachier +peachiest +peachy +peacock-blue +peacockish +peacocky +peak +peaked +peaky +peanut +pear-shaped +pearl +pearl-grey +pearlier +pearliest +pearlized +pearly +peart +peatier +peatiest +peaty +pebble-dashed +pebbly +peccable +peccant +peckish +pectic +pectinaceous +pectinate +pectoral +peculiar +pecuniary +pedagogic +pedagogical +pedagoguish +pedal +pedantic +pedantical +pedate +pedatifid +peddling +pederastic +pedestrian +pediatric +pedicellate +pedicular +pediculate +pediculous +pedigree +pedigreed +pedimental +pedimented +pedological +pedunculate +peekaboo +peeled +peelie-wally +peeling +peerless +peeved +peevish +peewee +peg-top +pegmatitic +pejorative +pelagic +pelitic +pell-mell +pellicular +pellucid +peloric +peltate +pelting +pelvic +pemphigous +penal +penalized +penannular +pencilled +pendant +pendent +pending +pendulous +penetrable +penetralian +penetrant +penetrating +penetrative +penial +penicillate +penile +peninsular +penitent +penitential +penitentiary +pennate +penned +pennied +penniless +pennoned +penny +penny-a-line +penny-pincher +penny-pinching +penny-plain +penny-wise +penological +pensile +pensionable +pensionary +pensive +pent +pent-up +pentadactyl +pentagonal +pentamerous +pentameter +pentangular +pentastyle +pentasyllabic +pentatomic +pentatonic +pentavalent +pentomic +penultimate +penurious +peopled +pepper-and-salt +peppercorny +peppery +peppier +peppiest +peppy +peptic +peptizing +perambulating +perambulatory +perceivable +perceived +percent +percental +perceptible +perceptional +perceptive +perceptual +perched +perchloric +percipient +percoid +percurrent +percussional +percussive +percutaneous +perdu +perdurable +peregrinate +peregrine +peremptory +perennial +perfect +perfected +perfectible +perfectionist +perfectionistic +perfective +perfervid +perfidious +perfoliate +perforable +perforate +perforated +perforative +performable +performative +performing +perfumed +perfumeless +perfumy +perfunctory +perfusive +pericardiac +pericardial +pericarpial +pericentral +pericentric +perichaetial +periclinal +pericranial +peridermal +peridial +peridotic +perigeal +perigean +periglacial +perigonial +perigynous +perilous +perimorphic +perimorphous +perinatal +perineal +perinephric +periodic +periodical +periodontal +periosteal +periostitic +periotic +peripatetic +peripheral +periphrastic +peripteral +periscopic +perishable +perished +perishing +perispomenon +perissodactyl +perissodactylous +peristaltic +peristomal +peristomatic +peristomial +peristylar +peritectic +perithecial +peritoneal +peritonitic +periwigged +perjured +perk +perked +perkier +perkiest +perky +perlitic +permanent +permanganic +permeable +permeated +permeating +permeative +permed +permissible +permissive +permitted +permutable +pernicious +pernickety +peroneal +perpendicular +perpetuable +perpetual +perplexed +perplexing +perse +persecuted +perseverant +persevering +persistent +persisting +persnickety +person-to-person +personable +personal +personalism +personalistic +personalized +personate +personative +persons +perspectival +perspectivist +perspicacious +perspicuous +perspirable +perspiratory +perspiring +persuadable +persuasible +persuasive +pert +perthitic +pertinacious +pertinent +perturbable +perturbational +perturbed +perturbing +pertussal +peruked +pervading +pervasive +perverse +perversive +perverted +pervertible +pervious +peskier +peskiest +pesky +pessimal +pessimistic +pessimum +pestered +pestering +pesticidal +pestiferous +pestilent +pestilential +pet +petaliferous +petaline +petalled +petaloid +petalous +petechial +petiolar +petiolate +petit +petite +petitionary +petitory +petrified +petrifying +petrochemical +petrogenetic +petrographic +petrographical +petroleous +petrolic +petrological +petrosal +petrous +petticoated +pettier +pettiest +pettifogging +pettish +petty +petulant +pewter +phagedaenic +phagedenic +phagocytic +phalangeal +phalansterian +phallic +phanerogamic +phanerogamous +phantasmagorial +phantasmagoric +phantasmagorical +phantasmal +phantom +pharaonic +pharisaic +pharisaical +pharmaceutic +pharmaceutical +pharmacognostic +pharmacological +pharmacopoeial +pharyngeal +phaseless +phasic +phasmid +phatic +phellogenetic +phenetic +phenolic +phenological +phenomenal +phenomenalism +phenomenalistic +phenomenize +phenotypic +phenotypical +philanthropic +philatelic +philharmonic +philhellene +philhellenic +philippine +philistine +philologic +philological +philoprogenitive +philosophic +philosophical +phlegmatic +phlegmatical +phlegmier +phlegmiest +phlegmy +phlogistic +phobic +phocine +phonal +phonatory +phonematic +phonemic +phonetic +phoney +phonic +phonier +phonies +phoniest +phonographic +phonolitic +phonological +phonotypic +phonotypical +phony +phosphorescent +phosphoric +phosphorous +photic +photoactive +photochemical +photochemistry +photoconductive +photoelastic +photoelectric +photogenic +photographic +photolithographic +photoluminescent +photolytic +photomechanical +photometric +photoperiodic +photophilous +photopic +photosensitive +photospheric +photostatic +photosynthetic +phototactic +phototropic +phototypic +photovoltaic +phrasal +phraseologic +phraseological +phreatic +phreatophytic +phrenetic +phrenic +phrenitic +phrenologic +phrenological +phthalic +phthisic +phthisical +phycological +phylacteric +phylacterical +phyletic +phylloid +phyllopod +phyllotactic +phyllotactical +phylogenetic +physic +physical +physicalism +physicochemical +physiocratic +physiognomic +physiologic +physiological +physiotherapeutic +phytogenic +phytogeographic +phytographic +phytological +phytophagic +phytophagous +phytotoxic +piacular +pianissimo +pianistic +piano +piazzian +picaresque +picayune +piceous +picked +pickier +pickiest +pickled +picky +picric +pictographic +pictorial +pictural +pictured +picturesque +piddling +pie-eyed +piebald +piecemeal +pied +pierceable +pierced +piercing +pieridine +pietistic +pietistical +piezoelectric +piffling +pigeon-breasted +pigeon-hearted +pigeon-toed +piggie +piggish +piggy +pigheaded +pileate +pileated +piled +pileous +pilgarlicky +piliferous +piliform +pillaged +pillar-box +pillared +pillowy +pilose +pilot +pilotless +pilous +pimpled +pimply +pinacoidal +pinchbeck +pinched +pinchpenny +pineal +piney +pinguid +pinier +piniest +pinioned +pink +pinkish +pinnate +pinnated +pinnatifid +pinnatipartite +pinnatiped +pinnatisect +pinned +pinniped +pinnulate +pinpoint +pint-sized +pinto +piny +pious +pipeless +pipelike +piperaceous +pipier +pipiest +piping +pipy +piquant +pique +piratic +piratical +piscatorial +piscatory +piscicultural +pisciculture +pisciform +piscine +piscivorous +pisiform +pisolitic +pissed +pistachio +pistillate +pitch-black +pitch-dark +pitched +pitchier +pitchiest +pitchy +piteous +pithecoid +pithy +pitiable +pitiful +pitiless +pitted +pituitary +pitying +pivotal +pixilated +pizzicato +placable +placating +placatory +placed +placeless +placental +placid +placoid +plagal +plagiarized +plagued +plaguey +plaguy +plaided +plain +plain-spoken +plaintive +planar +plane +planet-struck +planetary +planetoidal +plangent +planimetric +planimetrical +planktonic +planless +planned +plano-concave +plano-convex +plantable +plantar +planted +plantigrade +plantless +planular +plashier +plashiest +plashy +plasmodial +plastered +plastery +plastic +plastics +plated +platelike +platier +platiest +platinic +platiniferous +platinoid +platinous +platitudinous +platonic +platy +platycephalic +platyrrhine +platyrrhinian +plausible +plausive +play +playable +played +played-out +playful +playing +pleadable +pleading +pleasant +pleased +pleasing +pleasurable +pleasureful +pleasureless +pleated +plebby +plebeian +plectognathic +plectognathous +pledgeable +pledged +plein-air +pleiomerous +plenary +plenipotent +plenipotentiary +plenteous +plentiful +pleochroic +pleomorphic +pleonastic +plethoric +pleural +pleuritic +pleurodont +plexiform +pleximetric +pliable +pliant +plical +plicate +plodding +plosive +plotful +plotless +plotted +ploughed +plucked +pluckier +pluckiest +plucky +plug-ugly +plum +plumaged +plumate +plumb +plumbaginaceous +plumbaginous +plumbed +plumbeous +plumbic +plumbiferous +plumbless +plumbous +plumed +plumier +plumiest +plummier +plummiest +plummy +plumose +plump +plumping +plumular +plumulose +plumy +plundered +plundering +pluperfect +plural +pluralism +pluralistic +pluriliteral +plus +plush +plusher +plushest +plushy +pluteal +plutocratic +plutonic +pluvial +pluviometric +pluviometrical +pluvious +pneumatic +pneumatological +pneumogastric +pneumonic +po-faced +poaceous +poached +poachier +poachiest +poachy +pocked +pockier +pockiest +pockmarked +pocky +poco +pococurante +poculiform +podgier +podgiest +podgy +podsolic +poetic +poetical +poignant +poikilitic +poikilothermic +point-blank +point-device +point-of-sale +pointed +pointillism +pointing +pointless +poised +poison-pen +poisonous +poker-faced +pokey +pokier +pokies +pokiest +poky +polar +polemic +polemical +polemoniaceous +polish +polished +polite +politic +political +polled +pollened +pollinic +polliniferous +polluted +polo-neck +poltroon +polyacid +polyadelphous +polyandrous +polyatomic +polybasic +polycarpic +polycarpous +polychaete +polychromatic +polychrome +polychromic +polyconic +polycrystalline +polycyclic +polydactyl +polygalaceous +polygamous +polygenist +polyglot +polygonaceous +polygonal +polygraphic +polygynous +polyhedral +polyhistoric +polyhydric +polyhydroxy +polymeric +polymerous +polymorphic +polymorphous +polynomial +polyonymous +polypetalous +polyphase +polyphonic +polyphyletic +polyphyodont +polyploid +polypod +polypoid +polypous +polysepalous +polysyllabic +polysynthetic +polytechnic +polytheistic +polytheistical +polytonal +polytypic +polyunsaturated +polyvalent +polyzoan +polyzoarial +polyzoic +pomaceous +pomaded +pomiferous +pomological +pompous +ponceau +ponderable +pondering +ponderous +pongid +pontific +pontifical +poor +poor-spirited +poorest +poorly +pop +pop-up +popish +popliteal +poppied +pops +popular +populated +populist +populous +porcine +poriferous +porkier +porkiest +porky +pornographic +poromeric +porose +porous +porphyritic +porrect +port +portable +portative +portentous +porticoed +portionless +portlier +portliest +portly +portrayed +posh +positional +positioning +positive +positivism +positivist +positivistic +posological +possessed +possessive +possessory +possible +post +post-Tertiary +post-bellum +post-free +post-mortem +post-obit +postal +postconsonantal +posterior +postern +posthumous +postiche +posticous +postmenopausal +postmenstrual +postoral +postponed +postpositional +postpositive +posttraumatic +postulational +postural +postvocalic +pot-bound +pot-valiant +potable +potamic +potassic +potatory +potent +potential +potentiometric +potted +pottier +pottiest +potty +pouched +pound-foolish +pourable +pouring +poverty-stricken +powder-puff +powdered +powdery +power +power-assisted +powered +powerful +powerless +pozzolanic +practic +practicable +practical +practiced +practicing +practised +praedial +praetorial +praetorian +pragmatic +pragmatical +pragmatism +pragmatist +praiseful +praiseworthy +praising +prandial +prankish +prattling +prayerful +prayerless +pre +pre-Columbian +pre-eminent +pre-emptive +pre-exilian +pre-existent +preachier +preachiest +preachy +prearranged +prebendal +preborn +precancerous +precarious +precast +precative +precatory +precautional +precautionary +precautious +precedent +precedented +precedential +preceding +preceptive +precessional +precious +precipiced +precipitant +precipitate +precipitating +precipitative +precipitous +precise +precisive +preclassical +preclinical +preclusive +precocial +precocious +precognitive +precognizant +preconceived +preconcerted +preconditioned +preconscious +preconsonantal +precooked +precooled +precordial +precritical +precursory +predaceous +predacious +predatory +predestinarian +predestinate +predestined +predeterminate +predetermined +predial +predicable +predicant +predicate +predicative +predicatory +predictable +predicted +predictive +predigested +predisposed +predispositional +predominant +predominate +prefab +prefabricated +prefatorial +prefatory +prefectorial +prefectural +preferable +preferential +preferred +prefigurative +prefrontal +preggers +pregnable +pregnant +prehensible +prehensile +prehistoric +prehistorical +prehuman +prejudiced +prejudicial +prelatic +preliminary +prelingual +preliterate +preludial +preludious +premandibular +premarital +premature +premaxillary +premed +premedical +premeditated +premeditative +premenstrual +premier +premiere +premillennial +premium +premolar +premonitory +premorse +premosaic +prenasal +prenatal +prenominate +prenuptial +preoccupied +preocular +preoral +prepacked +prepaid +preparative +preparatory +prepared +prepense +preponderant +preponderating +prepositional +prepositive +prepossessing +preposterous +prepotent +prepubertal +prepubescent +prepunctual +preputial +prerecorded +prerequisite +prerogative +presageful +presbyopic +presbyteral +presbyterial +preschool +prescient +prescientific +prescribed +prescript +prescriptible +prescription +prescriptive +present +present-day +presentable +presentational +presentationism +presentationist +presentative +presented +presentient +presentimental +presentive +preservable +preservative +preserved +preserving +preset +presidential +presidial +presidiary +pressed +pressing +pressor +pressurized +prest +prestigious +prestissimo +presto +presumable +presumed +presumptive +presumptuous +pretenceless +pretend +pretended +pretentious +preterhuman +preterist +preterit +preterite +preteritive +preternatural +prettier +prettiest +pretty +pretty-pretty +prettyish +prevailing +prevalent +prevenient +preventable +preventative +preventive +preverbal +previous +previsional +prewar +priapic +priced +priceless +pricey +pricklier +prickliest +prickling +prickly +pricy +prideful +prideless +priest-ridden +priestlier +priestliest +priestly +priggish +prim +prima +primaeval +primal +primary +primatal +primate +primatial +prime +primed +primeval +primigenial +primitive +primitivism +primogenial +primogenital +primogenitary +primordial +primrose +primsie +primulaceous +princelier +princeliest +princely +principal +principled +print +printable +printed +printless +prior +prismatic +prissy +pristine +private +privative +privies +privileged +privy +prize +pro +pro-am +probabilism +probabilistic +probable +probationary +probative +probeable +probing +problematic +problematical +proboscidean +procaryotic +procedural +proceleusmatic +procephalic +processed +processional +proclaimed +proclitic +proconsular +procrastinative +procrastinatory +procreative +procryptic +proctodaeal +procumbent +procurable +procuratorial +prodigal +prodigious +prodromal +produced +productile +productional +productive +proemial +profanatory +profane +profaned +professed +professional +professionalism +professorial +proficient +profitable +profitless +profligate +profluent +profound +profuse +progenitive +progenitorial +prognathic +prognathous +prognostic +prognosticative +programmable +programmatic +progressional +progressive +prohibited +prohibitionary +prohibitive +prohibitory +projected +projectile +projecting +projectional +projective +prokaryotic +prolate +proleptic +proleptical +proletarian +proletary +proliferative +proliferous +prolific +prolificacy +prolix +prolonged +prolusory +prominent +promiscuous +promised +promiseful +promising +promissory +promotional +promotive +prompt +promulgated +prone +pronephric +pronged +pronominal +pronounceable +pronounced +proof +proofed +propaedeutic +propagable +propaganda +propagandist +propagandistic +propagative +proparoxytone +propellant +propellent +propelling +proper +propertied +prophetic +prophetical +prophylactic +propitiable +propitiative +propitiatory +propitious +proportionable +proportional +proportionate +proportioned +proportionless +proposable +proposed +propositional +propraetorial +propraetorian +proprietary +proprietorial +proprioceptive +propulsive +propylic +prosaic +proscribed +prosecutable +prosenchymatous +prosimian +prosodic +prosodical +prospective +prospering +prosperous +prostate +prostatic +prostomial +prostrate +prostyle +prosy +protandrous +protanomalous +protanopic +protean +protected +protecting +protective +protectoral +protectorless +proteiform +proteinaceous +proteinic +proteinous +proteolytic +proterandrous +proterogynous +proterozoic +protestant +protesting +prothallium +prothalloid +prothetic +prothoracic +protistic +proto +protochordate +protogynous +protohuman +protolithic +protomorphic +protonemal +protonematal +protonic +protopathic +protoplasmal +protoplasmatic +protoplasmic +prototherian +prototrophic +prototypal +prototypical +protozoal +protozoan +protozoic +protozoological +protracted +protractible +protractile +protractive +protrudable +protrudent +protruding +protrusible +protrusile +protrusive +protuberant +proud +provable +proved +proven +proverbial +providable +provident +providential +provincial +provisional +provisionary +provisory +provocative +provoked +provoking +prowessed +proximal +proximate +proximo +proxy +prudent +prudential +prudish +pruinose +pruned +prunted +prurient +pruriginous +pruritic +prying +psammophytic +psephological +pseud +pseudo +pseudo-Gothic +pseudocarp +pseudocubic +pseudohexagonal +pseudonymous +psilanthropic +psilotic +psittacine +psoriatic +psychedelic +psychiatric +psychiatrical +psychic +psychical +psycho +psychoactive +psychoanalytic +psychoanalytical +psychobiological +psychochemical +psychodelic +psychogenetic +psychogenic +psychographic +psychokinetic +psycholinguistic +psychological +psychologist +psychometric +psychometrical +psychomotor +psychoneurotic +psychopathic +psychosexual +psychosocial +psychosomatic +psychotic +psychotomimetic +psychotropic +psychrometric +psychrometrical +psychrophilic +pterygial +pterygoid +pterylographic +pterylographical +puberulent +pubescent +pubic +public +public-spirited +publicized +publishable +published +pucka +puckered +puckery +puckish +puddly +pudendal +pudgy +puerile +puerperal +puff +puffed +puffier +puffiest +puffing +puffy +pug-nose +pug-nosed +puggish +puggy +pugilistic +pugilistical +pugnacious +puir +puisne +puissant +pukka +pulchritudinous +puling +pull-in +pulled +pulmonary +pulmonate +pulmonic +pulpier +pulpiest +pulpy +pulsatile +pulsating +pulsatory +pulsed +pulseless +pulsing +pulverable +pulverisable +pulverizable +pulverized +pulverulent +pulvinate +pump-action +punch-drunk +punchy +punctate +punctilious +punctual +punctuative +punctured +pungent +punier +puniest +punishable +punished +punishing +punitive +punitory +punk +punkah +puny +pupal +pupillary +pupiparous +puppyish +purblind +purchasable +pure +purer +purest +purgative +purgatorial +purging +purified +purifying +puristic +puristical +puritan +puritanic +puritanical +purloined +purple +purplish +purported +purpose-built +purposeful +purposeless +purposive +purpure +purpuric +purse-proud +pursier +pursiest +pursuable +pursuant +pursued +pursuing +pursy +purulent +push-button +pushed +pushful +pushier +pushiest +pushing +pushy +pusillanimous +pussy +pustulant +pustular +pustulate +pustulous +put-on +put-up +putative +putrefacient +putrefactive +putrefiable +putrefied +putrescent +putrescible +putrid +puzzled +puzzling +pyaemic +pycnostyle +pyelitic +pyelonephritic +pygmoid +pyknic +pyloric +pyogenic +pyoid +pyorrhoeal +pyorrhoeic +pyralid +pyramidal +pyramidical +pyretic +pyrheliometric +pyriform +pyritic +pyrochemical +pyroclastic +pyrogallic +pyrogenic +pyrogenous +pyroligneous +pyrolytic +pyromaniacal +pyromantic +pyrophoric +pyrotechnic +pyrotechnical +pyrotechnics +pyroxenic +pyrrhic +pythogenic +quack +quadragenarian +quadrangular +quadrantal +quadraphonic +quadrate +quadratic +quadrennial +quadric +quadricentennial +quadricipital +quadrifid +quadrilateral +quadrilingual +quadripartite +quadrivalent +quadrivial +quadrophonics +quadrumanous +quadruped +quadrupedal +quadruple +quadruplex +quadruplicate +quadruplication +quaggier +quaggiest +quaggy +quaint +quakier +quakiest +quaking +quaky +qualifiable +qualificatory +qualified +qualifying +qualitative +quality +qualmish +quantal +quantifiable +quantitative +quaquaversal +quarantined +quare +quarrelsome +quarriable +quartan +quarter +quarter-bound +quarter-hour +quartered +quarterly +quartic +quartile +quartziferous +quartzitic +quasi +quaternary +quaternate +quavering +quavery +queasier +queasiest +queasy +queen-size +queenless +queenlier +queenliest +queenly +queer +quelled +quenchable +quenched +quenchless +querulous +questionable +questioning +questionless +quibbling +quick +quick-change +quick-fire +quick-frozen +quick-sighted +quick-tempered +quick-witted +quickset +quicksilver +quicksilvery +quiescent +quiet +quietening +quietism +quietist +quietistic +quilted +quinary +quinate +quincentenary +quincentennial +quincuncial +quinoid +quinoidal +quinonoid +quinquagenarian +quinquefoliate +quinquennial +quinquevalent +quinsied +quintan +quintessential +quintic +quintillionth +quintuple +quintuplicate +quippish +quirky +quit +quits +quivering +quivery +quixotic +quizzical +quodlibetic +quodlibetical +quondam +quotable +quotidian +rabbinic +rabbinical +rabbinism +rabble-rousing +rabic +rabid +racemed +racemic +racemose +rachidial +rachidian +rachitic +racial +racialism +racialistic +racier +raciest +racing +racist +rack-and-pinion +rackety +racking +racy +raddled +radial +radial-ply +radiant +radiate +radiating +radiative +radical +radicant +radiculose +radio +radio-controlled +radioactive +radiogenic +radiographic +radiological +radiometric +radiopaque +radiophonic +radiosensitive +radiotelegraphy +radiotoxic +radular +raffish +raftered +ragged +raggedy +raggle-taggle +raging +raglan +raiding +rainbowy +rainier +rainiest +raining +rainless +rainproof +rainy +raisable +raiseable +raised +raising +raked +rakehell +rakish +rallentando +ralline +rallying +ramal +rambling +rambunctious +ramiform +rammish +ramose +rampageous +rampant +ramshackle +ramstam +ramulose +rancid +rancorous +randie +random +randomized +randy +ranged +rangier +rangiest +ranging +rangy +rank +ranked +ranking +ransacked +ransomed +ranunculaceous +rapacious +raped +rapid +rapid-fire +raploch +rapt +raptorial +raptureless +rapturous +rare +rarefactive +rarefiable +rarefied +rarer +rarest +raring +rascal +rascally +rash +rasorial +raspier +raspiest +rasping +raspy +ratable +rateable +rath +rathe +ratified +ratiocinative +rational +rationalist +rationalistic +rationed +ratite +ratlike +rattier +rattiest +rattish +rattled +rattling +rattly +ratty +raucous +raunchy +ravaged +ravaging +ravening +ravenous +raving +ravishing +raw +rawboned +rawish +rayless +razed +razor-sharp +re-entrant +reachable +reactionary +reactionist +reactive +read +readable +readier +readiest +ready +ready-made +ready-to-wear +ready-witted +readying +real +real-time +realisable +realistic +realizable +realized +realizing +reanimated +rear +rearing +rearmost +rearward +reasonable +reasoned +reasoning +reasonless +reassured +reassuring +rebarbative +rebel +rebelling +rebellious +reboant +reborn +rebuilt +rebuked +rebuttable +recalcitrant +recallable +recapitulative +recapitulatory +receding +receivable +received +recent +receptive +recessed +recessional +recessive +rechargeable +recidivism +recipient +reciprocal +reciprocating +reciprocative +recitative +reckless +reclaimable +reclaimed +reclinable +reclinate +reclining +recluse +reclusive +recognisable +recognizable +recognized +recoilless +recollected +recollective +recommendable +recommendatory +recommended +reconcilable +reconciled +reconciliatory +reconciling +recondite +reconditioned +reconstituted +reconstructed +reconstructional +reconstructionary +reconstructive +record +record-breaking +recordable +recorded +recoverable +recovered +recovering +recreant +recreational +recreative +recriminative +recriminatory +recrudescent +rectal +rectangular +rectifiable +rectified +rectilineal +rectilinear +rectricial +recumbent +recuperative +recurrent +recursive +recurved +recusant +recyclable +red +red-blooded +red-faced +red-figure +red-headed +red-hot +red-letter +red-light +reddened +redder +reddest +reddish +redeemable +redeemed +redeeming +redemptive +redemptory +redirect +redistributed +redivivus +redolent +redoubled +redoubtable +redoubted +reduced +reducible +reductionist +reductive +redundant +reduplicate +reduplicative +reduviid +reedier +reediest +reedy +reeking +reeky +reel-to-reel +refer +referable +referenced +referential +refillable +refined +reflected +reflecting +reflective +reflex +reflexive +refluent +reformable +reformative +reformatory +reformed +reformism +reformist +refractable +refractive +refractory +refrangible +refreshed +refreshful +refreshing +refrigerant +refrigerated +refrigerating +refrigerative +refrigeratory +refringent +refulgent +refundable +refusable +refutable +regainable +regal +regardable +regardant +regardful +regarding +regardless +regenerable +regenerate +regenerating +regenerative +regent +regicidal +regimental +regimented +regional +regionalism +regionalist +registered +registrable +regnal +regnant +regressing +regressive +regretful +regrettable +regular +regularized +regulated +regulating +regulation +regulative +regulatory +reguline +regurgitate +rehabilitated +rehabilitative +reheated +reigning +reincarnate +reincarnation +reincorporate +reinforced +reinvigorated +reissuable +reiterant +reiterative +rejectable +rejected +rejective +rejoiceful +rejoicing +related +relational +relationless +relative +relativism +relativistic +relaxant +relaxative +relaxed +relaxer +relaxing +releasable +released +releasing +relegable +relentless +relevant +reliable +reliant +reliefless +relievable +relieved +religionism +religiose +religious +relinquished +relishable +relivable +relocated +relucent +reluctant +remaining +remanent +remarkable +remediable +remedial +remediless +remembered +remigial +remindful +reminiscent +remiss +remissible +remittent +remnant +remonstrant +remonstrative +remontant +remorseful +remorseless +remote +remote-controlled +remoter +remotest +removable +removed +remunerable +remunerated +remunerative +renal +renascent +renderable +rending +renegade +renegotiable +renewable +renewed +renewing +reniform +renitent +renounceable +renovated +renowned +rent +rent-free +rentable +rental +renunciative +renunciatory +reorganized +reorient +repairable +repaired +repand +reparable +reparative +repayable +repealable +repeatable +repeated +repellant +repellent +repent +repentant +repetitious +repetitive +repining +replaceable +replete +replicate +reply-paid +reportable +reported +reportorial +reposeful +reprehensible +representable +representational +representationalism +representative +represented +repressed +repressible +repressing +repressive +reprimanded +reproachable +reproachful +reproachless +reprobate +reprobative +reprocessed +reproducible +reproductive +reproved +reproving +reptant +reptile +reptilian +reptiloid +republican +repudiated +repudiative +repugnant +repulsive +repurchase +reputable +reputed +requested +required +requisite +requisitionary +requitable +requited +resalable +rescissory +rescued +resealable +resemblant +resentful +reservable +reserve +reserved +resettled +resident +residential +residentiary +residual +residuary +resigned +resilient +resinated +resiniferous +resinoid +resinous +resistant +resistible +resistive +resistless +resoluble +resolute +resolutive +resolvable +resolved +resolvent +resonant +resonating +resorbent +resorptive +resounding +resourceful +resourceless +respectable +respected +respectful +respective +respirable +respiratory +resplendent +respondent +responseless +responsible +responsive +rested +restful +restiform +resting +restitutive +restitutory +restive +restless +restorable +restorationism +restorative +restored +restrainable +restrained +restricted +restricting +restriction +restrictive +resultant +resulting +resumable +resumptive +resupinate +resupine +resurgent +resurrectional +resurrectionary +resurrective +resuscitable +resuscitated +resuscitative +retail +retained +retaining +retaliative +retaliatory +retardant +retardative +retarded +retentive +retial +retiary +reticent +reticular +reticulate +reticulated +retiform +retinal +retinoscopy +retired +retirement +retiring +retractable +retracted +retractile +retral +retreating +retributive +retributory +retrievable +retro-operative +retroactive +retrobulbar +retrocessive +retroflex +retroflexed +retrograde +retrogressive +retrolental +retrorse +retrospective +returnable +returning +retuse +reunionistic +reusable +revanchism +revealable +revealed +revealing +revelational +revelative +revelatory +revengeful +revengeless +revenued +reverable +reverberant +reverberating +reverberative +reverberatory +revered +reverenced +reverend +reverent +reverential +reverse +reversed +reversible +reversionary +revertible +reverting +revertive +review +reviewable +reviled +revised +revisional +revisionary +revisionism +revisionist +revisory +revitalized +revitalizing +revivable +revivalist +revivalistic +revived +reviving +reviviscent +revocable +revokable +revolting +revolute +revolutionary +revolutionist +revolved +revolving +revulsionary +revulsive +rewardable +rewardful +rewarding +rhamnaceous +rhapsodic +rhematic +rheologic +rheological +rheotropic +rhetorical +rheumatic +rheumatoid +rheumy +rhinal +rhinencephalic +rhinocerotic +rhinological +rhinoplastic +rhizocarpous +rhizogenic +rhizomatous +rhizomorphous +rhizophagous +rhizopod +rhodic +rhombic +rhombohedral +rhomboid +rhomboidal +rhonchial +rhotic +rhymed +rhymeless +rhyming +rhythmic +rhythmical +riant +ribald +ribbed +ribbony +ribless +riblike +rich +rickettsial +rickety +rid +ridable +ridden +riddled +rident +riderless +ridged +ridgier +ridgiest +ridgy +ridiculous +riding +rife +rifled +riftless +rigged +right +right-about +right-angled +right-down +right-hand +right-handed +right-minded +right-wing +rightable +righteous +rightful +rightish +rightist +rights +rightward +rigid +rigorous +riled +rimed +riming +rimless +rimmed +rimose +rimy +rindless +rindy +ring-necked +ring-tailed +ringed +ringent +ringing +ringless +ringleted +riotous +rip-roaring +riparian +ripe +ripened +ripped +ripping +ripple +rippled +ripply +risen +risible +rising +riskier +riskiest +risky +ritardando +riteless +ritenuto +ritual +ritualistic +ritzier +ritziest +ritzy +rival +riven +riverine +riverless +riverlike +riveting +road +road-hoggish +roadless +roadworthy +roan +roaring +roast +roasted +roasting +robed +roborant +robust +robustious +rock-bottom +rock-bound +rock-ribbed +rock-steady +rockier +rockiest +rocky +rococo +rodded +rodless +rodlike +rogatory +roguish +roiled +roilier +roiliest +roiling +roily +roll-on +roll-top +rollable +rolled +rollicking +rolling +rollneck +roly-poly +roman +romance +romantic +romanticist +rompish +roofed +roofless +rooky +roomier +roomiest +roomy +root +rooted +rootless +rootlike +ropable +ropeable +ropey +ropier +ropiest +ropy +rosaceous +rose +rose-cheeked +rose-cut +rose-red +roseate +roseless +roselike +rosiny +rostral +rostrate +rosy +rosy-cheeked +rotary +rotatable +rotate +rotated +rotating +rotational +rotative +rotatory +rotiferal +rotiferous +rotted +rotten +rotting +rotund +rouged +rough +rough-and-ready +rough-and-tumble +rough-dry +rough-spoken +roughcast +roughened +roughish +round +round-arm +round-backed +round-eyed +round-faced +round-shouldered +round-table +round-the-clock +round-trip +roundabout +rounded +rounding +roundish +roupy +rousing +routed +routine +rove-over +roving +rowable +rowdy +rowdyish +royal +royalist +rubber +rubberised +rubberized +rubbery +rubbishy +rubblier +rubbliest +rubbly +rubescent +rubiaceous +rubicund +rubied +rubify +rubiginous +rubious +rubric +rubricated +ruby +ruby-red +rudderless +ruddier +ruddiest +ruddy +rude +ruderal +rudimentary +rudish +rueful +rufescent +ruffed +ruffianly +ruffled +rufous +rugged +rugose +rugulose +ruinable +ruined +ruinous +ruled +ruling +ruly +rum +rumbling +rumbly +rumbustious +ruminant +ruminative +rummy +rumpled +rumpless +run-down +run-in +run-of-the-mill +run-on +runaway +runcinate +runed +runic +runnier +runniest +running +runny +runtier +runtiest +runtish +runty +rupicolous +ruptured +rural +rush +rushed +rushier +rushiest +rushing +rushy +russet +russety +rust +rusted +rustic +rustier +rustiest +rustless +rustling +rustred +rusty +rutaceous +ruthenic +ruthenious +ruthful +ruthless +rutilant +rutilated +rutted +ruttier +ruttiest +ruttish +rutty +sabbatical +sable +sabre-toothed +sabulous +saccharic +sacchariferous +saccharine +saccharoid +saccular +sacculate +sacerdotal +sachemic +sacked +saclike +sacral +sacramental +sacred +sacrificial +sacrilegious +sacroiliac +sacrosanct +sad +saddening +saddle-backed +saddle-sore +saddled +sadist +sadistic +safe +safe-deposit +safety-deposit +sagacious +sage +sage-green +sagging +sagittal +sagittate +sagittiform +said +sailing +sailorly +sainted +saintlier +saintliest +saintlike +saintly +salable +salacious +salamandrine +salaried +saleable +sales +salic +salicaceous +salicylic +salient +salientian +saliferous +saline +salivary +sallow +sallowish +sallowy +salmonoid +salpiform +salpingian +salpingitic +salt +saltando +saltant +saltato +saltatorial +saltatory +salted +saltier +saltigrade +saltish +saltless +salty +salubrious +salutary +salutational +salutatory +salvable +salvageable +salvationist +salverform +salving +samariform +same +sanative +sanatory +sanctified +sanctimonious +sanctioned +sanctioning +sand-blind +sandalled +sanded +sandier +sandiest +sandy +sane +saner +sanest +sanguiferous +sanguinary +sanguine +sanguineous +sanguinolent +sanguivorous +sanious +sanitarian +sanitary +sanitized +santalaceous +sap +sapheaded +saphenous +sapid +sapient +sapiential +sapindaceous +sapless +saponaceous +saponified +saporous +sapotaceous +sapphire +sapphirine +sappier +sappiest +sappy +saprogenic +sapropelic +saprophagous +saprophytic +saprozoic +sarcastic +sarcoid +sarcophagous +sarcous +sardonic +sarky +sarmentose +saronic +sarraceniaceous +sartorial +sassier +sassy +satanic +sated +satellite +satem +satiable +satiate +satiated +satin +satiny +satiric +satirical +satisfactory +satisfiable +satisfied +satisfying +saturable +saturant +saturate +saturated +saturniid +saturnine +satyric +satyrical +saucer-eyed +saucier +sauciest +saucy +saurian +saurischian +saussuritic +saut +savable +savage +saved +saving +savorous +savory +savourless +savoury +savvy +saw-set +saw-toothed +sawdusty +sawed-off +sawn-off +saxatile +saxicoline +saxicolous +saxifragaceous +sayable +scabbardless +scabbier +scabbiest +scabby +scabious +scabrous +scalable +scalar +scalariform +scald +scaldic +scalding +scaled +scaleless +scalelike +scalene +scalier +scaliest +scalled +scalloped +scalpless +scaly +scampering +scampish +scandalmongering +scandalous +scandent +scannable +scansorial +scant +scantier +scantiest +scanty +scaphocephalic +scaphocephalous +scaphoid +scapular +scapulary +scarabaeid +scarabaeoid +scarce +scarcer +scarcest +scared +scarey +scarious +scarless +scarlet +scarred +scary +scatheless +scathing +scatological +scatophagous +scatterable +scattered +scattering +scattershot +scatty +scavenging +scenic +scenographic +scenographical +scented +scentless +sceptered +scepterless +sceptic +sceptical +sceptral +sceptred +scheduled +schematic +scheming +scherzando +schismatic +schismatical +schistose +schizo +schizocarpic +schizocarpous +schizogenetic +schizogenous +schizogonous +schizoid +schizomycetic +schizomycetous +schizophrenic +schizophyceous +schizophytic +schizothymic +schlock +schmaltzy +schmalzier +schmalziest +schmalzy +scholarly +scholastic +scholiastic +school-age +schoolboyish +schooled +schoolgirlish +schorlaceous +sciaenid +sciaenoid +sciatic +sciential +scientific +scientistic +scincoid +scintillant +scintillating +scirrhoid +scirrhous +scissile +sciurine +sciuroid +sclerenchymatous +sclerodermatous +scleroid +sclerometric +sclerophyllous +sclerosal +sclerosed +sclerotial +sclerotic +sclerotized +sclerous +scolding +scolopendrine +scombrid +scombroid +scopate +scorbutic +scorched +scorching +score +scoriaceous +scorned +scornful +scorpaenid +scorpaenoid +scorpioid +scorpionic +scot-free +scotch +scotomatous +scotopic +scoundrelly +scoured +scowling +scraggly +scraggy +scrambled +scrannel +scrap +scraped +scrappier +scrappiest +scrappy +scratch +scratched +scratchier +scratchiest +scratching +scratchless +scratchy +scrawled +scrawlier +scrawliest +scrawly +scrawnier +scrawniest +scrawny +screaky +screaming +screeching +screechy +screw-pine +screw-topped +screwed +screwy +scribal +scrimp +scrimpier +scrimpiest +scrimpy +scripted +scriptural +scrobiculate +scroddled +scrofulous +scroggy +scrophulariaceous +scrotal +scrub +scrubbed +scrubbier +scrubbiest +scrubby +scruffier +scruffiest +scruffy +scrumptious +scrupulous +scrutable +sculpted +sculptural +sculptured +sculpturesque +scummier +scummiest +scummy +scungy +scurfy +scurrile +scurrilous +scurry +scurrying +scurvy +scutate +scutellate +scutiform +scyphiform +scyphozoan +sea +sea-foam +sea-green +sea-heath +sea-island +sea-level +seaboard +seaborne +seafaring +sealed +sealed-beam +seamanlike +seamanly +seamed +seamier +seamiest +seamless +seamy +sear +searchable +searching +seared +seasick +seaside +seasonable +seasonal +seasoned +seasonless +seated +seatless +seaward +seaworthy +sebaceous +sebacic +sebiferous +seborrheic +sec +secernent +secessional +secessionist +secluded +seclusive +second +second-best +second-class +second-rate +second-sighted +second-string +secondary +secret +secretarial +secretive +secretory +sectarian +sectile +sectional +sectioned +sectoral +sectorial +secular +secularistic +secularized +secund +securable +secure +secured +sedate +sedated +sedative +sedentary +sedged +sedgy +sedimentary +sedimentological +sedition +seditious +seduced +seductive +sedulous +see-through +seeable +seeded +seedier +seediest +seedless +seedy +seeing +seeking +seely +seeming +seemlier +seemliest +seemly +seen +seeping +seething +segmental +segmentary +segmentate +segmented +segreant +segregable +segregated +seigneurial +seismal +seismic +seismograph +seismographic +seismographical +seismologic +seismological +seismoscopic +seizable +seized +sejant +selachian +select +selected +selective +selenic +selenious +selenitic +selenodont +selenographic +selenographical +selenous +self +self-absorbed +self-accusatory +self-acting +self-addressed +self-adjusting +self-affrighted +self-aggrandizing +self-annealing +self-appointed +self-approving +self-asserting +self-assertive +self-assumed +self-assured +self-aware +self-balanced +self-begotten +self-blinded +self-born +self-catering +self-centred +self-cleaning +self-closing +self-cocking +self-collected +self-coloured +self-conceited +self-condemned +self-condemning +self-confessed +self-confident +self-conscious +self-consistent +self-constituted +self-consuming +self-contained +self-content +self-contradiction +self-contradictory +self-convicted +self-correcting +self-created +self-critical +self-deceived +self-defeating +self-denying +self-dependent +self-depraved +self-deprecating +self-destroying +self-destructive +self-determined +self-determining +self-developing +self-devoted +self-directed +self-directing +self-disciplined +self-disliked +self-displeased +self-distrust +self-drawing +self-drive +self-driven +self-educated +self-effacing +self-elected +self-employed +self-evident +self-evolved +self-excited +self-executing +self-exiled +self-existent +self-explanatory +self-figured +self-flattering +self-focusing +self-forgetful +self-fulfilling +self-giving +self-glazed +self-governing +self-harming +self-healing +self-important +self-imposed +self-induced +self-indulgent +self-inflicted +self-interested +self-invited +self-involved +self-justifying +self-killed +self-lighting +self-limited +self-liquidating +self-loading +self-locking +self-loving +self-luminous +self-made +self-moving +self-neglect +self-neglecting +self-occupied +self-opened +self-opening +self-operating +self-opinionated +self-ordained +self-perpetuating +self-pitying +self-planted +self-pleasing +self-possessed +self-proclaimed +self-produced +self-professed +self-propagating +self-propelled +self-propelling +self-raised +self-raising +self-recording +self-regarding +self-registering +self-regulating +self-reliant +self-repeating +self-respectful +self-respecting +self-revealing +self-reverent +self-righteous +self-rigorous +self-rising +self-sacrificing +self-satisfied +self-satisfying +self-schooled +self-sealing +self-seeded +self-seeking +self-service +self-serving +self-slain +self-sown +self-styled +self-subdued +self-sufficient +self-sufficing +self-supporting +self-surviving +self-sustained +self-sustaining +self-tapping +self-taught +self-tempted +self-tormenting +self-trained +self-willed +self-winding +selfish +selfishness +selfless +selfsame +sellable +semantic +sematic +semblable +semeiotic +semestral +semestrial +semi +semi-independent +semiaquatic +semiarid +semibold +semicircular +semicomatose +semiconducting +semiconscious +semicrystalline +semifinished +semifluid +semiglobular +semiliterate +semilucent +seminal +seminarial +seminary +seminiferous +semiotic +semioviparous +semipalmate +semiparasitic +semipermeable +semipostal +semiprofessional +semisolid +semitonic +semitransparent +semitropical +sempiternal +semplice +senary +senatorial +senescent +senile +senior +sensate +sensational +sensationalistic +sensationist +sensed +senseless +sensible +sensitive +sensitized +sensitizing +sensorial +sensory +sensual +sensualistic +sensuous +sent +sentential +sententious +sentient +sentimental +sepaloid +separable +separate +separated +separatist +separative +separatory +sepia +septal +septarian +septate +septenary +septennial +septentrional +septic +septicemic +septicidal +septifragal +septilateral +septimal +septuagenarian +septuagenary +septuple +sepulchral +sequacious +sequent +sequential +sequestered +sequined +seral +seraphic +seraphical +sere +serene +serfish +serflike +serial +seriate +sericeous +sericitic +sericultural +seriocomic +seriocomical +serious +serological +serotinal +serotine +serous +serpentiform +serpentine +serpiginous +serranid +serrate +serrated +serried +serrulate +servantless +serviceable +serviced +servile +servo +servomechanical +sesamoid +sesquicentennial +sesquipedalian +sessile +sessional +set +set-aside +set-in +set-up +setaceous +setiform +setigerous +setose +setting +settleable +settled +setulose +seven +sevenfold +seventeen +seventeenth +seventh +seventieth +seventy +seventy-eight +severable +several +severe +severed +severer +severest +sewed +sewn +sex-limited +sex-linked +sex-starved +sexagenarian +sexagenary +sexagesimal +sexcentenary +sexed +sexennial +sexier +sexiest +sexism +sexist +sexivalent +sexless +sexological +sexpartite +sextan +sextuple +sexual +sexy +sforzando +shabbier +shabbiest +shabby +shabby-genteel +shackled +shaded +shadeless +shadowed +shadowing +shadowless +shadowy +shady +shaftless +shagged +shaggier +shaggiest +shaggy +shakable +shakeable +shaken +shakier +shakiest +shaking +shaky +shallow +shalwar +sham +shamanic +shamanist +shamanistic +shamed +shamefaced +shameful +shameless +shapable +shapeable +shaped +shapeless +shapelier +shapeliest +shapely +shaping +shared +sharing +sharp +sharp-cut +sharp-edged +sharp-eyed +sharp-nosed +sharp-set +sharp-sighted +sharp-tongued +sharp-witted +sharpened +shattered +shattering +shaved +shaven +shawlless +sheared +sheathed +sheathy +shed +sheen +sheenier +sheeniest +sheepish +sheer +shelfy +shell +shell-less +shell-like +shelled +shellier +shelliest +shellproof +shellshocked +shelly +sheltered +shelterless +shelvy +shickered +shield-shaped +shielded +shielding +shieldless +shieldlike +shier +shiest +shiftier +shiftiest +shifting +shiftless +shifty +shill +shillyshally +shimmering +shimmery +shingly +shinier +shiniest +shining +shiny +ship-rigged +shipboard +shipless +shipshape +shipwrecked +shirtless +shirty +shivering +shivery +shoal +shoaly +shock +shock-headed +shockable +shocked +shocking +shod +shoddy +shoed +shoeless +shogunal +shopworn +shore +shoreless +shoreward +shorn +short +short-dated +short-handed +short-lived +short-range +short-sighted +short-spoken +short-staffed +short-tempered +short-term +short-winded +shortcut +shortened +shortest +shorthand +shortish +shorty +shot +shotgun +shotten +shouldered +shouted +shouting +showerless +showery +showier +showiest +showy +shredded +shredless +shrewd +shrewish +shrieked +shrieking +shrieval +shrill +shrilling +shrimpy +shrinelike +shrinkable +shriveled +shrivelled +shroud-laid +shrouding +shroudless +shrubbier +shrubbiest +shrubby +shrunk +shrunken +shuddering +shuddery +shuffling +shunnable +shunt-wound +shut +shut-in +shuttered +shy +shyer +shyest +sialagogic +sialoid +siamese +sibilant +sibilation +sibylic +sibyllic +sic +sick +sickening +sicker +sickish +sickle-shaped +sicklied +sicklier +sickliest +sickly +side +side-by-side +side-splitting +side-wheel +sidearm +sideling +sidelong +sidereal +sideward +sideways +sighful +sightable +sighted +sightless +sightlier +sightliest +sightly +sigillary +sigillate +sigmate +sigmoid +sigmoidal +sign +signal +signatory +signed +significant +significative +silenced +silent +siliceous +silicic +silicious +silicotic +siliculose +silken +silkier +silkiest +silky +silly +siltier +siltiest +silty +silurid +silvan +silver +silver-tongued +silvern +silvery +simaroubaceous +simian +similar +simious +simon-pure +simoniacal +simpatico +simple +simple-hearted +simple-minded +simplex +simplified +simplistic +simulant +simular +simulate +simulated +simulative +simulatory +simultaneous +sincere +sincipital +sinewless +sinewy +sinful +singable +singing +single +single-acting +single-breasted +single-entry +single-handed +single-hearted +single-minded +single-phase +single-spaced +single-tax +singled +singling +singsong +singular +sinister +sinistral +sinistrodextral +sinistrorsal +sinistrorse +sinistrous +sinkable +sinless +sinning +sintered +sinuate +sinuous +sinusoidal +siphonal +siphonic +sipunculid +sirenian +sirenic +sissified +sissy +sister +sisterless +sisterly +sitting +situate +situated +situational +situla +siwash +six +sixfold +sixpenny +sixteen +sixteenth +sixth +sixtieth +sixty +sizable +size +sizeable +sized +sizy +sizzling +skaldic +skeigh +skeletal +skeptic +skeptical +sketchable +sketchy +skew +skewbald +skewed +ski +skiable +skidproof +skilful +skilled +skillful +skim +skimmed +skimpy +skin +skin-deep +skinking +skinless +skinned +skinnier +skinniest +skinny +skint +skirting +skirtless +skittish +skulking +sky-blue +sky-high +skyward +slab-sided +slabbery +slack +slaggier +slaggiest +slaggy +slain +slaked +slakeless +slanderous +slangier +slangiest +slangy +slant +slant-eyed +slanted +slanting +slantwise +slap-up +slapped +slapstick +slashed +slashing +slate +slate-gray +slatier +slatiest +slatternly +slaty +slaughterous +slave +slavish +sleazier +sleaziest +sleazy +sledge-hammer +sleek +sleekier +sleekiest +sleekit +sleeky +sleepier +sleepiest +sleeping +sleepless +sleepwalk +sleepy +sleetier +sleetiest +sleety +sleeved +sleeveless +slender +sliced +slick +slicked +slickered +sliding +slier +sliest +slight +slightest +slighting +slim +slimed +slimier +slimiest +slimline +slimmer +slimmest +slimming +slimsy +slimy +slinkier +slinkiest +slinky +slip-on +slipover +slippered +slipperier +slipperiest +slippery +slippier +slippiest +slipping +slippy +slipshod +slit +slithering +slithery +slobbery +sloe-eyed +sloped +sloping +slopped +sloppier +sloppiest +sloppy +sloshed +sloshier +sloshiest +sloshy +slothful +slouched +slouchier +slouchiest +slouching +slouchy +sloughy +slovenlier +slovenliest +slovenly +slow +slow-motion +slow-moving +slow-witted +slub +slubbed +sludgier +sludgiest +sludgy +sluggard +sluggish +sluicing +slum +slumbering +slumberless +slumberous +slumbery +slumbrous +slummier +slummiest +slummy +slumped +slung +slurred +slushier +slushiest +slushy +sluttish +sly +smacking +small +small-bore +small-minded +small-scale +small-time +small-town +smaller +smallest +smallish +smaragdine +smarmy +smart +smart-aleck +smart-alecky +smarting +smartish +smarty +smash-and-grab +smashed +smashing +smeared +smearier +smeariest +smeary +smectic +smell-less +smellier +smelliest +smelling +smelly +smileless +smiling +smirched +smitten +smoggy +smoke-dried +smoked +smokeless +smokeproof +smokier +smokiest +smoking +smoky +smooth +smooth-faced +smooth-spoken +smooth-tongued +smoothed +smoothened +smorzando +smothered +smothering +smothery +smouldering +smudged +smudgy +smug +smugger +smuggest +smuggled +smuttier +smuttiest +smutty +snafu +snaggy +snail-paced +snake-hipped +snakelike +snakier +snakiest +snaky +snap-brim +snappier +snappiest +snapping +snappish +snappy +snarled +snarly +snatchier +snatchiest +snatchy +snazzier +snazziest +snazzy +sneak +sneakier +sneakiest +sneaking +sneaky +snecked +sneering +sneezy +snide +snider +snidest +sniffier +sniffiest +sniffling +sniffy +snippier +snippiest +snippy +snobbish +snobby +snod +snoopy +snootier +snootiest +snooty +snoozy +snoring +snorting +snorty +snotty +snotty-nosed +snouted +snow-blind +snow-white +snowier +snowiest +snowless +snowlike +snowy +snub +snub-nosed +snubbier +snubbiest +snubby +snuff +snuff-brown +snuffier +snuffiest +snuffling +snuffly +snuffy +snug +snugger +snuggest +snugging +snuggled +so-called +so-so +soaked +soaking +soapier +soapiest +soapless +soapy +soaring +sober +sober-minded +sobering +sociable +social +socialist +socialistic +socialized +societal +sociobiological +socioeconomic +sociolinguistic +sociological +sociologistic +sociopathic +socko +soda-lime +sodden +sodding +soft +soft-boiled +soft-centred +soft-cover +soft-finned +soft-footed +soft-headed +soft-hearted +soft-shell +soft-spoken +softened +softening +softish +softwood +soggy +soi-disant +soiled +sola +solanaceous +solar +sold +soldierlike +soldierly +sole +soled +solemn +solenoidal +solfataric +soli +solicited +solicitous +solid +solid-state +solidary +solidifiable +solidified +solidungulate +solipsism +solitary +solitudinous +sollar +solo +solstitial +soluble +solus +solute +solutional +solvable +solved +solvent +somatic +somatogenic +somatologic +somatological +somatotonic +somber +sombre +sombrous +some +sometime +somnambulant +somnambulism +somnambulistic +somnifacient +somniferous +somnific +somnolent +sonant +songful +songless +sonic +sonless +sonorous +sonsie +sonsy +sooth +soothfast +soothing +sooty +sophistic +sophistical +sophisticated +sophomore +sophomoric +soporiferous +soporific +soppier +soppiest +sopping +soppy +sopranino +soprano +sorbed +sorbefacient +sorcerous +sordid +sore +sorediate +sorer +sorest +soricine +soritic +soritical +sororal +sorrel +sorrier +sorriest +sorrowful +sorrowing +sorrowless +sorry +sortable +sorted +sostenuto +sotted +sottish +sottishness +soughing +sought +sought-after +soul-destroying +soul-searching +soul-stirring +soulful +soulless +sound +sounded +sounding +soundless +soundproof +soupier +soupiest +soupy +sour +soured +sourish +soused +south +southerly +southern +southernly +southernmost +southmost +southpaw +southward +sovereign +soviet +sovietism +sovran +sown +sozzled +spaced +spaceless +spacial +spacious +spadelike +spadiceous +spagyric +span-new +spanaemic +spangled +spangly +spanking +spare +sparid +sparing +sparkish +sparkless +sparkling +sparkly +sparoid +sparry +sparse +sparser +sparsest +spasmodic +spastic +spathaceous +spathic +spathose +spathulate +spatial +spatiotemporal +spattered +spatulate +spavined +spayed +speakable +speaking +spec +special +specialist +specialistic +specialized +specifiable +specific +specified +specious +specked +speckled +speckless +spectacled +spectacular +spectatorial +spectral +spectrographic +spectrological +spectrometric +spectroscopic +spectroscopical +specular +speculative +speechless +speedful +speedier +speediest +speeding +speedless +speedy +spelaean +spellable +spellbinding +spellbound +spendable +spendthrift +spent +spermatic +spermatozoal +spermatozoan +spermatozoic +spermatozoon +spermic +spermicidal +spermophytic +spermous +sphagnous +sphenic +sphenoid +spheral +sphereless +spherelike +spheric +spherical +spheroidal +spherular +spherulitic +sphery +sphincteral +sphincterial +sphinxlike +sphygmic +sphygmographic +sphygmoid +spicate +spiccato +spicier +spiciest +spick +spiculate +spicy +spidery +spiffier +spiffiest +spiffing +spiffy +spiflicated +spiked +spikier +spikiest +spiky +spinaceous +spinal +spindle-legged +spindle-shanked +spindle-shaped +spindlier +spindliest +spindling +spindly +spined +spineless +spinescent +spinier +spiniest +spiniferous +spinning +spinose +spinous +spinulose +spiny +spiracular +spiral +spirant +spired +spireless +spirillar +spirited +spiritistic +spiritless +spiritous +spiritual +spiritualist +spiritualistic +spirituel +spirituous +spiroid +spirometric +spiry +spiteful +splanchnic +splashed +splashier +splashiest +splashy +splattered +splay +spleenful +spleenish +spleeny +splendent +splendid +splendiferous +splendorous +splendrous +splenetic +splenial +splenic +splintered +splintery +split +split-level +split-second +splitting +splotched +splurgy +spluttering +spoiled +spoilt +spoken +spokewise +spondaic +spondylitic +spongier +spongiest +spongy +spontaneous +spookier +spookiest +spooky +spoon-fed +spoonier +spooniest +spoony +sporadic +sporangial +sporocystic +sporogenous +sporophoric +sporophytic +sporozoan +sport +sportful +sportier +sportiest +sporting +sportive +sportless +sportsmanlike +sporty +sporular +spot-on +spotless +spotted +spotty +spousal +spouseless +spouted +spouting +spoutless +sprawled +sprawling +sprawly +spread +spread-eagle +spreading +spreathed +sprigged +spriggier +spriggiest +spriggy +sprightful +sprightlier +sprightliest +sprightly +spring +spring-loaded +springier +springiest +springing +springless +springlike +springtime +springy +sprinkled +sprouted +spruce +sprucer +sprucest +sprucing +spry +spryer +spryest +spumescent +spumous +spumy +spun +spunkier +spunkiest +spunky +spurious +spurless +spurned +spurred +spurting +sputtering +squab +squabbier +squabbiest +squabby +squalid +squallier +squalliest +squalling +squally +squamate +squamosal +squamous +squamulose +squandered +square +square-built +square-rigged +square-shouldered +square-toed +squared +squarish +squarrose +squashed +squashier +squashiest +squashy +squat +squatty +squawky +squeakier +squeakiest +squeaking +squeaky +squealing +squeamish +squeezable +squelched +squiffy +squiggly +squint +squint-eyed +squinting +squirarchal +squirarchical +squirearchal +squirearchical +squirming +squirmy +squirrelly +squirting +squishier +squishiest +squishy +stabbed +stabbing +stabile +stabilized +stabilizing +stable +staccato +stacked +stage-struck +staged +stagey +staggering +stagier +stagiest +stagnant +stagy +staid +stained +stainless +stalactiform +stalagmitic +stalagmitical +stalagmometer +stale +stalemated +stalked +stalking +stalkless +stalky +stall-fed +stalwart +stalworth +staminal +staminate +staminiferous +stammering +stamped +stanchable +stand-alone +stand-by +stand-off +stand-offish +stand-up +standard +standardized +standing +stannic +stanniferous +stannous +stapedial +staphylococcal +staple +stapled +star +star-crossed +star-shaped +star-spangled +star-studded +starboard +starch-reduced +starchy +staring +stark +stark-naked +starkers +starless +starlight +starlike +starlit +starred +starrier +starriest +starring +starry +starry-eyed +starting +startled +startling +starved +starveling +starving +statable +statant +state +stated +stateless +statelier +stateliest +stately +stateside +statesmanlike +statesmanly +statewide +static +stational +stationary +statist +statistical +stative +statuary +statued +statuesque +statutable +statute +statutory +staunch +staurolitic +stay-at-home +steadfast +steadied +steadier +steadiest +steady +steady-going +steadying +stealthier +stealthiest +stealthy +steamed +steamier +steamiest +steaming +steamtight +steamy +stearic +steatitic +stedfast +steel-blue +steel-grey +steel-plated +steely +steep +steepish +steepled +steerable +stelar +stellar +stellate +stelliferous +stelliform +stellular +stemless +stemmed +stenographic +stenographical +stenophyllous +stenosed +stenotopic +stenotropic +stentorian +step-down +step-in +step-up +stepwise +stercoraceous +stereo +stereobatic +stereographic +stereographical +stereoisomeric +stereophonic +stereoscopic +stereospecific +stereotactic +stereotyped +stereotypic +stereotypical +steric +sterile +sterilized +sterling +stern +sternal +sternitic +sternmost +sternutative +sternutatory +steroidal +stertorous +stethoscopic +stewed +stey +sthenic +stibial +stichometric +stichometrical +stichomythic +stick-in-the-mud +stickier +stickiest +sticking +stickit +sticky +stiff +stiff-necked +stiffened +stiffish +stifled +stifling +stigmatic +still +still-life +stilly +stilted +stimulable +stimulant +stimulated +stimulating +stimulative +stinging +stingless +stingy +stinking +stinko +stinky +stinting +stintless +stipellate +stipendiary +stipitate +stippled +stipular +stipulate +stipulatory +stirless +stirred +stirring +stitched +stochastic +stock +stocked +stockier +stockiest +stocking +stockinged +stockingless +stockish +stockless +stocky +stodgier +stodgiest +stodgy +stoic +stoical +stoichiometric +stolen +stolid +stolidity +stoloniferous +stomachal +stomachic +stomachy +stomatal +stomatic +stone +stone-blind +stone-broke +stone-cold +stone-dead +stone-deaf +stoned +stoneground +stoneless +stoneware +stonier +stoniest +stonkered +stony +stony-broke +stony-hearted +stooped +stooping +stop-go +stop-loss +stopless +stopped +stoppered +stopping +storable +store +storeyed +storiated +storied +storm-beaten +storm-tossed +stormbound +stormier +stormiest +stormless +stormproof +stormy +stoss +stotious +stout +stoutish +straggling +straggly +straight +straight-arm +straight-out +straightaway +straightforward +strained +straining +strait +strait-laced +stranded +strange +strangest +strangled +strapless +strapped +strapping +strategic +strategical +straticulate +stratified +stratiform +stratocratic +stratospheric +stratous +straucht +straw +strawless +strawlike +strawy +stray +straying +streaked +streakier +streakiest +streaky +streamier +streamiest +streaming +streamless +streamlined +streamy +strengthened +strengthening +strenuous +strepitous +streptococcal +stressed +stressful +stretch +stretchable +stretched +stretchier +stretchiest +stretching +stretchy +strewn +striate +stricken +strict +strident +stridulatory +stridulous +strifeful +strifeless +strigiform +strigose +striking +stringed +stringendo +stringent +stringless +stringy +strip +strip-mined +striped +stripeless +stripier +stripiest +stripped +stripped-down +stripy +strobic +strobilaceous +strobiloid +stroboscopic +stromatic +stromatous +strong +strong-minded +strong-willed +strongish +strophic +stroppy +struck +structural +structuralism +structuralist +structured +structureless +struggling +strung +struthious +strutting +strychnic +stubbled +stubbly +stubborn +stubby +stuck +stuck-up +studded +studied +studious +stuffed +stuffy +stumbling +stumpier +stumpiest +stumpy +stung +stunned +stunning +stunted +stupefacient +stupefactive +stupefied +stupefying +stupendous +stupid +stuporous +sturdied +sturdier +sturdiest +sturdy +stutter +stuttering +stylar +styled +styleless +styliform +stylised +stylish +stylistic +stylized +stylographic +styloid +stylolitic +styptic +styracaceous +suable +suasible +suasory +suave +subacid +subacidulous +subacrid +subacute +subadult +subaerial +subaffluent +subaggregate +subalpine +subaltern +subalternate +subangular +subantarctic +subapostolic +subaqua +subaquatic +subaqueous +subarachnoid +subarboreal +subarborescent +subarctic +subarcuate +subarid +subastral +subatomic +subaudible +subaural +subauricular +subaverage +subaxillary +subbasal +subcaliber +subcalibre +subcapsular +subcardinal +subcartilaginous +subcelestial +subclavian +subclavicular +subclinical +subconscious +subcontiguous +subcontinental +subcontrary +subcordate +subcortical +subcostal +subcranial +subcritical +subcultural +subcutaneous +subdermal +subdiaconal +subdivided +subdominant +subdorsal +subduable +subdued +subdural +subentire +subequal +subequatorial +suberect +subereous +suberic +subfreezing +subfusc +subgeneric +subglacial +subglobose +subglobular +subgrade +subhedral +subhuman +subhumid +subinfeudatory +subjacent +subject +subjective +subjugated +subjunctive +sublanceolate +sublapsarianism +sublethal +sublimable +sublimate +sublimated +sublime +sublimed +subliminal +sublinear +sublingual +sublittoral +sublunar +sublunary +sublunate +submarginal +submarine +submaxillary +submediant +submental +submerged +submergible +submersed +submersible +submicroscopic +subminiature +submiss +submissive +submontane +submucous +submultiple +subnatural +subneural +subnormal +suboceanic +subocular +suborbital +subordinal +subordinate +subordinating +subordinative +subovate +subparallel +subphrenic +subpolar +subreptitious +subsacral +subscapular +subscribable +subscribed +subscript +subsequent +subservient +subsessile +subsidiary +subsiding +subsidized +subsistent +subsolar +subsonic +subspinous +substandard +substantial +substantiated +substantiating +substantival +substantive +substernal +substituent +substitutable +substitute +substitutional +substitutionary +substitutive +substructural +subsumable +subsurface +subtemperate +subterminal +subternatural +subterranean +subterrestrial +subtile +subtle +subtorrid +subtracted +subtractive +subtriangular +subtriplicate +subtropic +subtropical +subulate +subungual +suburban +suburbanized +suburbicarian +subursine +subventionary +subversive +subvertebral +subvertical +subvitreous +subvocal +subzero +subzonal +succedaneous +succeeding +successful +successive +successless +succinct +succinic +succubous +succulent +succursal +such +suchlike +sucking +suckled +suctorial +sudatory +sudden +sudoriferous +sudorific +sudoriparous +sudsy +suety +sufferable +suffering +sufficient +suffixal +suffocating +suffocative +suffragan +suffruticose +suffused +suffusive +sugar-candy +sugar-cane +sugar-coated +sugar-loaf +sugared +sugarless +sugary +suggested +suggestible +suggestive +suicidal +suitable +suited +sulcate +sulfa +sulfinyl +sulfuric +sulkier +sulkies +sulkiest +sulky +sullen +sullied +sulpha +sulphonic +sulphureous +sulphuretted +sulphuric +sulphurous +sultanic +sultrier +sultriest +sultry +summary +summational +summative +summer +summerly +summery +summital +summitless +summonable +sumptuary +sumptuous +sun-cured +sun-drenched +sun-dried +sunbaked +sunbeamed +sunbeamy +sunburned +sunburnt +sunburst +sundry +sunfast +sung +sunk +sunken +sunless +sunlike +sunlit +sunnier +sunniest +sunny +sunproof +sunray +sunrise +sunset +sunshiny +sunstruck +suntanned +sunward +super +super-duper +superable +superabundant +superactive +superacute +superadditional +superambitious +superannuated +superb +superbold +supercelestial +supercharged +superciliary +supercilious +supercolumnar +superconducting +superconductive +superconfident +supercriminal +supercritical +superdainty +supereminent +supererogatory +superevident +superexcellent +superfatted +superfetate +superficial +superfine +superfluid +superfluous +supergene +superglacial +superheterodyne +superhuman +superimportant +superimposed +superincumbent +superintendent +superior +superjacent +superlative +superlunar +superlunary +supermundane +supernal +supernatant +supernational +supernatural +supernaturalism +supernaturalist +supernaturalistic +supernormal +supernumerary +superordinary +superordinate +superorganic +superphysical +superposable +superrefined +supersafe +supersaturated +superscript +supersensible +supersensitive +supersensual +superserviceable +supersonic +superstitious +superstructural +supersubstantial +supersubtle +supersweet +superterrestrial +supervenient +supervirulent +supervised +supervisory +supine +supperless +supple +suppled +supplemental +supplementary +suppler +supplest +suppletion +suppletive +suppletory +suppliant +supplicant +supplicatory +suppling +supportable +supported +supporting +supportive +supportless +supposable +supposed +suppositional +suppositious +supposititious +suppositive +suppressed +suppressive +suppurative +supranational +suprarenal +suprasegmental +supratemporal +supremacist +supreme +sural +surbased +surculose +surd +sure +sure-enough +sure-fire +surefooted +surer +surest +surface +surface-active +surface-to-air +surface-to-surface +surfeited +surficial +surfy +surgeless +surgical +surging +surgy +surly +surmisable +surmountable +surmounted +surpassable +surpassing +surpliced +surplus +surprised +surprising +surreal +surrealism +surrealistic +surrendered +surreptitious +surrogate +surrounded +surrounding +surveillant +survivable +surviving +susceptible +susceptive +suspect +suspected +suspectless +suspended +suspenseful +suspensible +suspensive +suspensory +suspicionless +suspicious +sustainable +sustained +sustentacular +sustentative +susurrant +sutural +svelte +svelter +sveltest +swagger +swaggering +swainish +swallow-tailed +swallowed +swamped +swampier +swampiest +swampy +swank +swankier +swankiest +swanky +swaraj +swarajist +swarming +swart +swarth +swarthy +swashbuckling +sway-backed +swaying +sweated +sweatier +sweatiest +sweating +sweaty +sweeping +sweer +sweet +sweet-and-sour +sweet-scented +sweet-tempered +sweetened +sweetish +sweetmeal +swell +swelled +swelled-headed +swelling +sweltering +sweltry +swept +sweptwing +swift +swift-footed +swimmable +swimming +swindled +swing-wing +swingeing +swinging +swingy +swinish +swirlier +swirliest +swirling +swirly +swish +swishier +swishiest +swishing +swishy +switch +swollen +swollen-headed +swooning +sword-shaped +swordless +swordlike +sworn +sybarite +sybaritic +sycophantic +sycophantical +sycophantish +syenitic +syllabic +syllabled +syllogistic +sylphic +sylphid +sylphish +sylphy +sylvan +sylvatic +symbiotic +symbolic +symbolical +symbolist +symbolistic +symbolistical +symmetric +symmetrical +sympathetic +sympatholytic +sympathomimetic +sympatric +sympetalous +symphonic +symphonious +symphysial +sympodial +symposiac +symptomatic +symptomless +synaesthetic +synagogical +synaptic +syncarpous +synchromesh +synchronal +synchronic +synchronistic +synchronistical +synchronized +synchronous +synclastic +synclinal +syncopated +syncretic +syncytial +syndactyl +syndesmotic +syndetic +syndicalist +syndicalistic +syndromic +synecdochic +synecdochical +synecologic +synecological +synergetic +synergist +synergistic +syngamic +synodal +synodic +synoecious +synoicous +synonymic +synonymical +synonymous +synoptic +synoptical +synoptistic +synovial +syntactic +syntactical +synthetic +synthetical +syntonic +syntonous +syphilitic +syphiloid +syringeal +syrupy +systaltic +systematic +systematized +systemic +systemless +syzygial +tabby +tabernacular +tabescent +taboo +tabu +tabular +tabulate +tachistoscopic +tachygraphic +tachygraphical +tacit +taciturn +tackier +tackiest +tacky +tactful +tactical +tactile +tactless +tactual +tagged +tagmemic +tai +tail +tailed +tailing +tailless +taillike +tailor-made +tailored +tainted +taintless +take-down +take-out +takeaway +taken +taking +talc +talcose +talented +taligrade +taliped +talismanic +talismanical +talkable +talkative +talking +talky +tall +tallish +tallowy +taloned +tamable +tame +tameable +tamed +tameless +tamer +tamest +taming +tan +tanagrine +tandem +tangent +tangential +tangerine +tangible +tangier +tangiest +tangled +tangy +tanked +tannable +tanned +tannic +tantalic +tantalizing +tantalous +taped +tapeless +tapelike +tapered +tapering +tapestried +tapetal +tappable +tapped +tardier +tardiest +tardigrade +tardy +tariffless +tarmac +tarmacadam +tarnal +tarnishable +tarnished +tarot +tarry +tarsal +tart +tartaric +tartish +tasimetric +tasseled +tasselled +tasteful +tasteless +tasty +tattered +tattling +tatty +taught +taunt +taunting +tauriform +taurine +tauromachian +taut +tautologic +tautological +tautomeric +tawdrier +tawdriest +tawdry +tawie +tawney +tawnier +tawniest +tawny +tax-deductible +tax-exempt +tax-free +taxable +taxaceous +taxidermal +taxidermic +taxing +taxonomic +taxonomical +taxpaying +tea-table +teachable +teacherless +tearable +tearaway +tearful +tearier +teariest +tearing +tearless +teary +teased +teasing +techier +techiest +technical +technocrat +technological +techy +tectonic +tectricial +tedious +teeming +teen +teenage +teenier +teeniest +teensy +teensy-weensy +teentsy +teeny +teeny-weeny +teetotal +tegular +teind +teknonymous +telaesthetic +telangiectatic +telautographic +telegenic +telegnostic +telegonic +telegrammatic +telegrammic +telegraphic +telekinetic +telemetered +telencephalic +teleological +teleost +teleostean +telepathic +telephonic +telephotographic +telescoped +telescopic +telesthetic +televisional +televisionary +telial +telic +telling +telltale +tellurian +telluric +tellurous +telocentric +telophasic +temerarious +temperamental +temperate +tempered +tempering +tempest-tossed +tempestuous +templed +temporal +temporary +temptable +tempting +ten +tenable +tenacious +tenantable +tenanted +tenantless +tendencious +tendentious +tender +tender-hearted +tenderized +tending +tendinous +tendrillar +tenebrific +tenebrious +tenebrism +tenebrous +tenfold +tenor +tenpenny +tense +tensed +tenseless +tenser +tensest +tensible +tensile +tensing +tensional +tensionless +tensive +tentacled +tentacular +tentaculoid +tentative +tented +tenth +tentie +tentier +tentiest +tentless +tentorial +tenty +tenuous +tenured +tenurial +tenuto +tephritic +tepid +tepidity +tepidness +teratogenic +teratoid +terbic +tercentenary +terebinthine +terefah +terete +tergal +tergiversatory +teriyaki +terminable +terminal +terminated +terminational +terminative +terminatory +terminist +terminological +termless +ternary +ternate +terpsichorean +terraqueous +terrene +terrestrial +terrible +terrific +terrified +terrifying +terrigenous +territorial +terror-stricken +terror-struck +terrorful +terrorist +terroristic +terrorless +terse +tertial +tertian +tertiary +tertius +tervalent +tessellated +test +test-tube +testable +testaceous +testamentary +testate +tested +testicular +testiculate +testimonial +testudinal +testy +tetanic +tetartohedral +tetchy +tethered +tetrabasic +tetrabranchiate +tetracid +tetracyclic +tetradynamous +tetraethyl +tetragonal +tetrahedral +tetramerous +tetrandrous +tetraploid +tetrapodic +tetrapterous +tetrarchic +tetrarchical +tetrasporic +tetrastichic +tetrastichous +tetrasyllabic +tetrasyllabical +tetratomic +tetravalent +textbook +textbookish +textile +textless +textual +textualism +textuary +textured +thae +thalamencephalic +thalassic +thalassographic +thallic +thalloid +thallophytic +thallous +thank-you +thankful +thankless +thankworthy +thatchless +thawed +theaceous +thearchic +theatrical +thecal +thecate +thecodont +theism +theist +theistic +theistical +thelytokous +thematic +themeless +then +thenar +theocentric +theocratic +theocratical +theodicean +theodolitic +theogonic +theological +theomorphic +theophanic +theoretic +theoretical +theosophic +theosophical +theralite +therapeutic +theriacal +therian +therianthropic +theriomorphic +thermal +thermic +thermionic +thermochemical +thermoduric +thermodynamic +thermodynamical +thermoelectrical +thermogenetic +thermogenic +thermolabile +thermoluminescent +thermolytic +thermometric +thermonuclear +thermophile +thermoplastic +thermoscopic +thermosetting +thermostable +thermostatic +thermotactic +thermotaxic +thermotropic +theroid +theropod +thersitical +thespian +thetic +theurgic +theurgical +thick +thick-skinned +thick-skulled +thick-witted +thickened +thickening +thicketed +thickety +thickset +thieving +thievish +thigmotactic +thigmotropic +thin +thin-skinned +thinkable +thinking +thinned +thinnish +thiocyanic +third +third-class +third-rate +thirdstream +thirstier +thirstiest +thirstless +thirsty +thirteen +thirteenth +thirtieth +thirty +thistly +thixotropic +thoracic +thornier +thorniest +thornless +thorny +thorough +thoroughbred +thought-out +thoughtful +thoughtless +thousand +thousandfold +thousandth +thowless +thrashing +thrasonical +thraw +thrawn +threadbare +threadlike +thready +threatened +threatening +threatful +three +three-cornered +three-dimensional +three-legged +three-masted +three-phase +three-piece +three-ply +three-quarter +three-sided +three-square +three-way +threefold +threepenny +threescore +threnodial +thriftier +thriftiest +thriftless +thrifty +thrilled +thrilling +thriving +throated +throatier +throatiest +throaty +throbbing +throbless +thrombolytic +thrombosed +thrombotic +throneless +thronged +through +through-composed +through-other +throwback +thrown +thru +thudding +thuggish +thumbed +thumbless +thumblike +thumping +thundering +thunderous +thundery +thwart +thwarted +thwarting +thwartwise +thymelaeaceous +thymic +thymier +thymiest +thymy +thyroid +thyrsoid +thysanuran +thysanurous +tiaraed +tibial +tickety-boo +tickling +ticklish +tidal +tiddley +tiddly +tideless +tidied +tidy +tie-in +tied +tierced +tigerish +tight +tight-fisted +tight-laced +tight-lipped +tightened +tightknit +tightly-knit +tiled +tiliaceous +tillable +tilled +tilted +timber-framed +timber-line +timbered +time-consuming +time-honoured +time-sharing +timed +timeless +timely +timeous +timid +timocratic +timocratical +timorous +tin +tinct +tinctorial +tindery +tineal +tined +tineid +tinged +tinglier +tingliest +tingling +tingly +tinhorn +tinier +tiniest +tinklier +tinkliest +tinkling +tinkly +tinned +tinnier +tinniest +tinny +tinpot +tinsel +tinselly +tinted +tintless +tiny +tip-and-run +tip-tilted +tip-up +tippable +tipped +tippier +tippiest +tippy +tipsier +tipsy +tiptoe +tiptop +tired +tireless +tiresome +tiring +titanic +titaniferous +titanous +tithable +titillated +titillating +titillative +titled +tittering +tittuppy +titubant +titular +titulary +to-and-fro +to-be +toadyish +toasted +toe +toed +toeless +toey +toffee-nosed +togaed +togate +together +togged +toilful +toiling +toilsome +token +told +tolerable +tolerant +toluic +tombless +tomboyish +tomentose +tomentous +tomfoolish +tomial +ton-up +tonal +tonalitive +tone-deaf +toned +toneless +tonetic +tongue-in-cheek +tongue-lash +tongue-tied +tongued +tongueless +tonguelike +tonic +tonier +toniest +tonish +tonnish +tonsillar +tonsillary +tonsillitic +tonsorial +tonsured +tony +too-too +toom +toothed +toothier +toothiest +toothless +toothlike +toothsome +toothy +top +top-down +top-drawer +top-flight +top-hat +top-heavy +top-hole +top-level +top-secret +topazine +topfull +tophaceous +topiary +topical +topless +toplofty +topmost +topographic +topographical +topologic +topological +toponymic +toponymical +topped +topping +toppling +tops +toreutic +toric +tormented +torn +tornadic +toroidal +torose +torpid +torporific +torquate +torrent +torrential +torrid +tortile +tortious +tortoise-shell +tortricid +tortuous +tortured +torturesome +torturing +torturous +torulose +tossing +total +totalitarian +totemic +tother +totipalmate +totipotent +tottering +tottery +touch-and-go +touchable +touched +touchier +touchiest +touching +touchy +tough +tough-minded +toughened +toughish +touring +tourist +touristic +touristy +tousled +tow-headed +towable +toward +towardly +towered +towering +towerless +towery +townish +townless +towy +toxemic +toxic +toxicant +toxicogenic +toxicologic +toxicological +toxophilite +toxophilitic +toyless +toylike +trabeate +trabeated +trabecular +trabeculate +traceable +traced +traceless +traceried +tracheal +trachytic +trachytoid +trackable +tracked +trackless +tractable +tractile +tractive +tractrix +trad +trade +trade-in +trade-union +traded +traditional +traditionalism +traditionalist +traditionalistic +traditive +traducianistic +trafficless +tragic +tragical +trailing +trainable +trained +trainless +traitorous +tralatitious +tramontane +tramping +trampled +trampling +tranquil +tranquilizing +transactional +transalpine +transatlantic +transcalent +transcendent +transcendental +transcendentalism +transcendentalist +transcontinental +transcribed +transcriptional +transcriptive +transeunt +transferable +transferential +transferrable +transfinite +transfixed +transformable +transformational +transformative +transformed +transformistic +transfusable +transfusible +transfusive +transgressive +transhuman +transhumant +transient +transilient +transisthmian +transistorized +transitional +transitionary +transitive +transitory +translatable +translational +translative +translucent +translucid +translunar +translunary +transmarine +transmigrant +transmissible +transmissive +transmittable +transmitted +transmittible +transmontane +transmundane +transmutable +transmutation +transnational +transoceanic +transonic +transpacific +transpadane +transparent +transpersonal +transpicuous +transpirable +transpiratory +transpiring +transplantable +transpolar +transpontine +transportable +transported +transportive +transposable +transposed +transpositional +transpositive +transsexual +transubstantial +transudatory +transuranic +transversal +transverse +transvestic +transvestite +trap-door +trapezial +trapeziform +trapezohedral +trapezoidal +traplike +trappean +trapped +trappy +trashy +traumatic +travel-sick +travel-soiled +travel-stained +traveled +traveling +travelled +traversable +traverse +treacherous +treacly +treasonable +treasonous +treasured +treated +treble +treed +treeless +treen +tref +trembling +trembly +tremendous +tremolant +tremolitic +tremulous +trenchant +trendy +trepid +trespassing +tressed +tressier +tressiest +tressured +tressy +triable +triacid +triadelphous +triadic +trial +trial-and-error +triangled +triangular +triangulate +triapsidal +triatomic +triaxial +tribadic +tribal +tribalism +tribasic +tribeless +triboelectric +triboluminescent +tribrachic +tribunicial +tribunitial +tributary +tricarpellary +tricentenary +tricentennial +trichinous +trichitic +trichoid +trichotomous +trichromatic +trichrome +trickier +trickiest +trickish +trickless +tricksier +tricksiest +tricksome +tricksy +tricky +triclinic +tricolor +tricorn +tricostate +tricrotic +tricuspid +tricuspidate +tricyclic +tridactyl +trident +tridentate +tridimensional +triecious +tried +triennial +triethyl +trifacial +trifid +trifling +trifocal +trifoliate +triform +trifurcate +trig +trigamous +trigeminal +trigger-happy +trigonal +trigonometric +trigonometrical +trigonous +trihedral +trihydric +trilateral +trilinear +trilingual +triliteral +trilled +trillion +trillionth +trilobate +trilobated +trilobed +trilocular +trim +trimeric +trimerous +trimestrial +trimeter +trimetric +trimmed +trimonthly +trimorphic +trimorphous +trinal +trinary +trine +trinomial +trioecious +tripartite +tripedal +tripersonal +tripetalous +triphibious +triphthongal +triphyllous +tripinnate +triple +triplex +triplicate +triploid +tripodal +trippant +tripping +tripterous +triquetrous +triradiate +trisomic +triste +tristful +tristichic +tristichous +trisyllabic +trisyllabical +tritanopic +trite +triter +tritest +tritheism +tritheist +tritheistic +tritheistical +triumphal +triumphant +triumviral +triune +trivalent +trivalve +trivial +trochaic +trochal +trochanteric +trochlear +trochoid +trochoidal +trodden +troglodytic +troglodytical +trollopy +tromometric +trompe-l'oeil +trophallactic +trophic +trophied +trophotropic +tropic +tropical +tropistic +tropologic +tropological +tropophilous +tropospheric +troppo +trothless +trouble-free +troubled +troubleshooter +troublesome +troubling +troublous +trousered +troy +truant +truceless +truculent +true +true-blue +true-born +true-life +truer +truffled +truistic +trumped-up +trumpery +truncate +truncated +trunnioned +trussed +trusted +trustful +trusting +trustless +trustworthy +trusty +truthful +truthless +trying +tryptic +tsarism +tsarist +tubal +tubate +tubbier +tubbiest +tubby +tubed +tubeless +tubelike +tubercular +tuberculate +tuberculose +tuberculous +tuberous +tubular +tubulate +tubuliflorous +tubulous +tucked +tufaceous +tuffaceous +tufted +tuitional +tuitionary +tularaemic +tularemic +tum +tumbling +tumefacient +tumescent +tumid +tumular +tumultuous +tunable +tuneable +tuned +tuneful +tuneless +tunicate +tuppenny +turbaned +turbellarian +turbid +turbinal +turbinate +turbo-electric +turbulent +turdine +turfier +turfiest +turfy +turgent +turgescent +turgid +turned +turning +turnover +turreted +turtleneck +tushed +tuskless +tussal +tussive +tutelar +tutelary +tutored +tutorial +tutti +tutti-frutti +twaddly +twee +tweedier +tweediest +tweedy +twelfth +twelve +twelve-tone +twelvefold +twentieth +twenty +twenty-first +twenty-five +twenty-four +twenty-one +twenty-twenty +twenty-two +twentyfold +twice-laid +twice-told +twiggier +twiggiest +twiggy +twilight +twilit +twill +twilled +twin +twin-screw +twined +twinkling +twinkly +twinned +twinning +twistable +twisted +twisting +twisty +twittery +two +two-a-penny +two-bit +two-dimensional +two-edged +two-faced +two-fisted +two-footed +two-handed +two-masted +two-piece +two-ply +two-sided +two-timing +two-tone +two-way +twofold +twopenny +twopenny-halfpenny +twp +tympanic +tympanitic +typal +type-high +typed +typewritten +typhoid +typhonic +typhous +typic +typical +typographic +typographical +typological +tyrannic +tyrannical +tyrannicidal +tyrannous +ubiquitarian +ubiquitous +ugly +ugsome +ulcerated +ulcerative +ulcerous +uliginous +ullaged +ulmaceous +ulnar +ulotrichous +ult +ulterior +ultimate +ultimo +ultra +ultrabasic +ultracentrifugal +ultrahigh-frequency +ultraism +ultraist +ultramarine +ultramicroscopic +ultramontane +ultramundane +ultrared +ultrashort +ultrasonic +ultraviolet +ululant +umbellar +umbellate +umbellated +umbellately +umbelliferous +umber +umbilical +umbilicate +umbonal +umbonate +umbrageous +umbral +umbrella +umbrose +umpteen +umpteenth +umptieth +un-American +un-English +unabashed +unabated +unabbreviated +unable +unabolished +unabridged +unabrogated +unabsolved +unacademic +unaccented +unaccentuated +unacceptable +unaccommodated +unaccommodating +unaccompanied +unaccomplished +unaccountable +unaccounted +unaccounted-for +unaccredited +unaccusable +unaccused +unaccustomed +unachievable +unaching +unacknowledged +unacquainted +unactable +unacted +unactuated +unadaptable +unadapted +unaddressed +unadjusted +unadmired +unadmiring +unadmitted +unadmonished +unadopted +unadored +unadorned +unadulterate +unadulterated +unadventurous +unadvertised +unadvisable +unadvised +unaffected +unaffecting +unaffiliated +unafraid +unaidable +unaided +unaimed +unaired +unalienable +unaligned +unalike +unallayed +unallied +unallotted +unallowable +unalloyed +unalterable +unaltered +unaltering +unamazed +unambiguous +unambitious +unamenable +unamendable +unamended +unamerced +unamiable +unamusable +unamused +unamusing +unanalytic +unanalytical +unanalyzable +unanalyzed +unanchored +unaneled +unanimated +unanimous +unannealed +unannotated +unannounced +unanswerable +unanswered +unanticipated +unanxious +unapologetic +unappalled +unapparelled +unapparent +unappealable +unappealing +unappeasable +unappeased +unappetising +unappetizing +unapplausive +unapplicable +unapplied +unappointed +unappreciated +unappreciative +unapprehended +unapprehensible +unapprehensive +unapprised +unapproachable +unapproached +unappropriated +unapproved +unapproving +unapt +unarguable +unargued +unarmed +unarmoured +unarranged +unartful +unarticulate +unarticulated +unartificial +unartistic +unary +unascendable +unascended +unascertainable +unascertained +unashamed +unasked +unaspirated +unaspiring +unassailable +unassailed +unassayed +unassertive +unassignable +unassigned +unassimilable +unassimilated +unassisted +unassisting +unassociated +unassuageable +unassumed +unassuming +unassured +unatoned +unattached +unattainable +unattained +unattainted +unattempted +unattended +unattentive +unattested +unattired +unattractive +unaugmented +unauspicious +unauthentic +unauthenticated +unauthorised +unauthoritative +unauthorized +unavailable +unavailing +unavenged +unavoidable +unavowed +unawakened +unawakening +unaware +unawed +unbacked +unbaffled +unbagged +unbailable +unbaked +unbalanced +unbanded +unbaptised +unbaptized +unbarbed +unbarbered +unbarking +unbarred +unbashful +unbated +unbathed +unbattered +unbearable +unbearded +unbearing +unbeatable +unbeaten +unbeautiful +unbecoming +unbedimmed +unbefitting +unbefriended +unbegged +unbeguiled +unbeguiling +unbeholden +unbeknown +unbeknownst +unbelievable +unbelieving +unbeloved +unbelted +unbendable +unbending +unbeneficed +unbeneficial +unbenefited +unbenign +unbenignant +unbent +unbeseeming +unbesought +unbespoken +unbestowed +unbetrayed +unbettered +unbewailed +unbiased +unbiassed +unbid +unbidden +unblamable +unblamed +unbleached +unblemished +unblenched +unblenching +unblended +unblent +unblessed +unblindfolded +unblinding +unblinking +unblissful +unblocked +unbloodied +unbloody +unblotted +unblown +unblunted +unblushing +unboastful +unbodied +unboding +unbolted +unboned +unbonneted +unbooked +unbookish +unbooted +unborn +unborne +unborrowed +unbought +unbound +unbounded +unbowed +unbraced +unbranched +unbreachable +unbreached +unbreakable +unbreathable +unbreathed +unbreathing +unbred +unbreeched +unbribable +unbridged +unbridled +unbroke +unbroken +unbrotherly +unbruised +unbrushed +unbudgeted +unbundled +unburdened +unburied +unburned +unburnished +unburnt +unburrowed +unbusinesslike +unbuttered +unbuttoned +uncaged +uncalculated +uncalculating +uncalled +uncalled-for +uncandid +uncanny +uncanonical +uncapable +uncapped +uncapsizable +uncared-for +uncaring +uncarpeted +uncarted +uncashed +uncatalogued +uncaught +uncaused +unceasing +uncelebrated +uncensored +uncensorious +uncensured +unceremonious +uncertain +uncertificated +uncertified +unchained +unchallengeable +unchallenged +unchancy +unchangeable +unchanged +unchanging +unchaperoned +uncharacteristic +uncharge +uncharged +uncharitable +uncharmed +uncharming +uncharted +unchartered +unchary +unchaste +unchastened +unchastisable +unchastised +uncheckable +unchecked +uncheered +uncheerful +unchewed +unchildlike +unchivalrous +unchosen +unchristened +unchristian +unchristianly +unchronicled +uncial +unciform +uncinate +uncircumcised +uncircumscribed +uncited +uncivil +uncivilized +unclad +unclaimed +unclassed +unclassical +unclassifiable +unclassified +unclean +uncleaned +uncleanly +uncleansed +unclear +uncleared +unclerical +unclimbable +unclimbed +unclipped +unclogged +uncloistered +unclothed +unclouded +uncloudy +uncloven +unclutched +uncluttered +unco +uncoated +uncocked +uncoiled +uncoined +uncollected +uncoloured +uncombed +uncombined +uncombining +uncomely +uncomfortable +uncomforted +uncommendable +uncommercial +uncommitted +uncommon +uncommunicative +uncommuted +uncompanionable +uncompanioned +uncompassionate +uncompelled +uncompensated +uncompetitive +uncomplaining +uncomplaisant +uncompleted +uncompliant +uncomplicated +uncomplimentary +uncomplying +uncomposable +uncompounded +uncomprehended +uncomprehending +uncomprehensive +uncompromising +unconcealed +unconcealing +unconceived +unconcerned +unconcerted +unconciliatory +unconditional +unconditioned +unconfederated +unconfessed +unconfinable +unconfined +unconfining +unconfirmed +unconformable +unconforming +unconfused +uncongenial +unconjectured +unconjugal +unconjunctive +unconnected +unconniving +unconquerable +unconquered +unconscientious +unconscionable +unconscious +unconsecrated +unconsentaneous +unconsenting +unconsidered +unconsidering +unconsoled +unconsolidated +unconstant +unconstitutional +unconstrainable +unconstrained +unconsumed +unconsummated +uncontaminated +uncontemned +uncontemplated +uncontentious +uncontestable +uncontested +uncontradicted +uncontrived +uncontrollable +uncontrolled +uncontroversial +uncontroverted +uncontrovertible +unconventional +unconversable +unconversant +unconverted +unconvertible +unconvicted +unconvinced +unconvincing +uncooked +uncooperative +uncoordinated +uncoquettish +uncordial +uncorrected +uncorroborated +uncorrupt +uncorrupted +uncorseted +uncostly +uncounselled +uncountable +uncounted +uncoupled +uncourtly +uncouth +uncovenanted +uncovered +uncrated +uncreated +uncreditable +uncritical +uncropped +uncross +uncrossed +uncrowded +uncrowned +uncrumpled +uncrumpling +uncrushable +uncrystallisable +uncrystallizable +uncrystallized +unctuous +unculled +uncultivable +uncultivatable +uncultivated +uncultured +uncumbered +uncurable +uncurbable +uncurbed +uncurdled +uncured +uncurious +uncurled +uncurrent +uncursed +uncursing +uncurtailed +uncurtained +uncurved +uncustomary +uncut +undamaged +undamped +undated +undaunted +undawning +undazzled +undazzling +undeaf +undealt +undebased +undebauched +undecayed +undeceivable +undeceived +undecided +undecipherable +undecked +undeclared +undeclining +undecomposable +undecomposed +undeeded +undefaced +undefeated +undefended +undefied +undefiled +undefinable +undefined +undeified +undelayed +undelaying +undelectable +undelegated +undeliberate +undelighted +undelightful +undeliverable +undelivered +undeluded +undemanding +undemocratic +undemonstrable +undemonstrative +undeniable +undenominational +undependable +undeplored +undepraved +undepreciated +undepressed +undeprived +under +under-the-counter +underarm +underbred +underclad +underclass +underclothed +undercoated +undercover +underdeveloped +underdone +underdressed +underemployed +underfed +underfired +underfloor +underglaze +undergraduette +underground +undergrown +underhand +underhanded +underhung +underlaid +underlying +undermanned +undermasted +undermentioned +undermost +undernamed +underneath +undernoted +undernourished +underpeopled +underpowered +underproof +undersea +undersealed +undersexed +undershot +undersigned +undersized +underslung +underspent +understaffed +understandable +understanding +understated +understood +underwater +underweight +underwrought +undescendable +undescended +undescendible +undescribable +undescribed +undescried +undeserved +undeserving +undesigned +undesigning +undesirable +undesired +undesiring +undesirous +undespairing +undespoiled +undestroyed +undetectable +undetected +undeterminable +undetermined +undeterred +undeveloped +undeviating +undevout +undiagnosed +undifferentiated +undigested +undignified +undiluted +undiminishable +undiminished +undimmed +undiplomatic +undipped +undirected +undisappointing +undiscerned +undiscernible +undiscerning +undischarged +undisciplinable +undisciplined +undisclosed +undiscomfited +undiscordant +undiscording +undiscouraged +undiscoverable +undiscovered +undiscriminating +undiscussable +undiscussed +undisguisable +undisguised +undismantled +undismayed +undisordered +undispatched +undispensed +undisposed +undisputed +undissembled +undissociated +undissolved +undissolving +undistempered +undistilled +undistinguishable +undistinguished +undistinguishing +undistorted +undistracted +undistracting +undistributed +undisturbed +undisturbing +undiversified +undiverted +undivested +undividable +undivided +undivorced +undivulged +undocked +undoctored +undocumented +undomestic +undomesticated +undone +undoubtable +undoubted +undoubtful +undoubting +undrainable +undrained +undramatic +undraped +undrawn +undreaded +undreading +undreamed +undreamed-of +undreaming +undreamt +undress +undressed +undried +undrilled +undrinkable +undriven +undrooping +undrossy +undrowned +undrunk +undubbed +undue +undug +undulant +undulate +undulatory +undulled +unduteous +undutiful +undyed +undying +unearned +unearthly +uneasy +uneatable +uneaten +uneclipsed +uneconomic +uneconomical +unedifying +unedited +uneducable +uneducated +uneffaced +uneffected +unelaborate +unelaborated +unelated +unelected +unelectrified +unembarrassed +unembellished +unembittered +unembodied +unemotional +unemotioned +unemphatic +unemployable +unemployed +unemptied +unenchanted +unenclosed +unencumbered +unendangered +unendeared +unending +unendowed +unendurable +unenforceable +unenforced +unengaged +unenjoyable +unenlightened +unenquiring +unenriched +unenslaved +unentailed +unentered +unenterprising +unentertained +unentertaining +unenthralled +unenthusiastic +unentitled +unenviable +unenvied +unenvious +unenvying +unequable +unequal +unequaled +unequalled +unequipped +unequivocal +unerasable +unerring +unescapable +unescorted +unespied +unessayed +unessential +unestablished +unethical +unevangelical +uneven +uneventful +unevidenced +unexacting +unexaggerated +unexalted +unexamined +unexampled +unexcavated +unexcelled +unexceptionable +unexceptional +unexcitable +unexcited +unexciting +unexcluded +unexclusive +unexecuted +unexercised +unexhausted +unexpanded +unexpectant +unexpected +unexperienced +unexpiated +unexpired +unexplainable +unexplained +unexploited +unexplored +unexposed +unexpressed +unexpressible +unexpressive +unexpurgated +unextended +unextenuated +unextinct +unextinguishable +unextinguished +unextreme +unfabled +unfadable +unfaded +unfading +unfailing +unfair +unfaithful +unfallen +unfaltering +unfamiliar +unfanned +unfashionable +unfashioned +unfastened +unfastidious +unfathered +unfatherly +unfathomable +unfathomed +unfaulty +unfavorable +unfavourable +unfeared +unfearful +unfearing +unfeasible +unfeathered +unfeatured +unfed +unfeeling +unfeigned +unfeigning +unfelled +unfelt +unfeminine +unfenced +unfermented +unfertilised +unfertilized +unfettered +unfeudal +unfiled +unfilial +unfilled +unfilmed +unfilterable +unfiltered +unfine +unfinished +unfired +unfirm +unfished +unfit +unfitted +unfitting +unfixed +unflagging +unflappable +unflattering +unflavoured +unflawed +unfledged +unfleshly +unflinching +unflushed +unflustered +unfocused +unfocussed +unfolded +unfooled +unfooling +unforbidden +unforced +unforcible +unfordable +unforeboding +unforeknowable +unforeknown +unforeseeable +unforeseeing +unforeseen +unforested +unforetold +unforewarned +unforfeited +unforged +unforgettable +unforgivable +unforgiven +unforgiving +unforgotten +unformalised +unformalized +unformed +unformidable +unformulated +unforsaken +unfortified +unfortunate +unfossiliferous +unfossilised +unfossilized +unfostered +unfought +unfound +unfounded +unframed +unfranchised +unfraught +unfree +unfrequent +unfrequented +unfretted +unfriended +unfriendly +unfrighted +unfrightened +unfrozen +unfructuous +unfruitful +unfuelled +unfulfilled +unfunded +unfunny +unfurnished +unfurred +unfurrowed +ungainful +ungainly +ungainsaid +ungallant +ungalled +ungarbled +ungarmented +ungarnered +ungarnished +ungathered +ungauged +ungeared +ungenerous +ungenial +ungenteel +ungentle +ungentlemanlike +ungentlemanly +ungenuine +ungermane +ungetatable +unghostly +ungifted +ungilded +ungilt +ungirthed +ungiving +unglad +unglazed +unglossed +ungloved +ungodlier +ungodliest +ungodlike +ungodly +ungored +ungorged +ungotten +ungovernable +ungoverned +ungowned +ungraced +ungraceful +ungracious +ungraded +ungrammatical +ungrassed +ungrateful +ungratified +ungrazed +ungroomed +unground +ungrounded +ungrown +ungrudged +ungrudging +ungual +unguarded +unguentary +unguerdoned +unguessed +unguiculate +unguiculated +unguided +ungulate +unguled +unguligrade +ungummed +ungyved +unhabitable +unhabituated +unhacked +unhackneyed +unhailed +unhallowed +unhampered +unhandled +unhandseled +unhandsome +unhanged +unhanging +unhappier +unhappy +unharboured +unhardened +unharmed +unharmful +unharming +unharmonious +unharvested +unhasting +unhasty +unhatched +unhaunted +unhazarded +unhazardous +unheaded +unhealable +unhealed +unhealthful +unhealthier +unhealthiest +unhealthy +unheard +unheard-of +unheated +unheeded +unheedful +unheeding +unhelmeted +unhelpable +unhelped +unhelpful +unheralded +unheroic +unheroical +unhesitating +unhewn +unhidden +unhindered +unhinged +unhired +unhistoric +unhistorical +unhoarded +unhoarding +unholy +unhomely +unhonoured +unhooped +unhoped +unhoped-for +unhopeful +unhorsed +unhouseled +unhuman +unhumbled +unhung +unhunted +unhurried +unhurrying +unhurt +unhurtful +unhusbanded +unhusked +unhygienic +unhyphenated +uniaxial +unicameral +unicellular +unicolor +unicostate +unideal +unidealistic +unidentifiable +unidentified +unidiomatic +unidirectional +unific +unified +unifilar +uniflorous +unifoliate +unifoliolate +uniform +uniformed +uniformitarian +unifying +unilateral +unilateralist +unilingual +uniliteral +unillumed +unilluminated +unilluminating +unillustrated +unilobed +unilocular +unimaginable +unimaginative +unimagined +unimbued +unimpaired +unimparted +unimpassioned +unimpeachable +unimpeached +unimpeded +unimplored +unimportant +unimportuned +unimposed +unimposing +unimpregnated +unimpressed +unimpressible +unimpressionable +unimpressive +unimprisoned +unimproved +unimpugnable +uninaugurated +unincited +uninclosed +unincorporated +unincumbered +unindexed +uninfected +uninflamed +uninflammable +uninflated +uninflected +uninfluenced +uninfluential +uninformative +uninformed +uninforming +uninhabitable +uninhabited +uninhibited +uninitiated +uninjured +uninquiring +uninquisitive +uninscribed +uninspired +uninspiring +uninstructed +uninstructive +uninsured +unintegrated +unintellectual +unintelligent +unintelligible +unintended +unintentional +uninterested +uninteresting +unintermitted +unintermitting +uninterpretable +uninterrupted +unintoxicating +unintroduced +uninucleate +uninured +uninventive +uninvested +uninvidious +uninvited +uninviting +uninvolved +union +unionist +unionized +uniparous +unipersonal +uniplanar +unipolar +unique +uniramous +unironed +unisex +unisexual +unitary +united +unitive +univalent +univalve +universal +universalist +universalistic +universitarian +univocal +unjaded +unjaundiced +unjealous +unjointed +unjoyful +unjoyous +unjust +unjustifiable +unjustified +unkempt +unkenned +unkept +unkind +unkindled +unkindly +unkinged +unkinglike +unkingly +unkissed +unknelled +unknighted +unknightly +unknowable +unknowing +unknown +unlabelled +unlaborious +unlaboured +unlabouring +unlaced +unladen +unladylike +unlaid +unlamented +unlatched +unlawful +unleaded +unlearned +unlearning +unlearnt +unleased +unleavened +unled +unleisured +unleisurely +unlet +unlettered +unlibidinous +unlicensed +unlidded +unlifelike +unlighted +unlightened +unlikable +unlike +unlikeable +unlikely +unlimed +unlimited +unlineal +unlined +unliquefied +unliquidated +unlisted +unlistening +unlit +unliterary +unlivable +unliveable +unlively +unliving +unloaded +unloading +unlocated +unlockable +unlocked +unlogical +unlooked +unlooked-for +unlopped +unlosable +unlost +unlovable +unloveable +unloved +unlovely +unloving +unluckier +unluckiest +unlucky +unluxuriant +unluxurious +unmacadamized +unmade +unmaidenly +unmailable +unmailed +unmaimed +unmaintainable +unmaintained +unmakable +unmalicious +unmalleable +unmanacled +unmanageable +unmanaged +unmanlike +unmanly +unmanned +unmannered +unmannerly +unmantled +unmanufactured +unmarked +unmarketable +unmarred +unmarriageable +unmarried +unmarrying +unmasculine +unmasked +unmasking +unmastered +unmatchable +unmatched +unmated +unmaterial +unmaterialised +unmaterialized +unmaternal +unmathematical +unmatriculated +unmatured +unmeaning +unmeant +unmeasurable +unmeasured +unmechanical +unmechanised +unmechanized +unmeditated +unmeet +unmellowed +unmelodious +unmelted +unmemorable +unmentionable +unmentioned +unmercenary +unmerchantable +unmerciful +unmeritable +unmerited +unmeriting +unmet +unmetalled +unmetaphysical +unmeted +unmethodical +unmethodised +unmethodized +unmetrical +unmilitary +unmilked +unmilled +unmindful +unmingled +unministerial +unmiraculous +unmiry +unmissable +unmissed +unmistakable +unmistrustful +unmitigable +unmitigated +unmixed +unmoaned +unmodernised +unmodernized +unmodifiable +unmodified +unmodish +unmodulated +unmolested +unmoral +unmoralising +unmoralizing +unmortgaged +unmortified +unmotherly +unmotivated +unmounted +unmounting +unmourned +unmovable +unmoveable +unmoved +unmoving +unmown +unmunitioned +unmurmuring +unmusical +unmutilated +unnamable +unnameable +unnamed +unnative +unnatural +unnaturalized +unnavigable +unnavigated +unnecessariness +unnecessary +unneeded +unneedful +unneighbourly +unnerved +unnerving +unnetted +unnoted +unnoticeable +unnoticed +unnoticing +unnourished +unnourishing +unnumbered +unnurtured +unobeyed +unobjectionable +unobnoxious +unobscured +unobservable +unobservant +unobserved +unobserving +unobstructed +unobstructive +unobtainable +unobtained +unobtrusive +unobvious +unoccupied +unoffended +unoffending +unoffensive +unoffered +unofficered +unofficial +unofficious +unoiled +unopened +unoperative +unopposed +unoppressive +unordained +unordered +unorderly +unordinary +unorganized +unoriginal +unornamental +unornamented +unorthodox +unorthodoxy +unossified +unostentatious +unovercome +unoverthrown +unowned +unoxidised +unoxidized +unpaced +unpacified +unpaged +unpaid +unpained +unpainful +unpaintable +unpainted +unpaired +unpalatable +unpalsied +unpampered +unpanelled +unpapered +unparallel +unparalleled +unpardonable +unpardoned +unpardoning +unpared +unparental +unparented +unparliamentary +unpassable +unpassionate +unpassioned +unpasteurised +unpasteurized +unpastoral +unpastured +unpatented +unpathetic +unpatriotic +unpatronized +unpatterned +unpaved +unpavilioned +unpayable +unpaying +unpeaceable +unpeaceful +unpedigreed +unpeeled +unpennied +unpensioned +unpent +unpeopled +unpeppered +unperceivable +unperceived +unperceptive +unperched +unperfect +unperforated +unperformed +unperforming +unperfumed +unperilous +unperishable +unperished +unperishing +unperjured +unperpetrated +unperplexed +unperplexing +unpersecuted +unpersuadable +unpersuaded +unpersuasive +unperturbed +unperverted +unphilosophic +unphilosophical +unphonetic +unpickable +unpicked +unpierced +unpillared +unpillowed +unpiloted +unpitied +unpitiful +unpitying +unplaced +unplagued +unplanked +unplanned +unplanted +unplausible +unplayable +unplayed +unpleasant +unpleased +unpleasing +unpleasurable +unpleated +unpledged +unpliable +unpliant +unploughed +unplucked +unplumb +unplumbed +unplumed +unpoetic +unpoetical +unpointed +unpoised +unpoisoned +unpolarised +unpolarized +unpoliced +unpolishable +unpolished +unpolite +unpolitic +unpolitical +unpolled +unpolluted +unpopular +unpopulated +unpopulous +unportioned +unposed +unpossessed +unpossessing +unposted +unpotable +unpowdered +unpracticable +unpractical +unpracticed +unpractised +unpraised +unpraiseworthy +unpraising +unpraying +unpreached +unpreaching +unprecedented +unprecise +unpredictable +unpreferred +unpregnant +unprejudiced +unpremeditated +unpreoccupied +unprepared +unpreparing +unprepossessing +unprescribed +unpresentable +unpressed +unpresuming +unpresumptuous +unpretentious +unpretty +unprevailing +unpreventable +unprevented +unpriced +unpriestly +unprimed +unprincely +unprincipled +unprintable +unprinted +unprivileged +unprizable +unprized +unprocessed +unproclaimed +unprocurable +unproduced +unproductive +unprofaned +unprofessed +unprofessional +unprofitable +unprofited +unprofiting +unprogressive +unprohibited +unprojected +unprolific +unpromised +unpromising +unprompted +unpronounceable +unpronounced +unproper +unpropertied +unprophetic +unprophetical +unpropitious +unproportionable +unproportionate +unproportioned +unproposed +unpropped +unprosperous +unprotected +unprotested +unprotesting +unprovable +unproved +unproven +unprovided +unprovident +unprovisioned +unprovocative +unprovoked +unprovoking +unpruned +unpublished +unpuckered +unpunctual +unpunctuated +unpunishable +unpunished +unpurchasable +unpurchased +unpurged +unpurified +unpurposed +unpursued +unputdownable +unqualifiable +unqualified +unqualifying +unquantified +unquarried +unqueenly +unquelled +unquenchable +unquenched +unquestionable +unquestioned +unquestioning +unquickened +unquiet +unquieted +unquieting +unquotable +unquoted +unraised +unraked +unraking +unransomed +unrated +unratified +unravished +unrazored +unreachable +unreached +unreactive +unread +unreadable +unready +unreal +unrealistic +unrealized +unreaped +unreasonable +unreasoned +unreasoning +unreaving +unrebated +unrebuked +unrecallable +unrecalled +unreceipted +unreceptive +unreciprocated +unreckonable +unreckoned +unreclaimable +unreclaimed +unrecognisable +unrecognizable +unrecognized +unrecognizing +unrecollected +unrecommendable +unrecommended +unrecompensed +unreconcilable +unreconciled +unreconstructed +unrecorded +unrecounted +unrecoverable +unrectified +unredeemable +unredeemed +unredressed +unreduced +unreducible +unreeling +unrefined +unreflected +unreflecting +unreflective +unreformable +unreformed +unrefracted +unrefreshed +unrefreshing +unrefuted +unregarded +unregenerate +unregenerated +unregimented +unregistered +unregulated +unrehearsed +unreined +unrejoiced +unrejoicing +unrelated +unrelative +unrelaxed +unreleased +unrelenting +unreliable +unrelievable +unrelieved +unreligious +unrelished +unreluctant +unremaining +unremarkable +unremarked +unremedied +unremembered +unremembering +unremitted +unremitting +unremorseful +unremovable +unremoved +unremunerative +unrendered +unrenewed +unrenowned +unrent +unrepaid +unrepaired +unrepealable +unrepealed +unrepeatable +unrepeated +unrepelled +unrepentant +unrepented +unrepenting +unrepining +unreplaceable +unreplenished +unreportable +unreported +unreposeful +unreposing +unrepresentative +unrepresented +unreprievable +unreprieved +unreprimanded +unreproached +unreproachful +unreproaching +unreproducible +unreprovable +unreproved +unreproving +unrepugnant +unrequired +unrequisite +unrequited +unrescinded +unresented +unresentful +unresenting +unreserved +unresisted +unresistible +unresisting +unresolvable +unresolved +unrespected +unrespited +unresponsive +unrestful +unresting +unrestored +unrestrainable +unrestrained +unrestricted +unretarded +unretentive +unretouched +unreturnable +unreturned +unreturning +unrevealable +unrevealed +unrevealing +unrevenged +unrevengeful +unreverent +unreversed +unreverted +unrevised +unrevoked +unrewarded +unrewarding +unrhymed +unrhythmical +unribbed +unridable +unridden +unriddled +unrifled +unrigged +unrighteous +unrightful +unrimed +unripe +unripened +unrisen +unrivalled +unriven +unriveted +unriveting +unrolled +unromantic +unroofed +unroped +unrotted +unrotten +unrouged +unrounded +unroused +unrubbed +unrude +unruffable +unruffled +unruled +unruly +unrumpled +unsaddled +unsafe +unsaid +unsailed +unsainted +unsaintly +unsalable +unsalaried +unsaleable +unsalted +unsaluted +unsalvageable +unsanctified +unsanctifying +unsanctioned +unsandalled +unsanitary +unsapped +unsashed +unsatable +unsated +unsatiable +unsatiated +unsatiating +unsating +unsatirical +unsatisfactory +unsatisfiable +unsatisfied +unsatisfying +unsaturated +unsaved +unsavoury +unsayable +unscalable +unscaled +unscaling +unscanned +unscarred +unscathed +unscented +unsceptred +unscheduled +unscholarlike +unscholarly +unschooled +unscientific +unscissored +unscorched +unscoured +unscratched +unscreened +unscripted +unscriptural +unscrupled +unscrupulous +unscrutinised +unscrutinized +unsculptured +unsealed +unseamed +unsearchable +unsearched +unseasonable +unseasoned +unseaworthy +unseconded +unsectarian +unsecular +unsecured +unseduced +unseeable +unseeded +unseeing +unseemly +unseen +unsegmented +unsegregated +unseizable +unseized +unselfconscious +unselfish +unsensational +unsensed +unsensible +unsensing +unsensitive +unsensualised +unsensualized +unsent +unsentenced +unsentimental +unseparable +unseparated +unserious +unserviceable +unset +unsetting +unsettled +unsevered +unsexed +unsexual +unshackled +unshaded +unshadowable +unshadowed +unshakable +unshakeable +unshaken +unshamed +unshaped +unshapely +unshapen +unshaping +unshared +unsharpened +unshaved +unshaven +unsheathed +unshed +unshedding +unsheltered +unshielded +unshifting +unshingled +unshipped +unshockable +unshocked +unshod +unshoed +unshorn +unshouted +unshouting +unshowered +unshown +unshrinkable +unshrinking +unshrived +unshriven +unshunnable +unshunned +unshut +unshuttered +unsicker +unsifted +unsighing +unsight +unsighted +unsightly +unsigned +unsinewed +unsinewing +unsinkable +unsistered +unsisterly +unsizable +unsizeable +unsized +unskilful +unskilled +unskillful +unskimmed +unskinned +unslain +unslaked +unsleeping +unsliced +unslipping +unsluiced +unslumbering +unslumbrous +unslung +unsmiling +unsmirched +unsmitten +unsmooth +unsmoothed +unsmotherable +unsnarled +unsnuffed +unsoaped +unsociable +unsocial +unsocialised +unsocialized +unsocially +unsocketed +unsoft +unsoftening +unsoiled +unsolaced +unsold +unsoldierlike +unsoldierly +unsolemn +unsolicited +unsolicitous +unsolid +unsolvable +unsolved +unsonsy +unsophisticated +unsorted +unsought +unsound +unsoundable +unsounded +unsoured +unsown +unspared +unsparing +unsparred +unspeakable +unspecialised +unspecialized +unspecific +unspecified +unspectacled +unspectacular +unspeculative +unspelled +unspent +unspied +unspilled +unspilt +unspirited +unspiritual +unspiritualised +unspiritualising +unspiritualized +unspiritualizing +unspoiled +unspoilt +unspoken +unsporting +unsportsmanlike +unspotted +unsprinkled +unsprung +unspun +unsquared +unstable +unstack +unstacked +unstaid +unstainable +unstained +unstamped +unstanchable +unstarched +unstated +unstatesmanlike +unstaunchable +unstaying +unsteadfast +unsteady +unsterile +unsterilized +unstifled +unstigmatised +unstigmatized +unstilled +unstimulated +unstinted +unstinting +unstirred +unstitched +unstitching +unstocked +unstockinged +unstooping +unstoppable +unstopped +unstoppered +unstrained +unstratified +unstreamed +unstrengthened +unstressed +unstriated +unstringed +unstriped +unstripped +unstructured +unstrung +unstuck +unstudied +unstuffed +unstuffy +unsubduable +unsubdued +unsubject +unsubjected +unsublimated +unsublimed +unsubmerged +unsubmissive +unsubmitting +unsubscribed +unsubsidized +unsubstantial +unsubstantiated +unsubtle +unsucceeded +unsuccessful +unsuccessive +unsucked +unsufferable +unsuitable +unsuited +unsuiting +unsullied +unsummoned +unsung +unsunny +unsuperfluous +unsupervised +unsupple +unsupplied +unsupportable +unsupported +unsupposable +unsuppressed +unsure +unsurfaced +unsurmised +unsurmountable +unsurpassable +unsurpassed +unsurprised +unsurveyed +unsusceptible +unsuspected +unsuspecting +unsuspended +unsuspicious +unsustainable +unsustained +unsustaining +unswaddled +unswaddling +unswallowed +unswayable +unswayed +unsweet +unsweetened +unswept +unswerving +unsworn +unsyllabled +unsymmetrical +unsymmetrized +unsympathetic +unsympathising +unsympathizing +unsystematic +unsystematical +unsystematised +unsystematized +untackling +untailed +untainted +untainting +untalented +untamable +untame +untameable +untamed +untangible +untangled +untanned +untapped +untarnished +untarred +untasted +untasteful +untaught +untaxed +untaxing +unteachable +unteamed +untearable +untechnical +untellable +untempered +untempering +untempted +untenable +untenantable +untenanted +untended +untendered +unterminated +unterrestrial +unterrified +unterrifying +untested +untethered +untethering +unthanked +unthankful +unthawed +unthawing +untheological +unthinkable +unthinking +unthorough +unthought +unthought-of +unthoughtful +unthreaded +unthrifty +untidied +untidier +untidiest +untidy +untidying +untied +untiled +untillable +untilled +untimbered +untimely +untimeous +untinctured +untinged +untinned +untired +untiring +untitled +untoiling +untold +untombed +untoned +untormented +untorn +untortured +untouchable +untouched +untoward +untraceable +untraced +untracked +untractable +untraded +untrained +untrammelled +untrampled +untranquil +untransferable +untransformed +untranslatable +untranslated +untransmigrated +untransmissible +untransmitted +untransmutable +untransmuted +untransparent +untravelled +untraversable +untraversed +untreasured +untreatable +untreated +untrembling +untremendous +untremulous +untrenched +untrespassing +untressed +untried +untrimmed +untrod +untrodden +untroubled +untrue +untrustful +untrustworthy +untrusty +untruthful +untucked +untumbled +untumultuous +untunable +untuneable +untuneful +unturbid +unturfed +unturnable +unturned +unturning +untutored +untwisted +untypical +unurged +unusable +unused +unuseful +unushered +unusual +unutilized +unutterable +unuttered +unvaccinated +unvaluable +unvalued +unvanquishable +unvanquished +unvariable +unvaried +unvariegated +unvarnished +unvarying +unveiled +unvendible +unvenerable +unvented +unventilated +unveracious +unverifiable +unverified +unversed +unvexed +unviable +unviewed +unviolated +unvirtuous +unvisitable +unvisited +unvisored +unvital +unvitiated +unvitrifiable +unvitrified +unvizarded +unvocal +unvocalised +unvocalized +unvoiced +unvulgar +unvulnerable +unwaked +unwakened +unwandering +unwanted +unwarlike +unwarmed +unwarned +unwarped +unwarrantable +unwarranted +unwary +unwashed +unwasted +unwatched +unwatchful +unwatered +unwatery +unwavering +unweakened +unweaned +unweaponed +unwearable +unwearied +unweary +unwearying +unweathered +unwebbed +unwed +unwedded +unweeded +unweened +unweighed +unweighing +unwelcome +unwelcomed +unwell +unwept +unwet +unwetted +unwhipped +unwholesome +unwieldy +unwifelike +unwifely +unwilled +unwilling +unwinding +unwinged +unwinking +unwinnowed +unwiped +unwired +unwise +unwished +unwished-for +unwishful +unwitched +unwithdrawing +unwithered +unwithering +unwithheld +unwithholding +unwithstood +unwitnessed +unwitting +unwitty +unwomanly +unwon +unwonted +unwooded +unwooed +unworkable +unworked +unworking +unworkmanlike +unworldly +unworn +unworried +unworshipped +unworthy +unwound +unwounded +unwoven +unwrapped +unwrinkled +unwriting +unwritten +unwrought +unwrung +unyielding +unzealous +up-and-coming +up-and-down +up-and-over +up-market +up-to-date +up-to-the-minute +upbeat +upbound +upbraiding +upcast +upcoming +upcurved +upended +upgrade +uphill +upland +uplifted +upmost +upper +upper-case +upper-class +uppermost +uppish +uppity +upraised +upright +upriver +uproarious +upscale +upset +upsetting +upside-down +upstage +upstaged +upstaging +upstair +upstairs +upstanding +upstart +upstate +upstream +uptight +uptown +upturned +upward +upwind +uraemia +uranic +uranitic +uranographic +uranographical +uranous +uranylic +urban +urbane +urbanistic +urbanized +urceolate +urdy +uredinial +uremic +ureteral +ureteric +urethral +urethritic +urethroscopic +uretic +urgent +uric +urinant +urinary +uriniferous +urinogenital +urinous +urnfield +urochord +urochordal +urodele +urogenital +urogenous +urolithic +uropygial +ursine +urticaceous +urticant +urticate +usable +useable +used +used-up +useful +useless +usual +usufruct +usufructuary +usurious +usurpative +usurped +uterine +utile +utilitarian +utility +utilizable +utilized +utmost +utopian +utricular +utter +utterable +uttered +utterless +uttermost +uveal +uveous +uvular +uxorial +uxoricidal +uxorilocal +uxorious +vacant +vacationless +vaccinal +vaccinated +vaccinial +vacillant +vacillating +vacillatory +vacuolar +vacuolate +vacuolated +vacuous +vacuum-packed +vadose +vagabond +vagabondish +vagal +vagarious +vagile +vaginal +vaginate +vagrant +vagrom +vague +vaguer +vaguest +vain +vainglorious +valanced +valedictory +valerianaceous +valetudinarian +valgus +valiant +valid +validated +validating +vallecular +valleculate +valorous +valuable +value-added +valued +valueless +valval +valvar +valvate +valved +valvular +vambraced +vampiric +vanadic +vanadous +vaned +vaneless +vanished +vanishing +vanquishable +vanquished +vanward +vapid +vaporific +vaporing +vaporizable +vaporized +vaporous +vapory +vapouring +vapourish +vapoury +variable +variant +variational +variative +varicelloid +varicolored +varicoloured +varicose +varied +variegated +varietal +variform +variolate +variolitic +varioloid +variolous +variorum +various +varnished +varus +varying +vascular +vasiform +vasoconstrictive +vasoconstrictor +vasodilator +vasomotor +vassal +vast +vasty +vatic +vaticinal +vaulted +vaulting +vaunted +vaunting +vaunty +vectorial +vee +vegetable +vegetal +vegetarian +vegetative +vegetive +vehement +vehicular +veiled +veilless +veined +veinier +veiniest +veiny +velar +velate +vellum +veloce +velutinous +velvet +velvety +venal +venatic +venational +vendible +venerable +venerated +venerating +venereal +vengeful +venial +venomed +venomous +venose +venous +vented +ventilable +ventilated +ventilative +ventose +ventral +ventricose +ventricous +ventricular +ventriloquial +ventriloquistic +venturesome +venturous +veracious +verbal +verbalized +verbatim +verbenaceous +verbless +verbose +verboten +verdant +verecund +veridical +verier +veriest +verifiable +verificatory +verified +verifying +verisimilar +verism +verist +veristic +veritable +vermicidal +vermicular +vermiculate +vermiculated +vermiform +vermifuge +vermilion +vermillion +verminous +vermivorous +vernacular +vernal +verrucose +verrucous +versatile +versed +versicular +versional +vertebral +vertebrate +vertebrated +vertical +verticillate +verticillated +vertiginous +very +vesical +vesicant +vesicatory +vesicular +vesiculate +vespertine +vespine +vestal +vested +vestiary +vestibular +vestigial +vestmental +vestmented +vestral +veteran +veterinary +vexatious +vexed +vexillary +vexing +viable +vibrant +vibrating +vibrational +vibrationless +vibrative +vibratory +vibronic +vicarial +vicarious +vice +vice-presidential +vicegerent +viceless +vicenary +vicennial +vicinal +vicious +vicissitudinous +victimized +victorious +victoryless +victualless +viewable +viewier +viewiest +viewless +viewy +vigesimal +vigesimo-quarto +vigilant +vigorous +vile +villager +villainous +villatic +villiform +villose +villous +vimineous +vinaceous +vinaigrette +vincible +vindicable +vindicated +vindicatory +vindictive +vinegarish +vinegary +vinicultural +vinous +vintage +viny +violable +violaceous +violate +violated +violative +violent +violet +violinistic +viperine +viperish +viperous +viral +virescent +virgate +virgin +virginal +virgulate +viricidal +viridescent +virile +virological +virtual +virtueless +virtuosic +virtuosity +virtuoso +virtuous +virucidal +virulent +visaged +visceral +viscerotonic +viscid +viscoelastic +viscometric +viscose +viscosimetric +viscous +visible +visional +visionary +visionless +visitant +visitatorial +visiting +visitorial +visored +vistaless +visual +visualized +vital +vitalism +vitalizing +vitelline +vitiable +vitiated +vitreous +vitrescent +vitrescible +vitreum +vitric +vitrifiable +vitrified +vitriform +vitriolic +vituline +vituperative +vivace +vivacious +viverrine +vivid +viviparous +vivisectional +vivo +vixen +vixenish +vixenly +vizarded +vizierial +vizirial +vocable +vocal +vocalic +vocational +vocative +vociferant +vociferous +voetstoots +vogie +vogue +voguish +voiced +voiceful +voiceless +void +voidable +voided +volant +volante +volar +volatile +volatilisable +volatilizable +volatilized +volcanic +volcanological +volitant +volitational +volitional +volitionary +volitionless +volitive +voltaic +voluble +volumed +volumetric +volumetrical +voluminous +voluntarism +voluntary +volunteer +voluptuary +voluptuous +volute +voluted +volvate +vomerine +vomitory +voodooistic +voracious +vorant +vortical +vorticose +vortiginous +votary +voteless +votive +vowelless +voyeuristic +vulcanian +vulcanisable +vulcanizable +vulcanized +vulcanological +vulgar +vulgate +vulned +vulnerable +vulnerary +vulpine +vulturine +vulturous +vulval +vulvar +vying +wackier +wackiest +wacky +wafer-thin +wafery +wage-earning +wageless +waggish +waggly +wailful +wailing +wainscoted +waist-deep +waisted +waiting +wakeful +wakeless +wakerife +waking +wale +walk-in +walk-on +walk-up +walking +wall-less +wall-to-wall +walled +walloping +wally +walnut +wambly +wan +wanchancy +wandering +wandle +waney +wanier +waniest +waning +wanner +wannest +wanning +wannish +wanted +wanting +wanton +war +war-torn +war-worn +warded +ware +warier +wariest +warlike +warm +warm-blooded +warm-hearted +warmed +warmed-over +warming +warmish +warning +warped +warragal +warrantable +warranted +warrigal +warring +wartier +wartiest +wartless +wartlike +warty +wary +wash-and-wear +washable +washed +washed-out +washed-up +washier +washiest +washy +wasp-waisted +waspier +waspiest +waspish +waspy +wastable +waste +wasted +wasteful +wasting +watchful +water-cooled +water-gas +water-repellent +water-resistant +water-soluble +water-supply +watercress +watered +watered-down +waterish +waterless +waterlog +waterlogged +waterproof +waterproofed +watertight +watery +wattle +waugh +waur +waved +waveless +wavelike +wavering +wavier +waviest +waving +wavy +waxed +waxen +waxier +waxiest +waxing +waxy +way-out +wayfarer +wayfaring +wayless +wayward +wayworn +weak +weak-kneed +weak-minded +weak-willed +weakened +weakening +weakly +wealthier +wealthiest +wealthy +weaned +weaponed +weaponless +wearable +wearied +wearier +weariest +weariful +weariless +wearing +wearish +wearisome +weary +wearying +weather +weather-beaten +weather-bound +weather-wise +weathered +weatherly +weaving +web-footed +web-toed +webbed +webbier +webbiest +webby +wed +wedded +wedge-shaped +wedged +wedgy +wee +weeded +weedier +weediest +weedless +weedy +weekday +weekly +weeny +weepier +weepiest +weeping +weepy +weer +weest +weighable +weighted +weightier +weightiest +weightless +weightlessness +weighty +weird +welcome +welcomed +welcoming +weldable +weldless +welfare +welfarist +well +well-acquainted +well-advised +well-affected +well-aimed +well-appointed +well-balanced +well-becoming +well-behaved +well-beloved +well-bred +well-built +well-chosen +well-conditioned +well-conducted +well-connected +well-coupled +well-covered +well-defined +well-derived +well-deserved +well-desired +well-developed +well-directed +well-disposed +well-dressed +well-earned +well-educated +well-endowed +well-entered +well-established +well-favoured +well-fed +well-formed +well-found +well-founded +well-gotten +well-groomed +well-grounded +well-heeled +well-hung +well-informed +well-intentioned +well-judged +well-kept +well-knit +well-known +well-lined +well-made +well-mannered +well-marked +well-meaning +well-meant +well-off +well-oiled +well-ordered +well-paid +well-placed +well-prepared +well-preserved +well-proportioned +well-read +well-regulated +well-respected +well-rounded +well-set +well-spent +well-spoken +well-stacked +well-tempered +well-thought-of +well-thought-out +well-timed +well-to-do +well-tried +well-trodden +well-turned +well-upholstered +well-warranted +well-wishing +well-won +well-worn +welsh +wersh +west +westbound +westering +westerly +western +westernmost +westmost +westward +westwardly +wet +wetter +wetting +wettish +whacked +whackier +whackiest +whacking +whacky +whapping +whate'er +whatever +whatsoe'er +whatsoever +wheaten +wheeled +wheeling +wheezier +wheeziest +wheezing +wheezy +whelked +whelped +wheyey +whilom +whimsical +whinier +whiniest +whining +whinny +whiny +whip-tailed +whiplike +whipping +whippy +whirling +whirring +whiskered +whiskery +whispered +whispering +whist +whistleable +white +white-collar +white-faced +white-haired +white-hot +white-livered +whited +whitened +whitewashed +whitish +whittling +whity +whole +whole-souled +whole-wheat +wholesale +wholesome +wholistic +whopping +whoreson +whorish +whorled +wick +wicked +wicker +wide +wide-angle +wide-awake +wide-eyed +wide-open +wide-ranging +wide-screen +wider +widespread +widest +widish +widowed +wieldable +wieldier +wieldiest +wieldy +wifeless +wifely +wigged +wigglier +wiggliest +wiggling +wiggly +wight +wigless +wiglike +wild +wild-eyed +wilful +wilier +wiliest +will-less +willable +willed +willful +willing +willowy +willy-nilly +willyard +wilted +wily +wimpish +wimpy +wind-borne +wind-broken +wind-shaken +windburned +winded +windier +windiest +winding +windless +windowless +windproof +windswept +windward +windy +winey +wing-footed +winged +wingless +winglike +winier +winiest +winking +winnable +winning +winsome +winter +winterier +winteriest +winterweight +wintery +wintrier +wintriest +wintry +winy +wire-haired +wired +wireless +wiretap +wiring +wiry +wise +wised +wiser +wisest +wishful +wishy-washy +wising +wispier +wispiest +wispy +wistful +witch-hunt +witching +witchlike +witchy +withdrawing +withdrawn +withered +withering +withy +witless +witnessed +witted +wittier +wittiest +witting +witty +wizard +wizardly +wizen +wizened +woaded +wobbling +wobbly +wobegone +woebegone +woeful +woesome +wolfish +womanish +womanless +womanly +wombed +won +wonder-stricken +wonder-struck +wonderful +wondering +wondrous +wonky +wonted +wood +wooded +wooden +wooden-headed +woodier +woodiest +woodless +woods +woodsy +woodwind +woodworking +woody +wool-stapler +woolen +woollen +woolly +woolly-headed +woozier +wooziest +woozy +word-blind +word-for-word +word-of-mouth +word-perfect +wordier +wordiest +wordless +wordy +work-shy +workable +workaday +worked +working +working-class +workless +workmanlike +world +world-beater +world-shaking +world-shattering +world-weary +worldly +worldly-minded +worldly-wise +worldwide +worm-eaten +worm-wheel +wormy +worn +worn-out +worried +worrisome +worrying +worse +worsened +worsening +worser +worshipful +worshipless +worshipped +worshipping +worst +worth +worthful +worthless +worthwhile +worthy +would-be +wound +wound-up +wounded +wounding +woundless +woven +wraparound +wrapped +wrapround +wrath +wrathful +wrathless +wreathed +wreathless +wrecked +wreckful +wrenching +wretched +wrier +wriest +wriggling +wriggly +wrinkled +wrinklier +wrinkliest +wrinkly +write-in +writhed +writhen +writhing +written +wrong +wrong-headed +wronged +wrongful +wroth +wrought +wrought-iron +wrought-up +wry +wry-necked +wud +wuthering +xanthic +xanthochroid +xanthous +xenogenetic +xenomorphic +xenophobic +xerarch +xeric +xerographic +xeromorphic +xerophilous +xerophytic +xerotic +xiphoid +xiphosuran +xylic +xylographic +xylographical +xyloid +xylophagous +xylotomous +yare +yarer +yarest +yauld +yawning +yclept +year-end +year-round +yearling +yearlong +yearly +yearning +yeastlike +yeasty +yeld +yelled +yelling +yellow +yellow-bellied +yellowed +yellowish +yeomanly +yester +yestern +yielding +yogic +yokelish +yolky +yon +yonder +young +young-eyed +younger +youngish +youthful +yttric +yttriferous +yucky +yuletide +yummy +zanier +zanies +zaniest +zany +zealous +zebrine +zenithal +zeolitic +zero +zero-rated +zeroth +zestful +zesty +zeugmatic +zibeline +zig +zigzag +zillion +zinciferous +zincky +zincographic +zincographical +zincoid +zincous +zincy +zingiberaceous +zingy +zinky +zippered +zippy +zirconic +zodiacal +zoic +zonal +zonary +zonate +zoning +zonked +zonular +zoochemical +zoographic +zoographical +zoolatrous +zoological +zoometric +zoomorphic +zoonal +zoophagous +zoophilous +zoophobous +zoophoric +zooplastic +zygodactyl +zygomorphic +zygomorphous +zygophyllaceous +zygotic +zymogenic +zymolysis +zymolytic +zymotic diff --git a/installer/install/deploy.yml b/installer/install/deploy.yml new file mode 100644 index 00000000..d39160a4 --- /dev/null +++ b/installer/install/deploy.yml @@ -0,0 +1,71 @@ +--- +########################### +# T-Pot Sensor Deployment # +########################### + +- name: T-POT Sensor Deployment + hosts: all + vars: + local_nginx_cert_path: "~/tpotce/data/nginx/cert/nginx.crt" + remote_cert_path: "~/tpotce/data/hive.crt" + remote_sensor_yml_path: "~/tpotce/compose/sensor.yml" + remote_docker_compose_path: "~/tpotce/docker-compose.yml" + env_file_path: "~/tpotce/.env" + + tasks: + - name: Ensure the destination directory exists + ansible.builtin.file: + path: "{{ remote_cert_path | dirname }}" + state: directory + mode: '770' + + - name: Copy nginx.crt from local to remote host + ansible.builtin.copy: + src: "{{ local_nginx_cert_path }}" + dest: "{{ remote_cert_path }}" + + - name: Copy sensor.yml to docker-compose.yml on the remote host + ansible.builtin.command: + cmd: "cp {{ remote_sensor_yml_path }} {{ remote_docker_compose_path }}" + + - name: Update T-POT_HIVE_USER in .env + ansible.builtin.lineinfile: + path: "{{ env_file_path }}" + regexp: '^TPOT_HIVE_USER=' + line: 'TPOT_HIVE_USER={{ lookup("env", "myTPOT_HIVE_USER") }}' + + - name: Update T-POT_HIVE_IP in .env + ansible.builtin.lineinfile: + path: "{{ env_file_path }}" + regexp: '^TPOT_HIVE_IP=' + line: 'TPOT_HIVE_IP={{ lookup("env", "myTPOT_HIVE_IP") }}' + + - name: Ensure T-POT_TYPE is set to SENSOR in .env + ansible.builtin.lineinfile: + path: "{{ env_file_path }}" + regexp: '^TPOT_TYPE=' + line: 'TPOT_TYPE=SENSOR' + create: yes + + - name: Ensure WEB_USER is empty in .env + ansible.builtin.lineinfile: + path: "{{ env_file_path }}" + regexp: '^WEB_USER=' + line: 'WEB_USER=' + create: yes + + - name: Ensure LS_WEB_USER is empty in .env + ansible.builtin.lineinfile: + path: "{{ env_file_path }}" + regexp: '^LS_WEB_USER=' + line: 'LS_WEB_USER=' + create: yes + + - name: Reboot the sensor + become: yes + ansible.builtin.reboot: + reboot_timeout: 600 + pre_reboot_delay: 0 + post_reboot_delay: 0 + msg: "Reboot initiated by Ansible for T-Pot sensor deployment." + test_command: "uptime" diff --git a/installer/install/inventory.yml b/installer/install/inventory.yml new file mode 100644 index 00000000..3ad479ce --- /dev/null +++ b/installer/install/inventory.yml @@ -0,0 +1,8 @@ +tpotce: + hosts: + # Remote IP address, host name or alias: + 192.168.100.100: + # Remote SSH port: + ansible_port: 22 + # Remote SSH user: + ansible_user: tsec \ No newline at end of file diff --git a/installer/install/n.txt b/installer/install/n.txt new file mode 100644 index 00000000..c0162d91 --- /dev/null +++ b/installer/install/n.txt @@ -0,0 +1,82149 @@ +aardvark +aardvarks +aardwolf +aba +abac +abaca +abacas +abacs +abacus +abacuses +abalone +abalones +abampere +abamperes +abandon +abandonee +abandonees +abandonment +abandonments +abandons +abas +abasement +abasements +abashment +abashments +abatement +abatements +abatis +abator +abators +abattis +abattises +abattoir +abattoirs +abb +abba +abbacies +abbacy +abbas +abbess +abbesses +abbey +abbeys +abbot +abbots +abbotship +abbotships +abbreviation +abbreviations +abbreviator +abbreviators +abbs +abdicant +abdication +abdications +abdicator +abdicators +abdomen +abdomens +abducent +abduction +abductions +abductor +abductors +abecedarian +abecedarians +abele +abeles +abelia +aberrance +aberrancies +aberrancy +aberrant +aberration +aberrations +abessive +abetment +abetments +abettal +abettals +abetter +abetters +abettor +abettors +abeyance +abeyances +abhorrence +abhorrences +abhorrer +abhorrers +abidance +abidances +abies +abieses +abigail +abigails +abilities +ability +abiogenesis +abiogenist +abiogenists +abiosis +abjection +abjections +abjectness +abjunction +abjunctions +abjuration +abjurations +abjurer +abjurers +ablactation +ablation +ablations +ablative +ablatives +ablator +ablators +ablaut +ablauts +able +ablution +ablutions +abnegation +abnegations +abnegator +abnegators +abnormalities +abnormality +abnormities +abnormity +abode +abodes +aboideau +aboideaus +abolisher +abolishers +abolishment +abolishments +abolition +abolitionism +abolitionist +abolitionists +abolitions +abolla +abollas +abomasum +abomasus +abomasuses +abominableness +abomination +abominations +abominator +abominators +abondance +abondances +aboriginal +aboriginality +aboriginals +aborigine +aborigines +aborticide +aborticides +abortifacient +abortifacients +abortion +abortionist +abortionists +abortions +abortiveness +aboulia +about-face +about-faces +above +abracadabra +abracadabras +abradant +abradants +abrader +abraders +abrasion +abrasions +abrasive +abrasiveness +abrasives +abraxas +abraxases +abrazo +abrazos +abreaction +abreactions +abridgement +abridgements +abridger +abridgers +abridgment +abridgments +abrogation +abrogations +abrogator +abrogators +abruption +abruptions +abruptness +abscess +abscesses +abscissa +abscissas +abscission +abscissions +absconder +absconders +abseil +abseils +absence +absences +absent-mindedness +absentee +absenteeism +absentees +absinth +absinthe +absinthes +absinthism +absinths +absolute +absoluteness +absolution +absolutions +absolutism +absolutist +absolutists +absolver +absolvers +absorbability +absorbance +absorbate +absorbates +absorbefacient +absorbefacients +absorbencies +absorbency +absorbent +absorbents +absorber +absorbers +absorptiometer +absorptiometers +absorption +absorptions +absorptiveness +absorptivity +abstainer +abstainers +abstemiousness +abstention +abstentions +abstersion +abstersions +abstinence +abstinences +abstinent +abstract +abstractedness +abstracter +abstracters +abstraction +abstractionism +abstractionist +abstractionists +abstractions +abstractness +abstractor +abstractors +abstracts +abstriction +abstrictions +abstruseness +absurdities +absurdity +absurdness +absurdnesses +abulia +abundance +abundances +abusage +abusages +abuse +abuser +abusers +abuses +abusiveness +abutilon +abutilons +abutment +abutments +abuttal +abuttals +abutter +abutters +abvolt +abvolts +abysm +abysms +abyss +abysses +acacia +acacias +academe +academes +academia +academic +academical +academicals +academician +academicians +academicism +academics +academies +academism +academy +acajou +acajous +acaleph +acalephes +acalephs +acanthocephalan +acanthopterygian +acanthus +acanthuses +acapnia +acariasis +acaricide +acaricides +acarid +acaridan +acaridans +acarids +acarine +acarologist +acarologists +acarology +acarus +acatalectic +acatalectics +accedence +accedences +acceder +acceders +accelerando +accelerandos +accelerant +accelerants +acceleration +accelerations +accelerator +accelerators +accelerometer +accelerometers +accent +accenting +accentor +accentors +accents +accentuality +accentuation +accentuations +acceptabilities +acceptability +acceptableness +acceptance +acceptances +acceptancy +acceptation +acceptations +accepter +accepters +acceptor +acceptors +access +accessaries +accessary +accesses +accessibilities +accessibility +accession +accessions +accessories +accessory +acciaccatura +acciaccaturas +accidence +accident +accidental +accidentalism +accidentality +accidentals +accidents +accidie +accipiter +accipiters +acclaim +acclaims +acclamation +acclamations +acclimation +acclimations +acclimatisation +acclimatisations +acclimatiser +acclimatisers +acclimatization +acclimatizations +acclivities +acclivity +accolade +accolades +accommodation +accommodations +accommodativeness +accommodator +accommodators +accompanier +accompaniers +accompaniment +accompaniments +accompanist +accompanists +accompanyist +accompanyists +accomplice +accomplices +accomplisher +accomplishers +accomplishment +accomplishments +accompt +accompts +accord +accordance +accordances +accorder +accorders +accordion +accordionist +accordionists +accordions +accords +accost +accosts +accouchement +accouchements +accoucheur +accoucheurs +accoucheuse +accoucheuses +account +accountabilities +accountability +accountableness +accountancies +accountancy +accountant +accountants +accountantship +accounting +accountings +accounts +accouterment +accouterments +accoutrement +accoutrements +accreditation +accreditations +accretion +accretions +accrual +accruals +acculturation +accumbency +accumulation +accumulations +accumulativeness +accumulator +accumulators +accuracies +accuracy +accurateness +accursedness +accusal +accusals +accusation +accusations +accusative +accusatives +accused +accuser +accusers +accustomedness +ace +aced +acedia +acerbities +acerbity +aces +acescence +acescency +acetabulum +acetal +acetaldehyde +acetals +acetamide +acetate +acetates +acetification +acetone +acetones +acetyl +acetylcholine +acetylene +ache +achene +achenes +aches +achievement +achievements +achiever +achievers +achillea +achilleas +achimenes +aching +achings +achkan +achkans +achondroplasia +achromat +achromaticity +achromatin +achromatins +achromatisation +achromatism +achromatization +achromats +acid +acidification +acidifier +acidifiers +acidimeter +acidimeters +acidimetry +acidity +acidness +acidosis +acids +acidulent +acieration +acing +acinus +ack-ack +ackee +ackees +acknowledgement +acknowledgements +acknowledgment +acknowledgments +acme +acmes +acmite +acmites +acne +acolyte +acolytes +aconite +aconites +aconitum +aconitums +acorn +acorns +acosmism +acosmist +acosmists +acotyledon +acotyledons +acouchi +acouchies +acoustic +acoustician +acousticians +acoustics +acquaintance +acquaintances +acquaintanceship +acquaintanceships +acquest +acquests +acquiescence +acquiescences +acquirability +acquirement +acquirements +acquiring +acquisition +acquisitions +acquisitiveness +acquittal +acquittals +acquittance +acquittances +acre +acre-foot +acreage +acres +acridine +acridity +acridness +acriflavine +acrimoniousness +acrimony +acrobat +acrobatics +acrobats +acrogen +acrogens +acrolein +acrolith +acroliths +acromegalic +acromegaly +acromion +acronym +acronyms +acrophobia +acrophony +acropolis +acropolises +acrosome +acrosomes +acrospire +acrospires +acrostic +acrostics +acroter +acroterion +acroterium +acroteriums +acroters +acrotism +acrylic +acrylics +acrylonitrile +act +actability +actin +acting +actings +actinia +actinian +actinians +actinias +actinide +actinides +actinism +actinium +actinobacillosis +actinobacillus +actinolite +actinometer +actinometers +actinomycosis +actinon +actinotherapy +action +actions +activating +activation +activations +activator +activators +active +activeness +activism +activist +activists +activities +activity +acton +actons +actor +actors +actress +actresses +acts +actualisation +actualisations +actualist +actualists +actualities +actuality +actualization +actualizations +actuaries +actuary +actuation +actuations +actuator +actuators +acuity +aculeus +acumen +acumens +acumination +acupressure +acupuncture +acute +acuteness +acutenesses +acyclovir +acyl +ad-lib +ad-libs +adage +adages +adagio +adagios +adamant +adamants +adaptability +adaptableness +adaptation +adaptations +adapter +adapters +adaptiveness +adaptor +adaptors +addax +addaxes +addend +addends +addendum +adder +adder's-tongue +adders +addict +addictedness +addiction +addictions +addicts +additament +additaments +addition +additions +additive +additives +address +addressee +addressees +addresser +addressers +addresses +addressor +addressors +adducer +adducers +adducing +adduction +adductions +adductor +adductors +adelantado +adelantados +ademption +ademptions +adenectomies +adenectomy +adenine +adenitis +adenocarcinoma +adenocarcinomas +adenohypophysis +adenoid +adenoidectomies +adenoidectomy +adenoids +adenoma +adenomas +adenosine +adenovirus +adept +adeptness +adepts +adequacies +adequacy +adequateness +adermin +adessive +adherence +adherences +adherent +adherents +adherer +adherers +adhesion +adhesions +adhesive +adhesiveness +adhesives +adhibition +adhibitions +adiabatic +adiaphorism +adiaphorist +adiaphorists +adiathermancy +adieu +adieus +adipocere +adipose +adiposity +adit +adits +adjacency +adjacent +adjective +adjectives +adjoint +adjournment +adjournments +adjudication +adjudications +adjudicator +adjudicators +adjunct +adjunction +adjunctions +adjuncts +adjuration +adjurations +adjuster +adjusters +adjustment +adjustments +adjustor +adjustors +adjutancies +adjutancy +adjutant +adjutants +adjuvant +adjuvants +admass +admasses +admeasurement +admeasurements +admin +adminicle +adminicles +administration +administrations +administrator +administrators +administratorship +administratrix +administratrixes +admins +admirableness +admiral +admirals +admiralship +admiralships +admiralties +admiralty +admiration +admirer +admirers +admissibilities +admissibility +admissibleness +admission +admissions +admittance +admittances +admixture +admixtures +admonishment +admonishments +admonition +admonitions +admonitor +admonitors +adnation +adnominal +adnoun +adnouns +ado +adobe +adobes +adolescence +adolescences +adolescent +adolescents +adopter +adopters +adoption +adoptions +adorableness +adoration +adorations +adorer +adorers +adornment +adornments +ados +adrenal +adrenaline +adrenals +adrenocorticotrophin +adrenocorticotropin +adroitness +ads +adscript +adscription +adscriptions +adscripts +adsorbability +adsorbate +adsorbates +adsorbent +adsorbents +adsorption +adsorptions +adularia +adulation +adulations +adulator +adulators +adult +adulterant +adulterants +adulteration +adulterations +adulterator +adulterators +adulterer +adulterers +adulteress +adulteresses +adulteries +adultery +adulthood +adults +adumbration +adumbrations +aduncity +advance +advancement +advancements +advances +advantage +advantageousness +advantages +advection +advections +advent +adventive +adventives +advents +adventure +adventurer +adventurers +adventures +adventuress +adventuresses +adventurism +adventurousness +adverb +adverbial +adverbs +adversaries +adversary +adversative +adverseness +adversities +adversity +advert +advertence +advertency +advertisement +advertisements +advertiser +advertisers +advertising +advertizer +advertizing +adverts +advice +advices +advisability +advisableness +advisedness +advisement +advisements +adviser +advisers +advisership +advisor +advisors +advocaat +advocaats +advocacies +advocacy +advocate +advocates +advocation +advocations +advowson +advowsons +adynamia +adytum +adz +adze +adzes +aecidium +aeciospore +aeciospores +aecium +aedes +aedile +aediles +aedileship +aedileships +aegirite +aegis +aegises +aegrotat +aegrotats +aeolian +aeolipile +aeolipiles +aeolotropy +aeon +aeons +aeration +aerations +aerator +aerators +aerenchyma +aerenchymas +aerial +aerialist +aerialists +aeriality +aerials +aerie +aeries +aero +aerobatics +aerobe +aerobes +aerobics +aerobiologist +aerobiologists +aerobiology +aerobiosis +aerodrome +aerodromes +aerodynamicist +aerodynamicists +aerodynamics +aerodyne +aerodynes +aeroembolism +aerofoil +aerofoils +aerogenerator +aerogenerators +aerogram +aerogramme +aerogrammes +aerograms +aerograph +aerographs +aerography +aerolite +aerolites +aerologist +aerologists +aerology +aeromancy +aerometer +aerometers +aerometry +aeronaut +aeronautics +aeronauts +aeroneurosis +aeronomy +aerophobia +aerophone +aerophones +aerophyte +aerophytes +aeroplane +aeroplanes +aeroplankton +aerosol +aerosols +aerospace +aerostat +aerostatics +aerostation +aerostats +aerotropism +aery +aesc +aesces +aesculin +aesir +aesthesia +aesthete +aesthetes +aesthetic +aesthetician +aestheticians +aestheticism +aesthetics +aestivation +aestivations +aether +aetiology +afar +affability +affair +affaire +affairs +affect +affectation +affectations +affectedness +affecter +affecters +affection +affectionateness +affections +affective +affectivities +affectivity +affects +affenpinscher +affenpinschers +affiance +affiances +affiche +affiches +afficionado +afficionados +affidavit +affidavits +affiliate +affiliates +affiliation +affiliations +affinities +affinity +affirmant +affirmants +affirmation +affirmations +affirmative +affirmatives +affirmer +affirmers +affix +affixes +afflatus +afflatuses +affliction +afflictions +affluence +affluent +affluents +afflux +affluxes +afforestation +affranchisement +affray +affrays +affreightment +affreightments +affricate +affricates +affrication +affrications +affricative +affright +affrights +affront +affronts +affusion +affusions +afghan +afghani +afghanis +afghans +aficionado +aficionados +aflatoxin +afreet +afreets +afrit +afrits +afro +afrormosia +afrormosias +afros +afterbirth +afterbirths +afterburner +afterburners +afterburning +aftercare +afterdeck +afterdecks +afterglow +afterglows +aftergrowth +aftergrowths +afterheat +aftermath +aftermaths +afternoon +afternoons +afterpains +afterpiece +afterpieces +afters +aftershaft +aftershafts +aftershock +aftershocks +aftertaste +aftertastes +afterthought +afterthoughts +aftertime +aftertimes +afterword +afterwords +afterworld +afterworlds +aga +agalactia +agalloch +agallochs +agalmatolite +agama +agamas +agamid +agamids +agamogenesis +agapanthus +agapanthuses +agape +agar +agar-agar +agaric +agarics +agars +agas +agate +agates +agateware +agave +agaves +age +aged +agedness +ageing +ageings +ageism +agelessness +agencies +agency +agenda +agendas +agendum +agendums +agent +agent-general +agentive +agents +ageratum +ages +agger +aggers +aggiornamento +agglomerate +agglomerates +agglomeration +agglomerations +agglutinant +agglutinants +agglutination +agglutinations +agglutinin +agglutinogen +aggradation +aggradations +aggrandisement +aggrandisements +aggrandizement +aggrandizements +aggravation +aggravations +aggregate +aggregates +aggregation +aggregations +aggression +aggressions +aggressiveness +aggressor +aggressors +aggro +aggros +agha +aghas +agility +aging +agings +agio +agios +agiotage +agism +agister +agisters +agistment +agistments +agitation +agitations +agitator +agitators +agitprop +aglet +aglets +aglossia +agma +agmas +agnail +agnails +agnate +agnates +agnation +agnomen +agnomens +agnosia +agnostic +agnosticism +agnostics +agogics +agon +agonies +agonist +agonistes +agonists +agons +agony +agora +agoraphobia +agoras +agouta +agoutas +agouti +agoutis +agouty +agraffe +agraffes +agranulocytosis +agranulosis +agrapha +agraphia +agrarian +agrarianism +agreeability +agreeableness +agreement +agreements +agribusiness +agriculture +agriculturist +agriculturists +agrimonies +agrimony +agriology +agrobiologist +agrobiologists +agrobiology +agrology +agronomics +agronomist +agronomists +agronomy +agrostologist +agrostologists +agrostology +aguardiente +aguardientes +ague +agues +ahimsa +ahold +aid +aide +aide-de-camp +aider +aiders +aides +aids +aiglet +aiglets +aigret +aigrets +aigrette +aigrettes +aiguille +aiguilles +aiguillette +aiguillettes +aikido +ail +ailanthus +ailanthuses +aileron +ailerons +ailette +ailettes +ailment +ailments +ails +ailurophile +ailurophiles +ailurophilia +ailurophobe +ailurophobes +ailurophobia +aim +aimlessness +aims +ain +ain't +air +air-conditioning +air-intake +air-intakes +air-mail +air-mails +airbrush +airbrushes +airburst +airbursts +airbus +airbuses +aircraft +aircraftman +aircraftsman +aircraftswoman +aircrew +aircrews +airdrome +airdromes +airfield +airfields +airflow +airflows +airfoil +airfoils +airframe +airframes +airgraph +airgraphs +airhead +airheads +airiness +airing +airings +airlift +airlifts +airline +airliner +airliners +airlines +airman +airmanship +airplane +airplanes +airport +airports +airs +airscrew +airscrews +airship +airships +airsickness +airspace +airspaces +airspeed +airstream +airstrip +airstrips +airt +airts +airwave +airwaves +airway +airways +airwoman +airworthiness +aisle +aisles +ait +aitch +aitchbone +aitchbones +aitches +aits +akaryote +akaryotes +ake +akee +akees +akene +akenes +akes +akinesia +akinesias +akinesis +akvavit +akvavits +ala +alabamine +alabandite +alabaster +alabasters +alacrity +alae +alalia +alameda +alamedas +alamode +alanine +alap +alapa +alar +alarm +alarmism +alarmist +alarmists +alarms +alarum +alarums +alas +alastrim +alb +albacore +albacores +albarello +albarellos +albata +albatross +albatrosses +albedo +albedos +albergo +albert +albertite +alberts +albescence +albinism +albino +albinos +albite +albs +albugo +albugos +album +albumen +albumin +albuminate +albuminates +albuminoid +albuminoids +albuminuria +albums +alburnum +alcahest +alcaide +alcaides +alcalde +alcaldes +alcayde +alcaydes +alchemist +alchemists +alchemy +alcheringa +alcohol +alcoholic +alcoholics +alcoholisation +alcoholism +alcoholization +alcoholometer +alcoholometers +alcoholometry +alcohols +alcove +alcoves +alcyonarian +alcyonarians +aldehyde +alder +alderman +aldermanry +aldermanship +aldermanships +alders +aldohexose +aldose +aldoses +aldrin +ale +alecost +alecosts +alegar +alegars +alembic +alembics +aleph +alephs +alerce +alerces +alerion +alerions +alert +alerting +alertness +alerts +ales +aleurone +alevin +alevins +alewife +alexanders +alexandrine +alexandrines +alexandrite +alexia +alexic +alexin +alexins +alexipharmic +alfa +alfalfa +alfalfas +alfas +alforja +alforjas +alga +algae +algarroba +algarrobas +algebra +algebraist +algebraists +algebras +algerine +algerines +algesia +algicide +algicides +algidity +algin +alginate +alginates +algolagnia +algologist +algologists +algology +algophobia +algorism +algorithm +algorithms +alias +aliases +alibi +alibis +alidade +alidades +alien +alienability +alienage +alienation +alienator +alienators +alienee +alienees +alienism +alienist +alienists +alienor +alienors +aliens +alignment +alignments +aliment +alimentation +alimentations +aliments +alimonies +alimony +alinement +alinements +aliped +alipeds +aliquant +aliquot +alisma +alismas +aliveness +aliyah +alizarin +alizarine +alkahest +alkalescence +alkalescences +alkalescencies +alkalescency +alkali +alkalies +alkalimeter +alkalimeters +alkalimetry +alkalinities +alkalinity +alkalis +alkaloid +alkaloids +alkalosis +alkane +alkanes +alkanet +alkanets +alkene +alkenes +alkies +alky +alkyd +alkyds +alkyl +alkyls +alkyne +alkynes +all +all-rounder +all-rounders +allantoid +allantoids +allantois +allantoises +allative +allayer +allayers +allegation +allegations +alleger +allegers +allegiance +allegiances +allegories +allegorisation +allegorisations +allegoriser +allegorisers +allegorist +allegorists +allegorization +allegorizations +allegorizer +allegorizers +allegory +allegretto +allegrettos +allegro +allegros +allele +alleles +allelomorph +allelomorphism +allelomorphs +alleluia +alleluias +allemande +allemandes +allergen +allergens +allergies +allergist +allergists +allergy +alleviation +alleviations +alleviative +alleviator +alleviators +alley +alleys +alleyway +alleyways +allheal +allheals +alliance +alliances +allice +allices +allies +alligator +alligators +allis +allises +alliteration +alliterations +allness +allocation +allocations +allocution +allocutions +allodium +allodiums +allogamy +allograft +allografts +allograph +allographs +allometry +allomorph +allomorphs +allonge +allonges +allonym +allonyms +allopath +allopaths +allopathy +allophone +allophones +alloplasm +alloplasms +allopurinol +allosaur +allosaurs +allotment +allotments +allotrope +allotropes +allotropism +allotropy +allottee +allottees +allowableness +allowance +allowances +alloy +alloys +allseed +allseeds +allspice +allure +allurement +allurements +allurer +allurers +allures +allusion +allusions +allusiveness +alluvial +alluvion +alluvions +alluvium +alluviums +ally +allyl +almah +almahs +almanac +almanacs +almandine +almandines +almeries +almery +almighty +almirah +almirahs +almond +almonds +almoner +almoners +almonries +almonry +almous +alms +almucantar +almucantars +almuce +almuces +almug +almugs +alodium +alodiums +aloe +aloes +aloeswood +aloeswoods +alogia +aloha +alohas +aloneness +aloofness +alopecia +alp +alpaca +alpacas +alpenhorn +alpenhorns +alpenstock +alpenstocks +alpha +alphabet +alphabetisation +alphabetization +alphabets +alphanumerics +alphas +alphorn +alphorns +alpinism +alpinist +alpinists +alps +als +alsike +alsikes +also-ran +also-rans +alstroemeria +alstroemerias +alt +altar +altarage +altarpiece +altarpieces +altars +altazimuth +altazimuths +alterability +alterant +alterants +alteration +alterations +alterative +altercation +altercations +altering +alternate +alternates +alternation +alternations +alternative +alternatives +alternator +alternators +althaea +althaeas +althorn +althorns +altimeter +altimeters +altimetry +altissimo +altitude +altitudes +alto +alto-relievo +alto-relievos +alto-rilievo +altocumulus +altogether +altos +altostratus +altricial +altruism +altruist +altruists +alts +aludel +aludels +alula +alulas +alum +alumina +aluminate +aluminates +aluminium +aluminum +alumna +alumnus +alums +alunite +alure +alveolar +alveolitis +alveolus +alyssum +alyssums +amadavat +amadavats +amadou +amadous +amah +amahs +amalgam +amalgamation +amalgamations +amalgams +amanita +amanitas +amanuensis +amaranth +amaranths +amaryllis +amaryllises +amassment +amateur +amateurishness +amateurism +amateurs +amativeness +amatol +amaurosis +amaze +amazedness +amazement +amazes +amazon +amazonite +amazons +ambage +ambages +ambassador +ambassador-at-large +ambassadors +ambassadorship +ambassadorships +ambassadress +ambassadresses +ambatch +ambatches +amber +ambergris +ambergrises +amberjack +amberjacks +amberoid +amberoids +ambers +ambiance +ambidexter +ambidexterity +ambidexters +ambidextrousness +ambience +ambiguities +ambiguity +ambiguousness +ambisexual +ambit +ambition +ambitions +ambitiousness +ambits +ambivalence +ambivalences +ambivalencies +ambivalency +ambiversion +ambivert +ambiverts +amble +ambler +amblers +ambles +amblyopia +ambo +amboceptor +ambos +amboyna +ambries +ambroid +ambrosia +ambrotype +ambrotypes +ambry +ambulacrum +ambulance +ambulances +ambulation +ambulations +ambulator +ambulators +ambulatory +ambuscade +ambuscades +ambuscado +ambuscadoes +ambuscados +ambush +ambusher +ambushers +ambushes +ameba +amebas +ameer +ameers +ameiosis +amelia +amelioration +ameliorations +amen +amenabilities +amenability +amenableness +amender +amenders +amendment +amendments +amends +amenities +amenity +amenorrhea +amenorrhoea +amens +ament +amentia +aments +amercement +amercements +americanization +americium +amethyst +amethysts +ami +amiability +amiableness +amianthus +amicabilities +amicability +amicableness +amice +amices +amide +amides +amie +amigo +amigos +amine +amines +amir +amirs +amis +amities +amitosis +amity +amman +ammans +ammeter +ammeters +ammo +ammonal +ammonia +ammoniac +ammonite +ammonites +ammonium +ammonoid +ammunition +ammunitions +amnesia +amnesiac +amnesiacs +amnesic +amnesics +amnesties +amnesty +amniocentesis +amnion +amnios +amoeba +amoebas +amoebiasis +amok +amontillado +amontillados +amoralism +amoralist +amoralists +amorality +amoretto +amorino +amorist +amorists +amorosity +amoroso +amorosos +amorousness +amorphism +amorphousness +amortisation +amortisations +amortization +amortizations +amortizement +amosite +amount +amounts +amour +amour-propre +amours +amp +ampelopsis +amperage +amperages +ampere +amperes +ampersand +ampersands +amphetamine +amphetamines +amphibian +amphibians +amphibole +amphiboles +amphibolies +amphibolite +amphibology +amphiboly +amphibrach +amphibrachs +amphigories +amphigory +amphimacer +amphimacers +amphimixis +amphioxus +amphioxuses +amphipod +amphipods +amphisbaena +amphisbaenas +amphitheater +amphitheaters +amphitheatre +amphitheatres +ampholyte +ampholytes +amphora +ampleness +ampliation +ampliations +amplification +amplifications +amplifier +amplifiers +amplitude +amplitudes +ampoule +ampoules +amps +ampul +ampule +ampules +ampulla +ampuls +amputation +amputations +amputator +amputators +amputee +amputees +amrita +amritas +amuck +amulet +amulets +amusement +amusements +amuser +amusers +amusiveness +amygdala +amygdalas +amygdale +amygdales +amygdalin +amygdaloid +amygdaloids +amygdule +amygdules +amyl +amylase +amylases +amylene +amylenes +amyloid +amyloidosis +amylopsin +amylum +amyotrophy +ana +anabaptism +anabaptisms +anabaptist +anabaptists +anabas +anabases +anabasis +anabiosis +anableps +anablepses +anabolism +anabolite +anabolites +anabranch +anabranches +anacardium +anacardiums +anachronism +anachronisms +anacoluthia +anacoluthias +anacoluthon +anaconda +anacondas +anacrusis +anadem +anadems +anadiplosis +anaemia +anaerobe +anaerobes +anaerobiosis +anaesthesia +anaesthesias +anaesthesiologist +anaesthesiologists +anaesthesiology +anaesthetic +anaesthetics +anaesthetist +anaesthetists +anaglyph +anaglyphs +anaglypta +anaglyptas +anagnorisis +anagoge +anagoges +anagram +anagrammatism +anagrammatist +anagrammatists +anagrams +analcite +analecta +analects +analemma +analemmas +analeptic +analgesia +analgesic +analgesics +analog +analogies +analogist +analogists +analogousness +analogs +analogue +analogues +analogy +analphabetic +analysand +analysands +analyser +analysers +analysis +analyst +analysts +analytics +analyzer +analyzers +anamnesis +anamorphosis +ananas +ananases +anapaest +anapaests +anapest +anapests +anaphase +anaphora +anaphoras +anaphrodisiac +anaphrodisiacs +anaphylaxis +anaplasty +anaplerosis +anaptyxis +anarch +anarchies +anarchism +anarchisms +anarchist +anarchists +anarchs +anarchy +anarthrousness +anas +anasarca +anastasis +anastigmat +anastigmats +anastomosis +anastrophe +anastrophes +anatase +anathema +anathemas +anathematisation +anathematization +anatomical +anatomies +anatomist +anatomists +anatomy +anatta +anattas +anatto +anattos +anburies +anbury +ancestor +ancestors +ancestress +ancestresses +ancestries +ancestry +anchor +anchorage +anchorages +anchoress +anchoresses +anchoret +anchorets +anchorite +anchorites +anchorman +anchors +anchoveta +anchovies +anchovy +anchylosis +ancient +ancientness +ancientry +ancients +ancile +ancillaries +ancillary +ancon +ancones +and +andalusite +andante +andantes +andantino +andantinos +andesine +andesite +andiron +andirons +androdioecism +androecium +androgen +androgens +androgyne +androgynes +androgyny +android +androids +andromeda +andromedas +andromonoecism +androphore +androphores +androsterone +ands +ane +anecdotage +anecdotalist +anecdotalists +anecdote +anecdotes +anecdotist +anecdotists +anelace +anelaces +anemia +anemogram +anemograms +anemograph +anemographs +anemography +anemology +anemometer +anemometers +anemometry +anemone +anemones +anemophily +anencephalia +anencephaly +aneroid +aneroids +anes +anesthesia +anesthesias +anesthesiologist +anesthesiologists +anesthesiology +anesthetic +anesthetics +anesthetist +anesthetists +anesthetization +anestrum +anestrus +aneuploid +aneurin +aneurysm +aneurysms +anfractuosities +anfractuosity +angary +angel +angelhood +angelhoods +angelica +angelicas +angelology +angels +angels-on-horseback +angelus +angeluses +anger +angers +angina +angiogram +angiograms +angiography +angioma +angiomas +angioplasty +angiosperm +angiosperms +angiotensin +angle +angledozer +angledozers +angler +anglers +angles +anglesite +anglicisation +anglicism +anglicisms +anglicization +angling +anglings +anglomania +anglophil +anglophile +anglophiles +anglophilia +anglophils +anglophobe +anglophobes +anglophobia +angora +angoras +angriness +angst +angsts +anguish +anguishes +angularities +angularity +angulation +angwantibo +angwantibos +anhedonia +anhedral +anhydride +anhydrides +anhydrite +anhydrites +ani +aniconism +aniconisms +anil +aniline +anility +anils +anima +animadversion +animadversions +animadverter +animadverters +animal +animal-worship +animalcule +animalcules +animalisation +animalism +animalisms +animalist +animalists +animality +animalization +animals +animas +animation +animations +animatism +animator +animators +animatronics +anime +animes +animism +animist +animists +animosities +animosity +animus +animuses +anion +anionic +anions +anis +anise +aniseed +aniseeds +anises +anisette +anisettes +anisotropy +ankerite +ankh +ankhs +ankle +anklebone +anklebones +ankles +anklet +anklets +anklung +anklungs +ankus +ankuses +ankylosaur +ankylosaurs +ankylosis +ankylostomiasis +anlace +anlaces +anlage +anlages +ann +anna +annabergite +annal +annalist +annalists +annals +annas +annatto +annattos +anneal +annealer +annealers +annealing +annealings +anneals +annelid +annelids +annex +annexation +annexationist +annexationists +annexations +annexe +annexes +annexment +annexments +annihilation +annihilationism +annihilations +annihilator +annihilators +anniversaries +anniversary +annotating +annotation +annotations +annotator +annotators +announcement +announcements +announcer +announcers +annoyance +annoyances +annoyer +annoyers +annoying +anns +annual +annuals +annuitant +annuitants +annuities +annuity +annularities +annularity +annulation +annulations +annulet +annulets +annulment +annulments +annulus +annunciation +annunciations +annunciator +annunciators +anoa +anoas +anobiidae +anode +anodes +anodyne +anodynes +anoesis +anoestrum +anoestrus +anointer +anointers +anointing +anointment +anointments +anomalies +anomaly +anomie +anon +anons +anonym +anonymity +anonyms +anopheles +anopheleses +anopheline +anophelines +anorak +anoraks +anorectic +anorectics +anorexia +anorthite +anorthosite +anosmia +anoxia +answer +answerability +answerer +answerers +answers +ant +anta +antacid +antacids +antagonisation +antagonisations +antagonism +antagonist +antagonists +antagonization +antagonizations +antarthritic +antasthmatic +ante +antecedence +antecedences +antecedent +antecedents +antecessor +antecessors +antechamber +antechambers +antechapel +antechapels +antechoir +antechoirs +antedate +antedates +antediluvian +antediluvians +antefix +antefixes +antelope +antelopes +antenatal +antenna +antennas +antennule +antennules +antepast +antependium +antependiums +antepenult +antepenultimate +antepenults +anterior +anteriority +anteroom +anterooms +antes +anteversion +anthelion +anthelix +anthelminthic +anthelminthics +anthelmintic +anthelmintics +anthem +anthemion +anthems +anther +antheridium +antheridiums +antherozoid +antherozoids +anthers +anthesis +anthocyanin +anthologies +anthologist +anthologists +anthology +anthophore +anthophores +anthophyllite +anthracene +anthracite +anthracnose +anthracosis +anthrax +anthraxes +anthropogenesis +anthropogeny +anthropogeography +anthropography +anthropoid +anthropolatry +anthropologist +anthropologists +anthropology +anthropometry +anthropomorphism +anthropomorphist +anthropomorphosis +anthropopathy +anthropophagite +anthropophagy +anthroposophy +anthurium +anthuriums +anti +anti-Semite +anti-Semitism +anti-aircraft +anti-novel +antiar +antiarrhythmic +antiars +antibacchius +antibacchiuses +antibacterial +antibiosis +antibiotic +antibiotics +antibodies +antibody +antic +anticathode +anticathodes +antichlor +antichlors +anticholinergic +antichristian +anticipant +anticipants +anticipation +anticipations +anticipator +anticipators +anticlerical +anticlericalism +anticlericals +anticlimax +anticlimaxes +anticline +anticlines +anticlinorium +anticlinoriums +anticoagulant +anticoagulants +anticonvulsant +anticonvulsants +anticorrosive +antics +anticyclone +anticyclones +antidepressant +antidepressants +antidisestablishmentarianism +antidiuretic +antidote +antidotes +antifouling +antifreeze +antifriction +antigen +antigens +antihalation +antihalations +antihelix +antihero +antiheroes +antihistamine +antihistamines +antihypertensive +antihypertensives +antiknock +antiknocks +antilegomena +antilog +antilogarithm +antilogarithms +antilogies +antilogs +antilogy +antimacassar +antimacassars +antimalarial +antimasque +antimasques +antimicrobial +antimodernist +antimodernists +antimonarchist +antimonarchists +antimonate +antimonates +antimonial +antimonide +antimonides +antimonies +antimony +antineutrino +antineutrinos +antineutron +antineutrons +anting +antings +antinode +antinodes +antinomian +antinomianism +antinomians +antinomies +antinomy +antiodontalgic +antioxidant +antioxidants +antiparticle +antiparticles +antipasto +antipastos +antipathies +antipathist +antipathists +antipathy +antiperiodic +antiperiodics +antiperistalsis +antiperspirant +antiperspirants +antiphlogistic +antiphon +antiphonal +antiphonals +antiphonaries +antiphonary +antiphonies +antiphons +antiphony +antiphrasis +antipodal +antipode +antipodean +antipodes +antipole +antipoles +antipope +antipopes +antiproton +antiprotons +antipruritic +antipruritics +antipsychotic +antipyretic +antipyretics +antiquarian +antiquarianism +antiquarians +antiquaries +antiquark +antiquarks +antiquary +antiquation +antiquations +antique +antiqueness +antiques +antiquities +antiquity +antirachitic +antirachitics +antirrhinum +antirrhinums +antirust +antis +antiscorbutic +antisepsis +antiseptic +antiseptics +antiserum +antiserums +antisociality +antispasmodic +antistrophe +antistrophes +antithesis +antitoxin +antitoxins +antitrade +antitrades +antitragus +antitussive +antitussives +antitype +antitypes +antivaccinationist +antivaccinationists +antivenin +antivenins +antiviral +antler +antlers +antlia +antoninianus +antoninianuses +antonomasia +antonym +antonyms +antonymy +antre +antres +antrum +antrums +ants +anuria +anus +anuses +anvil +anvils +anxieties +anxiety +anxiolytic +anxiolytics +anxiousness +anybody +anything +aorist +aorists +aorta +aortas +aortitis +aoudad +aoudads +apache +apaches +apadana +apagoge +apanage +apanages +aparejo +aparejos +apartheid +apartment +apartments +apartness +apathy +apatite +ape +apeman +aperient +aperients +aperies +aperiodicity +aperitif +aperitifs +aperitive +aperture +apertures +apery +apes +apetaly +apex +apexes +aphaeresis +aphagia +aphanite +aphanites +aphasia +aphasiac +aphasic +aphelion +apheliotropism +apheresis +aphesis +aphid +aphides +aphidian +aphidians +aphids +aphis +aphonia +aphoriser +aphorisers +aphorism +aphorisms +aphorist +aphorists +aphorizer +aphorizers +aphrodisia +aphrodisiac +aphrodisiacs +aphtha +aphylly +apiaries +apiarist +apiarists +apiary +apices +apiculture +apiculturist +apiculturists +apishness +aplanogamete +aplanogametes +aplanospore +aplanospores +aplasia +aplite +aplomb +aplustre +aplustres +apnea +apneas +apnoea +apnoeas +apocalypse +apocalypses +apocatastasis +apochromat +apochromatism +apochromats +apocopation +apocope +apocrypha +apodosis +apoenzyme +apoenzymes +apogamy +apogee +apogees +apogeotropism +apograph +apographs +apollo +apollos +apologetics +apologia +apologias +apologies +apologiser +apologisers +apologist +apologists +apologizer +apologizers +apologue +apologues +apology +apomixis +apomorphine +aponeurosis +apopemptic +apophasis +apophthegm +apophthegms +apophyge +apophyges +apophyllite +apophysis +apoplectic +apoplexy +aporia +aposiopesis +apospory +apostasies +apostasy +apostate +apostates +apostil +apostils +apostle +apostles +apostleship +apostolate +apostolates +apostolicism +apostolicity +apostrophe +apostrophes +apothecaries +apothecary +apothecium +apothegm +apothegms +apothem +apotheosis +apotheosises +apotropaism +appalling +appanage +appanages +apparatchik +apparatchiks +apparatus +apparatuses +apparel +apparels +apparencies +apparency +apparentness +apparition +apparitions +apparitor +apparitors +appeal +appealingness +appeals +appearance +appearances +appearing +appeasement +appeaser +appeasers +appel +appellant +appellants +appellation +appellations +appellative +appels +appendage +appendages +appendant +appendants +appendectomies +appendectomy +appendicectomies +appendicectomy +appendicitis +appendix +appendixes +apperception +apperceptions +appestat +appestats +appetence +appetency +appetite +appetites +appetizer +appetizers +applauder +applauders +applause +apple +applecart +applecarts +apples +applet +applets +appliance +appliances +applicabilities +applicability +applicant +applicants +application +applications +applicator +applicators +applier +appliers +appoggiatura +appoggiaturas +appointee +appointees +appointment +appointments +appointor +appointors +apportioning +apportionment +apportionments +apposer +apposers +appositeness +apposition +appositions +appositive +appraisal +appraisals +appraiser +appraisers +appreciation +appreciations +appreciator +appreciators +apprehensibility +apprehension +apprehensions +apprehensiveness +apprentice +apprenticehood +apprentices +apprenticeship +apprenticeships +apprizer +apprizers +appro +approach +approachability +approaches +approaching +approbation +approbations +appropriateness +appropriation +appropriations +appropriativeness +appropriator +appropriators +approval +approvals +approver +approvers +approving +approximation +approximations +appulse +appulses +appurtenance +appurtenances +appurtenant +appurtenants +apraxia +apricot +apricots +apriorism +apriorisms +apriorist +apriorists +apriorities +apriority +apron +aprons +apse +apses +apsidiole +apsidioles +apsis +apterium +apteryx +apteryxes +aptitude +aptitudes +aptness +aqua +aquacade +aquacades +aquaculture +aqualung +aqualungs +aquamanale +aquamanales +aquamanile +aquamaniles +aquamarine +aquamarines +aquanaut +aquanauts +aquaphobia +aquaplane +aquaplaner +aquaplaners +aquaplanes +aquarelle +aquarelles +aquarellist +aquarellists +aquarist +aquarists +aquarium +aquariums +aquatic +aquatics +aquatint +aquatints +aquavit +aquavits +aqueduct +aqueducts +aquiculture +aquifer +aquifers +aquilegia +aquilegias +arabesque +arabesques +arabinose +arable +araceae +arachis +arachises +arachnid +arachnidan +arachnidans +arachnids +arachnoid +aragonite +arak +araks +aralia +aralias +araneid +araneids +arapaima +arapaimas +araroba +araucaria +araucarias +arb +arbalest +arbalester +arbalesters +arbalests +arbalister +arbalisters +arbiter +arbiters +arbitrage +arbitrager +arbitragers +arbitrages +arbitrageur +arbitrageurs +arbitrament +arbitraments +arbitrariness +arbitrary +arbitration +arbitrations +arbitrator +arbitrators +arbitrement +arbitrements +arbitress +arbitresses +arbor +arborescence +arborescences +arboretum +arboretums +arboriculture +arboriculturist +arborist +arborists +arborization +arborizations +arbors +arborvitae +arbour +arbours +arbs +arbutus +arbutuses +arc +arcade +arcades +arcana +arcanist +arcanists +arcanum +arch +archaeologist +archaeologists +archaeology +archaeomagnetism +archaeopteryx +archaeopteryxes +archaicism +archaiser +archaisers +archaism +archaisms +archaist +archaists +archaizer +archaizers +archangel +archangels +archbishop +archbishopric +archbishoprics +archbishops +archdeacon +archdeaconries +archdeaconry +archdeacons +archdiocese +archdioceses +archduchess +archduchesses +archduchies +archduchy +archduke +archdukes +archegonium +archenteron +archenterons +archeology +archer +archeries +archers +archery +arches +archetype +archetypes +archiepiscopacy +archiepiscopate +archil +archils +archimage +archimages +archimandrite +archimandrites +arching +archipelago +archipelagoes +archipelagos +architect +architectonics +architects +architecture +architectures +architrave +architraves +archive +archives +archivist +archivists +archivolt +archivolts +archlute +archlutes +archness +archon +archons +archonship +archonships +archway +archways +arcs +arcsecond +arcseconds +arctic +arctiid +arctiids +arcuation +arcuations +arcus +arcuses +ardeb +ardebs +ardency +ardor +ardors +ardour +ardours +arduousness +are +area +areas +areaway +areaways +areca +arecas +areg +aren't +arena +arenas +areography +areola +areolation +areole +areoles +arere +ares +arfvedsonite +argal +argali +argalis +argemone +argemones +argent +argentite +argents +argentum +argil +argillite +argillites +argils +arginine +argle-bargle +argol +argols +argon +argonaut +argonauts +argosies +argosy +argot +argots +arguer +arguers +argufier +argufiers +arguing +argument +argumentation +argumentations +argumentativeness +arguments +argumentum +argus +arguses +argy-bargy +argyle +argyles +argyrodite +arhythmia +aria +arias +aridity +aridness +ariel +ariels +arietta +ariettas +aril +arillode +arillodes +arils +arioso +ariosos +arista +aristas +aristocracies +aristocracy +aristocrat +aristocrats +arithmetic +arithmetician +arithmeticians +ark +arkose +arks +arm +armada +armadas +armadillo +armadillos +armament +armamentarium +armamentariums +armaments +armature +armatures +armband +armbands +armchair +armchairs +armet +armets +armful +armfuls +armhole +armholes +armies +armiger +armigers +armilla +armillaria +armillas +arming +armistice +armistices +armlet +armlets +armoire +armoires +armor +armorer +armorers +armorial +armories +armorist +armorists +armors +armory +armour +armour-bearer +armourer +armourers +armouries +armours +armoury +armpit +armpits +armrest +armrests +arms +arms-runner +arms-runners +armure +armures +army +arnica +arnicas +aroid +aroids +aroma +aromas +aromatic +aromatics +arousal +arousals +arouser +arousers +arpeggiation +arpeggiations +arpeggio +arpeggios +arpent +arpents +arquebus +arquebuses +arquebusier +arquebusiers +arrack +arracks +arraigner +arraigners +arraignment +arraignments +arrangement +arrangements +arranger +arrangers +arranging +arras +arrases +array +arrayal +arrayals +arrays +arrear +arrearage +arrearages +arrears +arrest +arrester +arresters +arrestment +arrestments +arrests +arrhenotoky +arrhythmia +arris +arrises +arrival +arrivals +arrivederci +arrivisme +arriviste +arrivistes +arroba +arrobas +arrogance +arrogances +arrogation +arrogations +arrondissement +arrondissements +arrow +arrowhead +arrowheads +arrowroot +arrowroots +arrows +arrowwood +arroyo +arroyos +arsenal +arsenals +arsenate +arsenic +arsenical +arsenide +arsenides +arsenite +arsenites +arshin +arshines +arshins +arsine +arsines +arsis +arson +arsonist +arsonists +arsphenamine +art +artal +artefact +artefacts +artel +artels +artemisia +artemisias +arterialisation +arterialization +arteries +arteriography +arteriole +arterioles +arteriosclerosis +arteriotomies +arteriotomy +arteritis +artery +artfulness +arthralgia +arthritis +arthromere +arthromeres +arthroplasty +arthropod +arthropods +arthroscopy +arthrospore +arthrospores +artic +artichoke +artichokes +article +articles +artics +articulacy +articulateness +articulation +articulations +articulator +articulators +artifact +artifacts +artifice +artificer +artificers +artifices +artificialities +artificiality +artificialness +artilleries +artillery +artiness +artiodactyl +artiodactyls +artisan +artisans +artist +artiste +artistes +artistries +artistry +artists +artlessness +artocarpus +artocarpuses +arts +artwork +artworks +arugula +arum +arums +arvo +arvos +aryballos +aryballoses +aryl +aryls +arytaenoid +arytaenoids +arytenoid +arytenoids +asafetida +asafoetida +asana +asanas +asarabacca +asarabaccas +asarum +asarums +asbestos +asbestosis +ascariasis +ascarid +ascarides +ascarids +ascaris +ascendance +ascendances +ascendancies +ascendancy +ascendant +ascendants +ascendence +ascendences +ascendencies +ascendency +ascendent +ascendents +ascender +ascenders +ascending +ascension +ascensions +ascent +ascents +ascertainment +ascesis +ascetic +asceticism +ascetics +asci +ascidian +ascidians +ascidium +ascites +asclepiad +asclepiads +asclepias +asclepiases +ascomycete +ascomycetes +ascospore +ascospores +ascription +ascriptions +ascus +aseity +asepsis +asepticism +asexuality +ash +ash-key +ash-keys +ash-pan +ash-pans +ashamedness +ashes +ashet +ashets +ashlar +ashlaring +ashlarings +ashlars +ashram +ashrams +aside +asides +asininities +asininity +askari +askaris +asker +askers +asking +asp +asparagine +asparagus +asparaguses +aspartame +aspect +aspects +aspen +aspens +asper +aspergill +aspergillosis +aspergills +aspergillum +aspergillums +aspergillus +asperities +asperity +aspers +aspersion +aspersions +aspersorium +asphalt +asphalts +asphaltum +asphodel +asphodels +asphyxia +asphyxiant +asphyxiants +asphyxiation +asphyxiations +asphyxiator +asphyxiators +aspic +aspics +aspidistra +aspidistras +aspirant +aspirants +aspirate +aspirates +aspiration +aspirations +aspirator +aspirators +aspirin +aspirins +asps +ass +assafetida +assagai +assagais +assai +assailant +assailants +assailer +assailers +assailment +assailments +assais +assassin +assassination +assassinations +assassinator +assassinators +assassins +assault +assaulter +assaulters +assaults +assay +assayer +assayers +assays +assegai +assegais +assemblage +assemblages +assembler +assemblers +assemblies +assembling +assembly +assemblyman +assemblywoman +assent +assentation +assentient +assenting +assentiveness +assentor +assentors +assents +asserter +asserters +assertion +assertions +assertiveness +assertor +assertors +asses +assessment +assessments +assessor +assessors +assessorship +assessorships +asset +asset-stripping +assets +asseveration +asseverations +assibilation +assibilations +assiduities +assiduity +assiduousness +assign +assignat +assignation +assignations +assignats +assignee +assignees +assigning +assignment +assignments +assignor +assignors +assigns +assimilation +assimilationist +assimilationists +assimilations +assist +assistance +assistances +assistant +assistants +assistantship +assistantships +assists +assize +assizes +associability +associate +associates +association +associationism +associations +assonance +assonances +assonant +assorter +assorters +assortment +assortments +assuagement +assuagements +assumpsit +assumpsits +assumption +assumptions +assurance +assurances +assured +assuredness +assureds +assurer +assurgency +astatine +aster +asterisk +asterisks +asterism +asteroid +asteroids +asters +asthenia +asthenic +asthenosphere +asthma +asthmatic +astigmatic +astigmatism +astigmia +astilbe +astilbes +astonishment +astonishments +astragal +astragals +astragalus +astragaluses +astrakhan +astrakhans +astraphobia +astriction +astrictions +astrictive +astringencies +astringency +astringent +astringents +astringer +astringers +astrocyte +astrodome +astrodomes +astrodynamics +astrogeology +astroid +astroids +astrolabe +astrolabes +astrolatry +astrologer +astrologers +astrology +astrometry +astronaut +astronautics +astronauts +astronavigation +astronomer +astronomers +astronomy +astrophysicist +astrophysicists +astrophysics +astucity +astuteness +asylum +asylums +asymmetries +asymmetry +asymptote +asymptotes +asynchronism +asynchrony +asyndeton +asyndetons +asynergia +asynergy +asystole +at-home +at-homes +atabal +atabals +atacamite +ataghan +ataghans +ataman +atamans +ataractic +ataraxia +ataraxic +atavism +ataxia +ataxy +ate +atebrin +atelectasis +ateleiosis +atelier +ateliers +atheism +atheist +atheists +atheling +athelings +athenaeum +athenaeums +atheneum +atheneums +atherine +atherines +athermancy +atheroma +atheromas +atherosclerosis +athetosis +athlete +athletes +athleticism +athletics +athrocyte +athrocytes +athrocytosis +atlas +atlases +atman +atmans +atmolysis +atmometer +atmometers +atmosphere +atmospheres +atmospherics +atoll +atolls +atom +atomicities +atomicity +atomies +atomisation +atomisations +atomiser +atomisers +atomism +atomist +atomists +atomization +atomizations +atomizer +atomizers +atoms +atomy +atonalism +atonality +atonement +atonements +atoner +atoners +atonic +atonicity +atony +atopies +atopy +atresia +atrium +atriums +atrociousness +atrocities +atrocity +atrophies +atrophy +atropine +atropism +attach +attachment +attachments +attack +attacker +attackers +attacks +attainability +attainableness +attainder +attainders +attainment +attainments +attaint +attaints +attainture +attaintures +attar +attempt +attemptability +attempter +attempts +attendance +attendances +attendant +attendants +attender +attenders +attending +attention +attentions +attentiveness +attenuant +attenuants +attenuation +attenuations +attenuator +attenuators +attestation +attestations +attester +attesters +attestor +attestors +attic +attics +attire +attirement +attirements +attires +attitude +attitudes +attitudinarian +attitudinarians +attitudiniser +attitudinisers +attitudinizer +attitudinizers +attorney +attorney-at-law +attorneys +attorneyship +attorneyships +attornment +attornments +attractant +attractants +attraction +attractions +attractiveness +attractor +attractors +attribute +attributes +attribution +attributions +attributive +attrition +aubade +aubades +auberge +auberges +aubergine +aubergines +aubergiste +aubergistes +aubrietia +aubrietias +auburn +auction +auctioneer +auctioneers +auctions +audaciousness +audacity +audibility +audibleness +audience +audiences +audile +audiles +audio +audiocassette +audiocassettes +audiogram +audiograms +audiology +audiometer +audiometers +audiophile +audiophiles +audios +audiotape +audiotapes +audiotypist +audiotypists +audiovisual +audiphone +audiphones +audit +audition +auditions +auditor +auditories +auditorium +auditoriums +auditors +auditorship +auditorships +auditory +auditress +auditresses +audits +auger +augers +aught +aughts +augite +augment +augmentation +augmentations +augmentative +augmenter +augmenters +augments +augur +auguries +augurs +augury +august +augustness +augusts +auk +auklet +auklets +auks +aulos +aumbries +aumbry +aune +aunes +aunt +auntie +aunties +aunts +aunty +aura +auras +aurelia +aurelian +aurelias +aureole +aureoles +aureomycin +aureus +auricle +auricles +auricula +auricular +auriculas +auriscope +auriscopes +aurist +aurists +aurochs +aurochses +aurora +auroras +aurum +auscultation +auscultator +auscultators +auspice +auspices +auspiciousness +austenite +austenites +austereness +austerities +austerity +austral +australes +australite +austringer +austringers +autacoid +autacoids +autarchies +autarchist +autarchists +autarchy +autarkist +autarkists +autarky +autecology +auteur +auteurs +authentication +authentications +authenticator +authenticators +authenticity +author +authoress +authoresses +authorisation +authorisations +authoritarian +authoritarianism +authoritarians +authoritativeness +authorities +authority +authorization +authorizations +authors +authorship +authorships +autism +auto +autoantibodies +autoantibody +autobiographer +autobiographers +autobiographies +autobiography +autobus +autobuses +autocade +autocades +autocatalysis +autocephaly +autochanger +autochangers +autochthon +autochthones +autochthonism +autochthons +autochthony +autoclave +autoclaves +autocracies +autocracy +autocrat +autocrats +autocross +autocrosses +autocue +autocues +autocycle +autocycles +autodidact +autodidacts +autodyne +autoeroticism +autoerotism +autogamy +autogenesis +autogenics +autogeny +autogiro +autogiros +autograft +autografts +autograph +autographs +autography +autogyro +autogyros +autoharp +autoharps +autohypnosis +autokinesis +autolatry +autolysis +automat +automata +automates +automatic +automaticity +automatics +automation +automations +automatism +automatist +automatists +automaton +automatons +automats +automobile +automobiles +automobilist +automobilists +automorphism +autonomies +autonomist +autonomists +autonomy +autonym +autonyms +autopilot +autopilots +autopista +autopistas +autoplasty +autopsies +autopsy +autoradiograph +autoradiographs +autoradiography +autoroute +autoroutes +autos +autosome +autosomes +autostrada +autostradas +autotimer +autotimers +autotomy +autotoxin +autotoxins +autotroph +autotrophs +autotype +autotypes +autumn +autumns +autunite +auxanometer +auxanometers +auxesis +auxetic +auxiliaries +auxiliary +auxin +auxins +avadavat +avadavats +avail +availability +availableness +avails +avalanche +avalanches +avant-garde +avant-gardism +avarice +avarices +avariciousness +avatar +avatars +avenger +avengers +avens +avenses +aventail +aventailes +aventails +aventurine +avenue +avenues +average +averages +averment +averments +averseness +aversion +aversions +averting +aves +aviaries +aviary +aviation +aviator +aviators +aviatress +aviatresses +aviatrix +aviculture +avidin +avidins +avidity +avidness +avifauna +avifaunas +avion +avionics +aviso +avisos +avitaminosis +avizandum +avizandums +avocado +avocados +avocation +avocations +avocet +avocets +avoidance +avoidances +avoirdupois +avoset +avosets +avouchment +avowal +avowals +avower +avowers +avowries +avowry +avulsion +avulsions +awakening +awakenings +award +awarding +awards +awareness +away +aways +awe +awelessness +awes +awesomeness +awfulness +awkwardness +awl +awls +awmous +awn +awner +awners +awning +awnings +awns +axe +axe-breaker +axe-breakers +axel +axels +axerophthol +axes +axiality +axil +axilla +axillar +axillary +axils +axinite +axinomancy +axiologist +axiologists +axiology +axiom +axioms +axis +axises +axle +axles +axman +axolotl +axolotls +axon +axons +axoplasm +ayah +ayahs +aye +aye-aye +ayes +ayre +ayres +azalea +azaleas +azan +azans +azathioprine +azeotrope +azeotropes +azide +azides +azidothymidine +azimuth +azimuths +azine +azines +azobenzene +azolla +azote +azoth +azoturia +azulejo +azulejos +azure +azures +azurite +baa +baa-lamb +baa-lambs +baas +baba +babas +babassu +babassus +babbitt +babbitting +babbitts +babble +babblement +babbler +babblers +babbles +babbling +babblings +babe +babes +babesia +babesiosis +babiche +babies +babiroussa +babiroussas +babirusa +babirusas +babirussa +babirussas +baboo +baboon +babooneries +baboonery +baboons +baboos +babu +babul +babuls +babus +babushka +babushkas +baby +baby-face +baby-sitter +baby-sitters +baby-walker +baby-walkers +babyhood +bacca +baccalaureate +baccalaureates +baccarat +baccas +bacchanal +bacchanalia +bacchanalianism +bacchanals +bacchant +bacchante +bacchantes +bacchants +bacchius +baccies +baccy +bach +bachelor +bachelor's-buttons +bachelordom +bachelorhood +bachelorism +bachelors +bachs +bacillemia +bacilli +bacillus +bacitracin +back +back-cloth +back-cloths +back-formation +back-number +back-to-back +backache +backaches +backband +backbands +backbencher +backbenchers +backbiter +backbiters +backboard +backboards +backbone +backbones +backbreaker +backbreakers +backchat +backcourt +backcross +backcrosses +backdown +backdowns +backdrop +backdrops +backer +backers +backfall +backfalls +backfield +backfill +backfills +backfire +backfires +backgammon +background +backgrounds +backhand +backhander +backhanders +backhands +backhoe +backhoes +backing +backings +backlash +backlashes +backlog +backlogs +backpack +backpacker +backpackers +backpacking +backpacks +backplate +backplates +backrest +backrests +backroom +backs +backsaw +backsaws +backscatter +backscatters +backscratcher +backscratchers +backseat +backset +backsets +backsheesh +backsheeshes +backside +backsides +backsight +backsights +backslapping +backslider +backsliders +backsliding +backspace +backspacer +backspacers +backspaces +backspin +backspins +backstabber +backstabbers +backstage +backstairs +backstitch +backstop +backstops +backstroke +backstrokes +backswing +backsword +backswordman +backswords +backveld +backwardation +backwardness +backwash +backwashes +backwater +backwaters +backwoods +backwoodsman +backyard +backyards +baclava +baclavas +bacon +baconer +baconers +bacons +bacteraemia +bacteremia +bacteria +bactericide +bactericides +bacteriochlorophyll +bacterioid +bacterioids +bacteriologist +bacteriologists +bacteriology +bacteriolysis +bacteriolytic +bacteriophage +bacteriophages +bacteriostasis +bacteriostat +bacteriostats +bacterium +bacteroid +bacteroids +baculite +baculites +baculum +bad +baddeleyite +baddie +baddies +bade +badge +badger +badgering +badgers +badges +badinage +badlands +badman +badminton +badmintons +badness +bael +baels +baetyl +baetyls +baff +baffies +baffle +baffled +bafflement +bafflements +baffler +bafflers +baffles +baffs +baffy +bag +bagasse +bagassosis +bagatelle +bagatelles +bagel +bagels +bagful +bagfuls +baggage +baggages +bagged +baggies +bagginess +bagging +baggings +baggy +bagman +bagnio +bagnios +bagpipe +bagpiper +bagpipers +bagpipes +bags +baguette +baguettes +baguio +baguios +bagwash +bagwashes +bagwig +bagwigs +baht +bahts +bahut +bahuts +bahuvrihi +bahuvrihis +bail +bailee +bailees +bailey +baileys +bailie +bailies +bailiff +bailiffs +bailiwick +bailiwicks +bailment +bailments +bailor +bailors +bails +bailsman +bain-marie +bainite +bairn +bairns +bait +baiter +baiters +baiting +baitings +baits +baize +baizes +bajada +bajadas +bake +bakeapple +bakeapples +bakehouse +bakehouses +bakemeat +baker +bakeries +bakers +bakery +bakes +bakeware +baking +bakings +baklava +baklavas +baksheesh +baksheeshes +balalaika +balalaikas +balance +balancer +balancers +balances +balancing +balanitis +balas +balases +balata +balboa +balboas +balconet +balconets +balconies +balcony +baldachin +baldachins +balderdash +balderdashes +baldies +baldmoney +baldmoneys +baldness +baldpate +baldpates +baldric +baldrick +baldricks +baldrics +baldy +bale +baleen +balefulness +baler +balers +bales +balibuntal +balibuntals +balk +balker +balkers +balkiness +balkline +balklines +balks +balky +ball +ballad +ballade +balladeer +balladeers +ballades +balladist +balladists +balladmonger +balladmongers +balladry +ballads +ballast +ballasts +ballcock +ballcocks +ballerina +ballerinas +ballet +balletomane +balletomanes +balletomania +ballets +ballista +ballistas +ballistics +ballistite +ballistocardiogram +ballistocardiograph +ballistocardiography +ballium +ballon +ballonet +ballonets +balloon +ballooning +balloonings +balloonist +balloonists +balloons +ballot +balloting +ballots +ballpen +ballpens +ballplayer +ballplayers +balls +ballup +ballyhoo +ballyhoos +balm +balmacaan +balmacaans +balminess +balmoral +balmorals +balms +balneologist +balneologists +balneology +baloney +balsa +balsam +balsams +balsas +baluster +balusters +balustrade +balustrades +bambino +bambinos +bamboo +bamboos +bamboozlement +ban +banalities +banality +banana +bananas +banc +bancs +band +bandage +bandages +bandaging +bandana +bandanas +bandanna +bandannas +bandeau +bandelet +bandelets +banderilla +banderillas +banderillero +banderilleros +banderole +banderoles +bandersnatch +bandersnatches +bandicoot +bandicoots +bandies +banding +bandings +bandit +banditry +bandits +bandleader +bandleaders +bandmaster +bandmasters +bandog +bandogs +bandoleer +bandoleers +bandolier +bandoliers +bandoline +bandolines +bandore +bandores +bands +bandsman +bandstand +bandstands +bandura +banduras +bandwagon +bandwagons +bandwidth +bandy +bane +baneberries +baneberry +banefulness +banes +bang +banger +bangers +banging +bangle +bangles +bangs +bani +bania +banian +banians +banias +banishment +banister +banisters +banjo +banjoes +banjoist +banjoists +banjos +bank +banker +bankers +banket +banking +bankroll +bankrolls +bankrupt +bankruptcies +bankruptcy +bankrupts +banks +banksia +banksias +banlieue +banner +banneret +bannerets +bannerol +bannerols +banners +banning +bannister +bannisters +bannock +bannocks +banns +banquet +banqueter +banqueters +banqueting +banquets +banquette +banquettes +bans +banshee +banshees +bant +bantam +bantams +banteng +bantengs +banter +banterer +banterers +banters +banting +bantings +bantling +bantlings +bants +banyan +banyans +banzai +banzais +baobab +baobabs +bap +baps +baptism +baptisms +baptist +baptisteries +baptistery +baptistries +baptistry +baptists +bar +barathea +baraza +barazas +barb +barbarian +barbarians +barbarisation +barbarisations +barbarism +barbarisms +barbarities +barbarity +barbarization +barbarizations +barbarousness +barbasco +barbascos +barbe +barbecue +barbecues +barbecuing +barbel +barbels +barbeque +barbeques +barber +barber-surgeon +barber-surgeons +barberries +barberry +barbers +barbes +barbet +barbets +barbette +barbettes +barbican +barbicans +barbicel +barbicels +barbital +barbitone +barbitones +barbiturate +barbiturates +barbotine +barbs +barbule +barbules +barcarole +barcaroles +barcarolle +barcarolles +barchan +barchanes +barchans +bard +bardolatry +bards +bardship +barefacedness +barege +bareness +bares +baresark +barflies +barfly +bargain +bargainer +bargainers +bargaining +bargains +barge +bargeboard +bargeboards +bargee +bargees +bargello +bargellos +bargeman +bargepole +bargepoles +barges +barghest +barghests +barilla +baring +barish +barite +baritone +baritones +barium +bark +barkeeper +barkeepers +barkentine +barkentines +barker +barkers +barkhan +barkhans +barks +barley +barley-bree +barley-sugar +barley-sugars +barleycorn +barleycorns +barleys +barm +barmaid +barmaids +barman +barmbrack +barmbracks +barms +barn +barnacle +barnacles +barndoor +barndoors +barney +barneys +barns +barnstormer +barnstormers +barnyard +barnyards +barogram +barograms +barograph +barographs +barometer +barometers +barometries +barometry +baron +baronage +baronages +baroness +baronesses +baronet +baronetage +baronetages +baronetcies +baronetcy +baronets +barong +barongs +baronies +barons +barony +baroque +baroques +baroreceptor +baroreceptors +baroscope +baroscopes +barostat +barostats +barouche +barouches +barque +barquentine +barquentines +barques +barrack +barracker +barrackers +barracking +barrackings +barracks +barracoon +barracoons +barracouta +barracoutas +barracuda +barracudas +barrage +barrages +barramunda +barramundas +barramundi +barramundis +barranca +barrator +barrators +barratry +barre +barred +barrel +barrelful +barrelfuls +barrels +barren +barrenness +barrenwort +barrenworts +barres +barret +barrets +barrette +barretter +barretters +barrettes +barricade +barricades +barricado +barricadoes +barricados +barrier +barriers +barring +barrings +barrio +barrios +barrister +barristers +barrow +barrow-boy +barrow-boys +barrows +barrulet +barrulets +bars +barstool +barstools +bartender +bartenders +barter +barterer +barterers +barters +bartizan +bartizans +barton +bartons +barye +baryes +baryon +baryons +barysphere +baryta +barytes +baryton +barytone +barytones +barytons +bas-relief +basalt +basalts +basanite +basanites +bascule +bascules +base +baseball +baseballs +baseboard +baseboards +baseliner +baseman +basement +basements +baseness +basenji +basenjis +baseplate +baseplates +bases +bash +bashaw +bashaws +bashes +bashfulness +basic +basicity +basics +basidiospore +basidiospores +basidium +basil +basilica +basilicas +basilisk +basilisks +basils +basin +basinet +basinets +basinful +basinfuls +basins +basis +basket +basketball +basketballs +basketful +basketfuls +basketry +baskets +basketwork +basnet +basnets +bason +basons +basophil +basophils +basque +basques +bass +basses +basset +bassets +bassinet +bassinets +bassist +bassists +basso +basso-relievo +basso-rilievo +bassoon +bassoonist +bassoonists +bassoons +bassos +basswood +basswoods +bast +bastard +bastardisation +bastardisations +bastardization +bastardizations +bastards +bastardy +baste +baster +basters +bastes +bastide +bastides +bastille +bastilles +bastinade +bastinades +bastinado +bastinadoes +bastinados +basting +bastings +bastion +bastions +bastnaesite +basts +bat +batata +batatas +batch +batches +bate +bateau +bateleur +bateleurs +bates +batfish +bath +bathe +bather +bathers +bathes +bathhouse +bathhouses +bathing +batholite +batholites +batholith +batholiths +bathometer +bathometers +bathos +bathrobe +bathrobes +bathroom +bathrooms +baths +bathtub +bathtubs +bathymeter +bathymeters +bathymetry +bathyscape +bathyscapes +bathyscaphe +bathyscaphes +bathysphere +bathyspheres +batik +batiks +batiste +batman +baton +batons +batrachia +batrachian +batrachians +bats +bats-in-the-belfry +batsman +batsmanship +batswing +batswings +batt +batta +battalia +battalias +battalion +battalions +battas +battel +batteler +battelers +battels +battement +battements +batten +battens +batter +batterie +batteries +battering +batters +battery +batting +battings +battle +battle-ax +battle-axe +battle-axes +battledore +battledores +battlefield +battlefields +battleground +battlegrounds +battlement +battlements +battleplane +battler +battlers +battles +battleship +battleships +battologies +battology +batts +battue +battues +battuta +batwing +batwoman +bauble +baubles +baud +baudekin +baudekins +bauds +baulk +baulks +bauxite +bavardage +bavardages +bawbee +bawbees +bawcock +bawcocks +bawd +bawdiness +bawdry +bawds +bawdy +bawl +bawler +bawlers +bawling +bawlings +bawls +bay +bayberries +bayberry +bayonet +bayonets +bayou +bayous +bays +bazaar +bazaars +bazar +bazars +bazooka +bazookas +bdellium +beach +beachcomber +beachcombers +beaches +beachhead +beachheads +beachwear +beacon +beacons +bead +beadiness +beading +beadings +beadle +beadledom +beadledoms +beadles +beads +beadsman +beadswoman +beagle +beagles +beagling +beaglings +beak +beaker +beakers +beaks +beam +beam-ends +beaminess +beams +bean +bean-bag +bean-bags +beaneries +beanery +beanfeast +beanfeasts +beanie +beanies +beano +beanos +beanpole +beanpoles +beans +beanstalk +beanstalks +beany +bear +bear's-breech +bear's-ear +bear's-foot +bear-baiting +bearableness +beard +bearding +beards +bearer +bearers +bearing +bearings +bearishness +bears +bearskin +bearskins +beast +beastie +beasties +beastings +beastliness +beastly +beasts +beat +beat-up +beater +beaters +beatification +beatifications +beating +beatings +beatitude +beatitudes +beatnik +beatniks +beats +beau +beaut +beauteousness +beautician +beauticians +beauties +beautification +beautifications +beautifier +beautifiers +beauts +beauty +beaux +beaver +beaver-tree +beavers +bebeerine +bebeerines +bebeeru +bebeerus +bebop +bebopper +beboppers +bebops +beccafico +beccaficos +bechamel +bechamels +beck +becket +beckets +beckon +beckons +becks +becoming +becomingness +bed +bed-sitter +bed-sitters +bed-wetting +bedazzlement +bedbug +bedbugs +bedchamber +bedchambers +bedclothes +bedcover +bedcovers +bedder +bedders +bedding +beddings +bedeguar +bedeguars +bedel +bedels +bedeman +bedesman +bedevilment +bedfellow +bedfellows +bedizenment +bedlam +bedlamite +bedlamites +bedlams +bedmaker +bedmakers +bedouin +bedouins +bedpan +bedpans +bedpost +bedposts +bedrock +bedrocks +bedroom +bedrooms +beds +bedside +bedsides +bedsit +bedsits +bedsock +bedsocks +bedsore +bedsores +bedspread +bedspreads +bedstead +bedsteads +bedstraw +bedstraws +bedtick +bedticks +bedtime +bedtimes +beduin +beduins +bedwarmer +bedwarmers +bee +bee-eater +bee-eaters +beech +beeches +beef +beefalo +beefaloes +beefalos +beefburger +beefburgers +beefcake +beefcakes +beefeater +beefeaters +beefiness +beefs +beefsteak +beefsteaks +beehive +beehives +beekeeper +beekeepers +beekeeping +beeline +beelines +beep +beeper +beepers +beeps +beer +beer-up +beeriness +beers +bees +beestings +beeswax +beeswaxes +beeswing +beet +beetle +beetle-crusher +beetle-crushers +beetlehead +beetleheads +beetles +beetroot +beetroots +beets +beeves +befooling +beg +begar +begetter +begetters +beggar +beggar's-lice +beggar-my-neighbour +beggardom +beggardoms +beggarliness +beggarman +beggars +beggarwoman +beggary +begging +beggings +beginner +beginners +beginning +beginnings +begonia +begonias +begs +beguilement +beguilements +beguiler +beguilers +beguine +beguines +begum +begums +behalf +behavior +behaviorism +behaviorist +behaviorists +behaviors +behaviour +behaviourism +behaviourist +behaviourists +behaviours +beheadal +beheadals +beheading +behemoth +behemoths +behest +behests +behind +behinds +beholder +beholders +beholding +behoof +behoofs +beige +beigel +beigels +beiges +being +beingness +beings +bel +belah +belahs +belatedness +belay +belays +belch +belcher +belchers +belches +belching +beldam +beldame +beldames +beldams +beleaguering +belemnite +belemnites +belfries +belfry +belga +belgas +belief +beliefs +belier +beliers +believer +believers +believing +belittlement +belittling +bell +bell-ringer +bell-ringers +belladonna +belladonnas +bellarmine +bellarmines +belle +belles +belles-lettres +belletrist +belletrists +bellicosity +bellies +belligerence +belligerency +belligerent +belligerents +belling +bellman +bellow +bellower +bellowers +bellowing +bellows +bellpull +bellpulls +bells +bellwether +bellwethers +bellwort +bellworts +belly +bellyache +bellyacher +bellyachers +bellyaches +bellyful +bellyfuls +belomancies +belomancy +belonging +belongings +beloved +bels +belshazzar +belshazzars +belt +belting +beltings +beltman +belts +beltway +beltways +beluga +belugas +belvedere +belvederes +bema +bemas +bemusement +ben +bench +bencher +benchers +benches +bend +bender +benders +bending +bendings +bendlet +bendlets +bends +bene +benedicite +benedicites +benediction +benedictional +benedictions +benefaction +benefactions +benefactor +benefactors +benefactress +benefactresses +benefice +beneficence +beneficences +benefices +beneficialness +beneficiaries +beneficiary +beneficiation +beneficiations +benefit +benefits +benes +benevolence +benevolences +bengaline +bengalines +benightedness +benignancy +benignity +benison +benisons +benjamin +benjamins +benne +bennes +bennet +bennets +benni +bennis +bens +bent +benthos +benthoses +bentonite +bents +bentwood +benumbedness +benumbment +benzaldehyde +benzene +benzidine +benzine +benzoate +benzocaine +benzodiazepine +benzoin +benzol +benzoyl +benzoyls +benzyl +bequeathal +bequeathals +bequeathment +bequeathments +bequest +bequests +berating +berberine +berberines +berberis +berberises +berceuse +berceuses +berdache +berdaches +bereavement +bereavements +beret +berets +berg +bergamot +bergamots +bergenia +bergenias +bergs +bergschrund +bergschrunds +beriberi +berk +berkelium +berks +berley +berlin +berlines +berlins +berm +berms +berries +berry +bersagliere +berserk +berserker +berserkers +berserks +berth +bertha +berthage +berthas +berthes +berths +beryl +beryllium +beryls +beseecher +beseechers +beseechingness +besetment +besetments +besetter +besetters +besiegement +besiegements +besieger +besiegers +besieging +besiegings +besom +besoms +besottedness +best +bestiality +bestiaries +bestiary +bestowal +bestowals +bestowment +bestowments +bests +bestsellerdom +bet +beta +betaine +betas +betatron +betatrons +betel +betels +betes +beth +bethel +bethels +beths +betonies +betony +betrayal +betrayals +betrayer +betrayers +betrothal +betrothals +betrothed +betrotheds +bets +better +betterment +betterments +betters +betties +bettor +bettors +betty +between-maid +betweenness +bevatron +bevatrons +bevel +beveler +bevelers +bevels +bever +beverage +beverages +bevers +bevies +bevvies +bevvy +bevy +bewilderment +bewitchery +bewitchment +bewitchments +bey +beyond +beys +bezant +bezants +bezel +bezels +bezique +beziques +bezoar +bezoars +bezonian +bhajan +bhajans +bhakti +bhaktis +bhang +bharal +bharals +bheesties +bheesty +bhindi +bias +biases +biathlon +biathlons +bib +bibber +bibbers +bibcock +bibcocks +bibelot +bibelots +bible +bibles +bibliographer +bibliographers +bibliographies +bibliography +bibliolater +bibliolaters +bibliolatrist +bibliolatrists +bibliolatry +bibliologies +bibliologist +bibliologists +bibliology +bibliomancy +bibliomania +bibliomaniac +bibliomaniacs +bibliopegist +bibliopegists +bibliopegy +bibliophile +bibliophiles +bibliophilism +bibliophily +bibliophobia +bibliopole +bibliopoles +bibliopolist +bibliopolists +bibliopoly +bibliotheca +bibliothecas +bibs +bibulousness +bicameralism +bicameralist +bicameralists +bicarb +bicarbonate +bicarbonates +bice +bicentenaries +bicentenary +bicentennial +bicentennials +biceps +bicepses +bichromate +bicker +bickerer +bickerers +bickering +bickers +bicorn +bicorne +bicuspid +bicuspids +bicycle +bicycler +bicyclers +bicycles +bicycling +bicyclist +bicyclists +bid +bidarka +bidarkas +bidder +bidders +biddies +bidding +biddings +biddy +bides +bidet +bidets +bids +bield +bields +biennial +biennials +bier +bierkeller +bierkellers +biers +biestings +biff +biffin +biffins +biffs +bifurcation +bifurcations +biga +bigamies +bigamist +bigamists +bigamy +bigarade +bigarades +bigener +bigeners +bigfoot +bigg +biggie +biggies +biggin +bigging +biggins +biggs +biggy +bighead +bigheads +bigheartedness +bighorn +bighorns +bight +bights +bigmouth +bigness +bigot +bigotries +bigotry +bigots +biguanide +bigwig +bigwigs +bijection +bijou +bijouterie +bike +bikes +bikie +bikies +bikini +bikinis +bilabial +bilabials +bilander +bilanders +bilateralism +bilberries +bilberry +bilbo +bilboes +bilbos +bile +biles +bilge +bilges +bilharzia +bilharziasis +bilimbi +bilimbis +bilingual +bilingualism +bilinguist +bilinguists +biliousness +bilirubin +biliverdin +bilk +bilker +bilkers +bilks +bill +bill-broker +billabong +billboard +billboards +billet +billet-doux +billets +billfish +billfold +billfolds +billhead +billheads +billhook +billhooks +billiard +billiards +billies +billing +billings +billingsgate +billion +billionaire +billionaires +billions +billionth +billionths +billman +billon +billons +billow +billows +billposter +billposters +bills +billy +billyboy +billyboys +billycock +billycocks +bilocation +biltong +bimbo +bimbos +bimetallism +bimetallist +bimetallists +bimillenaries +bimillenary +bimillennium +bimillenniums +bimodality +bimonthly +bin +binaries +binary +bind +binder +binderies +binders +bindery +bindi-eye +binding +bindings +binds +bindweed +bindweeds +bine +bines +bing +binge +binges +bingies +bingle +bingles +bingo +bingos +bings +bingy +binnacle +binnacles +binocle +binocles +binocular +binoculars +binomial +binomials +binominal +bins +binturong +binturongs +bioassay +bioastronautics +biocatalyst +biochemical +biochemist +biochemistry +biochemists +biocide +biocides +bioclimatology +biodynamics +bioecology +bioelectricity +bioengineering +biofeedback +bioflavonoid +biog +biogen +biogenesis +biogens +biogeny +biogeochemistry +biogeography +biographee +biographer +biographers +biographies +biography +biogs +biological +biologist +biologists +biology +bioluminescence +biolysis +biomass +biomasses +biome +biomedicine +biomes +biometrician +biometricians +biometrics +biometry +bionics +bionomics +biont +bionts +biophysicist +biophysicists +biophysics +bioplasm +biopoiesis +biopsies +biopsy +bioscope +biosphere +biospheres +biosynthesis +biosystematics +biota +biotas +biotechnology +biotin +biotite +biotype +biotypes +bipartisanship +bipartition +bipartitions +biped +bipeds +biphenyl +bipinnaria +bipinnarias +biplane +biplanes +bipod +bipods +bipolarity +bipropellant +bipyramid +bipyramids +biquadratic +biracialism +birch +birches +bird +bird's-eye +bird's-foot +bird-nesting +bird-watcher +bird-watchers +birdbath +birdbaths +birdbrain +birdbrains +birdcage +birdcages +birdcall +birdcalls +birder +birders +birdhouse +birdhouses +birdie +birdies +birdman +birds +birdseed +birdseeds +birefringence +bireme +biremes +biretta +birettas +biriani +birianis +birk +birks +birl +birles +birling +birlings +birls +birr +birrs +birse +birses +birth +birthday +birthdays +birthing +birthmark +birthmarks +birthnight +birthnights +birthplace +birthplaces +birthright +birthrights +births +birthstone +birthstones +birthwort +birthworts +biscuit +biscuits +bise +bisection +bisections +bisector +bisectors +bises +bisexual +bisexuality +bisexuals +bish +bishes +bishop +bishop's-cap +bishopric +bishoprics +bishops +bisk +bisks +bismuth +bison +bisons +bisque +bisques +bissextile +bissextiles +bister +bistort +bistorts +bistouries +bistoury +bistre +bistro +bistros +bisulphate +bisulphide +bit +bitch +bitcheries +bitchery +bitches +bitchiness +bite +biter +biters +bites +bitmap +bitmaps +bitonality +bits +bitt +bitter +bittercress +bitterling +bitterlings +bittern +bitterness +bitterns +bitters +bittersweet +bittersweets +bitterwood +bitterwoods +bitting +bittock +bittocks +bitts +bitumen +bitumens +bituminisation +bivalence +bivalences +bivalencies +bivalency +bivalent +bivalents +bivalve +bivalves +bivouac +bivouacking +bivouacs +bivvies +bivvy +biz +bizarreness +bizone +bizones +blab +blabber +blabbermouth +blabbermouths +blabbers +blabs +black +black-and-white +blackamoor +blackamoors +blackball +blackballs +blackberries +blackberry +blackbird +blackbirder +blackbirders +blackbirding +blackbirdings +blackbirds +blackboard +blackboards +blackbody +blackboy +blackboys +blackbuck +blackbucks +blackbutt +blackcap +blackcaps +blackcock +blackcocks +blackcurrant +blackcurrants +blackdamp +blackening +blackface +blackfellow +blackfellows +blackfish +blackfishes +blackfly +blackguard +blackguardism +blackguards +blackhead +blackheads +blackheart +blackhearts +blacking +blackings +blackjack +blackjacks +blackleg +blacklegs +blacklist +blacklists +blackmail +blackmailer +blackmailers +blackmails +blackness +blacknesses +blackout +blackouts +blacks +blacksmith +blacksmiths +blackthorn +blackthorns +blacktop +blacktops +blackwater +blackwood +blackwoods +bladder +bladders +bladderwort +bladderworts +blade +blades +blaeberries +blaeberry +blague +blagues +blah +blahs +blain +blains +blamableness +blame +blameableness +blamefulness +blamelessness +blames +blameworthiness +blancmange +blancmanges +blandishment +blandishments +blandness +blandnesses +blank +blanket +blanketing +blanketings +blankets +blankness +blanknesses +blanks +blanquette +blare +blares +blaring +blarney +blarneys +blasphemer +blasphemers +blasphemies +blasphemy +blast +blast-off +blast-offs +blastema +blastemas +blaster +blasters +blasting +blastings +blastment +blastocoel +blastocyst +blastocysts +blastoderm +blastoderms +blastogenesis +blastomere +blastomeres +blastopore +blastopores +blastosphere +blastospheres +blasts +blastula +blastulas +blatancy +blather +blathers +blatherskite +blatherskites +blaubok +blauboks +blaze +blazer +blazers +blazes +blazing +blazon +blazoner +blazoners +blazonry +blazons +bleach +bleacher +bleacheries +bleachers +bleachery +bleaches +bleak +bleakness +bleaknesses +bleaks +bleariness +bleat +bleater +bleaters +bleats +bleb +blebs +bleed +bleeder +bleeders +bleeding +bleedings +bleeds +bleep +bleeps +blemish +blemishes +blend +blende +blender +blenders +blending +blendings +blends +blennies +blenny +blepharitis +blepharospasm +blesbok +blesboks +blessed +blessedness +blessing +blessings +blet +blether +blethers +blets +bletting +blewits +blewitses +blight +blighter +blighters +blighties +blights +blighty +blimp +blimps +blind +blindage +blindages +blinder +blinders +blindfish +blindfishes +blindfold +blindfolds +blinding +blindings +blindness +blindnesses +blinds +blindworm +blindworms +blini +blinis +blink +blinkard +blinkards +blinker +blinkers +blinks +blinkses +blintz +blintze +blintzes +blip +blips +bliss +blissfulness +blister +blisters +blitheness +blithesomeness +blitz +blitzes +blitzkrieg +blitzkriegs +blizzard +blizzards +bloat +bloatedness +bloater +bloaters +bloats +blob +blobs +bloc +block +blockade +blockade-runner +blockade-runners +blockader +blockaders +blockades +blockage +blockages +blockboard +blockbuster +blockbusters +blockbusting +blocker +blockers +blockhead +blockheads +blockhouse +blockhouses +blocking +blockings +blocks +blocs +bloke +blokes +blond +blonde +blondeness +blondes +blondness +blonds +blood +bloodhound +bloodhounds +bloodiness +blooding +bloodlessness +bloodletter +bloodletters +bloodletting +bloodlettings +bloodline +bloodlines +bloodlust +bloodlusts +bloodmobile +bloodmobiles +bloodroot +bloodroots +bloods +bloodshed +bloodsheds +bloodstain +bloodstains +bloodstock +bloodstone +bloodstones +bloodstream +bloodstreams +bloodsucker +bloodsuckers +bloodthirstiness +bloom +bloomer +bloomeries +bloomers +bloomery +blooming +blooms +blooper +bloopers +blossom +blossoming +blossomings +blossoms +blot +blotch +blotches +blots +blotter +blotters +blouse +blouses +blouson +blousons +blow +blow-by-blow +blowback +blowbacks +blowball +blowballs +blower +blowers +blowfish +blowflies +blowfly +blowgun +blowguns +blowhard +blowhards +blowhole +blowholes +blowie +blowies +blowing +blowlamp +blowlamps +blowoff +blowoffs +blowpipe +blowpipes +blows +blowtorch +blowtorches +blubber +blubberer +blubberers +blubbers +blucher +bluchers +bludge +bludgeon +bludgeons +bludges +blue +blue-green +bluebeard +bluebeards +bluebell +bluebells +blueberries +blueberry +bluebird +bluebirds +bluebottle +bluebottles +bluecoat +bluecoats +bluefish +bluefishes +bluegill +bluegills +bluegrass +bluegrasses +blueing +blueings +bluejacket +bluejackets +blueness +bluenose +bluenoses +blueprint +blueprints +bluer +blues +bluest +bluestocking +bluestockings +bluestone +bluestones +bluet +bluethroat +bluethroats +bluetit +bluetits +blueweed +blueweeds +bluewing +bluewings +bluey +blueys +bluff +bluffer +bluffers +bluffness +bluffnesses +bluffs +bluing +bluings +blunder +blunderbuss +blunderbusses +blunderer +blunderers +blunders +blunger +blungers +bluntness +bluntnesses +blur +blurb +blurbs +blurriness +blurs +blush +blusher +blushers +blushes +bluster +blusterer +blusterers +blusters +bo-peep +boa +boar +board +boarder +boarders +boarding +boardings +boardroom +boardrooms +boards +boardwalk +boardwalks +boarfish +boarfishes +boarhound +boarhounds +boars +boart +boarts +boas +boast +boaster +boasters +boastfulness +boasting +boastings +boasts +boat +boatbill +boatbills +boatel +boatels +boater +boaters +boathouse +boathouses +boating +boatman +boats +boatswain +boatswains +boattail +boattails +bob +bobberies +bobbery +bobbies +bobbin +bobbinet +bobbinets +bobbing +bobbins +bobble +bobbles +bobby +bobby-dazzler +bobby-dazzlers +bobbysock +bobbysocks +bobbysoxer +bobbysoxers +bobcat +bobcats +bobolink +bobolinks +bobs +bobsled +bobsleds +bobsleigh +bobsleighs +bobstay +bobstays +bobtail +bobtails +bocage +bocages +bocce +boche +bock +bocks +bod +bodega +bodegas +bodement +bodements +bodes +bodgie +bodgies +bodice +bodices +bodied +bodies +boding +bodings +bodkin +bodkins +bods +body +bodyguard +bodyguards +bodying +bodywork +bodyworks +boff +boffin +boffins +boffo +boffs +bog +bogan +bogans +bogbean +bogbeans +bogey +bogeyman +bogeys +boggart +boggarts +bogginess +boggler +bogglers +bogie +bogies +bogle +bogles +bogong +bogongs +bogs +bogtrotter +bogtrotters +bogy +bohea +bohunk +bohunks +boil +boiler +boilermaker +boilermakers +boilerplate +boilers +boilersuit +boilersuits +boiling +boilings +boils +boisterousness +boko +bokos +bola +bolas +bold +boldness +boldo +bole +bolection +bolections +bolero +boleros +boles +boletus +boletuses +bolide +bolides +bolivar +bolivars +boliviano +bolivianos +boll +bollard +bollards +bollock +bollocks +bolls +bolo +bolometer +bolometers +boloney +bolos +bolshevism +bolster +bolsters +bolt +bolter +bolters +bolts +bolus +boluses +boma +bomas +bomb +bombard +bombardier +bombardiers +bombardment +bombardments +bombardon +bombardons +bombards +bombast +bombasts +bombax +bombaxes +bombazine +bombazines +bombe +bomber +bombers +bombes +bombing +bombora +bomboras +bombproof +bombs +bombshell +bombshells +bombsight +bombsights +bombycid +bombycids +bonanza +bonanzas +bonbon +bonbons +bonce +bonces +bond +bondage +bonder +bonders +bonding +bondings +bondmaid +bondmaids +bondman +bonds +bondservant +bondservants +bondsman +bondstone +bondstones +bondswoman +bonduc +bonducs +bone +bonefish +bonehead +boneheads +boner +boners +bones +boneset +bonesets +bonesetter +bonesetters +boneshaker +boneshakers +boneyard +boneyards +bonfire +bonfires +bong +bongo +bongoes +bongos +bongrace +bongraces +bongs +bonhomie +boniness +bonism +bonito +bonitos +bonne +bonnet +bonnets +bonniness +bonsai +bonspiel +bonspiels +bontebok +bonteboks +bonus +bonuses +bonxie +bonxies +bonze +bonzes +boo +boob +boobies +boobook +boobooks +boobs +booby +boodle +boodles +boogie +boogie-woogie +boogies +boohoo +boohoos +book +book-learning +bookbinder +bookbinderies +bookbinders +bookbindery +bookbinding +bookbindings +bookcase +bookcases +bookie +bookies +booking +bookings +bookishness +bookkeeper +bookkeepers +bookkeeping +booklet +booklets +booklouse +bookmaker +bookmakers +bookmaking +bookman +bookmark +bookmarker +bookmarkers +bookmarks +bookmobile +bookmobiles +bookplate +bookplates +bookrest +bookrests +books +bookseller +booksellers +bookshelf +bookshop +bookshops +bookstall +bookstalls +bookstand +bookstands +bookstore +bookwork +bookworks +bookworm +bookworms +boom +boomer +boomerang +boomerangs +boomers +boomlet +boomlets +booms +boon +boondocks +boondoggle +boondoggler +boondogglers +boondoggles +boons +boor +boorishness +boors +boos +boost +booster +boosters +boosts +boot +bootblack +bootblacks +bootee +bootees +booth +boothose +booths +bootie +booties +bootlace +bootlaces +bootleg +bootlegged +bootlegger +bootleggers +bootlegging +bootlegs +bootlessness +bootlicker +bootlickers +bootmaker +bootmakers +boots +bootses +bootstrap +bootstraps +booty +booze +booze-up +booze-ups +boozer +boozers +boozes +booziness +boozing +bop +bopper +boppers +bops +bor +bora +boracite +borage +borages +borak +borane +boranes +boras +borate +borates +borax +borazon +borborygmus +bord +bordel +bordello +bordellos +bordels +border +bordereau +borderer +borderers +borderland +borderlands +borderline +borderlines +borders +bordure +bordures +bore +borecole +borecoles +boredom +boree +borehole +boreholes +borer +borers +bores +boride +borides +boring +borings +bornite +boron +boronia +boronias +borosilicate +borough +borough-English +boroughs +borrow +borrower +borrowers +borrowing +borrowings +borrows +bors +borsch +borsches +borscht +borschts +borstal +borstals +bort +borts +bortsch +bortsches +borzoi +borzois +bos +bos'n +bos'ns +boscage +boscages +boschbok +bosh +boshes +bosk +boskage +boskages +bosket +boskets +boskiness +bosks +bosom +bosoms +boson +bosons +bosquet +bosquets +boss +bosses +bossiness +bossism +boston +bostons +bosun +bosuns +bot +botanical +botanist +botanists +botanomancy +botany +botargo +botargoes +botargos +botch +botcher +botcheries +botchers +botchery +botches +botel +botels +botflies +botfly +bother +botheration +bothers +bothies +bothy +bots +bott +botte +bottega +bottegas +bottle +bottle-o +bottle-washer +bottle-washers +bottlebrush +bottlebrushes +bottleful +bottlefuls +bottleneck +bottlenecks +bottler +bottlers +bottles +bottom +bottomry +bottoms +botts +botulism +bouche +boudoir +boudoirs +bouffant +bougainvillaea +bougainvillaeas +bough +boughpot +boughpots +boughs +bougie +bougies +bouillabaisse +bouillabaisses +bouillon +bouillons +bouk +bouks +boulder +boulders +boule +boules +boulevard +boulevardier +boulevardiers +boulevards +bouleversement +bouleversements +boulle +boulles +bounce +bouncer +bouncers +bounces +bounciness +bouncing +bound +boundaries +boundary +bounder +bounders +boundlessness +bounds +bounteousness +bounties +bountifulness +bounty +bouquet +bouquets +bourbon +bourbons +bourdon +bourdons +bourg +bourgeois +bourgeoise +bourgeoisie +bourgeoisies +bourgeon +bourgeons +bourgs +bourguignon +bourn +bourne +bournes +bourns +bourse +bourses +bourtree +bourtrees +boustrophedon +bout +boutique +boutiques +bouts +bouzouki +bouzoukis +bovate +bovates +bovid +bovine +bovver +bow +bowdlerisation +bowdlerisations +bowdlerism +bowdlerisms +bowdlerization +bowdlerizations +bowel +bowels +bower +bowers +bowery +bowfin +bowfins +bowhead +bowheads +bowing +bowknot +bowknots +bowl +bowlder +bowlders +bowler +bowlers +bowlful +bowlfuls +bowline +bowlines +bowling +bowlings +bowls +bowman +bowpot +bowpots +bows +bowser +bowsers +bowshot +bowshots +bowsprit +bowsprits +bowstring +bowstrings +bowwow +bowwows +bowyang +bowyangs +bowyer +bowyers +box +boxer +boxers +boxes +boxful +boxfuls +boxing +boxings +boxroom +boxrooms +boxwood +boxwoods +boy +boyar +boyars +boycott +boycotter +boycotters +boycotts +boyfriend +boyfriends +boyhood +boyhoods +boyishness +boyo +boyos +boys +boysenberries +boysenberry +bozo +bozos +br'er +bra +brabble +brabblement +brabbles +braccio +brace +bracelet +bracelets +bracer +bracers +braces +brach +braches +brachiation +brachiations +brachiopod +brachiopods +brachiosaurus +brachiosauruses +brachistochrone +brachium +brachycephalic +brachycephaly +brachydome +brachydomes +brachylogy +bracing +bracken +brackens +bracket +bracketing +brackets +brackishness +bract +bracteate +bracteates +bracteole +bracteoles +bracts +brad +bradawl +bradawls +brads +bradycardia +brae +braes +brag +braggadocio +braggadocios +braggart +braggartism +braggarts +bragger +braggers +bragging +brags +braid +braider +braiding +braidings +braids +brail +brails +brain +brain-teaser +brain-teasers +braincase +braincases +brainchild +braininess +brainlessness +brainpan +brainpans +brainpower +brains +brainsickness +brainstorm +brainstorming +brainstorms +brainwashing +brainwave +brainwaves +braising +brake +brake-van +brakeman +brakes +bramble +brambles +brambling +bramblings +bran +branch +branches +branchia +branching +branchings +branchiopod +branchiopods +branchlet +branchlets +brand +brander +brandering +branders +brandies +branding +brandish +brandishes +brandling +brandlings +brandreth +brandreths +brands +brandy +brangle +brangles +branle +branles +brans +bransle +bransles +brant +brants +bras +brash +brashes +brashness +brasier +brasiers +brass +brassard +brassards +brasserie +brasseries +brasses +brassica +brassicas +brassie +brassiere +brassieres +brassies +brassiness +brat +brats +brattice +brattices +brattishing +brattishings +brattle +brattles +bratwurst +bratwursts +braunite +brava +bravado +bravadoes +bravados +bravas +brave +braveness +braveries +bravery +braves +bravest +braving +bravo +bravoes +bravos +bravura +bravuras +brawl +brawler +brawlers +brawls +brawn +brawniness +braxies +braxy +bray +brayer +brays +brazenness +brazer +brazers +brazier +braziers +brazil +brazilein +brazilin +brazils +breach +breaches +bread +breadfruit +breadfruits +breadline +breadlines +breadnut +breadnuts +breadroot +breadroots +breads +breadstuff +breadstuffs +breadth +breadths +breadwinner +breadwinners +break +break-in +break-ins +breakable +breakableness +breakage +breakages +breakaway +breakaways +breakdown +breakdowns +breaker +breakers +breakfast +breakfasts +breaking +breakings +breakpoint +breakpoints +breaks +breakthrough +breakthroughs +breakwater +breakwaters +bream +breams +breast +breastbone +breastbones +breasting +breastpin +breastpins +breastplate +breastplates +breasts +breaststroke +breaststrokes +breastsummer +breastsummers +breastwork +breastworks +breath +breathalyser +breathalysers +breathalyzer +breathalyzers +breather +breathers +breathes +breathiness +breathing +breathings +breathlessness +breaths +breccia +breccias +brede +bredes +bree +breech +breechblock +breechblocks +breeches +breeching +breechings +breed +breeder +breeders +breeding +breedings +breeds +brees +breeze +breezes +breezeway +breeziness +bregma +breloque +breloques +bremsstrahlung +bren +brens +brent +bressummer +bressummers +breton +bretons +breve +breves +brevet +brevets +breviaries +breviary +breviate +breviates +brevier +breviers +brevity +brew +brewage +brewages +brewer +breweries +brewers +brewery +brewing +brewings +brewis +brewises +brewmaster +brews +briar +briars +bribe +briber +briberies +bribers +bribery +bribes +bric-a-brac +brick +brickbat +brickbats +brickfield +brickfielder +brickfields +brickkiln +brickkilns +bricklayer +bricklayers +bricklaying +brickmaker +brickmakers +brickmaking +bricks +brickwork +brickworks +brickyard +brickyards +bricole +bricoles +bridal +bridals +bride +bridecake +bridecakes +bridegroom +bridegrooms +brides +bridesmaid +bridesmaids +bridewell +bridewells +bridge +bridgeboard +bridgeboards +bridgehead +bridgeheads +bridges +bridgework +bridging +bridgings +bridie +bridies +bridle +bridler +bridlers +bridles +bridoon +bridoons +brief +briefcase +briefcases +briefing +briefings +briefness +briefs +brier +briers +brig +brigade +brigades +brigadier +brigadiers +brigalow +brigalows +brigand +brigandage +brigandine +brigandines +brigands +brigantine +brigantines +bright +brightener +brighteners +brightness +brightnesses +brights +brightwork +brigs +brill +brilliance +brilliances +brilliancies +brilliancy +brilliant +brilliantine +brilliantness +brilliants +brills +brim +brimfulness +brimmer +brimmers +brims +brimstone +brimstones +brindle +brine +brines +bringer +bringers +bringing +bringings +brininess +brinjal +brinjals +brink +brinkmanship +brinks +briny +brio +brioche +brioches +brionies +briony +briquet +briquets +briquette +briquettes +brise-soleil +brise-soleils +brisket +briskets +briskness +brisling +brislings +bristle +bristles +bristliness +brisure +brisures +brit +britches +brits +britska +britskas +brittle +brittle-star +brittle-stars +brittleness +britzka +britzkas +bro +broach +broacher +broachers +broaches +broad +broad-mindedness +broad-spectrum +broadbill +broadcast +broadcaster +broadcasters +broadcasting +broadcastings +broadcasts +broadcloth +broadcloths +broadening +broadloom +broadness +broads +broadsheet +broadsheets +broadside +broadsides +broadsword +broadswords +broadtail +broadtails +broadway +broadways +brocade +brocades +brocatel +brocatelle +broccoli +broccolis +broch +brochette +brochettes +brochs +brochure +brochures +brock +brockage +brocket +brockets +brocks +brogan +brogans +brogh +broghs +brogue +brogues +broiderer +broiderers +broidery +broil +broiler +broilers +broiling +broils +brokage +brokages +brokenheartedness +brokenness +broker +broker-dealer +broker-dealers +brokerage +brokerages +brokers +brolga +brolgas +brollies +brolly +bromate +bromates +bromelia +bromeliad +bromeliads +bromelias +bromide +bromides +bromidrosis +bromination +bromine +bromism +bromoform +bronchi +bronchiectasis +bronchiole +bronchioles +bronchitis +broncho +bronchos +bronchoscope +bronchoscopes +bronchoscopies +bronchoscopy +bronchus +bronco +broncos +brontosaur +brontosaurs +brontosaurus +brontosauruses +bronze +bronzed +bronzes +bronzing +bronzings +bronzite +broo +brooch +brooches +brood +brooder +brooders +broodiness +brooding +broods +broody +brook +brookite +brooklet +brooklets +brooklime +brooklimes +brooks +brookweed +brookweeds +broom +broomrape +broomrapes +brooms +broomstick +broomsticks +broos +bros +brose +broses +broth +brothel +brothels +brother +brother-in-law +brotherhood +brotherhoods +brotherliness +brothers +broths +brough +brougham +broughams +broughs +brouhaha +brouhahas +brow +browband +browbeater +browbeaters +brown +brown-nose +brown-noses +brownie +brownies +browning +brownings +brownness +brownout +brownouts +browns +brows +browse +browser +browsers +browses +browsing +browsings +brucellosis +brucine +brucite +bruise +bruiser +bruisers +bruises +bruit +bruits +brulyie +brulyies +brumbies +brumby +brume +brumes +brunch +brunches +brunet +brunets +brunette +brunettes +brunt +brunts +brush +brush-off +brush-offs +brusher +brushers +brushes +brushing +brushings +brushwood +brushwoods +brushwork +brushworks +brusqueness +brusquerie +brusqueries +brutalisation +brutalisations +brutalities +brutality +brutalization +brutalizations +brute +bruteness +brutes +brutishness +bruxism +bryologist +bryologists +bryology +bryonies +bryony +bryophyte +bryophytes +bub +bubal +bubals +bubbies +bubble +bubbles +bubbly +bubbly-jock +bubby +bubo +buboes +bubonocele +bubonoceles +bubs +buccaneer +buccaneering +buccaneers +buccinator +buccinators +buchu +buchus +buck +buckaroo +buckaroos +buckayro +buckayros +buckbean +buckbeans +buckboard +buckboards +buckeen +buckeens +bucker +buckers +bucket +bucketful +bucketfuls +buckets +buckhorn +buckhorns +buckhound +buckhounds +buckle +buckler +bucklers +buckles +buckling +bucklings +bucko +buckoes +buckra +buckram +buckrams +buckras +bucks +buckshot +buckshots +buckskin +buckskins +buckthorn +buckthorns +bucktooth +buckwheat +buckwheats +bucolic +bucolics +bud +buddies +budding +buddings +buddle +buddleia +buddleias +buddles +buddy +budge +budger +budgerigar +budgerigars +budgers +budges +budget +budgets +budgie +budgies +buds +buff +buffa +buffalo +buffaloes +buffer +buffers +buffet +buffeting +buffetings +buffets +bufflehead +buffleheads +buffo +buffoon +buffoonery +buffoons +buffs +bufo +bufotenine +bug +bug-hunter +bug-hunters +bugaboo +bugaboos +bugbane +bugbanes +bugbear +bugbears +buggies +buggy +bughouse +bugle +bugler +buglers +bugles +bugleweed +bugloss +buglosses +bugong +bugongs +bugs +buhl +buhls +buhrstone +buhrstones +build +build-up +build-ups +builder +builders +building +buildings +builds +built-in +bulb +bulbil +bulbils +bulbs +bulbul +bulbuls +bulge +bulges +bulghur +bulginess +bulgur +bulimia +bulk +bulkhead +bulkheads +bulkiness +bulks +bull +bull's-eye +bull's-eyes +bulla +bullace +bullaces +bullaries +bullary +bullas +bullbat +bulldog +bulldogs +bulldozer +bulldozers +bullet +bulletin +bulletins +bullets +bullfight +bullfighter +bullfighters +bullfights +bullfinch +bullfinches +bullfrog +bullfrogs +bullhead +bullheads +bullied +bullies +bullion +bullionist +bullionists +bullions +bullishness +bullnose +bullock +bullocks +bullocky +bullroarer +bullroarers +bulls +bullwhip +bullwhips +bully +bully-off +bully-offs +bullying +bulnbuln +bulnbulns +bulrush +bulrushes +bulwark +bulwarks +bum +bumbailiff +bumbailiffs +bumbershoot +bumbershoots +bumble +bumble-puppy +bumbler +bumblers +bumbles +bumbling +bumf +bumfs +bumkin +bumkins +bummalo +bummaree +bummarees +bummed +bummer +bummers +bumming +bump +bumper +bumpers +bumph +bumphs +bumpiness +bumpkin +bumpkins +bumps +bumptiousness +bums +bun +buna +bunce +bunces +bunch +bunches +bunchiness +bunco +buncombe +buncos +bund +bundle +bundles +bundling +bundlings +bundobust +bundobusts +bunds +bundu +bung +bungalow +bungalows +bungee +bungees +bungle +bungler +bunglers +bungles +bungs +bunion +bunions +bunk +bunker +bunkers +bunkhouse +bunkhouses +bunko +bunkos +bunks +bunkum +bunnies +bunny +bunraku +buns +bunt +buntal +bunter +bunters +bunting +buntings +buntline +buntlines +bunts +bunyip +bunyips +buoy +buoyage +buoyages +buoyancy +buoys +buprestid +bur +buran +burans +burble +burbler +burblers +burbles +burbot +burbots +burd +burden +burdens +burdock +burdocks +burds +bureau +bureaucracies +bureaucracy +bureaucrat +bureaucratization +bureaucrats +bureaus +burette +burettes +burg +burgage +burgages +burgee +burgees +burgeon +burgeons +burger +burgers +burgess +burgesses +burgh +burgher +burghers +burghs +burglar +burglaries +burglars +burglary +burgomaster +burgomasters +burgonet +burgonets +burgoo +burgoos +burgrave +burgraves +burgs +burgundies +burgundy +burhel +burhels +burial +burials +burin +burins +burk +burka +burkas +burkes +burks +burl +burlap +burlaps +burler +burlers +burlesque +burlesques +burletta +burlettas +burley +burliness +burls +burn +burn-up +burn-ups +burner +burners +burnet +burnets +burning +burnings +burnish +burnisher +burnishers +burnishes +burnishment +burnous +burnouse +burnouses +burns +burnside +burnsides +buroo +buroos +burp +burping +burps +burr +burrawang +burrawangs +burrhel +burrhels +burrito +burritos +burro +burros +burrow +burrower +burrowers +burrows +burrs +burrstone +burrstones +burs +bursa +bursar +bursaries +bursars +bursary +burse +burses +bursitis +burst +burster +bursters +bursts +burthen +burthens +burton +burtons +burweed +burweeds +burying +bus +busbies +busboy +busboys +busby +buses +bush +bushbabies +bushbaby +bushcraft +bushcrafts +bushel +busheller +bushellers +bushels +bushes +bushfire +bushfires +bushiness +bushing +bushman +bushmaster +bushmasters +bushranger +bushrangers +bushwalking +bushwhacker +bushwhackers +bushwhacking +bushy +business +businesses +businessman +businessmen +businesswoman +busk +busker +buskers +buskin +buskins +busks +busman +buss +busses +bust +bust-up +bust-ups +bustard +bustards +bustee +bustees +buster +busters +bustle +bustler +bustlers +bustles +busts +busybodies +busybody +busyness +but +butadiene +butane +butanol +butch +butcher +butcher's-broom +butcheries +butchering +butcherings +butchers +butchery +butches +butene +butler +butlerage +butlerages +butleries +butlers +butlership +butlerships +butlery +buts +butt +butte +butter +butter-and-eggs +butter-print +butterball +butterbur +butterburs +buttercup +buttercups +butterflies +butterfly +butterfly-flower +butteries +butterine +butterines +butteriness +butternut +butternuts +butters +butterscotch +butterwort +butterworts +buttery +buttes +butties +butting +buttock +buttocks +button +buttonhole +buttonholer +buttonholers +buttonholes +buttonmould +buttons +buttonses +buttress +buttresses +buttressing +butts +butty +butyl +butylene +butyrate +buxomness +buy +buyer +buyers +buying +buyout +buyouts +buys +buzz +buzzard +buzzards +buzzer +buzzers +buzzes +bwana +bwanas +by-and-by +by-blow +by-blows +by-election +by-elections +by-name +by-play +by-plot +by-product +by-products +by-street +by-your-leave +bye +bye-bye +bye-byes +byes +bygone +bygones +bylaw +bylaws +bypass +bypasses +bypath +bypaths +byre +byres +byrnie +byrnies +byroad +byroads +byssinosis +byssus +byssuses +bystander +bystanders +byte +bytes +bytownite +byway +byways +bywoner +bywoners +byword +bywords +byzant +byzants +cab +cabal +cabala +cabalism +cabalist +cabalists +caballer +caballero +caballeros +caballers +cabals +cabana +cabaret +cabarets +cabbage +cabbages +cabbagetown +cabbageworm +cabbageworms +cabbala +cabbalism +cabbalist +cabbalists +cabbies +cabby +caber +cabernet +cabers +cabin +cabinet +cabinetmaker +cabinetmakers +cabinets +cabinetwork +cabins +cable +cablegram +cablegrams +cables +cablet +cablets +cableway +cableways +cabman +cabob +cabobs +cabochon +cabochons +caboodle +caboose +cabooses +cabotage +cabretta +cabriole +cabrioles +cabriolet +cabriolets +cabs +cacao +cacaos +cachalot +cachalots +cache +caches +cachet +cachets +cachexia +cachexy +cachinnation +cachou +cachous +cachucha +cachuchas +cacique +caciques +caciquism +cackle +cackler +cacklers +cackles +cacodaemon +cacodaemons +cacodemon +cacodemons +cacodyl +cacoepies +cacoepy +cacoethes +cacogenics +cacographer +cacographers +cacography +cacology +cacomistle +cacomistles +cacophonies +cacophony +cactus +cactuses +cacuminal +cad +cadastre +cadastres +cadaver +cadaverousness +cadavers +caddice +caddices +caddie +caddies +caddis +caddises +caddishness +caddy +cade +cadees +cadelle +cadelles +cadence +cadences +cadencies +cadency +cadenza +cadenzas +cades +cadet +cadets +cadetship +cadetships +cadge +cadger +cadgers +cadges +cadi +cadies +cadis +cadmium +cadre +cadres +cads +caduceus +caducities +caducity +caecilian +caecilians +caecum +caenogenesis +caesar +caesaropapism +caesars +caesium +caesura +caesuras +cafard +cafards +cafeteria +cafeterias +caff +caffein +caffeine +caffeinism +caffeism +caffs +caftan +caftans +cage +cageling +cagelings +cages +caginess +cagoule +cagoules +cahier +cahiers +caiman +caimans +cain +cains +caique +caiques +caird +cairds +cairn +cairngorm +cairngorms +cairns +caisson +caissons +caitiff +caitiffs +cajeput +cajolement +cajoler +cajolers +cajolery +cajun +cajuns +cajuput +cake +cakes +cakewalk +cakewalker +cakewalkers +cakewalks +calabash +calabashes +calaboose +calabooses +caladium +caladiums +calamanco +calamancoes +calamancos +calamander +calamanders +calamari +calamaries +calamary +calamine +calamint +calamints +calamite +calamites +calamities +calamitousness +calamity +calamus +calamuses +calandria +calandrias +calanthe +calanthes +calash +calashes +calathus +calc-sinter +calc-tufa +calcaneum +calcaneums +calcaneus +calcar +calcars +calcedonies +calcedony +calceolaria +calceolarias +calces +calcicole +calciferol +calcification +calcifuge +calcimine +calcimines +calcination +calcinations +calcite +calcitonin +calcium +calcspar +calculation +calculations +calculator +calculators +calculus +calculuses +caldarium +caldera +calderas +caldron +caldrons +calefacient +calefacients +calefaction +calefactions +calefactories +calefactory +calendar +calendars +calender +calenders +calendula +calendulas +calenture +calentures +calescence +calf +calfs +calfskin +calfskins +caliber +calibers +calibration +calibrations +calibrator +calibrators +calibre +calibres +calices +caliche +calicle +calicles +calico +calicoes +calicos +calif +californium +califs +calipash +calipashes +calipee +calipees +caliper +calipers +caliph +caliphate +caliphates +caliphs +calisaya +calisayas +calisthenics +calix +calk +calker +calkers +calkin +calkins +calks +call +call-up +call-ups +calla +callant +callants +callas +caller +callers +callet +calligrapher +calligraphers +calligraphist +calligraphists +calligraphy +calling +callings +calliper +callipers +callisthenics +callosities +callosity +callousness +callowness +calls +callus +calluses +calm +calmative +calmatives +calming +calmness +calms +calomel +calorescence +caloric +caloricity +calorie +calories +calorimeter +calorimeters +calorimetry +calory +calotte +calottes +caloyer +caloyers +calpac +calpacs +calque +calques +caltha +calthas +caltrop +caltrops +calumet +calumets +calumniation +calumniations +calumniator +calumniators +calumnies +calumny +calutron +calutrons +calvaria +calves +calving +calvities +calx +calxes +calycanthus +calycanthuses +calyces +calycle +calycles +calyculus +calypso +calypsos +calyptra +calyptras +calyptrogen +calyptrogens +calyx +calyxes +cam +camaraderie +camarilla +camarillas +camas +camases +camash +camashes +camass +camasses +camber +cambers +cambist +cambistries +cambistry +cambists +cambium +cambiums +cambrel +cambrels +cambric +came +camel +cameleer +cameleers +camellia +camellias +camelopard +camelopards +camelot +camels +cameo +cameos +camera +cameraman +cameras +camerlengo +camerlengos +camerlingo +camerlingos +cames +camion +camions +camisado +camisados +camise +camises +camisole +camisoles +camlet +camlets +camomile +camomiles +camouflage +camouflages +camouflet +camouflets +camoufleur +camoufleurs +camp +campagna +campaign +campaigner +campaigners +campaigning +campaigns +campana +campanas +campanile +campaniles +campanologist +campanologists +campanology +camper +campers +campesino +campesinos +campground +campgrounds +camphene +camphire +camphor +camphors +camping +campion +campions +campo +campodeid +camporee +camporees +campos +camps +campsite +campsites +campus +campuses +cams +camshaft +camshafts +can +can-opener +can-openers +canaigre +canaigres +canaille +canailles +canakin +canakins +canal +canaliculus +canalisation +canalisations +canalization +canalizations +canals +canard +canards +canaries +canary +canasta +canastas +canaster +cancan +cancans +cancel +canceler +cancelers +cancellation +cancellations +canceller +cancellers +cancels +cancer +cancers +cancroid +candela +candelabra +candelabras +candelabrum +candelas +candelilla +candelillas +candescence +candescences +candida +candidacies +candidacy +candidas +candidate +candidates +candidateship +candidateships +candidature +candidatures +candidiasis +candidness +candies +candle +candle-tree +candlepin +candlepins +candler +candlers +candles +candlewick +candlewicks +candor +candour +candy +candytuft +candytufts +cane +canella +canephora +canephoras +caner +caners +canes +canescence +canescences +canfield +canful +canfuls +cangue +cangues +canid +canids +canikin +canikins +canine +canines +caning +canings +caninity +canister +canisters +canker +cankeredness +cankers +canna +cannabin +cannabis +cannae +cannelloni +cannelure +cannelures +canner +canneries +canners +cannery +cannibal +cannibalism +cannibalization +cannibals +cannikin +cannikins +canniness +canning +cannon +cannonade +cannonades +cannonball +cannonballs +cannoneer +cannoneers +cannonry +cannons +cannula +cannulas +canoe +canoeist +canoeists +canoes +canon +canoness +canonesses +canonicate +canonicity +canonisation +canonisations +canonist +canonists +canonization +canonizations +canonries +canonry +canons +canopies +canopy +canorousness +cans +cant +cantabile +cantala +cantaloup +cantaloupe +cantaloupes +cantaloups +cantankerousness +cantata +cantatas +cantatrice +cantatrices +canteen +canteens +canter +canterburies +canterbury +canterburys +canters +cantharus +canthus +canticle +canticles +cantilena +cantilenas +cantilever +cantilevers +cantillation +cantillations +cantina +cantinas +cantiness +cantle +cantles +cantling +canto +canton +cantonment +cantonments +cantons +cantor +cantors +cantos +cantrip +cantrips +cants +cantus +canuck +canucks +canula +canulas +canvas +canvases +canvass +canvasser +canvassers +canvasses +canvassing +canyon +canyons +canzona +canzonas +canzone +canzonet +canzonets +caoutchouc +cap +capa +capabilities +capability +capableness +capaciousness +capacitance +capacitation +capacitations +capacities +capacitor +capacitors +capacity +caparison +caparisons +capas +cape +caped +capelin +capeline +capelines +capelins +caper +capercaillie +capercaillies +capercailzie +capercailzies +caperer +caperers +capers +capes +capeskin +capias +capiases +capillaries +capillarities +capillarity +capillary +caping +capita +capital +capitalisation +capitalisations +capitalism +capitalist +capitalists +capitalization +capitalizations +capitals +capitate +capitation +capitations +capitulant +capitulants +capitularies +capitulary +capitulation +capitulations +capitulum +capiz +caplin +caplins +capo +capon +capons +caporal +caporals +capos +capot +capotasto +capotastos +capote +capotes +capots +capper +cappers +capping +cappings +cappuccino +cappuccinos +capriccio +capriccios +caprice +caprices +capriciousness +caprification +caprifig +caprifigs +capriole +caprioles +caproate +caps +capsaicin +capsicum +capsicums +capsid +capsids +capsizing +capstan +capstans +capstone +capstones +capsule +capsules +captain +captaincies +captaincy +captains +captainship +captainships +caption +captions +captiousness +captivation +captivator +captivators +captive +captives +captivities +captivity +captor +captors +capture +capturer +capturers +captures +capuche +capuches +capuchin +capuchins +caput +capybara +capybaras +car +car-ferries +car-ferry +carabao +carabaos +carabid +carabids +carabin +carabineer +carabineers +carabiner +carabiners +carabines +carabinier +carabiniere +carabiniers +caracal +caracals +caracara +caracaras +carack +caracks +caracol +caracole +caracoles +caracols +caracul +caraculs +carafe +carafes +carambola +carambolas +caramel +caramelisation +caramelisations +caramelization +caramelizations +caramels +carangid +carangids +carangoid +carapace +carapaces +carat +carats +caravan +caravaner +caravaners +caravanning +caravans +caravansaries +caravansary +caravanserai +caravanserais +caravel +caravels +caraway +caraways +carbamate +carbamates +carbamide +carbamides +carbanion +carbanions +carbazole +carbide +carbides +carbies +carbine +carbineer +carbineers +carbines +carbohydrate +carbohydrates +carbon +carbonade +carbonades +carbonado +carbonadoes +carbonados +carbonate +carbonates +carbonation +carboniferous +carbonisation +carbonisations +carbonization +carbonizations +carbons +carbonyl +carbonylation +carboxyl +carboy +carboys +carbuncle +carbuncles +carburation +carburetion +carburetor +carburetors +carburettor +carburettors +carburisation +carburisations +carburization +carburizations +carby +carcajou +carcajous +carcanet +carcanets +carcase +carcases +carcass +carcasses +carcinogen +carcinogenicity +carcinogens +carcinoma +carcinomas +carcinomatosis +card +cardamine +cardamines +cardamom +cardamoms +cardamon +cardamons +cardamum +cardamums +cardboard +cardboards +carder +carders +cardiac +cardiacs +cardialgia +cardigan +cardigans +cardinal +cardinal-bishop +cardinal-deacon +cardinal-priest +cardinalate +cardinals +cardinalship +cardinalships +carding +cardiogram +cardiograms +cardiograph +cardiographs +cardiography +cardioid +cardioids +cardiologist +cardiologists +cardiology +cardiomyopathy +carditis +cardoon +cardoons +cards +carduus +care +careen +careenage +careenages +careens +career +careerism +careerist +careerists +careers +carefulness +caregiver +caregivers +carelessness +carer +carers +cares +caress +caresses +caressing +caressings +caret +caretaker +caretakers +caretaking +carets +carex +carfare +carfares +carfax +carfaxes +carfuffle +carfuffles +cargo +cargoes +carhop +carhops +cariama +cariamas +caribe +caribes +caribou +caribous +caricature +caricatures +caricaturist +caricaturists +caries +carillon +carillonneur +carillonneurs +carillons +carina +carinas +carinate +caring +carioca +cariocas +cariole +carioles +caritas +cark +carks +carl +carline +carlines +carling +carlings +carload +carls +carmagnole +carmagnoles +carman +carminative +carminatives +carmine +carnage +carnages +carnalism +carnalisms +carnalities +carnality +carnallite +carnassial +carnation +carnations +carnauba +carnaubas +carnelian +carnelians +carnet +carnets +carney +carneys +carnification +carnival +carnivals +carnivore +carnivores +carnivorousness +carnosities +carnosity +carnotite +carob +carobs +caroche +caroches +carol +caroler +carolers +caroling +caroller +carollers +carols +carolus +caroluses +carom +caroms +carotene +carotenoid +carotenoids +carotid +carotin +carousal +carousals +carouse +carousel +carousels +carouser +carousers +carouses +carp +carpal +carpals +carpel +carpels +carpenter +carpentering +carpenters +carpentry +carper +carpers +carpet +carpet-sweeper +carpet-sweepers +carpetbag +carpetbagger +carpetbaggers +carpeting +carpetings +carpets +carphology +carpi +carping +carpings +carpogonium +carpogoniums +carpology +carpometacarpus +carpophore +carpophores +carport +carports +carpospore +carpospores +carps +carpus +carpuses +carrack +carracks +carrageen +carrageenan +carrageenin +carrageens +carragheen +carragheens +carrefour +carrefours +carrel +carrell +carrells +carrels +carriage +carriages +carriageway +carriageways +carrier +carriers +carries +carriole +carrioles +carrion +carrions +carritch +carritches +carronade +carronades +carrot +carrots +carrousel +carrousels +carry +carry-back +carry-on +carry-ons +carryall +carryalls +carrycot +carrycots +carrying-on +cars +carse +carses +carsickness +cart +cartage +cartages +carte +cartel +cartelism +cartelist +cartelists +cartelization +cartelizations +cartels +carter +carters +cartes +cartilage +cartilages +carting +cartload +cartloads +cartogram +cartograms +cartographer +cartographers +cartography +cartomancy +carton +carton-pierre +cartons +cartoon +cartoonist +cartoonists +cartoons +cartouch +cartouche +cartouches +cartridge +cartridges +carts +cartularies +cartulary +cartwheel +cartwheels +cartwright +cartwrights +carucate +carucates +caruncle +caruncles +carvacrol +carvacrols +carvel +carvels +carver +carvers +carving +carvings +caryatid +caryatides +caryatids +caryopsis +casa +casaba +casabas +casas +casbah +casbahs +cascabel +cascabels +cascade +cascades +cascara +cascaras +cascarilla +cascarillas +caschrom +caschroms +case +caseation +casebook +casebooks +casein +caseinogen +casemaker +casemakers +casemate +casemates +casement +casements +casern +casernes +caserns +cases +cash +cash-book +cash-books +cashaw +cashaws +cashbox +cashboxes +cashes +cashew +cashews +cashier +cashiers +cashmere +cashmeres +casimere +casing +casings +casino +casinos +cask +casket +caskets +casks +casque +casques +cassareep +cassareeps +cassata +cassatas +cassation +cassations +cassava +cassavas +casserole +casseroles +cassette +cassettes +cassia +cassias +cassimere +cassimeres +cassino +cassinos +cassis +cassises +cassiterite +cassock +cassocks +cassolette +cassolettes +cassone +cassones +cassoulet +cassowaries +cassowary +cast +cast-off +cast-offs +castanet +castanets +castaway +castaways +caste +castellan +castellans +castellum +castellums +caster +casters +castes +castigation +castigations +castigator +castigators +casting +castings +castle +castles +castling +castor +castoreum +castoreums +castors +castrametation +castrate +castrates +castration +castrations +castrato +casts +casual +casualism +casualisms +casualness +casuals +casualties +casualty +casuist +casuistries +casuistry +casuists +cat +cat's-ear +cat's-eye +cat's-eyes +cat's-foot +cat's-paw +cat's-paws +cat's-tail +cat-lap +cat-o'-mountain +cat-o'-nine-tails +catabasis +catabolism +catacaustic +catacaustics +catachresis +cataclasis +cataclysm +cataclysms +catacomb +catacombs +catafalque +catafalques +catalase +catalepsy +cataleptic +cataleptics +catalo +cataloes +catalog +cataloger +catalogers +catalogs +catalogue +cataloguer +cataloguers +catalogues +catalos +catalpa +catalpas +catalysis +catalyst +catalysts +catalytic +catalyzer +catalyzers +catamaran +catamarans +catamenia +catamite +catamites +catamount +catamountain +catamountains +catamounts +catananche +cataphoresis +cataphract +cataphracts +cataphyll +cataphylls +cataplasm +cataplasms +cataplexy +catapult +catapults +cataract +cataracts +catarrh +catarrhine +catarrhs +catastasis +catastrophe +catastrophes +catastrophism +catastrophist +catastrophists +catatonia +catatonic +catatonics +catawba +catawbas +catbird +catbirds +catboat +catboats +catcall +catcalls +catch +catch-all +catch-as-catch-can +catcher +catchers +catches +catchflies +catchfly +catchiness +catching +catchings +catchline +catchlines +catchment +catchments +catchpennies +catchpenny +catchpole +catchpoles +catchup +catchups +catchweed +catchweeds +catchword +catchwords +cate +catechesis +catechiser +catechisers +catechism +catechisms +catechist +catechists +catechizer +catechizers +catechol +catecholamine +catechu +catechumen +catechumenate +catechumenates +catechumenism +catechumens +categoricalness +categories +categorisation +categorisations +categorist +categorists +categorization +categorizations +category +catena +catenane +catenanes +catenaries +catenary +catenas +catenation +catenations +cater-cousin +cateran +caterans +caterer +caterers +catering +caterings +caterpillar +caterpillars +caterwaul +caterwauls +cates +catfish +catfishes +catgut +catguts +catharsis +cathartic +cathartics +cathead +catheads +cathedra +cathedral +cathedrals +cathedras +catheter +catheterisation +catheterization +catheters +cathetus +cathetuses +cathexis +cathisma +cathismas +cathode +cathodes +catholic +catholicism +catholicity +catholicization +catholicon +catholicons +catholicos +catholics +cathouse +cathouses +cation +cations +catkin +catkins +catling +catlings +catmint +catmints +catnap +catnaps +catnip +catnips +catoptrics +cats +catsup +catsups +cattalo +cattaloes +cattalos +catteries +cattery +catties +cattiness +cattishness +cattle +cattle-grid +cattle-grids +cattleman +cattleya +cattleyas +catty +caucus +caucuses +caudate +caudex +caudexes +caudillo +caudillos +caudle +caudles +caul +cauld +cauldron +cauldrons +caulds +caules +caulicle +caulicles +cauliculus +cauliculuses +cauliflory +cauliflower +cauliflowers +caulis +caulker +caulkers +caulome +caulomes +cauls +causa +causalities +causality +causation +causationism +causationist +causationists +causations +causative +causatives +cause +causelessness +causer +causerie +causeries +causers +causes +causeway +causeways +causey +causeys +causing +caustic +causticities +causticity +causticness +caustics +cauterant +cauterants +cauteries +cauterisation +cauterisations +cauterization +cauterizations +cautery +caution +cautioner +cautioners +cautions +cautious +cautiousness +cavalcade +cavalcades +cavalier +cavalierism +cavaliers +cavalla +cavallas +cavallies +cavally +cavalries +cavalry +cavalryman +cavatina +cavatinas +cave +cave-in +cave-ins +caveat +caveats +cavefish +cavefishes +cavel +cavels +caveman +cavendish +cavendishes +caver +cavern +caverns +cavers +caves +cavesson +cavessons +cavetto +caviar +caviare +caviares +caviars +cavie +cavies +cavil +caviler +cavilers +caviller +cavillers +cavils +caving +cavings +cavitation +cavitations +cavities +cavity +cavo-rilievo +cavo-rilievos +cavy +caw +caws +cay +cayenne +cayennes +cayman +caymans +cays +cayuse +cayuses +cazique +caziques +cease +cease-fire +ceases +cecity +cecum +cedar +cedars +cedarwood +ceder +ceders +cedi +cedilla +cedillas +ceding +cedis +cedula +cedulas +ceilidh +ceilidhs +ceiling +ceilings +ceilometer +celadon +celadons +celandine +celandines +celeb +celebrant +celebrants +celebration +celebrations +celebrator +celebrators +celebrities +celebrity +celebs +celeriac +celeriacs +celeries +celerity +celery +celesta +celestas +celestite +celibacy +celibate +celibates +cell +cella +cellar +cellarage +cellarages +cellarer +cellarers +cellaret +cellarets +cellarman +cellars +cellist +cellists +cello +cellobiose +cellophane +cellos +cells +cellulase +cellule +cellules +cellulite +cellulites +cellulitis +celluloid +celluloids +cellulose +celluloses +cellulosic +celom +celoms +celt +celts +cembalist +cembalists +cembalo +cembalos +cement +cementation +cementations +cementer +cementers +cementite +cements +cementum +cemeteries +cemetery +cenacle +cenacles +cenesthesia +cenobite +cenobites +cenogenesis +cenospecies +cenotaph +cenotaphs +cenote +cenotes +censer +censers +censor +censoring +censoriousness +censors +censorship +censorships +censurableness +censure +censurer +censurers +censures +census +censuses +cent +cental +centals +centare +centares +centas +centaur +centaurea +centaureas +centauries +centaurs +centaury +centavo +centavos +centenarian +centenarians +centenaries +centenary +centennial +centennials +center +centerboard +centerboards +centering +centerings +centers +centesimal +centesimo +centesis +centiare +centiares +centigrade +centigram +centigrams +centiliter +centiliters +centilitre +centilitres +centillion +centillions +centillionth +centillionths +centime +centimes +centimeter +centimetre +centimetre-gram-second +centimetre-gram-seconds +centimetres +centimo +centipede +centipedes +centner +centners +cento +centos +central +centralisation +centralisations +centraliser +centralisers +centralism +centralist +centralists +centralities +centrality +centralization +centralizations +centralizer +centralizers +centre +centreboard +centreboards +centred +centrefold +centrefolds +centres +centricities +centricity +centrifugal +centrifugation +centrifuge +centrifuges +centring +centrings +centriole +centrioles +centripetalism +centrist +centrists +centroid +centroids +centromere +centrosome +centrosomes +centrosphere +centrum +centrums +cents +centuplicate +centuplicates +centuplication +centuplications +centuries +centurion +centurions +century +ceorl +ceorls +cep +cephalalgia +cephalin +cephalitis +cephalization +cephalochordate +cephalometry +cephalopod +cephalopods +cephalosporin +cephalothorax +ceps +ceramal +ceramals +ceramic +ceramicist +ceramicists +ceramics +ceramist +ceramists +cerargyrite +cerastes +cerate +cerates +ceratitis +ceratodus +ceratoduses +ceratopsian +cercaria +cercarian +cercarias +cercus +cercuses +cere +cereal +cereals +cerebellum +cerebellums +cerebral +cerebration +cerebrations +cerebritis +cerebroside +cerebrotonia +cerebrotonic +cerebrum +cerebrums +cerement +cerements +ceremonial +ceremonialism +ceremonials +ceremonies +ceremoniousness +ceremony +ceres +ceresin +ceria +cerise +cerite +cerium +cermet +cermets +cerograph +cerographist +cerographists +cerographs +cerography +ceroplastics +cerotype +cerotypes +cert +certainties +certainty +certes +certificate +certificates +certification +certifications +certifier +certifiers +certiorari +certioraris +certitude +certitudes +certs +cerulean +cerumen +ceruse +cerussite +cervelat +cervelats +cervices +cervicitis +cervid +cervix +cervixes +cesium +cess +cessation +cessations +cesser +cesses +cession +cessionaries +cessionary +cessions +cesspit +cesspits +cesspool +cesspools +cestode +cestodes +cestus +cestuses +cesura +cesuras +cetacean +cetaceans +cetane +cete +ceterach +ceterachs +cetes +cetology +ceylonite +cha-cha +cha-cha-cha +chabazite +chabouk +chabouks +chacma +chacmas +chaconne +chaconnes +chad +chads +chaenomeles +chaeta +chaetodon +chaetodons +chaetognath +chaetopod +chaetopods +chafe +chafer +chafers +chafes +chaff +chaffer +chafferer +chafferers +chaffers +chaffinch +chaffinches +chaffs +chafing +chagrin +chagrins +chain +chainman +chainplate +chainplates +chains +chainsaw +chainsaws +chainwork +chainworks +chair +chairladies +chairlady +chairlift +chairlifts +chairman +chairmanship +chairmanships +chairperson +chairpersons +chairs +chairwoman +chaise +chaises +chakra +chakras +chalaza +chalazas +chalazion +chalazions +chalcanthite +chalcedony +chalcid +chalcids +chalcocite +chalcographer +chalcographers +chalcographist +chalcographists +chalcography +chalcopyrite +chaldron +chaldrons +chalet +chalets +chalice +chalices +chalicothere +chalicotheres +chalk +chalkboard +chalkboards +chalkpit +chalkpits +chalks +chalkstone +chalkstones +challah +challenge +challenger +challengers +challenges +challis +chalone +chalones +chalumeau +chalutz +chalybeate +chalybeates +chalybite +cham +chamade +chamades +chamaeleon +chamaeleons +chamaephyte +chamaephytes +chamber +chamberer +chamberers +chamberlain +chamberlains +chambermaid +chambermaids +chamberpot +chamberpots +chambers +chambray +chambrays +chameleon +chameleons +chamfer +chamfers +chamfron +chamfrons +chamiso +chamisos +chamois +chamomile +chamomiles +champ +champac +champacs +champagne +champagnes +champaign +champaigns +champers +champerses +champerties +champerty +champignon +champignons +champion +champions +championship +championships +champs +chams +chance +chance-medley +chanced +chancel +chancelleries +chancellery +chancellor +chancellors +chancellorship +chancellorships +chancels +chances +chancing +chancre +chancres +chancroid +chancroids +chandelier +chandeliers +chandelle +chandelles +chandler +chandlers +chandlery +change +change-ringing +changeability +changeableness +changefulness +changeling +changelings +changer +changers +changes +channel +channeler +channelers +channels +chanoyu +chanoyus +chanson +chansonnier +chansonniers +chansons +chant +chantage +chantarelle +chantarelles +chanter +chanterelle +chanterelles +chanters +chanteuse +chanteuses +chantey +chanteys +chanticleer +chanticleers +chanties +chanting +chantress +chantresses +chantries +chantry +chants +chanty +chaos +chap +chaparral +chaparrals +chapati +chapatis +chapatti +chapattis +chapbook +chapbooks +chape +chapeau +chapeaus +chapel +chapels +chaperon +chaperonage +chaperonages +chaperone +chaperones +chaperons +chapes +chapiter +chapiters +chaplain +chaplaincies +chaplaincy +chaplainries +chaplainry +chaplains +chaplainship +chaplainships +chaplet +chaplets +chapman +chappal +chappie +chappies +chaps +chapstick +chaptalization +chaptalizations +chapter +chapters +chaptrel +chaptrels +char +chara +charabanc +charabancs +characid +characids +characin +characins +character +characteries +characterisation +characterisations +characteristic +characteristics +characterization +characterizations +characters +charactery +charade +charades +charango +charangos +charas +charcoal +charcuterie +charcuteries +chard +chardonnay +chards +chares +charge +chargeableness +charger +chargers +charges +chariness +chariot +charioteer +charioteers +chariots +charisma +charismas +charitableness +charities +charity +charivari +charivaris +chark +charkha +charkhas +charks +charladies +charlady +charlatan +charlatanism +charlatanry +charlatans +charlock +charlocks +charlotte +charlottes +charm +charmer +charmers +charmeuse +charmeuses +charms +charnel +charoseth +charpoy +charpoys +charqui +charr +charrs +chars +chart +charta +chartas +charter +charterer +charterers +charters +chartism +chartist +chartists +chartography +charts +chartularies +chartulary +charwoman +chase +chased +chaser +chasers +chases +chasing +chasm +chasmogamy +chasms +chasseur +chasseurs +chassis +chastener +chasteners +chasteness +chastening +chastenment +chastenments +chastisement +chastisements +chastiser +chastisers +chastity +chasuble +chasubles +chat +chaton +chatons +chatoyancy +chatoyant +chats +chattel +chattels +chatter +chatterbox +chatterboxes +chatterer +chatterers +chattering +chatterings +chatters +chattiness +chaudfroid +chaudfroids +chauffer +chauffers +chauffeur +chauffeurs +chauffeuse +chauffeuses +chaulmoogra +chaulmoogras +chaulmugra +chaulmugras +chaunt +chaunter +chaunters +chaunts +chauvinism +chauvinist +chauvinists +chaw +chaws +chay +chayote +chayotes +chays +chazan +chazans +cheap +cheap-jack +cheapener +cheapeners +cheapness +cheapskate +cheapskates +cheat +cheater +cheaters +cheating +cheats +chechako +chechakoes +chechakos +check +check-in +check-ins +checkbook +checkbooks +checker +checkers +checklist +checklists +checkmate +checkmates +checkout +checkouts +checkpoint +checkpoints +checkroom +checkrooms +checks +cheddite +cheechako +cheechakoes +cheechakos +cheek +cheekiness +cheekpiece +cheeks +cheep +cheeper +cheepers +cheeps +cheer +cheerer +cheerers +cheerfulness +cheeriness +cheering +cheerio +cheerios +cheerlessness +cheers +cheese +cheeseboard +cheeseboards +cheeseburger +cheeseburgers +cheesecake +cheesecakes +cheesecloth +cheesecloths +cheeseparer +cheeseparers +cheeses +cheesewood +cheesiness +cheetah +cheetahs +cheewink +cheewinks +chef +chef-d'oeuvre +chefs +cheilitis +chela +chelas +chelaship +chelate +chelates +chelation +chelations +chelicera +chelicerate +cheliped +chelipeds +cheloid +cheloids +chelone +chelones +chelonian +chelonians +chemical +chemicals +chemiluminescence +chemise +chemises +chemisette +chemisettes +chemism +chemisorption +chemist +chemistries +chemistry +chemists +chemmy +chemoprophylaxis +chemoreceptor +chemoreceptors +chemosphere +chemostat +chemostats +chemosynthesis +chemotaxis +chemotherapeutics +chemotherapy +chemotropism +chemurgy +chenille +chenopod +cheque +chequebook +chequebooks +chequer +chequerboard +chequers +cheques +cherimoya +cherimoyas +chernozem +cheroot +cheroots +cherries +cherry +cherry-pie +chersonese +chersoneses +chert +cherub +cherubs +chervil +chervils +chess +chessboard +chessboards +chessel +chessels +chesses +chessman +chest +chesterfield +chesterfields +chestiness +chestnut +chestnuts +chests +chetah +chetahs +cheval-de-frise +chevalier +chevaliers +chevaux-de-frise +chevet +chevies +cheville +chevilles +chevrette +chevrettes +chevron +chevrons +chevrotain +chevrotains +chevy +chew +chewer +chewers +chewie +chewing +chewink +chewinks +chews +chi +chiao +chiaroscuro +chiaroscuros +chiasm +chiasma +chiasmas +chiasms +chiasmus +chiasmuses +chiastolite +chiaus +chiauses +chibouk +chibouks +chic +chicane +chicaner +chicaneries +chicaners +chicanery +chicanes +chicano +chicanos +chiccories +chiccory +chicha +chichas +chichi +chichis +chick +chickadee +chickadees +chickaree +chickarees +chicken +chickenpox +chickens +chicks +chickweed +chickweeds +chicle +chicles +chico +chicories +chicory +chider +chiding +chidings +chief +chiefdom +chiefdoms +chiefs +chieftain +chieftaincies +chieftaincy +chieftains +chieftainship +chieftainships +chield +chields +chiffon +chiffonier +chiffoniers +chiffons +chigger +chiggers +chignon +chignons +chigoe +chigoes +chihuahua +chihuahuas +chilblain +chilblains +child +childbearing +childbed +childbirth +childcare +childe +childhood +childhoods +childishness +childlessness +childness +children +chile +chiles +chili +chiliad +chiliads +chiliarch +chiliarchs +chiliarchy +chiliasm +chiliast +chiliasts +chilies +chilis +chill +chiller +chilli +chillies +chilliness +chilling +chillings +chillis +chillness +chills +chillum +chillums +chilly +chilopod +chilopods +chimaera +chimaeras +chimb +chimbs +chime +chimer +chimera +chimeras +chimere +chimeres +chimers +chimes +chimney +chimneys +chimp +chimpanzee +chimpanzees +chimps +chin +china +chinar +chinars +chinas +chincapin +chincapins +chinch +chincherinchee +chincherinchees +chinches +chinchilla +chinchillas +chincough +chine +chines +chink +chinkapin +chinkapins +chinks +chino +chinoiserie +chinook +chinooks +chinos +chinquapin +chinquapins +chins +chintz +chintzes +chinwag +chinwags +chionodoxa +chionodoxas +chip +chipboard +chipboards +chipmunk +chipmunks +chipolata +chipolatas +chippie +chippies +chipping +chippings +chippy +chips +chirimoya +chirimoyas +chirm +chirms +chirographer +chirographers +chirography +chiromancy +chiropodist +chiropodists +chiropody +chiropractic +chiropractor +chiropractors +chiropteran +chiropterans +chirp +chirper +chirpers +chirpiness +chirps +chirr +chirre +chirres +chirrs +chirrup +chirrups +chirurgeon +chirurgeons +chirurgery +chis +chisel +chiseller +chisellers +chisels +chit +chital +chitals +chitarrone +chitchat +chitin +chitlings +chiton +chitons +chits +chitterling +chitterlings +chiv +chivalrousness +chivalry +chivaree +chivarees +chive +chives +chivies +chivs +chivy +chlamydia +chlamydospore +chlamydospores +chlamys +chlamyses +chloanthite +chloasma +chloracne +chloral +chlorambucil +chloramphenicol +chlorargyrite +chlorate +chlorates +chlordane +chloride +chlorides +chlorination +chlorinator +chlorine +chlorite +chlorites +chlorofluorocarbon +chlorofluorocarbons +chloroform +chloroforms +chlorophyl +chlorophyll +chloroplast +chloroplasts +chloroprene +chloroquine +chlorosis +chlorpromazine +choanocyte +choc +choc-ice +choc-ices +chocho +chochos +chock +chocks +chockstone +chockstones +choco +chocolate +chocolate-box +chocolates +chocos +chocs +choctaw +choctaws +choice +choiceness +choices +choir +choirboy +choirboys +choirgirl +choirgirls +choirmaster +choirmasters +choirs +choke +chokeberries +chokeberry +chokebore +chokebores +chokecherries +chokecherry +chokedamp +choker +chokers +chokes +chokey +chokeys +chokies +choking +choko +chokos +choky +cholagogue +cholagogues +cholangiography +cholecalciferol +cholecyst +cholecystectomy +cholecystitis +cholecystography +cholecystostomy +cholecystotomies +cholecystotomy +cholecysts +cholelith +cholelithiasis +choleliths +cholent +choler +cholera +cholesterol +cholesterolemia +choli +choline +cholinesterase +cholis +chomp +chomping +chomps +chon +chondriosome +chondriosomes +chondrite +chondrites +chondrule +chondrules +chondrus +choo-choo +choo-choos +chook +chooks +choom +chooms +chooser +choosers +chop +chopin +chopine +chopines +chopins +chopper +choppers +choppiness +chops +chopstick +chopsticks +choragus +choraguses +choral +chorale +chorales +chorals +chord +chordamesoderm +chordate +chordates +chordee +chording +chordophone +chordophones +chords +chore +chorea +chorees +choregus +choreguses +choreographer +choreographers +choreography +chores +choriamb +choriambs +choriambus +chorine +chorines +choriocarcinoma +chorioid +chorioids +chorion +chorister +choristers +chorizo +chorizos +chorographer +chorography +choroid +choroiditis +choroids +chorology +chortle +chortler +chortlers +chortles +chorus +choruses +chorusmaster +chorusmasters +chose +chosen +choses +chott +chotts +chou +chough +choughs +choultries +choultry +chouse +chouses +chow +chow-chow +chow-chows +chowder +chowders +chows +chrestomathies +chrestomathy +chrism +chrismatories +chrismatory +chrisms +chrisom +chrisoms +christening +christenings +chroma +chromas +chromate +chromates +chromaticism +chromaticity +chromatics +chromatid +chromatin +chromatogram +chromatograms +chromatography +chromatophore +chromatophores +chrome +chromes +chrominance +chrominances +chromite +chromium +chromo +chromogen +chromolithograph +chromolithography +chromomere +chromophil +chromophore +chromoplast +chromoplasts +chromos +chromosome +chromosomes +chromosphere +chronaxie +chronicity +chronicle +chronicler +chroniclers +chronicles +chronobiology +chronogram +chronograms +chronograph +chronographer +chronographers +chronographs +chronologies +chronologist +chronologists +chronology +chronometer +chronometers +chronometry +chronon +chronons +chronoscope +chronoscopes +chrysalid +chrysalides +chrysalids +chrysalis +chrysalises +chrysanthemum +chrysanthemums +chrysarobin +chrysoberyl +chrysocolla +chrysolite +chrysoprase +chrysotile +chrysotiles +chub +chubbiness +chubs +chuck +chuck-farthing +chuck-will's-widow +chuck-will's-widows +chucker-out +chuckhole +chuckholes +chuckle +chuckles +chucks +chuckwalla +chuckwallas +chuddar +chuddars +chufa +chufas +chuff +chuffiness +chuffs +chug +chugs +chukar +chukars +chukker +chukkers +chum +chumminess +chump +chumping +chumps +chums +chunder +chunders +chunk +chunkiness +chunks +chupatti +chupattis +chuppah +church +churches +churchman +churchmanship +churchwoman +churchyard +churchyards +churinga +churingas +churl +churlishness +churls +churn +churner +churners +churning +churnings +churns +churr +churrs +chute +chutes +chutist +chutists +chutney +chutneys +chutzpah +chyle +chyme +chymotrypsin +chypre +chypres +ciao +ciaos +ciborium +cicada +cicadas +cicala +cicalas +cicatrice +cicatrices +cicatricle +cicatricles +cicatrisation +cicatrisations +cicatrix +cicatrixes +cicatrization +cicatrizations +cicelies +cicely +cicero +cicerone +cicerones +cichlid +cichlids +cicisbeism +cicisbeo +cicuta +cicutas +cider +ciders +cig +cigar +cigarette +cigarettes +cigarillo +cigarillos +cigars +cigs +cilantro +cilia +ciliate +ciliates +cilice +cilices +ciliophora +cilium +cimbalom +cimbaloms +cimetidine +cimex +cinch +cinches +cinchonine +cinchonisation +cinchonisations +cinchonism +cinchonization +cinchonizations +cincture +cinctures +cinder +cinders +cineaste +cineastes +cinema +cinemas +cinematheque +cinematheques +cinematograph +cinematographer +cinematographist +cinematographs +cinematography +cineol +cineole +cineraria +cinerarias +cinerarium +cineration +cinerations +cinerator +cinerators +cinerin +cinerins +cingulum +cinnabar +cinnamon +cinnamons +cinquain +cinquains +cinque +cinquecento +cinques +cion +cions +cipher +ciphers +cipolin +cipolins +cippus +circle +circler +circlers +circles +circlet +circlets +circuit +circuities +circuitousness +circuitries +circuitry +circuits +circuity +circular +circularities +circularity +circulars +circulation +circulations +circulator +circulators +circumambience +circumambiency +circumambulation +circumbendibus +circumbendibuses +circumciser +circumcisers +circumcision +circumcisions +circumduction +circumference +circumferences +circumferential +circumferentor +circumferentors +circumflex +circumflexes +circumfluence +circumfluences +circumfusion +circumfusions +circumgyration +circumgyrations +circumincession +circumjacency +circumlocution +circumlocutionist +circumlocutions +circumnavigation +circumnavigations +circumnavigator +circumnutation +circumnutations +circumscriber +circumscribers +circumscription +circumscriptions +circumspection +circumspections +circumspectness +circumstance +circumstances +circumstantiality +circumvallation +circumvallations +circumvention +circumventions +circumvolution +circumvolutions +circus +circuses +cirque +cirques +cirrhosis +cirri +cirriped +cirripede +cirripedes +cirripeds +cirrus +cisco +ciscoes +ciscos +ciseleur +ciseleurs +ciselure +ciselures +cissoid +cissoids +cist +cistern +cisterna +cisterns +cistron +cistrons +cists +cistus +cistuses +cistvaen +cistvaens +cit +citadel +citadels +citation +citations +citer +citers +cites +cithara +citharas +citharist +citharists +cither +cithers +cities +citification +citizen +citizenries +citizenry +citizens +citizenship +citizenships +citole +citoles +citrange +citranges +citrate +citrates +citrin +citrine +citrines +citron +citronella +citronellal +citronellas +citrons +citronwood +citrulline +citrus +citruses +cits +cittern +citterns +city +cityscape +cityscapes +cive +cives +civet +civets +civics +civies +civilian +civilians +civilisation +civilisations +civiliser +civilisers +civilities +civility +civilization +civilizations +civilizer +civilizers +civism +civvies +civvy +clabber +clabbers +clachan +clachans +clack +clacker +clackers +clacks +cladding +claddings +clade +cladistics +cladode +cladodes +cladogram +cladograms +claim +claim-jumper +claimant +claimants +claimer +claimers +claims +clair-obscure +clairaudience +clairvoyance +clairvoyant +clairvoyants +clam +clambake +clambakes +clamber +clamberer +clamberers +clambers +clamjamfry +clamminess +clamor +clamorousness +clamour +clamourer +clamourers +clamouring +clamours +clamp +clampdown +clampdowns +clamper +clampers +clamps +clams +clan +clandestineness +clandestinity +clang +clanger +clangers +clangor +clangors +clangour +clangours +clangs +clank +clanks +clannishness +clans +clansman +clanswoman +clap +clapboard +clapboards +clapper +clapperboard +clapperboards +clapperclawer +clapperclawers +clappers +clapping +clappings +claps +claptrap +claptraps +claque +claques +claqueur +claqueurs +clarabella +clarabellas +clarain +clarence +clarences +clarendon +claret +clarets +claries +clarification +clarifications +clarifier +clarifiers +clarinet +clarinetist +clarinetists +clarinets +clarinettist +clarinettists +clarino +clarinos +clarion +clarions +clarity +clarkia +clarkias +claro +claroes +claros +clarsach +clarsachs +clary +clash +clasher +clashers +clashes +clasp +clasped +clasper +claspers +clasps +class +classes +classic +classicality +classicalness +classicism +classicist +classicists +classics +classification +classifications +classifier +classifiers +classiness +classis +classmate +classmates +classroom +classrooms +clathrate +clatter +clatterer +clatterers +clatters +claudication +clause +clauses +claustrophobe +claustrophobia +claustrum +clausula +clave +claves +clavicembalo +clavicembalos +clavichord +clavichords +clavicle +clavicles +clavicorn +clavicorns +clavicytherium +clavicytheriums +clavier +claviers +claw +clawback +clawbacks +claws +claxon +claxons +clay +claymore +claymores +claypan +claypans +clays +claytonia +clean +cleaner +cleaners +cleaning +cleanings +cleanliness +cleanness +cleans +cleanser +cleansers +cleansing +cleansings +cleanskin +cleanskins +clear +clear-sightedness +clearance +clearances +clearcole +clearcoles +clearer +clearers +clearing +clearings +clearness +clears +clearway +clearways +clearwing +clearwings +cleat +cleats +cleavage +cleavages +cleaver +cleavers +cleck +clecks +cleek +cleeks +clef +clefs +cleft +clefts +cleg +clegs +cleistogamy +clematis +clematises +clemency +clementine +clementines +clench +clenches +clepsydra +clepsydras +cleptomania +clerestories +clerestory +clergies +clergy +clergyman +cleric +clericalism +clericalist +clericalists +clerics +clerihew +clerihews +clerisies +clerisy +clerk +clerkess +clerkesses +clerking +clerks +clerkship +clerkships +cleruch +cleruchs +cleruchy +cleveite +cleverness +clevis +clevises +clew +clews +clianthus +clianthuses +click +click-clack +clicker +clickers +clickety-clack +clickety-click +clicks +client +clientage +clientages +clients +cliff +cliffhanger +cliffhangers +cliffs +clift +clifts +climacteric +climate +climates +climatologist +climatologists +climatology +climax +climaxes +climb +climb-down +climb-downs +climber +climbers +climbing +climbings +climbs +clime +climes +clinch +clincher +clinchers +clinches +cline +clines +cling +clinger +clingers +clinginess +clings +clingstone +clingstones +clinic +clinician +clinicians +clinics +clink +clinker +clinkers +clinks +clinkstone +clinometer +clinometers +clinometry +clinquant +clinquants +clip +clip-clop +clip-clops +clipper +clippers +clippie +clippies +clipping +clippings +clips +clique +cliques +cliquishness +cliquism +clishmaclaver +clitellum +clitic +clitoris +clitorises +clivers +cloaca +cloak +cloak-and-dagger +cloakroom +cloakrooms +cloaks +clobber +clobbers +cloche +cloches +clock +clock-watcher +clock-watchers +clock-watching +clocker +clockers +clocking +clockmaker +clockmakers +clocks +clockwork +clockworks +clod +cloddishness +clodhopper +clodhoppers +clodpoll +clodpolls +clods +clofibrate +clog +clogginess +clogs +cloison +cloisons +cloister +cloisters +cloistress +cloke +clokes +clomiphene +clomp +clomps +clone +clones +clonicity +clonk +clonks +clonus +clonuses +cloot +cloots +clop +clops +close +close-stool +close-up +close-ups +closeness +closer +closers +closes +closet +closets +closing +closings +clostridia +clostridium +closure +closures +clot +clotbur +clotburs +clotes +cloth +clothes +clothes-peg +clothes-pegs +clothes-press +clothes-presses +clothier +clothiers +clothing +clothings +cloths +clots +clotting +clottings +cloture +clotures +clou +cloud +cloud-cuckoo-land +cloudage +cloudberries +cloudberry +cloudburst +cloudbursts +cloudiness +clouding +cloudings +cloudland +cloudlands +cloudlet +cloudlets +clouds +cloudscape +clough +cloughs +clous +clout +clouter +clouters +clouts +clove +clover +cloverleaf +clovers +cloves +clowder +clowders +clown +clowneries +clownery +clowning +clownings +clownishness +clowns +club +clubability +clubbability +clubbed +clubber +clubbing +clubbings +clubhouse +clubhouses +clubland +clubman +clubroom +clubrooms +clubroot +clubs +clubwoman +cluck +clucks +clue +clues +clumber +clumbers +clump +clumps +clumsiness +clunch +clunches +clunk +clunks +clupeid +clupeids +clupeoid +clusia +clusias +cluster +clusters +clutch +clutches +clutter +clutters +clypeus +clypeuses +clyster +clysters +cnida +cnidarian +cnidoblast +cnidoblasts +co-driver +co-drivers +co-optation +co-option +co-respondent +co-respondents +co-star +co-stars +co-worker +co-workers +coacervate +coacervates +coacervation +coacervations +coach +coachbuilder +coachbuilders +coachbuilding +coacher +coachers +coaches +coaching +coachings +coachman +coachwhip +coachwhips +coachwood +coachwork +coachworks +coaction +coactivities +coactivity +coadjutant +coadjutants +coadjutor +coadjutors +coadjutress +coadjutresses +coadjutrix +coadjutrixes +coadunation +coadunations +coagulability +coagulant +coagulants +coagulase +coagulate +coagulates +coagulation +coagulations +coagulum +coagulums +coal +coaler +coalers +coalescence +coalescences +coalfield +coalfields +coalfish +coalfishes +coalition +coalitioner +coalitioners +coalitionist +coalitionists +coalitions +coalman +coals +coaming +coamings +coaptation +coarctation +coarctations +coarseness +coarsening +coast +coaster +coasters +coastguard +coastguards +coastguardsman +coastline +coastlines +coasts +coat +coatee +coatees +coati +coati-mondi +coati-mondis +coati-mundi +coati-mundis +coating +coatings +coatis +coatrack +coatracks +coats +coattail +coattails +coax +coaxer +coaxers +coaxes +coaxing +cob +cobalamin +cobalt +cobaltite +cobb +cobber +cobbers +cobble +cobbler +cobblers +cobbles +cobblestone +cobblestones +cobbling +cobblings +cobbs +cobia +cobias +coble +cobles +cobnut +cobnuts +cobra +cobras +cobs +coburg +coburgs +cobweb +cobwebs +coca +cocaine +cocainisation +cocainism +cocainization +cocas +cocci +coccid +coccidia +coccidioidomycosis +coccidiosis +coccidium +coccids +coccoid +coccolith +coccoliths +coccus +coccyx +cochineal +cochineals +cochlea +cochleas +cock +cock-a-doodle-doo +cock-a-doodle-doos +cock-of-the-rock +cockade +cockades +cockalorum +cockalorums +cockateel +cockateels +cockatiel +cockatiels +cockatoo +cockatoos +cockatrice +cockatrices +cockboat +cockboats +cockchafer +cockchafers +cocker +cockerel +cockerels +cockers +cockeye +cockeyes +cockfight +cockfighting +cockfights +cockhorse +cockhorses +cockiness +cockle +cockleboat +cockles +cockleshell +cockleshells +cockloft +cocklofts +cockney +cockneydom +cockneyfication +cockneyism +cockneys +cockpit +cockpits +cockroach +cockroaches +cocks +cockscomb +cockscombs +cocksfoot +cocksfoots +cockshies +cockshut +cockshy +cockspur +cockspurs +cockswain +cockswains +cocktail +cocktails +cocky +coco +cocoa +cocoanut +cocoanuts +cocoas +coconsciousness +coconut +coconuts +cocoon +cocoons +cocopan +cocopans +cocos +cocotte +cocottes +cod +coda +codas +codder +coddle +coddles +code +codeclination +codeine +coder +coders +codes +codetta +codettas +codex +codfish +codfishes +codger +codgers +codices +codicil +codicils +codicology +codification +codifications +codifier +codifiers +coding +codling +codlings +codomain +codon +codons +cods +codswallop +coed +coeditor +coeditors +coeds +coeducation +coefficient +coefficients +coehorn +coehorns +coelacanth +coelacanths +coelenterate +coelenterates +coelom +coelomate +coelomates +coeloms +coelostat +coelostats +coemption +coemptions +coenesthesia +coenobite +coenobites +coenobitism +coenocyte +coenocytes +coenosarc +coenosarcs +coenzyme +coenzymes +coequal +coequalities +coequality +coequals +coercer +coercers +coercion +coercionist +coercionists +coercions +coerciveness +coercivity +coeval +coevals +cofactor +cofactors +coffee +coffees +coffer +coffers +coffin +coffinite +coffins +coffle +coffles +coffret +coffrets +cog +cogency +cogitation +cogitations +cogitator +cogitators +cognate +cognateness +cognates +cognation +cognisance +cognition +cognitions +cognizance +cognomen +cognomens +cognoscenti +cognovit +cognovits +cogs +cohabitant +cohabitants +cohabitation +cohabitations +coherence +coherences +coherencies +coherency +coherer +coherers +cohesion +cohesions +cohesiveness +coho +cohoe +cohoes +cohort +cohorts +cohos +cohune +cohunes +coif +coiffeur +coiffeurs +coiffeuse +coiffeuses +coiffure +coiffures +coifs +coign +coigne +coignes +coigns +coil +coils +coin +coin-op +coinage +coinages +coincidence +coincidences +coiner +coiners +coins +coir +coistrel +coistrels +coit +coition +coitus +coituses +coke +cokernut +cokernuts +cokes +col +cola +colander +colanders +colas +colatitude +colatitudes +colcannon +colcannons +colchicine +colchicum +colchicums +colcothar +cold +cold-bloodedness +coldheartedness +coldness +colds +coldslaw +cole +colectomy +colemanite +coleopteran +coleopteron +coleoptile +coleoptiles +coleorhiza +coleorhizas +coles +coleus +coleuses +coley +coleys +colic +coliform +coliforms +colin +colins +coliseum +coliseums +colitis +coll +collaboration +collaborationism +collaborationist +collaborationists +collaborations +collaborator +collaborators +collage +collagen +collagenase +collages +collagist +collagists +collapsability +collapsar +collapsars +collapse +collapses +collapsibility +collar +collard +collards +collarette +collarettes +collars +collateral +collaterals +collation +collations +collator +collators +colleague +colleagues +colleagueship +colleagueships +collect +collectedness +collecting +collectings +collection +collections +collective +collectives +collectivisation +collectivism +collectivist +collectivists +collectivity +collectivization +collector +collectorate +collectorates +collectors +collectorship +collectorships +collects +colleen +colleens +college +colleger +collegers +colleges +collegian +collegiate +collegium +collegiums +collembolan +collembolans +collenchyma +collet +collets +collider +colliders +collie +collier +collieries +colliers +colliery +collies +collieshangie +collieshangies +colligation +colligations +collimation +collimations +collimator +collimators +collinearity +collision +collisions +collocation +collocations +collocutor +collocutors +collodion +colloid +colloids +collop +collops +colloquialism +colloquialisms +colloquialist +colloquialists +colloquies +colloquist +colloquists +colloquium +colloquiums +colloquy +collotype +colluder +colluders +collusion +collusions +colly +collyrium +collyriums +colobus +colobuses +colocynth +colocynths +cologarithm +cologarithms +colon +colonel +colonelcies +colonelcy +colonels +colones +colonial +colonialism +colonialisms +colonialist +colonialists +colonials +colonic +colonies +colonisation +colonisations +coloniser +colonisers +colonist +colonists +colonitis +colonization +colonizations +colonizer +colonizers +colonnade +colonnades +colons +colony +colophon +colophons +colophony +coloquintida +coloquintidas +color +colorant +colorants +coloration +colorations +coloratura +coloraturas +colored +coloreds +colorimeter +colorimeters +colorimetry +coloring +colorings +colorist +colorists +colorman +colors +colosseum +colosseums +colossus +colossuses +colostomies +colostomy +colostrum +colostrums +colotomies +colotomy +colour +colouration +colourations +colourer +colourers +colouring +colourings +colourist +colourists +colours +colportage +colportages +colporteur +colporteurs +cols +colt +colter +colters +colts +coltsfoot +coltsfoots +coluber +colubers +colubrid +colubrids +colugo +colugos +columbaries +columbarium +columbary +columbate +columbine +columbines +columbite +columbium +columella +columellas +column +columnarity +columniation +columniations +columnist +columnists +columns +colure +colures +colza +colzas +coma +comal +comas +comatulid +comatulids +comb +comb-out +comb-outs +combat +combatant +combatants +combativeness +combats +combe +comber +combers +combes +combination +combinations +combine +combiner +combiners +combines +combing +combings +combining +combo +combos +combretum +combretums +combs +combustibility +combustible +combustibleness +combustibles +combustion +combustions +combustor +combustors +come-on +come-ons +comedian +comedians +comedienne +comediennes +comedies +comedietta +comediettas +comedo +comedos +comedown +comedowns +comedy +comeliness +comer +comers +comes +comestible +comestibles +comet +comether +comethers +comets +comeuppance +comeuppances +comfit +comfits +comfort +comfortableness +comforter +comforters +comfortlessness +comforts +comfrey +comfreys +comic +comicalities +comicality +comicalness +comices +comics +coming +comings +comitative +comitatives +comitia +comity +comma +command +commandant +commandants +commander +commanderies +commanders +commandership +commanderships +commandery +commandment +commandments +commando +commandoes +commandos +commands +commas +commemoration +commemorations +commemorative +commencement +commencements +commendableness +commendam +commendams +commendation +commendations +commensal +commensalism +commensalities +commensality +commensals +commensurability +commensurableness +commensurateness +commensuration +commensurations +comment +commentaries +commentary +commentator +commentators +commenter +commenters +comments +commerce +commerces +commercial +commercialisation +commercialism +commercialist +commercialists +commercialization +commercials +commie +commies +commination +comminations +comminution +comminutions +commis +commiseration +commiserations +commiserator +commiserators +commissar +commissariat +commissariats +commissaries +commissars +commissary +commission +commissionaire +commissionaires +commissioner +commissioners +commissionership +commissionerships +commissioning +commissions +commissure +commissures +commitment +commitments +committal +committals +committee +committeeman +committees +committeeship +committeeships +committeewoman +commixture +commixtures +commo +commode +commodes +commodiousness +commodities +commodity +commodore +commodores +common +commonage +commonages +commonalities +commonality +commonalties +commonalty +commoner +commoners +commonness +commonplace +commonplaces +commons +commonweal +commonweals +commonwealth +commonwealths +commos +commotion +commotions +communalisation +communalism +communalist +communalists +communalization +communard +communards +commune +communes +communicability +communicableness +communicant +communicants +communicating +communication +communications +communicativeness +communicator +communicators +communion +communions +communique +communiques +communism +communisms +communist +communists +communitarian +communitarians +communities +community +commutability +commutation +commutations +commutator +commutators +commuter +commuters +commuting +commy +comp +compact +compactedness +compactification +compaction +compactions +compactness +compacts +compadre +compadres +compander +companders +companies +companion +companionableness +companions +companionship +companionships +company +comparability +comparableness +comparative +comparator +comparators +compare +compares +comparing +comparison +comparisons +compartment +compartmentalization +compartmentalizations +compartments +compass +compasses +compassion +compassionateness +compassions +compatibilities +compatibility +compatibleness +compatriot +compatriotism +compatriots +compeer +compeers +compellation +compellations +compeller +compellers +compelling +compendiousness +compendium +compendiums +compensation +compensations +compensator +compensators +competence +competences +competencies +competency +competition +competitions +competitiveness +competitor +competitors +compilation +compilations +compiler +compilers +compiling +complacence +complacency +complainant +complainants +complainer +complainers +complaint +complaints +complaisance +complanation +complanations +complement +complementarity +complementation +complements +completeness +completion +completions +complex +complexes +complexion +complexions +complexities +complexity +complexness +compliance +compliances +compliancies +compliancy +complicacy +complicatedness +complicating +complication +complications +complice +complicities +complicity +complier +compliers +compliment +complimenter +complimenters +compliments +complin +compline +complines +complins +complot +complots +compluvium +compluviums +compo +component +components +comportment +compos +composedness +composer +composers +composing +composite +compositeness +composites +composition +compositions +compositor +compositors +compossibility +compost +composts +composure +composures +compotation +compotations +compotator +compotators +compote +compotes +compotier +compotiers +compound +compounder +compounders +compounding +compounds +comprador +compradores +compradors +comprehensibility +comprehensibleness +comprehension +comprehensions +comprehensive +comprehensiveness +comprehensives +compress +compresses +compressibility +compressing +compression +compressions +compressor +compressors +comprisal +comprisals +comprising +compromise +compromises +comps +compt +comptroller +comptrollers +compulsion +compulsions +compulsive +compulsiveness +compulsoriness +compunction +compunctions +compurgation +compurgations +compurgator +compurgators +computation +computations +compute +computer +computerization +computers +computes +computist +computists +comrade +comrades +comradeship +comsat +comstockery +con +conation +conatus +concatenation +concatenations +concaveness +concavities +concavity +concealer +concealers +concealing +concealment +concealments +conceder +conceders +conceding +conceit +conceitedness +conceits +conceivability +conceivableness +concelebration +concelebrations +concent +concentrate +concentrates +concentration +concentrations +concentrativeness +concentrator +concentrators +concentricities +concentricity +concents +concept +conceptacle +conception +conceptions +concepts +conceptualisation +conceptualism +conceptualist +conceptualists +conceptualization +conceptus +conceptuses +concern +concernedness +concernment +concernments +concerns +concert +concertante +concertantes +concertgoer +concertgoers +concertina +concertinas +concertino +concertinos +concerto +concertos +concerts +concession +concessionaire +concessionaires +concessionary +concessions +conch +concha +conchas +conches +conchie +conchies +conchiolin +conchoid +conchoids +conchologist +conchologists +conchology +conchs +conchy +concierge +concierges +conciliation +conciliations +conciliator +conciliators +concinnity +conciseness +concision +conclave +conclaves +conclavist +conclavists +conclusion +conclusions +conclusiveness +concocter +concocters +concoction +concoctions +concoctor +concoctors +concomitance +concomitant +concomitants +concord +concordance +concordances +concordat +concordats +concords +concourse +concourses +concrescence +concrescences +concrete +concreteness +concretes +concretion +concretions +concretism +concubinage +concubinary +concubine +concubines +concupiscence +concurrence +concurrences +concurrent +concurrents +concussion +concussions +cond +condemnation +condemnations +condemner +condemners +condensability +condensate +condensates +condensation +condensations +condenser +condenseries +condensers +condensery +condensing +condescendence +condescendences +condescension +condescensions +condiment +condiments +condisciple +condisciples +condition +conditionality +conditioner +conditioners +conditioning +conditionings +conditions +condo +condolence +condolences +condom +condominium +condominiums +condoms +condonation +condonations +condor +condors +condos +condottiere +conduct +conductance +conductances +conductibility +conducting +conduction +conductions +conductivities +conductivity +conductor +conductors +conductorship +conductorships +conductress +conductresses +conducts +conduit +conduits +condyle +condyles +condyloma +condylomas +cone +cones +coney +coneys +confab +confabs +confabulation +confabulations +confabulator +confabulators +confarreation +confarreations +confection +confectionaries +confectionary +confectioner +confectioneries +confectioners +confectionery +confections +confederacies +confederacy +confederate +confederates +confederation +confederations +conferee +conferees +conference +conferences +conferment +conferments +conferral +conferrals +conferrer +conferrers +conferva +confervas +confervoid +confessant +confession +confessional +confessionalism +confessionals +confessionaries +confessionary +confessions +confessor +confessors +confetti +confidant +confidante +confidantes +confidants +confidence +confidences +confident +confidentiality +confider +confiders +configuration +configurations +confine +confinement +confinements +confiner +confines +confirmand +confirmands +confirmation +confirmations +confirmer +confirmers +confirmor +confirmors +confiscation +confiscations +confiscator +confiscators +confiture +conflagration +conflagrations +conflation +conflations +conflict +confliction +conflictions +conflicts +confluence +confluences +confluent +confluents +conflux +confluxes +conformability +conformance +conformation +conformations +conformer +conformers +conformist +conformists +conformities +conformity +confounding +confraternities +confraternity +confrontation +confrontations +confronting +confrontment +confrontments +confusedness +confusion +confusions +confutation +confutations +confuting +conga +congas +congealableness +congealment +congealments +congee +congees +congelation +congelations +congener +congeners +congenialities +congeniality +conger +congeries +congers +congestion +congestions +congius +conglobation +conglobations +conglomerate +conglomerates +conglomeration +conglomerations +conglutination +conglutinations +congo +congos +congou +congous +congratulant +congratulants +congratulation +congratulations +congratulator +congratulators +congregant +congregants +congregating +congregation +congregations +congress +congresses +congressman +congresswoman +congruence +congruences +congruencies +congruency +congruities +congruity +congruousness +conic +conics +conidiophore +conidiophores +conidiospore +conidiospores +conidium +conies +conifer +conifers +coniine +conima +conjecture +conjecturer +conjectures +conjoiner +conjoiners +conjugality +conjugant +conjugate +conjugates +conjugation +conjugations +conjunct +conjunction +conjunctions +conjunctiva +conjunctivas +conjunctive +conjunctivitis +conjuncture +conjunctures +conjuration +conjurations +conjurator +conjurators +conjurer +conjurers +conjuries +conjuring +conjurings +conjuror +conjurors +conjury +conk +conker +conkers +conks +conn +connation +connaturalness +connecter +connecters +connecting +connection +connectionism +connections +connective +connectives +connectivity +connector +connectors +connexion +connexions +conniption +conniptions +connivance +conniver +connivers +connoisseur +connoisseurs +connoisseurship +connotation +connotations +conns +connubiality +conodont +conodonts +conoid +conoids +conquerableness +conquering +conqueror +conquerors +conquest +conquests +conquistador +conquistadores +conquistadors +cons +consanguinity +conscience +consciences +conscientiousness +conscionableness +consciousness +conscript +conscription +conscriptionist +conscriptions +conscripts +consecratedness +consecration +consecrations +consecrator +consecrators +consecution +consecutions +consecutiveness +consensus +consensuses +consent +consentaneity +consentaneousness +consentience +consents +consequence +consequences +consequent +consequents +conservancies +conservancy +conservation +conservationist +conservationists +conservations +conservatism +conservative +conservativeness +conservatives +conservatoire +conservatoires +conservator +conservatories +conservatorium +conservatoriums +conservators +conservatory +conserve +conserver +conservers +conserves +conserving +considerance +considerateness +consideration +considerations +consignation +consignations +consignee +consignees +consigner +consigners +consignment +consignments +consignor +consignors +consistence +consistences +consistencies +consistency +consistories +consistory +consociate +consociates +consociation +consociations +consocies +consolation +consolations +console +consoler +consolers +consoles +consolidation +consolidations +consolidator +consolidators +consonance +consonances +consonant +consonants +consort +consorter +consorters +consortium +consortiums +consorts +conspectus +conspectuses +conspicuity +conspicuousness +conspiracies +conspiracy +conspirator +conspirators +conspiratress +conspiratresses +constable +constables +constableship +constableships +constabularies +constabulary +constancies +constancy +constant +constantan +constants +constatation +constatations +constellation +constellations +consternation +consternations +constipation +constituencies +constituency +constituent +constituents +constitution +constitutional +constitutionalism +constitutionalist +constitutionalists +constitutionality +constitutionals +constitutions +constitutor +constraint +constraints +constriction +constrictions +constrictor +constrictors +constringencies +constringency +construability +construct +constructer +constructers +construction +constructionism +constructionist +constructionists +constructions +constructiveness +constructivism +constructor +constructors +constructs +construe +construer +construers +construes +consubstantialism +consubstantialist +consubstantiality +consubstantiation +consuetude +consuetudes +consuetudinaries +consuetudinary +consul +consulate +consulates +consuls +consulship +consulships +consultant +consultants +consultation +consultations +consulter +consulters +consumable +consumables +consumer +consumerism +consumers +consummation +consummations +consummator +consummators +consumption +consumptions +consumptive +consumptiveness +consumptives +contact +contacting +contactor +contactors +contacts +contadino +contagion +contagions +contagiousness +contagium +contagiums +container +containerization +containers +containment +containments +contaminant +contaminants +contamination +contaminations +contaminator +contaminators +contango +contangos +conte +contemner +contemners +contemplation +contemplations +contemplative +contemplativeness +contemplator +contemplators +contemporaneity +contemporaneousness +contemporaries +contemporariness +contemporary +contempt +contemptibility +contemptibleness +contempts +contemptuousness +contender +contenders +content +contentedness +contention +contentions +contentiousness +contentment +contents +contes +contest +contestant +contestants +contestation +contestations +contester +contests +context +contexts +contexture +contextures +contiguities +contiguity +contiguousness +continence +continency +continent +continental +continentalism +continentalisms +continentalist +continentalists +continentals +continents +contingence +contingences +contingencies +contingency +contingent +contingents +continuance +continuances +continuant +continuants +continuation +continuations +continuative +continuator +continuators +continuedness +continuer +continuers +continuities +continuity +continuo +continuos +continuousness +continuum +continuums +conto +contortion +contortionist +contortionists +contortions +contos +contour +contours +contraband +contrabandism +contrabandist +contrabandists +contrabands +contrabass +contrabasses +contrabassoon +contrabassoons +contraception +contraceptions +contraceptive +contraceptives +contract +contractedness +contractibility +contractility +contracting +contraction +contractions +contractor +contractors +contracts +contracture +contractures +contradance +contradiction +contradictions +contradictor +contradictoriness +contradictors +contradictory +contradistinction +contradistinctions +contrafagotto +contrafagottos +contrail +contrails +contraindicant +contraindicants +contraindication +contralto +contraltos +contraposition +contrapositions +contrapositive +contrapositives +contrapposto +contrappostos +contraprop +contraprops +contraption +contraptions +contrapuntist +contrapuntists +contraries +contrarieties +contrariety +contrariness +contrary +contrast +contrasts +contravallation +contravention +contraventions +contrayerva +contrayervas +contrecoup +contrecoups +contretemps +contribution +contributions +contributor +contributors +contributory +contriteness +contrition +contrivance +contrivances +contriver +contrivers +control +controllability +controller +controllers +controllership +controllerships +controlling +controls +controversialist +controversialists +controversies +controversy +controvertist +controvertists +contumacies +contumaciousness +contumacities +contumacity +contumacy +contumelies +contumeliousness +contumely +contusion +contusions +conundrum +conundrums +conurbation +conurbations +conure +convalescence +convalescences +convalescent +convalescents +convection +convections +convector +convectors +convenance +convenances +convener +conveners +convenience +conveniences +conveniencies +conveniency +convening +convent +conventicle +conventicler +conventiclers +conventicles +convention +conventional +conventionalism +conventionalist +conventionalities +conventionality +conventioneer +conventioneers +conventioner +conventioners +conventions +convents +conventual +conventuals +convergence +convergences +convergencies +convergency +converging +conversance +conversancy +conversation +conversationalist +conversationalists +conversations +conversazione +conversaziones +converse +converses +conversion +conversions +convert +converter +converters +convertibility +convertible +convertibles +converting +convertiplane +convertiplanes +convertite +convertites +convertor +convertors +converts +convexities +convexity +convexness +conveyance +conveyancer +conveyancers +conveyances +conveyancing +conveyer +conveyers +conveying +conveyor +conveyors +convict +conviction +convictions +convicts +convincing +convive +convives +convivialist +convivialists +convivialities +conviviality +convocation +convocations +convolution +convolutions +convolvulus +convolvuluses +convoy +convoys +convulsant +convulsants +convulsion +convulsionary +convulsions +convulsiveness +cony +coo +cooey +cooeys +coof +coofs +cook +cook-general +cooker +cookers +cookery +cookhouse +cookhouses +cookie +cookies +cooking +cookout +cookouts +cooks +cookshop +cookshops +cookware +cooky +cool +coolabah +coolabahs +coolamon +coolamons +coolant +coolants +cooler +coolers +coolie +coolies +cooling +coolness +cools +coolth +cooly +coom +coomb +coombes +coombs +cooms +coon +coondog +coondogs +coonhound +coonhounds +coons +coonskin +coontie +coonties +coop +cooper +cooperage +cooperages +cooperation +cooperations +cooperative +cooperativeness +cooperatives +cooperator +cooperators +cooperies +coopers +coopery +coops +coordinate +coordinates +coordination +coordinator +coordinators +coos +coot +cootie +cooties +coots +cop +copaiba +copal +coparcenaries +coparcenary +coparcener +coparceners +copartner +copartners +copartnership +copartnerships +cope +copeck +copecks +copemate +copemates +copepod +copepods +coper +copers +copes +copier +copiers +copies +copilot +copilots +coping +copings +copiousness +copita +copitas +coplanarity +copolymerization +copolymerizations +copper +copperas +copperhead +copperheads +copperplate +copperplates +coppers +coppersmith +coppersmiths +coppice +coppices +copping +copra +copras +coprolalia +coprolite +coprolites +coprology +coprophagist +coprophagists +coprophagy +coprophilia +coprosma +coprosmas +coprosterol +cops +copse +copses +copter +copters +copula +copulas +copulation +copulations +copulative +copulatives +copy +copybook +copybooks +copycat +copycats +copyhold +copyholder +copyholders +copyholds +copying +copyist +copyists +copyreader +copyreaders +copyright +copyrights +copywriter +copywriters +coquelicot +coquetries +coquetry +coquette +coquettes +coquettishness +coquille +coquilles +coquina +coquinas +coquito +coquitos +cor +coracle +coracles +coracoid +coracoids +coral +coralline +corallines +corallite +corallites +corals +coranto +corantoes +corantos +corban +corbans +corbeil +corbeille +corbeilles +corbeils +corbel +corbeling +corbelling +corbellings +corbels +corbicula +corbiculas +corbie +corbie-step +corbie-steps +corbies +cord +cordage +cordages +cordial +cordialities +cordiality +cordialness +cordials +cordierite +cordillera +cordilleras +cording +cordings +cordite +cordon +cordons +cordovan +cordovans +cords +corduroy +corduroys +cordwain +cordwainer +cordwainers +cordwainery +cordwains +cordyline +cordylines +core +corella +corellas +coreopsis +corer +corers +cores +corf +corgi +corgis +coriander +corianders +coring +corium +coriums +cork +corkage +corkages +corkboard +corker +corkers +corkiness +corks +corkwood +corkwoods +corm +cormel +cormels +cormophyte +cormophytes +cormorant +cormorants +corms +corn +corn-cracker +corncockle +corncockles +corncrake +corncrakes +corncrib +corncribs +cornea +corneas +cornel +cornelian +cornelians +cornels +cornemuse +cornemuses +corner +corners +cornet +cornetcies +cornetcy +cornetist +cornetists +cornets +cornett +cornetto +cornetts +cornfield +cornfields +cornflower +cornflowers +cornhusk +cornhusker +cornhuskers +cornhusking +cornhuskings +cornice +cornices +corniche +corniches +cornicle +cornicles +corns +cornstalk +cornstalks +cornstarch +cornstone +cornstones +cornu +cornucopia +cornucopias +cornuto +cornutos +corodies +corody +corolla +corollaries +corollary +corollas +corona +coronach +coronachs +coronagraph +coronagraphs +coronal +coronaries +coronary +coronas +coronation +coronations +coroner +coroners +coronet +coronets +coronograph +coronographs +corozo +corozos +corpora +corporal +corporality +corporals +corporalship +corporalships +corporas +corporateness +corporation +corporations +corporatism +corporator +corporators +corporeality +corporeities +corporeity +corposant +corposants +corps +corpse +corpses +corpsman +corpulence +corpus +corpuscle +corpuscles +corpuscularity +corral +corrals +corrasion +corrasions +correcting +correction +corrections +correctitude +correctitudes +corrective +correctives +correctness +corrector +correctors +corregidor +corregidors +correlate +correlates +correlation +correlations +correlative +correlativeness +correlatives +correlativity +correspondence +correspondences +correspondencies +correspondency +correspondent +correspondents +corrida +corridas +corridor +corridors +corrie +corries +corrigenda +corrigendum +corrigibility +corrival +corrivalry +corrivals +corroborant +corroboration +corroborations +corroborator +corroborators +corroboree +corroborees +corrodies +corroding +corrody +corrosion +corrosions +corrosive +corrosiveness +corrosives +corrugation +corrugations +corrugator +corrugators +corrupter +corrupters +corruptibility +corruptibleness +corruption +corruptionist +corruptionists +corruptions +corruptness +cors +corsac +corsacs +corsage +corsages +corsair +corsairs +corse +corselet +corselets +corses +corset +corsetry +corsets +corslet +corslets +cortex +cortexes +corticoid +corticoids +corticosteroid +corticosteroids +corticotrophin +cortisol +cortisone +cortisones +corundum +coruscation +coruscations +corves +corvette +corvettes +corvus +corvuses +corylopsis +corymb +corymbs +coryphaeus +coryza +coryzas +cos +cose +cosec +cosecant +cosecants +coseismal +coses +coset +cosets +cosh +coshes +cosies +cosine +cosines +cosiness +cosmetic +cosmetician +cosmeticians +cosmetics +cosmetologist +cosmetologists +cosmetology +cosmism +cosmist +cosmists +cosmochemistry +cosmodrome +cosmodromes +cosmogonies +cosmogonist +cosmogonists +cosmogony +cosmographer +cosmographers +cosmography +cosmolatry +cosmologies +cosmologist +cosmologists +cosmology +cosmonaut +cosmonautics +cosmonauts +cosmopolis +cosmopolises +cosmopolitan +cosmopolitanism +cosmopolitans +cosmopolite +cosmopolites +cosmopolitism +cosmorama +cosmoramas +cosmos +cosmoses +cosmotron +cosmotrons +coss +cosses +cosset +cossets +cossie +cossies +cost +cost-plus +costa +costalgia +costard +costards +coster +costermonger +costermongers +costers +costes +costing +costiveness +costliness +costmaries +costmary +costrel +costrels +costs +costume +costumer +costumers +costumes +costumier +costumiers +cosy +cot +cotangent +cotangents +cote +coteau +coterie +coteries +cotes +coth +coths +cothurnus +cothurnuses +cotillion +cotillions +cotillon +cotillons +cotinga +cotingas +cotise +cotises +cotoneaster +cotoneasters +cotquean +cots +cotta +cottage +cottager +cottagers +cottages +cottar +cottars +cottas +cotter +cotters +cottidae +cottier +cottiers +cotton +cottonade +cottonades +cottonmouth +cottonmouths +cottons +cottonseed +cottonseeds +cottontail +cottontails +cotwal +cotwals +cotyledon +cotyledons +cotyloid +cou-cou +coucal +coucals +couch +couches +couchette +couchettes +couching +cougar +cougars +cough +cougher +coughers +coughing +coughings +coughs +couldn't +coulibiaca +coulisse +coulisses +couloir +couloirs +coulomb +coulombs +coulometer +coulometers +coulter +coulters +coumarin +council +councillor +councillors +councilman +councilor +councils +councilwoman +counsel +counsellor +counsellors +counsellorship +counsellorships +counselor +counselors +counselorship +counsels +count +countenance +countenancer +countenancers +countenances +counter +counter-revolution +counter-revolutionaries +counter-revolutionary +counter-revolutions +counteraction +counteractions +counterbalance +counterbalances +counterbore +countercharge +countercharges +countercheck +counterchecks +counterculture +counterexample +counterexamples +counterfeit +counterfeiter +counterfeiters +counterfeits +counterfoil +counterfoils +counterinsurgency +counterlight +counterlights +countermand +countermands +countermarch +countermarches +countermark +countermarks +countermine +countermines +counteroffer +counteroffers +counterpane +counterpanes +counterpart +counterparts +counterplot +counterplots +counterpoint +counterpoints +counterpoise +counterpoises +counterproof +counterproofs +counterpunch +counters +counterscarp +counterscarps +countershading +countershaft +countershafts +countersign +countersigns +countersink +countersinks +counterstroke +counterstrokes +countess +countesses +counties +counting +countries +country +countryman +countryside +countrywoman +counts +countship +countships +county +coup +coupe +coupees +coupes +couple +couplement +couplements +coupler +couplers +couples +couplet +couplets +coupling +couplings +coupon +coupons +coups +courage +courageousness +courant +courante +courantes +courants +courbaril +courbarils +courgette +courgettes +courier +couriers +courlan +courlans +course +courser +coursers +courses +coursing +coursings +court +court-baron +court-leet +court-martial +court-martials +courteousness +courtesan +courtesans +courtesies +courtesy +courtier +courtiers +courting +courtings +courtliness +courtroom +courtrooms +courts +courtship +courtships +courtyard +courtyards +couscous +couscouses +cousin +cousin-german +cousinage +cousinages +cousinhood +cousinry +cousins +cousinship +couter +couters +coutil +coutils +couture +couturier +couturiers +couvade +covalencies +covalency +covariance +covariances +cove +covellite +coven +covenant +covenantee +covenantees +covenanter +covenanters +covenantor +covenantors +covenants +covens +cover +cover-up +cover-ups +coverage +coverall +coveralls +coverer +coverers +covering +coverings +coverlet +coverlets +covers +covert +covertness +coverts +coverture +covertures +coves +covetousness +covey +coveys +covin +covins +cow +cowage +cowages +coward +cowardice +cowardliness +cowards +cowbane +cowbanes +cowbell +cowbells +cowberries +cowberry +cowbird +cowbirds +cowboy +cowboys +cowcatcher +cowcatchers +cowfish +cowfishes +cowgirl +cowgirls +cowhage +cowhages +cowhand +cowhands +cowherb +cowherd +cowherds +cowhide +cowhides +cowhouse +cowhouses +cowitch +cowitches +cowl +cowlick +cowlicks +cowling +cowlings +cowls +cowman +cowpat +cowpats +cowpoke +cowpox +cowpuncher +cowpunchers +cowrie +cowries +cowry +cows +cowshed +cowsheds +cowslip +cowslips +cox +coxa +coxalgia +coxcomb +coxcombries +coxcombry +coxcombs +coxes +coxswain +coxswains +coyishness +coyness +coyote +coyotes +coyotillo +coyotillos +coypu +coypus +coz +coze +cozenage +cozener +cozeners +cozes +coziness +cozy +crab +crabbedness +crabber +crabbers +crabbiness +crabbing +crabs +crabstick +crabsticks +crack +crackajack +crackajacks +crackbrain +crackbrains +crackdown +crackdowns +cracker +crackerjack +crackerjacks +crackers +cracking +crackjaw +crackle +crackles +crackleware +crackling +cracklings +cracknel +cracknels +crackpot +crackpots +cracks +cracksman +cracovienne +cracoviennes +cradle +cradles +cradlesong +cradlesongs +cradling +cradlings +craft +craftiness +crafts +craftsman +craftsmanship +craftwork +crag +crag-and-tail +craggedness +cragginess +crags +cragsman +crake +crakes +cram +crambo +cramboes +crammer +crammers +cramoisies +cramoisy +cramp +crampon +crampons +cramps +crams +cran +cranage +cranages +cranberries +cranberry +crane +cranes +cranesbill +cranesbills +craniate +craniologist +craniology +craniometer +craniometers +craniometry +cranioscopist +cranioscopists +cranioscopy +craniotomies +craniotomy +cranium +craniums +crank +crankcase +crankcases +crankiness +crankle +crankles +crankness +crankpin +cranks +crankshaft +crankshafts +crannies +crannog +crannogs +cranny +cranreuch +cranreuchs +crans +crap +crapaud +crapauds +crape +crapehanger +crapehangers +crapes +craps +crapshooter +crapshooters +crapulence +craquelure +craquelures +crare +crares +crash +crash-landing +crash-landings +crashes +crasis +crassitude +crassness +cratch +cratches +crate +crater +craters +crates +craton +cratons +cravat +cravats +craven +cravenness +cravens +craver +cravers +craving +cravings +craw +crawfish +crawfishes +crawl +crawler +crawlers +crawling +crawlings +crawls +craws +cray +crayer +crayers +crayfish +crayfishes +crayon +crayons +crays +craze +crazes +crazies +craziness +crazy +creak +creakiness +creaking +creaks +cream +creamer +creameries +creamers +creamery +creaminess +creams +creamware +creance +creances +crease +creases +creatin +creatine +creatinine +creation +creationism +creationist +creationists +creations +creativeness +creativity +creator +creators +creatorship +creatorships +creature +creatures +credence +credences +credendum +credential +credentials +credenza +credibility +credibleness +credit +creditableness +crediting +creditor +creditors +credits +creditworthiness +credo +credos +credulities +credulity +credulousness +cree +creed +creeds +creek +creeks +creel +creels +creep +creeper +creepers +creepie +creepies +creepiness +creeping +creeps +creepy-crawlies +creepy-crawly +crees +creese +creeses +creesh +creeshes +cremaster +cremasters +cremation +cremationist +cremationists +cremations +cremator +crematories +crematorium +crematoriums +cremators +crematory +crenation +crenations +crenature +crenatures +crenel +crenelation +crenelations +crenellation +crenellations +crenelle +crenelles +crenels +creodont +creodonts +creole +creoles +creolization +creosol +creosote +creosotes +crepe +crepehanger +crepehangers +crepes +crepitation +crepitations +crepitus +crepituses +crepon +crepuscle +crepuscule +crepuscules +crescendo +crescendoes +crescendos +crescent +crescents +cresol +cress +cresses +cresset +cressets +crest +cresting +crests +cretaceous +cretic +cretics +cretin +cretinism +cretins +cretonne +crevasse +crevasses +crevice +crevices +crew +crewel +crewelist +crewelists +crewels +crewelwork +crewman +crews +crib +crib-biting +cribbage +cribber +cribbers +cribbing +cribellum +cribellums +cribs +cribwork +crick +cricket +cricketer +cricketers +crickets +cricks +cricoid +cricoids +crier +criers +cries +crime +crimes +criminal +criminalist +criminalistics +criminalists +criminality +criminals +crimination +criminations +criminologist +criminologists +criminology +crimmer +crimmers +crimp +crimper +crimpers +crimps +crimson +crimsons +crine +crines +cringe +cringer +cringers +cringes +cringle +cringles +crinite +crinites +crinkle +crinkles +crinkum-crankum +crinoid +crinoids +crinoline +crinolines +crinum +crinums +criollo +criollos +cripple +crippler +cripplers +cripples +crisis +crisp +crispation +crispations +crispbread +crispbreads +crisper +crispers +crispiness +crispness +crisps +crisscross +crisscrosses +crissum +crista +cristas +cristobalite +crit +criterion +criterions +crith +criths +critic +criticality +criticalness +criticaster +criticasters +criticiser +criticisers +criticism +criticisms +criticizer +criticizers +critics +critique +critiques +crits +critter +critters +croak +croaker +croakers +croakiness +croaking +croakings +croaks +crocein +croceins +crochet +crocheter +crocheters +crocheting +crochetings +crochets +crocidolite +crock +crockery +crocket +crockets +crocking +crocks +crocodile +crocodiles +crocodilian +crocodilians +crocoite +crocus +crocuses +croft +crofter +crofters +crofts +croissant +croissants +cromlech +cromlechs +cromorne +cromornes +crone +crones +cronies +crony +cronyism +crook +crookback +crookedness +crooks +croon +crooner +crooners +crooning +croonings +croons +crop +crop-dusting +cropland +cropper +croppers +crops +croquet +croquets +croquette +croquettes +crore +crores +crosier +crosiers +cross +cross-bedding +cross-buttock +cross-check +cross-checks +cross-country +cross-cousin +cross-crosslet +cross-dating +cross-division +cross-dresser +cross-dressers +cross-examination +cross-examinations +cross-examiner +cross-examiners +cross-eye +cross-fertilisation +cross-fertilization +cross-garnet +cross-index +cross-indexes +cross-pollination +cross-purpose +cross-purposes +cross-question +cross-questions +cross-reference +cross-references +cross-staff +cross-stitch +crossband +crossbanding +crossbar +crossbars +crossbeam +crossbeams +crossbench +crossbencher +crossbenchers +crossbenches +crossbill +crossbills +crossbones +crossbow +crossbowman +crossbows +crossbred +crossbreed +crossbreeding +crossbreeds +crosscut +crosscuts +crosse +crosses +crossette +crossettes +crossfire +crossfires +crosshatch +crosshatches +crossing +crossings +crossjack +crossjacks +crosslet +crosslets +crosslight +crosslights +crossness +crossopterygian +crossover +crossovers +crosspatch +crosspatches +crosspiece +crosspieces +crossroad +crossroads +crosstown +crosstree +crosstrees +crosswalk +crosswalks +crossway +crossways +crosswind +crosswinds +crossword +crosswords +crosswort +crossworts +crotal +crotalaria +crotalarias +crotals +crotch +crotches +crotchet +crotchets +croton +crotons +crottle +crottles +crouch +crouches +croup +croupade +croupades +croupe +croupes +croupier +croupiers +croupiness +croups +crow +crow's-foot +crow's-nest +crow-bill +crowboot +crowboots +crowd +crowding +crowds +crowfoot +crowfoots +crowing +crowkeeper +crown +crown-of-thorns +crowner +crowners +crownet +crownets +crowns +crownwork +crownworks +crows +croze +crozes +crozier +croziers +cru +cruces +crucian +crucians +crucible +crucibles +crucifer +crucifers +crucifier +crucifiers +crucifix +crucifixes +crucifixion +crucifixions +cruciform +cruck +crucks +crud +crude +crudeness +crudities +crudity +cruds +cruelness +cruelties +cruelty +cruet +cruet-stand +cruet-stands +cruets +cruise +cruiser +cruisers +cruises +cruiseway +cruiseways +cruller +crumb +crumble +crumbles +crumbliness +crumbs +crumhorn +crumhorns +crummies +crummy +crump +crumpet +crumpets +crumple +crumples +crumps +crunch +crunches +crunchiness +cruor +cruores +crupper +cruppers +crusade +crusader +crusaders +crusades +crusado +crusados +cruse +cruses +crush +crusher +crushers +crushes +crushing +crust +crustacean +crustaceans +crustiness +crusts +crutch +crutches +crux +cruxes +cruzado +cruzadoes +cruzados +cruzeiro +cruzeiros +crwth +crwths +cry +crying +cryings +crymotherapy +cryobiology +cryogen +cryogenics +cryogens +cryogeny +cryolite +cryometer +cryometers +cryonics +cryoscope +cryoscopes +cryoscopy +cryostat +cryostats +cryosurgery +cryotherapy +cryotron +cryotrons +crypt +cryptaesthesia +cryptanalysis +cryptanalyst +cryptanalysts +cryptococcosis +cryptogam +cryptogamist +cryptogamists +cryptogams +cryptogamy +cryptogram +cryptograms +cryptograph +cryptographer +cryptographers +cryptographist +cryptographists +cryptographs +cryptography +cryptologist +cryptologists +cryptology +cryptonym +cryptonyms +cryptorchid +cryptorchidism +crypts +crystal +crystallinity +crystallisation +crystallite +crystallization +crystallographer +crystallographers +crystallography +crystalloid +crystals +ctene +ctenes +ctenophoran +ctenophorans +ctenophore +ctenophores +cuadrilla +cub +cubage +cubages +cubature +cubatures +cubbies +cubbing +cubbings +cubby +cube +cubeb +cubebs +cubes +cubic +cubicalness +cubicle +cubicles +cubism +cubist +cubists +cubit +cubits +cubitus +cubituses +cuboid +cuboids +cubs +cuckold +cuckoldries +cuckoldry +cuckolds +cuckoo +cuckoo-spit +cuckoos +cucumber +cucumbers +cucurbit +cucurbits +cud +cudbear +cuddies +cuddle +cuddles +cuddling +cuddy +cudgel +cudgeller +cudgellers +cudgels +cuds +cudweed +cudweeds +cue +cueist +cueists +cues +cuesta +cuestas +cuff +cufflink +cufflinks +cuffs +cuif +cuifs +cuir-bouilli +cuirass +cuirasses +cuirassier +cuirassiers +cuisine +cuisines +cuisse +cuisses +cul-de-sac +cul-de-sacs +culch +culches +culet +culets +culex +culicid +culicids +cull +cullender +cullenders +culler +cullers +cullet +cullets +cullies +cullion +cullions +cullis +cullises +culls +cully +culm +culmination +culminations +culms +culottes +culpabilities +culpability +culpableness +culprit +culprits +cult +cultch +cultches +cultigen +cultigens +cultism +cultist +cultists +cultivar +cultivars +cultivation +cultivations +cultivator +cultivators +cults +culture +cultures +culturist +culturists +cultus +cultuses +culver +culverin +culverins +culvers +culvert +culverts +cumarin +cumber +cumberer +cumberers +cumberment +cumberments +cumbers +cumbersomeness +cumbrance +cumbrances +cumbrousness +cumin +cumins +cummer +cummerbund +cummerbunds +cummers +cummingtonite +cumquat +cumquats +cumshaw +cumshaws +cumulation +cumulations +cumulostratus +cumulus +cunctation +cunctations +cunctator +cunctators +cuneiform +cunjevoi +cunner +cunners +cunnilinctus +cunnilingus +cunning +cunningness +cunnings +cup +cupbearer +cupbearers +cupboard +cupboards +cupcake +cupcakes +cupel +cupellation +cupels +cupful +cupfuls +cupid +cupidity +cupids +cupola +cupolas +cuppa +cuppas +cupper +cuppers +cupping +cuppings +cuprammonium +cuprite +cups +cupule +cupules +cur +curability +curableness +curacies +curacy +curare +curarine +curassow +curassows +curate +curates +curateship +curateships +curative +curator +curators +curatorship +curatorships +curatrix +curatrixes +curb +curbing +curbs +curbside +curbsides +curbstone +curbstones +curch +curches +curculio +curculionidae +curculios +curcuma +curcumas +curd +curdiness +curdling +curds +cure +cure-all +cure-alls +curer +curers +cures +curettage +curettages +curette +curettement +curettes +curfew +curfews +curia +curias +curie +curies +curio +curios +curiosa +curiosities +curiosity +curiousness +curium +curl +curler +curlers +curlew +curlews +curlicue +curlicues +curliness +curling +curls +curmudgeon +curmudgeons +curn +curns +currach +currachs +currajong +currant +currants +currawong +currawongs +currencies +currency +current +currentness +currents +curricle +curricles +curriculum +curriculums +currie +currier +curriers +curries +currishness +curry +curs +curse +cursedness +curser +cursers +curses +cursive +cursor +cursores +cursoriness +cursors +curstness +curtailment +curtailments +curtain +curtain-raiser +curtains +curtal +curtals +curtana +curtanas +curtesy +curtilage +curtilages +curtness +curtsey +curtseys +curtsies +curtsy +curvature +curvatures +curve +curved +curves +curvet +curvets +curvilinearity +curving +cuscus +cuscuses +cusec +cusecs +cushat +cushats +cushaw +cushaws +cushion +cushioning +cushions +cusk +cusks +cusp +cuspid +cuspidor +cuspidores +cuspidors +cusps +cuss +cussedness +cusses +custard +custards +custodes +custodial +custodian +custodians +custodianship +custodianships +custodies +custody +custom +customaries +customariness +customary +customer +customers +customs +custos +cut +cut-and-cover +cut-and-thrust +cutaway +cutaways +cutback +cutbacks +cutch +cutcheries +cutcherries +cutcherry +cutchery +cutches +cuteness +cutes +cutey +cuteys +cuticle +cuticles +cutie +cuties +cutin +cutinisation +cutinization +cutis +cutises +cutlass +cutlasses +cutler +cutleries +cutlers +cutlery +cutlet +cutlets +cutline +cutlines +cutpurse +cutpurses +cuts +cutter +cutters +cutties +cutting +cuttings +cuttle +cuttlefish +cuttlefishes +cuttles +cutty +cutwork +cutworm +cutworms +cuvette +cuvettes +cwm +cwms +cyan +cyanamide +cyanamides +cyanate +cyanates +cyanide +cyanides +cyanine +cyanines +cyanite +cyanocobalamin +cyanogen +cyanometer +cyanometers +cyanosis +cyanotype +cyanotypes +cyans +cyathium +cyathiums +cyathus +cyathuses +cyberneticist +cyberneticists +cybernetics +cyberspace +cyborg +cyborgs +cycad +cycads +cyclamate +cyclamates +cyclamen +cyclamens +cycle +cycles +cyclicity +cycling +cyclist +cyclists +cyclo +cyclo-cross +cyclograph +cyclographs +cyclohexane +cycloid +cycloids +cyclometer +cyclometers +cyclone +cyclones +cyclonite +cyclopaedia +cyclopaedias +cyclopedia +cyclopedias +cyclopes +cycloplegia +cyclopropane +cyclops +cyclopses +cyclorama +cycloramas +cyclos +cycloserine +cyclosis +cyclostome +cyclostomes +cyclostyle +cyclostyles +cyclothymia +cyclotron +cyclotrons +cyder +cyders +cyesis +cygnet +cygnets +cylinder +cylinders +cylindrite +cylindroid +cylindroids +cylix +cyma +cymar +cymars +cymas +cymatium +cymatiums +cymbal +cymbalist +cymbalists +cymbalo +cymbaloes +cymbalom +cymbaloms +cymbalos +cymbals +cymbidium +cymbidiums +cyme +cymes +cymograph +cymographs +cymophane +cymophanes +cymotrichy +cynghanedd +cynic +cynicalness +cynicism +cynics +cynophobia +cynosure +cynosures +cypher +cyphers +cypress +cypresses +cyprian +cyprians +cyprinid +cyprinids +cyprinoid +cypripedia +cypripedium +cyproheptadine +cyprus +cypsela +cyst +cystectomies +cystectomy +cysteine +cysticercus +cystine +cystitis +cystocarp +cystocarps +cystocele +cystoceles +cystoid +cystoids +cystolith +cystoliths +cystoscope +cystoscopes +cystoscopy +cystostomy +cystotomies +cystotomy +cysts +cytisus +cytochemistry +cytochrome +cytochromes +cytogenesis +cytogeneticist +cytogenetics +cytologist +cytologists +cytology +cytolysis +cytomegalovirus +cyton +cytons +cytopathology +cytopenia +cytoplasm +cytoplasms +cytosine +cytosome +cytotoxin +cytotoxins +czar +czardas +czardases +czardom +czarevitch +czarevitches +czarevna +czarevnas +czarina +czarinas +czarism +czarist +czarists +czaritza +czaritzas +czars +dab +dabber +dabbers +dabbler +dabblers +dabchick +dabchicks +dabs +dabster +dabsters +dace +daces +dacha +dachas +dachshund +dachshunds +dacoit +dacoities +dacoits +dacoity +dactyl +dactylic +dactylogram +dactylograms +dactylography +dactylology +dactyls +dad +daddies +daddy +dado +dadoes +dados +dads +daemon +daemons +daff +daffadowndillies +daffadowndilly +daffing +daffings +daffodil +daffodillies +daffodilly +daffodils +daffs +daftness +dag +dagga +daggas +dagger +daggers +daglock +daglocks +dagoba +dagobas +dags +daguerreotype +daguerreotyper +daguerreotypers +daguerreotypes +daguerreotypist +daguerreotypy +dah +dahl +dahlia +dahlias +dahls +dahs +daikon +daikons +dailies +daily +daimon +daimons +dainties +daintiness +dainty +daiquiri +daiquiris +dairies +dairy +dairying +dairyings +dairymaid +dairymaids +dairyman +dairywoman +dais +daises +daisies +daisy +daisy-cutter +dak +dakoit +dakoits +daks +dal +dale +dales +dalesman +dalliance +dalliances +dallier +dalliers +dalmatic +dalmatics +dals +dam +damage +damageability +damages +daman +damans +damar +damars +damascene +damascenes +damask +damaskeening +damasks +dame +dame-school +dames +damfool +dammar +dammars +damn +damnability +damnableness +damnation +damnations +damned +damnedest +damns +damosel +damosels +damozel +damozels +damp +dampener +dampeners +dampening +damper +dampers +dampishness +dampness +damps +dams +damsel +damselfish +damselflies +damselfly +damsels +damson +damsons +dan +dance +dancer +dancers +dances +dancette +dancettes +dancing +dancings +dandelion +dandelions +dander +danders +dandies +dandiprat +dandiprats +dandler +dandlers +dandruff +dandy +dandy-brush +dandyism +danger +dangerousness +dangers +dangle +dangler +danglers +dangles +dangling +danglings +danio +danios +dankness +dans +danseur +danseurs +danseuse +danseuses +dap +daphne +daphnes +dapperness +dapple +dapple-grey +dapples +daps +daraf +darafs +dare +darer +darers +dares +darg +dargs +dari +daric +darics +daring +dariole +darioles +daris +dark +darkener +darkeners +darkening +darkness +darks +darling +darlings +darn +darnel +darnels +darner +darners +darning +darnings +darns +dart +dartboard +dartboards +darter +darters +darts +das +dash +dash-pot +dashboard +dashboards +dasheen +dasheens +dasher +dashers +dashes +dashiki +dashikis +dassie +dassies +dastard +dastardliness +dastards +dasyure +dasyures +data +database +databases +dataries +datary +date +dateline +datelines +dater +daters +dates +dative +datives +datolite +datum +datura +daturas +daub +daube +dauber +dauberies +daubers +daubery +daubing +daubings +daubs +daud +dauds +daughter +daughter-in-law +daughterliness +daughters +dauntlessness +dauphin +dauphine +dauphines +dauphiness +dauphinesses +dauphins +dautie +dauties +davenport +davenports +davit +davits +daw +dawdler +dawdlers +dawdling +dawk +dawks +dawn +dawning +dawnings +dawns +daws +dawtie +dawties +day +daybreak +daybreaks +daydream +daydreamer +daydreamers +daydreams +daylight +daylights +daymark +daymarks +days +daysman +dayspring +daysprings +daystar +daystars +daytime +daytimes +daze +dazes +dazzle +dazzler +dazzlers +dazzles +de-Stalinization +de-escalation +de-escalations +de-icer +de-icers +deacon +deaconess +deaconesses +deaconries +deaconry +deacons +deaconship +deaconships +deactivation +deactivations +dead +dead-nettle +deadener +deadeners +deadening +deadenings +deadhead +deadheads +deadlight +deadlights +deadline +deadlines +deadliness +deadlock +deadlocks +deadness +deaf +deaf-aid +deaf-aids +deaf-mute +deaf-mutism +deafening +deafenings +deafness +deal +dealer +dealers +dealership +dealerships +dealfish +dealfishes +dealing +dealings +deals +deambulatories +deambulatory +dean +deaneries +deanery +deans +deanship +deanships +dear +dearest +dearie +dearies +dearness +dears +dearth +dearths +deary +death +death's-head +death-roll +deathlessness +deathliness +deaths +deathsman +deb +debacle +debacles +debarkation +debarkations +debarment +debarments +debarring +debasedness +debasement +debasements +debaser +debasers +debate +debater +debaters +debates +debauch +debauchedness +debauchee +debauchees +debaucher +debaucheries +debauchers +debauchery +debauches +debauchment +debauchments +debenture +debentures +debilitation +debilitations +debility +debit +debitor +debitors +debits +debonairness +debouch +debouches +debouchment +debouchments +debriefing +debris +debs +debt +debtor +debtors +debts +debug +debugger +debuggers +debugs +debunking +debut +debuts +decade +decadence +decadences +decadent +decadents +decades +decaf +decafs +decagon +decagons +decagram +decagrams +decahedron +decahedrons +decal +decalcification +decalcomania +decalcomanias +decalescence +decalitre +decalitres +decalogue +decalogues +decals +decametre +decametres +decampment +decampments +decane +decantation +decantations +decanter +decanters +decapitation +decapitations +decapitator +decapitators +decapod +decapods +decarbonation +decarbonations +decarbonisation +decarbonization +decarbonize +decarbonizes +decarboxylase +decarburisation +decarburization +decare +decares +decastere +decasteres +decastyle +decastyles +decasyllable +decasyllables +decathlon +decathlons +decay +decays +decease +deceased +deceases +decedent +deceit +deceitfulness +deceits +deceivability +deceivableness +deceiver +deceivers +deceleration +decelerator +decelerators +decelerometer +decelerometers +decemvir +decemvirate +decemvirates +decemvirs +decencies +decency +decennaries +decennary +decennial +decennium +decenniums +decentralisation +decentralization +deception +deceptions +deceptiveness +decerebrate +decerebrates +decerebration +deciare +deciares +decibel +decibels +decider +deciders +deciding +decidua +deciduas +deciduousness +decigram +decigrams +decile +deciles +deciliter +deciliters +decilitre +decilitres +decillion +decillions +decillionth +decillionths +decimal +decimalisation +decimalisations +decimalization +decimalizations +decimals +decimation +decimations +decimator +decimators +decimeter +decimeters +decimetre +decimetres +decipherability +decipherer +decipherers +decipherment +decipherments +decision +decisions +decisiveness +decistere +decisteres +deck +deck-house +decker +deckers +decking +deckle +deckles +decks +declaimer +declaimers +declamation +declamations +declarant +declarants +declaration +declarations +declarative +declarator +declarators +declarer +declarers +declassification +declassifications +declension +declensions +declination +declinations +declinature +declinatures +decline +decliner +decliners +declines +declinometer +declinometers +declivities +declivity +decoction +decoctions +decoder +decoders +decoding +decollation +decollations +decollator +decolonisation +decolonisations +decolonization +decolonizations +decolorant +decolorants +decoloration +decolorations +decolorisation +decolorisations +decolorization +decolorizations +decolourisation +decolourization +decolourizations +decomposability +decomposer +decomposers +decomposition +decompositions +decompressing +decompression +decompressions +decongestant +decongestants +deconsecration +deconsecrations +deconstruction +decontamination +decontaminator +decontaminators +decor +decoration +decorations +decorativeness +decorator +decorators +decorousness +decors +decortication +decorum +decorums +decoupage +decoupling +decoy +decoys +decrease +decreases +decree +decrees +decreet +decreets +decrement +decrements +decrepitation +decrepitude +decrescendo +decrescendos +decretal +decretals +decretist +decretists +decrial +decrials +decrier +decryption +decryptions +decubitus +decubituses +decumbence +decumbences +decumbencies +decumbency +decuple +decuples +decuries +decurion +decurions +decurrencies +decurrency +decury +decussation +decussations +dedans +dedication +dedications +dedicator +dedicators +dedifferentiation +deducibility +deducibleness +deductibility +deductible +deduction +deductions +dee +deed +deeds +deejay +deejays +deemster +deemsters +deep +deep-sea +deepening +deepness +deeps +deer +deerberries +deerberry +deerskin +deerskins +deerstalker +deerstalkers +deerstalking +dees +def +defacement +defacements +defacer +defacers +defalcation +defalcations +defalcator +defalcators +defamation +defamations +defamer +defamers +default +defaulter +defaulters +defaults +defeasance +defeasances +defeasibility +defeasibleness +defeat +defeated +defeater +defeaters +defeatism +defeatist +defeatists +defeats +defeature +defecation +defecations +defect +defectibility +defection +defections +defectiveness +defector +defectors +defects +defence +defencelessness +defences +defendant +defendants +defender +defenders +defenestration +defenestrations +defense +defenselessness +defenseman +defenses +defensibility +defensive +defensiveness +deferable +deference +deferences +deferent +deferents +deferment +deferments +deferrable +deferral +deferrals +deferrer +deferrers +defervescence +defiance +defiances +defiantness +defibrillation +defibrillator +defibrillators +deficience +deficiences +deficiencies +deficiency +deficit +deficits +defier +defiers +defilade +defilades +defile +defilement +defilements +defiler +defilers +defiles +definabilities +definability +definer +definers +definiendum +definiens +defining +definiteness +definition +definitions +definitive +definitiveness +definitives +definitude +deflagrability +deflagration +deflagrations +deflation +deflationist +deflationists +deflations +deflator +deflators +deflection +deflections +deflector +deflectors +deflexion +deflexions +defloration +deflorations +deflowerer +deflowerers +defluxion +defoliant +defoliants +defoliation +defoliations +defoliator +defoliators +deforcement +deforcements +deforciant +deforciants +deforest +deforestation +deforests +deformability +deformation +deformations +deformedness +deformer +deformers +deformities +deformity +defraudation +defraudations +defrauder +defrauders +defraudment +defraudments +defrayal +defrayals +defrayer +defrayers +defrayment +defrayments +defroster +defrosters +deftness +defusing +degaussing +degeneracies +degeneracy +degenerate +degenerateness +degenerates +degeneration +degenerations +deglutination +deglutinations +deglutition +deglutitions +degradation +degradations +degree +degrees +degression +degressions +degustation +degustations +dehiscence +dehiscences +dehorner +dehorners +dehortation +dehortations +dehortative +dehortatory +dehorter +dehorters +dehumanisation +dehumanization +dehumidification +dehumidifier +dehumidifiers +dehydration +dehydrations +dehydrator +dehydrators +deicide +deicides +deictic +deictics +deification +deifications +deifier +deifiers +deil +deils +deipnosophist +deipnosophists +deism +deist +deists +deities +deity +deixis +dejectedness +dejection +dejections +dekko +dekkos +del +delaine +delamination +delation +delator +delators +delay +delayer +delayers +delays +dele +delectability +delectableness +delectation +delectations +delegacies +delegacy +delegate +delegates +delegating +delegation +delegations +deleteriousness +deletion +deletions +delf +delfs +delft +deli +deliberateness +deliberation +deliberations +deliberativeness +deliberator +deliberators +delicacies +delicacy +delicate +delicateness +delicates +delicatessen +delicatessens +delicious +deliciousness +delict +delicts +delight +delightedness +delightfulness +delights +delimitation +delimitations +delimitative +delineation +delineations +delineator +delineators +delineavit +delinquencies +delinquency +delinquent +delinquents +deliquescence +deliration +delirations +deliriousness +delirium +deliriums +delis +delitescence +deliverance +deliverances +deliverer +deliverers +deliveries +delivery +dell +dells +delphinium +delphiniums +dels +delta +deltas +deltiology +deltoid +delubrum +delubrums +deluder +deluders +deluge +deluges +delusion +delusions +delusiveness +delver +delvers +demagnetisation +demagnetiser +demagnetisers +demagnetization +demagnetize +demagnetizer +demagnetizers +demagnetizes +demagog +demagogs +demagogue +demagoguery +demagogues +demagoguism +demagogy +demand +demandant +demandants +demander +demanders +demands +demantoid +demarcation +demarcations +dematerialisation +dematerialization +deme +demeanor +demeanors +demeanour +demeanours +dementedness +dementia +dementias +demerara +demerit +demerits +demes +demesne +demesnes +demi-cannon +demi-cannons +demi-culverin +demi-pension +demies +demigod +demigods +demijohn +demijohns +demilitarisation +demilitarization +demineralization +demipique +demipiques +demirep +demireps +demise +demises +demission +demissions +demister +demisters +demitasse +demitasses +demiurge +demiurges +demivolt +demivoltes +demivolts +demo +demob +demobilisation +demobilisations +demobilization +demobilizations +demobs +democracies +democracy +democrat +democratisation +democratization +democrats +demodulation +demodulations +demodulator +demographer +demographers +demographic +demographics +demography +demoiselle +demoiselles +demolisher +demolishers +demolishing +demolishment +demolishments +demolition +demolitions +demon +demonetisation +demonetisations +demonetization +demonetizations +demoniac +demoniacs +demonism +demonist +demonists +demonolater +demonolaters +demonolatry +demonologies +demonologist +demonologists +demonology +demons +demonstrability +demonstrableness +demonstration +demonstrations +demonstrative +demonstrativeness +demonstrator +demonstrators +demoralisation +demoralisations +demoralization +demos +demotic +demotion +demotions +dempster +dempsters +demulcent +demulcents +demulsification +demulsifier +demulsifiers +demur +demureness +demurrage +demurrages +demurral +demurrals +demurrer +demurrers +demurs +demy +demythologisation +demythologisations +demythologization +demythologizations +den +denarius +denationalisation +denationalization +denaturalisation +denaturalization +denaturant +denaturants +denazification +dendrite +dendrites +dendrobium +dendrobiums +dendrochronologist +dendrochronologists +dendrochronology +dendrologist +dendrologists +dendrology +dendron +dendrons +dene +denegation +denegations +denes +dengue +denial +denials +denier +deniers +denigration +denigrations +denigrator +denigrators +denim +denims +denitration +denitrations +denitrification +denitrificator +denitrificators +denization +denizations +denizen +denizens +denizenship +denomination +denominationalism +denominationalist +denominations +denominator +denominators +denotation +denotations +denotement +denouement +denouements +denouncement +denouncements +denouncer +denouncers +dens +denseness +densifier +densimeter +densimeters +densimetry +densities +densitometer +densitometers +densitometry +density +dent +dental +dentalium +dentaliums +dentals +dentaria +dentarias +dentaries +dentary +dentation +dentations +dentelle +dentex +dentexes +denticle +denticles +denticulation +dentifrice +dentifrices +dentil +dentilingual +dentils +dentin +dentine +dentist +dentistry +dentists +dentition +dentitions +dents +denture +dentures +denudation +denudations +denunciation +denunciations +denunciator +denunciators +deodand +deodands +deodar +deodars +deodorant +deodorants +deodorisation +deodorisations +deodoriser +deodorisers +deodorization +deodorizations +deodorizer +deodorizers +deontologist +deontologists +deontology +deoxidisation +deoxidisations +deoxidiser +deoxidisers +deoxidization +deoxidizations +deoxidizer +deoxidizers +deoxyribose +departed +departer +departers +department +departmentalisation +departmentalism +departmentalization +departments +departure +departures +dependability +dependance +dependant +dependants +dependence +dependences +dependencies +dependency +dependent +dependents +depersonalization +depicter +depicters +depicting +depiction +depictions +depictor +depictors +depilation +depilations +depilator +depilatories +depilators +depilatory +depletion +depletions +deplorability +deplorableness +deploration +deplorations +deployment +deployments +deplumation +depolarisation +depolarisations +depolarization +depolarizations +depolymerization +deponent +deponents +depopulation +depopulations +depopulator +depopulators +deportation +deportations +deportee +deportees +deportment +deportments +deposal +deposals +deposer +deposers +deposit +depositaries +depositary +deposition +depositions +depositor +depositories +depositors +depository +deposits +depot +depots +depravation +depravations +depravedness +depravities +depravity +deprecation +deprecations +deprecator +deprecators +depreciation +depreciations +depreciator +depreciators +depredation +depredations +depredator +depredators +depressant +depressants +depression +depressions +depressive +depressives +depressor +depressors +deprival +deprivals +deprivation +deprivations +depside +depsides +depth +depths +depuration +depurations +depurative +depuratives +depurator +depurators +deputation +deputations +deputies +deputy +deracination +deracinations +derail +derailment +derailments +derails +derangement +derangements +deray +derbies +derby +deregulating +deregulation +deregulations +derelict +dereliction +derelictions +derelicts +derequisition +derequisitions +derider +deriders +derision +derisions +derisiveness +derivation +derivations +derivative +derivatives +deriving +derma +dermabrasion +dermas +dermatitis +dermatogen +dermatogens +dermatographia +dermatologist +dermatologists +dermatology +dermatome +dermatophyte +dermatophytes +dermatoplasty +dermatosis +dermis +dermises +dermoid +derogation +derogations +derogatoriness +derrick +derricks +derring-do +derringer +derringers +derris +derrises +derry +derv +dervish +dervishes +desalination +desalinisation +desalinization +descant +descants +descendant +descendants +descendent +descender +descenders +descension +descensions +descent +descents +describer +describers +description +descriptions +descriptiveness +descriptivism +desecrater +desecraters +desecration +desecrations +desecrator +desecrators +desegregation +desegregations +desensitisation +desensitisations +desensitization +desensitizations +desensitizer +desensitizers +desert +deserter +deserters +desertion +desertions +deserts +deservedness +deserver +deservers +deserving +desiccant +desiccants +desiccation +desiccations +desiccator +desiccators +desideration +desiderative +desideratum +design +designation +designations +designator +designators +designer +designers +designing +designment +designments +designs +desinence +desinences +desirability +desirable +desirableness +desire +desirer +desirers +desires +desirousness +desistance +desistances +desistence +desistences +desk +desks +desktop +desman +desmans +desmid +desmids +desmodium +desmodiums +desmoid +desolateness +desolater +desolaters +desolation +desolations +desolator +desolators +desorption +desorptions +despair +despairs +despatch +despatches +desperado +desperadoes +desperados +desperate +desperateness +desperation +despicability +despicableness +despisal +despiser +despisers +despising +despite +despitefulness +despites +despoiler +despoilers +despoilment +despoliation +despond +despondence +despondency +desponds +despot +despoticalness +despotism +despotisms +despots +despumation +despumations +desquamation +dessert +desserts +dessertspoon +dessertspoonful +dessertspoonfuls +dessertspoons +dessiatine +dessiatines +destination +destinations +destinies +destiny +destitution +destrier +destriers +destroyer +destroyers +destruct +destructibility +destructibleness +destruction +destructionist +destructionists +destructions +destructiveness +destructivities +destructivity +destructor +destructors +destructs +desuetude +desuetudes +desulphuration +desulphurations +desultoriness +detachedness +detachment +detachments +detail +detailing +details +detainee +detainees +detainer +detainers +detainment +detainments +detecting +detection +detections +detective +detectives +detector +detectors +detent +detention +detentions +detents +detergence +detergency +detergent +detergents +deterioration +deteriorationist +deteriorations +determent +determents +determinability +determinableness +determinant +determinants +determination +determinations +determinative +determinatives +determiner +determiners +determinism +determinist +determinists +deterrence +deterrences +deterrent +deterrents +detersive +detersives +detestability +detestableness +detestation +detestations +detester +detesters +dethronement +dethronements +dethroner +dethroners +detinue +detinues +detonation +detonations +detonator +detonators +detour +detours +detox +detoxicant +detoxicants +detoxicate +detoxicates +detoxication +detoxications +detoxification +detoxifications +detraction +detractions +detractor +detractors +detrainment +detrainments +detribalisation +detribalization +detriment +detriments +detrition +detritions +detritus +detruncation +detruncations +detrusion +detumescence +deuce +deuce-ace +deuces +deuteragonist +deuteranope +deuteranopes +deuteranopia +deuteride +deuterium +deuterogamist +deuterogamists +deuterogamy +deuteron +deuterons +deuton +deutons +deutoplasm +deutoplasms +deutzia +deutzias +deva +devaluation +devaluations +devanagari +devas +devastation +devastations +devastator +devastators +devel +developer +developers +developing +development +developments +devels +deviance +deviances +deviant +deviants +deviate +deviates +deviation +deviationism +deviationist +deviationists +deviations +deviator +deviators +device +devices +devil +devil-worship +devilish +devilishness +devilkin +devilkins +devilment +devilments +devilries +devilry +devils +devils-on-horseback +deviltry +deviousness +devisal +devisals +devise +devisee +devisees +deviser +devisers +devises +devising +devisor +devisors +devitalisation +devitalisations +devitalization +devitalizations +devitrification +devoir +devoirs +devolution +devolutions +devolvement +devolvements +devotedness +devotee +devotees +devotement +devotion +devotional +devotionality +devotionalness +devotions +devourer +devourers +devoutness +dew +dew-worm +dew-worms +dewan +dewans +dewar +dewars +dewiness +dewlap +dewlaps +dews +dexter +dexterities +dexterity +dexterousness +dexters +dextrality +dextran +dextrin +dextroamphetamine +dextrocardia +dextrorotation +dextrose +dextrousness +dey +deys +dhak +dhaks +dhal +dhals +dharma +dharmas +dharna +dharnas +dhobi +dhobis +dhole +dholes +dhoolies +dhooly +dhoti +dhotis +dhow +dhows +dhurrie +diabase +diabases +diabetes +diabetic +diabetics +diablerie +diableries +diablery +diabolism +diabolisms +diabolist +diabolo +diacaustic +diacetylmorphine +diachylon +diachylons +diacid +diaconate +diaconates +diaconicon +diaconicons +diacritic +diacritics +diadem +diadems +diaeresis +diagenesis +diageotropism +diaglyph +diaglyphs +diagnosing +diagnosis +diagnostic +diagnostician +diagnosticians +diagnostics +diagonal +diagonals +diagram +diagrams +diagraph +diagraphs +diakinesis +dial +dialect +dialectic +dialectician +dialecticians +dialecticism +dialectics +dialectologist +dialectologists +dialectology +dialects +dialing +diallage +diallages +dialler +diallers +dialog +dialogist +dialogists +dialogite +dialogue +dialogues +dials +dialyser +dialysers +dialysis +dialyzer +dialyzers +diamagnet +diamagnetism +diamagnets +diameter +diameters +diamond +diamondback +diamonds +diamorphine +dianetics +dianthus +dianthuses +diapason +diapasons +diapause +diapauses +diapedesis +diapente +diapentes +diaper +diapers +diaphaneity +diaphanometer +diaphanometers +diaphanousness +diaphone +diaphones +diaphoresis +diaphoretic +diaphoretics +diaphototropism +diaphragm +diaphragms +diaphysis +diapir +diapirs +diapophysis +diapositive +diarchies +diarchy +diaries +diarist +diarists +diarrhea +diarrhoea +diarthrosis +diary +diascope +diascopes +diaspora +diasporas +diaspore +diastase +diastasis +diastema +diaster +diastole +diastoles +diastrophism +diastyle +diastyles +diatessaron +diatessarons +diathermancy +diathermy +diathesis +diatom +diatomite +diatoms +diatribe +diatribes +diatropism +diazepam +diazo +diazoes +diazonium +diazos +dibber +dibbers +dibble +dibbles +dibranchiate +dicast +dicasteries +dicastery +dicasts +dice +dicentra +dicentras +dicer +dicers +dices +dichasium +dichlorodiphenyltrichloroethane +dichogamies +dichogamy +dichotomies +dichotomist +dichotomists +dichotomy +dichroism +dichroite +dichromat +dichromate +dichromatism +dichromats +dichroscope +dichroscopes +dicing +dicings +dick +dickcissel +dickcissels +dickens +dickenses +dicker +dickers +dickey +dickeys +dickie +dickies +dicks +dicky +diclinism +dicot +dicots +dicotyledon +dicotyledons +dicrotism +dict +dicta +dictaphone +dictaphones +dictate +dictates +dictation +dictations +dictator +dictators +dictatorship +dictatorships +diction +dictionaries +dictionary +dictions +dictum +dictums +dicynodont +dicynodonts +didacticism +didactics +didapper +didappers +diddler +diddlers +didgeridoo +didgeridoos +didicoy +didicoys +didn't +dido +didoes +didos +didrachm +didrachms +didymium +die +die-hard +die-hards +dieback +diebacks +dieldrin +dielectric +dielectrics +diencephalon +diencephalons +diene +dienes +dieresis +dies +diesel +diesel-electric +diesel-hydraulic +dieselization +diesels +dieses +diesis +diestrus +diet +dietary +dieter +dieters +dietetics +dietician +dieticians +dieting +dietitian +dietitians +diets +difference +differences +differentia +differential +differentials +differentiation +differentiations +differentiator +differentiators +difficulties +difficulty +diffidence +diffraction +diffractions +diffractometer +diffractometers +diffusedness +diffuseness +diffuser +diffusers +diffusibility +diffusion +diffusions +diffusiveness +diffusivity +dig +digamies +digamma +digammas +digamy +digastric +digest +digester +digesters +digestibility +digestif +digestion +digestions +digestive +digestives +digests +digger +diggers +digging +diggings +digit +digital +digitalin +digitalisation +digitalization +digitals +digitation +digitations +digitigrade +digitisation +digitization +digitizer +digitizers +digits +diglot +diglots +diglyph +diglyphs +dignitaries +dignitary +dignities +dignity +digraph +digraphs +digression +digressions +digs +dihedral +dihedrals +dihedron +dihedrons +dihybrid +dihybrids +dik-dik +dik-diks +dika +dikas +dike +diker +dikers +dikes +dikkop +dikkops +diktat +diktats +dilaceration +dilapidation +dilapidator +dilapidators +dilatability +dilatancy +dilatant +dilatation +dilatations +dilater +dilaters +dilation +dilations +dilator +dilatoriness +dilators +dildo +dildoes +dildos +dilemma +dilemmas +dilettante +dilettantes +dilettantism +diligence +diligences +dill +dillies +dills +dilly +diluent +diluents +diluteness +diluting +dilution +dilutions +diluvium +diluviums +dim-out +dime +dimension +dimensions +dimer +dimerism +dimers +dimes +dimeter +dimeters +dimethyl +dimidiation +dimidiations +diminuendo +diminuendoes +diminuendos +diminution +diminutions +diminutive +diminutiveness +diminutives +dimity +dimmer +dimmers +dimness +dimorph +dimorphism +dimorphs +dimple +dimples +dimwit +dimwits +din +dinanderie +dinar +dinars +dindle +dindles +diner +diners +dines +dinette +dinettes +ding +ding-dong +ding-dongs +dingbat +dingbats +dinge +dinges +dingey +dingeys +dinghies +dinghy +dinginess +dingle +dingles +dingo +dingoes +dings +dingus +dinguses +dining +dinitrobenzene +dinmont +dinmonts +dinner +dinner-dance +dinner-dances +dinners +dinoflagellate +dinoflagellates +dinosaur +dinosaurs +dinothere +dinotheres +dins +dint +dints +diocesan +diocesans +diocese +dioceses +diode +diodes +dioestrus +dioestruses +diopside +dioptase +diopter +diopters +dioptre +dioptres +dioptrics +diorama +dioramas +diorite +diorthosis +diosgenin +dioxan +dioxane +dioxide +dioxides +dioxin +dip +dipeptide +diphenyl +diphtheria +diphthong +diphthongs +diplegia +diplococcus +diploe +diploes +diploid +diploma +diplomacies +diplomacy +diplomas +diplomat +diplomate +diplomates +diplomatics +diplomatist +diplomatists +diplomats +diplont +diplonts +diplopia +dipnoan +dipnoans +dipodidae +dipodies +dipody +dipole +dipoles +dipper +dippers +diprotodont +diprotodonts +dips +dipso +dipsomania +dipsomaniac +dipsomaniacs +dipsos +dipteran +dipterans +dipterocarp +dipterocarpaceae +dipterocarps +dipteros +dipteroses +diptych +diptychs +direction +directions +directive +directives +directivity +directness +director +director-general +directorate +directorates +directories +directors +directorship +directorships +directory +directress +directresses +directrix +directrixes +direfulness +direness +dirge +dirges +dirham +dirhams +dirhem +dirhems +dirigible +dirigibles +dirk +dirks +dirndl +dirndls +dirt +dirtiness +dirts +dirtying +disabilities +disability +disabled +disablement +disablements +disaccharide +disaccharides +disaccord +disadvantage +disadvantageousness +disadvantages +disaffectedness +disaffection +disaffiliation +disaffiliations +disaffirmance +disaffirmation +disaffirmations +disafforestation +disafforestment +disagreeability +disagreeableness +disagreement +disagreements +disallowance +disallowances +disannuller +disannullers +disannulment +disannulments +disappearance +disappearances +disappearing +disappointing +disappointment +disappointments +disapprobation +disapprobations +disapproval +disapprovals +disarmament +disarmer +disarmers +disarming +disarrangement +disarrangements +disarray +disarrays +disarticulation +disassembly +disassociation +disassociations +disaster +disasters +disavowal +disavowals +disbandment +disbandments +disbarment +disbarments +disbelief +disbeliefs +disbeliever +disbelievers +disbursal +disbursals +disbursement +disbursements +disc +discant +discants +discard +discarding +discards +disceptation +disceptations +discerner +discerners +discernment +discharge +discharger +dischargers +discharges +disciple +disciples +discipleship +discipleships +disciplinant +disciplinants +disciplinarian +disciplinarians +discipline +discipliner +discipliners +disciplines +discission +discissions +disclaimer +disclaimers +disclamation +disclamations +disclosure +disclosures +disco +discobolus +discographer +discographers +discographies +discography +discoid +discoloration +discolorations +discolouration +discolourations +discomfit +discomfited +discomfits +discomfiture +discomfitures +discomfort +discomforts +discommodities +discommodity +discomposure +discomycete +discomycetes +disconcertion +disconcertions +disconcertment +disconcertments +disconformities +disconformity +disconnectedness +disconnection +disconnections +disconsolateness +disconsolation +discontent +discontentedness +discontentment +discontentments +discontents +discontinuance +discontinuances +discontinuation +discontinuities +discontinuity +discophile +discophiles +discord +discordance +discordances +discordancies +discordancy +discords +discos +discotheque +discotheques +discount +discountenance +discountenances +discounter +discounters +discounts +discouragement +discouragements +discourse +discourser +discourses +discourteousness +discourtesies +discourtesy +discoverer +discoverers +discoveries +discoverture +discovertures +discovery +discredit +discredits +discreetness +discrepancies +discrepancy +discreteness +discretion +discretions +discriminant +discriminants +discrimination +discriminations +discriminator +discriminators +discs +discursion +discursions +discursiveness +discus +discuses +discuss +discussion +discussions +discutient +disdain +disdainfulness +disdains +disease +diseasedness +diseases +disembarkation +disembarkations +disembarkment +disembarkments +disembarrassment +disembarrassments +disembodiment +disembodiments +disemboguement +disemboguements +disembowelment +disembowelments +disenchanter +disenchanters +disenchantment +disenchantments +disendowment +disenfranchisement +disengagedness +disengagement +disengagements +disentail +disentails +disentanglement +disentanglements +disenthrallment +disenthralment +disenthralments +disentrancement +disequilibrium +disestablishment +disesteem +disesteems +diseur +diseurs +diseuse +diseuses +disfavor +disfavors +disfavour +disfavourer +disfavourers +disfavours +disfigurement +disfigurements +disfranchisement +disfranchisements +disfurnishment +disgorgement +disgorgements +disgrace +disgracefulness +disgracer +disgracers +disgraces +disgregation +disgruntlement +disguise +disguisedness +disguiser +disguisers +disguises +disgust +disgustedness +disgustingness +disgusts +dish +dishabille +dishabilles +disharmonies +disharmony +disherison +disheritor +disheritors +dishes +dishevelment +dishful +dishfuls +dishonesties +dishonesty +dishonor +dishonorableness +dishonorer +dishonorers +dishonors +dishonour +dishonourableness +dishonourer +dishonourers +dishonours +dishpan +dishpans +dishwasher +dishwashers +disillusion +disillusionment +disillusionments +disillusions +disimprisonment +disincentive +disincentives +disinclination +disinclinations +disinfectant +disinfectants +disinfection +disinfections +disinfector +disinfectors +disinfestation +disinfestations +disinflation +disingenuousness +disinheritance +disinheritances +disinhibition +disinhibitions +disintegration +disintegrations +disintegrator +disintegrators +disinterest +disinterestedness +disinterment +disinterments +disinvestment +disinvestments +disjection +disjections +disjointedness +disjunct +disjunction +disjunctions +disjunctive +disjunctives +disjuncture +disjunctures +disjune +disjunes +disk +diskette +diskettes +disks +dislike +dislikes +dislocation +dislocations +dislodgement +dislodgements +dislodgment +dislodgments +disloyalties +disloyalty +dismality +dismalness +dismantlement +dismantler +dismantlers +dismantling +dismastment +dismastments +dismay +dismayedness +dismays +dismemberment +dismemberments +dismissal +dismissals +dismount +dismounts +disobedience +disobligingness +disoperation +disoperations +disorder +disorderliness +disorders +disorganization +disorientation +disorientations +disowning +disownment +disownments +disparagement +disparagements +disparager +disparagers +disparate +disparateness +disparates +disparities +disparity +dispassion +dispassionateness +dispatch +dispatcher +dispatchers +dispatches +dispensability +dispensableness +dispensaries +dispensary +dispensation +dispensations +dispensator +dispensatories +dispensators +dispensatory +dispenser +dispensers +dispensing +dispersal +dispersals +dispersant +dispersants +disperser +dispersers +dispersion +dispersions +dispersoid +dispersoids +dispiritedness +dispiteousness +displacement +displacements +display +displayer +displayers +displays +displeasingness +displeasure +displeasures +disport +disports +disposability +disposable +disposableness +disposal +disposals +dispose +disposer +disposers +disposes +disposition +dispositions +dispossession +dispossessions +dispossessor +dispossessors +disposure +disposures +dispraise +dispraiser +dispraisers +dispraises +disproof +disproofs +disproportion +disproportionableness +disproportionateness +disproportions +disproving +disputability +disputableness +disputant +disputants +disputation +disputations +disputatiousness +dispute +disputer +disputers +disputes +disqualification +disqualifications +disqualifying +disquiet +disquiets +disquietude +disquisition +disquisitions +disregard +disregards +disrelish +disrelishes +disrepair +disreputability +disreputableness +disreputation +disrepute +disrespect +disrespectfulness +disrupter +disrupters +disruption +disruptions +disruptor +disruptors +dissatisfaction +dissatisfactoriness +dissection +dissections +dissector +dissectors +disseisin +disseisins +disseisor +disseisors +disseizin +disseizins +disseizor +disseizors +dissemblance +dissemblances +dissembler +dissemblers +dissembling +dissemination +disseminations +disseminator +disseminators +disseminule +disseminules +dissension +dissensions +dissent +dissenter +dissenters +dissentient +dissentients +dissents +dissepiment +dissepiments +dissertation +dissertations +dissertator +dissertators +disservice +disservices +disseverance +disseverances +disseveration +disseverations +disseverment +disseverments +dissidence +dissidences +dissident +dissidents +dissilience +dissimilarities +dissimilarity +dissimilation +dissimilations +dissimilitude +dissimulation +dissimulations +dissimulator +dissimulators +dissipation +dissipations +dissociability +dissociableness +dissociality +dissociation +dissociations +dissolubility +dissolubleness +dissoluteness +dissolution +dissolutions +dissolvability +dissolvableness +dissolve +dissolvent +dissolvents +dissolves +dissonance +dissonances +dissonancies +dissonancy +dissuader +dissuaders +dissuasion +dissuasions +dissyllable +dissyllables +dissymmetry +distaff +distaffs +distance +distances +distantness +distaste +distastefulness +distastes +distemper +distemperature +distemperatures +distempers +distensibility +distension +distensions +distention +distentions +distich +distichs +distilland +distillands +distillate +distillates +distillation +distillations +distiller +distilleries +distillers +distillery +distinction +distinctions +distinctiveness +distinctness +distinguisher +distinguishers +distinguishment +distortion +distortions +distractedness +distractibility +distraction +distractions +distrail +distrails +distrainee +distrainees +distrainer +distrainers +distrainment +distrainments +distrainor +distrainors +distraint +distraints +distress +distresses +distressfulness +distributaries +distributary +distributee +distributees +distributer +distributers +distribution +distributions +distributive +distributiveness +distributor +distributors +district +districts +distringas +distringases +distrust +distruster +distrusters +distrustfulness +distrusts +disturbance +disturbances +disturber +disturbers +disulfiram +disulphate +disulphates +disulphide +disulphides +disunion +disunionist +disunionists +disunions +disunities +disunity +disuse +disuses +disutilities +disutility +disvalue +disvalues +disyllabism +disyllable +disyllables +dit +dita +ditas +ditch +ditcher +ditchers +ditches +ditheism +ditheist +ditheists +dither +dithering +dithers +dithionate +dithionates +dithyramb +dithyrambs +ditriglyph +ditriglyphs +dits +dittander +dittanders +dittanies +dittany +ditties +ditto +dittography +dittos +ditty +diuresis +diuretic +diuretics +diurnal +diurnals +div +diva +divagation +divagations +divalent +divalents +divan +divans +divarication +divarications +divas +dive +dive-bombing +dived +diver +divergence +divergences +divergencies +divergency +divers +diverseness +diversification +diversion +diversionist +diversionists +diversions +diversities +diversity +diverticulitis +diverticulosis +diverticulum +divertimento +divertimentos +divertissement +divertissements +dives +divestiture +divi +divide +dividend +dividends +divider +dividers +divides +divies +divination +divinations +divine +divineness +diviner +diviners +divines +diving +divings +divinities +divinity +divisibilities +divisibility +divisibleness +division +divisionism +divisions +divisiveness +divisor +divisors +divorce +divorcement +divorcements +divorcer +divorcers +divorces +divot +divots +divs +divulgation +divulgations +divulgement +divulgence +divulgences +divulsion +divulsions +divvies +divvy +diwan +diwans +dixie +dixies +dixy +dizziness +djebel +djebels +djellabah +djellabahs +djibbah +djibbahs +djinni +do-all +do-gooder +do-gooders +do-goodism +do-it-yourself +do-it-yourselfer +do-it-yourselfers +do-nothing +do-nothingism +doab +doabs +doater +doaters +dobber +dobber-in +dobbers +dobbies +dobbin +dobbins +dobby +dobra +dobras +doc +docent +docents +docility +dock +dockage +dockages +docker +dockers +docket +dockets +docking +dockings +dockland +docks +dockside +docksides +dockyard +dockyards +docs +doctor +doctorate +doctorates +doctors +doctorship +doctorships +doctrinaire +doctrinaires +doctrinairism +doctrine +doctrines +docudrama +docudramas +document +documentaries +documentary +documentation +documentations +documents +dod +dodder +dodderer +dodderers +dodders +doddle +doddles +dodecagon +dodecagons +dodecahedron +dodecahedrons +dodecaphonism +dodecaphonist +dodecaphonists +dodecasyllabic +dodecasyllable +dodecasyllables +dodge +dodgem +dodgems +dodger +dodgers +dodges +dodging +dodo +dodoes +dodos +dods +doe +doek +doeks +doer +doers +does +doesn't +doffer +doffers +dog +dog's-ear +dog's-tongue +dog-catcher +dog-catchers +dog-ear +dog-eat-dog +dog-end +dog-ends +dogbane +dogbanes +dogberries +dogberry +dogcart +dogcarts +doge +doges +dogeship +dogfish +dogfishes +doggedness +dogger +doggerel +doggeries +doggers +doggery +doggie +doggies +doggishness +doggy +dogie +dogma +dogman +dogmas +dogmatics +dogmatiser +dogmatisers +dogmatism +dogmatist +dogmatists +dogmatizer +dogmatizers +dogs +dogshore +dogshores +dogsled +dogsleds +dogtooth +dogtrot +dogtrots +dogvane +dogvanes +dogwood +dogwoods +dogy +doh +dohs +doilies +doily +doing +doings +doit +doits +dojo +dojos +doldrums +dole +dolefulness +dolerite +doles +dolichocephalic +dolichocephalism +dolichocephaly +dolichos +dolichoses +doline +dolium +doll +dollar +dollars +dollhouse +dollies +dollishness +dollop +dollops +dolls +dolly +dolman +dolmans +dolmas +dolmen +dolmens +dolomite +dolomites +dolomitization +dolomitizations +dolor +dolorousness +dolors +dolour +dolours +dolphin +dolphins +dolt +doltishness +dolts +domain +domains +dome +domes +domestic +domestication +domestications +domesticator +domesticators +domesticity +domestics +domicile +domiciles +domiciliation +domiciliations +dominance +dominances +dominant +dominants +domination +dominations +dominator +dominators +dominee +dominees +dominie +dominies +dominion +dominions +domino +dominoes +dominos +don +don't +don't-know +don't-knows +dona +donas +donation +donations +donative +donatives +donator +donatories +donators +donatory +donee +donees +dong +donga +dongas +dongs +donjon +donjons +donkey +donkey-work +donkeys +donnism +donor +donors +dons +donut +donuts +donzel +doob +doodad +doodads +doodah +doodahs +doodle +doodlebug +doodlebugs +doodler +doodlers +doodles +doohickey +doohickeys +dook +dooks +doolie +doolies +doom +doomed +dooms +doomsday +doomsdays +doomwatcher +doomwatchers +door +doorbell +doorbells +doorframe +doorframes +doorhandle +doorhandles +doorjamb +doorjambs +doorknob +doorknobs +doormat +doormats +doornail +doornails +doorpost +doorposts +doors +doorstep +doorsteps +doorstop +doorstopper +doorstoppers +doorstops +doorway +doorways +dop +dopa +dopamine +dopant +dopants +dopatta +dopattas +dope +doper +dopers +dopes +dops +dor +dorado +dorados +dories +dork +dorks +dorm +dormancy +dormer +dormers +dormitories +dormitory +dormouse +dorms +dornick +doronicum +dorp +dorps +dorr +dorrs +dors +dorse +dorser +dorsers +dorses +dorsiflexion +dorsiventrality +dorsum +dorsums +dorter +dorters +dory +dos +dosage +dosages +dose +doses +dosimeter +dosimeters +dosimetry +doss +dossal +dossals +dosser +dossers +dosses +dossier +dossiers +dossil +dossils +dot +dotage +dotages +dotard +dotards +dotation +dotations +doter +doters +dotes +dots +dotterel +dotterels +dottiness +dottle +dottles +douane +double +double-check +double-checks +double-cross +double-crosser +double-crossers +double-crosses +double-crossing +double-dealer +double-dealers +double-dealing +double-decker +double-deckers +double-facedness +double-header +double-headers +double-mindedness +double-spacing +double-talk +doubled +doubleness +doubler +doublers +doubles +doublespeak +doublet +doubleton +doubletons +doubletree +doubletrees +doublets +doubling +doublings +doubloon +doubloons +doublure +doublures +doubt +doubter +doubters +doubtfulness +doubts +douc +douceness +doucepere +douceur +douceurs +douche +douches +doucs +dough +doughiness +doughnut +doughnuts +doughs +doughtiness +douma +doumas +doup +doups +doura +douras +dourine +dourness +douroucouli +douroucoulis +douse +douser +dousers +douses +dousing +douter +douters +dove +dovecote +dovecotes +dovekie +dovekies +dover +dovers +doves +dovetail +dovetails +dowager +dowagers +dowdies +dowdiness +dowdy +dowdyism +dowel +dowels +dower +dowers +dowitcher +dowitchers +down +down-and-out +down-and-outs +down-easter +downbeat +downbeats +downcome +downcomer +downcomers +downcomes +downer +downers +downfall +downfalls +downgrade +downgrades +downheartedness +downhill +downhills +downiness +downpipe +downpipes +downpour +downpours +downright +downrightness +downs +downsizing +downspout +downspouts +downstage +downstairs +downstate +downstroke +downstrokes +downswing +downswings +downtime +downtimes +downtrend +downtrends +downturn +downturns +downwardness +dowries +dowry +dowse +dowser +dowsers +dowses +dowsing +doxies +doxographer +doxographers +doxologies +doxology +doxy +doyen +doyenne +doyennes +doyens +doyley +doyleys +doylies +doyly +doze +dozen +dozens +dozer +dozers +dozes +doziness +drab +drabbet +drabbler +drabblers +drabness +drabs +drachm +drachma +drachmas +drachms +dracone +dracones +dracunculus +dracunculuses +draff +draffs +draft +draftee +draftees +drafter +drafters +draftiness +drafting +drafts +draftsman +draftsmanship +drag +dragline +draglines +dragoman +dragomans +dragon +dragoness +dragonesses +dragonet +dragonets +dragonflies +dragonfly +dragonhead +dragonheads +dragonnade +dragonnades +dragons +dragoon +dragoons +drags +dragster +dragsters +drail +drails +drain +drainage +drainages +drainboard +drainboards +drainer +drainers +drains +drake +drakes +dram +drama +dramas +dramatics +dramatisation +dramatisations +dramatist +dramatists +dramatization +dramatizations +dramaturge +dramaturges +dramaturgist +dramaturgists +dramaturgy +drammock +drammocks +drams +drape +draper +draperies +drapers +drapery +drapes +draught +draughtboard +draughtboards +draughter +draughters +draughtiness +draughts +draughtsman +draughty +draw +draw-sheet +drawback +drawbacks +drawbridge +drawbridges +drawee +drawees +drawer +drawers +drawing +drawings +drawl +drawler +drawlers +drawlingness +drawls +draws +dray +drayage +drayman +drays +dread +dreadfulness +dreadnaught +dreadnaughts +dreadnought +dreadnoughts +dreads +dream +dreamboat +dreamboats +dreamer +dreamers +dreaminess +dreaming +dreamings +dreamland +dreamlands +dreamlessness +dreams +dreariness +dreck +dredge +dredger +dredgers +dredges +dreg +dregs +drench +drencher +drenchers +drenches +drenching +dress +dressage +dresser +dressers +dresses +dressiness +dressing +dressing-down +dressings +dressmaker +dressmakers +dressmaking +drib +dribble +dribbler +dribblers +dribbles +dribbling +driblet +driblets +dribs +drier +driers +dries +drift +driftage +driftages +drifter +drifters +drifting +driftpin +driftpins +drifts +drill +driller +drillers +drilling +drills +drink +drinkable +drinkableness +drinker +drinkers +drinking +drinkings +drinks +drip +dripping +drippings +drips +drive +drive-in +drive-ins +drivel +driveler +drivelers +driveller +drivellers +drivels +driver +drivers +drives +driveway +driveways +driving +drizzle +drizzles +drogher +droghers +drogue +drogues +droit +droits +drolleries +drollery +drollness +dromedaries +dromedary +dromond +dromonds +dromos +drone +drones +drongo +drongoes +drongos +droning +droob +droobs +drool +drools +droop +droopiness +droops +drop +drop-kicker +drop-kickers +droplet +dropper +droppers +dropping +droppings +drops +dropsy +drosera +droseras +droshkies +droshky +droskies +drosky +drosometer +drosometers +drosophila +drosophilas +dross +drossiness +drought +droughtiness +droughts +drove +drover +drovers +droves +drowner +drowners +drowse +drowses +drowsiness +drub +drubbing +drubbings +drubs +drudge +drudger +drudgeries +drudgers +drudgery +drudges +drug +drugget +druggets +drugging +druggist +druggists +drugs +druidism +drum +drumbeat +drumbeats +drumfire +drumfish +drumfishes +drumhead +drumheads +drumlin +drumlins +drummer +drummers +drumming +drummock +drummocks +drums +drumstick +drumsticks +drunk +drunkard +drunkards +drunkenness +drunkometer +drunkometers +drunks +drupe +drupelet +drupelets +drupes +druse +druses +druthers +dry +dry-blowing +dryad +dryades +dryads +dryer +dryers +dryness +drysalter +drysalteries +drysalters +drysaltery +duad +duads +dual +dualism +dualisms +dualist +dualists +dualities +duality +duals +duarchies +duarchy +dub +dubbin +dubbing +dubbings +dubbins +dubiety +dubiousness +dubitation +dubitations +dubs +ducat +ducatoon +ducatoons +ducats +duce +duces +duchess +duchesse +duchesses +duchies +duchy +duck +duckbill +duckbills +ducker +duckers +duckies +ducking +duckings +duckling +ducklings +ducks +duckweed +duckweeds +ducky +duct +ductileness +ductility +ducts +dud +dude +dudeen +dudeens +dudes +dudgeon +dudgeons +duds +due +duel +dueller +duellers +duellist +duellists +duello +duellos +duels +duenna +duennas +dues +duet +duets +duettist +duettists +duff +duffel +duffer +duffers +duffle +duffs +dug +dugong +dugongs +dugout +dugouts +dugs +duiker +duikers +duke +dukedom +dukedoms +dukes +dulciana +dulcianas +dulcification +dulcimer +dulcimers +dulia +dullard +dullards +dullness +dullsville +dulness +dulocracies +dulocracy +dulosis +dulse +dulses +duma +dumas +dumb-cane +dumbbell +dumbbells +dumbness +dumbwaiter +dumbwaiters +dumdum +dumdums +dumka +dummies +dummkopf +dummkopfs +dummy +dumortierite +dump +dumper +dumpers +dumpiness +dumping +dumpishness +dumpling +dumplings +dumps +dun +dunce +dunces +dunch +dunches +dunder +dunderhead +dunderheadedness +dunderheads +dunders +dune +dunes +dung +dungaree +dungarees +dungeon +dungeons +dunghill +dunghills +dungs +duniewassal +duniewassals +dunite +duniwassal +duniwassals +dunk +dunks +dunlin +dunlins +dunnage +dunnages +dunnakin +dunnakins +dunnies +dunnite +dunno +dunnock +dunnocks +dunny +duns +dunt +dunts +duo +duodecimal +duodecimo +duodecimos +duodenitis +duodenum +duodenums +duologue +duologues +duomo +duomos +duopolies +duopoly +duos +duotone +duotones +dupability +dupatta +dupattas +dupe +duper +duperies +dupers +dupery +dupes +dupion +dupions +duplet +duplets +duplex +duplexer +duplexers +duplexes +duplicate +duplicates +duplicating +duplication +duplications +duplicator +duplicators +duplicature +duplicatures +duplicities +duplicity +dupondius +dupondiuses +duppies +duppy +dura +durability +durableness +durables +duralumin +duramen +duramens +durance +duras +duration +durations +durative +duratives +durbar +durbars +duress +duresses +durian +durians +durion +durions +durmast +durmasts +duro +duros +durra +durras +durrie +durum +durums +durzi +durzis +dusk +duskiness +dusks +dust +dust-bath +dust-baths +dust-up +dust-ups +dustbin +dustbins +duster +dusters +dustiness +dusting +dustman +dusts +dutch +dutches +duteousness +duties +dutifulness +duty +duumvir +duumvirate +duumvirates +duumvirs +duvet +duvets +duvetyn +duvetynes +duvetyns +dux +duxes +duyker +duykers +dvandva +dvandvas +dwale +dwales +dwalm +dwalms +dwarf +dwarfishness +dwarfism +dwarfs +dweeb +dweebs +dwell +dweller +dwellers +dwelling +dwellings +dwells +dwindling +dyad +dyadic +dyads +dyarchies +dyarchy +dybbuk +dybbuks +dye +dye-works +dyeing +dyeings +dyer +dyer's-broom +dyer's-greenweed +dyer's-weed +dyers +dyes +dyestuff +dyestuffs +dying +dyings +dyke +dykes +dynamic +dynamics +dynamism +dynamist +dynamists +dynamite +dynamiter +dynamiters +dynamites +dynamo +dynamogenesis +dynamometer +dynamometers +dynamometry +dynamos +dynamotor +dynamotors +dynast +dynasties +dynasts +dynasty +dynatron +dynatrons +dyne +dynes +dynode +dynodes +dysarthria +dyscrasia +dysentery +dysfunction +dysfunctions +dysgenics +dysgraphia +dyskinesia +dyslexia +dysmenorrhea +dysmenorrhoea +dyspareunia +dyspathy +dyspepsia +dyspeptic +dyspeptics +dysphagia +dysphasia +dysphemism +dysphemisms +dysphonia +dysphoria +dysplasia +dyspnea +dyspnoea +dyspraxia +dysprosium +dysrhythmia +dysteleologist +dysteleologists +dysteleology +dysthymia +dystonia +dystonias +dystopia +dystopias +dystrophy +dysuria +dytiscid +dytiscids +dziggetai +dziggetais +dzo +dzos +e-mail +eager +eagerness +eagle +eagle-hawk +eagles +eaglet +eaglets +eaglewood +eaglewoods +eagre +eagres +ealdorman +eanling +ear +ear-shell +earache +earaches +earbash +earbashes +earbob +earbobs +eardrop +eardrops +eardrum +eardrums +earflap +earflaps +earful +earfuls +earing +earings +earl +earlap +earlaps +earldom +earldoms +earliness +earlobe +earlobes +earls +earmark +earmarks +earmuff +earmuffs +earner +earners +earnest +earnestness +earning +earnings +earphone +earphones +earpiece +earpieces +earplug +earplugs +earring +earrings +ears +earth +earth-closet +earth-closets +earthenware +earthiness +earthing +earthliness +earthling +earthlings +earthman +earthmover +earthmovers +earthquake +earthquakes +earthrise +earths +earthwork +earthworks +earthworm +earthworms +earwax +earwig +earwigs +ease +easel +easels +easement +eases +easiness +easing +east +easter +easterlies +easterling +easterlings +easterly +easterner +easterners +easting +eastings +easts +eastward +eastwards +eatable +eatables +eatage +eater +eateries +eaters +eatery +eath +eating +eatings +eats +eau +eaus +eaves +eavesdropper +eavesdroppers +ebb +ebbing +ebbs +ebon +ebonies +ebonist +ebonists +ebonite +ebons +ebony +ebullience +ebulliences +ebullioscopy +ebullition +ebullitions +eburnation +eburnations +ecad +ecads +ecbolic +ecbolics +eccentric +eccentricities +eccentricity +eccentrics +ecchymosis +ecclesia +ecclesiarch +ecclesiarchs +ecclesias +ecclesiastic +ecclesiasticism +ecclesiastics +ecclesiolater +ecclesiolaters +ecclesiolatry +ecclesiologist +ecclesiologists +ecclesiology +eccrinology +ecdysiast +ecdysiasts +ecdysis +echelon +echelons +echeveria +echidna +echidnas +echinococcus +echinoderm +echinoderms +echinoid +echinoids +echinus +echinuses +echo +echoer +echoers +echoes +echogram +echograms +echoism +echolalia +echolocation +echopraxia +echovirus +echoviruses +eclampsia +eclectic +eclecticism +eclectics +eclipse +eclipses +ecliptic +ecliptics +eclogite +eclogue +eclogues +eclosion +ecocide +ecocides +ecologist +ecologists +ecology +econometrician +econometricians +econometrics +econometrist +econometrists +economics +economies +economiser +economisers +economist +economists +economizer +economizers +economy +ecospecies +ecosphere +ecospheres +ecosystem +ecosystems +ecotype +ecotypes +ecphonesis +ecru +ecstasies +ecstasy +ecstatic +ectasis +ecthlipsis +ecthyma +ectoblast +ectoblasts +ectocrine +ectocrines +ectoderm +ectoderms +ectoenzyme +ectogenesis +ectomorph +ectomorphs +ectomorphy +ectoparasite +ectoparasites +ectophyte +ectophytes +ectopia +ectoplasm +ectoplasms +ectosarc +ectosarcs +ectozoa +ectozoan +ectozoon +ectropion +ectropions +ectype +ectypes +ecu +ecumenicalism +ecumenicism +ecumenics +ecumenism +ecus +eczema +edacity +eddies +eddo +eddoes +eddy +edelweiss +edelweisses +edema +edemas +edentate +edge +edgebone +edgebones +edger +edgers +edges +edginess +edging +edgings +edh +edibility +edible +edibleness +edibles +edict +edicts +edification +edifice +edifices +edifier +edifiers +edile +ediles +edit +editing +edition +editions +editor +editorial +editorialization +editorials +editors +editorship +editorships +editress +editresses +edits +educability +educatability +education +educationalist +educationalists +educationist +educationists +educations +educator +educators +educt +eduction +eductions +eductor +eductors +educts +edulcoration +eel +eelgrass +eelgrasses +eelpout +eelpouts +eels +eelworm +eelworms +eeriness +effacement +effacements +effect +effecter +effecters +effectiveness +effector +effectors +effects +effectuality +effectualness +effectuation +effectuations +effeminacy +effeminateness +effendi +effendis +effervescence +effervescences +effervescencies +effervescency +effeteness +efficaciousness +efficacy +efficiencies +efficiency +effigies +effigy +effleurage +effleurages +efflorescence +efflorescences +effluence +effluences +effluent +effluents +effluvium +effluviums +efflux +effluxes +effort +effortlessness +efforts +effronteries +effrontery +effulgence +effulgences +effusiometer +effusiometers +effusion +effusions +effusiveness +eft +efts +egalitarian +egalitarianism +egalitarians +egestion +egg +egg-and-anchor +egg-and-dart +egg-and-tongue +eggar +eggars +eggcup +eggcups +egger +eggers +egghead +eggheads +eggnog +eggnogs +eggs +eggshell +eggshells +egis +egises +eglantine +eglantines +ego +egocentric +egocentricities +egocentricity +egocentrism +egoism +egoist +egoists +egomania +egomaniac +egomaniacs +egos +egotism +egotist +egotists +egregiousness +egress +egresses +egression +egressions +egret +egrets +eider +eiderdown +eiderdowns +eiders +eidolon +eigenfunction +eigenvalue +eigenvalues +eight +eighteen +eighteenmo +eighteenmos +eighteens +eighteenth +eighteenths +eighth +eighths +eighties +eightieth +eightieths +eightpence +eightpences +eights +eightsome +eightsomes +eightvo +eightvos +eighty +eikon +eikons +eild +einkorn +einsteinium +eirenicon +eirenicons +eisteddfod +eisteddfods +ejaculate +ejaculates +ejaculation +ejaculations +ejection +ejections +ejective +ejectment +ejectments +ejector +ejectors +ekistics +elaborateness +elaboration +elaborations +elaborator +elaborators +eland +elands +elasmobranch +elasmobranchs +elastance +elastances +elastic +elasticity +elastics +elastin +elastomer +elastomers +elatedness +elater +elaterin +elaterite +elaterium +elaters +elation +elative +elatives +elbow +elbowing +elbows +eld +elder +elderberries +elderberry +elderliness +elders +eldership +elderships +eldest +elding +eldings +elds +elecampane +elecampanes +elect +election +electioneer +electioneerer +electioneerers +electioneering +electioneerings +electioneers +elections +elector +electorate +electorates +electors +electress +electresses +electret +electrets +electric +electrician +electricians +electricity +electrics +electrification +electrifier +electrifiers +electro +electroacoustics +electroanalysis +electrobiologist +electrobiologists +electrobiology +electrocardiogram +electrocardiograms +electrocardiograph +electrocardiographs +electrocardiography +electrochemist +electrochemistry +electrochemists +electrocution +electrocutions +electrode +electrodeposition +electrodes +electrodialysis +electrodynamics +electrodynamometer +electroencephalogram +electroencephalograph +electroencephalography +electroextraction +electroforming +electrograph +electrographs +electrography +electrokinetics +electrolier +electroliers +electroluminescence +electrolysis +electrolyte +electrolytes +electrolytic +electromagnet +electromagnetic +electromagnetism +electromagnets +electromerism +electrometallurgist +electrometallurgy +electrometer +electrometers +electrometry +electromotor +electromotors +electromyograph +electromyography +electron +electron-volt +electron-volts +electronegativity +electronics +electrons +electrophoresis +electrophorus +electrophotography +electrophysiologist +electrophysiology +electroplate +electroplater +electroplates +electros +electroscope +electroscopes +electroshock +electroshocks +electrostatics +electrotechnics +electrotechnology +electrotherapeutics +electrotherapy +electrothermics +electrotonus +electrotype +electrotyper +electrotypers +electrotypes +electrotypist +electrotypists +electrotypy +electrovalency +electrowinning +electrowinnings +electrum +elects +electuaries +electuary +elegance +elegancy +elegiac +elegiacs +elegies +elegist +elegists +elegit +elegits +elegy +element +elemental +elementals +elementariness +elements +elemi +elenchus +elephant +elephant's-ear +elephant's-ears +elephant's-foot +elephantiasis +elephants +elevation +elevations +elevator +elevators +eleven +eleven-plus +elevens +eleventh +elevenths +elevon +elevons +elf +elfin +elfins +elfish +elfland +elflock +elflocks +elicitation +elicitations +elicitor +elicitors +eligibility +eliminant +eliminants +elimination +eliminations +eliminator +eliminators +elision +elisions +elite +elites +elitism +elitist +elitists +elixir +elixirs +elk +elkhound +elkhounds +elks +ell +ellipse +ellipses +ellipsis +ellipsograph +ellipsographs +ellipsoid +ellipsoids +ellipticities +ellipticity +ells +elm +elms +elmwood +elocution +elocutionist +elocutionists +elocutions +eloigner +eloigners +eloignment +eloignments +eloiner +eloiners +elongation +elongations +elopement +elopements +eloper +elopers +elops +eloquence +eloquences +eluant +eluants +eluate +eluates +elucidation +elucidations +elucidator +elucidators +eluder +eluders +eluding +eluent +eluents +elul +elusion +elusions +elusiveness +elution +elutriation +elutriator +elutriators +eluvium +eluviums +elver +elvers +elves +elytra +elytron +elytrons +elytrum +emaciation +emanation +emanations +emancipation +emancipationist +emancipations +emancipator +emancipators +emancipist +emancipists +emargination +emarginations +emasculation +emasculations +emasculator +emasculators +embalmer +embalmers +embalmment +embalmments +embankment +embankments +embarcation +embarcations +embargo +embargoes +embargos +embarkation +embarkations +embarkment +embarkments +embarrassment +embarrassments +embassador +embassage +embassages +embassies +embassy +embattlement +embattlements +embayment +embayments +embedding +embedment +embedments +embellisher +embellishers +embellishment +embellishments +ember +embers +embezzlement +embezzlements +embezzler +embezzlers +embitterer +embitterers +embitterment +embitterments +emblazoner +emblazoners +emblazonment +emblazonments +emblazonry +emblem +emblematist +emblematists +emblems +embodiment +embodiments +embolies +embolism +embolisms +embolus +emboluses +emboly +embonpoint +embosser +embossers +embossment +embossments +embouchure +embouchures +embrace +embracement +embracements +embraceor +embraceors +embracer +embracers +embracery +embraces +embracing +embranchment +embranglement +embranglements +embrasure +embrasures +embrittlement +embrocation +embrocations +embroiderer +embroiderers +embroideries +embroidery +embroilment +embroilments +embryo +embryogeny +embryologist +embryologists +embryology +embryos +embryotomies +embryotomy +embryulcia +embryulcias +emcee +emcees +eme +emeer +emeers +emendation +emendations +emendator +emendators +emerald +emeralds +emergence +emergences +emergencies +emergency +emergent +emeries +emeritus +emersion +emersions +emery +emes +emesis +emetic +emetics +emetine +emeu +emeus +emiction +emigrant +emigrants +emigration +emigrations +eminence +eminences +eminencies +eminency +emir +emirate +emirates +emirs +emissaries +emissary +emission +emissions +emissivity +emitter +emitters +emmenagogue +emmenagogues +emmer +emmet +emmetrope +emmetropes +emmetropia +emmets +emollient +emollients +emollition +emollitions +emolument +emoluments +emotion +emotionalism +emotionality +emotions +emotivism +empalement +empalements +empathies +empathy +empennage +empennages +emperies +emperor +emperors +emperorship +emperorships +empery +emphasis +emphasises +emphasizing +emphatic +emphaticalness +emphysema +emphysemas +empire +empire-builder +empire-builders +empires +empiric +empiricism +empiricist +empiricists +empirics +emplacement +emplacements +employ +employee +employees +employer +employers +employment +employments +employs +empoisonment +emporium +emporiums +empowerment +empress +empressement +empresses +emprise +emprises +emptier +emptiers +empties +emptiness +empty +emptying +emptyings +empurpled +empyema +empyrean +empyreans +empyreuma +empyreumas +emu +emu-wren +emulation +emulations +emulator +emulators +emulousness +emulsification +emulsifications +emulsifier +emulsifiers +emulsion +emulsions +emulsoid +emulsoids +emunctories +emunctory +emus +enabler +enablers +enactment +enactments +enactor +enactors +enallage +enamel +enameler +enamelers +enamelist +enamelists +enameller +enamellers +enamellist +enamellists +enamels +enantiomer +enantiomorph +enantiomorphism +enantiomorphs +enantiosis +enantiotropy +enarthrosis +enate +enation +enations +encaenia +encampment +encampments +encapsulation +encapsulations +encarpus +encarpuses +encasement +encasements +encaustic +encaustics +enceinte +enceintes +encephalin +encephalins +encephalitis +encephalogram +encephalograms +encephalograph +encephalographs +encephalography +encephalon +encephalons +encephalopathy +encephalotomies +encephalotomy +enchainment +enchainments +enchanter +enchanters +enchantment +enchantments +enchantress +enchantresses +enchilada +enchiladas +enchiridion +enchiridions +enchondroma +enchondromas +encincture +encinctures +encirclement +encirclements +enclave +enclaves +enclitic +enclitics +encloser +enclosers +enclosing +enclosure +enclosures +encoder +encoders +encoding +encoignure +encoignures +encolpion +encolpions +encomiast +encomiasts +encomienda +encomium +encomiums +encompassment +encompassments +encore +encores +encounter +encounters +encouragement +encouragements +encourager +encouragers +encrinite +encrinites +encroacher +encroachers +encroachment +encroachments +encrust +encrustation +encrustations +encrusts +encryption +encryptions +encumbrance +encumbrancer +encumbrancers +encumbrances +encyclical +encyclicals +encyclopaedia +encyclopaedias +encyclopedia +encyclopedias +encyclopedism +encyclopedist +encyclopedists +encystation +encystations +encystment +encystments +end +end-all +endamagement +endamoeba +endangerment +endearment +endearments +endeavor +endeavors +endeavour +endeavours +endemic +endemics +endemism +endgame +endgames +ending +endings +endive +endives +endlessness +endoblast +endoblasts +endocarditis +endocardium +endocardiums +endocarp +endocarps +endocrine +endocrinologist +endocrinologists +endocrinology +endoderm +endodermis +endoderms +endogamies +endogamy +endogen +endogens +endogeny +endolymph +endolymphs +endometriosis +endometritis +endometrium +endometriums +endomorph +endomorphs +endomorphy +endoparasite +endoparasites +endophyte +endophytes +endoplasm +endoplasms +endopodite +endopodites +endorphin +endorphins +endorsee +endorsees +endorsement +endorsements +endorser +endorsers +endosarc +endosarcs +endoscope +endoscopes +endoscopies +endoscopy +endoskeleton +endoskeletons +endosmosis +endosperm +endosperms +endospore +endospores +endosteum +endosteums +endothelium +endower +endowers +endowment +endowments +endozoa +endpaper +endpapers +endplay +ends +endurableness +endurance +endurances +endurer +endurers +ene +enema +enemas +enemies +enemy +energetics +energid +energids +energies +energiser +energisers +energizer +energizers +energizing +energumen +energumens +energy +enervation +enfacement +enfacements +enfeeblement +enfeoffment +enfeoffments +enfilade +enfilades +enfolding +enfoldment +enfoldments +enforcement +enforcements +enforcer +enforcers +enfranchisement +enfranchisements +engagement +engagements +engagingness +engenderer +engenderment +engine +engineer +engineering +engineers +enginery +engines +engobe +engorgement +engorgements +engraftation +engraftment +engraftments +engrailment +engrailments +engram +engrams +engraver +engravers +engraving +engravings +engrosser +engrossers +engrossment +engrossments +engulfment +engulfments +enhancement +enhancements +enhancer +enhancers +enigma +enigmas +enjambement +enjambements +enjambment +enjambments +enjoiner +enjoiners +enjoining +enjoinment +enjoinments +enjoyableness +enjoyer +enjoyers +enjoyment +enjoyments +enkephalin +enkephalins +enlacement +enlacements +enlargedness +enlargement +enlargements +enlarger +enlargers +enlightened +enlightenment +enlightenments +enlisting +enlistment +enlistments +enlivener +enliveners +enlivenment +enlivenments +enmeshment +enmities +enmity +ennage +ennead +enneads +enneagon +enneagons +enneahedron +enneahedrons +ennoblement +ennoblements +ennui +ennuis +enology +enormities +enormity +enormousness +enosis +enough +enoughs +enquirer +enquirers +enquiries +enquiry +enragement +enragements +enrichment +enrichments +enroller +enrollers +enrollment +enrollments +enrolment +enrolments +ens +ensample +ensamples +ensemble +ensembles +enshrinement +enshrinements +ensign +ensigncies +ensigncy +ensigns +ensignship +ensignships +ensilage +ensilages +enslavement +enslavements +enslaver +enslavers +enslaving +ensnarement +enstatite +enstatites +ensure +ensurer +ensurers +ensures +enswathement +entablature +entablatures +entablement +entablements +entail +entailer +entailers +entailment +entailments +entails +entanglement +entanglements +entasis +entelechies +entelechy +entellus +entelluses +entente +ententes +enterectomies +enterectomy +enterer +enterers +entering +enterings +enteritis +enteron +enteropneust +enteropneusts +enterostomies +enterostomy +enterotomies +enterotomy +enterovirus +enteroviruses +enterprise +enterpriser +enterprisers +enterprises +entertainer +entertainers +entertainment +entertainments +enthalpy +enthrallment +enthrallments +enthralment +enthralments +enthronement +enthronements +enthronization +enthronizations +enthusiasm +enthusiasms +enthusiast +enthusiasts +enthymeme +enthymemes +enticement +enticements +entire +entireness +entires +entirety +entities +entitlement +entitlements +entity +entoblast +entoblasts +entoderm +entoderms +entombment +entombments +entomologist +entomologists +entomology +entomophily +entomostracan +entomostracans +entophyte +entophytes +entourage +entourages +entozoa +entozoon +entr'acte +entr'actes +entrails +entrance +entrancement +entrancements +entrances +entrant +entrants +entrapment +entrapments +entrapper +entrappers +entreaties +entreatment +entreatments +entreaty +entrechat +entrechats +entremets +entrenchment +entrenchments +entrepot +entrepots +entrepreneur +entrepreneurs +entrepreneurship +entrepreneuse +entrepreneuses +entresol +entresols +entries +entropy +entrustment +entrustments +entry +enucleation +enucleations +enumeration +enumerations +enumerator +enumerators +enunciation +enunciations +enunciator +enunciators +enuresis +envelope +envelopes +enveloping +envelopment +envelopments +enviableness +envier +enviers +envies +enviousness +environment +environmentalism +environmentalist +environments +environs +envisagement +envisagements +envisioning +envoi +envois +envoy +envoys +envy +enzootic +enzootics +enzyme +enzymes +enzymologist +enzymologists +enzymology +eolipile +eolipiles +eolith +eoliths +eon +eonism +eons +eosin +eosinophil +eosinophilia +epacris +epacrises +epact +epacts +epagoge +epanalepsis +epanaphora +epanodos +epanorthosis +eparch +eparchies +eparchs +eparchy +epaulet +epaulets +epaulette +epaulettes +epeirogeny +epencephalon +epencephalons +epenthesis +epergne +epergnes +epexegesis +epha +ephah +ephahs +ephas +ephebe +ephebes +ephebos +ephebus +ephedra +ephedras +ephedrine +ephemera +ephemeral +ephemerality +ephemerals +ephemeras +ephemerid +ephemerides +ephemerids +ephemeris +ephemeron +ephemerons +ephod +ephods +ephor +ephors +epiblast +epic +epicalyx +epicalyxes +epicanthus +epicanthuses +epicarp +epicarps +epicedium +epicene +epicenes +epicenter +epicenters +epicentre +epicentres +epicist +epicists +epiclesis +epicondyle +epicotyl +epicotyls +epics +epicure +epicures +epicycle +epicycles +epicycloid +epicycloids +epidemic +epidemicity +epidemics +epidemiologist +epidemiologists +epidemiology +epidendrum +epidendrums +epidermis +epidermises +epidiascope +epidiascopes +epididymis +epidiorite +epidote +epidotes +epidural +epidurals +epigastrium +epigastriums +epigenesis +epigenesist +epigenesists +epiglottis +epiglottises +epigon +epigone +epigones +epigons +epigram +epigrammatist +epigrammatists +epigrams +epigraph +epigrapher +epigraphers +epigraphies +epigraphist +epigraphists +epigraphs +epigraphy +epigyny +epilation +epilations +epilator +epilators +epilepsy +epileptic +epileptics +epilimnion +epilimnions +epilobium +epilobiums +epilog +epilogist +epilogists +epilogs +epilogue +epilogues +epimer +epimers +epinasty +epinephrine +epiphenomenalism +epiphenomenalist +epiphenomenon +epiphonema +epiphonemas +epiphragm +epiphragms +epiphysis +epiphyte +epiphytes +epiploon +epiploons +episcopacies +episcopacy +episcopalian +episcopalianism +episcopalians +episcopalism +episcopate +episcopates +episcope +episcopes +episiotomy +episode +episodes +episome +episomes +epispastic +epispastics +episperm +episperms +epistasis +epistaxis +epistemologist +epistemologists +epistemology +episternum +epistle +epistles +epistoler +epistolers +epistolography +epistrophe +epistyle +epistyles +epitaph +epitaphist +epitaphists +epitaphs +epitasis +epitaxies +epitaxy +epithalamion +epithalamium +epithelioma +epitheliomas +epithelium +epitheliums +epithet +epithets +epitome +epitomes +epitomiser +epitomisers +epitomist +epitomists +epitomizer +epitomizers +epitrachelion +epitrachelions +epizoa +epizoon +epizootic +epizootics +epoch +epochs +epode +epodes +eponychium +eponychiums +eponym +eponyms +epopee +epopees +epos +eposes +epoxide +epoxides +epoxies +epoxy +epsilon +epsomite +epuration +epurations +epyllion +epyllions +equabilities +equability +equableness +equal +equalisation +equalisations +equaliser +equalisers +equalitarian +equalitarianism +equalitarians +equalities +equality +equalization +equalizations +equalizer +equalizers +equals +equanimities +equanimity +equating +equation +equations +equator +equatorial +equators +equerries +equerry +equestrian +equestrianism +equestrians +equestrienne +equestriennes +equiangularity +equid +equidistance +equidistances +equids +equilateral +equilibration +equilibrator +equilibrators +equilibrist +equilibrists +equilibrium +equilibriums +equine +equinity +equinoctial +equinox +equinoxes +equipage +equipages +equipment +equipoise +equipoises +equipollence +equipollences +equipollencies +equipollency +equipollent +equiponderance +equipotential +equipping +equiprobability +equisetum +equisetums +equitableness +equitation +equities +equity +equivalence +equivalences +equivalencies +equivalency +equivalent +equivalents +equivocality +equivocalness +equivocation +equivocations +equivocator +equivocators +equivoque +equivoques +era +eradiation +eradication +eradications +eradicator +eradicators +eras +eraser +erasers +erasion +erasions +erasure +erasures +erbium +erectility +erecting +erection +erections +erectness +erector +erectors +eremite +eremites +eremitism +erepsin +erethism +erg +ergate +ergates +ergative +ergatocracies +ergatocracy +ergodicity +ergograph +ergographs +ergometer +ergometers +ergonomics +ergosterol +ergot +ergotism +ergs +eric +erica +ericas +erics +erigeron +erigerons +eringo +eringoes +eringos +eriophorum +eriophorums +eristic +erk +erks +ermine +ermines +ern +erne +ernes +erns +eroding +erodium +erodiums +erosion +erosions +erotesis +erotic +erotica +eroticism +erotics +erotism +erotology +erotomania +erotomaniac +errand +errands +errantry +errata +erratic +erratum +errhine +errhines +erroneousness +error +errors +ers +ersatz +ersatzes +erses +erubescence +erubescences +eructation +eructations +erudition +eruption +eruptions +eruptiveness +eruptivity +eryngium +eryngiums +eryngo +eryngoes +eryngos +erysipelas +erythema +erythrina +erythrinas +erythrism +erythrite +erythrites +erythroblast +erythroblasts +erythrocyte +erythrocytes +erythromycin +erythrophobia +erythropoiesis +escadrille +escadrilles +escalade +escalades +escalation +escalations +escalator +escalators +escallonia +escallonias +escallop +escallops +escalope +escalopes +escapade +escapades +escape +escapee +escapees +escapement +escapements +escaper +escapers +escapes +escapism +escapist +escapists +escapologist +escapologists +escargot +escargots +escarole +escaroles +escarp +escarpment +escarpments +escarps +eschalot +eschalots +eschar +escharotic +eschars +eschatologist +eschatologists +eschatology +escheat +escheatage +escheatages +escheator +escheators +escheats +eschewal +eschewals +eschewer +eschewers +eschscholtzia +escolar +escolars +escort +escorts +escritoire +escritoires +escrow +escrows +escuage +escuages +escudo +escudos +esculent +esculents +escutcheon +escutcheons +esker +eskers +esne +esnecy +esnes +esophagus +esophaguses +esoterica +esotericism +esoteries +esoterism +esotery +espada +espadas +espadrille +espadrilles +espagnole +espagnolette +espagnolettes +espalier +espaliers +esparto +espartos +esperance +espial +espials +espionage +espionages +esplanade +esplanades +espousal +espousals +espouser +espousers +espresso +espressos +esprit +esquire +esquires +ess +essay +essayer +essayers +essayist +essayists +essays +esse +essence +essences +essential +essentialism +essentialist +essentialists +essentiality +essentialness +essentials +esses +essive +essonite +est +establisher +establishers +establishment +establishmentarian +establishmentarianism +establishments +estafette +estafettes +estaminet +estaminets +estancia +estancias +estanciero +estancieros +estate +estates +esteem +esteems +ester +esterification +esterifications +esters +esthesia +esthete +esthetes +esthetic +esthetics +estimate +estimates +estimation +estimations +estimator +estimators +estivation +estoc +estocs +estoile +estoiles +estoppage +estoppages +estoppel +estoppels +estrade +estrades +estrangedness +estrangement +estrangements +estranger +estrangers +estray +estrays +estreat +estreats +estrogen +estrus +estuaries +estuary +esurience +esuriences +esuriencies +esuriency +eta +etaerio +etaerios +etalon +etalons +etas +etchant +etchants +etcher +etchers +etching +etchings +eternalness +eternisation +eternities +eternity +eternization +eth +ethal +ethane +ethanol +ethene +ether +etherealisation +ethereality +etherealization +etherification +etherifications +etherization +ethers +ethic +ethicality +ethicalness +ethics +ethmoid +ethnarch +ethnarchies +ethnarchs +ethnarchy +ethnicity +ethnobotany +ethnocentrism +ethnographer +ethnographers +ethnographies +ethnography +ethnolinguist +ethnolinguistics +ethnolinguists +ethnologist +ethnologists +ethnology +ethnomusicologist +ethnomusicology +ethologist +ethologists +ethology +ethos +ethoses +ethyl +ethylate +ethylates +ethylene +ethyls +ethyne +etiologies +etiology +etiquette +etiquettes +etna +etnas +etymologies +etymologist +etymologists +etymologizing +etymology +etymon +etymons +eubacteria +eubacterium +eucaine +eucalypt +eucalyptol +eucalypts +eucalyptus +eucalyptuses +eucaryote +eucaryotes +eucharis +eucharises +euchlorine +euchologies +euchologion +euchologions +euchology +euchre +euchres +euclase +eucrite +eucrites +eudaemonist +eudaemonists +eudemonics +eudemonism +eudiometer +eugenicist +eugenicists +eugenics +eugenol +euhemerism +euhemerist +euhemerists +eukaryote +eukaryotes +eulachon +eulachons +eulogia +eulogies +eulogiser +eulogisers +eulogist +eulogists +eulogium +eulogiums +eulogizer +eulogizers +eulogy +eumelanin +eumelanins +eunuch +eunuchism +eunuchoid +eunuchoidism +eunuchs +euonymus +euonymuses +eupatrid +eupatrids +eupepsia +euphausiid +euphausiids +euphemism +euphemisms +euphonia +euphonies +euphonium +euphoniums +euphony +euphorbia +euphorbias +euphorbium +euphoria +euphoriant +euphoriants +euphrasies +euphrasy +euphroe +euphroes +euphuism +euphuisms +euphuist +euphuists +eureka +eurekas +eurhythmics +eurhythmies +eurhythmy +euripus +euripuses +europium +eurypterid +eurypterids +eurythmics +eurythmies +eurythmy +eusol +eustacy +eutaxy +eutectic +euthanasia +euthanasias +euthenics +euthenist +euthenists +eutherian +eutrophication +eutrophy +euxenite +evacuant +evacuants +evacuation +evacuations +evacuator +evacuators +evacuee +evacuees +evader +evaders +evagination +evaginations +evaluation +evaluations +evanescence +evanescences +evangel +evangeliary +evangelical +evangelicalism +evangelicalness +evangelicals +evangelisation +evangelisations +evangelism +evangelist +evangelistaries +evangelistary +evangelists +evangelization +evangelizations +evangels +evaporability +evaporate +evaporates +evaporation +evaporations +evaporator +evaporators +evaporimeter +evaporimeters +evaporite +evaporometer +evapotranspiration +evasion +evasions +evasiveness +eve +evection +evections +even +even-handedness +evener +evenfall +evenfalls +evening +evenings +evenness +evens +evensong +evensongs +event +eventfulness +eventide +eventides +eventration +eventrations +events +eventualities +eventuality +everglade +everglades +evergreen +evergreens +everlasting +everlastingness +eversion +eversions +everting +evertor +evertors +everydayness +eves +eviction +evictions +evictor +evictors +evidence +evidences +evil +evil-mindedness +evildoer +evildoers +evildoing +evilness +evils +evisceration +eviscerations +eviscerator +eviscerators +evocation +evocations +evocativeness +evocator +evocators +evoker +evokers +evolute +evolutes +evolution +evolutionism +evolutionist +evolutionists +evolutions +evolvement +evolvements +evolver +evolvers +evulsion +evulsions +evzone +evzones +ewe +ewe-neck +ewer +ewers +ewes +ex-serviceman +exacerbation +exacerbations +exacter +exacters +exaction +exactions +exactitude +exactitudes +exactness +exactor +exactors +exaggeration +exaggerations +exaggerator +exaggerators +exaltation +exaltations +exaltedness +exam +examen +examens +examinant +examinants +examination +examinations +examinee +examinees +examiner +examiners +example +examples +exams +exanimation +exanthem +exanthema +exanthemas +exanthems +exarch +exarchate +exarchates +exarchs +exasperation +exasperations +excavation +excavations +excavator +excavators +excellence +excellences +excellencies +excellency +excelsior +excelsiors +excentric +exception +exceptions +excerpt +excerption +excerptions +excerptor +excerptors +excerpts +excess +excesses +excessiveness +exchange +exchangeability +exchanger +exchangers +exchanges +exchequer +exchequers +excipient +excipients +excise +exciseman +excises +excision +excisions +excitability +excitableness +excitant +excitants +excitation +excitations +excitedness +excitement +excitements +exciter +exciters +exciton +excitons +excitor +excitors +exclaiming +exclamation +exclamations +exclaustration +exclaustrations +exclave +exclaves +exclosure +exclosures +excluder +excluders +exclusion +exclusionism +exclusionist +exclusionists +exclusions +exclusive +exclusiveness +exclusives +exclusivism +exclusivist +exclusivists +exclusivity +excogitation +excogitations +excogitator +excommunicate +excommunicates +excommunication +excommunications +excommunicator +excommunicators +excoriation +excoriations +excrement +excrescence +excrescences +excrescencies +excrescency +excreta +excreter +excreters +excreting +excretion +excretions +excruciation +excruciations +excudit +exculpation +exculpations +excursion +excursionist +excursionists +excursions +excursiveness +excursus +excursuses +excusableness +excusal +excusals +excuse +excuse-me +excuse-mes +excuser +excusers +excuses +exeat +exeats +execrableness +execration +execrations +executant +executants +executer +executers +executing +execution +executioner +executioners +executions +executive +executives +executor +executors +executorship +executorships +executrix +executrixes +exedra +exegesis +exegete +exegetes +exegetics +exemplar +exemplariness +exemplarity +exemplars +exemplification +exemplifications +exemplifier +exemplifiers +exemplum +exempt +exemption +exemptions +exempts +exenteration +exenterations +exequatur +exequaturs +exequies +exequy +exercise +exerciser +exercisers +exercises +exercising +exercitation +exercitations +exergue +exergues +exertion +exertions +exfoliation +exhalant +exhalants +exhalation +exhalations +exhaust +exhauster +exhausters +exhaustibility +exhaustion +exhaustions +exhaustiveness +exhausts +exhedra +exhibit +exhibiter +exhibiters +exhibition +exhibitioner +exhibitioners +exhibitionism +exhibitionist +exhibitionists +exhibitions +exhibitor +exhibitors +exhibits +exhilarant +exhilarants +exhilaration +exhilarations +exhilarator +exhortation +exhortations +exhorter +exhorters +exhumation +exhumations +exhumer +exhumers +exigencies +exigency +exiguity +exiguousness +exile +exiles +exine +exines +existence +existences +existent +existentialism +existentialist +existentialists +exit +exitance +exits +exobiologist +exobiologists +exobiology +exocarp +exocarps +exocrine +exode +exoderm +exodermis +exodermises +exoderms +exodes +exodus +exoduses +exoenzyme +exogamy +exogen +exon +exoneration +exonerations +exonerator +exonerators +exons +exonym +exonyms +exophthalmos +exoplasm +exoplasms +exopodite +exopodites +exorability +exorbitance +exorbitances +exorciser +exorcisers +exorcism +exorcisms +exorcist +exorcists +exorcizer +exorcizers +exordium +exordiums +exoskeleton +exoskeletons +exosmosis +exosphere +exospheres +exospore +exospores +exostosis +exotericism +exothermicity +exotic +exoticism +exoticisms +exoticness +exotics +exotoxin +exotoxins +expandability +expander +expanders +expanse +expanses +expansibility +expansion +expansionism +expansionist +expansionists +expansions +expansiveness +expansivity +expatiation +expatiations +expatiator +expatiators +expatriate +expatriates +expatriation +expatriations +expectancies +expectancy +expectant +expectants +expectation +expectations +expecter +expecters +expectorant +expectorants +expectoration +expectorations +expectorator +expectorators +expedience +expediences +expediencies +expediency +expedient +expedients +expeditation +expeditations +expediter +expediters +expedition +expeditions +expeditiousness +expeditor +expeditors +expellant +expellants +expellee +expellees +expeller +expellers +expelling +expendability +expendable +expendables +expender +expenders +expending +expenditure +expenditures +expense +expenses +expensiveness +experience +experiences +experientialism +experientialist +experiment +experimentalism +experimentalist +experimentation +experimenter +experimenters +experiments +expert +expertise +expertises +expertness +experts +expiation +expiations +expiator +expiators +expiration +expirations +expiries +expiry +explainer +explainers +explanation +explanations +explant +explantation +explantations +explants +expletive +expletives +explication +explications +explicator +explicators +explicitness +exploder +exploders +exploit +exploitation +exploitations +exploiter +exploiters +exploits +exploration +explorations +explorer +explorers +explosion +explosions +explosive +explosiveness +explosives +expo +exponent +exponential +exponentials +exponents +export +exportation +exportations +exporter +exporters +exporting +exports +expos +exposal +exposals +expose +exposedness +exposer +exposers +exposes +exposition +expositions +expositor +expositors +expostulation +expostulations +expostulator +expostulators +exposure +exposures +expounder +expounders +expounding +express +expressage +expressages +expresses +expression +expressionism +expressionist +expressionists +expressions +expressiveness +expressivities +expressivity +expressman +expresso +expressway +expressways +expropriation +expropriations +expropriator +expropriators +expulsion +expulsions +expunction +expunctions +expunger +expungers +expunging +expurgation +expurgations +expurgator +expurgators +exquisite +exquisiteness +exquisites +exsanguination +exsanguinity +exsection +exsections +exsertion +exsertions +exsiccation +exsiccations +exsiccator +exsiccators +extemporaneity +extemporaneousness +extemporariness +extemporisation +extemporization +extendability +extender +extenders +extendibility +extensibility +extensimeter +extensimeters +extension +extensionalism +extensionality +extensions +extensities +extensity +extensiveness +extensometer +extensometers +extensor +extensors +extent +extents +extenuation +extenuations +extenuator +extenuators +exterior +exteriorisation +exteriorization +exteriors +extermination +exterminations +exterminator +exterminators +extern +external +externalisation +externalism +externalist +externalists +externalities +externality +externalization +externals +externes +externs +exteroceptor +exteroceptors +exterritoriality +extinction +extinctions +extine +extines +extinguishant +extinguishants +extinguisher +extinguishers +extinguishing +extinguishment +extinguishments +extirpation +extirpations +extirpator +extirpators +extoller +extollers +extolment +extolments +extortion +extortioner +extortioners +extortionist +extortionists +extortions +extra +extract +extractability +extractant +extractants +extraction +extractions +extractive +extractives +extractor +extractors +extracts +extradition +extraditions +extrados +extradoses +extraneousness +extraordinariness +extrapolation +extrapolations +extrapolator +extrapolators +extraposition +extras +extravagance +extravagances +extravagancies +extravagancy +extravaganza +extravaganzas +extravasate +extravasates +extravasation +extravasations +extraversion +extraversions +extravert +extraverts +extreme +extremeness +extremes +extremism +extremist +extremists +extremities +extremity +extrication +extrications +extroversion +extroversions +extrovert +extroverts +extruder +extruders +extrusion +extrusions +exuberance +exuberances +exudate +exudates +exudation +exudations +exultation +exultations +exurb +exurbanite +exurbanites +exurbia +exurbs +exuviae +exuviation +exuviations +eyalet +eyalets +eyas +eyases +eye +eye-opener +eye-openers +eyeball +eyeballs +eyeblack +eyebolt +eyebolts +eyebright +eyebrights +eyebrow +eyebrows +eyecup +eyecups +eyeful +eyefuls +eyeglass +eyeglasses +eyehook +eyehooks +eyelash +eyelashes +eyelet +eyeleteer +eyeleteers +eyelets +eyelid +eyelids +eyeliner +eyeliners +eyepatch +eyepatches +eyes +eyeshade +eyeshades +eyesight +eyesore +eyesores +eyestalk +eyestalks +eyestrain +eyestrains +eyne +eyot +eyots +eyra +eyras +eyre +eyres +eyrie +eyries +eyry +f-hole +fa-la +fable +fabler +fablers +fables +fabliau +fabric +fabricant +fabricants +fabrication +fabrications +fabricator +fabricators +fabrics +fabulist +fabulists +fabulousness +faburden +faburdens +facade +facades +face +face-ache +face-lift +face-lifts +face-off +facer +facers +faces +facet +facetiousness +facets +facia +facial +facials +facias +facies +facileness +facilitation +facilitator +facilitators +facilities +facility +facing +facings +facsimile +facsimiles +fact +fact-finding +factice +faction +factionalism +factionalist +factionalists +factions +factiousness +factitiousness +factoid +factoids +factor +factorability +factorage +factorages +factorial +factorials +factories +factoring +factorisation +factorisations +factorization +factorizations +factors +factorship +factorships +factory +factotum +factotums +facts +factualities +factuality +factualness +facture +factures +facula +faculas +faculties +faculty +fad +faddishness +faddism +faddist +faddists +fade +fade-in +fade-out +fadedness +fader +faders +fades +fading +fadings +fado +fados +fads +faeces +faerie +faeries +faery +fag +faggot +faggoting +faggotings +faggots +fagot +fagoting +fagots +fags +fahlband +fahlbands +fail +failing +failings +faille +fails +failure +failures +faineancy +faint +fainter +faintishness +faintness +faints +fair +fairground +fairgrounds +fairies +fairing +fairings +fairness +fairs +fairway +fairways +fairy +fairyhood +fairyism +fairyland +fairylands +faith +faithful +faithfulness +faithlessness +faiths +faitour +faitours +fake +fakement +faker +fakers +fakery +fakes +fakir +fakirs +falafel +falafels +falbala +falbalas +falchion +falchions +falcon +falcon-gentil +falcon-gentils +falcon-gentle +falcon-gentles +falconer +falconers +falconet +falconets +falconry +falcons +falderal +falderals +faldstool +faldstools +fall +fallacies +fallaciousness +fallacy +fallal +fallaleries +fallalery +fallals +faller +fallers +fallfish +fallfishes +fallibilism +fallibilist +fallibilists +fallibility +fallibleness +falling +fallings +fallow +fallowness +fallows +falls +falsehood +falsehoods +falseness +falsetto +falsettos +falsework +falseworks +falsie +falsies +falsifiability +falsification +falsifications +falsifier +falsifiers +falsifying +falsities +falsity +faltboat +faltboats +falter +faltering +falterings +falters +falx +fame +fames +familiar +familiarisation +familiarities +familiarity +familiarization +familiars +families +familism +famille +family +famine +famines +famishment +famousness +famulus +famuluses +fan +fan-tan +fanatic +fanaticism +fanaticisms +fanatics +fancier +fanciers +fancies +fancifulness +fanciness +fancy +fancywork +fandangle +fandangles +fandango +fandangos +fandom +fane +fanes +fanfare +fanfares +fanfaron +fanfaronade +fanfaronades +fanfarons +fanfold +fang +fangle +fango +fangos +fangs +fanion +fanions +fanlight +fanlights +fanner +fanners +fannies +fanny +fanon +fanons +fans +fantail +fantails +fantasia +fantasias +fantasies +fantasist +fantasists +fantasm +fantasms +fantast +fantastic +fantasticality +fantasticalness +fantasts +fantasy +fantigue +fantod +fantods +fantom +fantoms +faqir +faqirs +faquir +faquirs +far +farad +faraday +faradays +faradisation +faradisations +faradism +faradization +faradizations +farads +farandole +farandoles +farawayness +farce +farces +farceur +farceurs +farceuse +farceuses +farcicality +farcy +fard +fardel +fardels +fards +fare +fare-stage +fare-stages +fares +farewell +farewells +farina +farinas +farl +farles +farls +farm +farmer +farmer-general +farmeries +farmers +farmery +farmhouse +farmhouses +farming +farmings +farmland +farms +farmstead +farmsteads +farmyard +farmyards +farnesol +farness +faro +farrago +farragoes +farragos +farrier +farriers +farriery +farrow +farrowing +farrows +farsightedness +farthing +farthingale +farthingales +farthings +fartlek +fascia +fascias +fasciation +fasciations +fascicle +fascicles +fasciculation +fascicule +fascicules +fasciculus +fascination +fascinations +fascinator +fascinators +fascine +fascines +fasciola +fasciolas +fascism +fascist +fascists +fash +fashes +fashion +fashionableness +fashioner +fashioners +fashioning +fashions +fast +fastback +fastbacks +fastball +fastballs +fastener +fasteners +fastening +fastenings +fastidiousness +fastigium +fastigiums +fasting +fastings +fastness +fastnesses +fasts +fat +fatalism +fatalist +fatalists +fatalities +fatality +fatback +fate +fatefulness +fates +father +father-in-law +fatherhood +fatherland +fatherlands +fatherliness +fathers +fathom +fathometer +fathometers +fathoms +fatigableness +fatigue +fatigues +fatling +fatlings +fatness +fats +fattener +fatteners +fattest +fatties +fattiness +fatty +fatuities +fatuity +fatuousness +fatwa +fatwas +faubourg +faubourgs +fauces +faucet +faucets +fault +fault-finding +faultiness +faultlessness +faults +faun +fauna +faunas +fauns +fauteuil +fauteuils +fauxbourdon +fauxbourdons +favism +favor +favorableness +favoredness +favorer +favorers +favorite +favorites +favoritism +favors +favour +favourableness +favouredness +favourer +favourers +favourite +favourites +favouritism +favours +favus +fawn +fawner +fawners +fawningness +fawns +fax +faxes +fay +fayalite +fays +fazenda +fazendas +fealties +fealty +fear +feares +fearfulness +fearlessness +fearnought +fears +feasibility +feasibleness +feast +feaster +feasters +feasting +feastings +feasts +feat +feather +featherbed +featherbedding +featherbeds +featheriness +feathering +featherings +feathers +feats +feature +features +febricities +febricity +febricula +febriculas +febrifacient +febrifuge +febrifuges +febrilities +febrility +feces +feck +fecklessness +fecks +fecula +feculence +fecundation +fecundities +fecundity +fed +fedayee +fedelini +federacies +federacy +federal +federalisation +federalisations +federalism +federalist +federalists +federalization +federalizations +federals +federation +federations +fedora +fedoras +feds +fee +feeble-mindedness +feebleness +feed +feedbag +feedbags +feeder +feeders +feeding +feedings +feedlot +feedlots +feeds +feedstuff +feedstuffs +feel +feeler +feelers +feeling +feelings +feels +fees +feet +feeze +feezes +feignedness +feigning +feignings +feint +feints +felafel +felafels +feldsher +feldshers +feldspar +feldspars +feldspathoid +feldspathoids +felicitation +felicitations +felicities +felicity +felid +feline +felines +felinity +fell +fella +fellah +fellahs +fellas +fellatio +fellation +fellations +fellatios +feller +fellers +fellies +fellmonger +fellmongers +fellness +felloe +felloes +fellow +fellow-man +fellows +fellowship +fellowships +fells +felly +felo-de-se +felon +felonies +feloniousness +felonries +felonry +felons +felony +felsite +felspar +felspars +felt +felting +feltings +felts +felucca +feluccas +felwort +felworts +female +femaleness +females +feme +femes +femineity +feminine +feminineness +feminines +femininity +feminisation +feminism +feminist +feminists +feminization +femme +femmes +femur +femurs +fen +fence +fencer +fencers +fences +fencible +fencibles +fencing +fencings +fend +fender +fenders +fends +fenestella +fenestellas +fenestra +fenestras +fenestration +fenestrations +fenland +fenlands +fenman +fennec +fennecs +fennel +fennels +fens +fenugreek +fenugreeks +feod +feodaries +feodary +feods +feoff +feoffee +feoffees +feoffer +feoffers +feoffment +feoffments +feoffor +feoffors +feoffs +fer-de-lance +feracity +fere +feres +feretories +feretory +ferity +fermata +fermatas +ferment +fermentability +fermentation +fermentations +fermentativeness +fermenting +ferments +fermi +fermion +fermions +fermis +fermium +fern +ferneries +fernery +ferns +ferociousness +ferocity +ferrate +ferrates +ferret +ferreter +ferreters +ferrets +ferriage +ferriages +ferricyanide +ferries +ferrimagnetism +ferrite +ferrites +ferritin +ferrochromium +ferroconcrete +ferrocyanide +ferroelectric +ferroelectricity +ferromagnetism +ferronickel +ferrotype +ferrotypes +ferrule +ferrules +ferry +ferrying +ferryman +fertilisation +fertilisations +fertiliser +fertilisers +fertility +fertilization +fertilizations +fertilizer +fertilizers +ferula +ferulas +ferule +ferules +fervency +fervidity +fervidness +fervor +fervour +fescue +fescues +fess +fesse +fesses +festa +fester +festering +festers +festination +festinations +festival +festivals +festiveness +festivities +festivity +festoon +festoonery +festoons +festschrift +festschrifts +feta +fetas +fetch +fetcher +fetchers +fetches +fetial +fetich +fetiches +fetichism +fetichisms +fetichist +fetichists +feticide +feticides +fetidness +fetish +fetishes +fetishism +fetishisms +fetishist +fetishists +fetlock +fetlocks +fetor +fetter +fetterlock +fetterlocks +fetters +fettle +fettles +fettling +fettlings +fettuccine +fettucine +fettucini +fetus +fetuses +feu +feuar +feuars +feud +feudalisation +feudalism +feudalist +feudalists +feudality +feudalization +feudatories +feudatory +feudist +feudists +feuds +feuilleton +feuilletonism +feuilletonist +feuilletonists +feuilletons +feus +fever +feverfew +feverfews +feverishness +fevers +few +fewness +fez +fezes +fiacre +fiacres +fianchetto +fianchettoes +fiar +fiars +fiasco +fiascoes +fiascos +fiat +fiats +fib +fibber +fibbers +fibbing +fiber +fiberboard +fiberboards +fiberglass +fibers +fiberscope +fiberscopes +fibre +fibreboard +fibreboards +fibreglass +fibres +fibril +fibrilla +fibrillation +fibrillations +fibrils +fibrin +fibrinogen +fibrinogens +fibrinolysin +fibro +fibroblast +fibroblasts +fibrocartilage +fibrocement +fibroid +fibroids +fibroin +fibrolite +fibrolites +fibroma +fibromas +fibros +fibrosis +fibrositis +fibs +fibster +fibsters +fibula +fibulas +fiche +fiches +fichu +fichus +fickleness +fico +ficos +fiction +fictionalisation +fictionalisations +fictionalization +fictionalizations +fictionist +fictionists +fictions +ficus +fid +fiddle +fiddle-back +fiddle-faddle +fiddle-faddler +fiddlehead +fiddleheads +fiddler +fiddlers +fiddles +fiddlestick +fiddlesticks +fiddlewood +fiddlewoods +fideism +fidelities +fidelity +fidget +fidgetiness +fidgets +fids +fiduciaries +fiduciary +fief +fiefs +field +fielder +fielders +fieldfare +fieldfares +fielding +fieldings +fieldmouse +fieldpiece +fieldpieces +fields +fieldsman +fieldstone +fieldstones +fieldwork +fieldworker +fieldworkers +fieldworks +fiend +fiendishness +fiends +fierceness +fieriness +fiesta +fiestas +fife +fifer +fifers +fifes +fifteen +fifteens +fifteenth +fifteenths +fifth +fifths +fifties +fiftieth +fiftieths +fifty +fig +fig-bird +fig-birds +fight +fighter +fighter-bomber +fighter-bombers +fighters +fighting +fightings +fights +figment +figments +figs +figuline +figulines +figurant +figurantes +figurants +figuration +figurations +figurativeness +figure +figurehead +figureheads +figures +figurine +figurines +figuring +figwort +figworts +fil +filagree +filagrees +filament +filaments +filariasis +filasse +filature +filatures +filbert +filberts +filcher +filchers +file +filename +filenames +filer +filers +files +filet +filiation +filiations +filibeg +filibegs +filibuster +filibusterer +filibusterers +filibusterism +filibusters +filicide +filicides +filigree +filigrees +filing +filings +filioque +fill +fille +filler +fillers +filles +fillet +filleting +fillets +fillies +filling +fillings +fillip +fillipeen +fillips +fillister +fillisters +fills +filly +film +filmdom +filmgoer +filmgoers +filminess +filming +filmland +filmographies +filmography +films +filmsetting +filmstrip +filoplume +filoplumes +filoselle +filoselles +fils +filter +filterability +filters +filth +filthiness +filtrability +filtrate +filtrates +filtration +filtrations +fimble +fimbles +fimbria +fimbrias +fimbriation +fimbriations +fin +finagler +finaglers +final +finale +finales +finalisation +finalism +finalist +finalists +finalities +finality +finalization +finals +finance +finances +financier +financiers +financing +finback +finbacks +finch +finches +find +finder +finders +finding +findings +finds +fine +fineness +fineries +finery +fines +finesse +finesses +finger +fingerboard +fingerboards +fingering +fingerings +fingerling +fingerlings +fingermark +fingermarks +fingernail +fingernails +fingerpost +fingerposts +fingerprint +fingerprinting +fingerprints +fingers +fingerstall +fingerstalls +fingertip +fingertips +finial +finials +finicalities +finicality +finicalness +fining +finings +finis +finises +finish +finisher +finishers +finishes +finishing +finishings +finiteness +finitude +fink +finks +finnan +finnans +finner +finners +fino +finocchio +finochio +finos +fins +fiord +fiords +fiorin +fiorins +fioritura +fipple +fipples +fir +fire +fire-eater +fire-eaters +fire-extinguisher +fire-extinguishers +fire-plow +fire-raiser +fire-raising +fire-worship +fireboat +fireboats +firebomb +firebombs +firebox +fireboxes +firebrand +firebrands +firebrat +firebrats +firebrick +firebricks +firebug +firebugs +firecrest +firecrests +firedamp +firedog +firedogs +fireflies +firefly +fireguard +fireguards +firehouse +firehouses +firelight +firelighter +firelighters +firelights +fireman +firepan +firepans +fireplace +fireplaces +fireproofing +firer +firers +fires +fireside +firesides +firestone +firestones +firetrap +firetraps +firewall +firewalls +fireweed +fireweeds +firewood +firework +fireworks +fireworm +fireworms +firing +firings +firkin +firkins +firm +firmament +firmaments +firman +firmans +firmness +firms +firmware +firn +firns +firs +first +first-aider +first-aiders +first-born +first-borns +first-foot +first-foots +first-nighter +first-nighters +firstling +firstlings +firsts +firth +firths +fisc +fiscal +fiscals +fiscs +fish +fish-hook +fish-hooks +fishbowl +fishbowls +fisher +fisheries +fisherman +fishers +fishery +fishes +fisheye +fisheyes +fishgig +fishgigs +fishiness +fishing +fishings +fishmonger +fishmongers +fishpond +fishponds +fishtail +fishtails +fishwife +fishyback +fission +fissions +fissiparousness +fissiped +fissure +fissures +fist +fistfight +fistfights +fistful +fistfuls +fistiana +fisticuff +fisticuffs +fistmele +fists +fistula +fistulas +fistulous +fit +fitch +fitches +fitchew +fitchews +fitfulness +fitment +fitments +fitness +fits +fitter +fitters +fitting +fittings +five +five-eighth +five-finger +fivepence +fivepences +fivepins +fiver +fivers +fives +fix +fixation +fixations +fixative +fixatives +fixedness +fixer +fixers +fixes +fixing +fixings +fixity +fixture +fixtures +fixure +fizgig +fizgigs +fizz +fizzer +fizzers +fizzes +fizzle +fizzles +fjord +fjords +flab +flabbiness +flabellum +flabellums +flabs +flaccidity +flaccidness +flack +flacks +flacon +flacons +flag +flag-waver +flag-wavers +flag-waving +flagella +flagellant +flagellantism +flagellants +flagellate +flagellates +flagellation +flagellations +flagellator +flagellators +flagellum +flageolet +flageolets +flagging +flagitiousness +flagman +flagon +flagons +flagpole +flagpoles +flagrance +flagrances +flagrancies +flagrancy +flags +flagship +flagships +flagstaff +flagstaffs +flagstone +flagstones +flail +flails +flair +flairs +flak +flake +flakes +flakiness +flaks +flam +flambeau +flambeaus +flamboyance +flamboyancy +flamboyant +flamboyantes +flamboyants +flame +flame-tree +flamen +flamenco +flamencos +flamens +flames +flamethrower +flamethrowers +flaming +flamingo +flamingoes +flamingos +flammability +flams +flan +flanch +flanches +flange +flanges +flank +flanker +flankers +flanks +flannel +flannelboard +flannelboards +flannelette +flannels +flans +flap +flapdoodle +flapjack +flapjacks +flapper +flappers +flapping +flaps +flare +flare-up +flare-ups +flares +flash +flashcube +flashcubes +flasher +flashers +flashes +flashiness +flashing +flashings +flashlight +flashlights +flask +flasket +flaskets +flasks +flat +flatboat +flatboats +flatcar +flatcars +flatfish +flatfishes +flathead +flatheads +flatiron +flatirons +flatlet +flatlets +flatmate +flatmates +flatness +flats +flatter +flatterer +flatterers +flatteries +flatters +flattery +flattest +flattie +flatties +flatting +flattop +flattops +flatulence +flatulency +flatus +flatuses +flatware +flatwares +flaunch +flaunches +flaunt +flaunter +flaunters +flaunting +flaunts +flautist +flautists +flavin +flavine +flavone +flavones +flavor +flavoring +flavorings +flavors +flavour +flavouring +flavourings +flavours +flaw +flawlessness +flaws +flax +flaxes +flayer +flayers +flea +fleam +fleams +fleas +fleawort +fleck +flecks +flection +flections +fledgeling +fledgelings +fledgling +fledglings +fleece +fleecer +fleecers +fleeces +fleeciness +fleer +fleers +fleet +fleetingly +fleetingness +fleetness +fleets +flesh +flesher +fleshers +fleshes +fleshiness +fleshliness +fletcher +fletchers +fleur-de-lis +fleur-de-lys +fleurette +fleurettes +fleuron +fleurons +flew +flews +flex +flexes +flexibility +flexibleness +flexion +flexions +flexitime +flexography +flexor +flexors +flexure +flexures +flibbertigibbet +flibbertigibbets +flick +flick-knife +flicker +flickers +flickertail +flicks +flier +fliers +flies +flight +flightiness +flights +flimsies +flimsiness +flimsy +flinch +flincher +flinchers +flinches +flinders +flindersia +flindersias +fling +flinger +flingers +flings +flint +flintiness +flintlock +flintlocks +flints +flip +flip-flop +flip-flops +flippancy +flippant +flippantness +flipper +flippers +flips +flirt +flirtation +flirtations +flirtatiousness +flirting +flirtings +flirts +flit +flitch +flitches +flite +flites +fliting +flits +flivver +flivvers +float +floatage +floatages +floatation +floatations +floater +floaters +floatplane +floats +floccillation +flocculation +floccule +flocculence +floccules +flocculus +floccus +flock +flocks +floe +floes +flogger +floggers +flogging +floggings +flong +flongs +flood +floodgate +floodgates +flooding +floodings +floodlight +floodlights +floods +floodwater +floodwaters +floor +floorboard +floorboards +floorcloth +floorcloths +floorer +floorers +flooring +floorings +floors +floorwalker +floorwalkers +floozie +floozies +floozy +flop +flophouse +flophouses +floppies +floppiness +flopping +floppy +flops +flor +flora +floras +florence +florences +florescence +florescences +floret +florets +floribunda +floribundas +floriculture +floriculturist +floriculturists +floridity +floridness +florigen +florigens +florilegium +florin +florins +florist +floristics +florists +floss +flosses +flotage +flotages +flotation +flotations +flotilla +flotillas +flotsam +flounce +flounces +flouncing +flouncings +flounder +flounders +flour +flourish +flourishes +flours +flouter +flouters +flow +flow-on +flow-ons +flowage +flowages +flower +flower-de-luce +flowerage +flowerages +flowerer +flowerers +floweret +flowerets +floweriness +flowering +flowerings +flowerpot +flowerpots +flowers +flowing +flowingness +flows +flu +flub +flubs +fluctuation +fluctuations +flue +fluency +fluentness +flues +fluff +fluffiness +fluffs +flugelhorn +flugelhorns +flugelman +fluid +fluidics +fluidisation +fluidisations +fluidity +fluidization +fluidizations +fluidness +fluids +fluke +flukes +flume +flumes +flummeries +flummery +flump +flumps +flunk +flunkey +flunkeyism +flunkeys +flunkies +flunks +flunky +fluor +fluorescein +fluorescence +fluoridation +fluoride +fluorides +fluorimeter +fluorimeters +fluorination +fluorine +fluorite +fluorocarbon +fluorocarbons +fluorochrome +fluorometer +fluorometers +fluoroscope +fluoroscopes +fluoroscopy +fluorosis +fluorspar +flurries +flurry +flus +flush +flusher +flushers +flushes +flushness +fluster +flusters +flute +fluter +fluters +flutes +fluting +flutings +flutist +flutists +flutter +fluttering +flutters +flux +fluxes +fluxion +fluxions +fly +fly-by-night +fly-fishing +flyaway +flyback +flybelt +flybelts +flyblow +flyblows +flyboat +flyboats +flybook +flybooks +flycatcher +flycatchers +flyer +flyers +flying +flyings +flyleaf +flyover +flyovers +flypaper +flypapers +flypast +flypasts +flyspeck +flyway +flyways +flyweight +flyweights +flywheel +flywheels +fo'c's'le +fo'c's'les +foal +foals +foam +foaminess +foams +fob +fobs +focalisation +focalization +foci +focus +focuses +focusing +focussing +fodder +fodders +foe +foehn +foehns +foeman +foes +foeticide +foeticides +foetor +foetus +foetuses +fog +fogey +fogeys +foggage +foggages +fogginess +foghorn +foghorns +fogies +fogram +fograms +fogs +fogsignal +fogsignals +fogy +fogyism +foible +foibles +foil +foiling +foilings +foils +foin +foins +foison +folacin +folate +fold +foldboat +foldboats +folder +folderol +folderols +folders +folding +foldings +folds +folia +foliage +foliages +foliation +foliations +foliature +foliatures +folie +folio +foliole +folioles +folios +folium +folk +folk-rock +folklore +folklorist +folklorists +folkmoot +folkmoots +folks +folksiness +folktale +folktales +follicle +follicles +follies +follow +follow-my-leader +follow-on +follow-ons +follow-through +follow-throughs +follow-up +follow-ups +follower +followers +following +followings +follows +folly +fomentation +fomentations +fomenter +fomenters +fomes +fond +fondant +fondants +fondler +fondlers +fondling +fondlings +fondness +fonds +fondue +fondues +font +fontanel +fontanelle +fontanelles +fontanels +fontange +fontanges +fonts +food +foods +foodstuff +foodstuffs +fool +fooleries +foolery +foolhardiness +foolishness +fools +foolscap +foot +foot-candle +foot-lambert +foot-pound +foot-pounds +foot-ton +footage +footages +football +footballer +footballers +footballs +footbath +footbaths +footboard +footboards +footboy +footboys +footbridge +footbridges +footcloth +footcloths +footer +footfall +footfalls +footgear +foothill +foothills +foothold +footholds +footie +footing +footings +footle +footles +footlight +footlights +footman +footmark +footmarks +footnote +footnotes +footpace +footpaces +footpad +footpads +footpath +footpaths +footplate +footplates +footprint +footprints +footrest +footrests +foots +footsie +footslogger +footsloggers +footstalk +footstalks +footstep +footsteps +footstool +footstools +footway +footways +footwear +footwork +footy +foozle +foozles +fop +fopperies +foppery +foppishness +fops +forage +forager +foragers +forages +foraging +foramen +foraminifer +foraminifers +foray +forayer +forayers +forays +forb +forbear +forbearance +forbears +forbiddance +forbiddances +forbidder +forbidding +forbiddingness +forbiddings +forbs +force +force-feed +force-feeds +forcedness +forcefulness +forcemeat +forcemeats +forceps +forcepses +forcer +forcers +forces +forcibility +forcibleness +ford +fording +fords +fore +fore-and-after +fore-and-afters +fore-edge +fore-topsail +forearm +forearms +forebear +forebears +foreboder +foreboders +foreboding +forebodings +forecast +forecaster +forecasters +forecasting +forecastle +forecastles +forecasts +foreclosure +foreclosures +forecourse +forecourses +forecourt +forecourts +foredeck +foredecks +forefather +forefathers +forefeel +forefeels +forefinger +forefingers +forefoot +forefront +forefronts +foregoer +foregoers +foregoneness +foreground +foregrounds +foregut +foreguts +forehand +forehands +forehead +foreheads +forehock +foreigner +foreigners +foreignism +foreignness +foreknowledge +forel +foreland +forelands +foreleg +forelegs +forelimb +forelimbs +forelock +forelocks +forels +foreman +foremast +foremasts +forename +forenames +forenoon +forenoons +forensicality +forensics +foreordination +foreordinations +forepart +foreparts +forepaw +forepaws +forepeak +forepeaks +foreplay +forequarter +forequarters +forerunner +forerunners +fores +foresail +foresails +foreseeability +foreseer +foreseers +foreshadowing +foreshadowings +foresheet +foresheets +foreshock +foreshocks +foreshore +foreshores +foreside +foresides +foresight +foresightedness +foresights +foreskin +foreskins +forest +forestage +forestages +forestaller +forestallers +forestalling +forestallings +forestalment +forestalments +forestation +forestations +forestay +forestays +forester +foresters +forestry +forests +foretaste +foretastes +foreteller +foretellers +foretelling +forethought +forethoughts +foretime +foretimes +foretoken +foretokens +foretooth +foretop +foretops +forever +forewarning +forewarnings +forewind +forewinds +forewing +forewings +forewoman +foreword +forewords +foreyard +foreyards +forfeit +forfeiter +forfeits +forfeiture +forfeitures +forge +forger +forgeries +forgers +forgery +forges +forget-me-not +forget-me-nots +forgetfulness +forgetter +forgetters +forgettery +forging +forgings +forgiveness +forgiver +forgivers +forgivingness +forgoer +forgoers +forgoing +forint +forints +fork +forkedness +forkiness +forking +forklift +forklifts +forks +forlana +forlanas +forlornness +form +formal +formaldehyde +formalin +formalisation +formalisations +formalism +formalisms +formalist +formalists +formalities +formality +formalization +formalizations +formant +formants +format +formate +formates +formation +formations +formative +formats +formatting +forme +former +formers +formes +formicaries +formicarium +formicary +formication +formications +formidability +formidableness +formlessness +formol +forms +formula +formularies +formularisation +formularising +formularization +formularizing +formulary +formulas +formulation +formulations +formulator +formulators +formulism +formulist +formulists +formwork +fornent +fornication +fornications +fornicator +fornicators +fornicatress +fornicatresses +fornix +fornixes +forsakenness +forsaking +forsakings +forswearing +forswornness +forsythia +forsythias +fort +fortalice +fortalices +forte +fortepiano +fortepianos +fortes +forthrightness +forties +fortieth +fortieths +fortification +fortifications +fortifier +fortifiers +fortis +fortissimo +fortissimos +fortitude +fortitudes +fortnight +fortnightlies +fortnightly +fortnights +fortress +fortresses +forts +fortuitism +fortuitist +fortuitists +fortuitousness +fortuity +fortunateness +fortune +fortune-hunter +fortune-hunters +fortune-teller +fortune-tellers +fortunes +forty +forty-five +forty-niner +forum +forums +forward +forwarder +forwarders +forwarding +forwardings +forwardness +forwards +forzando +forzandos +fossa +fossas +fosse +fosses +fossette +fossettes +fossicker +fossil +fossilisation +fossilisations +fossilization +fossilizations +fossils +fossor +fossors +fossula +fossulas +fosterage +fosterages +fosterer +fosterers +fostering +fosterings +fosterling +fosterlings +fostress +fostresses +fother +fothergilla +fothergillas +fothers +foul +foul-up +foul-ups +foulard +foulards +foulmart +foulmarts +foulness +fouls +foumart +foumarts +found +foundation +foundations +founder +foundering +founders +founding +foundings +foundling +foundlings +foundress +foundresses +foundries +foundry +founds +fount +fountain +fountains +founts +four +four-ball +four-in-hand +four-in-hands +four-poster +four-posters +four-pounder +four-pounders +four-wheeler +four-wheelers +fourchette +fourchettes +fourgon +fourgons +fourpence +fourpences +fours +fourscore +fourscores +foursome +foursomes +foursquare +fourteen +fourteener +fourteeners +fourteens +fourteenth +fourteenths +fourth +fourths +fouter +fouters +fovea +foveola +foveolas +foveole +foveoles +fowl +fowler +fowlers +fowling +fowlings +fowls +fox +fox-hunting +foxberries +foxberry +foxes +foxfire +foxglove +foxgloves +foxhole +foxholes +foxhound +foxhounds +foxiness +foxing +foxings +foxtrot +foxtrots +foy +foyer +foyers +foys +foziness +fracas +fractal +fractals +fraction +fractionation +fractionations +fractionator +fractionators +fractionisation +fractionization +fractions +fractiousness +fracture +fractures +fraenum +fragging +fraggings +fragileness +fragility +fragment +fragmentariness +fragmentary +fragmentation +fragmentations +fragments +fragrance +fragrances +fragrancies +fragrancy +fragrantness +frail +frailness +frails +frailties +frailty +fraise +fraises +framboesia +framboise +framboises +frame +frame-up +frame-ups +framer +framers +frames +framework +frameworks +framing +framings +franc +franc-tireur +franchise +franchisees +franchisement +franchisements +franchiser +franchisers +franchises +francium +francolin +francolins +francophil +francophile +francophiles +francophils +francophobe +francophobes +francophone +francophones +francs +frangibility +frangipane +frangipanes +frangipani +frangipanis +frank +frankalmoign +franker +frankfurter +frankfurters +frankincense +franklin +franklinite +franklins +frankness +franks +franticness +frass +frat +fratch +fratches +fratching +frater +fraternisation +fraternisations +fraterniser +fraternisers +fraternities +fraternity +fraternization +fraternizations +fraternizer +fraternizers +fraters +fratricide +fratricides +fratries +fratry +frats +frau +fraud +frauds +fraudulence +fraudulency +fraught +fraus +fray +frays +frazil +frazils +frazzle +frazzles +freak +freak-out +freak-outs +freakiness +freakishness +freaks +freckle +freckles +free +free-for-all +free-for-alls +free-liver +free-livers +free-living +free-reed +free-spokenness +free-trader +free-traders +freebie +freebies +freebooter +freebooters +freebooty +freedman +freedom +freedoms +freedwoman +freehold +freeholder +freeholders +freeholds +freeing +freeloader +freeloaders +freeloading +freeloadings +freeman +freemartin +freemartins +freemason +freemasonry +freemasons +freeness +freer +freers +frees +freesheet +freesheets +freesia +freesias +freestone +freestones +freeware +freeway +freeways +freewheel +freewheels +freewoman +freeze +freeze-up +freezer +freezers +freezes +freezing +freight +freightage +freightages +freighter +freighters +freightliner +freightliners +freights +fremitus +fremituses +french +frenulum +frenum +frenzies +frenzy +frequence +frequences +frequencies +frequency +frequentation +frequentations +frequentative +frequenter +frequenters +frequentness +fresco +frescoer +frescoers +frescoes +frescos +fresh +freshener +fresheners +fresher +freshers +freshes +freshet +freshets +freshman +freshmanship +freshmanships +freshness +freshwater +fresnel +fresnels +fret +fretfulness +frets +fretsaw +fretsaws +fretwork +friability +friableness +friar +friarbird +friarbirds +friaries +friars +friary +fribble +fribbler +fribblers +fribbles +fricandeau +fricassee +fricassees +fricative +fricatives +friction +frictions +fridge +fridges +friedcake +friend +friendlessness +friendlies +friendliness +friendly +friends +friendship +friendships +frier +friers +fries +frieze +friezes +friezing +frigate +frigates +frigger +friggers +fright +frightener +frighteners +frightening +frightfulness +frights +frigidarium +frigidity +frigidness +frijol +frijole +frijoles +frill +frilling +frillings +frills +fringe +fringes +fringillid +fripperies +frippery +frippet +frippets +fris +frises +frisette +frisettes +friseur +friseurs +frisian +frisk +frisker +friskers +frisket +friskets +friskiness +frisking +friskings +frisks +frisson +frissons +frit +frith +friths +frithstool +frithstools +fritillaries +fritillary +frits +fritter +fritterer +fritterers +fritters +frivolities +frivolity +frivolousness +friz +frizes +frizz +frizzes +frizzle +frizzles +frock +frocking +frocks +froe +froes +frog +frogbit +frogbits +frogfish +frogfishes +frogging +frogman +frogmarch +frogmarches +frogmouth +frogmouths +frogs +frolic +frolicker +frolickers +frolics +frolicsomeness +fromenties +fromenty +frond +frondescence +fronds +front +front-page +front-runner +front-runners +frontage +frontages +frontal +frontals +frontier +frontiers +frontiersman +frontispiece +frontispieces +frontlet +frontlets +frontogenesis +frontolysis +fronton +frontons +fronts +frost +frostbite +frostbites +frostiness +frosting +frosts +frostwork +frostworks +froth +frothiness +froths +frottage +frottages +frotteur +frotteurs +frounce +frow +frowardness +frown +frowns +frows +frowst +frowstiness +frowsts +fructification +fructifications +fructose +frugalities +frugality +fruit +fruitage +fruitarian +fruitarians +fruiter +fruiterer +fruiterers +fruiteries +fruitery +fruitfulness +fruitiness +fruition +fruitions +fruitlessness +fruitlet +fruitlets +fruits +fruitwood +fruitwoods +frumenties +frumenty +frump +frumpiness +frumpishness +frumps +frustrating +frustration +frustrations +frustule +frustules +frustum +frustums +fry +fryer +fryers +frying +fryings +fuchsia +fuchsias +fuchsite +fucoid +fucoids +fucus +fucuses +fuddle +fuddles +fuddy-duddies +fuddy-duddy +fudge +fudges +fuel +fueller +fuellers +fuels +fug +fugaciousness +fugacity +fugato +fugatos +fughetta +fughettas +fugitive +fugitiveness +fugitives +fugleman +fugs +fugue +fugues +fuguist +fuguists +fulcrum +fulcrums +fulfiller +fulfillers +fulfillment +fulfillments +fulfilment +fulfilments +fulgor +fulguration +fulgurations +fulgurite +fulham +fulhams +full +full-frontal +full-length +full-scale +fullam +fullams +fullback +fullbacks +fuller +fullers +fullness +fulls +fulmar +fulmars +fulminate +fulminates +fulmination +fulminations +fulness +fulsomeness +fumage +fumages +fumarole +fumaroles +fumatories +fumatorium +fumatoriums +fumatory +fumble +fumbler +fumblers +fumbles +fume +fumes +fumet +fumets +fumigant +fumigants +fumigation +fumigations +fumigator +fumigators +fumitories +fumitory +fun +funambulist +funambulists +function +functional +functionalism +functionalist +functionalists +functionaries +functionary +functioning +functions +fund +fundament +fundamental +fundamentalism +fundamentalist +fundamentalists +fundamentality +fundamentals +fundaments +fundi +fundies +funding +fundings +funds +fundus +funeral +funerals +funfair +funfairs +fungi +fungible +fungibles +fungicide +fungicides +fungosity +fungus +funguses +funicle +funicles +funicular +funiculars +funiculus +funk +funkia +funkias +funks +funned +funnel +funnel-web +funnel-webs +funnels +funnies +funniness +funning +funny +funs +funster +funsters +fur +furan +furane +furanes +furans +furbelow +furbelows +furbisher +furbishers +furcation +furcations +furcula +furculas +furfur +furfural +furfuraldehyde +furfuran +furfurol +furfurs +furies +furioso +furiosos +furiousness +furl +furlana +furlanas +furlong +furlongs +furlough +furloughs +furls +furmenties +furmenty +furnace +furnaces +furnisher +furnishers +furnishing +furnishings +furniture +furor +furore +furores +furors +furphies +furphy +furrier +furrieries +furriers +furriery +furriness +furring +furrings +furrow +furrows +furs +furtherance +furtherances +furtherer +furtherers +furtiveness +furuncle +furuncles +furunculosis +fury +furze +fusain +fusains +fusarole +fusaroles +fuse +fusee +fusees +fuselage +fuselages +fuses +fusibility +fusil +fusilier +fusiliers +fusillade +fusillades +fusils +fusion +fusionism +fusionist +fusionists +fusions +fuss +fuss-budget +fusser +fussers +fusses +fussiness +fustanella +fustanellas +fustet +fustets +fustian +fustians +fustic +fustics +fustigation +fustigations +fustiness +futhark +futilitarian +futilitarians +futilities +futility +futon +futons +futtock +futtocks +future +futures +futurism +futurist +futurists +futurities +futurity +futurology +fuze +fuzee +fuzees +fuzes +fuzz +fuzzes +fuzziness +fyke +fykes +fylfot +fylfots +fyrd +fyrds +fytte +fyttes +gab +gabardine +gabardines +gabbard +gabbards +gabber +gabbers +gabble +gabbler +gabblers +gabbles +gabbro +gabbros +gabelle +gabelles +gaberdine +gaberdines +gaberlunzie +gaberlunzies +gabfest +gabfests +gabies +gabion +gabionade +gabionades +gabions +gable +gables +gablet +gablets +gabs +gaby +gad +gadabout +gadabouts +gadder +gadders +gades +gadflies +gadfly +gadget +gadgeteer +gadgeteers +gadgetry +gadgets +gadling +gadoid +gadoids +gadolinite +gadolinium +gadroon +gadrooning +gadroonings +gadroons +gads +gadwall +gadwalls +gaff +gaff-topsail +gaffe +gaffer +gaffers +gaffes +gaffs +gag +gag-bit +gage +gages +gagger +gaggers +gaggle +gaggles +gagman +gags +gagster +gagsters +gahnite +gaiety +gaillard +gaillards +gain +gainer +gainers +gainfulness +gainlessness +gains +gainsayer +gainsayers +gait +gaiter +gaiters +gaits +gal +gala +galactagogue +galactagogues +galactometer +galactometers +galactopoietic +galactose +galago +galagos +galah +galahs +galangal +galangals +galantine +galantines +galapagos +galas +galatea +galaxies +galaxy +galbanum +gale +galea +galeas +galena +galenite +gales +galilee +galilees +galimatias +galimatiases +galingale +galingales +galiot +galiots +galipot +gall +gallant +gallantness +gallantries +gallantry +gallants +gallate +gallates +galleass +galleasses +galleon +galleons +galleria +gallerias +galleries +gallery +galleryite +galleryites +gallet +galleting +gallets +galley +galleys +galliambic +galliambics +galliard +galliardise +galliardises +galliards +galliass +gallicism +gallicisms +gallimaufries +gallimaufry +gallinule +gallinules +galliot +galliots +gallipot +gallipots +gallium +galliwasp +galliwasps +galloglass +galloglasses +gallon +gallonage +gallonages +gallons +galloon +galloons +gallop +gallopade +gallopades +galloper +gallopers +gallops +gallowglass +gallowglasses +gallows +gallowses +galls +gallus +galluses +galoot +galoots +galop +galops +galosh +galoshes +gals +galvanisation +galvanisations +galvaniser +galvanisers +galvanism +galvanization +galvanizations +galvanize +galvanizer +galvanizers +galvanizes +galvanizing +galvanometer +galvanometers +galvanometry +galvanoplasty +galvanoscope +galvanoscopes +gam +gamb +gamba +gambado +gambadoes +gambados +gambas +gambeson +gambesons +gambier +gambit +gambits +gamble +gambler +gamblers +gambles +gambling +gamboge +gambol +gambols +gambrel +gambrels +gambs +game +gamecock +gamecocks +gamekeeper +gamekeepers +gamelan +gamelans +gameness +gamer +games +gamesmanship +gamesomeness +gamest +gamester +gamesters +gametangium +gamete +gametes +gametocyte +gametocytes +gametogenesis +gametophyte +gametophytes +gamin +gamine +gamines +gaminess +gaming +gamings +gamins +gamma +gammadion +gammas +gammer +gammers +gammon +gammoner +gammoners +gammoning +gammonings +gammons +gamogenesis +gamp +gamps +gams +gamut +gamuts +gander +ganders +gang +gangbang +gangbangs +gangboard +gangboards +ganger +gangers +gangland +ganglands +ganglia +ganglion +ganglions +gangplank +gangplanks +gangrel +gangrels +gangrene +gangrenes +gangs +gangster +gangsters +gangue +gangues +gangway +gangways +ganister +ganja +gannet +gannets +ganoid +ganoids +ganoin +ganoine +gansey +ganseys +gantlet +gantlets +gantline +gantlines +gantlope +gantries +gantry +gaol +gaoler +gaolers +gaols +gap +gape +gaper +gapers +gapes +gapeseed +gapeseeds +gapeworm +gapeworms +gapping +gaps +gar +garage +garages +garb +garbage +garbages +garbanzo +garbanzos +garbes +garble +garbler +garblers +garbles +garbo +garboard +garboards +garboil +garbology +garbos +garbs +garden +gardener +gardeners +gardenia +gardenias +gardening +gardens +garderobe +garderobes +gare +garefowl +garefowls +garfish +garfishes +garganey +garganeys +garget +gargle +gargles +gargoyle +gargoyles +gargoylism +garibaldi +garibaldis +garishness +garland +garlands +garlic +garlics +garment +garments +garner +garners +garnet +garnets +garnierite +garnish +garnishee +garnishees +garnisher +garnishers +garnishes +garnishment +garnishments +garniture +garnitures +garotte +garotter +garotters +garottes +garpike +garpikes +garret +garreteer +garreteers +garrets +garrison +garrisons +garrot +garrote +garrotes +garrots +garrotte +garrotter +garrotters +garrottes +garrulity +garrulousness +garrya +garryas +gars +garter +garters +garth +garths +garuda +garudas +gas +gas-plant +gascon +gascons +gaseity +gaselier +gaseliers +gaseousness +gases +gash +gashes +gasification +gasifier +gasifiers +gasket +gaskets +gaskin +gaskins +gaslight +gaslights +gasman +gasogene +gasohol +gasohols +gasolene +gasolier +gasoliers +gasoline +gasometer +gasometers +gasometry +gasp +gasper +gaspereau +gaspers +gasps +gasser +gassers +gassiness +gassing +gassings +gaster +gasteropod +gasteropods +gastralgia +gastralgic +gastrectomies +gastrectomy +gastrin +gastritis +gastrocnemius +gastroenteritis +gastroenterologist +gastroenterology +gastrology +gastronome +gastronomes +gastronomy +gastropod +gastropods +gastroscope +gastroscopes +gastrostomies +gastrostomy +gastrotomies +gastrotomy +gastrula +gastrulas +gastrulation +gat +gate +gateau +gateaus +gatecrasher +gatecrashers +gatefold +gatefolds +gatehouse +gatehouses +gateman +gatepost +gateposts +gates +gateway +gateways +gather +gatherer +gatherers +gathering +gatherings +gathers +gator +gators +gats +gaucheness +gaucherie +gaucheries +gaucho +gauchos +gaud +gaudeamus +gaudery +gaudies +gaudiness +gauds +gaudy +gauffer +gauffering +gauffers +gauge +gauger +gaugers +gauges +gaultheria +gaultherias +gauntlet +gauntlets +gauntness +gauntries +gauntry +gaur +gaurs +gauss +gausses +gauze +gauzes +gauziness +gavage +gavages +gavel +gavelkind +gavelkinds +gavelock +gavelocks +gavels +gavial +gavials +gavotte +gavottes +gawk +gawkiness +gawks +gay +gayal +gayals +gayety +gayness +gays +gazania +gazanias +gaze +gazebo +gazeboes +gazebos +gazelle +gazelles +gazer +gazers +gazes +gazette +gazetteer +gazetteers +gazettes +gazogene +gazogenes +gazpacho +gazpachos +gazump +gazumps +gean +geans +geanticlinal +geanticline +geanticlines +gear +gearbox +gearboxes +gearing +gears +gearstick +gearsticks +geck +gecko +geckoes +geckos +gecks +gee +gee-gee +gee-gees +geebung +geebungs +geegaw +geegaws +geek +geeks +gees +geese +geezer +geezers +gegenschein +geisha +geishas +geitonogamy +gel +gelada +geladas +gelatin +gelatination +gelatinations +gelatine +gelatinisation +gelatinisations +gelatiniser +gelatinisers +gelatinization +gelatinizations +gelatinizer +gelatinizers +gelatinoid +gelatinoids +gelation +geld +gelder +gelders +gelding +geldings +gelds +gelidity +gelidness +gelignite +gelly +gels +gelt +gelts +gem +gemel +gemels +gemination +geminations +gemma +gemmation +gemmed +gemming +gemmologist +gemmologists +gemmulation +gemmule +gemmules +gemologist +gemologists +gemology +gemot +gemots +gems +gemsbok +gemsboks +gemstone +gemstones +gen +gena +genappe +genas +gendarme +gendarmerie +gendarmeries +gendarmes +gender +genders +gene +genealogies +genealogist +genealogists +genealogy +genera +general +generalisation +generalisations +generalissimo +generalissimos +generalist +generalists +generalities +generality +generalization +generalizations +generals +generalship +generalships +generation +generations +generator +generators +generatrix +generosities +generosity +generousness +genes +genesis +genet +genethlialogy +geneticist +geneticists +genetics +genets +geneva +genevas +genialities +geniality +genialness +geniculation +genie +genies +genii +genip +genipap +genipaps +genips +genista +genistas +genitalia +genitals +genitive +genitives +genitor +genitors +geniture +genius +geniuses +genizah +genizahs +genoa +genoas +genocide +genocides +genome +genomes +genotype +genotypes +genre +genres +gens +gent +genteelism +genteelisms +genteelness +gentes +gentian +gentianella +gentianellas +gentians +gentile +gentiles +gentilesse +gentilism +gentilities +gentility +gentle +gentlehood +gentleman +gentleman-at-arms +gentleman-commoner +gentlemanliness +gentleness +gentles +gentlewoman +gentries +gentrification +gentrifications +gentry +gents +genu +genuflection +genuflections +genuflexion +genuflexions +genuineness +genus +genuses +geochemist +geochemistry +geochemists +geochronologist +geochronology +geode +geodes +geodesic +geodesist +geodesists +geodesy +geodynamics +geognosy +geographer +geographers +geography +geoid +geoids +geologise +geologises +geologist +geologists +geology +geomagnetism +geomagnetist +geomagnetists +geomancer +geomancers +geomancy +geomedicine +geometer +geometers +geometrician +geometricians +geometrid +geometrids +geometries +geometry +geomorphologist +geomorphology +geophagist +geophagists +geophagy +geophysicist +geophysicists +geophysics +geophyte +geophytes +geopolitician +geopoliticians +geopolitics +geoponics +georgette +georgic +georgics +geoscience +geosphere +geostatics +geostrategy +geosynclinal +geosyncline +geosynclines +geotaxis +geotropism +gerah +gerahs +geraniol +geranium +geraniums +gerbera +gerberas +gerbil +gerbille +gerbilles +gerbils +gerent +gerents +gerenuk +gerenuks +gerfalcon +gerfalcons +geriatric +geriatrician +geriatricians +geriatrics +geriatrist +geriatrists +germ +german +germander +germanders +germaneness +germanium +germans +germen +germens +germicide +germicides +germinal +germination +germinations +germs +gerontocracies +gerontocracy +gerontologist +gerontologists +gerontology +gerrymander +gerrymanderer +gerrymanderers +gerrymanders +gerund +gerundive +gerundives +gerunds +gesneria +gesnerias +gesso +gessoes +gest +gestalt +gestalts +gestation +gestations +geste +gestes +gesticulation +gesticulations +gesticulator +gesticulators +gests +gesture +gestures +get +get-out +get-together +get-togethers +get-up-and-go +geta +getas +getaway +getaways +gets +getter +gettering +getterings +getters +getting +gettings +geum +geums +gewgaw +gewgaws +geyser +geyserite +geyserites +geysers +gharial +gharials +gharries +gharry +ghastliness +ghat +ghats +ghaut +ghauts +ghazal +ghazals +ghazi +ghazis +ghee +ghees +gherao +gheraos +gherkin +gherkins +ghetto +ghettoes +ghettos +ghillie +ghillies +ghost +ghostliness +ghosts +ghoul +ghoulishness +ghouls +ghyll +ghylls +giant +giantess +giantesses +giantism +giants +giaour +giaours +gib +gibber +gibberellin +gibberellins +gibberish +gibbers +gibbet +gibbets +gibbon +gibbons +gibbosity +gibbousness +gibbsite +gibe +giber +gibers +gibes +giblet +giblets +gibs +gibus +gibuses +gid +giddiness +gidgee +gidgees +gift +giftedness +gifts +giftwrapping +gig +gigabyte +gigabytes +gigahertz +gigantism +gigantomachia +gigantomachias +gigantomachies +gigantomachy +gigawatt +gigawatts +giggle +giggler +gigglers +giggles +giglet +giglets +gigolo +gigolos +gigot +gigots +gigs +gigue +gigues +gila +gilas +gilbert +gilberts +gild +gilder +gilders +gilding +gildings +gilds +gilet +gilets +gilgai +gilgais +gill +gillie +gillies +gilling +gillion +gillions +gills +gilly +gillyflower +gillyflowers +gilsonite +gilt +gilts +gimbals +gimcrack +gimcrackery +gimcracks +gimlet +gimlets +gimmal +gimmals +gimmick +gimmickries +gimmickry +gimmicks +gimp +gimps +gin +gingal +gingals +gingellies +gingelly +ginger +gingerbread +gingerbreads +gingers +gingersnap +gingersnaps +gingham +ginghams +gingili +gingilis +gingiva +gingivitis +gingko +gingkoes +ginglymus +ginglymuses +gink +ginkgo +ginkgoes +ginks +ginnel +ginnels +ginner +ginneries +ginners +ginnery +gins +ginseng +ginsengs +gip +gips +gipsies +gipsy +giraffe +giraffes +girandola +girandolas +girandole +girandoles +girasol +girasoles +girasols +gird +girder +girders +girdle +girdler +girdlers +girdles +girds +girl +girlfriend +girlfriends +girlhood +girlhoods +girlie +girlies +girlishness +girls +girn +girns +giro +giron +girons +giros +girosol +girosols +girth +girthline +girthlines +girths +gisarme +gisarmes +gist +gists +git +gites +gits +gittern +gitterns +give +give-and-take +giveaway +giveaways +given +givenness +giver +givers +gives +giving +givings +gizmo +gizmos +gizzard +gizzards +glabella +glacialist +glacialists +glaciation +glaciations +glacier +glaciers +glaciologist +glaciologists +glaciology +glacis +glacises +glad +glad-hander +glad-handers +gladdon +gladdons +glade +glades +gladfulness +gladiator +gladiators +gladiolus +gladioluses +gladius +gladiuses +gladness +glads +gladsomeness +glair +glairs +glaive +glamor +glamorization +glamorizations +glamorizer +glamorizers +glamors +glamour +glamours +glance +glances +gland +glanders +glandes +glands +glandule +glandules +glans +glare +glares +glaringness +glass +glass-blower +glass-blowers +glass-blowing +glass-maker +glass-makers +glasses +glassful +glassfuls +glasshouse +glasshouses +glassine +glassiness +glassman +glassware +glasswares +glasswork +glassworker +glassworkers +glassworks +glasswort +glassworts +glauberite +glaucescence +glaucoma +glauconite +glaze +glazer +glazers +glazes +glazier +glaziers +glazing +glazings +gleam +gleaming +gleamings +gleams +gleaner +gleaners +gleaning +gleanings +glebe +glebes +glede +gledes +glee +gleed +gleeds +gleefulness +gleek +gleeks +gleeman +glees +gleet +gleets +glen +glengarries +glengarry +glens +gley +gleys +glia +gliadin +glibness +glidder +glide +glider +gliders +glides +gliding +glidings +gliff +gliffs +glim +glimmer +glimmering +glimmerings +glimmers +glimpse +glimpses +glims +glint +glints +glioma +gliomas +glisk +glisks +glissade +glissades +glissando +glissandos +glisten +glistens +glister +glisters +glitch +glitches +glitter +glitters +glitz +gloaming +gloamings +gloat +gloater +gloaters +gloating +gloats +glob +globe +globes +globigerina +globin +globoid +globosities +globosity +globs +globularity +globule +globules +globulin +glockenspiel +glockenspiels +glogg +gloggs +glomeration +glomerations +glomerule +glomerules +glomerulus +glonoin +gloom +gloominess +glooming +gloomings +glooms +glop +glops +gloria +glorias +glories +glorification +glorifications +gloriole +glorioles +gloriosa +gloriosas +gloriousness +glory +glory-of-the-snow +glory-pea +gloss +glossa +glossaries +glossarist +glossarists +glossary +glossas +glossator +glossators +glossectomies +glossectomy +glosseme +glossemes +glosser +glossers +glosses +glossies +glossina +glossinas +glossiness +glossitis +glossographer +glossographers +glossography +glossolalia +glossologist +glossologists +glossology +glossy +glottis +glottises +glottochronology +glottology +glove +glover +glovers +gloves +glow +glow-worm +glow-worms +glower +glowers +glowing +glows +gloxinia +gloxinias +gloze +glozes +glucagon +glucinium +glucinum +glucocorticoid +gluconeogenesis +glucoprotein +glucoproteins +glucose +glucoside +glucosides +glucosuria +glue +gluer +gluers +glues +glueyness +glume +glumes +glumness +gluon +gluons +glut +glutamate +glutamates +glutamine +glutelin +glutelins +gluten +gluteus +gluts +glutton +gluttons +gluttony +glyceria +glyceride +glycerides +glycerin +glycerine +glycerol +glyceryl +glycine +glycocoll +glycogen +glycogenesis +glycol +glycols +glycolysis +glycoprotein +glycoproteins +glycoside +glycosuria +glyph +glyphograph +glyphographer +glyphographers +glyphographs +glyphography +glyphs +glyptics +glyptodont +glyptodonts +glyptography +gnamma +gnarl +gnarls +gnash +gnashes +gnat +gnatcatcher +gnatcatchers +gnathite +gnathites +gnats +gnaw +gnawer +gnawers +gnawing +gnaws +gneiss +gnome +gnomes +gnomist +gnomists +gnomon +gnomons +gnosis +gnostic +gnotobiosis +gnotobiote +gnotobiotes +gnotobiotics +gnu +gnus +go-ahead +go-around +go-arounds +go-between +go-betweens +go-cart +go-carts +go-devil +go-getter +go-getters +go-kart +go-karts +go-slow +go-slows +goad +goading +goads +goaf +goafs +goal +goal-kick +goal-kicks +goalie +goalies +goalmouth +goalmouths +goalpost +goalposts +goals +goanna +goannas +goat +goat's-rue +goatee +goatees +goatherd +goatherds +goatishness +goats +goatskin +goatskins +goatsucker +goatsuckers +gob +gobang +gobbet +gobbets +gobble +gobbledegook +gobbledygook +gobbler +gobblers +gobbles +gobies +gobioid +goblet +goblets +goblin +goblins +gobo +goboes +gobos +gobs +gobstopper +gobstoppers +goby +god +godchild +goddaughter +goddaughters +godded +goddess +goddesses +godet +godetia +godetias +godets +godfather +godfathers +godhead +godheads +godhood +godlessness +godliness +godling +godlings +godmother +godmothers +godown +godowns +godparent +godparents +godroon +godroons +gods +godsend +godsends +godship +godships +godson +godsons +godspeed +godspeeds +godwit +godwits +goer +goers +goes +goethite +gofer +gofers +goffer +goffering +gofferings +goffers +goggle +goggler +gogglers +goggles +goglet +goglets +gogo +going +goings +goiter +goitre +goitres +gold +gold-beating +gold-digger +gold-diggers +gold-dust +gold-of-pleasure +goldcrest +goldcrests +goldeye +goldeyes +goldfield +goldfields +goldfinch +goldfinches +goldfinnies +goldfinny +goldfish +goldfishes +goldilocks +goldminer +goldminers +golds +goldsmith +goldsmiths +goldstone +goldthread +golem +golems +golf +golfer +golfers +golfing +golfs +golgotha +golgothas +goliard +goliardery +goliards +gollies +golliwog +golliwogs +golly +golosh +goloshes +golp +golpes +golps +gombeen +gombeen-man +gombo +gombos +gomphosis +gomuti +gomutis +gonad +gonadotropin +gonadotropins +gonads +gondola +gondolas +gondolier +gondoliers +goneness +goner +goners +gonfalon +gonfalonier +gonfaloniers +gonfalons +gonfanon +gonfanons +gong +gongs +goniatite +goniatites +gonidium +goniometer +goniometers +goniometry +gonion +gonk +gonks +gonococcus +gonocyte +gonocytes +gonophore +gonophores +gonorrhea +gonorrhoea +gonys +goo +goober +goobers +good +good-bye +good-byes +good-fellowship +good-for-nothing +good-for-nothings +good-humouredness +good-looker +good-naturedness +good-night +goodies +goodliness +goodman +goodness +goods +goodwife +goodwill +goody +goody-goodies +goody-goody +goof +goofball +goofballs +goofiness +goofs +goog +googlies +googly +googol +googolplex +googolplexes +googols +googs +goon +goonda +goondas +gooney +gooneys +goons +goop +goops +goos +goosander +goosanders +goose +gooseberries +gooseberry +goosefoot +goosefoots +goosegog +goosegogs +gooses +gopak +gopaks +gopher +gophers +gopherwood +goral +gorals +gorcock +gorcocks +gore +gores +gorge +gorgeousness +gorgerin +gorgerins +gorges +gorget +gorgets +gorgon +gorgoneion +gorgonian +gorgons +gorilla +gorillas +goriness +goring +gorings +gormand +gormandise +gormandiser +gormandisers +gormandises +gormandism +gormandize +gormandizer +gormandizers +gormandizes +gormands +gorse +goshawk +goshawks +gosling +goslings +gospel +gospeller +gospellers +gospels +gossamer +gossamers +gossan +gossans +gossip +gossiper +gossipers +gossiping +gossipings +gossipmonger +gossipmongers +gossipry +gossips +gossoon +gossoons +gouache +gouaches +gouge +gouger +gougers +gouges +goujon +goujons +goulash +goulashes +gourami +gouramis +gourd +gourde +gourdes +gourds +gourmand +gourmandise +gourmandism +gourmands +gourmet +gourmets +gout +goutiness +gouts +goutte +gouttes +goutweed +goutweeds +gouvernante +gouvernantes +gov +governance +governances +governed +governess +governesses +governing +government +governments +governor +governor-generalship +governors +governorship +governorships +govs +gowan +gowans +gowd +gowds +gowk +gowks +gown +gowns +gownsman +goy +goys +grab +grabber +grabbers +grabbler +grabblers +graben +grabens +grabs +grace +grace-and-favour +gracefulness +gracelessness +graces +gracility +graciosity +gracioso +graciosos +graciousness +grackle +grackles +grad +gradable +gradables +gradation +gradations +grade +grader +graders +grades +gradient +gradienter +gradienters +gradients +gradin +gradines +grading +gradins +grads +gradual +gradualism +gradualist +gradualists +gradualities +graduality +gradualness +graduals +graduand +graduands +graduate +graduates +graduation +graduations +graduator +graduators +gradus +graduses +graffiti +graffito +graft +grafter +grafters +grafting +graftings +grafts +grail +grails +grain +grainer +grainers +graininess +graining +grainings +grains +gram +grama +gramarye +gramicidin +gramma +grammalogue +grammalogues +grammar +grammarian +grammarians +grammars +grammaticism +grammaticisms +grammatology +gramme +grammes +gramophone +gramophones +grampus +grampuses +grams +granadilla +granadillas +granaries +granary +grand +grandad +grandads +grandam +grandams +grandchild +granddad +granddaddies +granddaddy +granddads +granddaughter +granddaughters +grandee +grandees +grandeeship +grandeur +grandfather +grandfathers +grandiloquence +grandiosity +grandma +grandmamma +grandmammas +grandmas +grandmaster +grandmasters +grandmother +grandmothers +grandnephew +grandnephews +grandness +grandniece +grandnieces +grandpa +grandpapa +grandpapas +grandparent +grandparents +grandpas +grands +grandsire +grandsires +grandson +grandsons +grandstand +grandstands +granduncle +granduncles +grange +granger +grangerisation +grangerisations +grangerization +grangerizations +grangers +granges +granite +graniteware +granitite +granitization +granivore +grannie +grannies +granny +granodiorite +granola +granophyre +grant +grant-in-aid +grantee +grantees +granter +granters +grantor +grantors +grants +granularity +granulater +granulaters +granulation +granulations +granulator +granulators +granule +granules +granulite +granulites +granulocyte +granulocytes +granuloma +granulomas +grape +grapefruit +grapefruits +graperies +grapery +grapes +grapeshot +grapestone +grapestones +grapevine +grapevines +graph +grapheme +graphemes +graphemics +graphicness +graphics +graphite +graphitization +graphitizations +graphologist +graphologists +graphology +graphs +grapnel +grapnels +grappa +grappas +grapple +grapples +grappling +graptolite +graptolites +grasp +grasper +graspers +grasping +graspingness +grasps +grass +grass-of-Parnassus +grasses +grasshook +grasshooks +grasshopper +grasshoppers +grassiness +grassland +grasslands +grate +gratefulness +grater +graters +grates +graticule +graticules +gratification +gratifications +gratifier +gratifiers +gratin +grating +gratings +gratitude +gratuities +gratuitousness +gratuity +gratulation +gratulations +graupel +graupels +gravamen +grave +grave-wax +gravel +gravels +graveness +graver +gravers +graves +gravestone +gravestones +graveyard +graveyards +gravidity +gravies +gravimeter +gravimeters +gravimetry +gravitation +gravitations +gravities +graviton +gravitons +gravity +gravure +gravures +gravy +gray +graybeard +graybeards +grayling +graylings +grayness +grays +graywacke +graze +grazer +grazers +grazes +grazier +graziers +grazing +grazings +grease +grease-gun +grease-guns +greasepaint +greaser +greasers +greases +greasewood +greasewoods +greasiness +great +great-aunt +great-aunts +great-grandchild +great-granddaughter +great-granddaughters +great-grandfather +great-grandfathers +great-grandmother +great-grandmothers +great-grandparent +great-grandparents +great-grandson +great-grandsons +great-nephew +great-nephews +great-niece +great-nieces +great-uncle +great-uncles +greatcoat +greatcoats +greatest +greatness +greats +greave +greaves +grebe +grebes +gree +greed +greediness +greeds +greegree +greegrees +green +greenback +greenbacks +greenbottle +greenbottles +greenery +greenfinch +greenfinches +greenflies +greenfly +greengage +greengages +greengrocer +greengroceries +greengrocers +greengrocery +greenhead +greenheads +greenheart +greenhearts +greenhorn +greenhorns +greenhouse +greenhouses +greening +greenings +greenishness +greenlet +greenlets +greenmail +greenness +greenockite +greenroom +greenrooms +greens +greensand +greenshank +greenshanks +greensickness +greenstone +greenstones +greenstuff +greenstuffs +greensward +greenth +greenweed +greenweeds +greenwood +greenwoods +grees +greet +greeter +greeters +greeting +greetings +greets +gregale +gregales +gregarine +gregarines +gregariousness +gregories +gregory +greige +greisen +gremial +gremials +gremlin +gremlins +grenade +grenades +grenadier +grenadiers +grenadine +grenadines +grey +greybeard +greybeards +greyhen +greyhens +greyhound +greyhounds +greylag +greylags +greyness +greys +greywacke +gri-gri +gribble +gribbles +grice +grices +grid +gridder +gridders +griddle +griddlecake +griddlecakes +griddles +gride +grides +gridiron +gridirons +grids +grief +griefs +grievance +grievances +griever +grievers +grievousness +griff +griffe +griffes +griffin +griffinism +griffins +griffon +griffons +griffs +grift +grifter +grifters +grifts +grig +grigs +grill +grillade +grillades +grillage +grillages +grille +grilles +grilling +grillings +grills +grillwork +grilse +grilses +grimace +grimaces +grimalkin +grimalkins +grime +grimes +griminess +grimness +grimoire +grimoires +grin +grind +grinder +grinderies +grinders +grindery +grinding +grindings +grinds +grindstone +grindstones +gringo +gringos +grinner +grinners +grinning +grins +griot +griots +grip +gripe +griper +gripers +gripes +grippe +gripper +grippers +grips +gripsack +gripsacks +grisaille +grisailles +griseofulvin +grisette +grisettes +griskin +griskins +grisliness +grisly +grison +grisons +grist +gristle +gristles +gristliness +grists +grit +grith +griths +grits +gritstone +gritstones +gritter +gritters +grittiness +grivet +grivets +grizzle +grizzler +grizzlers +grizzles +grizzlies +grizzling +grizzly +groan +groaner +groaners +groans +groat +groats +grocer +groceries +grocers +grocery +grockle +grockles +grog +groggery +grogginess +grogram +grogs +groin +groining +groinings +groins +groma +gromas +grommet +grommets +gromwell +gromwells +groom +groomer +groomers +grooming +grooms +groomsman +groove +groover +groovers +grooves +grooving +grope +groper +gropers +gropes +grosbeak +grosbeaks +groschen +groschens +grosgrain +grosgrains +gross +grosses +grossness +grossularite +grot +grotesque +grotesqueness +grotesquerie +grotesqueries +grotesquery +grotesques +grots +grotto +grottoes +grottos +grouch +grouches +grouchiness +ground +groundage +groundages +groundbreaking +grounder +grounders +grounding +groundings +groundlessness +groundling +groundlings +groundmass +groundmasses +groundplot +groundplots +grounds +groundsel +groundsels +groundsheet +groundsheets +groundsill +groundsills +groundsman +groundspeed +groundspeeds +groundwork +groundworks +group +grouper +groupers +groupie +groupies +grouping +groupings +groups +groupware +grouse +grouser +grousers +grouses +grout +grouter +grouters +grouts +grove +groveler +grovelers +groveller +grovellers +groves +grovet +grovets +grower +growers +growing +growings +growl +growler +growlers +growling +growlings +growls +grown-up +grown-ups +growth +growths +groyne +groynes +grub +grubber +grubbers +grubbiness +grubby +grubs +grudge +grudges +gruel +grueling +gruelings +gruelling +gruellings +gruels +gruesomeness +gruffness +grumble +grumbler +grumblers +grumbles +grumbling +grumblings +grume +grumes +grummet +grummets +grumness +grump +grumphie +grumphies +grumpiness +grumps +grunion +grunions +grunt +grunter +grunters +grunts +grutch +grutches +gryphon +gryphons +grysbok +grysboks +guacamole +guacamoles +guacharo +guacharos +guaco +guacos +guaiac +guaiacum +guaiacums +guan +guanaco +guanacos +guanine +guano +guanos +guans +guar +guarani +guaranies +guaranis +guarantee +guarantees +guaranties +guarantor +guarantors +guaranty +guard +guardedness +guardee +guardees +guarder +guarders +guardhouse +guardhouses +guardian +guardians +guardianship +guardianships +guarding +guards +guardsman +guars +guava +guavas +guayule +guayules +gubbins +gubbinses +gubernaculum +guck +guddle +guddles +gude +gudgeon +gudgeons +guenon +guenons +guerdon +guerdons +guereza +guerezas +guerilla +guerillas +guernsey +guernseys +guerrilla +guerrillas +guess +guesser +guessers +guesses +guessing +guessings +guesstimate +guesstimates +guesswork +guest +guest-rope +guestimate +guestimates +guests +guff +guffaw +guffaws +guffs +guggle +guggles +guidance +guide +guideline +guidelines +guider +guiders +guides +guiding +guidings +guidon +guidons +guild +guilder +guilders +guildhall +guildhalls +guilds +guildsman +guile +guilefulness +guilelessness +guiles +guillemot +guillemots +guilloche +guilloches +guillotine +guillotines +guilt +guiltiness +guiltlessness +guilts +guimpe +guimpes +guinea +guineas +guipure +guipures +guiro +guiros +guise +guises +guitar +guitarist +guitarists +guitars +gula +gulag +gulags +gulas +gulch +gulches +gulden +guldens +gules +gulf +gulfs +gulfweed +gulfweeds +gull +gullet +gullets +gulley +gulleys +gullibility +gullies +gulls +gully +gulosity +gulp +gulping +gulps +gum +gumbo +gumboil +gumboils +gumbos +gumdrop +gumdrops +gumma +gumminess +gumming +gummite +gummosis +gummy +gumption +gums +gumshield +gumshields +gumshoe +gumshoes +gun +gunboat +gunboats +guncotton +guncottons +gunfight +gunfighter +gunfighters +gunfights +gunfire +gunfires +gunflint +gunflints +gunge +gunges +gunite +gunk +gunks +gunmaker +gunmakers +gunman +gunmetal +gunmetals +gunnel +gunnels +gunner +gunneries +gunners +gunnery +gunning +gunnings +gunny +gunplay +gunplays +gunpoint +gunpowder +gunpowders +gunrunner +gunrunners +gunrunning +guns +gunsel +gunshot +gunshots +gunslinger +gunslingers +gunsmith +gunsmiths +gunstock +gunstocks +gunter +gunters +gunwale +gunwales +gunyah +guppies +guppy +gur +gurdwara +gurdwaras +gurge +gurges +gurgitation +gurgitations +gurgle +gurgles +gurjun +gurjuns +gurnard +gurnards +gurney +gurneys +guru +gurus +guruship +gush +gusher +gushers +gushes +gusset +gussets +gust +gustable +gustation +gustations +gustiness +gusto +gusts +gut +gutbucket +guts +gutser +gutsers +gutsiness +gutta +gutta-percha +guttas +guttation +guttations +gutter +guttering +gutters +guttersnipe +guttersnipes +gutties +guttural +gutturals +gutty +guv +guy +guyot +guyots +guys +guzzler +guzzlers +guzzling +gwyniad +gwyniads +gybe +gybes +gym +gymkhana +gymkhanas +gymnasia +gymnasiarch +gymnasiarchs +gymnasiast +gymnasiasts +gymnasium +gymnasiums +gymnast +gymnastics +gymnasts +gymnosophist +gymnosophists +gymnosophy +gymnosperm +gymnosperms +gyms +gynaeceum +gynaecocracies +gynaecocracy +gynaecologist +gynaecologists +gynaecology +gynaecomastia +gynandromorph +gynandromorphism +gynandromorphs +gynandromorphy +gynandry +gynecium +gynecologist +gynecology +gynodioecism +gynoecium +gynoeciums +gynomonoecism +gynophobia +gynophore +gynophores +gynostemium +gynostemiums +gyp +gyps +gypsies +gypsophila +gypsophilas +gypsum +gypsy +gypsydom +gypsyism +gypsywort +gypsyworts +gyration +gyrations +gyrator +gyrators +gyre +gyres +gyrfalcon +gyrfalcons +gyro +gyrocompass +gyrocompasses +gyron +gyrons +gyroplane +gyroplanes +gyros +gyroscope +gyroscopes +gyrostabilizer +gyrostabilizers +gyrostat +gyrostatics +gyrostats +gyrovague +gyrovagues +gyrus +gyruses +gyve +gyves +ha'p'orth +ha'p'orths +ha'pennies +ha'penny +ha-ha +ha-has +haaf +haafs +haar +haars +habanera +habaneras +haberdasher +haberdasheries +haberdashers +haberdashery +habergeon +habergeons +habiliment +habiliments +habilitation +habilitations +habilitator +habilitators +habit +habitability +habitableness +habitant +habitants +habitat +habitation +habitations +habitats +habits +habitualness +habituation +habituations +habitude +habitus +haboob +haboobs +hacek +haceks +hachure +hachures +hacienda +haciendas +hack +hackamore +hackamores +hackberries +hackberry +hackbut +hackbuteer +hackbuteers +hackbuts +hackee +hackees +hacker +hackeries +hackers +hackery +hackle +hackler +hacklers +hackles +hackmatack +hackmatacks +hackney +hackneys +hacks +haddock +haddocks +hade +hades +hadj +hadjes +hadji +hadjis +hadn't +hadron +hadrons +hadrosaur +hadrosaurs +haecceity +haem +haemangioma +haematemesis +haematic +haematin +haematinic +haematinics +haematite +haematoblast +haematoblasts +haematocele +haematoceles +haematocrit +haematocrits +haematogenesis +haematologist +haematologists +haematology +haematolysis +haematoma +haematomas +haematosis +haematoxylin +haematoxylon +haematuria +haemin +haemocoel +haemocyanin +haemocyte +haemocytes +haemodialysis +haemoglobin +haemoglobinopathy +haemolysis +haemophilia +haemophiliac +haemophiliacs +haemoptysis +haemorrhage +haemorrhages +haemorrhoid +haemorrhoids +haemostasis +haemostat +haemostatic +haemostats +haet +haets +haffet +haffets +hafiz +hafnium +haft +hafts +hag +hagberries +hagberry +hagbut +hagbuts +hagdon +hagdons +hagfish +hagfishes +haggard +haggardness +haggards +haggis +haggises +haggle +haggler +hagglers +haggles +haggling +hagiarchies +hagiarchy +hagiocracies +hagiocracy +hagiographer +hagiographers +hagiographies +hagiography +hagiolater +hagiolaters +hagiolatry +hagiologies +hagiologist +hagiologists +hagiology +hagioscope +hagioscopes +hags +hahnium +haick +haicks +haik +haiks +haiku +haikus +hail +hail-fellow +hailer +hailers +hails +hailstone +hailstones +hair +hair's-breadth +hair's-breadths +hair-raiser +haircloth +haircloths +haircut +haircuts +hairdo +hairdos +hairdresser +hairdressers +hairdressing +hairdressings +hairgrip +hairgrips +hairiness +hairlessness +hairline +hairlines +hairpin +hairpins +hairs +hairspring +hairsprings +hairstreak +hairstreaks +hairstyle +hairstyles +hairstylist +hairstylists +haj +hajes +haji +hajis +hajj +hajjes +hajji +hajjis +hake +hakes +hakim +hakims +halal +halals +halation +halations +halavah +halavahs +halberd +halberdier +halberdiers +halberds +halcyon +halcyons +haleness +haler +halers +half +half-a-crown +half-and-half +half-ball +half-binding +half-blood +half-bloods +half-blue +half-blues +half-board +half-boot +half-breed +half-breeds +half-brother +half-brothers +half-caste +half-castes +half-centuries +half-century +half-cock +half-crown +half-crowns +half-day +half-days +half-dollar +half-dollars +half-hitch +half-holiday +half-holidays +half-hour +half-hours +half-inch +half-inches +half-leather +half-length +half-life +half-light +half-mast +half-miler +half-moon +half-mourning +half-note +half-pay +half-pike +half-pint +half-pints +half-plate +half-pounder +half-round +half-sister +half-sisters +half-size +half-step +half-term +half-tide +half-time +half-title +half-track +half-tracks +half-truth +half-truths +half-wit +half-wits +half-wittedness +halfpace +halfpaces +halfpennies +halfpenny +halfpennyworth +halfpennyworths +halfs +halftone +halftones +halibut +halibuts +halide +halides +halidom +halidoms +haliotis +halite +halitosis +halitus +halituses +hall +hallan +hallans +hallelujah +hallelujahs +halliard +halliards +halling +hallings +hallmark +hallmarks +hallo +halloes +halloo +halloos +hallos +halls +hallstand +hallstands +hallucination +hallucinations +hallucinogen +hallucinogens +hallucinosis +hallux +hallway +hallways +halm +halma +halmas +halms +halo +halobiont +halobionts +halocarbon +haloes +halogen +halogenation +halogens +haloid +haloids +halophile +halophyte +halophytes +halos +halothane +halt +halter +halteres +halters +halts +halvah +halvahs +halves +halyard +halyards +ham +hamadryad +hamadryades +hamadryads +hamadryas +hamadryases +hamal +hamals +hamartia +hamartias +hamate +hamburger +hamburgers +hame +hames +hamlet +hamlets +hammal +hammals +hammer +hammercloth +hammercloths +hammerer +hammerers +hammerhead +hammerheads +hammering +hammerings +hammerlock +hammerlocks +hammers +hamming +hammock +hammocks +hamper +hampers +hams +hamster +hamsters +hamstring +hamstrings +hamulus +hamza +hamzas +han't +hanap +hanaper +hanapers +hanaps +hance +hances +hand +hand's-breadth +hand-me-down +hand-me-downs +hand-off +hand-offs +handbag +handbags +handbell +handbells +handbill +handbills +handbook +handbooks +handbrake +handbrakes +handcar +handcart +handcarts +handclap +handclaps +handcraft +handcrafts +handcuff +handcuffs +handedness +handfast +handfasting +handfastings +handfasts +handful +handfuls +handgrip +handgrips +handhold +handholds +handicap +handicapper +handicappers +handicaps +handicraft +handicrafts +handicraftsman +handiness +handiwork +handiworks +handkerchief +handkerchiefs +handle +handlebar +handlebars +handler +handlers +handles +handling +handlings +handmaid +handmaiden +handmaidens +handmaids +handout +handouts +handover +handovers +handrail +handrails +hands +handsaw +handsaws +handsel +handsels +handset +handsets +handshake +handshakes +handshaking +handshakings +handsomeness +handspike +handspikes +handspring +handsprings +handstand +handstands +handwork +handwriting +handwritings +handyman +hang +hang-glider +hang-gliders +hang-up +hang-ups +hangability +hangar +hangars +hangbird +hangbirds +hangdog +hangdogs +hanger +hanger-on +hangers +hangfire +hanging +hangings +hangman +hangnail +hangnails +hangout +hangouts +hangover +hangovers +hangs +hank +hankering +hankerings +hankie +hankies +hanks +hanky +hanky-panky +hansel +hansels +hansom +hansoms +hanuman +hanumans +haoma +haomas +hap +haphazard +haphazardness +haphazards +haplessness +haplography +haploid +haplology +happening +happenings +happenstance +happenstances +happiness +haps +hapten +haptens +hapteron +hapterons +haptics +haptotropism +hara-kiri +haram +harambee +harambees +harams +harangue +haranguer +haranguers +harangues +harasser +harassers +harassment +harassments +harbinger +harbingers +harbor +harborage +harborages +harborer +harborers +harbors +harbour +harbourage +harbourages +harbourer +harbourers +harbours +hard +hard-featuredness +hardback +hardbacks +hardbake +hardbakes +hardball +hardboard +hardboards +hardcore +hardcover +hardcovers +harden +hardener +hardeners +hardening +hardens +hardhack +hardhacks +hardhead +hardheadedness +hardheads +hardihood +hardiment +hardiments +hardiness +hardliner +hardliners +hardness +hardnesses +hards +hardship +hardships +hardtack +hardtacks +hardtop +hardtops +hardware +hardwareman +hardwood +hardy +hare +hare's-foot +harebell +harebells +hareem +hareems +harem +harems +hares +harewood +hari-kari +haricot +haricots +harim +harims +harl +harlequin +harlequinade +harlequinades +harlequins +harlot +harlotry +harlots +harls +harm +harmattan +harmattans +harmfulness +harmlessness +harmonic +harmonica +harmonicas +harmonicon +harmonicons +harmonics +harmonies +harmoniousness +harmonisation +harmonisations +harmoniser +harmonisers +harmonist +harmonists +harmonium +harmoniums +harmonization +harmonizations +harmonizer +harmonizers +harmony +harmost +harmosts +harmotome +harms +harness +harnesses +haroseth +harp +harper +harpers +harpies +harping +harpings +harpist +harpists +harpoon +harpooneer +harpooneers +harpooner +harpooners +harpoons +harps +harpsichord +harpsichordist +harpsichordists +harpsichords +harpy +harquebus +harquebuses +harridan +harridans +harrier +harriers +harrow +harrows +harshness +harslet +harslets +hart +hart's-tongue +hartal +hartebeest +hartebeests +harts +hartshorn +hartshorns +harum-scarum +harum-scarums +haruspex +haruspicies +haruspicy +harvest +harvest-lice +harvester +harvesters +harvesting +harvestman +harvests +has-been +has-beens +hash +hashes +hashing +hashish +hask +haslet +haslets +hasn't +hasp +hasps +hassle +hassles +hassock +hassocks +haste +hastener +hasteners +hastening +hastes +hastiness +hastings +hat +hatband +hatbands +hatbox +hatboxes +hatch +hatchback +hatchbacks +hatchel +hatchels +hatcher +hatcheries +hatchers +hatchery +hatches +hatchet +hatchets +hatchettite +hatching +hatchings +hatchling +hatchlings +hatchment +hatchments +hatchway +hatchways +hate +hatefulness +hatemonger +hatemongers +hater +haters +hates +hatful +hatfuls +hatlessness +hatpin +hatpins +hatrack +hatracks +hatred +hatreds +hats +hatter +hatters +hauberk +hauberks +haugh +haughs +haughtiness +haul +haulage +haulages +hauler +haulers +haulier +hauliers +hauling +haulm +haulms +hauls +haunch +haunches +haunt +haunter +haunters +haunts +hausfrau +hausfraus +haustellum +haustorium +hautbois +hautboy +hautboys +hauteur +have +have-not +have-nots +havelock +havelocks +haven +haven't +havens +haver +haverel +haverels +havers +haversack +haversacks +haversine +haversines +haves +havildar +havildars +havoc +havocs +haw +haw-haw +haw-haws +hawfinch +hawfinches +hawk +hawk's-beard +hawkbit +hawkbits +hawker +hawkers +hawkey +hawkeys +hawkie +hawkies +hawking +hawkishness +hawks +hawksbill +hawksbills +hawkweed +hawkweeds +haws +hawse +hawsehole +hawsepipe +hawsepipes +hawser +hawsers +hawses +hawthorn +hawthorns +hay +haybox +hayboxes +haycock +haycocks +hayfield +hayfields +hayfork +hayforks +haying +hayings +hayloft +haylofts +haymaker +haymakers +haymaking +haymakings +haymow +haymows +hayrick +hayricks +hayride +hayrides +hays +hayseed +hayseeds +haystack +haystacks +hayward +haywards +haywire +haywires +hazan +hazans +hazard +hazarding +hazardousness +hazards +haze +hazel +hazelnut +hazelnuts +hazels +hazer +hazers +hazes +haziness +hazing +hazings +hazzan +hazzans +he'd +he-man +head +headache +headaches +headband +headbands +headboard +headboards +headcloth +headcloths +headcount +header +headers +headfast +headfasts +headframe +headframes +headgear +headhunt +headhunter +headhunters +headhunting +headhuntings +headhunts +heading +headings +headlamp +headlamps +headland +headlands +headlight +headlights +headline +headliner +headliners +headlines +headlock +headlocks +headman +headmaster +headmasters +headmastership +headmistress +headmistresses +headnote +headnotes +headphone +headphones +headpiece +headpieces +headpin +headpins +headquarters +headrace +headraces +headrail +headrails +headreach +headreaches +headrest +headrests +headroom +headrooms +heads +headscarf +headset +headsets +headshake +headshakes +headship +headships +headshot +headshots +headshrinker +headshrinkers +headsman +headspring +headsprings +headsquare +headsquares +headstall +headstalls +headstand +headstands +headstock +headstocks +headstone +headstones +headwaiter +headwaiters +headwaters +headway +headways +headwind +headwinds +headword +headwords +headwork +headworker +headworkers +heal-all +heald +healds +healer +healers +healing +healings +health +healthfulness +healthiness +healths +heap +heaps +hearer +hearers +hearing +hearings +hearkener +hearkeners +hearsay +hearsays +hearse +hearses +heart +heart-searching +heart-throb +heart-throbs +heart-to-heart +heart-to-hearts +heartache +heartaches +heartbreak +heartbreaker +heartbreakers +heartbreaks +heartburn +heartburning +hearth +hearthrug +hearthrugs +hearths +hearties +heartiness +hearting +heartland +heartlands +heartlessness +hearts +heartseed +heartseeds +heartwood +heartwoods +heartworm +hearty +heat +heatedness +heater +heaters +heath +heathen +heathendom +heathenesse +heathenishness +heathenism +heathenry +heathens +heather +heathers +heathfowl +heaths +heating +heats +heatstroke +heaume +heaumes +heave +heaven +heavenliness +heavens +heaver +heavers +heaves +heavies +heaviness +heaving +heavings +heavy +heavy-duty +heavyweight +heavyweights +hebdomad +hebdomadaries +hebdomadary +hebdomads +hebephrenia +hebetation +hebetations +hebetude +hecatomb +hecatombs +heck +heckelphone +heckelphones +heckle +heckler +hecklers +heckles +heckling +hecks +hectare +hectares +hectic +hectics +hectogram +hectograms +hectograph +hectographs +hectolitre +hectolitres +hectometre +hectometres +hector +hectors +hectostere +hectosteres +heddle +heddles +hedge +hedgehog +hedgehogs +hedger +hedgerow +hedgerows +hedgers +hedges +hedging +hedgings +hedonics +hedonism +hedonist +hedonists +heed +heedfulness +heedlessness +heeds +heel +heeler +heelers +heeling +heelings +heels +heft +heftiness +hefts +hegemonies +hegemonist +hegemonists +hegemony +hegira +heifer +heifers +heigh +heighs +height +height-to-paper +heights +heinousness +heir +heir-at-law +heirdom +heiress +heiresses +heirloom +heirlooms +heirs +heirship +heist +heister +heisters +heists +heitiki +heitikis +hejira +helenium +helices +helichrysum +helichrysums +helicograph +helicographs +helicoid +helicon +helicons +helicopter +helicopters +heliochromy +heliodor +heliograph +heliographer +heliographers +heliographs +heliography +heliogravure +heliolater +heliolaters +heliolatry +heliometer +heliometers +helioscope +helioscopes +heliostat +heliostats +heliotaxis +heliotherapy +heliotrope +heliotropes +heliotropin +heliotropism +heliotype +heliotypes +heliozoan +heliozoans +helipad +helipads +heliport +heliports +helium +helix +helixes +hell +hell-kite +hellbender +hellbenders +hellebore +hellebores +helleborine +heller +hellers +hellgrammite +hellgrammites +hellhound +hellhounds +hellion +hellions +hellishness +hello +hellos +hells +helm +helmet +helmets +helminth +helminthiasis +helminthic +helminthologist +helminthology +helminths +helms +helmsman +helot +helotage +helotism +helotries +helotry +helots +help +helper +helpers +helpfulness +helping +helpings +helplessness +helpmate +helpmates +helpmeet +helpmeets +helps +helter-skelter +helter-skelters +helve +helves +hem +hemangioma +hemangiomas +hematite +hematologist +hematology +heme +hemeralopia +hemes +hemialgia +hemianopsia +hemicellulose +hemicrania +hemicycle +hemidemisemiquaver +hemimorphism +hemimorphite +hemiola +hemiolas +hemiparasite +hemiparasites +hemiplegia +hemiplegic +hemipteran +hemisphere +hemispheres +hemispheroid +hemispheroids +hemistich +hemistichs +hemitrope +hemitropes +hemline +hemlines +hemlock +hemlocks +hemoglobin +hemophilia +hemophiliac +hemophiliacs +hemorrhage +hemorrhages +hemostat +hemostats +hemp +hemps +hems +hemstitch +hemstitcher +hemstitchers +hemstitches +hemstitching +hen +hen-and-chickens +henbane +henbanes +henchman +hendecagon +hendecagons +hendecasyllabic +hendecasyllable +hendiadys +henequen +henequens +henge +henges +henna +hennas +henneries +hennery +hennin +henotheism +henotheist +henotheists +henries +henroost +henroosts +henry +henrys +hens +hent +heortology +hepar +heparin +hepars +hepatectomies +hepatectomy +hepatic +hepatics +hepatisation +hepatitis +hepatization +hepatoscopy +heptachlor +heptachord +heptachords +heptad +heptads +heptagon +heptagons +heptahedron +heptameter +heptameters +heptane +heptarch +heptarchies +heptarchist +heptarchists +heptarchs +heptarchy +heptasyllabic +herald +heraldry +heralds +herb +herbage +herbages +herbal +herbalist +herbalists +herbals +herbarium +herbariums +herbicide +herbicides +herbivore +herbivores +herborist +herborists +herbs +herd +herd-book +herder +herders +herdic +herdics +herdman +herds +herdsman +here +hereafter +hereditability +hereditament +hereditaments +hereditarianism +hereditariness +hereditist +heredity +hereness +heresiarch +heresiarchs +heresies +heresiographer +heresiographers +heresiographies +heresiography +heresiologist +heresiologists +heresiology +heresy +heretic +heretics +heretofore +heriot +heriots +heritability +heritage +heritages +heritor +heritors +herl +herls +herm +herma +hermaphrodite +hermaphrodites +hermaphroditism +hermeneutics +hermit +hermitage +hermitages +hermits +herms +hern +hernia +hernias +herniorrhaphy +herniotomies +herniotomy +herns +hernshaw +hernshaws +hero +heroes +heroicalness +heroicness +heroics +heroin +heroine +heroines +heroism +heron +heronries +heronry +herons +heronsew +heronsews +herpes +herpetologist +herpetologists +herpetology +herring +herrings +hertz +hesitance +hesitances +hesitancies +hesitancy +hesitation +hesitations +hesitator +hesitators +hesperidium +hesperidiums +hessian +hessonite +hest +hests +hetaera +hetaerism +hetaerisms +hetaerist +hetaerists +hetaira +hetairas +hetairist +hetairists +heterocercality +heteroclite +heteroclites +heterodactyl +heterodactyls +heterodoxies +heterodoxy +heteroecism +heterogamy +heterogeneity +heterogeneousness +heterogenesis +heterogenies +heterogeny +heterogony +heterograft +heterografts +heterology +heteromorphism +heteromorphisms +heteromorphy +heteronomy +heteronym +heteronyms +heterophyllous +heterophylly +heteroplasty +heterosexism +heterosexual +heterosexuality +heterosexuals +heterosis +heterospory +heterostyly +heterotaxis +heterothallism +heterotopia +heterotroph +heterotrophs +heterozygosity +heterozygote +heterozygotes +hetman +hetmanate +hetmanates +hetmans +heuchera +heugh +heughs +heulandite +heuristic +heuristics +hevea +heveas +hewer +hewers +hex +hexachlorophene +hexachord +hexachords +hexad +hexads +hexaemeron +hexaemerons +hexagon +hexagons +hexagram +hexagrams +hexahedron +hexahedrons +hexameter +hexameters +hexane +hexapla +hexaplas +hexapod +hexapodies +hexapods +hexapody +hexastich +hexastichs +hexastyle +hexastyles +hexes +hexose +hexoses +heyday +heydays +hi-fi +hi-fis +hiatus +hiatuses +hibachi +hibachis +hibernaculum +hibernation +hibernations +hibernator +hibernators +hiccough +hiccoughs +hiccup +hiccups +hick +hickey +hickeys +hickories +hickory +hicks +hickwall +hickwalls +hidage +hidages +hidalgo +hidalgoism +hidalgos +hiddenite +hiddenness +hide +hide-and-seek +hideaway +hideaways +hideosity +hideousness +hideout +hideouts +hider +hiders +hides +hiding +hidings +hidrosis +hidy-hole +hidy-holes +hierarch +hierarchies +hierarchism +hierarchs +hierarchy +hieratic +hierocracies +hierocracy +hierodule +hierodules +hieroglyph +hieroglyphic +hieroglyphics +hieroglyphist +hieroglyphists +hieroglyphs +hierogram +hierogrammat +hierogrammates +hierogrammatist +hierogrammats +hierograms +hierolatry +hierologist +hierologists +hierology +hierophant +hierophants +hierurgies +hierurgy +higgledy-piggledy +higgler +higglers +high +high-flier +high-fliers +high-hat +high-hats +high-low +high-mindedness +high-muck-a-muck +high-muck-a-mucks +high-rise +high-stepper +high-tension +high-up +high-ups +highball +highballs +highbinder +highboy +highboys +highbrow +highbrowism +highbrows +higher-up +higher-ups +highjack +highjacker +highjackers +highjacking +highjacks +highland +highlands +highlight +highlighting +highlights +highness +highnesses +highroad +highroads +highs +highway +highwayman +highways +hijack +hijacker +hijackers +hijacking +hijacks +hijinks +hike +hiker +hikers +hikes +hilariousness +hilarity +hilding +hildings +hill +hilliness +hillock +hillocks +hills +hillside +hillsides +hilltop +hilltops +hilt +hilts +hilum +hilus +himation +himations +hin +hind +hinderer +hinderers +hindfoot +hindquarter +hindquarters +hindrance +hindrances +hinds +hindsight +hindsights +hinge +hinges +hinnies +hinny +hins +hint +hinter +hinterland +hinterlands +hinters +hints +hip +hipparch +hipparchs +hippeastrum +hippeastrums +hippiatrics +hippiatrist +hippiatrists +hippie +hippies +hipping +hippings +hippo +hippocampus +hippocras +hippocrases +hippodrome +hippodromes +hippogriff +hippogriffs +hippologist +hippologists +hippology +hippophagist +hippophagists +hippophagy +hippophile +hippophiles +hippopotamus +hippopotamuses +hippos +hippus +hippuses +hippy +hips +hipster +hipsters +hiragana +hire +hire-purchase +hireling +hirelings +hirer +hirers +hires +hiring +hirings +hirple +hirples +hirsuteness +hirsutism +hirudin +hirudinean +hirudineans +hispidity +hiss +hisses +hissing +hissings +histaminase +histamine +histamines +histidine +histidines +histiocyte +histoblast +histoblasts +histochemistry +histogen +histogenesis +histogens +histogram +histograms +histologist +histologists +histology +histolysis +histone +histones +histopathologist +histopathology +histoplasmosis +historian +historians +historicism +historicisms +historicist +historicists +historicity +histories +historiographer +historiography +history +histrion +histrionic +histrionics +histrionism +hit +hitch +hitch-hiker +hitch-hikers +hitcher +hitchers +hitches +hits +hitter +hitters +hitting +hive +hiver +hivers +hives +hoactzin +hoactzins +hoar +hoard +hoarder +hoarders +hoarding +hoardings +hoards +hoarhound +hoarhounds +hoariness +hoarseness +hoatzin +hoatzins +hoax +hoaxer +hoaxers +hoaxes +hob +hobbies +hobble +hobbledehoy +hobbledehoys +hobbler +hobblers +hobbles +hobby +hobbyhorse +hobbyhorses +hobbyist +hobbyists +hobgoblin +hobgoblins +hobnail +hobnails +hobo +hoboes +hoboism +hobos +hobs +hock +hocker +hockers +hocket +hockets +hockey +hockeys +hocks +hocus-pocus +hod +hodden +hodgepodge +hodgepodges +hodman +hodograph +hodographs +hodometer +hodometers +hodoscope +hodoscopes +hods +hoe +hoedown +hoedowns +hoer +hoers +hoes +hog +hogan +hogans +hogback +hogbacks +hogg +hoggeries +hoggery +hogget +hoggets +hoggin +hoggins +hoggishness +hoggs +hognut +hognuts +hogs +hogshead +hogsheads +hogwash +hogwashes +hoiden +hoidens +hoist +hoister +hoisters +hoists +hoistway +hoistways +hokey-pokey +hokku +hokkus +hokum +hold +hold-up +hold-ups +holdall +holdalls +holdback +holdbacks +holder +holders +holding +holdings +holds +hole +holes +holibut +holibuts +holiday +holidaymaker +holidaymakers +holidays +holies +holiness +holinesses +holism +holist +holists +holla +holland +hollands +hollandses +hollas +holler +hollering +hollers +hollies +hollo +holloa +holloas +holloes +hollos +hollow +holloware +hollowares +hollowness +hollows +holly +hollyhock +hollyhocks +holm +holmium +holms +holocaust +holocausts +holoenzyme +holoenzymes +hologram +holograms +holograph +holographs +holography +holohedrism +holometabolism +holophote +holophotes +holophrase +holophrases +holophyte +holophytes +holoplankton +holothurian +holotype +holotypes +holster +holsters +holt +holts +holy +holystone +holystones +homage +homager +homagers +homages +hombre +home +home-brew +home-brews +home-farm +home-farms +homebound +homeboy +homeboys +homecomer +homecomers +homecoming +homecomings +homegirl +homegirls +homeland +homelands +homeless +homelessness +homeliness +homemaker +homemakers +homemaking +homeomorph +homeomorphism +homeomorphs +homeopath +homeopathist +homeopathists +homeopaths +homeopathy +homeostasis +homeowner +homeowners +homer +homers +homes +homesickness +homespun +homespuns +homestall +homestead +homesteader +homesteaders +homesteads +homework +homeworker +homeyness +homicide +homicides +homiletics +homilies +homilist +homilists +homily +hominess +homing +homings +hominid +hominidae +hominids +hominies +hominoid +hominoids +hominy +hommock +hommocks +homo +homochromy +homoeomorph +homoeomorphism +homoeomorphs +homoeopath +homoeopathist +homoeopathists +homoeopaths +homoeopathy +homoeroticism +homogamy +homogenate +homogenates +homogeneity +homogeneous +homogeneousness +homogenesis +homogenisation +homogenization +homogenizer +homogenizers +homogeny +homograft +homografts +homograph +homographs +homologation +homologations +homologue +homologues +homologumena +homology +homomorphism +homonym +homonymity +homonyms +homonymy +homophile +homophiles +homophobia +homophone +homophones +homophonies +homophony +homophyly +homoplasies +homoplasy +homopolarity +homopteran +homos +homosexual +homosexualism +homosexuality +homosexuals +homotaxis +homothallism +homotype +homotypes +homozygosis +homozygote +homozygotes +homunculus +hon +honcho +honchos +hone +hones +honesties +honesty +honewort +honeworts +honey +honey-eater +honeybunch +honeybunches +honeycomb +honeycombs +honeycreeper +honeymoon +honeymooner +honeymooners +honeymoons +honeypot +honeypots +honeys +honeysuckle +honeysuckles +hong +hongs +honk +honker +honkers +honks +honky-tonk +honky-tonks +honorableness +honorand +honorands +honorarium +honorariums +honorer +honorers +honorific +honour +honourableness +honourer +honourers +honours +hoo-ha +hoo-has +hooch +hooches +hood +hoodie +hoodies +hoodlum +hoodlums +hoodman +hoodman-blind +hoodoo +hoodoos +hoods +hoodwinker +hoodwinkers +hooey +hoof +hoofbeat +hoofbeats +hoofer +hoofers +hoofing +hoofprint +hoofprints +hoofs +hook +hook-up +hook-ups +hookah +hookahs +hookedness +hooker +hookers +hookey +hooks +hookworm +hookworms +hooky +hoolies +hooligan +hooliganism +hooligans +hooly +hoop +hooper +hoopers +hoopoe +hoopoes +hoops +hooray +hoorays +hoosegow +hoosegows +hoosgow +hoosgows +hoot +hootch +hootches +hootchy-kootchies +hootchy-kootchy +hootenannies +hootenanny +hooter +hooters +hoots +hoover +hoovers +hooves +hop +hop-o'-my-thumb +hop-picker +hop-pickers +hope +hopeful +hopefulness +hopefuls +hopelessness +hoper +hopers +hopes +hoplite +hoplites +hoplology +hopper +hoppers +hopping +hoppings +hopple +hopples +hops +hopsack +hopsacking +hopsacks +horde +hordein +hordeolum +hordeolums +hordes +horehound +horehounds +horizon +horizons +horizontal +horizontality +horizontals +horme +hormone +hormones +horn +horn-madness +hornbeam +hornbeams +hornbill +hornbills +hornblende +hornbook +hornbooks +hornet +hornets +hornfels +hornfelses +horniness +hornito +hornitos +hornpipe +hornpipes +horns +hornstone +hornstones +horntail +horntails +hornworm +hornworms +hornwort +hornworts +horologe +horologer +horologers +horologes +horologist +horologists +horologium +horologiums +horology +horoscope +horoscopes +horoscopies +horoscopy +horribleness +horridness +horripilation +horripilations +horror +horrors +horse +horse-coper +horseback +horsebacks +horsebean +horsecar +horsed +horsefeathers +horseflesh +horseflies +horsefly +horsehair +horsehairs +horsehide +horsehides +horselaugh +horselaughs +horseman +horsemanship +horsemeat +horsemeats +horsemint +horsemints +horseplay +horseplays +horsepower +horseradish +horseradishes +horses +horseshoe +horseshoer +horseshoers +horseshoes +horsetail +horsetails +horsewhip +horsewhipping +horsewhips +horsewoman +horsiness +horsing +horsings +horst +horsts +horticulture +horticulturist +horticulturists +hosanna +hosannas +hose +hosepipe +hosepipes +hoses +hosier +hosiers +hosiery +hospice +hospices +hospitableness +hospital +hospitalisation +hospitalisations +hospitality +hospitalization +hospitalizations +hospitaller +hospitallers +hospitals +hospitium +hospitiums +hospodar +hospodars +host +hosta +hostage +hostages +hostas +hostel +hosteler +hostelers +hosteller +hostellers +hostelling +hostelries +hostelry +hostels +hostess +hostess-ship +hostesses +hostilities +hostility +hostler +hosts +hot-gospeller +hot-gospellers +hot-press +hotbed +hotbeds +hotch +hotches +hotchpot +hotchpotch +hotchpotches +hotchpots +hotel +hotelier +hoteliers +hotels +hothead +hotheadedness +hotheads +hothouse +hothouses +hotness +hotplate +hotplates +hotpot +hotpots +hotshot +hotshots +hottie +hotties +houdah +houdahs +hough +houghs +hound +hound's-tongue +hounding +hounds +hour +hourglass +hourglasses +houri +houris +hours +house +house-warming +house-warmings +houseboy +houseboys +housecoat +housecoats +housecraft +housedog +housedogs +housefather +housefathers +houseful +housefuls +houseguest +household +householder +householders +households +housekeeper +housekeepers +housekeeping +housel +houselights +housels +housemaid +housemaids +houseman +housemaster +housemasters +housemother +housemothers +houseparent +houseparents +houseplant +houseplants +houses +housetop +housetops +housewife +housewifery +housework +housey-housey +housing +housings +houting +hovel +hovels +hoven +hover +hovercraft +hovercrafts +hoverport +hoverports +hovers +hovertrain +hovertrains +how +how-d'ye-do +how-d'ye-dos +how-do-you-do +howdah +howdahs +howdie +howdies +howdy +howe +howes +howf +howff +howffs +howfs +howitzer +howitzers +howl +howler +howlers +howlet +howlets +howling +howlings +howls +hows +howtowdie +howtowdies +hoy +hoya +hoyden +hoydenism +hoydens +hoys +huarache +huaraches +hub +hubbies +hubble-bubble +hubble-bubbles +hubbub +hubbubs +hubby +hubcap +hubcaps +hubris +hubs +huck +huckaback +huckabacks +huckle +huckleberries +huckleberry +huckles +hucks +huckster +hucksters +huddle +huddles +hue +hues +huff +huffiness +huffing +huffishness +huffs +hug +hug-me-tight +hug-me-tights +hugeness +hugeousness +hugger-mugger +hugging +hugs +huia +huias +hula +hula-hula +hula-hulas +hulas +hulk +hulks +hull +hullabaloo +hullabaloos +huller +hullers +hulling +hullo +hullos +hulls +hum +human +humaneness +humanisation +humaniser +humanisers +humanism +humanist +humanists +humanitarian +humanitarianism +humanitarians +humanities +humanity +humanization +humanizer +humanizers +humankind +humanness +humanoid +humanoids +humans +humbleness +humbling +humblings +humbug +humbugger +humbuggers +humbuggery +humbugs +humdinger +humdingers +humdrum +humdrums +humectant +humectants +humerus +humidification +humidifier +humidifiers +humidistat +humidistats +humidity +humidness +humidor +humidors +humiliation +humiliations +humiliator +humiliators +humility +hummer +hummers +humming +hummings +hummock +hummocks +humor +humoresque +humoresques +humoring +humorist +humorists +humorlessness +humorousness +humors +humour +humourlessness +humours +hump +humpback +humpbacks +humpies +humps +humpties +humpty +humpy +hums +humus +humuses +hunch +hunchback +hunchbacks +hunches +hundred +hundred-percenter +hundreds +hundredth +hundredths +hundredweight +hundredweights +hunger +hungers +hungriness +hunk +hunker +hunkers +hunks +hunkses +hunky +hunt +huntaway +huntaways +hunter +hunters +hunting +huntings +huntress +huntresses +hunts +huntsman +huntsmanship +huppah +hurcheon +hurcheons +hurdle +hurdler +hurdlers +hurdles +hurdling +hurdlings +hurdy-gurdies +hurdy-gurdy +hurl +hurler +hurlers +hurley +hurleys +hurlies +hurling +hurls +hurly +hurly-burly +hurricane +hurricanes +hurriedness +hurries +hurry +hurry-scurry +hurry-skurry +hurrying +hurryings +hurst +hursts +hurt +hurter +hurters +hurtfulness +hurting +hurtleberries +hurtleberry +hurtlessness +hurts +husband +husbandage +husbandages +husbandman +husbandry +husbands +hush +hushabies +hushaby +hushes +husk +husker +huskers +huskies +huskiness +husking +huskings +husks +husky +hussar +hussars +hussies +hussy +hustings +hustle +hustler +hustlers +hustles +hut +hutch +hutches +hutment +hutments +huts +huzzah +huzzahs +hwyl +hwyls +hyacinth +hyacinths +hyaena +hyaenas +hyaline +hyalinization +hyalinizations +hyalite +hyalophane +hyaloplasm +hybrid +hybridisation +hybridisations +hybridiser +hybridisers +hybridism +hybridization +hybridizations +hybridizer +hybridizers +hybridizing +hybridoma +hybrids +hybris +hydathode +hydathodes +hydatid +hydatids +hydra +hydraemia +hydragogue +hydragogues +hydrangea +hydrangeas +hydrant +hydranth +hydranths +hydrants +hydrargyrism +hydrargyrum +hydras +hydrate +hydrates +hydration +hydraulics +hydrazine +hydremia +hydria +hydrias +hydride +hydrides +hydro +hydrocarbon +hydrocarbons +hydrocele +hydroceles +hydrocellulose +hydrocephalus +hydrochloride +hydrochlorides +hydrocortisone +hydrocracking +hydrodynamics +hydroelectricity +hydrofoil +hydrofoils +hydrogen +hydrogenate +hydrogenates +hydrogenation +hydrogenations +hydrogeologist +hydrogeologists +hydrogeology +hydrograph +hydrographer +hydrographers +hydrographs +hydrography +hydroid +hydroids +hydrokinetics +hydrologist +hydrologists +hydrology +hydrolysate +hydrolysates +hydrolysis +hydrolyte +hydrolytes +hydromagnetics +hydromancy +hydromechanics +hydromedusa +hydromedusas +hydromel +hydrometallurgy +hydrometeor +hydrometeorology +hydrometeors +hydrometer +hydrometers +hydrometry +hydronaut +hydronauts +hydropathist +hydropathists +hydropathy +hydrophane +hydrophanes +hydrophily +hydrophobia +hydrophobicity +hydrophone +hydrophones +hydrophyte +hydrophytes +hydroplane +hydroplanes +hydroponics +hydropower +hydroquinone +hydros +hydroscope +hydroscopes +hydroski +hydroskis +hydrosoma +hydrosome +hydrosomes +hydrosphere +hydrostat +hydrostatics +hydrostats +hydrosulphide +hydrosulphides +hydrosulphite +hydrosulphites +hydrotaxis +hydrotheca +hydrothecas +hydrotherapeutics +hydrotherapy +hydrothorax +hydrothoraxes +hydrotropism +hydroxide +hydroxides +hydroxyl +hydroxylamine +hydroxylamines +hydrozoa +hydrozoan +hydrozoans +hyena +hyenas +hyetograph +hyetographs +hyetography +hyetology +hygiene +hygienics +hygienist +hygienists +hygristor +hygristors +hygrodeik +hygrodeiks +hygrograph +hygrographs +hygrometer +hygrometers +hygrometry +hygrophyte +hygrophytes +hygroscope +hygroscopes +hygroscopicity +hygrostat +hygrostats +hylobates +hylomorphism +hylotheism +hylotheist +hylotheists +hylozoism +hylozoist +hylozoists +hymen +hymeneal +hymeneals +hymenium +hymeniums +hymenopteran +hymenopterans +hymens +hymn +hymnal +hymnals +hymnaries +hymnary +hymnbook +hymnbooks +hymnist +hymnists +hymnodist +hymnodists +hymnody +hymnologist +hymnologists +hymnology +hymns +hyoid +hyoscine +hyoscyamine +hyp +hypalgesia +hypallage +hypallages +hypanthium +hypanthiums +hype +hyperacidity +hyperactivity +hyperacusis +hyperadrenalism +hyperaemia +hyperaesthesia +hyperalgesia +hyperbaton +hyperbatons +hyperbola +hyperbolas +hyperbole +hyperboles +hyperbolism +hyperboloid +hyperboloids +hypercalcemia +hypercorrection +hypercorrectness +hypercritic +hypercriticism +hypercriticisms +hypercritics +hyperdulia +hyperemesis +hyperemia +hyperesthesia +hypergamy +hyperglycaemia +hyperglycemia +hyperhidrosis +hypermarket +hypermarkets +hypermedia +hypermetropia +hypernym +hypernyms +hypernymy +hyperon +hyperons +hyperopia +hyperparasite +hyperphagia +hyperplasia +hyperpyrexia +hypersensitisation +hypersensitiveness +hypersensitivity +hypersensitization +hypersomnia +hyperspace +hypersthene +hypertension +hypertensive +hypertext +hyperthermia +hyperthyroidism +hypertrophy +hypervelocities +hypervelocity +hyperventilation +hypervitaminosis +hypes +hypha +hyphen +hyphenation +hyphenations +hyphenisation +hyphenisations +hyphenization +hyphenizations +hyphens +hypnogenesis +hypnology +hypnone +hypnopaedia +hypnosis +hypnotherapy +hypnotic +hypnotics +hypnotisability +hypnotisation +hypnotisations +hypnotiser +hypnotisers +hypnotism +hypnotist +hypnotists +hypnotizability +hypnotization +hypnotizations +hypnotizer +hypnotizers +hypo +hypoblast +hypoblasts +hypocaust +hypocausts +hypocentre +hypocentres +hypochlorite +hypochlorites +hypochondria +hypochondriac +hypochondriacs +hypochondriasis +hypochondrium +hypocorism +hypocotyl +hypocotyls +hypocrisies +hypocrisy +hypocrite +hypocrites +hypocycloid +hypocycloids +hypoderm +hypoderma +hypodermas +hypodermic +hypodermics +hypodermis +hypodermises +hypoderms +hypogastrium +hypogastriums +hypogeum +hypoglossal +hypoglycaemia +hypoglycemia +hypognathism +hypogyny +hypolimnion +hypolimnions +hypomania +hypomanic +hyponasty +hyponitrite +hyponym +hyponyms +hyponymy +hypophosphite +hypophosphites +hypophysectomy +hypophysis +hypopituitarism +hypoplasia +hypos +hypostasis +hypostasises +hypostyle +hypostyles +hyposulphite +hyposulphites +hypotaxis +hypotension +hypotensive +hypotensives +hypotenuse +hypotenuses +hypothalamus +hypothec +hypothecation +hypothecations +hypothecator +hypothecators +hypothecs +hypothenuse +hypothenuses +hypothermia +hypothesis +hypothesises +hypothyroidism +hypotyposis +hypoxemia +hypoxia +hyps +hypsographies +hypsography +hypsometer +hypsometers +hypsometry +hyracoid +hyrax +hyraxes +hyson +hysons +hyssop +hyssops +hysterectomies +hysterectomy +hysteresis +hysteria +hysterias +hysteric +hysterics +hysterogeny +hysterotomies +hysterotomy +iamb +iambic +iambics +iambs +iambus +iambuses +iatrochemist +iatrochemistry +iatrochemists +iatrogenicity +ibex +ibexes +ibis +ibises +ibuprofen +ice +ice-skater +ice-skaters +iceberg +icebergs +iceblink +iceblinks +icebox +iceboxes +icehouse +icehouses +iceman +ices +ich +ichneumon +ichneumons +ichnite +ichnites +ichnographies +ichnography +ichnology +ichor +ichors +ichthyography +ichthyoid +ichthyoids +ichthyolatry +ichthyolite +ichthyolites +ichthyologist +ichthyologists +ichthyology +ichthyophagist +ichthyophagists +ichthyophagy +ichthyosaur +ichthyosaurs +ichthyosis +icicle +icicles +iciness +icing +icings +icker +ickers +icon +iconoclasm +iconoclast +iconoclasts +iconography +iconolater +iconolaters +iconolatry +iconologist +iconologists +iconology +iconoscope +iconoscopes +iconostasis +icons +icosahedron +icositetrahedron +icterus +ictus +ictuses +ide +idea +ideal +idealisation +idealisations +idealiser +idealisers +idealism +idealist +idealists +idealities +ideality +idealization +idealizations +idealizer +idealizers +ideals +ideas +ideate +ideates +ideation +identicalness +identification +identifications +identifier +identifiers +identikit +identikits +identities +identity +ideogram +ideograms +ideograph +ideographs +ideography +ideologies +ideologist +ideologists +ideologue +ideologues +ideology +ides +idioblast +idioblasts +idiocies +idiocy +idioglossia +idiograph +idiographs +idiolect +idiolects +idiom +idioms +idiopathies +idiopathy +idiophone +idiophones +idioplasm +idioplasms +idiosyncrasies +idiosyncrasy +idiot +idiotism +idiots +idleness +idler +idlers +idlesse +idling +idocrase +idol +idolater +idolaters +idolatress +idolatresses +idolatry +idolisation +idolisations +idoliser +idolisers +idolism +idolist +idolization +idolizations +idolizer +idolizers +idols +idyll +idyllist +idyllists +idylls +iff +igloo +igloos +iglu +iglus +ignescent +ignescents +ignitability +igniter +igniters +ignitibility +ignition +ignitions +ignitron +ignitrons +ignobility +ignobleness +ignominies +ignominy +ignoramus +ignoramuses +ignorance +ignorances +ignorer +ignorers +iguana +iguanas +iguanid +iguanids +ihram +ihrams +ikebana +ikon +ikons +ilang-ilang +ileitis +ileostomy +ileum +ileus +ileuses +ilex +ilexes +ilium +ilk +ilks +ill +ill-being +ill-breeding +ill-naturedness +ill-treatment +ill-usage +ill-use +ill-uses +ill-wisher +illation +illations +illative +illegalities +illegality +illegibility +illegibleness +illegitimacy +illegitimate +illegitimates +illiberality +illicitness +illimitability +illimitableness +illinium +illiteracy +illiterate +illiterateness +illiterates +illness +illnesses +illocution +illocutions +illogic +illogicality +illogicalness +ills +illuminance +illuminances +illuminant +illuminants +illuminate +illuminates +illumination +illuminations +illuminator +illuminators +illuminism +illuminist +illuminists +illusion +illusionism +illusionist +illusionists +illusions +illusiveness +illustration +illustrations +illustrator +illustrators +illustriousness +illuviation +illuvium +ilmenite +image +imagery +images +imaginariness +imagination +imaginations +imaginativeness +imaginer +imaginers +imaging +imagism +imagist +imagists +imago +imagoes +imagos +imam +imamate +imamates +imams +imaret +imarets +imaum +imaums +imbalance +imbalances +imbecile +imbeciles +imbecility +imbiber +imbibers +imbibing +imbibition +imbrex +imbrication +imbrications +imbroglio +imbroglios +imbruement +imidazole +imide +imides +imine +imines +imipramine +imitability +imitableness +imitation +imitations +imitativeness +imitator +imitators +immaculacy +immaculateness +immanence +immanency +immanentism +immaterialism +immaterialist +immaterialists +immateriality +immaterialness +immatureness +immaturity +immeasurableness +immediacies +immediacy +immediateness +immediatism +immenseness +immensities +immensity +immensurability +immersion +immersionism +immersionist +immersionists +immersions +immigrant +immigrants +immigration +immigrations +imminence +imminency +immiscibility +immitigability +immixture +immobilisation +immobilisations +immobilism +immobility +immobilization +immobilizations +immobilizing +immoderacy +immoderateness +immoderation +immodesties +immodesty +immolation +immolations +immolator +immolators +immoralism +immoralist +immoralists +immoralities +immorality +immortal +immortalisation +immortalities +immortality +immortalization +immortals +immortelle +immortelles +immotility +immovability +immovableness +immune +immunisation +immunisations +immunities +immunity +immunization +immunizations +immunoassay +immunochemistry +immunofluorescence +immunogen +immunogenicity +immunoglobulin +immunologist +immunologists +immunology +immunopathology +immunosuppressant +immunosuppressants +immunosuppression +immunotherapy +immurement +immutability +immutableness +imp +impact +impaction +impactions +impactite +impacts +impairer +impairers +impairment +impairments +impala +impalas +impalement +impalements +impalpability +impanation +imparity +imparkation +imparlance +imparlances +impartation +imparter +imparters +impartiality +impartialness +impartibility +imparting +impartment +impassability +impassableness +impasse +impasses +impassibility +impassibleness +impassiveness +impassivities +impassivity +impastation +impasto +impastos +impatience +impatiens +impatienses +impeacher +impeachers +impeachment +impeachments +impeccability +impeccancy +impecuniosity +impecuniousness +impedance +impedances +impediment +impedimenta +impediments +impellent +impellents +impeller +impellers +impendence +impendency +impenetrability +impenitence +impenitency +imperative +imperatives +imperator +imperators +imperceptibility +imperceptibleness +imperfect +imperfectibility +imperfection +imperfections +imperfective +imperfectness +imperfects +imperforation +imperforations +imperial +imperialism +imperialisms +imperialist +imperialists +imperials +imperilment +imperilments +imperiousness +imperishability +imperishableness +imperium +impermanence +impermanency +impermeability +impermeableness +impermissibility +impersonality +impersonation +impersonations +impersonator +impersonators +impertinence +impertinences +impertinencies +impertinency +imperturbability +imperturbation +imperviousness +impetigo +impetigos +impetration +impetrations +impetuosities +impetuosity +impetuousness +impetus +impetuses +impi +impies +impieties +impiety +impignoration +impingement +impingements +impinging +impiousness +impis +impishness +implacability +implacableness +implant +implantation +implantations +implants +implausibility +implausibleness +impleader +impleaders +implement +implementation +implementations +implementer +implementers +implementor +implementors +implements +impletion +impletions +implicating +implication +implications +implicitness +imploration +implorations +implorer +implosion +implosions +implosive +impluvium +impolicy +impoliteness +impoliticness +imponderability +imponderable +imponderableness +imponderables +imponent +imponents +import +importance +importances +importation +importations +importer +importers +importing +imports +importunacies +importunacy +importunateness +importuner +importuners +importunities +importunity +imposer +imposers +imposingness +imposition +impositions +impossibilities +impossibility +impossible +impossibles +impost +imposter +imposters +impostor +impostors +imposts +impostume +impostumes +imposture +impostures +impotence +impotency +impoundage +impounder +impounders +impounding +impoundment +impoundments +impoverishment +impracticability +impracticableness +impracticalities +impracticality +impracticalness +imprecation +imprecations +impreciseness +imprecision +imprecisions +impregnability +impregnation +impregnations +impresa +impresario +impresarios +imprescriptibility +impress +impresses +impressibility +impression +impressionability +impressionism +impressionist +impressionists +impressions +impressiveness +impressment +impressments +impressure +impressures +imprest +imprests +imprimatur +imprimaturs +imprint +imprinter +imprinters +imprinting +imprints +imprisonment +imprisonments +improbabilities +improbability +improbities +improbity +impromptu +impromptus +impropriation +impropriations +impropriator +impropriators +improprieties +impropriety +improvability +improvableness +improve +improvement +improvements +improver +improvers +improves +improvidence +improvisation +improvisations +improvisator +improvisators +improviser +improvisers +improvvisatore +imprudence +imps +impsonite +impudence +impudences +impudicity +impugner +impugners +impugnment +impugnments +impuissance +impuissances +impulse +impulses +impulsion +impulsions +impulsiveness +impunity +impureness +impurities +impurity +imputability +imputableness +imputation +imputations +imputer +imputers +in-and-out +in-between +in-law +in-laws +in-off +in-tray +in-trays +inabilities +inability +inaccessibility +inaccessibleness +inaccuracies +inaccuracy +inaccurateness +inaction +inactivation +inactivity +inadequacies +inadequacy +inadequateness +inadmissibility +inadvertence +inadvertency +inadvisability +inadvisableness +inalienability +inalterability +inalterableness +inamorata +inamoratas +inamorato +inamoratos +inane +inanimateness +inanimation +inanities +inanition +inanity +inappetence +inapplicability +inapplicableness +inappositeness +inappreciativeness +inapprehension +inapprehensiveness +inapproachability +inappropriateness +inaptitude +inaptness +inarticulateness +inattention +inattentiveness +inaudibility +inaudibleness +inaugural +inaugurals +inauguration +inaugurations +inaugurator +inaugurators +inauspiciousness +inbeing +inbeings +inbreeding +inburst +inbursts +inby +incalculability +incalculableness +incalescence +incandescence +incantation +incantations +incapability +incapaciousness +incapacitation +incapacities +incapacity +incarceration +incarcerations +incardination +incarnation +incarnations +incasement +incasements +incaution +incautions +incautiousness +incendiaries +incendiarism +incendiary +incense +incensement +incenses +incensories +incensory +incentive +incentives +inception +inceptions +inceptive +inceptives +inceptor +inceptors +incertitude +incertitudes +incessancy +incessantness +incest +incestuousness +inch +inches +inchoation +inchoations +inchoative +inchoatives +incidence +incidences +incident +incidental +incidentalness +incidentals +incidents +incineration +incinerations +incinerator +incinerators +incipience +incipiency +incipit +incision +incisions +incisiveness +incisor +incisors +incisure +incisures +incitant +incitants +incitation +incitations +incitement +incitements +inciter +inciters +incivilities +incivility +incivism +inclemency +inclination +inclinations +incline +inclines +inclining +inclinings +inclinometer +inclinometers +incloser +inclosers +inclosure +inclosures +inclusion +inclusions +inclusiveness +incog +incogitability +incognita +incognitas +incognito +incognitos +incognizance +incoherence +incoherences +incoherencies +incoherency +incombustibility +incombustible +incombustibleness +income +incomer +incomers +incomes +incoming +incomings +incommensurability +incommensurable +incommensurableness +incommensurateness +incommodiousness +incommodities +incommodity +incommunicability +incommunicableness +incommunicativeness +incommutability +incommutableness +incomparability +incomparableness +incompatibilities +incompatibility +incompatible +incompatibleness +incompatibles +incompetence +incompetency +incompetent +incompetents +incompleteness +incompletion +incompliance +incompliances +incomprehensibility +incomprehensibleness +incomprehension +incomprehensiveness +incompressibility +inconceivability +inconceivableness +inconclusiveness +incongruities +incongruity +incongruousness +inconnu +inconsecutiveness +inconsequence +inconsiderableness +inconsiderateness +inconsideration +inconsistencies +inconsistency +inconsolability +inconsolableness +inconsonance +inconspicuousness +inconstancies +inconstancy +incontestability +incontinence +incontinency +incontrovertibility +inconvenience +inconveniences +inconveniency +inconvertibility +incoordination +incorporation +incorporations +incorporator +incorporators +incorporeality +incorporeity +incorrectness +incorrigibility +incorrigible +incorrigibleness +incorruptibility +incorruptibleness +incorruption +incorruptness +incrassation +incrassations +increase +increaser +increasers +increases +incredibility +incredibleness +incredulities +incredulity +incredulousness +increment +increments +incretion +incrimination +incross +incrustation +incrustations +incubation +incubations +incubator +incubators +incubus +incubuses +incudes +inculcation +inculcations +inculcator +inculcators +inculpation +inculpations +incumbencies +incumbency +incumbent +incumbents +incurability +incurable +incurableness +incurables +incuriosity +incuriousness +incurrence +incurrences +incurring +incursion +incursions +incurvation +incurvations +incurvature +incurvatures +incurve +incurves +incus +incuse +incuses +indaba +indabas +indagation +indagations +indagator +indagators +indamine +indebtedness +indecencies +indecency +indecision +indecisiveness +indecorousness +indecorum +indecorums +indefatigableness +indefeasibility +indefensibility +indefensibleness +indefinableness +indefiniteness +indehiscence +indelibility +indelibleness +indelicacies +indelicacy +indemnification +indemnities +indemnity +indemonstrability +indene +indent +indentation +indentations +indenter +indenters +indention +indentions +indents +indenture +indentures +independence +independences +independencies +independency +independent +independents +indescribability +indescribableness +indestructibility +indestructibleness +indeterminableness +indeterminacy +indeterminateness +indetermination +indeterminism +indeterminist +indeterminists +index +indexation +indexer +indexers +indexes +indexing +indexings +indican +indicant +indicants +indicating +indication +indications +indicative +indicatives +indicator +indicators +indices +indicium +indicolite +indiction +indictions +indictment +indictments +indifference +indifferency +indifferentism +indifferentist +indifferentists +indigence +indigences +indigene +indigenes +indigent +indigestibility +indigestion +indignation +indignations +indignities +indignity +indigo +indigoes +indigos +indigotin +indirection +indirections +indirectness +indiscernibility +indiscernibleness +indiscerptibility +indiscipline +indiscreetness +indiscretion +indiscretions +indiscriminateness +indiscrimination +indispensability +indispensable +indispensableness +indisposedness +indisposition +indispositions +indisputability +indisputableness +indissolubility +indissolubleness +indistinctiveness +indistinctness +indistinguishability +indistinguishableness +inditement +inditements +inditer +inditers +indium +individual +individualisation +individualism +individualist +individualists +individualities +individuality +individualization +individuals +individuation +individuations +indivisibility +indivisibleness +indocility +indoctrination +indoctrinations +indoctrinator +indoctrinators +indole +indolence +indolences +indomethacin +indomitability +indomitableness +indoxyl +indraft +indrafts +indraught +indraughts +indri +indris +indrises +indubitability +indubitableness +inducement +inducements +inducer +inducers +inducing +inductance +inductances +inductee +inductees +inductility +induction +inductions +inductor +inductors +indulgence +indulgences +indulgencies +indulgency +indulger +indulgers +indulging +induline +indulines +indult +indults +indumentum +indumentums +induna +indunas +induplication +induplications +induration +indusium +industrialisation +industrialism +industrialist +industrialists +industrialization +industries +industriousness +industry +indweller +indwellers +inebriant +inebriants +inebriate +inebriates +inebriation +inebriations +inebrieties +inebriety +inedibility +ineducability +ineffability +ineffableness +ineffaceability +ineffectiveness +ineffectuality +ineffectualness +inefficacy +inefficiencies +inefficiency +inelasticity +inelegance +inelegancy +ineligibility +ineligible +ineloquence +ineloquences +ineptitude +ineptness +inequalities +inequality +inequitableness +inequities +inequity +ineradicableness +inerrability +inerrableness +inerrancy +inertia +inertness +inescutcheon +inescutcheons +inessential +inessentials +inessive +inestimability +inestimableness +inevitability +inevitable +inevitableness +inexactitude +inexactitudes +inexactness +inexcusability +inexcusableness +inexecution +inexhaustibility +inexistence +inexistences +inexorability +inexorableness +inexpedience +inexpediency +inexpensiveness +inexperience +inexpertness +inexpiableness +inexplicability +inexplicableness +inexpressiveness +inexpugnability +inexpugnableness +inextensibility +infallibilism +infallibility +infallible +infamies +infamy +infancies +infancy +infant +infanta +infantas +infante +infantes +infanthood +infanticide +infanticides +infantilism +infantilisms +infantries +infantry +infantryman +infants +infarct +infarction +infarctions +infarcts +infare +infares +infatuate +infatuates +infatuation +infatuations +infeasibility +infeasibleness +infection +infections +infectiousness +infectiveness +infector +infectors +infecundity +infelicities +infelicity +inference +inferences +inferior +inferiorities +inferiority +inferiors +infernal +infernality +inferno +infernos +infertility +infestation +infestations +infeudation +infidel +infidelities +infidelity +infidels +infield +infielder +infielders +infields +infighter +infighters +infighting +infill +infills +infiltrate +infiltrates +infiltration +infiltrations +infiltrator +infiltrators +infimum +infiniteness +infinitesimal +infinitesimals +infinitive +infinitives +infinitude +infinity +infirmarian +infirmarians +infirmaries +infirmary +infirmities +infirmity +infirmness +infix +infixes +inflamer +inflamers +inflaming +inflammability +inflammable +inflammableness +inflammation +inflammations +inflatable +inflatables +inflation +inflationism +inflationist +inflationists +inflations +inflator +inflators +inflection +inflections +inflexibility +inflexibleness +inflexion +inflexions +inflicter +infliction +inflictions +inflictor +inflorescence +inflorescences +inflow +inflows +influence +influences +influent +influents +influenza +influx +influxes +info +infolding +infomercial +informalities +informality +informant +informants +information +informativeness +informer +informers +informing +infortune +infortunes +infotainment +infraction +infractions +infractor +infractors +infralapsarian +infralapsarians +infrangibility +infrangibleness +infrastructure +infrastructures +infrequencies +infrequency +infringement +infringements +infundibulum +infuriation +infuser +infusers +infusibility +infusion +infusions +infusoria +infusorian +infusorians +ingate +ingates +ingathering +ingatherings +ingemination +ingeminations +ingeniousness +ingenuities +ingenuity +ingenuousness +ingestion +ingestions +ingine +ingle +ingles +ingloriousness +ingoing +ingoings +ingot +ingots +ingrain +ingraining +ingrains +ingrate +ingrates +ingratiation +ingratitude +ingratitudes +ingredient +ingredients +ingress +ingresses +ingression +ingressions +ingressive +ingroup +ingroups +ingrowth +ingrowths +ingurgitation +ingurgitations +inhabitancies +inhabitancy +inhabitant +inhabitants +inhabitation +inhabitations +inhabiter +inhabiters +inhalant +inhalants +inhalation +inhalations +inhalator +inhalators +inhaler +inhalers +inharmonies +inharmoniousness +inharmony +inhaul +inhauls +inherence +inherences +inherencies +inherency +inheritance +inheritances +inheritor +inheritors +inheritress +inheritresses +inheritrix +inheritrixes +inhesion +inhibition +inhibitions +inhibitor +inhibitors +inhomogeneity +inhospitableness +inhospitality +inhumanity +inhumation +inhumations +inhumer +inhumers +inimicality +inimicalness +inimitability +inimitableness +inion +iniquities +iniquitousness +iniquity +initial +initialization +initializations +initials +initiate +initiates +initiation +initiations +initiative +initiatives +initiator +initiators +injection +injections +injector +injectors +injudiciousness +injunction +injunctions +injurer +injurers +injuries +injuriousness +injury +injustice +injustices +ink +ink-cap +inkberries +inkberry +inkblot +inkblots +inker +inkers +inkhorn +inkhorns +inkiness +inkle +inkling +inklings +inkpot +inkpots +inks +inkstand +inkstands +inkwell +inkwells +inland +inlander +inlanders +inlands +inlay +inlayer +inlayers +inlays +inlet +inlets +inlier +inliers +inline +inmate +inmates +inn +innards +innateness +inner +inners +innervation +inning +innings +innkeeper +innkeepers +innocence +innocency +innocent +innocents +innocuity +innocuousness +innovation +innovations +innovator +innovators +innoxiousness +inns +innuendo +innuendoes +innuendos +innumerability +innumerableness +innumerate +innumerates +innutrition +inobservance +inoculability +inoculating +inoculation +inoculations +inoculator +inoculators +inoculum +inoculums +inodorousness +inoffensiveness +inofficiousness +inoperativeness +inopportuneness +inopportunity +inordinacy +inordinateness +inorganization +inosculation +inosculations +inositol +inpouring +inpourings +input +inputs +inqilab +inqilabs +inquest +inquests +inquietude +inquiline +inquilines +inquilinity +inquirer +inquirers +inquiries +inquiring +inquiry +inquisition +inquisitions +inquisitiveness +inquisitor +inquisitorialness +inquisitors +inroad +inroads +inrush +inrushes +inrushing +inrushings +ins +insalivation +insalivations +insalubrity +insaneness +insanitariness +insanitation +insanity +insatiability +insatiableness +insatiateness +insatiety +inscape +inscapes +inscriber +inscribers +inscription +inscriptions +inscrutability +inscrutableness +insect +insectaries +insectarium +insectariums +insectary +insecticide +insecticides +insectifuge +insectifuges +insectivore +insectivores +insectology +insects +insecurities +insecurity +inselberg +insemination +inseminations +insensateness +insensibility +insensitiveness +insensitivity +insentience +insentiency +inseparability +inseparableness +insert +inserter +inserters +insertion +insertions +inserts +inset +insets +inside +insider +insiders +insides +insidiousness +insight +insights +insigne +insignes +insignia +insignias +insignificance +insignificancy +insincerities +insincerity +insinuation +insinuations +insinuator +insinuators +insipidity +insipidness +insipience +insistence +insistences +insistencies +insistency +insisting +insobriety +insociability +insolation +insolations +insole +insolence +insoles +insolubility +insolubleness +insolvability +insolvencies +insolvency +insolvent +insolvents +insomnia +insomniac +insomniacs +insomnolence +insouciance +insouciances +inspection +inspections +inspector +inspectorate +inspectorates +inspectors +inspectorship +inspectorships +inspiration +inspirations +inspirer +inspirers +inspissation +inspissations +inspissator +inspissators +instabilities +instability +installant +installants +installation +installations +installer +installers +installing +installment +installments +instalment +instalments +instance +instances +instancy +instant +instantaneity +instantaneousness +instants +instar +instars +instatement +instatements +instauration +instaurations +instaurator +instaurators +instep +insteps +instigation +instigations +instigator +instigators +instillation +instillations +instiller +instillers +instilling +instillment +instillments +instilment +instilments +instinct +instincts +institute +instituter +instituters +institutes +institution +institutionalisation +institutionalism +institutionalist +institutionalization +institutions +institutor +institutors +instruction +instructions +instructiveness +instructor +instructors +instructress +instructresses +instrument +instrumental +instrumentalism +instrumentalist +instrumentalists +instrumentality +instrumentals +instrumentation +instruments +insubordinate +insubordination +insubstantiality +insufficiency +insufflation +insufflations +insufflator +insufflators +insula +insulant +insulants +insular +insularism +insularity +insulas +insulation +insulations +insulator +insulators +insulin +insult +insulter +insulters +insults +insuperability +insuperableness +insupportableness +insurability +insurance +insurances +insurant +insurants +insured +insurer +insurers +insurgence +insurgences +insurgencies +insurgency +insurgent +insurgents +insurmountability +insurmountableness +insurrection +insurrectionary +insurrectionism +insurrectionist +insurrections +insusceptibility +inswing +inswinger +inswingers +inswings +intactness +intaglio +intaglioes +intaglios +intake +intakes +intangibility +intangible +intangibleness +intangibles +intarsia +intarsias +integer +integers +integral +integrality +integrals +integrand +integrands +integrating +integration +integrationist +integrationists +integrations +integrator +integrators +integrity +integument +integuments +intellect +intellection +intellections +intellects +intellectual +intellectualism +intellectualist +intellectuality +intellectuals +intelligence +intelligencer +intelligencers +intelligences +intelligentsia +intelligibility +intelligibleness +intemperance +intemperateness +intendance +intendancies +intendancy +intendant +intendants +intended +intendeds +intender +intendment +inteneration +intenerations +intenseness +intensification +intensifier +intensifiers +intension +intensions +intensities +intensity +intensive +intensiveness +intent +intention +intentionality +intentions +intentness +intents +interaction +interactionism +interactionist +interactionists +interactions +interambulacrum +interbrain +interbreeding +interbreedings +intercalation +intercalations +interceder +interceders +intercept +interception +interceptions +interceptor +interceptors +intercepts +intercession +intercessions +intercessor +intercessors +interchange +interchangeability +interchangeableness +interchanger +interchangers +interchanges +intercolumniation +intercom +intercommunication +intercommunion +intercommunity +intercoms +interconnectedness +interconnection +interconnections +interconversion +intercooler +intercoolers +intercostal +intercourse +intercrop +intercrops +intercross +intercrosses +intercurrence +interdependence +interdependences +interdict +interdiction +interdictions +interdicts +interdigitation +interest +interestedness +interestingness +interests +interface +interfaces +interfacing +interfacings +interfenestration +interference +interferences +interferer +interferers +interfering +interferometer +interferometers +interferometry +interferon +interfluence +interfluences +interfusion +interfusions +interglacial +intergradation +intergradations +intergrade +intergrades +intergrowth +intergrowths +interim +interims +interior +interiorities +interiority +interiors +interjection +interjections +interjector +interjectors +interkinesis +interlacement +interlacements +interlamination +interlay +interlays +interleaf +interlineation +interlineations +interlingua +interlinguas +interlining +interlinings +interlink +interlinks +interlocation +interlocations +interlock +interlocking +interlocks +interlocution +interlocutions +interlocutor +interlocutors +interlocutress +interlocutresses +interlocutrix +interlocutrixes +interloper +interlopers +interlude +interludes +interlunation +interlunations +intermarriage +intermarriages +intermeddler +intermeddlers +intermediacy +intermediaries +intermediary +intermediate +intermediates +intermediation +intermediations +intermediator +intermediators +interment +interments +intermezzo +intermezzos +intermigration +intermigrations +interminableness +intermission +intermissions +intermittence +intermittency +intermixture +intermixtures +intermodulation +intern +internal +internality +internalization +internals +international +internationalisation +internationalism +internationalist +internationalists +internationalization +internationals +interne +internee +internees +internes +internet +internist +internists +internment +internments +internode +internodes +interns +internship +internships +internuncio +internuncios +interoceptor +interoceptors +interosculation +interpellant +interpellants +interpellation +interpellations +interpenetration +interphase +interphases +interphone +interphones +interplay +interplays +interpleader +interpleaders +interpolater +interpolation +interpolations +interpolator +interpolators +interposal +interposals +interposer +interposers +interposition +interpositions +interpretation +interpretations +interpreter +interpreters +interpretership +interpreting +interregnum +interregnums +interrelation +interrelations +interrelationship +interrelationships +interrex +interrogation +interrogations +interrogative +interrogatives +interrogator +interrogators +interrogatory +interrupt +interrupter +interrupters +interruption +interruptions +interrupts +intersection +intersections +intersex +intersexes +intersexuality +interspace +interspaces +interspersal +interspersals +interspersion +interspersions +interstadial +interstice +interstices +interstitial +interstratification +intertexture +intertraffic +intertrigo +intertrigos +intertwine +intertwinement +intertwines +intertwist +intertwists +interunion +interunions +interurban +interval +intervale +intervals +intervener +interveners +intervenient +intervenor +intervenors +intervention +interventionism +interventionist +interventions +interview +interviewee +interviewees +interviewer +interviewers +interviews +interweave +interweaves +intestacies +intestacy +intestate +intestates +intestine +intestines +inti +intima +intimacies +intimacy +intimate +intimates +intimation +intimations +intimidation +intimidations +intimist +intimistes +intimists +intinction +intine +intines +intis +intolerability +intolerableness +intolerance +intolerances +intonaco +intonation +intonations +intoner +intoners +intorsion +intorsions +intoxicant +intoxicants +intoxication +intoxications +intractability +intractableness +intrados +intradoses +intransigeance +intransigence +intransigency +intransigent +intransigents +intrant +intrants +intravasation +intravasations +intrenchment +intrenchments +intrepidity +intricacies +intricacy +intricateness +intrigant +intrigante +intrigantes +intrigants +intrigue +intriguer +intriguers +intrigues +intro +introducer +introducers +introduction +introductions +introgression +introgressions +introit +introits +introject +introjection +introjections +introjects +intromission +intromissions +intromitter +intromitters +intros +introspection +introspectionist +introspections +introsusception +introversion +introversions +introvert +introverts +intruder +intruders +intrusion +intrusions +intrusiveness +intubation +intubations +intuition +intuitionalism +intuitionalist +intuitionalists +intuitionism +intuitionist +intuitionists +intuitions +intuitiveness +intuitivism +intumescence +intussusception +inula +inulas +inulase +inulin +inunction +inunctions +inundation +inundations +inurbanity +inuredness +inurement +inurements +inutilities +inutility +invader +invaders +invagination +invaginations +invalid +invalidation +invalidations +invalidism +invalidity +invalidness +invalids +invariability +invariable +invariableness +invariance +invariant +invariants +invasion +invasions +invective +invectives +inveiglement +inveiglements +inveigler +inveiglers +invenit +invention +inventions +inventiveness +inventor +inventories +inventors +inventory +inveracities +inveracity +inverse +inverses +inversion +inversions +invert +invertase +invertebrate +invertebrates +inverter +inverters +invertin +invertor +invertors +inverts +investigating +investigation +investigations +investigator +investigators +investing +investiture +investitures +investment +investments +investor +investors +inveteracy +inveterateness +invidiousness +invigilation +invigilations +invigilator +invigilators +invigorant +invigorants +invigoration +invigorations +invigorator +invigorators +invincibility +invincibleness +inviolability +inviolableness +inviolateness +invisibility +invisible +invisibleness +invisibles +invitation +invitations +invitatory +invite +invitee +invitees +inviter +inviters +invites +invitingness +invocation +invocations +invoice +invoices +involucel +involucels +involucre +involucres +involucrum +involucrums +involuntariness +involute +involutes +involution +involutional +involutions +involvement +involvements +invulnerability +invulnerableness +invultuation +invultuations +inwall +inwalls +inward +inwardness +inwards +inyala +inyalas +iodate +iodates +iodide +iodides +iodine +iodism +iodize +iodizes +iodoform +iolite +ion +ionic +ionisation +ioniser +ionisers +ionium +ionization +ionizer +ionizers +ionomer +ionomers +ionone +ionones +ionopause +ionosphere +ions +iontophoresis +iota +iotacism +iotacisms +iotas +ipecac +ipecacs +ipomoea +ipomoeas +iracundity +irade +irades +irascibility +ire +irefulness +irenicon +irenicons +irenics +ires +iridectomies +iridectomy +irides +iridescence +iridescences +iridium +iridization +iridosmine +iridotomies +iridotomy +iris +irisation +irisations +irises +iritis +irksomeness +iron +iron-gray +iron-grey +ironbark +ironbarks +ironclad +ironclads +ironer +ironers +ironies +ironing +ironings +ironist +ironists +ironmonger +ironmongeries +ironmongers +ironmongery +irons +ironsmith +ironsmiths +ironstone +ironstones +ironware +ironwood +ironwork +ironworks +irony +irradiance +irradiation +irradiations +irrationalism +irrationalist +irrationalists +irrationality +irreality +irreclaimability +irreclaimableness +irreconcilability +irreconcilable +irreconcilableness +irrecoverableness +irredeemability +irredeemableness +irredentism +irredentist +irredentists +irreducibility +irreducibleness +irrefragability +irrefragableness +irrefrangibility +irrefrangibleness +irrefutability +irrefutableness +irregular +irregularities +irregularity +irregulars +irrelativeness +irrelevance +irrelevances +irrelevancies +irrelevancy +irreligion +irreligionist +irreligionists +irreligiousness +irremediableness +irremissibility +irremissibleness +irremovability +irremovableness +irreparability +irreparableness +irrepealability +irrepealableness +irrepressibility +irrepressibleness +irreproachability +irreproachableness +irresistibility +irresistibleness +irresolubility +irresoluteness +irresolution +irresolvability +irresolvableness +irresponsibility +irresponsibleness +irresponsiveness +irretention +irretentiveness +irretrievability +irretrievableness +irreverence +irreverences +irreversibility +irreversibleness +irrevocability +irrevocableness +irrigation +irrigations +irrigator +irrigators +irritability +irritableness +irritancies +irritancy +irritant +irritants +irritation +irritations +irritator +irritators +irruption +irruptions +isagoge +isagoges +isagogic +isagogics +isallobar +isallobars +isatin +ischaemia +ischaemias +ischemia +ischia +ischium +isinglass +island +islander +islanders +islands +isle +isles +islet +islets +ism +isms +isn't +isoagglutination +isoagglutinin +isoantigen +isoantigens +isobar +isobares +isobars +isobath +isobaths +isobront +isobronts +isochasm +isochasms +isocheim +isocheims +isochor +isochores +isochors +isochrone +isochrones +isochronism +isoclinal +isoclinals +isocline +isoclines +isocracies +isocracy +isocyanide +isocyanides +isodiaphere +isodimorphism +isodomum +isoetes +isogamete +isogametes +isogamy +isogeny +isogeotherm +isogeotherms +isogloss +isoglosses +isogon +isogonal +isogonals +isogonic +isogonics +isogram +isograms +isohel +isohels +isohyet +isohyets +isolability +isolation +isolationism +isolationisms +isolationist +isolationists +isolations +isolator +isolators +isoleucine +isoline +isolines +isologue +isologues +isomagnetic +isomer +isomeres +isomerism +isomerisms +isomerization +isomerizations +isomers +isometric +isometrics +isometry +isomorph +isomorphism +isomorphs +isoniazid +isonomy +isoperimeter +isoperimetry +isopleth +isopleths +isopod +isopodan +isopods +isopolity +isoprene +isopropyl +isoptera +isoseismal +isoseismic +isostasy +isothere +isotheres +isotherm +isothermal +isothermals +isotherms +isotone +isotones +isotonicity +isotope +isotopes +isotopies +isotopy +isotron +isotrons +isotropy +isotype +isotypes +issuance +issuances +issue +issuer +issuers +issues +issuing +isthmus +isthmuses +istle +it'll +itacolumite +italic +italicization +italicizations +italics +itch +itches +itchiness +itching +item +itemisation +itemisations +itemization +itemizations +items +iterance +iteration +iterations +ithyphallic +itinerancy +itinerant +itinerants +itineraries +itinerary +ivies +ivories +ivory +ivy +ixia +ixtle +izard +izards +izzard +izzards +jab +jabber +jabberer +jabberers +jabbering +jabberings +jabbers +jabberwocky +jabbing +jabiru +jabirus +jaborandi +jabot +jabots +jabs +jacamar +jacamars +jacana +jacanas +jacaranda +jacarandas +jacinth +jacinths +jack +jack-a-dandy +jack-by-the-hedge +jack-in-the-pulpit +jack-o'-lantern +jack-o'-lanterns +jackal +jackals +jackanapes +jackanapeses +jackaroo +jackaroos +jackass +jackasses +jackboot +jackboots +jackdaw +jackdaws +jackeroo +jackeroos +jacket +jackets +jackfish +jackhammer +jackhammers +jackpot +jackpots +jacks +jackshaft +jacobus +jacobuses +jaconet +jacquard +jacquards +jactation +jactations +jactitation +jaculation +jaculations +jaculator +jaculators +jade +jadedness +jadeite +jades +jaeger +jaegers +jag +jaggedness +jaggery +jags +jaguar +jaguarondi +jaguarondis +jaguars +jaguarundi +jaguarundis +jai +jail +jailer +jailers +jailhouse +jailing +jails +jak +jake +jakes +jaks +jalap +jalapin +jalaps +jalopies +jalopy +jalousie +jalousies +jam +jamb +jambalaya +jambalayas +jambeau +jambes +jambiya +jambiyas +jamboree +jamborees +jambos +jambs +james +jameses +jamjar +jamjars +jamming +jampan +jampans +jampot +jampots +jams +jane +janes +jangle +jangler +janglers +jangles +janissaries +janissary +janitor +janitors +janitorship +janitorships +janitress +janitresses +jap +japan +japanner +japanners +japans +jape +japer +japers +japes +japonica +japonicas +japs +jar +jarful +jarfuls +jargon +jargoneer +jargoneers +jargonisation +jargonisations +jargonist +jargonists +jargonization +jargonizations +jargons +jargoon +jarl +jarls +jarosite +jarrah +jarrahs +jars +jarvey +jarveys +jasey +jaseys +jasmine +jasmines +jasper +jaspers +jass +jato +jatos +jaundice +jaundices +jaunt +jauntiness +jaunts +jaup +jaups +javelin +javelins +jaw +jawan +jawans +jawbone +jawbones +jawbreaker +jawbreakers +jaws +jay +jays +jaywalker +jaywalkers +jazz +jazzer +jazzers +jazzes +jazziness +jazzman +jealousies +jealousness +jealousy +jean +jeans +jebel +jebels +jeep +jeeps +jeer +jeerer +jeerers +jeering +jeerings +jeers +jehad +jehads +jejuneness +jejunity +jejunum +jejunums +jell +jellaba +jellabas +jellies +jello +jellos +jells +jelly +jellybean +jellybeans +jellyfish +jellyfishes +jellying +jemadar +jemadars +jemmies +jemmy +jennet +jennets +jennies +jenny +jeopardy +jequirity +jerbil +jerbils +jerboa +jerboas +jereed +jereeds +jeremiad +jeremiads +jerid +jerids +jerk +jerker +jerkers +jerkin +jerkiness +jerking +jerkings +jerkinhead +jerkinheads +jerkins +jerks +jerky +jeroboam +jeroboams +jerries +jerry +jerry-builder +jerry-builders +jerry-building +jersey +jerseys +jess +jessamine +jessamines +jesses +jest +jestbook +jestbooks +jester +jesters +jesting +jestings +jests +jet +jet-setter +jet-setters +jetliner +jetliners +jets +jetsam +jetted +jetties +jettiness +jetting +jettison +jettisons +jetton +jettons +jetty +jeu +jew's-ear +jew's-harp +jewel +jeweler +jewelers +jewelfish +jewelfishes +jeweller +jewelleries +jewellers +jewellery +jewelry +jewels +jewfish +jewfishes +jiao +jiaos +jib +jibber +jibbers +jibe +jiber +jibers +jibes +jibs +jiffies +jiffy +jig +jigger +jiggers +jiggery-pokery +jigging +jiggings +jiggle +jiggles +jigs +jigsaw +jigsaws +jihad +jihads +jill +jillaroo +jillaroos +jillet +jillets +jillion +jillions +jills +jilt +jilts +jimmies +jimmy +jimpness +jingal +jingals +jingle +jingler +jinglers +jingles +jingo +jingoes +jingoism +jingoist +jingoists +jink +jinker +jinkers +jinks +jinn +jinnee +jinni +jinns +jinrikisha +jinrikishas +jinx +jinxes +jird +jirds +jissom +jitney +jitneys +jitter +jitterbug +jitterbugs +jitters +jive +jives +joannes +joanneses +job +jobbed +jobber +jobbers +jobbery +jobbing +jobes +jobless +joblessness +jobs +jock +jockey +jockeys +jockeyship +jockeyships +jocko +jockos +jocks +jockstrap +jockstraps +jockteleg +jocktelegs +jocoseness +jocosity +jocularity +jocundities +jocundity +joe +joes +joey +joeys +jog +jogger +joggers +jogging +joggle +joggles +jogs +johannes +johanneses +john +johnnies +johnny +johns +join +joinder +joinders +joiner +joiners +joinery +joining +joinings +joins +joint +jointer +jointers +jointress +jointresses +joints +jointure +jointures +joist +joists +jojoba +jojobas +joke +joker +jokers +jokes +jole +joles +jollier +jollies +jollification +jollifications +jolliness +jollities +jollity +jolly +jolt +jolter +jolters +jolts +jongleur +jongleurs +jonquil +jonquils +jook +jooks +jorum +jorums +joseph +josephs +josh +josher +joshers +joshes +joskin +joskins +joss +josser +jossers +josses +jostle +jostlement +jostles +jostling +jostlings +jot +jota +jotas +jots +jotter +jotters +jotting +jottings +jotun +jotunn +jotunns +jotuns +joual +jouk +jouks +joule +joules +jounce +jounces +jour +journal +journalese +journalism +journalist +journalists +journals +journey +journeyer +journeyers +journeying +journeyman +journeys +journo +journos +joust +jouster +jousters +jousts +jovialities +joviality +jovialness +jow +jowl +jowls +jows +joy +joyance +joyances +joyfulness +joylessness +joyousness +joys +juba +jubas +jubbah +jubbahs +jube +jubes +jubilance +jubilances +jubilancies +jubilancy +jubilation +jubilations +jubilee +jubilees +jud +judas +judases +judder +judders +judge +judgement +judgements +judges +judgeship +judgeships +judging +judgment +judgments +judicator +judicators +judicatory +judicature +judicatures +judiciaries +judiciary +judiciousness +judo +judogi +judogis +judoist +judoists +judoka +judokas +juds +jug +jugal +jugals +jugful +jugfuls +juggernaut +juggernauts +juggins +jugginses +juggle +juggler +juggleries +jugglers +jugglery +juggles +juggling +jugglings +jughead +jugheads +jugs +jugular +jugulars +jugum +juice +juicer +juicers +juices +juiciness +juju +jujube +jujubes +jujus +jukebox +jukeboxes +julep +juleps +julienne +juliennes +jumbal +jumbals +jumble +jumbler +jumblers +jumbles +jumbo +jumbos +jumbuck +jumbucks +jump +jump-off +jump-offs +jump-start +jump-starts +jumper +jumpers +jumpiness +jumping +jumps +junco +juncoes +juncos +junction +junctions +juncture +junctures +juncus +juncuses +jungle +jungles +junior +juniorities +juniority +juniors +juniper +junipers +junk +junker +junkers +junket +junketeer +junketeers +junketing +junketings +junkets +junkie +junkies +junkman +junks +junky +junta +juntas +junto +juntos +jupati +jupatis +jupon +jupons +jura +jurant +jurants +jurat +jurats +juries +jurisconsult +jurisconsults +jurisdiction +jurisdictions +jurisprudence +jurisprudent +jurist +jurists +juror +jurors +jury +jury-rig +jury-rigs +juryman +jurywoman +jus +justice +justicer +justicers +justices +justiceship +justiceships +justiciar +justiciaries +justiciars +justiciary +justifiability +justifiableness +justification +justifications +justifier +justifiers +justness +jut +jute +jutes +juts +jutties +jutting +jutty +juvenescence +juvenile +juvenileness +juveniles +juvenility +juxtaposition +juxtapositions +jynx +jynxes +kabala +kabob +kabobs +kabuki +kachina +kachinas +kadi +kadis +kaffiyeh +kaffiyehs +kaftan +kaftans +kago +kagos +kaiak +kaiaks +kaif +kaifs +kail +kails +kailyard +kailyards +kain +kainite +kains +kaiser +kaiserdom +kaiserdoms +kaiserism +kaisers +kaisership +kaiserships +kaka +kakapo +kakapos +kakas +kakemono +kakemonos +kaki +kakis +kakistocracies +kakistocracy +kala-azar +kale +kaleidoscope +kaleidoscopes +kalendar +kalendars +kales +kaleyard +kaleyards +kali +kalian +kalians +kalif +kalifs +kalinite +kalis +kalmia +kalmias +kalong +kalongs +kalpa +kalpak +kalpaks +kalpas +kalpis +kalpises +kalsomine +kalsomines +kamacite +kamala +kamalas +kame +kamees +kamelaukion +kamelaukions +kames +kami +kamikaze +kamikazes +kamis +kampong +kampongs +kamseen +kamseens +kana +kang +kanga +kangaroo +kangarooing +kangaroos +kangas +kangs +kanji +kanjis +kans +kant +kantar +kantars +kantele +kanteles +kants +kanzu +kanzus +kaoliang +kaoliangs +kaolin +kaoline +kaolines +kaolinite +kaon +kaons +kapellmeister +kapellmeisters +kapok +kappa +kaput +karabiner +karabiners +karakul +karakuls +karat +karate +karats +karma +karmas +kaross +karosses +karri +karris +karst +karsts +kart +karts +karyogamy +karyokinesis +karyolymph +karyolysis +karyoplasm +karyosome +karyotin +karyotype +kas +kasbah +kasbahs +kasha +kashas +kashmiri +kashruth +kat +katabasis +katabolism +katakana +katakanas +katharometer +katharometers +katharsis +kathode +kathodes +kation +kations +kats +katydid +katydids +katzenjammer +katzenjammers +kauri +kauris +kava +kavas +kayak +kayaks +kayo +kayoes +kayos +kazoo +kazoos +kea +keas +kebab +kebabs +kebbuck +kebbucks +keblah +keck +keckling +kecks +kecksies +kecksy +ked +keddah +keddahs +kedge +kedgeree +kedgerees +kedges +keds +keek +keeks +keel +keelage +keelages +keelboat +keelboats +keels +keelson +keelsons +keen +keener +keeners +keening +keenness +keens +keep +keeper +keepers +keepership +keeperships +keeping +keepings +keepnet +keepnets +keeps +keepsake +keepsakes +keeshond +keeshonds +kef +keffiyeh +keffiyehs +kefs +keg +kegs +keir +keirs +keister +keisters +keitloa +keitloas +keloid +keloids +kelp +kelpie +kelpies +kelps +kelpy +kelson +kelsons +kelt +kelter +kelters +kelts +kelvin +kelvins +kemp +kemps +ken +kenaf +kenafs +kendo +kennel +kennels +kenning +kennings +keno +kenosis +kens +kent +kentledge +kents +kepi +kepis +keramics +keratin +keratinization +keratitis +keratometer +keratoplasty +keratosis +keratotomy +kerb +kerbing +kerbs +kerbstone +kerbstones +kerchief +kerchiefs +kerf +kerfs +kerfuffle +kerfuffles +kermes +kermeses +kermesite +kermis +kermises +kern +kernel +kernels +kernes +kernicterus +kernite +kerns +kerogen +kerosene +kerosine +kersey +kerseymere +kerygma +kestrel +kestrels +ketch +ketches +ketchup +ketchups +ketene +ketenes +ketone +ketones +ketose +ketosis +kettle +kettledrum +kettledrummer +kettledrummers +kettledrums +kettleful +kettlefuls +kettles +kevel +kevels +kewpie +kex +kexes +key +keyboard +keyboards +keyhole +keyholes +keynote +keynotes +keys +keystone +keystones +keystroke +keystrokes +keyword +keywords +khaddar +khaki +khakis +khalif +khalifate +khalifates +khalifs +khamsin +khamsins +khan +khanate +khanates +khanga +khangas +khans +khansamah +khansamahs +kharif +kharifs +khat +khats +khaya +khayas +kheda +khedas +khedive +khedives +khediviate +khediviates +khoja +khojas +khuskhus +khuskhuses +kiang +kiangs +kiaugh +kiaughs +kibble +kibbles +kibbutz +kibbutznik +kibbutzniks +kibe +kibes +kibitka +kibitkas +kibitzer +kibitzers +kiblah +kibosh +kiboshes +kick +kickback +kickbacks +kickball +kickdown +kickdowns +kicker +kickers +kicking +kicks +kickshaw +kickshaws +kicksorter +kicksorters +kickstand +kickstands +kid +kidder +kidders +kiddies +kidding +kiddle +kiddles +kiddo +kiddy +kidnapper +kidnappers +kidnapping +kidney +kidneys +kids +kier +kiers +kieselguhr +kieserite +kif +kifs +kikoi +kikumon +kikumons +kilderkin +kilderkins +kilerg +kilergs +kiley +kileys +kill +killdee +killdeer +killdeers +killdees +killer +killers +killick +killicks +killifish +killifishes +killikinick +killing +killings +killjoy +killjoys +killock +killocks +kills +kiln +kilns +kilo +kilobar +kilobars +kilobyte +kilobytes +kilocalorie +kilocycle +kilocycles +kilogram +kilograms +kilohertz +kilojoule +kilolitre +kilolitres +kilometer +kilometers +kilometre +kilometres +kilos +kiloton +kilotons +kilovolt +kilovolts +kilowatt +kilowatt-hour +kilowatts +kilt +kilter +kiltie +kilties +kilting +kilts +kimberlite +kimchi +kimono +kimonos +kin +kina +kinaesthesia +kinaesthesis +kinas +kinase +kinases +kinchin +kinchins +kincob +kind +kindergarten +kindergartens +kindler +kindlers +kindliness +kindling +kindlings +kindness +kindnesses +kindred +kindredness +kindredship +kinds +kine +kinema +kinemas +kinematics +kinematograph +kinematographs +kinescope +kinescopes +kinesics +kinesiology +kinesis +kinesthesia +kinesthesis +kinetics +kinetograph +kinetographs +kinetoscope +kinetoscopes +kinfolk +kinfolks +king +king-hit +king-hits +king-of-arms +kingcup +kingcups +kingdom +kingdoms +kingfish +kingfisher +kingfishers +kingfishes +kinghood +kinglet +kinglets +kingliness +kingpin +kingpins +kings +kingship +kingships +kingwood +kingwoods +kinin +kinins +kink +kinkajou +kinkajous +kinkiness +kinkle +kinkles +kinks +kinnikinnick +kino +kinos +kins +kinsfolk +kinsfolks +kinship +kinships +kinsman +kinswoman +kiosk +kiosks +kip +kipes +kipper +kippers +kips +kirghiz +kirk +kirkman +kirks +kirmess +kirmesses +kirn +kirns +kirpan +kirpans +kirsch +kirsches +kirschwasser +kirschwassers +kirtle +kirtles +kisan +kisans +kish +kishes +kishke +kishkes +kismet +kismets +kiss +kiss-off +kiss-offs +kissel +kisser +kissers +kisses +kissing +kist +kists +kistvaen +kistvaens +kit +kitchen +kitchener +kitcheners +kitchenette +kitchenettes +kitchens +kitchenware +kite +kitenge +kitenges +kites +kith +kithara +kitharas +kithes +kiths +kitling +kitlings +kits +kitsch +kitten +kittenishness +kittens +kitties +kittiwake +kittiwakes +kittul +kittuls +kitty +kiva +kivas +kiwi +kiwis +klangfarbe +klavier +klaviers +klaxon +klaxons +klebsiella +klepht +klephts +kleptomania +kleptomaniac +kleptomaniacs +klipspringer +klipspringers +kloof +kloofs +klootchman +klootchmans +klutz +klutzes +klystron +klystrons +knack +knacker +knackeries +knackers +knackery +knacks +knackwurst +knackwursts +knag +knags +knaidel +knap +knapper +knappers +knaps +knapsack +knapsacks +knapweed +knapweeds +knar +knars +knave +knaveries +knavery +knaves +knavishness +knawel +knawels +kneader +kneaders +knee +kneecap +kneecaps +kneehole +kneeholes +kneel +kneeler +kneelers +kneeling +kneels +kneepad +kneepads +knees +knell +knells +knickerbockers +knickers +knife +knife-point +knifes +knight +knight-errant +knight-errantry +knighthood +knighthoods +knightliness +knights +knish +knishes +knit +knits +knitter +knitters +knitting +knitwear +knives +knob +knobbiness +knobble +knobbles +knobkerrie +knobkerries +knobs +knock +knock-knee +knock-on +knockabout +knockabouts +knocker +knockers +knocking +knocking-shop +knocking-shops +knockings +knockout +knockouts +knocks +knockwurst +knockwursts +knoll +knolls +knop +knops +knosp +knosps +knot +knotgrass +knotgrasses +knothole +knotholes +knots +knotter +knotters +knottiness +knotting +knotweed +knotweeds +knotwork +knout +knouts +know +know-all +know-alls +know-how +know-it-all +know-nothing +knowableness +knowe +knower +knowers +knowes +knowing +knowingness +knowledge +known +knows +knuckle +knuckles +knur +knurl +knurling +knurls +knurs +koa +koala +koalas +koan +koans +koas +kob +kobold +kobolds +kobs +kochia +kochias +koel +koels +kofta +koftgar +koftgars +kohl +kohlrabi +kohlrabis +kok-saghyz +kokanee +kola +kolas +kolinskies +kolinsky +kolkhoz +kolkhozes +kolo +kolos +komatik +komatiks +konimeter +konimeters +koniology +koodoo +koodoos +kook +kookaburra +kookaburras +kooks +kop +kopeck +kopecks +kopek +kopeks +koph +kophs +kopje +kopjes +koppa +koppie +koppies +kore +kores +korfball +korma +kormas +koruna +korunas +kos +koses +kosher +koss +koto +kotos +kotow +kotows +kottabos +kottaboses +kotwal +kotwals +koulibiaca +koumiss +kouprey +koupreys +kourbash +kourbashes +kouros +kowhai +kowhais +kowtow +kowtows +kraal +kraals +kraft +krait +kraits +kraken +krakens +krameria +kramerias +krans +kranses +krater +kraters +kremlin +kremlins +kreutzer +kreutzers +kriegspiel +kriegspiels +krill +krills +krimmer +krimmers +kris +krises +kromeskies +kromesky +krone +kruller +krullers +krumhorn +krumhorns +krummhorn +krummhorns +krypton +kudos +kudu +kudus +kudzu +kudzus +kukri +kukris +kulak +kulaks +kumiss +kumquat +kumquats +kunzite +kurbash +kurbashes +kurchatovium +kurrajong +kursaal +kursaals +kurta +kurtas +kurtosis +kurtosises +kuru +kutch +kutches +kvass +kvasses +kwacha +kwachas +kwakiutl +kwakiutls +kwanza +kwashiorkor +kwela +kyanite +kyat +kyats +kyle +kyles +kylie +kylies +kylin +kylins +kylix +kyloe +kyloes +kymograph +kymographs +kyphosis +kyte +kytes +kyu +kyus +la-di-da +laager +laagers +lab +labarum +labarums +labdanum +labefaction +labefactions +label +labellum +labels +labia +labial +labialisation +labialism +labialisms +labialization +labials +labiate +labiates +lability +labiodental +labiodentals +labiovelar +labium +lablab +lablabs +labor +laboratories +laboratory +laborer +laborers +laboriousness +labors +labour +labourer +labourers +labourism +labourist +labourists +labours +labradorite +labret +labrets +labrid +labroid +labrum +labs +laburnum +laburnums +labyrinth +labyrinthitis +labyrinthodont +labyrinthodonts +labyrinths +lac +laccolith +laccoliths +lace +lace-leaf +lacebark +lacebarks +laceration +lacerations +lacertilian +laces +laches +lachrymation +lachrymations +lachrymator +lachrymatories +lachrymators +lachrymatory +lachrymosity +lacing +lacings +lack +lackadaisicalness +lacker +lackers +lackey +lackeys +lackluster +lacks +laconicism +laconicisms +laconism +laconisms +lacquer +lacquerer +lacquerers +lacquers +lacquey +lacqueys +lacrimation +lacrimator +lacrimators +lacrosse +lacs +lactase +lactate +lactates +lactation +lactations +lacteal +lacteals +lactobacillus +lactoflavin +lactometer +lactometers +lactone +lactoprotein +lactoproteins +lactoscope +lactoscopes +lactose +lacuna +lacunar +lacunars +lacunas +lad +ladanum +ladder +ladder-back +ladders +laddie +laddies +lades +ladies +ladies-in-waiting +lading +ladings +ladle +ladleful +ladlefuls +ladles +ladrone +ladrones +lads +lady +lady's-mantle +lady's-slipper +lady's-smock +lady-in-waiting +lady-killer +lady-killers +ladybird +ladybirds +ladybug +ladybugs +ladyfinger +ladyfingers +ladyhood +ladykin +ladykins +ladyship +ladyships +laevorotation +laevorotations +laevulose +lag +lagan +lagans +lagena +lager +lagers +laggard +laggards +laggen +laggens +lagger +laggers +laggin +lagging +laggings +laggins +lagniappe +lagniappes +lagomorph +lagomorphs +lagoon +lagoons +lags +lagune +lagunes +lah +lah-di-dah +lahar +lahars +lahs +laic +laicisation +laicization +laigh +laighs +lair +laird +lairds +lairdship +lairdships +lairs +laissez-passer +laissez-passers +laitance +laitances +laith +laities +laity +lake +laker +lakers +lakes +lakeside +lakh +lakhs +lakin +lalang +lalangs +lalapalooza +lallans +lallation +lallations +lam +lama +lamas +lamaseries +lamasery +lamb +lambda +lambdacism +lambdas +lambencies +lambency +lambert +lamberts +lambkin +lambkins +lambrequin +lambrequins +lambs +lambskin +lambskins +lame +lamed +lamella +lamellibranch +lamellibranchs +lamellicorn +lamellicorns +lameness +lament +lamentation +lamentations +laments +lames +lamia +lamias +lamina +laminate +laminates +lamination +laminations +laminator +laminators +lamington +lamingtons +laminitis +lammergeier +lammergeiers +lammergeyer +lammergeyers +lamp +lampad +lampads +lampas +lampern +lamperns +lampers +lampion +lampions +lamplight +lamplighter +lamplighters +lamplights +lampoon +lampooner +lampooneries +lampooners +lampoonery +lampoonist +lampoonists +lampoons +lamppost +lampposts +lamprey +lampreys +lamprophyre +lamps +lampshade +lampshades +lams +lanai +lanais +lance +lancejack +lancejacks +lancelet +lancelets +lancer +lancers +lances +lancet +lancets +lancination +land +land-grabber +landammann +landammanns +landau +landaulet +landaulets +landaus +landfall +landfalls +landfill +landfills +landform +landforms +landgrave +landgraves +landgraviate +landgraviates +landgravine +landgravines +landholder +landholders +landholding +landing +landings +landladies +landlady +landloper +landlopers +landlord +landlordism +landlords +landman +landmark +landmarks +landmass +landmasses +landowner +landowners +landownership +landrace +landraces +lands +landscape +landscapes +landscaping +landscapist +landscapists +landside +landskip +landskips +landsknecht +landsknechts +landslide +landslides +landslip +landslips +landsman +lane +lanes +langlauf +langouste +langoustes +langoustine +langoustines +langrage +langrages +language +languages +langue +langues +languet +languets +languette +languettes +languidness +languisher +languishers +languishment +languor +langur +langurs +laniard +laniards +laniary +lankiness +lankness +lanner +lanneret +lannerets +lanners +lanolin +lansquenet +lansquenets +lantana +lantanas +lantern +lanterns +lanthanide +lanthanides +lanthanum +lanthorn +lanugo +lanugos +lanyard +lanyards +lap +laparoscope +laparoscopes +laparoscopy +laparotomies +laparotomy +lapdog +lapdogs +lapel +lapels +lapful +lapfuls +lapidaries +lapidarist +lapidarists +lapidary +lapidation +lapidations +lapidification +lapis +lapper +lappers +lappet +lappets +lapping +lappings +laps +lapse +lapses +lapsing +lapstrake +lapsus +laptop +laptops +lapwing +lapwings +lar +larboard +larcener +larceners +larcenies +larcenist +larcenists +larcenous +larceny +larch +larches +lard +larder +larders +lardon +lardons +lards +lares +large +largeness +larges +largess +largesse +largesses +larghetto +larghettos +largo +largos +lariat +lariats +lark +larker +larkers +larkiness +larks +larkspur +larkspurs +larnax +larrigan +larrigans +larrikin +larrikinism +larum +larums +larva +larvicide +larvicides +laryngectomee +laryngectomies +laryngectomy +laryngitis +laryngologist +laryngologists +laryngology +laryngoscope +laryngoscopes +laryngoscopies +laryngoscopist +laryngoscopists +laryngoscopy +laryngotomies +laryngotomy +larynx +larynxes +lasagna +lasagnas +lasagne +lasagnes +lascar +lascars +lasciviousness +laser +lasers +lash +lash-up +lash-ups +lasher +lashers +lashes +lashing +lashings +lashkar +lashkars +lasket +laskets +lass +lasses +lassie +lassies +lassitude +lassitudes +lasso +lassoes +lassos +last +last-ditch +last-minute +laster +lasters +lasting +lastingness +lasts +lat +latch +latches +latchet +latching +latchkey +latchkeys +lateen +latency +lateness +lateral +laterality +laterite +latest +latex +latexes +lath +lathe +lathee +lathees +lather +lathers +lathes +lathi +lathing +lathings +lathis +laths +lathyrus +lathyruses +latices +latifundium +latino +latinos +latitude +latitudes +latitudinarian +latitudinarianism +latitudinarians +latke +latkes +latria +latrine +latrines +lats +latten +lattens +latter +lattice +lattices +latticing +latticinio +laud +laudability +laudableness +laudanum +laudation +laudations +lauder +lauders +lauds +laugh +laughableness +laugher +laughers +laughing +laughings +laughs +laughter +laughters +launce +launces +launch +launcher +launchers +launches +launching +launder +launderer +launderers +launderette +launderettes +laundering +launders +laundress +laundresses +laundries +laundry +laundryman +laundrywoman +laura +lauras +laureate +laureates +laureateship +laurel +laurels +laurustinus +laurustinuses +lauwine +lauwines +lav +lava +lava-lava +lavabo +lavaboes +lavabos +lavage +lavages +lavaliere +lavalieres +lavas +lavatera +lavation +lavatories +lavatory +lavender +lavenders +laver +laverock +laverocks +lavers +laves +lavishment +lavishments +lavishness +lavolta +lavs +law +law-breaking +lawfulness +lawgiver +lawgivers +lawing +lawings +lawlessness +lawmaker +lawmakers +lawman +lawn +lawns +lawrencium +laws +lawsuit +lawsuits +lawyer +lawyers +laxative +laxativeness +laxatives +laxity +laxness +lay +lay-by +lay-bys +lay-up +layabout +layabouts +layer +layering +layerings +layers +layette +layettes +laying +layings +layman +layover +layovers +layperson +lays +laywoman +lazar +lazaret +lazarets +lazarette +lazarettes +lazaretto +lazarettos +lazars +laze +lazes +laziness +lazuli +lazulite +lazurite +lea +leach +leaches +leaching +leachings +lead +lead-in +lead-ins +leadenness +leader +leaders +leadership +leaderships +leading +leadings +leads +leadsman +leadwort +leadworts +leaf +leaf-climber +leaf-climbers +leaf-cutter +leaf-hopper +leafage +leafages +leafiness +leafing +leaflet +leaflets +leafs +league +leaguer +leaguers +leagues +leak +leakage +leakages +leaker +leakers +leakiness +leaks +lealty +lean +lean-to +lean-tos +leaner +leaning +leanings +leanness +leans +leap +leaper +leapers +leapfrog +leapfrogs +leaping +leaps +lear +learnedness +learner +learners +learning +lears +leas +lease +lease-lend +leaseback +leasebacks +leasehold +leaseholder +leaseholders +leaseholds +leaser +leasers +leases +leash +leashes +leasing +leasings +least +leasts +leat +leather +leatherette +leatherneck +leathernecks +leathers +leats +leave +leave-taking +leave-takings +leaven +leavening +leavenings +leavens +leaver +leavers +leaves +leaving +leavings +lebbek +lebbeks +lecanora +lecanoras +lech +lecher +lecheries +lecherousness +lechers +lechery +leches +lechwe +lechwes +lecithin +lectern +lecterns +lectin +lection +lectionaries +lectionary +lections +lector +lectorate +lectorates +lectors +lectorship +lectorships +lecture +lecturer +lecturers +lectures +lectureship +lectureships +lecturing +led +ledge +ledger +ledgers +ledges +ledum +ledums +lee +leech +leechee +leechees +leeches +leek +leeks +leer +leeriness +leers +lees +leet +leets +leeward +leeway +leeways +left +left-footer +left-footers +left-handedness +left-hander +left-handers +left-winger +left-wingers +lefties +leftism +leftist +leftists +leftover +leftovers +lefts +lefty +leg +leg-of-mutton +leg-pull +leg-puller +leg-pulling +leg-pulls +legacies +legacy +legalese +legalisation +legalisations +legalism +legalist +legalists +legality +legalization +legalizations +legate +legatee +legatees +legates +legateship +legateships +legation +legations +legato +legator +legators +legatos +legend +legendist +legendists +legendry +legends +leger +legerdemain +legerity +legginess +legging +leggings +leghorn +leghorns +legibility +legion +legionaries +legionary +legionnaire +legionnaires +legions +legislating +legislation +legislations +legislative +legislator +legislators +legislatorship +legislatorships +legislature +legislatures +legist +legists +legit +legitim +legitimacy +legitimateness +legitimation +legitimations +legitimisation +legitimism +legitimist +legitimists +legitimization +legitims +leglen +leglens +legroom +legs +legume +legumes +legumin +legumins +legwork +lehr +lehrs +lei +leipoa +leipoas +leis +leishmania +leishmanias +leishmaniasis +leister +leisters +leisure +leisureliness +leisures +leitmotif +leitmotifs +leitmotiv +leitmotivs +lek +leks +lekythos +lekythoses +lem +leman +lemes +lemma +lemmas +lemming +lemmings +lemniscate +lemniscates +lemniscus +lemon +lemonade +lemonades +lemons +lempira +lempiras +lemur +lemures +lemuroid +lemuroids +lemurs +lend-lease +lender +lenders +lending +lendings +length +lengthening +lengthiness +lengthman +lengths +lenience +leniency +lenis +lenition +lenitions +lenitive +lenitives +lenity +leno +lenos +lens +lenses +lensman +lent +lenticel +lenticels +lenticle +lenticles +lentigo +lentil +lentils +lento +lentoid +lentos +leone +leones +leopard +leopard's-bane +leopardess +leopardesses +leopards +leotard +leotards +leper +lepers +lepidolite +lepidomelane +lepidopterist +lepidopterists +lepidopterology +leprechaun +leprechauns +leprosarium +leprosariums +leprosy +leptocephalus +leptocephaluses +lepton +leptons +leptosome +leptosomes +leptospirosis +leptotene +lesbian +lesbianism +lesbians +lese-majesty +lesion +lesions +less +lessee +lessees +lessening +lesser +lesson +lessons +lessor +lessors +let +letch +letches +lethalities +lethality +lethargy +lets +letter +letterer +letterers +letterhead +letterheads +lettering +letterings +letterpress +letterpresses +letters +letting +lettings +lettuce +lettuces +leu +leucine +leucite +leucoblast +leucocyte +leucocytes +leucocytosis +leucoderma +leucoma +leucopenia +leucoplast +leucoplasts +leucopoiesis +leucorrhoea +leucotome +leucotomes +leucotomies +leucotomy +leukaemia +leukemia +leukocyte +leukocytes +lev +levant +levants +levator +levators +levee +levees +level +level-headedness +leveler +levelers +leveling +leveller +levellers +levelness +levels +lever +leverage +leverages +leveraging +leveret +leverets +levers +leviathan +leviathans +levies +levigation +levin +levins +levirate +levitation +levitations +levities +levity +levulose +levy +lewdness +lewis +lewises +lewisite +lewisson +lewissons +lex +lexeme +lexemes +lexicographer +lexicographers +lexicography +lexicologist +lexicologists +lexicology +lexicon +lexicons +lexigraphy +lexis +ley +leys +liabilities +liability +liaison +liaisons +liana +lianas +liang +liangs +liar +liard +liards +liars +lib +libation +libations +libber +libbers +libeccio +libeccios +libel +libeler +libelers +libellant +libellants +libellee +libellees +libels +liber +liberal +liberalisation +liberalisations +liberalism +liberalist +liberalists +liberalities +liberality +liberalization +liberalizations +liberalness +liberals +liberation +liberations +liberator +liberators +libers +libertarian +libertarianism +libertarians +liberticide +liberticides +liberties +libertinage +libertine +libertines +libertinism +liberty +libidinousness +libido +libidos +libra +librarian +librarians +librarianship +libraries +library +libration +librations +librettist +librettists +libretto +librettos +libs +lice +licence +licences +license +licensee +licensees +licenser +licensers +licenses +licensor +licensors +licentiate +licentiates +licentiousness +lich +lichee +lichees +lichen +lichenin +lichenism +lichenologist +lichenologists +lichenology +lichens +lichgate +lichgates +lichi +lichis +licht +lichts +lick +licker +licker-in +lickerishness +lickers +licking +lickings +licks +lickspittle +lickspittles +licorice +licorices +lictor +lictors +lid +lido +lidocaine +lidos +lids +lie +lie-abed +lie-abeds +lie-down +lie-downs +lie-in +lie-ins +lied +liege +liegeman +lieges +lien +liens +lientery +lier +lierne +liernes +liers +lies +lieu +lieus +lieutenancies +lieutenancy +lieutenant +lieutenants +life +life-saver +life-savers +lifeboat +lifeboatman +lifeboats +lifeguard +lifeguards +lifelessness +lifeline +lifelines +lifer +lifers +lifespan +lifespans +lifestyle +lifestyles +lifetime +lifetimes +lift +lift-off +lift-offs +liftboy +liftboys +lifter +lifters +liftman +lifts +ligament +ligaments +ligan +ligand +ligands +ligans +ligation +ligations +ligature +ligatures +liger +ligers +light +light-headedness +light-heartedness +light-horseman +light-mindedness +light-o'-love +light-o'-loves +light-year +light-years +lightbulb +lightbulbs +lightening +lightenings +lighter +lighterage +lighterages +lighterman +lighters +lighthouse +lighthouses +lighting +lightings +lightness +lightning +lights +lightship +lightships +lightsomeness +lightweight +lightweights +lignaloes +ligne +lignes +lignification +lignin +lignite +lignocaine +lignocellulose +lignum +ligroin +ligula +ligulas +ligule +ligules +ligure +ligures +likableness +like +like-mindedness +likelihood +likelihoods +likeliness +likeness +likenesses +likening +liker +likers +likes +likin +liking +likings +likins +lilac +lilacs +lilangeni +lilies +lilliputian +lilly-pillies +lilly-pilly +lilt +lilts +lily +lily-trotter +lily-trotters +lima +limas +limax +limb +limber +limbers +limbo +limbos +limbs +lime +limeade +limekiln +limekilns +limelight +limelights +limen +limens +limerick +limericks +limes +limestone +limestones +limewater +limey +limeys +liminess +limit +limitarian +limitarians +limitation +limitations +limited +limitedness +limiter +limiters +limites +limiting +limitings +limitlessness +limits +limmer +limmers +limner +limners +limning +limnologist +limnologists +limnology +limo +limonite +limos +limousine +limousines +limp +limper +limpet +limpets +limpidity +limpidness +limping +limpings +limpkin +limpkins +limpness +limps +limulus +limuluses +lin +linac +linacs +linage +linages +linalool +linch +linches +linchpin +linchpins +lincomycin +lincrusta +linctus +linctuses +lindane +linden +lindens +line +line-engraving +line-out +line-outs +line-shooter +line-up +line-ups +lineage +lineages +lineament +lineaments +linearities +linearity +lineation +lineations +linebacker +linebackers +lineman +linemen +linen +linens +liner +liners +lines +linesman +ling +linga +lingam +lingams +lingas +lingerer +lingerers +lingerie +lingering +lingerings +lingo +lingoes +lings +lingua +lingual +linguas +linguine +linguini +linguist +linguistician +linguisticians +linguistics +linguists +linhay +linhays +liniment +liniments +linin +lining +linings +link +linkage +linkages +linkboy +linkboys +linkman +links +linkwork +linn +linnet +linnets +linns +lino +linocut +linocuts +linoleum +linos +lins +linsang +linsangs +linseed +linseeds +linsey +linsey-woolsey +linstock +linstocks +lint +lintel +lintels +linter +linters +lints +lintwhite +lion +lion-hunter +lion-hunters +lioncel +lioncels +lioness +lionesses +lionet +lionets +lionisation +lionization +lions +lip +lip-reading +lipase +lipases +lipectomies +lipectomy +lipid +lipide +lipides +lipids +lipochrome +lipogram +lipogrammatism +lipogrammatist +lipogrammatists +lipograms +lipography +lipoid +lipoids +lipoma +lipoprotein +lipoproteins +lippen +lippens +lippie +lippies +lips +lipstick +lipsticks +liquation +liquations +liquefacient +liquefacients +liquefaction +liquefier +liquefiers +liquescence +liqueur +liqueurs +liquid +liquidation +liquidations +liquidator +liquidators +liquidities +liquidity +liquidizer +liquidizers +liquidness +liquids +liquidus +liquor +liquorice +liquorices +liquors +lira +liras +liriodendron +liriodendrons +liripipe +liripipes +lisle +lisles +lisp +lisper +lispers +lisps +lissomeness +lissomness +list +listel +listels +listener +listeners +listening +lister +listeria +listeriosis +listing +listings +listlessness +lists +lit +litanies +litany +litchi +litchis +liter +literacy +literal +literaliser +literalisers +literalism +literalist +literalists +literality +literalizer +literalizers +literalness +literals +literariness +literate +literates +literati +literation +literator +literators +literature +literatures +lites +lith +litharge +litheness +lithia +lithiasis +lithium +litho +lithograph +lithographer +lithographers +lithographs +lithography +litholapaxy +lithology +lithomancy +lithomarge +lithophane +lithophyte +lithophytes +lithopone +lithoprint +lithoprints +lithos +lithosphere +lithotomies +lithotomist +lithotomists +lithotomy +lithotrite +lithotrites +lithotrities +lithotritist +lithotritists +lithotrity +liths +litigant +litigants +litigation +litigator +litigators +litigiousness +litmus +litotes +litre +litres +litter +litters +little +littleness +littles +littoral +littorals +liturgics +liturgies +liturgiologist +liturgiologists +liturgiology +liturgist +liturgists +liturgy +lituus +lituuses +livability +liveability +livelihood +livelihoods +liveliness +livelong +livelongs +livener +liveners +liver +liver-rot +liveries +livers +liverwort +liverworts +liverwurst +liverwursts +livery +liveryman +lives +livestock +liveware +lividity +lividness +living +livings +livraison +livre +livres +lixiviation +lixiviations +lixivium +lizard +lizards +llama +llamas +llano +llanos +loach +loaches +load +load-shedding +loader +loaders +loading +loadings +loads +loadstar +loadstars +loadstone +loadstones +loaf +loafer +loafers +loafing +loafings +loafs +loam +loaminess +loams +loan +loaner +loaners +loaning +loanings +loans +loather +loathers +loathing +loathings +loathsomeness +loaves +lob +lobation +lobations +lobbies +lobby +lobbyer +lobbyers +lobbyist +lobbyists +lobe +lobectomies +lobectomy +lobelia +lobelias +lobeline +lobes +loblollies +loblolly +lobo +lobos +lobotomies +lobotomy +lobs +lobscouse +lobscouses +lobster +lobsters +lobulation +lobule +lobules +lobulus +lobus +lobworm +lobworms +local +locale +locales +localisation +localisations +localiser +localisers +localism +localisms +localist +localities +locality +localization +localizations +localizer +localizers +locals +locating +location +locations +locative +locatives +loch +lochia +lochs +loci +lock +lock-gate +lock-gates +lockage +lockages +locker +lockers +locket +lockets +locking +lockman +locknut +locknuts +lockout +lockouts +locks +locksmith +locksmiths +lockstitch +lockstitches +loco +locoed +locoes +locoman +locomobile +locomobiles +locomobility +locomotion +locomotions +locomotive +locomotives +locomotivity +locos +locule +locules +loculus +locum +locum-tenency +locums +locus +locust +locusta +locusts +locution +locutions +locutories +locutory +lode +loden +lodens +lodes +lodestar +lodestars +lodestone +lodestones +lodge +lodgement +lodgements +lodgepole +lodgepoles +lodger +lodgers +lodges +lodging +lodgings +lodgment +lodgments +lodicule +lodicules +loess +loft +lofter +lofters +loftiness +lofts +log +logan +loganberries +loganberry +logans +logaoedic +logarithm +logarithms +loge +loges +logger +loggerhead +loggerheads +loggers +loggia +loggias +logging +loggings +logia +logic +logicality +logicalness +logician +logicians +logicism +logics +logion +logistic +logistician +logisticians +logistics +loglog +loglogs +logo +logogram +logograms +logograph +logographer +logographers +logographs +logography +logogriph +logogriphs +logomachist +logomachists +logomachy +logopaedics +logopedics +logorrhea +logorrhoea +logos +logotype +logotypes +logs +logwood +logwoods +loin +loins +loir +loirs +loiterer +loiterers +loll +lollapalooza +loller +lollers +lollies +lollipop +lollipops +lolls +lolly +loma +lomas +lombard +lome +loment +loments +lomentum +loneliness +loneness +loner +loners +lonesome +lonesomeness +long +long-distance +long-headedness +long-sightedness +long-suffering +long-windedness +longa +longan +longanimity +longans +longas +longboat +longboats +longbow +longbows +longe +longeron +longerons +longes +longevities +longevity +longhand +longhorn +longhorns +longicorn +longicorns +longing +longings +longitude +longitudes +longness +longs +longship +longships +longshoreman +longueur +longueurs +longways +lonicera +loo +loobies +looby +loof +loofa +loofah +loofahs +loofas +loofs +look +look-in +look-see +look-sees +looker +looker-on +lookers +looking +looking-glass +looking-glasses +lookings +lookout +lookouts +looks +loom +looming +looms +loon +loonies +looniness +loons +loony +loop +loop-line +looper +loopers +loophole +loopholes +loops +loos +loose +loose-leaf +loosebox +looseboxes +loosener +looseners +looseness +loosening +looses +loosing +loot +looter +looters +looting +loots +lop +lope +loper +lopers +lopes +lophobranch +lophobranchiate +lophobranchs +lophophore +lopolith +lopoliths +lopper +loppers +lops +lopsidedness +loquaciousness +loquacity +loquat +loquats +loquitur +loran +lorans +lord +lording +lordings +lordliness +lordling +lordlings +lordolatry +lordosis +lords +lords-and-ladies +lordship +lordships +lore +lores +lorgnette +lorgnettes +lorgnon +lorgnons +lorica +lorication +lories +lorikeet +lorikeets +lorimer +lorimers +loris +lorises +lorries +lorry +lory +losel +losels +loser +losers +loss +losses +lost +lot +lota +lotas +lote +lotes +loti +lotion +lotions +lots +lotted +lotteries +lottery +lotting +lotto +lottos +lotus +lotus-eater +lotus-eaters +lotuses +loudmouth +loudmouths +loudness +loudspeaker +loudspeakers +lough +loughs +louis +lounge +lounger +loungers +lounges +loup +loupe +loupes +loups +louse +louses +lousewort +louseworts +lousiness +lout +loutishness +louts +louver +louvers +louvre +louvres +lovableness +lovage +lovages +lovat +lovats +love +love-in-a-mist +love-in-idleness +love-lies-bleeding +love-making +love-token +love-tokens +loveableness +lovebird +lovebirds +lovelies +loveliness +lovelock +lovelocks +lovelornness +lovely +lover +lovers +loves +lovey +loveys +loving-kindness +lovingness +low +low-down +low-rise +low-spiritedness +lowan +lowans +lowboy +lowboys +lower +lower-case +lowering +lowerings +lowers +lowes +lowland +lowlander +lowlanders +lowlands +lowlihead +lowliness +lown +lowness +lowns +lows +lox +loxes +loxodrome +loxodromes +loxodromics +loyalist +loyalists +loyalties +loyalty +lozenge +lozenges +luau +luaus +lubber +lubbers +lube +lubes +lubra +lubras +lubricant +lubricants +lubrication +lubrications +lubricator +lubricators +lubricity +lubritorium +lucarne +lucarnes +luce +lucency +lucerne +lucernes +luces +lucidity +lucidness +lucifer +luciferase +luciferin +lucifers +luck +luckie +luckies +luckiness +lucklessness +lucks +lucrativeness +lucre +lucubration +lucubrations +lucubrator +lucubrators +lud +ludicrousness +ludo +ludos +luds +lues +luff +luffa +luffas +luffs +lug +luge +luges +luggage +lugger +luggers +luggie +luggies +luging +lugings +lugs +lugsail +lugsails +lugubriousness +lugworm +lugworms +luke +lukewarmness +lukewarmth +lull +lullabies +lullaby +lulls +lulu +lulus +lumbago +lumbagos +lumber +lumberer +lumberers +lumbering +lumberings +lumberjacket +lumberjackets +lumberman +lumbers +lumbrical +lumbricalis +lumbricalises +lumbricals +lumen +lumens +luminal +luminance +luminances +luminaries +luminary +luminescence +luminosities +luminosity +luminousness +lummox +lummoxes +lump +lumpectomies +lumpectomy +lumper +lumpers +lumpfish +lumpfishes +lumpiness +lumpishness +lumps +lumpsucker +lumpsuckers +luna +lunacies +lunacy +lunarian +lunarians +lunas +lunate +lunatic +lunatics +lunation +lunations +lunch +luncheon +luncheonette +luncheonettes +luncheons +luncher +lunchers +lunches +lunching +lunchroom +lunchrooms +lunchtime +lunchtimes +lune +lunes +lunette +lunettes +lung +lunge +lunges +lungi +lungies +lungis +lungs +lungwort +lungworts +lunkhead +lunkheads +lunt +lunts +lunula +lunulas +lunule +lunules +lupin +lupine +lupines +lupins +lupulin +lupus +lur +lurch +lurcher +lurchers +lurches +lurdan +lurdanes +lurdans +lure +lures +luridness +lurk +lurker +lurkers +lurks +lurs +lusciousness +lush +lushes +lushness +lust +luster +lusters +lusterware +lustfulness +lustihood +lustiness +lustration +lustrations +lustre +lustres +lustreware +lustring +lustrum +lustrums +lusts +lutanist +lutanists +lute +lutecium +lutein +luteinization +luteinizations +lutenist +lutenists +luteolin +lutes +lutestring +lutestrings +lutetium +luthern +lutherns +luting +lutings +lutist +lutists +lux +luxation +luxations +luxe +luxes +luxulianite +luxuriance +luxuriation +luxuriations +luxuries +luxuriousness +luxury +lyam-hound +lyam-hounds +lycanthrope +lycanthropes +lycanthropy +lyceum +lyceums +lychee +lychees +lychgate +lychgates +lychnis +lychnises +lychnoscope +lychnoscopes +lycopod +lycopods +lyddite +lye +lyes +lying +lying-in +lyings +lyme-hound +lyme-hounds +lymph +lymphad +lymphads +lymphangitis +lymphatic +lymphocyte +lymphocytes +lymphoma +lymphomas +lymphs +lyncher +lynchers +lynchet +lynchets +lynching +lynchings +lynchpin +lynchpins +lynx +lynxes +lyophilization +lyre +lyres +lyric +lyricism +lyricisms +lyricist +lyricists +lyrics +lyrism +lyrisms +lyrist +lyrists +lysimeter +lysimeters +lysin +lysine +lysins +lysis +lysol +lysosome +lysosomes +lysozyme +lysozymes +lyssa +lytta +lyttas +ma'am +maar +maars +mac +macaco +macacos +macadam +macadamia +macadamise +macadamises +macaque +macaques +macaroni +macaronic +macaronics +macaronies +macaronis +macaroon +macaroons +macaw +macaws +mace +macer +maceration +macerator +macerators +macers +maces +machan +machans +machete +machetes +machicolation +machicolations +machination +machinations +machinator +machinators +machine +machineries +machinery +machines +machinist +machinists +machismo +machree +machtpolitik +machzor +macintosh +macintoshes +mack +mackerel +mackerels +mackinaw +mackinaws +mackintosh +mackintoshes +mackle +mackles +macks +macle +macles +macro +macrobiotics +macrocephaly +macrocosm +macrocosms +macrocyte +macrocytes +macrodome +macrodomes +macroeconomics +macrogamete +macrogametes +macromolecule +macromolecules +macron +macrons +macrophage +macrophages +macropodidae +macros +macrosporangium +macrospore +macrospores +macrozamia +macs +macula +maculation +maculations +macule +macules +madam +madame +madams +madcap +madcaps +madder +madders +madeira +madeleine +madeleines +mademoiselle +mademoiselles +madhouse +madhouses +madman +madness +madras +madrases +madrepore +madrepores +madreporite +madrigal +madrigalist +madrigalists +madrigals +madwoman +madwort +madworts +maelstrom +maelstroms +maenad +maenads +maestoso +maestro +maestros +mafficker +maffickers +mafioso +mag +magazine +magazines +mage +magenta +magentas +mages +maggot +maggots +magi +magic +magician +magicians +magics +magilp +magilps +magisteries +magistery +magistracies +magistracy +magistral +magistrate +magistrates +magma +magmas +magnalium +magnanimities +magnanimity +magnate +magnates +magnesia +magnesias +magnesite +magnesium +magnet +magnetics +magnetisation +magnetisations +magnetiser +magnetisers +magnetism +magnetite +magnetization +magnetizations +magnetizer +magnetizers +magneto +magnetograph +magnetographs +magnetometer +magnetometers +magnetometry +magneton +magnetons +magnetos +magnetosphere +magnetospheres +magnetron +magnetrons +magnets +magnification +magnifications +magnificence +magnifico +magnificoes +magnifier +magnifiers +magniloquence +magnitude +magnitudes +magnolia +magnolias +magnum +magnums +magot +magots +magpie +magpies +mags +maguey +magueys +magus +mah-jongg +maharaja +maharajah +maharajahs +maharajas +maharanee +maharanees +maharani +maharanis +maharishi +maharishis +mahatma +mahatmas +mahlstick +mahlsticks +mahoe +mahoes +mahoganies +mahogany +mahonia +mahonias +mahout +mahouts +mahseer +mahseers +mahua +mahuas +maid +maidan +maidans +maiden +maidenhair +maidenhair-tree +maidenhairs +maidenhead +maidenheads +maidenhood +maidenliness +maidens +maidhood +maids +maidservant +maidservants +maigre +maigres +mail +mailboat +mailboats +mailcoach +mailcoaches +mailer +mailers +mailing +mailings +maillot +maillots +mailman +mails +mailsack +mailsacks +maim +maimed +maimedness +maiming +maimings +maims +main +mainbrace +mainbraces +mainframe +mainframes +mainland +mainlander +mainlanders +mainlands +mainliner +mainliners +mainmast +mainmasts +mains +mainsail +mainsails +mainsheet +mainsheets +mainspring +mainsprings +mainstay +mainstays +mainstream +mainstreams +maintainer +maintainers +maintenance +maintenances +maintop +maintops +maintopsail +maintopsails +maiolica +mair +maisonette +maisonettes +maisonnette +maisonnettes +maize +maizes +majesties +majesty +majolica +major +major-domo +major-domos +major-general +major-generalcy +major-generals +major-generalship +majorette +majorettes +majorities +majority +majors +majuscule +majuscules +make +make-believe +make-peace +make-ready +make-up +makefast +makefasts +maker +makers +makes +makeshift +makeweight +makeweights +makimono +makimonos +making +makings +mako +makos +mala +malachite +malacia +malacologist +malacologists +malacology +malacopterygian +malacostracan +malacostracans +maladaptation +maladaptations +maladdress +maladies +maladjustment +maladjustments +maladroitness +malady +malaise +malaises +malamute +malamutes +malanders +malapert +malapertness +malapportionment +malapropism +malapropisms +malapropos +malar +malaria +malarias +malarkey +malars +malassimilation +malate +malates +malcontent +malcontentedness +malcontents +male +maleate +maleates +malediction +maledictions +malefaction +malefactor +malefactors +maleficence +malemute +malemutes +maleness +males +malevolence +malfeasance +malfeasances +malfeasant +malformation +malformations +malfunction +malfunctions +mali +malice +malices +maliciousness +malignance +malignancy +maligner +maligners +malignities +malignity +malignment +malingerer +malingerers +malingering +malis +malison +malisons +malkin +malkins +mall +mallam +mallams +mallanders +mallard +mallards +malleability +malleableness +malleation +malleations +mallee +mallees +mallemuck +mallemucks +mallenders +malleolus +mallet +mallets +malleus +mallow +mallows +malls +malm +malms +malmsey +malmseys +malnourishment +malnutrition +malocclusion +malodorousness +malodour +malodours +malposition +malpositions +malpractice +malpractices +malpractitioner +malt +maltase +malted +maltha +malthas +malting +maltings +maltman +maltose +maltreatment +malts +maltster +maltsters +malva +malvas +malvasia +malversation +malvoisie +malvoisies +mam +mama +mamas +mamba +mambas +mambo +mambos +mamelon +mamelons +mamilla +mamma +mammal +mammalian +mammalogist +mammalogists +mammalogy +mammals +mammas +mammee +mammees +mammet +mammets +mammies +mammilla +mammillaria +mammillarias +mammock +mammocks +mammogram +mammograms +mammography +mammon +mammonism +mammonist +mammonists +mammonite +mammonites +mammoth +mammoths +mammy +mams +mamzer +mamzers +man +man-at-arms +man-child +man-day +man-days +man-eater +man-eaters +man-hour +man-hours +man-of-war +man-year +man-years +mana +manacle +manacles +manage +manageability +manageableness +management +managements +manager +manageress +manageresses +managers +managership +managerships +manages +managing +manakin +manakins +manas +manatee +manatees +manche +manches +manchet +manchets +manchineel +manchineels +manciple +manciples +mandala +mandalas +mandamus +mandamuses +mandarin +mandarines +mandarins +mandataries +mandatary +mandate +mandates +mandatories +mandatory +mandible +mandibles +mandibulate +mandilion +mandilions +mandioc +mandioca +mandiocas +mandiocs +mandir +mandirs +mandola +mandolas +mandolin +mandolines +mandolins +mandorla +mandorlas +mandragora +mandrake +mandrakes +mandrel +mandrels +mandril +mandrill +mandrills +mandrils +manducation +manducations +mane +manes +maneuver +maneuverability +maneuverer +maneuvering +maneuvers +manfulness +mangabey +mangabeys +manganate +manganates +manganese +manganite +manganites +mange +mangel-wurzel +mangel-wurzels +manger +mangers +manginess +mangle +mangler +manglers +mangles +mango +mangoes +mangold +mangold-wurzel +mangold-wurzels +mangolds +mangonel +mangonels +mangos +mangosteen +mangosteens +mangrove +mangroves +manhole +manholes +manhood +manhunt +manhunts +mania +maniac +maniacs +manias +manic +manic-depressive +manic-depressives +manicure +manicures +manicurist +manicurists +manifest +manifestation +manifestations +manifesto +manifestoes +manifestos +manifests +manifold +manifolder +manifolders +manifoldness +manifolds +manikin +manikins +manila +manilas +manilla +manillas +manille +manilles +manioc +maniocs +maniple +maniples +manipulation +manipulations +manipulative +manipulator +manipulators +manitou +manitous +mankind +manliness +manna +mannas +mannequin +mannequins +manner +mannerism +mannerisms +mannerist +mannerists +mannerliness +manners +mannikin +mannikins +mannishness +mannitol +mannose +manoeuvre +manoeuvres +manometer +manometers +manor +manors +manpower +mans +mansard +mansards +manse +manservant +manservants +manses +mansion +mansions +manslaughter +mansuetude +manta +mantas +manteau +manteaus +mantel +mantelet +mantelets +mantelpiece +mantelpieces +mantels +manteltree +manteltrees +manticora +manticoras +manticore +manticores +mantid +mantids +mantilla +mantillas +mantis +mantises +mantissa +mantissas +mantle +mantles +mantlet +mantlets +mantling +mantra +mantrap +mantraps +mantras +mantua +mantuas +manual +manuals +manubrium +manufactories +manufactory +manufacture +manufacturer +manufacturers +manufactures +manufacturing +manuka +manukas +manul +manuls +manumission +manumissions +manure +manures +manus +manuscript +manuscripts +manuses +many +many-sidedness +manyplies +manzanilla +manzanillas +manzanita +manzanitas +map +map-reader +map-readers +maple +maple-leaf +maples +mapper +mappers +mapping +mappings +maps +maquette +maquettes +maqui +maquiladora +maquiladoras +maquillage +maquis +mar +mara +marabou +marabous +marabout +marabouts +maraca +maracas +maraes +maras +maraschino +maraschinos +marasmus +marathon +marathoner +marathoners +marathons +maraud +marauder +marauders +marauding +marauds +maravedi +maravedis +marble +marbler +marblers +marbles +marbling +marblings +marc +marcasite +marcel +marcella +marcels +march +marchantia +marchantias +marcher +marchers +marches +marchesa +marchesas +marchese +marcheses +marching +marchioness +marchionesses +marchland +marchlands +marchpane +marconigram +marconigrams +marconigraph +marconigraphs +marcs +mare +mare's-nest +mare's-nests +mare's-tail +mare's-tails +maremma +maremmas +mares +marg +margarin +margarine +margarines +margarins +margarita +margarite +margay +margays +marge +margent +margents +margin +marginality +margins +margosa +margosas +margravate +margravates +margrave +margraves +margravine +margravines +margs +marguerite +marguerites +maria +mariachi +mariachis +marialite +mariculture +marigold +marigolds +marigraph +marigraphs +marihuana +marihuanas +marijuana +marijuanas +marimba +marimbas +marina +marinade +marinades +marinas +marination +marine +mariner +mariners +marines +marionette +marionettes +mariposa +mariposas +maritage +marjoram +mark +mark-up +mark-ups +marker +markers +market +marketability +marketableness +marketer +marketers +marketing +markets +markhor +markhors +marking +markings +markka +markkas +marks +marksman +marksmanship +markswoman +marl +marles +marlin +marline +marlines +marlinespike +marlinespikes +marlins +marlinspike +marlinspikes +marlite +marls +marmalade +marmalades +marmite +marmites +marmoset +marmosets +marmot +marmots +marocain +maroon +maroons +maroquin +maror +marors +marque +marquee +marquees +marques +marquess +marquessate +marquessates +marquesses +marqueterie +marquetries +marquetry +marquis +marquisate +marquisates +marquise +marquises +marquisette +marriage +marriageability +marriageableness +marriages +married +marrow +marrowbone +marrowbones +marrowfat +marrowfats +marrows +mars +marsh +marshal +marshals +marshalship +marshalships +marshes +marshiness +marshland +marshlands +marshmallow +marshmallows +marsipobranch +marsipobranchs +marsupial +marsupials +marsupium +mart +martagon +martagons +martellato +marten +martens +martensite +martialism +martialist +martialists +martialness +martin +martinet +martinets +martingale +martingales +martini +martinis +martins +martlet +martlets +marts +martyr +martyrdom +martyrdoms +martyries +martyrium +martyrologist +martyrologists +martyrology +martyrs +martyry +marvel +marvel-of-Peru +marvellousness +marvels +marver +marvers +marzipan +marzipans +mas +masa +mascara +mascaras +mascaron +mascarons +mascle +mascles +mascon +mascons +mascot +mascots +masculine +masculineness +masculines +masculinity +maser +masers +mases +mash +masher +mashers +mashes +mashie +mashies +masjid +masjids +mask +maskalonge +maskalonges +maskanonge +maskanonges +masker +maskers +masking +maskinonge +maskinonges +masks +maslin +maslins +masochism +masochist +masochists +mason +masonries +masonry +masons +masque +masquer +masquerade +masquerader +masqueraders +masquerades +masquers +masques +mass +massacre +massacres +massage +massages +massagist +massagists +massasauga +massasaugas +masses +masseter +masseters +masseur +masseurs +masseuse +masseuses +massicot +massif +massifs +massiness +massiveness +mast +mastaba +mastabas +mastectomies +mastectomy +master +master-at-arms +masterdom +masterfulness +masterhood +masteries +mastering +masterings +masterliness +mastermind +masterminds +masterpiece +masterpieces +masters +mastership +masterships +mastersinger +mastersingers +masterstroke +masterstrokes +mastery +masthead +mastheads +mastic +mastication +mastications +masticatory +mastics +mastiff +mastiffs +mastigophoran +mastigophorans +mastitis +mastodon +mastodons +mastoid +mastoiditis +mastoids +masts +masturbation +masturbator +masturbators +masurium +mat +matador +matadores +matadors +match +matchboard +matchboarding +matchboards +matchbook +matchbooks +matchbox +matchboxes +matcher +matchers +matches +matchet +matchets +matchlessness +matchlock +matchlocks +matchmaker +matchmakers +matchmaking +matchmakings +matchstick +matchsticks +matchwood +mate +matelot +matelote +matelotes +matelots +mater +materfamilias +materfamiliases +material +materialisation +materialisations +materialism +materialist +materialists +materiality +materialization +materializations +materialness +materials +maternities +maternity +maters +mates +matey +mateyness +math +mathematician +mathematicians +mathematics +maths +matin +matiness +mating +matins +matlo +matlos +matoke +matrass +matrasses +matriarch +matriarchalism +matriarchate +matriarchates +matriarchies +matriarchs +matriarchy +matric +matrices +matricide +matricides +matrics +matriculate +matriculates +matriculation +matriculations +matriculator +matriculators +matrimonies +matrimony +matrix +matrixes +matron +matronage +matronages +matronhood +matronhoods +matrons +matronship +matronymic +matronymics +mats +matt +mattamore +mattamores +matte +matter +matters +mattes +matting +mattings +mattins +mattock +mattocks +mattoid +mattoids +mattress +mattresses +maturation +maturations +matureness +maturer +maturing +maturities +maturity +matzah +matzahs +matzo +matzoh +matzoon +matzoons +matzos +maud +maudlinism +mauds +maul +mauler +maulers +mauls +maulstick +maulsticks +maulvi +maulvis +maumet +maumetry +maumets +maund +maunderer +maunderers +maundies +maunds +maundy +mausoleum +mausoleums +mauve +mauves +maven +mavens +maverick +mavericks +mavin +mavins +mavis +mavises +mavourneen +mavourneens +maw +mawkin +mawkins +mawkishness +maws +max +maxilla +maxillary +maxilliped +maxillipedes +maxillipeds +maxim +maxima +maximalist +maximalists +maximin +maximisation +maximisations +maximization +maximizations +maxims +maximum +maxisingle +maxisingles +maxixe +maxixes +maxwell +maxwells +may +maya +mayas +mayday +maydays +mayflies +mayflower +mayflowers +mayfly +mayhem +mayn't +mayonnaise +mayonnaises +mayor +mayoralties +mayoralty +mayoress +mayoresses +mayors +mayorship +mayorships +maypole +maypoles +mays +mayweed +mayweeds +mazard +mazards +mazarine +mazarines +maze +mazer +mazers +mazes +maziness +mazuma +mazurka +mazurkas +mazzard +mazzards +mead +meadow +meadow-brown +meadows +meads +meagerness +meagreness +meal +mealie +mealies +mealiness +meals +mealy-mouthedness +mean +meander +meanders +meanes +meanie +meanies +meaning +meaningfulness +meaninglessness +meanings +meanness +means +meantime +meanwhile +meanwhiles +meany +measles +measurableness +measure +measurement +measurements +measurer +measurers +measures +measuring +measurings +meat +meathead +meatiness +meats +meatus +meatuses +mechanic +mechanical +mechanicals +mechanician +mechanicians +mechanics +mechanisation +mechanisations +mechanism +mechanisms +mechanist +mechanists +mechanization +mechanizations +mechanomorphism +meconium +meconiums +meconopsis +medaka +medal +medalist +medalists +medallion +medallions +medallist +medallists +medals +meddler +meddlers +meddlesomeness +meddling +medflies +medfly +media +mediacy +mediaevalism +mediaevalist +mediaevalists +medial +median +medians +mediant +mediants +mediastinum +mediateness +mediation +mediations +mediatisation +mediatisations +mediatization +mediatizations +mediator +mediators +mediatorship +mediatory +medic +medical +medicals +medicament +medicaments +medication +medications +medicinal +medicine +medicines +medick +medicks +medico +medicos +medics +medievalism +medievalist +medievalists +medina +medinas +mediocrities +mediocrity +meditation +meditations +meditativeness +meditator +meditators +mediterranean +medium +mediums +medius +mediuses +medlar +medlars +medley +medleys +medulla +medullas +medusa +medusan +medusans +medusas +medusoid +meed +meeds +meekness +meerkat +meerkats +meerschaum +meerschaums +meet +meeting +meetings +meetness +meets +megabit +megabits +megabuck +megabucks +megabyte +megabytes +megacities +megacity +megacycle +megacycles +megadeath +megadeaths +megaflops +megahertz +megajoule +megajoules +megalith +megaliths +megaloblast +megaloblasts +megalomania +megalomaniac +megalomaniacs +megalopolis +megalopolitan +megalosaur +megalosaurs +megalosaurus +megalosauruses +megaphone +megaphones +megapode +megapodes +megarad +megarads +megaron +megarons +megascope +megascopes +megasporangium +megaspore +megaspores +megasporophyll +megasporophylls +megass +megaton +megatons +megavolt +megavolts +megawatt +megawatts +megillah +megillahs +megilp +megilps +megohm +megohms +megrim +megrims +meinies +meiny +meionite +meiosis +mel +mela +melamine +melancholia +melancholiac +melancholiacs +melancholic +melancholics +melancholy +melange +melanges +melanin +melanism +melanite +melanites +melanocyte +melanoma +melanomas +melanosis +melaphyre +melatonin +meld +melder +melders +melds +melilot +melilots +melinite +meliorate +meliorates +melioration +meliorations +meliorator +meliorators +meliorism +meliorist +meliorists +meliorities +meliority +melisma +melismas +mell +mellifluousness +mellite +mellophone +mellophones +mellowing +mellowness +mells +melodeon +melodeons +melodics +melodies +melodion +melodions +melodiousness +melodist +melodists +melodrama +melodramas +melodramatic +melodramatics +melodramatist +melodramatists +melody +melon +melons +mels +melt +melting +meltingness +meltings +melton +melts +member +members +membership +memberships +membrane +membranes +memento +mementoes +mementos +memo +memoir +memoirs +memorabilia +memorability +memorableness +memoranda +memorandum +memorandums +memorial +memorialist +memorialists +memorials +memories +memorization +memorizations +memory +memos +men +menace +menacer +menacers +menaces +menadione +menage +menagerie +menageries +menages +menaquinone +menarche +menarches +mend +mendacities +mendacity +mendelevium +mender +menders +mendicancy +mendicant +mendicants +mendicities +mendicity +mending +mendings +mends +mene +menes +menhaden +menhadens +menhir +menhirs +menial +menials +meninges +meningioma +meningiomas +meningitis +meningocele +meningococcus +meninx +meniscectomy +meniscus +meniscuses +menispermum +menispermums +menology +menopause +menorah +menorahs +menorrhagia +menorrhea +mense +menses +menstruation +menstruum +menstruums +mensurability +mensuration +mensurations +menswear +mentalism +mentalisms +mentalist +mentalists +mentalities +mentality +mentation +mentations +menthol +menticide +menticides +mention +mentions +mentor +mentors +mentorship +mentum +mentums +menu +menuisier +menuisiers +menus +menyie +meow +meows +mepacrine +meperidine +mephitis +meprobamate +merc +mercantilism +mercaptan +mercaptans +mercaptide +mercaptides +mercenaries +mercenary +mercer +merceries +mercerization +mercerizations +mercerizer +mercerizers +mercers +mercery +merchandise +merchandiser +merchandisers +merchandises +merchandising +merchandisings +merchant +merchantman +merchants +merchet +merchets +mercies +mercifulness +mercilessness +mercs +mercurial +mercurialism +mercuries +mercurous +mercury +mercy +mere +merengue +merengues +meres +merestone +merestones +meretriciousness +merganser +mergansers +merger +mergers +merging +mericarp +mericarps +meridian +meridians +meridional +meridionals +meringue +meringues +merino +merinos +meristem +meristems +merit +meritocracies +meritocracy +meritoriousness +merits +merk +merkin +merkins +merks +merl +merle +merles +merlin +merlins +merlon +merlons +merls +mermaid +mermaids +merman +merogony +meronym +meronyms +meronymy +merozoite +merozoites +merriment +merriments +merriness +merry-andrew +merry-go-round +merry-go-rounds +merrymaker +merrymakers +merrymaking +merrymakings +mesa +mesas +mescal +mescaline +mescals +mesdames +mesdemoiselles +mesembryanthemum +mesencephalon +mesencephalons +mesenchyme +mesenteries +mesenteron +mesenterons +mesentery +mesh +meshed +meshes +meshing +meshings +meshugaas +mesmerisation +mesmerisations +mesmeriser +mesmerisers +mesmerism +mesmerist +mesmerists +mesmerization +mesmerizations +mesmerizer +mesmerizers +mesoblast +mesoblasts +mesocarp +mesocarps +mesocephalic +mesocephaly +mesoderm +mesoderms +mesohippus +mesolite +mesolites +mesomorph +mesomorphs +mesomorphy +meson +mesons +mesophyll +mesophylls +mesophyte +mesophytes +mesosphere +mesothelioma +mesotheliomas +mesothelium +mesothorax +mesothoraxes +mesotron +mesquit +mesquite +mesquites +mesquits +mess +mess-up +mess-ups +message +messages +messan +messans +messenger +messengers +messes +messieurs +messiness +messmate +messmates +messuage +messuages +mestee +mestees +mestizo +mestizos +metabolism +metabolisms +metabolite +metabolites +metacarpal +metacarpals +metacarpus +metacarpuses +metacentre +metacentres +metagalaxies +metagalaxy +metage +metagenesis +metages +metal +metalanguage +metalanguages +metalepsis +metalinguistics +metallisation +metallisations +metallist +metallists +metallization +metallizations +metallographer +metallographers +metallography +metalloid +metallophone +metallophones +metallurgist +metallurgists +metallurgy +metals +metamathematics +metamer +metamere +metameres +metamerism +metamers +metamorphism +metamorphosis +metaphase +metaphases +metaphor +metaphors +metaphosphate +metaphosphates +metaphrase +metaphrases +metaphrast +metaphrasts +metaphysic +metaphysics +metaplasia +metaplasm +metaplasms +metapsychology +metasequoia +metasomatism +metastability +metastable +metastasis +metastasises +metatarsal +metatarsals +metatarsus +metatarsuses +metathesis +metathesise +metathesises +metathorax +metathoraxes +metazoa +metazoan +metazoans +mete +metempiricist +metempiricists +metempirics +metempsychosis +meteor +meteorite +meteorites +meteoritics +meteorograph +meteorographs +meteoroid +meteoroids +meteorologist +meteorologists +meteorology +meteors +meter +meters +metes +methadon +methadone +methamphetamine +methanal +methane +methanol +methaqualone +methedrine +metheglin +metheglins +methionine +metho +method +methodicalness +methodism +methodist +methodists +methodologies +methodology +methods +methos +methotrexate +meths +methyl +methylamine +methylate +methylates +methylation +methyldopa +methylene +methylenes +methyltestosterone +metic +metical +metics +meticulousness +metis +metol +metonym +metonymies +metonyms +metonymy +metope +metopes +metre +metre-kilogram-second +metre-kilogram-seconds +metres +metric +metrication +metrician +metricians +metrics +metrification +metrifications +metrifier +metrifiers +metrist +metrists +metritis +metro +metrology +metronome +metronomes +metronymic +metronymics +metropolis +metropolises +metropolitan +metropolitans +metrorrhagia +metros +mettle +mettles +mettlesomeness +meu +meus +meuse +meuses +mew +mewl +mewls +mews +mewses +mezereon +mezereons +mezereum +mezereums +mezuza +mezuzah +mezuzahs +mezuzas +mezzanine +mezzanines +mezzo +mezzo-relievo +mezzo-rilievo +mezzo-soprano +mezzo-sopranos +mezzos +mezzotint +mezzotints +mho +mhos +miaou +miaous +miaow +miaows +miasma +miasmas +mica +micas +mice +micelle +micelles +micher +michers +mick +mickey +mickeys +mickies +mickle +mickles +micks +micky +micra +microampere +microamperes +microanalysis +microbalance +microbalances +microbar +microbarograph +microbars +microbe +microbes +microbiologist +microbiologists +microbiology +microcephaly +microchemistry +microchip +microchips +microcircuit +microcircuits +microclimate +microclimates +microclimatology +microcline +microclines +micrococcus +microcomputer +microcomputers +microcopies +microcopy +microcosm +microcosms +microcyte +microcytes +microdetector +microdetectors +microdissection +microdot +microdots +microeconomics +microelectronics +microenvironment +microfarad +microfarads +microfiche +microfiches +microfilm +microfilms +microfossil +microfossils +microgamete +microgametes +microgram +micrograms +micrograph +micrographer +micrographers +micrographs +micrography +microgroove +microgrooves +microhabitat +microhenries +microhenry +microhm +microhms +microlite +microlites +microlith +microliths +micrologist +micrologists +microlux +microluxes +micrometer +micrometers +micrometre +micrometres +micrometry +micromillimetre +microminiaturization +micron +microns +micronutrient +micronutrients +micropalaeontology +microphone +microphones +microphotograph +microphotography +microphysics +microphyte +microphytes +microprint +microprints +microprocessor +microprocessors +micropsia +micropyle +micropyles +micros +microscope +microscopes +microscopist +microscopists +microscopy +microsecond +microseconds +microseism +microseisms +microsome +microsomes +microsporangium +microspore +microspores +microsporophyll +microstructure +microstructures +microsurgery +microswitch +microswitches +microtome +microtomes +microtomies +microtomist +microtomists +microtomy +microtonality +microtone +microtones +microtubule +microtubules +microwatt +microwatts +microwave +microwaves +micrurgy +micturition +micturitions +mid +mid-Victorian +mid-off +mid-on +mid-wicket +midday +middays +midden +middens +middies +middle +middle-distance +middle-of-the-roader +middle-of-the-roaders +middlebreaker +middlebrow +middlebrows +middleman +middles +middleweight +middleweights +middling +middy +midfield +midfields +midge +midges +midget +midgets +midi +midinette +midinettes +midiron +midirons +midis +midland +midlands +midnight +midnights +midnoon +midnoons +midpoint +midpoints +midrib +midribs +midriff +midriffs +mids +midship +midshipman +midships +midst +midstream +midstreams +midsts +midsummer +midsummers +midtown +midway +midways +midwife +midwifery +midwifes +mien +miens +miff +miffs +might +might-have-been +might-have-beens +mightiness +mights +mighty +mignonette +mignonettes +migraine +migraines +migrant +migrants +migration +migrations +mihrab +mihrabs +mikado +mikados +mike +mikes +mikron +mikrons +mil +miladies +milady +milage +milages +milch +mild +mildew +mildews +mildness +milds +mile +mileage +mileages +mileometer +mileometers +milepost +mileposts +miler +milers +miles +milestone +milestones +milfoil +milfoils +miliaria +milieu +milieus +militancies +militancy +militant +militants +militaries +militarisation +militarism +militarist +militarists +militarization +military +militia +militiaman +militias +milk +milker +milkers +milkfish +milkfishes +milkiness +milkmaid +milkmaids +milkman +milko +milkos +milks +milkwood +milkwoods +milkwort +milkworts +mill +mill-girl +mill-girls +mill-hand +mill-hands +milldam +milldams +millefeuille +millefeuilles +millefiori +millefleurs +millenarian +millenarianism +millenarians +millenaries +millenary +millennium +millenniums +millepede +millepedes +millepore +millepores +miller +miller's-thumb +millerite +millers +millet +millets +milliammeter +milliammeters +milliampere +milliamperes +milliard +milliards +milliare +milliares +millibar +millibars +milligram +milligrams +millilitre +millilitres +millime +millimes +millimetre +millimetres +millimole +millimoles +milliner +milliners +millinery +milling +millings +million +millionaire +millionaires +millionairess +millionairesses +millions +millionth +millionths +milliped +millipede +millipedes +millipeds +millirem +millirems +millisecond +milliseconds +millpond +millponds +millrace +millraces +millrind +millrun +millruns +mills +millstone +millstones +millwright +millwrights +milo +milometer +milometers +milord +milords +milos +milreis +milreises +mils +milt +milter +milters +miltonia +miltonias +milts +mimbar +mimbars +mime +mimeograph +mimeographs +mimer +mimers +mimes +mimesis +mimetite +mimic +mimicker +mimickers +mimicries +mimicry +mimics +mimosa +mimosas +mina +minaret +minarets +minas +mince +mincemeat +mincemeats +mincer +mincers +minces +mind +mind-reader +mind-readers +mind-your-own-business +minder +minders +mindfulness +mindlessness +minds +mine +miner +mineral +mineralizer +mineralogist +mineralogists +mineralogy +minerals +miners +mines +minestrone +minestrones +mineworker +mineworkers +mingle-mangle +minglement +minglements +mingler +minglers +mingling +minglings +mini +miniature +miniatures +miniaturisation +miniaturist +miniaturists +miniaturization +minibar +minibars +minibike +minibikes +minibus +minibuses +minicab +minicabs +minicam +minicams +minicomputer +minicomputers +minidress +minidresses +minikin +minikins +minim +minima +minimalist +minimalists +minimax +minimaxes +minimisation +minimisations +minimization +minimizations +minims +minimum +mining +minings +minion +minions +minipill +minipills +minis +miniskirt +miniskirts +minister +ministerialist +ministerialists +ministerium +ministers +ministrant +ministrants +ministration +ministrations +ministries +ministry +minium +miniums +miniver +minivers +minivet +minivets +mink +minkes +minks +minnie +minnies +minnow +minnows +minor +minorities +minority +minors +minos +minster +minsters +minstrel +minstrels +minstrelsy +mint +mintage +mintages +minter +minters +mints +minuend +minuends +minuet +minuets +minus +minuscule +minuscules +minuses +minute +minuteman +minuteness +minutes +minutia +minx +minxes +minyan +minyans +miombo +miombos +miosis +miotic +mir +mirabilis +miracidium +miracle +miracles +miraculousness +mirador +miradors +mirage +mirages +mire +mirepoix +mires +miri +miriness +mirk +mirliton +mirlitons +mirror +mirror-writing +mirrors +mirs +mirth +mirthfulness +mirthlessness +mis +misadventure +misadventures +misaim +misaims +misalignment +misalliance +misalliances +misallotment +misallotments +misanthrope +misanthropes +misanthropy +misapplication +misapplications +misapprehension +misapprehensions +misapprehensiveness +misappropriation +misappropriations +misarrangement +misarrangements +misbehaviour +misbehaviours +misbelief +misbeliefs +misbeliever +misbelievers +miscalculation +miscalculations +miscarriage +miscarriages +miscegenation +miscegenations +miscellanea +miscellanies +miscellanist +miscellanists +miscellany +mischance +mischances +mischief +mischief-maker +mischief-makers +mischief-making +mischiefs +mischievousness +misclassification +miscomputation +miscomputations +misconception +misconceptions +misconduct +misconducts +misconstruction +misconstructions +miscount +miscounts +miscreance +miscreances +miscreancies +miscreancy +miscreant +miscreants +miscreation +miscreations +miscreator +miscreators +miscue +miscues +misdate +misdates +misdating +misdeal +misdeals +misdeed +misdeeds +misdemeanant +misdemeanants +misdemeanor +misdemeanors +misdemeanour +misdemeanours +misdirection +misdirections +misdoer +misdoers +misdoing +misdoings +mise +misease +miseducation +miser +miserableness +misericord +misericordes +misericords +miseries +miserliness +misers +misery +mises +misestimate +misestimates +misfeasance +misfeasances +misfeasor +misfeasors +misfeature +misfeatures +misfire +misfires +misfit +misfits +misformation +misformations +misfortune +misfortunes +misgiving +misgivings +misgovernment +misguidance +misguidances +misguider +misguiders +mishanter +mishanters +mishap +mishaps +mishit +mishits +mishmash +mishmashes +misidentification +misidentifications +misinformant +misinformants +misinformation +misinformer +misinformers +misinstruction +misinterpretation +misinterpretations +misinterpreter +misinterpreters +misjoinder +misjoinders +misknowledge +misleader +misleaders +mislike +misliker +mislikers +mislikes +mismanagement +mismarriage +mismarriages +mismatch +mismatches +misnomer +misnomers +miso +misogamist +misogamists +misogamy +misogynist +misogynists +misogyny +misologist +misologists +misology +misoneism +misos +mispickel +misplacement +misplacements +misplay +misplays +mispleading +mispleadings +misprint +misprints +misprision +misprisions +mispronunciation +mispronunciations +misproportion +mispunctuation +mispunctuations +misquotation +misquotations +misreading +misreadings +misreckon +misreckoning +misreckonings +misreckons +misreport +misreports +misrepresentation +misrepresentations +misrule +misrules +miss +missa +missal +missals +misses +misshape +misshapenness +misshapes +missies +missile +missileries +missilery +missiles +mission +missionaries +missionary +missioner +missioners +missions +missis +missises +missive +missives +misspelling +misspellings +misstatement +misstatements +misstep +missteps +missus +missuses +missy +mist +mistake +mistakenness +mistakes +mistaking +mister +misters +mistigris +mistiming +mistiness +mistletoe +mistletoes +mistral +mistrals +mistranslation +mistranslations +mistreatment +mistress +mistresses +mistrial +mistrials +mistrust +mistrustfulness +mistrusts +mists +misunderstanding +misunderstandings +misusage +misuse +misuser +misusers +misuses +misventure +misventures +mite +miter +miters +mites +mither +mithers +mithridate +mithridates +mithridatism +miticide +mitigation +mitigations +mitigator +mitigators +mitochondrion +mitosis +mitrailleuse +mitrailleuses +mitre +mitres +mitt +mitten +mittens +mittimus +mittimuses +mitts +mitzvah +mitzvahs +mix +mix-up +mix-ups +mixedness +mixer +mixers +mixes +mixing +mixture +mixtures +mizen +mizens +mizzen +mizzens +mizzle +mizzles +mneme +mnemes +mnemonic +mnemonics +moa +moan +moaner +moaners +moans +moas +moat +moats +mob +mobile +mobiles +mobilisation +mobilisations +mobiliser +mobilisers +mobilities +mobility +mobilization +mobilizations +mobilizer +mobilizers +mobocracies +mobocracy +mobocrat +mobocrats +mobs +mobster +mobsters +mocassin +mocassins +moccasin +moccasins +mock +mock-heroic +mock-up +mock-ups +mocker +mockeries +mockers +mockery +mockingbird +mockingbirds +mocks +mod +modalities +modality +mode +model +modeler +modelers +modeling +modelings +modeller +modellers +modelling +modellings +models +modem +modems +moderate +moderateness +moderates +moderation +moderations +moderatism +moderator +moderators +moderatorship +moderatorships +modern +modernisation +modernisations +moderniser +modernisers +modernism +modernisms +modernist +modernists +modernities +modernity +modernization +modernizations +modernizer +modernizers +modernizing +modernness +moderns +modes +modesties +modesty +modicum +modicums +modification +modifications +modifier +modifiers +modillion +modillions +modiolus +modishness +modiste +modistes +mods +modularity +modulation +modulations +modulator +modulators +module +modules +modulus +mofette +mofettes +mog +mogs +mogul +moguls +mohair +mohairs +mohawk +mohawks +mohel +mohels +mohur +mohurs +moidore +moidores +moieties +moiety +moil +moiler +moilers +moils +moire +moires +moistener +moisteners +moistening +moistness +moisture +moistures +moit +moits +moke +mokes +mol +mola +molalities +molality +molar +molarities +molarity +molars +molas +molasses +mold +molder +molders +moldiness +molding +moldings +molds +moldwarp +moldwarps +mole +molecularity +molecule +molecules +moles +moleskin +moleskins +molestation +molestations +molester +molesters +molies +moll +mollah +mollahs +mollie +mollies +mollification +mollifications +mollifier +mollifiers +molls +mollusc +molluscs +mollusk +mollusks +molly +mollycoddle +mollycoddles +moloch +molochs +molt +molting +molts +moly +molybdate +molybdates +molybdenite +molybdenum +mom +mome +moment +momentariness +momentousness +moments +momentum +momes +momma +mommas +mommies +mommy +moms +mon +mon-khmer +mona +monachal +monacid +monad +monadism +monadnock +monadnocks +monads +monal +monals +monandry +monarch +monarchies +monarchism +monarchist +monarchists +monarchs +monarchy +monarda +monardas +monas +monases +monasteries +monastery +monastic +monasticism +monaul +monauls +monazite +mondo +monera +monergism +moneron +monerons +monetarism +monetarist +monetarists +monetisation +monetisations +monetise +monetises +monetization +monetizations +money +money-spinner +money-spinners +moneyer +moneyers +moneyman +moneys +moneywort +moneyworts +mong +monger +mongers +mongo +mongoes +mongol +mongolism +mongoloid +mongoloids +mongols +mongoose +mongooses +mongos +mongrel +mongrelism +mongrels +mongs +monies +moniker +monikers +monilia +monilias +moniliasis +monism +monisms +monist +monists +monition +monitions +monitor +monitoring +monitors +monitorship +monitorships +monitory +monitress +monitresses +monk +monkery +monkey +monkeypod +monkeys +monkhood +monks +monkshood +monkshoods +mono +monoacid +monoacids +monoamine +monoamines +monocarp +monocarps +monochasium +monochord +monochords +monochromat +monochromates +monochromatic +monochromatism +monochromats +monochrome +monochromes +monochromist +monochromists +monochromy +monocle +monocles +monoclinal +monocline +monoclines +monocoque +monocoques +monocot +monocots +monocotyledon +monocotyledons +monocracies +monocracy +monoculture +monocultures +monocycle +monocycles +monocyte +monodies +monodrama +monodramas +monody +monoecism +monofilament +monofilaments +monogamist +monogamists +monogamy +monogenesis +monogenism +monogenist +monogenists +monogram +monograms +monograph +monographer +monographers +monographist +monographists +monographs +monogynies +monogyny +monohull +monohulls +monohybrid +monohybrids +monokini +monokinis +monolater +monolaters +monolatries +monolatry +monolayer +monolayers +monolith +monoliths +monologist +monologists +monologue +monologues +monomania +monomaniac +monomaniacs +monomanias +monomark +monomarks +monomer +monomers +monometallism +monometer +monometers +monomial +monomials +mononucleosis +monophobia +monophony +monophthong +monophthongs +monoplane +monoplanes +monoplegia +monopode +monopodes +monopodium +monopodiums +monopolies +monopolisation +monopolisations +monopoliser +monopolisers +monopolist +monopolists +monopolization +monopolizations +monopolizer +monopolizers +monopoly +monopsonies +monopsony +monopteron +monopterons +monopteros +monopteroses +monorail +monorails +monorhyme +monorhymes +monos +monosaccharide +monosaccharides +monostich +monostichs +monostrophic +monostrophics +monosyllabism +monosyllable +monosyllables +monotheism +monotheist +monotheists +monotint +monotints +monotone +monotones +monotonies +monotonousness +monotony +monotreme +monotremes +monotype +monotypes +monovalence +monovalency +monoxide +monoxides +monsieur +monsoon +monsoons +monster +monsters +monstrance +monstrances +monstrosities +monstrosity +monstrousness +montage +montages +montbretia +montbretias +monte +monteith +monteiths +montero +monteros +montes +montgolfier +montgolfiers +month +monthlies +monthly +months +monticule +monticules +monument +monuments +mony +monzonite +moo +moo-cow +moo-cows +moocher +moochers +mood +moodiness +moods +moolah +moolahs +moolvie +moolvies +moon +moonbeam +moonbeams +mooncalf +moonflower +moonflowers +moonlight +moonlighting +moonlights +moonquake +moonquakes +moonraker +moonrakers +moonrise +moonrises +moons +moonscape +moonscapes +moonseed +moonseeds +moonset +moonsets +moonshine +moonshiner +moonshiners +moonshines +moonshot +moonshots +moonstone +moonstones +moonwalk +moonwalks +moonwort +moonworts +moor +moorage +moorages +moorcock +moorcocks +moorfowl +moorfowls +moorhen +moorhens +mooring +moorings +moorish +moorland +moorlands +moors +moos +moose +moot +mooter +mooters +moots +mop +mop-up +mopboard +mope +moped +mopeds +moper +mopers +mopes +mopoke +mopokes +moppet +moppets +mopping +mops +moquette +moquettes +mor +mora +moraine +moraines +moral +morale +morales +moralism +moralist +moralists +moralities +morality +moralizing +morals +moras +morass +morasses +moratorium +moratoriums +moray +morays +morbidities +morbidity +morbidness +morbilli +morceau +mordacities +mordacity +mordancy +mordant +mordants +mordent +mordents +more +moreen +morel +morello +morellos +morels +mores +morganite +morgen +morgens +morgue +morgues +moribundity +morion +morions +morn +mornes +morning +morning-glories +morning-glory +mornings +morns +morocco +moroccos +moron +morons +moroseness +morosity +morph +morphallaxis +morpheme +morphemes +morphia +morphine +morphinism +morphogenesis +morphologist +morphologists +morphology +morphophoneme +morphophonemes +morphophonemics +morphosis +morphs +morro +morros +morrow +morrows +mors +morse +morsel +morsels +morses +mort +mortal +mortalities +mortality +mortals +mortar +mortars +mortgage +mortgagee +mortgagees +mortgages +mortgagor +mortgagors +mortice +mortices +mortician +morticians +mortification +mortifications +mortifier +mortifiers +mortise +mortiser +mortisers +mortises +mortling +mortlings +mortmain +mortmains +morts +mortuaries +mortuary +morula +morulas +morwong +morwongs +mosaic +mosaicism +mosaicisms +mosaicist +mosaicists +mosaics +mosasaur +mosasaurs +moschatel +moschatels +moses +moshav +mosque +mosques +mosquito +mosquitoes +mosquitos +moss +mossbunker +mossbunkers +mosses +mossie +mossies +mossiness +most +mot +mote +motel +motels +motes +motet +motets +moth +mother +mother-in-law +mother-of-pearl +mother-of-thousands +motherhood +mothering +motherings +motherland +motherlands +motherliness +mothers +motherwort +motherworts +moths +motif +motifs +motile +motiles +motility +motion +motionlessness +motions +motivation +motivations +motive +motivelessness +motives +motivity +motley +motmot +motmots +motocross +motor +motorbicycle +motorbicycles +motorcade +motorcades +motorcycle +motorcycles +motorcycling +motoring +motorisation +motorisations +motorist +motorists +motorization +motorizations +motorman +motors +motorway +motorways +motte +mottes +mottle +mottles +mottling +mottlings +motto +mottoes +mottos +moue +moues +moufflon +moufflons +mouflon +mouflons +moujik +moujiks +moulage +mould +moulder +moulders +mouldiness +moulding +mouldings +moulds +mouldwarp +mouldwarps +mouldy +moulin +moulins +moult +moulting +moultings +moults +mound +mound-builder +mounding +mounds +mount +mountain +mountaineer +mountaineering +mountaineers +mountains +mountainside +mountainsides +mountebank +mountebanks +mounter +mounters +mountie +mounties +mounting +mounting-block +mounting-blocks +mountings +mounts +mourner +mourners +mournfulness +mourning +mournings +mouse +mouse-dun +mouse-ear +mouser +mousers +mousiness +mousing +mousings +moussaka +moussakas +mousse +mousseline +mousselines +mousses +moustache +moustaches +mouth +mouthful +mouthfuls +mouthpiece +mouthpieces +mouths +mouthwash +mouthwashes +mouton +moutons +movability +movable +movableness +movables +move +moveability +moveable +moveableness +moveables +movelessness +movement +movements +mover +movers +moves +movie +moviegoer +moviegoers +movieland +moviemaker +moviemakers +movies +moving +mow +mower +mowers +mowing +mowings +mows +moxa +moxas +moxie +mozambican +mozzarella +mozzarellas +mozzetta +mozzettas +mridang +mridangs +much +muchness +mucigen +mucilage +mucilages +mucin +mucins +muck +mucker +muckers +muckle +muckles +mucks +mucluc +muclucs +mucor +mucosa +mucosity +mucro +mucros +mucus +mucuses +mud +mudcat +mudcats +muddies +muddiness +muddle +muddlehead +muddleheads +muddler +muddlers +muddles +muddy +mudir +mudlark +mudlarks +mudpack +mudpacks +mudra +mudras +muds +mudslide +mudslides +mudstone +mudstones +muenster +muesli +mueslis +muezzin +muezzins +muff +muffin +muffineer +muffineers +muffins +muffle +muffler +mufflers +muffles +muffs +mufti +muftis +mug +mugful +mugfuls +muggee +muggees +mugger +muggers +mugginess +mugging +muggings +muggins +mugginses +mugs +mugwort +mugworts +mugwump +mugwumpery +mugwumps +mujik +mujiks +mukluk +mukluks +mulatto +mulattoes +mulattos +mulberries +mulberry +mulch +mulches +mulct +mulcting +mulcts +mule +mules +muleteer +muleteers +muley +muleys +mulga +mulgas +muliebrity +mulishness +mull +mullah +mullahs +mullein +mulleins +muller +mullers +mullet +mullets +mulligan +mulligans +mulligatawnies +mulligatawny +mulligrubs +mullion +mullions +mullock +mulloway +mulls +multeities +multeity +multichannel +multicuspid +multicuspids +multifariousness +multifoil +multigravida +multigravidas +multihull +multihulls +multimedia +multimeter +multimeters +multimillionaire +multimillionaires +multinomial +multinomials +multipara +multiparas +multiped +multipedes +multipeds +multiplane +multiplanes +multiple +multiplepoinding +multiples +multiplet +multiplets +multiplex +multiplexer +multiplexers +multiplexes +multiplicand +multiplicands +multiplication +multiplications +multiplicities +multiplicity +multiplier +multipliers +multiprocessor +multiprocessors +multiprogramming +multiracialism +multistorey +multitude +multitudes +multitudinousness +multivalence +multivalences +multiversities +multiversity +multivibrator +multivibrators +multure +multures +mum +mumble +mumbler +mumblers +mumbles +mumbling +mumblings +mummer +mummeries +mummers +mummery +mummies +mummification +mummifications +mummy +mumps +mums +mun +muncher +munchers +munching +mundungus +mung +municipalities +municipality +municipalization +munificence +munificences +muniment +muniments +munition +munitions +munnion +munnions +munshi +munshis +muntin +muntins +muntjac +muntjacs +muon +muons +murage +murages +mural +muralist +muralists +murals +murder +murderer +murderers +murderess +murderesses +murders +murex +murexes +murgeon +murgeons +muriate +muriates +murine +murines +murk +murkiness +murky +murmur +murmuration +murmurations +murmurer +murmurers +murmuring +murmurings +murmurs +murphies +murphy +murra +murrain +murrains +murray +murrays +murre +murrelet +murrelets +murres +murrhine +murther +murthers +muscadel +muscadels +muscadine +muscadines +muscarine +muscat +muscatel +muscatels +muscats +muscid +muscids +muscle +muscles +muscovado +muscovados +muscularity +musculature +musculatures +muse +museologist +museologists +museology +muser +musers +muses +musette +musettes +museum +museums +mush +musher +mushes +mushiness +mushroom +mushrooms +music +musical +musicale +musicales +musicality +musicalness +musicals +musician +musicians +musicianship +musicologist +musicologists +musicology +musics +musing +musings +musk +muskeg +muskegs +muskellunge +muskellunges +musket +musketeer +musketeers +musketry +muskets +muskie +muskies +muskiness +muskone +muskrat +muskrats +musks +musky +muslin +muslins +muso +musos +musquash +musquashes +muss +mussel +mussels +musses +mussiness +mussy +must +mustache +mustaches +mustachio +mustachios +mustang +mustangs +mustard +mustards +mustee +mustees +musteline +mustelines +muster +musters +musth +musths +mustiness +musts +mutability +mutableness +mutagen +mutagens +mutant +mutants +mutation +mutations +mutch +mutches +mutchkin +mutchkins +mute +muteness +mutes +mutilation +mutilations +mutilator +mutilators +mutineer +mutineers +mutinies +mutinousness +mutiny +mutism +mutoscope +mutoscopes +mutt +mutter +mutterer +mutterers +muttering +mutterings +mutters +mutton +mutton-head +mutton-heads +muttons +mutts +mutualisation +mutualisations +mutualism +mutuality +mutualization +mutualizations +mutuel +mutule +mutules +muu-muu +muu-muus +muzhik +muzhiks +muzziness +muzzle +muzzle-loader +muzzler +muzzlers +muzzles +mya +myalgia +myalism +myall +myalls +myasthenia +mycelium +mycetoma +mycetomas +mycetozoan +mycetozoans +mycobacterium +mycologist +mycologists +mycology +mycophagist +mycophagists +mycoplasma +mycoplasmas +mycorrhiza +mycorrhizas +mycosis +mydriasis +mydriatic +myelin +myelitis +myeloblast +myeloma +myelomas +myiasis +mylodon +mylodons +mylohyoid +mylohyoids +mylonite +mylonites +myna +mynah +mynahs +mynas +myocarditis +myocardium +myocardiums +myofibril +myoglobin +myograph +myographs +myography +myology +myoma +myomas +myope +myopes +myopia +myosin +myosis +myosotis +myosotises +myotic +myotonia +myriad +myriads +myriapod +myriapods +myriopod +myriopods +myrmecologist +myrmecologists +myrmecology +myrmecophile +myrmecophiles +myrmecophily +myrmidon +myrmidons +myrobalan +myrobalans +myrrh +myrrhs +myrtle +myrtles +mysophobia +mystagogue +mystagogues +mystagogy +mysteries +mysteriousness +mystery +mystic +mysticalness +mysticism +mystics +mystification +mystifications +mystifier +mystifiers +mystique +mystiques +myth +mythiciser +mythicisers +mythicizer +mythicizers +mythogenesis +mythographer +mythographers +mythography +mythologies +mythologisation +mythologist +mythologists +mythologization +mythologizer +mythologizers +mythology +mythomania +mythomaniac +mythomaniacs +mythopoeia +mythopoeist +mythopoeists +mythos +myths +myxedema +myxoedema +myxoma +myxomatosis +myxomatous +myxomycete +myxomycetes +myxovirus +myxoviruses +mzee +mzees +mzungu +mzungus +nabber +nabbers +nabob +nabobs +nacelle +nacelles +nacho +nachos +nacre +nacres +nada +nadir +nadirs +nae +naething +naethings +naevus +nag +naga +nagana +nagari +nagas +nagger +naggers +nagor +nagors +nags +naiad +naiades +naiads +naif +nail +nail-biting +nailbrush +nailbrushes +nailer +nailers +nails +nainsook +naira +nairas +naive +naiveness +naiveties +naivety +nakedness +naker +nakers +namaste +namastes +namby-pambies +namby-pambiness +namby-pamby +namby-pambyism +name +name-calling +name-dropper +name-droppers +name-dropping +named +namelessness +namer +namers +names +namesake +namesakes +nametape +nametapes +naming +namings +nan +nana +nanas +nandu +nanism +nankeen +nankeens +nanna +nannas +nannies +nanny +nanny-goat +nanny-goats +nanometre +nanometres +nanoplankton +nanosecond +nanoseconds +nans +naos +naoses +nap +napa +napalm +nape +naperies +napery +napes +naphtha +naphthalene +naphthas +naphthene +naphthol +naphthols +napkin +napkins +napoleon +napoleons +nappa +nappe +napper +nappers +nappes +nappies +nappy +naps +narc +narceine +narcissism +narcissist +narcissists +narcissus +narcissuses +narcolepsy +narcoleptic +narcosis +narcosynthesis +narcotic +narcotics +narcotisation +narcotism +narcotist +narcotists +narcs +nard +nardoo +nardoos +nards +narghile +narghiles +nark +narks +narration +narrations +narrative +narratives +narrator +narrators +narrow +narrow-mindedness +narrowing +narrowings +narrowness +narrows +narthex +narthexes +narwhal +narwhals +nasal +nasality +nasalization +nasalizations +nasals +nascence +nascency +naseberries +naseberry +nasion +nasions +nasopharynx +nastiness +nasturtium +nasturtiums +nasute +nasutes +nat +natal +natalities +natality +natation +natatorium +natatoriums +nates +natheless +nation +national +nationalisation +nationalisations +nationalism +nationalist +nationalists +nationalities +nationality +nationalization +nationalizations +nationals +nationhood +nations +native +nativeness +natives +nativism +nativist +nativists +nativities +nativity +natrium +natrolite +natron +nats +natter +natterjack +natterjacks +natters +nattiness +natural +naturalisation +naturalism +naturalist +naturalists +naturalization +naturalness +naturals +nature +natures +naturism +naturist +naturists +naturopath +naturopaths +naturopathy +naught +naughtiness +naughts +naughty +naumachia +naumachias +naumachies +naumachy +nauplius +nausea +nauseant +nauseants +nauseas +nauseousness +nautch +nautches +nautilus +nautiluses +navarin +navarins +nave +navel +navels +navelwort +navelworts +naves +navette +navettes +navew +navews +navicert +navicerts +navicula +navicular +naviculars +naviculas +navies +navigability +navigableness +navigation +navigations +navigator +navigators +navvies +navvy +navy +nawab +nawabs +nay +nays +nazir +nazirs +ne'er-do-well +ne'er-do-wells +neap +neaps +near +nearness +nears +nearside +nearsides +neat +neatness +neb +nebbish +nebbishes +nebris +nebrises +nebs +nebula +nebulas +nebulisation +nebuliser +nebulisers +nebulization +nebulizer +nebulizers +nebulosity +nebulousness +necessarian +necessarianism +necessarians +necessaries +necessariness +necessary +necessitarian +necessitarianism +necessitarians +necessitation +necessitations +necessities +necessitousness +necessity +neck +neckband +neckbands +neckcloth +neckcloths +neckerchief +neckerchiefs +necking +neckings +necklace +necklaces +necklet +necklets +neckline +necklines +necks +necktie +neckties +neckwear +necrobiosis +necrolatry +necrologist +necrologists +necrology +necromancer +necromancers +necromancy +necrophile +necrophiles +necrophilia +necrophiliac +necrophiliacs +necrophilic +necrophilism +necrophobia +necropolis +necropolises +necropsy +necroscopies +necroscopy +necrosis +necrotomies +necrotomy +nectar +nectareousness +nectaries +nectarine +nectarines +nectars +nectary +neddies +neddy +need +needer +needers +neediness +needle +needlecord +needlecords +needlecraft +needleful +needlefuls +needles +needlewoman +needlework +needs +neem +neems +neep +neeps +nef +nefariousness +nefs +negating +negation +negationist +negationists +negations +negative +negativeness +negatives +negativism +negativist +negativity +negatron +negatrons +neglect +neglectedness +neglecter +neglecters +neglectfulness +neglects +negligee +negligees +negligence +negligences +negligibility +negotiability +negotiant +negotiants +negotiation +negotiations +negotiator +negotiators +negotiatress +negotiatresses +negotiatrix +negotiatrixes +negritude +negroid +negroids +negus +neguses +neigh +neighbor +neighborhood +neighborhoods +neighborliness +neighbors +neighbour +neighbourhood +neighbourhoods +neighbourliness +neighbours +neighs +nek +nekton +nektons +nellies +nelly +nelson +nelsons +nelumbo +nelumbos +nemathelminth +nemathelminths +nematocyst +nematocysts +nematode +nematodes +nematologist +nematologists +nematology +nemertean +nemerteans +nemertine +nemertines +nemesia +nemesias +nemesis +nemophila +nemophilas +nene +nenes +neoclassic +neoclassicism +neoclassicist +neoclassicists +neocolonialism +neocolonialist +neocolonialists +neodymium +neolith +neoliths +neologies +neologism +neologisms +neologist +neologists +neology +neomycin +neon +neonate +neonates +neophyte +neophytes +neoplasm +neoplasms +neoplasticism +neoprene +neoteny +neoteric +neoterism +nepenthe +nepenthes +neper +nepers +nepeta +nepheline +nephelinite +nephelometer +nephelometers +nephew +nephews +nephogram +nephograms +nephograph +nephographs +nephologist +nephologists +nephology +nephoscope +nephoscopes +nephralgia +nephrectomies +nephrectomy +nephridium +nephridiums +nephrite +nephritis +nephrolepis +nephron +nephrons +nephropathy +nephrosis +nephrotomies +nephrotomy +nepit +nepits +nepotism +neptunium +nerd +nerds +nereid +nereides +nereids +nervation +nervations +nerve +nervelessness +nerves +nervine +nervines +nerviness +nerving +nervousness +nervule +nervules +nervuration +nervurations +nervure +nervures +nescience +ness +nesses +nest +nester +nesters +nestle +nestles +nestling +nestlings +nests +net +netball +netes +nets +netsuke +netsukes +nett +netting +nettings +nettle +nettles +netts +netty +network +networks +neuk +neuks +neume +neumes +neuralgia +neurasthenia +neurasthenic +neuration +neurations +neurectomies +neurectomy +neurilemma +neurilemmas +neurite +neuritis +neuroanatomist +neuroanatomists +neuroanatomy +neurobiology +neuroblast +neuroblasts +neurofibril +neuroglia +neurogram +neurograms +neurohypophysis +neurolemma +neurolemmas +neurologist +neurologists +neurology +neuroma +neuromas +neuron +neurones +neurons +neuropath +neuropathology +neuropaths +neuropathy +neurophysiologist +neurophysiologists +neurophysiology +neuroplasm +neuropsychiatry +neuropsychology +neuropteran +neuropterans +neuroscience +neurosis +neurosurgeon +neurosurgeons +neurosurgery +neurotic +neuroticism +neurotics +neurotomies +neurotomy +neurotransmitter +neurotrophy +neuston +neustons +neuter +neutering +neuters +neutral +neutralisation +neutralise +neutralises +neutralism +neutralist +neutralists +neutralities +neutrality +neutralization +neutrals +neutretto +neutrettos +neutrino +neutrinos +neutron +neutrons +neutrophil +neutrophils +never-never +nevus +newborn +newcomer +newcomers +newel +newels +newfangledness +newmarket +newmarkets +newness +news +newsagent +newsagents +newsboy +newsboys +newscast +newscaster +newscasters +newscasting +newscasts +newsdealer +newsdealers +newses +newshawk +newshawks +newsiness +newsletter +newsletters +newsmagazine +newsmagazines +newsman +newsmonger +newsmongers +newspaper +newspaperdom +newspaperman +newspapers +newspaperwoman +newspeak +newsprint +newsreel +newsreels +newsroom +newsrooms +newssheet +newssheets +newsvendor +newsvendors +newswoman +newsworthiness +newt +newton +newtons +newts +nexus +nexuses +ngaio +ngaios +ngoma +ngomas +ngultrum +ngultrums +ngwee +niacin +nib +nibble +nibbler +nibblers +nibbles +nibbling +nibblings +niblick +niblicks +nibs +nicad +nicads +niccolite +nice +niceness +niceties +nicety +niche +nicher +nichers +niches +nick +nickel +nickelodeon +nickelodeons +nickels +nicker +nickers +nicknack +nicknacks +nickname +nicknames +nickpoint +nickpoints +nicks +nicotiana +nicotianas +nicotinamide +nicotine +nicotinism +nictitation +niddering +nidderings +nide +nides +nidification +nidus +niece +nieces +niellist +niellists +niello +niellos +nieve +nieves +niff +niffs +nigella +nigellas +niggard +niggardliness +niggards +niggler +nigglers +night +night-light +night-lights +night-line +night-lines +night-robe +night-sight +night-sights +night-time +nightcap +nightcaps +nightclubber +nightclubbers +nightdress +nightdresses +nightfall +nightfalls +nightgown +nightgowns +nightie +nighties +nightingale +nightingales +nightjar +nightjars +nightlife +nightmare +nightmares +nights +nightshade +nightshades +nightshirt +nightshirts +nightspot +nightspots +nightstand +nightstands +nightwear +nighty +nigritude +nigrosine +nihil +nihilism +nihilist +nihilists +nihilities +nihility +nikethamide +nil +nilgai +nilgais +nils +nim +nimbleness +nimbostratus +nimbus +nimbuses +nimiety +nims +nincompoop +nincompoops +nine +ninepence +ninepences +ninepins +nines +nineteen +nineteens +nineteenth +nineteenths +nineties +ninetieth +ninetieths +ninety +ninnies +ninny +ninon +ninons +ninth +ninths +niobite +niobium +nip +nipper +nippers +nipple +nipples +nipplewort +nippleworts +nips +nirvana +nirvanas +nisus +nisuses +nit +niter +nites +niton +nitrate +nitrates +nitration +nitre +nitride +nitrides +nitriding +nitridings +nitrification +nitrifications +nitrile +nitriles +nitrite +nitrites +nitrobacteria +nitrobenzene +nitrocellulose +nitrocotton +nitrogen +nitrogenisation +nitrogenization +nitroglycerin +nitroglycerine +nitrometer +nitrometers +nitromethane +nitroparaffin +nitrosamine +nitrosamines +nitrosyl +nits +nitty-gritty +nitwit +nitwits +nix +nixes +no-account +no-ball +no-balls +no-brainer +no-brainers +no-fault +no-hoper +no-hopers +no-man's-land +no-show +no-shows +no-side +no-trump +no-trumper +no-trumps +nob +nobbler +nobblers +nobelium +nobilities +nobility +noble +noble-mindedness +nobleman +nobleness +nobles +noblesse +noblesses +noblewoman +nobodies +nobody +nobs +nock +nocks +noctambulism +noctambulist +noctambulists +noctiluca +noctilucence +noctua +noctuas +noctuid +noctuids +noctule +noctules +nocturn +nocturne +nocturnes +nocturns +nocuousness +nod +noddies +noddle +noddles +noddy +node +nodes +nodosities +nodosity +nods +nodule +nodules +nodus +noesis +nog +nogg +noggin +nogging +noggings +noggins +noggs +nogs +noil +noils +noise +noiselessness +noisemaker +noisemakers +noises +noisette +noisettes +noisiness +noisomeness +noli-me-tangere +noma +nomad +nomades +nomadism +nomads +nomarch +nomarchies +nomarchs +nomarchy +nomas +nombril +nombrils +nome +nomen +nomenclator +nomenclators +nomenclature +nomenclatures +nomenklatura +nomes +nominal +nominalism +nominalist +nominalists +nominals +nominating +nomination +nominations +nominative +nominatives +nominator +nominators +nominee +nominees +nomism +nomocracies +nomocracy +nomogram +nomograms +nomograph +nomographer +nomographers +nomographs +nomography +nomologist +nomologists +nomology +non-Christian +non-com +non-coms +non-involvement +non-resistant +nonabsorbent +nonacademic +nonage +nonagenarian +nonagenarians +nonages +nonagon +nonagons +nonary +nonbeliever +nonbelievers +nonbelligerent +nonce +nonces +nonchalance +noncommercial +nonconcurrent +nonconformance +nonconformist +nonconformists +nonconformity +nondescript +nondescripts +nondisjunction +nondrinker +none +none-so-pretty +nonentities +nonentity +nonesuch +nonesuches +nonet +nonets +nonexecutive +nong +nongs +nonillion +nonillions +nonillionth +nonjuror +nonjurors +nonpareil +nonpareils +nonplus +nonpluses +nonreader +nonsense +nonsenses +nonsensicality +nonsensicalness +nonsuch +nonsuches +nonsuit +nonsuits +nonswimmer +nonvoter +noodle +noodles +nook +nookie +nookies +nooks +nooky +noon +noonday +noondays +nooning +noonings +noons +noontide +noontides +noontime +noose +nooses +nopal +nopals +nor'-east +nor'-west +noradrenaline +norepinephrine +noria +norias +norite +nork +norks +norland +norlands +norm +normal +normalcy +normalisation +normalisations +normality +normalization +normalizations +normals +norman +normans +normativeness +norms +north +norther +northerlies +northerliness +northerly +northern +northerner +northerners +northerns +northers +northing +northings +northland +northlands +norths +northward +northwards +nos +nose +nosebag +nosebags +nosegay +nosegays +noses +nosey +noseys +nosh +nosh-up +nosh-ups +nosher +noshers +noshes +nosiness +nosing +nosings +nosographer +nosographers +nosography +nosology +nostalgia +nostoc +nostocs +nostology +nostomania +nostril +nostrils +nostrum +nostrums +notabilities +notability +notable +notableness +notables +notaries +notary +notaryship +notation +notations +notch +notches +note +notebook +notebooks +notecase +notecases +notedness +notelet +notelets +notepad +notepads +notepaper +notepapers +notes +noteworthiness +nothing +nothingness +nothings +notice +notices +notification +notifications +notifier +notifiers +notifying +notion +notions +notitia +notitias +notochord +notochords +notorieties +notoriety +notoriousness +notornis +notornises +notoungulate +notoungulates +notum +notums +nougat +nougats +nought +noughts +noumenon +noun +nouns +nourice +nourisher +nourishers +nourishing +nourishment +nourishments +nous +nova +novaculite +novas +novation +novations +novel +novelese +novelette +novelettes +novelisation +novelisations +novelist +novelists +novelization +novelizations +novella +novellas +novels +novelties +novelty +novena +novenas +novice +novices +noviciate +noviciates +novitiate +novitiates +now +nowadays +nowed +nowhere +nowness +nows +nowt +nowy +noxiousness +noyade +noyades +noyau +noyaus +nozzle +nozzles +nuance +nuances +nub +nubbin +nubbins +nubble +nubbles +nubecula +nubility +nubs +nucellus +nucelluses +nucha +nuclease +nucleases +nucleation +nucleations +nucleator +nucleators +nuclei +nuclein +nucleole +nucleoles +nucleolus +nucleon +nucleonics +nucleons +nucleoplasm +nucleoside +nucleotide +nucleotides +nucleus +nuclide +nuclides +nude +nudeness +nudes +nudge +nudger +nudgers +nudges +nudibranch +nudie +nudies +nudism +nudist +nudists +nudities +nudity +nudnik +nudniks +nuggar +nuggars +nugget +nuggets +nuisance +nuisances +nuke +nukes +nulla-nulla +nulla-nullas +nullah +nullahs +nullification +nullifications +nullifidian +nullifidians +nullifier +nullifiers +nullipara +nulliparas +nullipore +nullity +numbat +numbats +number +numberer +numberers +numbering +numbers +numbness +numbskull +numbskulls +numdah +numdahs +numen +numeracy +numeral +numerals +numeration +numerations +numerator +numerators +numerology +numerosity +numerousness +numismatics +numismatist +numismatists +numismatologist +numismatology +nummulite +nummulites +numnah +numnahs +numskull +numskulls +nun +nunatak +nunataks +nunciature +nunciatures +nuncio +nuncios +nuncle +nunhood +nunnation +nunneries +nunnery +nuns +nuptials +nuraghe +nurl +nurls +nurse +nurseling +nurselings +nursemaid +nursemaids +nurser +nurseries +nursers +nursery +nurseryman +nurses +nursing +nursling +nurslings +nurture +nurturer +nurturers +nurtures +nurturing +nut +nutation +nutations +nutcase +nutcases +nutcracker +nutcrackers +nuthatch +nuthatches +nuthouse +nuthouses +nutlet +nutlets +nutmeg +nutmegs +nutria +nutrias +nutrient +nutrients +nutriment +nutriments +nutrition +nutritionist +nutritionists +nutritions +nutritiousness +nutritive +nuts +nutshell +nutshells +nutter +nutters +nuttiness +nutting +nuttings +nutwood +nyala +nyalas +nyanza +nyanzas +nybble +nybbles +nyctaginaceae +nyctalopia +nyctinasty +nyctitropism +nyctophobia +nye +nyes +nylghau +nylghaus +nylon +nylons +nymph +nymphaeum +nymphaeums +nymphalid +nymphalids +nymphet +nymphets +nympho +nympholepsy +nympholept +nympholepts +nymphomania +nymphomaniac +nymphomaniacs +nymphos +nymphs +nystagmus +nystatin +oaf +oafs +oak +oaks +oakum +oar +oars +oarsman +oarsmanship +oarswoman +oasis +oast +oast-house +oast-houses +oasts +oat +oatcake +oatcakes +oater +oaters +oath +oaths +oatmeal +oatmeals +oats +oba +obas +obbligato +obbligatos +obduracy +obeah +obeahism +obeahs +obeche +obeches +obedience +obedientiaries +obedientiary +obeisance +obeisances +obelisk +obelisks +obelus +obesity +obeyer +obeyers +obfuscation +obfuscations +obi +obiism +obis +obit +obits +obituaries +obituary +object +objectification +objection +objections +objective +objectiveness +objectives +objectivism +objectivist +objectivists +objectivities +objectivity +objector +objectors +objects +objurgation +objurgations +oblast +oblasts +oblate +oblateness +oblates +oblation +oblations +obligation +obligations +obligato +obligatoriness +obligatos +obligee +obligees +obligingness +obligor +obligors +oblique +obliqueness +obliques +obliquities +obliquity +obliteration +obliterations +oblivion +oblivions +obliviousness +oblong +oblongs +obloquies +obloquy +obmutescence +obnoxiousness +oboe +oboes +oboist +oboists +obolus +obreption +obs +obscenities +obscenity +obscurant +obscurantism +obscurantist +obscurantists +obscurants +obscuration +obscurations +obscure +obscureness +obscures +obscurities +obscurity +obsecration +obsecrations +obsequiousness +observableness +observance +observances +observation +observations +observatories +observatory +observer +observers +obsession +obsessions +obsessiveness +obsidian +obsolescence +obsoleteness +obstacle +obstacles +obstetrician +obstetricians +obstetrics +obstinacy +obstinateness +obstipation +obstipations +obstreperousness +obstruct +obstructer +obstructers +obstruction +obstructionism +obstructionist +obstructionists +obstructions +obstructiveness +obstructor +obstructors +obstructs +obstruent +obstruents +obtainment +obtention +obtentions +obtestation +obtestations +obtruder +obtruders +obtrusiveness +obtund +obtunds +obturation +obturator +obturators +obtuseness +obumbration +obumbrations +obverse +obverses +obversion +obversions +obviation +obviations +obviousness +oca +ocarina +ocarinas +ocas +occasion +occasionalism +occasionality +occasions +occident +occidental +occidentals +occipital +occipitals +occiput +occiputs +occlusion +occlusions +occlusive +occlusives +occult +occultation +occultations +occultism +occultist +occultists +occultness +occults +occupancies +occupancy +occupant +occupants +occupation +occupations +occupier +occupiers +occupying +occurrence +occurrences +ocean +oceanarium +oceanariums +oceanic +oceanid +oceanides +oceanids +oceanographer +oceanographers +oceanography +oceanology +oceans +ocellation +ocellations +ocellus +ocelot +ocelots +ocher +ochlocracy +ochlocrat +ochlocrats +ochlophobia +ochre +ochrea +ochres +ocker +ockers +ocotillo +ocotillos +ocrea +octachord +octachords +octad +octads +octagon +octagons +octahedrite +octahedron +octahedrons +octal +octameter +octameters +octane +octanes +octant +octants +octaroon +octaroons +octave +octaves +octavo +octavos +octet +octets +octette +octettes +octillion +octillions +octillionth +octillionths +octocentenaries +octocentenary +octodecimo +octodecimos +octogenarian +octogenarians +octonaries +octonary +octopod +octopodes +octopods +octopus +octopuses +octoroon +octoroons +octosyllable +octosyllables +octroi +octrois +octuple +octuples +octuplet +octuplets +ocular +ocularist +oculars +oculist +oculists +oculomotor +oculus +odalisque +odalisques +odd +odd-jobman +oddball +oddballs +oddities +oddity +oddment +oddments +oddness +odds +ode +odes +odeum +odeums +odiousness +odium +odiums +odometer +odometers +odometry +odontalgia +odontoblast +odontoblasts +odontogeny +odontoglossum +odontoglossums +odontograph +odontographs +odontography +odontolite +odontolites +odontology +odontophore +odontophorus +odor +odoriferousness +odour +odours +odyl +odyles +odylism +odyssey +odysseys +oecology +oedema +oedemas +oeil-de-boeuf +oeillade +oeillades +oenologist +oenologists +oenology +oenomel +oenophile +oenophiles +oenophilist +oenophilists +oersted +oersteds +oesophagus +oestradiol +oestrogen +oestrogens +oestrus +oestruses +oeuvre +oeuvres +off +off-day +off-days +off-licence +off-licences +off-white +offal +offals +offbeat +offence +offences +offender +offenders +offense +offenses +offensive +offensiveness +offensives +offer +offerer +offerers +offering +offerings +offeror +offerors +offers +offertories +offertory +office +office-bearer +office-bearers +officer +officers +offices +official +officialdom +officialese +officialism +officialisms +officials +officiant +officiants +officiating +officiator +officiators +officinal +officiousness +offing +offings +offishness +offprint +offprints +offs +offset +offsets +offshoot +offshoots +offside +offsider +offspring +offsprings +offtake +offtakes +oftenness +ogam +ogams +ogdoad +ogdoads +ogee +ogees +ogham +oghams +ogive +ogives +ogle +ogler +oglers +ogles +ogre +ogres +ogress +ogresses +ohm +ohmage +ohmmeter +ohmmeters +ohms +oidium +oik +oiks +oil +oilcan +oilcans +oilcloth +oilcloths +oiler +oilers +oiliness +oilman +oilpaper +oils +oilskin +oilskins +oilstone +oilstones +ointment +ointments +oiticica +oiticicas +oka +okapi +okapis +okas +okay +okays +oke +okes +okra +okras +old +old-fashioned +old-fashionedness +old-timer +old-timers +oldie +oldies +oldness +olds +oldster +oldsters +oleaginousness +oleander +oleanders +olearia +olearias +oleaster +oleasters +oleate +oleates +olecranon +olecranons +olefin +olefine +olefines +olefins +olein +oleins +oleo +oleograph +oleographs +oleography +oleomargarine +oleos +oleum +olfaction +olfactory +olibanum +oligarch +oligarchies +oligarchs +oligarchy +oligochaete +oligochaetes +oligoclase +oligopolies +oligopoly +oligopsonies +oligopsony +oliguria +olio +olios +olive +olivenite +olives +olivine +olla +olla-podrida +ollas +olm +olms +ology +oloroso +olorosos +olympics +omadhaun +omadhauns +omasum +omber +ombre +ombu +ombudsman +ombus +omega +omegas +omelet +omelets +omelette +omelettes +omen +omens +omentum +omer +omers +omicron +omicrons +ominousness +omission +omissions +ommatidium +ommatophore +ommatophores +omnibus +omnibuses +omnipotence +omnipotences +omnipotent +omnipresence +omniscience +omnium-gatherum +omnivore +omnivores +omnivorousness +omophagia +omophorion +omophorions +omphalos +omphaloses +onager +onagers +onanism +onanist +onanists +once +once-over +oncer +oncers +onchocerciasis +oncidium +oncidiums +oncogene +oncogenes +oncologist +oncologists +oncology +oncoming +oncomings +oncost +oncosts +ondatra +ondatras +ondine +ondines +onding +ondings +one +one-acter +one-liner +one-liners +one-nighter +one-nighters +one-off +one-offs +one-sidedness +one-step +one-steps +one-two +one-upmanship +oneirocritic +oneirocriticism +oneiromancy +oneness +oner +onerousness +oners +ones +onion +onions +onlooker +onlookers +onomasticon +onomasticons +onomastics +onomatopoeia +onomatopoeias +onrush +onrushes +onset +onsets +onslaught +onslaughts +ontogenesis +ontogeny +ontologist +ontologists +ontology +onus +onuses +onychia +onychium +onyx +onyxes +oocyte +oocytes +oodles +oof +oofs +oogamy +oogenesis +oogonium +oolite +oolites +oolith +ooliths +oology +oolong +oolongs +oomiak +oomiaks +oompah +oompahs +oomph +oophorectomies +oophorectomy +oophoritis +oophyte +oophytes +oos +oose +ooses +oosperm +oosperms +oosphere +oospheres +oospore +oospores +ooze +oozes +oozing +opacities +opacity +opah +opahs +opal +opalescence +opaline +opalines +opals +opaque +opaqueness +opaques +opcode +opcodes +open +open-heartedness +open-mindedness +opener +openers +opening +openings +openness +opens +openwork +opepe +opepes +opera +operability +operagoer +operagoers +operand +operands +operant +operants +operas +operation +operations +operative +operativeness +operatives +operator +operators +operculum +operetta +operettas +operettist +operettists +operon +operons +operoseness +ophicleide +ophicleides +ophidian +ophidians +ophiolater +ophiolaters +ophiolatry +ophiologist +ophiologists +ophiology +ophite +ophites +ophthalmia +ophthalmitis +ophthalmologist +ophthalmology +ophthalmometer +ophthalmometers +ophthalmometry +ophthalmoscope +ophthalmoscopes +ophthalmoscopy +opiate +opiates +opinicus +opinicuses +opinion +opinionativeness +opinions +opisthobranch +opisthobranchs +opisthodomos +opisthodomoses +opium +opiumism +opiums +opodeldoc +opopanax +opossum +opossums +oppidan +oppidans +oppilation +opponencies +opponency +opponent +opponents +opportuneness +opportunism +opportunist +opportunists +opportunities +opportunity +opposability +opposer +opposers +opposite +oppositeness +opposites +opposition +oppositions +oppression +oppressions +oppressiveness +oppressor +oppressors +opprobriousness +opprobrium +oppugner +oppugners +ops +opsimath +opsimaths +opsonin +optative +optatives +optic +optician +opticians +optics +optime +optimes +optimise +optimises +optimism +optimist +optimists +optimization +optimizations +optimum +option +options +optometer +optometers +optometrist +optometrists +optometry +opulence +opuntia +opuntias +opus +opuscule +opuscules +opuses +orach +orache +oraches +orachs +oracle +oracles +oracularity +oracularness +oracy +oral +orals +orang +orang-utan +orang-utans +orange +orange-tip +orangeade +orangeades +orangeries +orangery +oranges +orangs +orarion +orarions +orarium +orariums +oration +orations +orator +oratories +oratorio +oratorios +orators +oratory +oratrix +oratrixes +orb +orbicularis +orbit +orbital +orbitals +orbits +orbs +orc +orcein +orchard +orchardist +orchardists +orchards +orchestra +orchestras +orchestration +orchestrations +orchestrator +orchestrators +orchestrion +orchestrions +orchid +orchidectomies +orchidectomy +orchidologist +orchidologists +orchidology +orchids +orchiectomies +orchiectomy +orchil +orchils +orchis +orchises +orchitis +orcinol +orcs +ord +ordainer +ordainers +ordaining +ordainment +ordainments +ordeal +ordeals +order +ordering +orderings +orderlies +orderliness +orderly +orders +ordinal +ordinals +ordinance +ordinances +ordinand +ordinands +ordinaries +ordinariness +ordinary +ordinate +ordinates +ordination +ordinations +ordnance +ordnances +ordonnance +ords +ordure +ordures +ore +oread +oreades +oreads +oregano +oreganos +ores +orexis +orexises +orfe +orfes +organ +organ-grinder +organ-grinders +organa +organdie +organdy +organelle +organelles +organic +organicism +organicist +organicists +organisability +organisation +organisations +organism +organisms +organist +organists +organizability +organization +organizations +organizer +organizers +organogenesis +organography +organon +organotherapy +organs +organum +organza +organzas +organzine +orgasm +orgasms +orgeat +orgeats +orgies +orgy +oribi +oribis +oriel +oriels +orient +oriental +orientals +orientation +orientations +orienteering +orients +orifice +orifices +oriflamme +oriflammes +origami +origan +origanes +origans +origanum +origanums +origin +original +originality +originals +origination +originator +originators +origins +orinasal +orinasals +oriole +orioles +orison +orisons +orle +orleans +orles +orlop +orlops +ormer +ormers +ormolu +ormolus +ornament +ornamental +ornamentation +ornamentations +ornaments +ornateness +orneriness +ornis +ornises +ornithischian +ornithischians +ornithogalum +ornithogalums +ornithologist +ornithologists +ornithology +ornithomancy +ornithopod +ornithopods +ornithopter +ornithopters +ornithorhynchus +ornithoscopy +ornithosis +orogenies +orogeny +orographic +orography +oroide +orologist +orologists +oropharynx +orotundity +orphan +orphanage +orphanages +orphanhood +orphans +orpharion +orpharions +orphrey +orphreys +orpiment +orpin +orpine +orpines +orpins +orreries +orrery +orris +orrises +orseille +orseilles +ortanique +ortaniques +orthicon +orthicons +orthocentre +orthocentres +orthoclase +orthodontia +orthodontics +orthodontist +orthodontists +orthodoxies +orthodoxy +orthoepy +orthogenesis +orthographer +orthographers +orthographies +orthography +orthopaedics +orthopedics +orthopedist +orthopedists +orthophosphate +orthophosphates +orthopraxies +orthopraxy +orthopsychiatry +orthoptera +orthopteran +orthopteron +orthoptics +orthostichies +orthostichy +orthotone +orthotropism +orthros +orthroses +ortolan +ortolans +oryx +oryxes +orzo +oscillation +oscillations +oscillator +oscillators +oscillogram +oscillograms +oscillograph +oscillographs +oscilloscope +oscilloscopes +oscine +oscitancy +osculation +osculations +osculum +osculums +osier +osiers +osmeterium +osmidrosis +osmiridium +osmium +osmometer +osmometers +osmometry +osmose +osmoses +osmosis +osmund +osmunda +osmundas +osmunds +osnaburg +osnaburgs +osprey +ospreys +ossa +ossein +osselet +osselets +ossicle +ossicles +ossification +ossifrage +ossifrages +ossuaries +ossuary +osteitis +ostensories +ostensory +ostentation +ostentatiousness +osteoarthritis +osteoblast +osteoblasts +osteoclasis +osteoclast +osteoclasts +osteogenesis +osteologist +osteologists +osteology +osteoma +osteomalacia +osteomas +osteomyelitis +osteopath +osteopathist +osteopathists +osteopaths +osteopathy +osteopetrosis +osteophyte +osteophytes +osteoplasties +osteoplasty +osteoporosis +osteosarcoma +osteotome +osteotomes +osteotomies +osteotomy +ostiaries +ostiary +ostinato +ostinatos +ostiole +ostioles +ostium +ostler +ostlers +ostracise +ostracises +ostracism +ostracod +ostracoderm +ostracoderms +ostracods +ostracon +ostrich +ostriches +otalgia +otherness +otherworldliness +otitis +otocyst +otocysts +otolaryngologist +otolaryngologists +otolaryngology +otolith +otoliths +otologist +otologists +otology +otorhinolaryngologist +otorhinolaryngologists +otorhinolaryngology +otosclerosis +otoscope +otoscopes +ottar +ottars +ottava +ottavas +otter +otters +otto +ottos +ottrelite +ouabain +ouabains +ouananiche +ouananiches +oubliette +oubliettes +ouch +ouches +ought +oughts +ouija +ouijas +ounce +ounces +ouphe +ourari +ouraris +ousel +ousels +ouster +ousters +ousting +out +out-and-outer +out-of-doors +out-of-print +out-tray +out-trays +outage +outages +outback +outboard +outbreak +outbreaks +outbuilding +outbuildings +outburst +outbursts +outcast +outcaste +outcastes +outcasts +outcome +outcomes +outcries +outcrop +outcropping +outcrops +outcross +outcrosses +outcrossing +outcrossings +outcry +outdoors +outer +outers +outerwear +outfall +outfalls +outfield +outfielder +outfielders +outfields +outfighting +outfit +outfits +outfitter +outfitters +outfitting +outflow +outflows +outgo +outgoer +outgoers +outgoes +outgoing +outgoings +outgrowth +outgrowths +outguard +outguards +outhaul +outhauls +outhouse +outhouses +outing +outings +outland +outlander +outlanders +outlandishness +outlands +outlaw +outlawry +outlaws +outlay +outlays +outlet +outlets +outlier +outliers +outline +outlines +outlook +outlooks +outness +outparish +outparishes +outport +outports +outpost +outposts +outpour +outpouring +outpourings +outpours +output +outputs +outquarters +outrage +outrageousness +outrages +outrance +outrances +outreach +outreaches +outremer +outremers +outride +outrider +outriders +outrides +outrigger +outriggers +outrunner +outrunners +outrush +outrushes +outs +outset +outsets +outshoot +outshoots +outshot +outshots +outside +outsider +outsiders +outsides +outsize +outsizes +outskirts +outsole +outsoles +outspan +outspans +outspokenness +outspread +outspreads +outstation +outstations +outswing +outswinger +outswingers +outswings +outtake +outturn +outturns +outward +outwardness +outwards +outwash +outwork +outworker +outworkers +outworks +ouzel +ouzels +ouzo +ouzos +ova +oval +ovalbumin +ovals +ovaries +ovariotomies +ovariotomist +ovariotomists +ovariotomy +ovaritis +ovary +ovation +ovations +oven +ovens +ovenware +ovenwood +over +overabundance +overabundances +overacting +overactivity +overall +overalls +overbalance +overbalances +overbearingness +overbid +overbids +overbite +overbites +overburden +overburdens +overbuy +overbuys +overcall +overcalls +overcapacity +overcapitalisation +overcapitalization +overcast +overcasting +overcasts +overcharge +overcharges +overcheck +overchecks +overcoat +overcoating +overcoats +overcompensation +overcredulity +overdevelopment +overdose +overdoses +overdraft +overdrafts +overdraught +overdraughts +overdress +overdresses +overdrive +overdrives +overeating +overemphasis +overemphasises +overenthusiasm +overestimate +overestimates +overestimation +overestimations +overexcitability +overexertion +overexertions +overexposure +overfall +overfalls +overfeeding +overflight +overflights +overflow +overflowing +overflowings +overflows +overfold +overfolds +overfondness +overforwardness +overfreedom +overgarment +overgarments +overglazed +overglazing +overgrowth +overgrowths +overhang +overhangs +overhastiness +overhaul +overhauling +overhauls +overhead +overheads +overheat +overheating +overheats +overindulgence +overindulgences +overissue +overissues +overkill +overkills +overlap +overlapping +overlaps +overlay +overlays +overload +overloads +overlook +overlooker +overlookers +overlooks +overlord +overlords +overlordship +overman +overmans +overmantel +overmantels +overmast +overmasts +overmatch +overmatches +overmatter +overmatters +overmeasure +overmeasures +overmuch +overmultiplication +overnighter +overnighters +overoptimism +overpass +overpasses +overpayment +overpayments +overplus +overpluses +overpopulation +overpraise +overpraises +overprint +overprints +overproduction +overrashness +overrating +overreaction +overreactions +overreckoning +override +overrider +overriders +overrides +overripe +overruler +overrulers +overrun +overruns +overs +overscrupulousness +overseas +overseer +overseers +overshirt +overshirts +overshoe +overshoes +overshoot +overshoots +oversight +oversights +oversimplification +oversize +oversizes +overskirt +overskirts +overslaugh +overslaughs +oversleeve +oversleeves +oversoul +oversouls +overspecialization +overspill +overspills +overspin +overspins +overstand +overstands +overstatement +overstatements +overstock +overstocking +overstocks +overstrain +overstrains +overstudies +overstudy +oversubscription +oversubtlety +oversupplies +oversupply +overtaking +overthrow +overthrower +overthrowers +overthrows +overthrust +overthrusts +overtime +overtimes +overtone +overtones +overtrick +overtricks +overture +overtures +overturn +overturning +overturns +overuse +overuses +overvaluation +overvaluations +overview +overviews +overweight +overweights +overword +overwords +overwork +overworking +overworks +ovibos +oviboses +oviduct +oviducts +oviparity +oviposition +ovipositor +ovipositors +ovisac +ovisacs +ovoid +ovoids +ovolo +ovotestis +ovulation +ovulations +ovule +ovules +ovum +owelty +owl +owlet +owlets +owlishness +owls +owner +owner-driver +owner-occupier +owner-occupiers +owners +ownership +ownerships +oxalate +oxalates +oxalis +oxalises +oxazine +oxazines +oxcart +oxcarts +oxen +oxeye +oxeyes +oxgang +oxgangs +oxhide +oxidant +oxidants +oxidase +oxidases +oxidation +oxidations +oxide +oxides +oxidisation +oxidisations +oxidization +oxidizations +oxidizer +oxidizers +oxime +oximes +oximeter +oximeters +oxlip +oxlips +oxtail +oxtails +oxter +oxters +oxygen +oxygenate +oxygenates +oxygenation +oxygenator +oxygenators +oxyhaemoglobin +oxymoron +oxymorons +oxytocic +oxytocin +oyer +oyers +oyez +oyezes +oyster +oysters +ozocerite +ozokerite +ozone +ozonizer +ozonizers +ozonosphere +pa'anga +pabulum +paca +pacas +pace +pacemaker +pacemakers +pacer +pacers +paces +pacha +pachalic +pachalics +pachas +pachinko +pachisi +pachuco +pachucos +pachyderm +pachyderms +pacific +pacification +pacifications +pacificism +pacificist +pacificists +pacifier +pacifiers +pacifism +pacifist +pacifists +pacing +pack +package +packages +packaging +packagings +packer +packers +packet +packets +packhorse +packhorses +packing +packings +packman +packs +packsack +packsacks +pact +paction +pactions +pacts +pad +padang +padangs +padauk +padauks +paddies +padding +paddings +paddle +paddlefish +paddlefishes +paddler +paddlers +paddles +paddock +paddocks +paddy +paddymelon +paddymelons +pademelon +pademelons +padlock +padlocks +padouk +padouks +padre +padres +padrone +pads +paduasoy +paduasoys +paean +paeans +paederast +paederasts +paederasty +paediatrician +paediatricians +paediatrics +paedobaptism +paedobaptist +paedobaptists +paedogenesis +paedology +paedomorphosis +paedophilia +paella +paellas +paenula +paenulas +paeon +paeonies +paeons +paeony +pagan +paganism +pagans +page +pageant +pageantries +pageantry +pageants +pages +pagination +paginations +paging +pagings +pagoda +pagodas +pagurian +pagurians +pagurid +pahoehoe +paigle +paigles +paik +paiks +pail +pailful +pailfuls +paillasse +paillasses +paillette +paillettes +pails +pain +painfulness +pains +paint +painter +painters +painting +paintings +paints +painty +pair +pair-oar +pairing +pairings +pairs +paisa +paisano +paisanos +paisas +paisley +paisleys +pajama +pajamas +pakeha +pakehas +pal +palabra +palabras +palace +palaces +paladin +paladins +palaeethnology +palaeoanthropology +palaeobiologist +palaeobiologists +palaeobiology +palaeobotany +palaeoclimatology +palaeoecologist +palaeoecologists +palaeoecology +palaeogeography +palaeography +palaeolith +palaeoliths +palaeomagnetism +palaeontography +palaeontologist +palaeontologists +palaeontology +palaeopathology +palaeozoologist +palaeozoology +palaestra +palaestras +palanquin +palanquins +palas +palases +palatability +palatableness +palatal +palatalization +palatals +palate +palates +palatinate +palatinates +palatine +palatines +palaver +palaverer +palaverers +palavers +palazzo +pale +palea +paleface +palefaces +paleness +paleographer +paleographers +paleography +paleontologist +paleontologists +paleontology +pales +palestra +palestras +palet +paletot +paletots +palets +palette +palettes +palfrey +palfreys +palimonies +palimony +palimpsest +palimpsests +palindrome +palindromes +palindromist +palindromists +paling +palingenesis +palingenesist +palingenesists +palings +palinode +palinodes +palisade +palisades +palisado +palisadoes +palki +palkis +pall +pall-mall +palladium +palladiums +pallet +palletization +palletizations +pallets +palliasse +palliasses +palliation +palliations +palliative +palliatives +pallidness +pallium +pallone +pallor +palls +palm +palmation +palmations +palmer +palmers +palmette +palmettes +palmetto +palmettoes +palmettos +palmist +palmistry +palmists +palmitate +palmitates +palmitin +palms +palmyra +palmyras +palolo +palolos +palomino +palominos +palooka +palookas +palp +palpability +palpableness +palpation +palpations +palpi +palpitation +palpitations +palps +pals +palsgrave +palsgraves +palsgravine +palsgravines +palsies +palstave +palstaves +palsy +palterer +palterers +paltering +paltriness +paludamentum +paludamentums +paludism +palynology +pam +pampas +pamperedness +pamperer +pamperers +pampering +pampero +pamperos +pamphlet +pamphleteer +pamphleteers +pamphlets +pams +pan +panacea +panaceas +panache +panaches +panada +panadas +panama +panamas +panatela +panatelas +panatella +panatellas +panax +panaxes +pancake +pancakes +panchax +panchaxes +panchromatism +pancosmism +pancratium +pancreas +pancreases +pancreatin +pancreatitis +panda +pandas +pandect +pandects +pandemia +pandemias +pandemic +pandemics +pandemonium +pandemoniums +pander +panders +pandiculation +pandiculations +pandies +pandit +pandits +pandora +pandoras +pandore +pandores +pandour +pandours +pandowdies +pandowdy +pandy +pane +panegyric +panegyrics +panegyrist +panegyrists +panel +paneling +panelist +panelists +panelling +panellings +panellist +panellists +panels +panes +panettone +pang +panga +pangas +pangenesis +pangolin +pangolins +pangs +panhandle +panhandler +panhandlers +panhandles +panic +panicle +panicles +panicmonger +panicmongers +panics +panjandrum +panjandrums +panlogism +panmixia +pannage +pannages +panne +pannier +panniers +pannikin +pannikins +pannus +panocha +panoplies +panoply +panorama +panoramas +panpsychist +panpsychists +pans +pansies +pansophism +pansophist +pansophists +pansophy +panspermia +pansy +pant +pantagraph +pantechnicon +pantechnicons +panter +pantheism +pantheist +pantheists +pantheon +pantheons +panther +panthers +pantihose +pantile +pantiles +panting +pantings +pantisocracy +pantler +panto +pantofle +pantofles +pantograph +pantographer +pantographers +pantographs +pantography +pantomime +pantomimes +pantomimist +pantomimists +pantos +pantoum +pantoums +pantries +pantry +pantryman +pants +pantsuit +pantsuits +panzer +panzers +pap +papa +papable +papacies +papacy +papain +papalise +papalises +papas +papaverine +papaw +papaws +papaya +papayas +paper +paper-cutter +paperback +paperbacks +paperboard +paperbound +paperboy +paperboys +paperer +paperers +papergirl +papergirls +papering +paperings +papers +paperwork +papes +papeterie +papeteries +papilla +papilloma +papillomas +papillon +papillons +papillote +papillotes +papism +papist +papistry +papists +papoose +papooses +papovavirus +papovaviruses +pappoose +pappooses +pappus +pappuses +pappy +paprika +paprikas +paps +papule +papules +papyrologist +papyrologists +papyrology +papyrus +papyruses +par +para +parabasis +parabiosis +parable +parables +parabola +parabolas +parabole +paraboles +parabolist +parabolists +paraboloid +paraboloidal +paraboloids +parabrake +parabrakes +paracentesis +paracetamol +parachronism +parachronisms +parachute +parachutes +parachuting +parachutist +parachutists +paraclete +paracletes +parade +parader +paraders +parades +paradiddle +paradiddles +paradigm +paradigms +paradise +paradises +parados +paradox +paradoxes +paradoxicalness +paradoxology +paradrop +paradrops +paraesthesia +paraffin +paraffine +paraffines +paragenesis +paraglider +paragliders +paraglossa +paragoge +paragon +paragonite +paragons +paragraph +paragrapher +paragraphers +paragraphia +paragraphs +parakeet +parakeets +paralanguage +paralanguages +paraldehyde +paralegal +paraleipsis +paralipsis +parallax +parallel +parallelepiped +parallelepipedon +parallelepipeds +parallelism +parallelogram +parallelograms +parallelopiped +parallelopipedon +parallelopipeds +parallels +paralogism +paralogisms +paralyser +paralysers +paralysis +paralytic +paralytics +paralyzer +paralyzers +paramagnetism +paramatta +paramecia +paramecium +paramedic +paramedics +parament +parameter +parameters +paramilitaries +paramilitary +paramnesia +paramo +paramorph +paramorphism +paramorphs +paramos +paramount +paramountcies +paramountcy +paramounts +paramour +paramours +paramyxovirus +paramyxoviruses +paranephros +parang +parangs +paranoia +paranoiac +paranoiacs +paranoid +paranoids +paranthropus +paranymph +paranymphs +paraparesis +parapet +parapets +paraph +paraphernalia +paraphrase +paraphraser +paraphrasers +paraphrases +paraphrast +paraphrasts +paraphrenia +paraphs +paraphysis +paraplegia +paraplegic +paraplegics +parapodium +parapsychologist +parapsychology +paras +parasailing +parasang +parasangs +parascenium +paraselene +parasite +parasites +parasiticalness +parasiticide +parasiticides +parasitism +parasitologist +parasitologists +parasitology +parasitosis +parasol +parasols +parastichy +parasympathetic +parasynthesis +parasyntheton +parataxis +parathion +parathyroid +parathyroids +paratrooper +paratroopers +paratroops +paratyphoid +paravane +paravanes +parazoa +parazoan +parazoans +parbuckle +parbuckles +parcel +parcelling +parcels +parcenaries +parcenary +parcener +parceners +parchedness +parchment +parchments +parclose +parcloses +pard +pardalote +pardalotes +pardner +pardners +pardon +pardonableness +pardoner +pardoners +pardons +pards +paregoric +paregorics +pareira +pareiras +parenchyma +parenchymas +parent +parentage +parentages +parenthesis +parenthesises +parenthood +parents +parer +parergon +parergons +parers +pares +paresis +paresthesia +paretic +pareu +pareus +parfait +parfaits +parfleche +parfleches +pargasite +pargasites +parget +pargeting +pargetings +pargets +parging +parhelion +pari-mutuel +pari-mutuels +pariah +pariahs +parietal +parietals +paring +parings +parish +parishes +parishioner +parishioners +parison +parisons +parities +parity +park +parka +parkas +parkin +parking +parkins +parkland +parklands +parks +parkway +parkways +parlance +parlances +parlay +parlays +parle +parles +parley +parleys +parleyvoo +parleyvoos +parliament +parliamentarian +parliamentarianism +parliamentarians +parliaments +parlor +parlour +parlours +parochialism +parodies +parodist +parodists +parody +parol +parole +parolee +parolees +paroles +paronomasia +paronychia +paronychias +paronym +paronyms +paroquet +paroquets +parotid +parotids +parotitis +parousia +paroxysm +paroxysms +paroxytone +paroxytones +parpen +parpend +parpends +parpens +parquet +parquetries +parquetry +parquets +parr +parrakeet +parrakeets +parramatta +parramattas +parrel +parrels +parricide +parricides +parries +parroquet +parroquets +parrot +parrots +parrs +parry +pars +parsec +parsecs +parser +parsers +parses +parsimonies +parsimoniousness +parsimony +parsley +parsnip +parsnips +parson +parsonage +parsonages +parsons +part +part-off +part-owner +part-owners +part-singing +part-timer +part-timers +part-writing +partaker +partakers +partan +partans +parterre +parterres +parthenocarpy +parthenogenesis +parti +partial +partialities +partiality +partials +participant +participants +participate +participates +participation +participations +participial +participle +participles +particle +particles +particular +particularisation +particularism +particularisms +particularities +particularity +particularization +particulars +parties +parting +partings +partisan +partisans +partisanship +partita +partitas +partition +partitioner +partitioners +partitioning +partitionist +partitionists +partitionment +partitionments +partitions +partitive +partitives +partizan +partizans +partlet +partlets +partner +partners +partnership +partnerships +parton +partons +partridge +partridge-wood +partridges +parts +parturition +party +partygoer +partygoers +partyism +parulis +parulises +parure +parures +parvenu +parvenus +parvis +parvises +parvovirus +parvoviruses +pas +pascal +pascals +paschal +paseo +paseos +pash +pasha +pashalik +pashaliks +pashas +pashes +pashm +pasigraphy +paspalum +paspalums +pasquinade +pasquinades +pass +passableness +passacaglia +passacaglias +passade +passades +passado +passadoes +passados +passage +passages +passageway +passageways +passament +passaments +passe-partout +passe-partouts +passel +passels +passementerie +passementeries +passenger +passengers +passepied +passepieds +passer +passer-by +passerine +passerines +passers +passes +passibility +passiflora +passifloras +passing +passings +passion +passional +passionals +passionaries +passionary +passionateness +passions +passive +passiveness +passives +passivism +passivist +passivists +passivities +passivity +passkey +passkeys +passport +passports +passus +passuses +password +passwords +past +pasta +pastas +paste +paste-up +paste-ups +pasteboard +pasteboards +pastel +pastelist +pastelists +pastels +paster +pastern +pasterns +pasters +pastes +pasteurellosis +pasteurisation +pasteurism +pasteurization +pasteurizer +pasteurizers +pasticcio +pastiche +pastiches +pasticheur +pasticheurs +pasties +pastil +pastille +pastilles +pastils +pastime +pastimes +pastiness +pastis +pastises +pastor +pastoral +pastorale +pastorales +pastoralism +pastoralist +pastoralists +pastorals +pastorate +pastorates +pastors +pastorship +pastorships +pastrami +pastramis +pastries +pastry +pasts +pasturable +pasturage +pasturages +pasture +pastures +pasty +pat +pataca +patacas +patagium +patch +patchboard +patchboards +patcher +patchers +patches +patchiness +patching +patchings +patchouli +patchoulies +patchoulis +patchouly +patchwork +patchworks +pate +patella +patellas +paten +patency +patens +patent +patentee +patentees +patentor +patentors +patents +pater +paterfamilias +paterfamiliases +paternalism +paternities +paternity +paternoster +paternosters +paters +pates +path +pathfinder +pathfinders +pathic +pathics +pathogen +pathogenesis +pathogens +pathognomy +pathographies +pathography +pathologies +pathologist +pathologists +pathology +pathos +paths +pathway +pathways +patience +patiences +patient +patients +patin +patina +patinas +patinated +patines +patins +patio +patios +patisserie +patisseries +patness +patois +patresfamilias +patrial +patrials +patriarch +patriarchate +patriarchates +patriarchies +patriarchs +patriarchy +patrician +patricians +patriciate +patriciates +patricide +patricides +patrick +patricks +patrilineage +patrilineages +patriliny +patrimonies +patrimony +patriot +patriotism +patriots +patrol +patroller +patrollers +patrolling +patrolman +patrology +patrols +patron +patronage +patronages +patroness +patronesses +patroniser +patronisers +patronizer +patronizers +patronne +patronnes +patrons +patronymic +patronymics +patroon +patroons +patroonship +patroonships +pats +patsies +patsy +patten +pattens +patter +patterer +patterers +pattern +patterns +patters +patties +pattle +pattles +patty +patty-pan +patty-pans +patzer +patzers +paua +pauas +paucity +paughty +paul +pauldron +pauldrons +paulownia +paulownias +pauls +paunch +paunches +paunchiness +pauper +pauperisation +pauperisations +pauperism +pauperization +pauperizations +paupers +pause +pauser +pausers +pauses +pavage +pavages +pavane +pavanes +pavement +pavements +paver +pavers +pavilion +pavilions +pavin +paving +pavings +pavior +paviors +paviour +paviours +pavis +pavise +pavises +paw +pawl +pawls +pawn +pawnbroker +pawnbrokers +pawnee +pawnees +pawner +pawners +pawning +pawns +pawnshop +pawnshops +pawpaw +pawpaws +paws +pax +paxes +paxwax +paxwaxes +pay +pay-phone +pay-phones +pay-station +pay-stations +payday +paydays +payee +payees +payer +payers +paying +payings +paymaster +paymasters +payment +payments +paynim +paynims +payoff +payoffs +payola +payolas +pays +paysheet +paysheets +pea +pea-souper +pea-soupers +peace +peaceableness +peacefulness +peacelessness +peacemaker +peacemakers +peacemaking +peacenik +peaceniks +peaces +peacetime +peacetimes +peach +peach-blow +peacher +peachers +peaches +peacock +peacockery +peacocks +peafowl +peafowls +peag +peags +peahen +peahens +peak +peaks +peal +pealing +peals +pean +peans +peanut +peanuts +peapod +peapods +pear +pearl +pearler +pearlers +pearlies +pearliness +pearlite +pearls +pearly +pearmain +pearmains +pears +peas +peasant +peasantries +peasantry +peasants +pease +peases +peashooter +peashooters +peat +peats +peavey +peavy +peba +pebas +pebble +pebbles +pebbling +pebblings +pecan +pecans +peccadillo +peccadilloes +peccadillos +peccancies +peccancy +peccaries +peccary +peccavi +peccavis +pech +pechs +peck +pecker +peckers +pecks +pecs +pecten +pectin +pectination +pectinations +pectines +pectization +pectolite +pectoral +pectorals +pectose +peculation +peculations +peculator +peculators +peculiar +peculiarities +peculiarity +peculiars +peculium +peculiums +ped +pedagogics +pedagogism +pedagogue +pedagogueries +pedagoguery +pedagogues +pedagogy +pedal +pedaller +pedallers +pedalo +pedaloes +pedalos +pedals +pedant +pedanticism +pedantries +pedantry +pedants +peddler +peddlers +peddling +pederast +pederasts +pederasty +pedesis +pedestal +pedestals +pedestrian +pedestrianism +pedestrians +pediatrician +pediatricians +pediatrics +pedicab +pedicabs +pedicel +pedicels +pedicle +pedicles +pediculate +pediculosis +pedicure +pedicures +pedicurist +pedicurists +pedigree +pedigrees +pediment +pediments +pedipalp +pedipalps +pedlar +pedlaries +pedlars +pedlary +pedologist +pedologists +pedology +pedometer +pedometers +pedro +pedros +peds +peduncle +peduncles +pee +peeing +peek +peekaboo +peeks +peel +peeler +peelers +peeling +peelings +peels +peen +peens +peep +peeper +peepers +peeps +peepul +peepuls +peer +peerage +peerages +peeress +peeresses +peerie +peeries +peerlessness +peers +pees +peetweet +peetweets +peeve +peevers +peeves +peevishness +peewee +peewees +peewit +peewits +peg +pegasus +pegasuses +pegboard +pegboards +pegh +peghs +pegmatite +pegmatites +pegs +peignoir +peignoirs +pein +peins +pejoration +pejorations +pejorative +pejoratives +pekan +pekans +peke +pekes +pekoe +pekoes +pelage +pelages +pelargonium +pelargoniums +pelerine +pelerines +pelf +pelham +pelhams +pelican +pelicans +pelisse +pelisses +pelite +pelites +pell-mell +pellagra +pellet +pellets +pellicle +pellicles +pellitories +pellitory +pellucidity +pellucidness +pelmet +pelmets +peloid +peloids +peloria +pelorus +peloruses +pelota +pelt +peltast +peltasts +pelter +pelters +pelting +peltings +peltry +pelts +pelvis +pelvises +pembroke +pembrokes +pemmican +pemmicans +pemphigoid +pemphigus +pen +pen-and-ink +pen-friend +pen-friends +penalisation +penalisations +penalization +penalizations +penalties +penalty +penance +penances +pence +pencel +pencels +penchant +penchants +pencil +pencils +pendant +pendants +pendency +pendent +pendentive +pendentives +pendents +pendragon +pendragons +pendragonship +pendulum +pendulums +peneplain +peneplains +penes +penetrability +penetrableness +penetrance +penetrances +penetrant +penetrants +penetration +penetrations +penetrativeness +penetrator +penetrators +penguin +penguins +penholder +penholders +penicillin +peninsula +peninsularity +peninsulas +penis +penises +penitence +penitences +penitent +penitential +penitentiaries +penitentiary +penitents +penknife +penlight +penlights +penman +penmanship +penn'orth +penn'orths +penna +pennaceous +pennant +pennants +pennatula +pennatulas +pennies +pennilessness +penning +penninite +penninites +pennon +pennoncel +pennoncelle +pennoncelles +pennoncels +pennons +penny +penny-a-liner +penny-a-liners +penny-farthing +penny-farthings +penny-pincher +penny-pinchers +penny-pinching +penny-stone +pennycress +pennyroyal +pennyroyals +pennyweight +pennyweights +pennywort +pennyworth +pennyworths +pennyworts +penologist +penologists +penology +penoncel +penoncels +penpusher +penpushers +pens +pensil +pensils +pension +pensionaries +pensionary +pensioner +pensioners +pensions +pensiveness +penstemon +penstemons +penstock +penstocks +pentachlorophenol +pentacle +pentacles +pentad +pentadactylism +pentads +pentagon +pentagons +pentagram +pentagrams +pentahedron +pentahedrons +pentalpha +pentalphas +pentameries +pentamerism +pentamery +pentameter +pentameters +pentane +pentanes +pentangle +pentangles +pentapodies +pentapody +pentaprism +pentaprisms +pentarch +pentarchies +pentarchs +pentarchy +pentastich +pentastichs +pentathlete +pentathletes +pentathlon +pentathlons +pentene +penthouse +penthouses +pentimento +pentlandite +pentobarbital +pentode +pentodes +pentosan +pentosanes +pentose +pentoxide +pentoxides +pentstemon +pentstemons +penuche +penuches +penuchle +penuchles +penult +penultima +penultimas +penultimate +penultimates +penults +penumbra +penumbras +penuriousness +penury +peon +peonage +peonies +peonism +peons +peony +people +peoples +pep +peperomia +peperoni +peperonis +pepino +pepinos +peplos +peploses +peplum +peplums +pepo +pepos +pepper +pepper-and-salt +peppercorn +peppercorns +pepperer +pepperers +pepperiness +peppermint +peppermints +pepperoni +pepperonis +peppers +pepperwort +pepperworts +peppiness +peps +pepsin +pepsines +pepsinogen +pepsins +peptidase +peptide +peptides +peptization +peptizing +peptone +peptones +peptonisation +peptonization +peradventure +peradventures +perambulation +perambulations +perambulator +perambulators +percale +percales +percaline +percalines +perceiver +perceivers +perceiving +perceivings +percent +percentage +percentages +percentile +percentiles +percents +percept +perceptibility +perception +perceptions +perceptiveness +perceptivities +perceptivity +percepts +perch +percher +perchers +perches +perchlorate +perchlorates +perchloroethylene +percipience +percipiency +percipient +percipients +percoid +percolate +percolates +percolation +percolations +percolator +percolators +percussion +percussionist +percussionists +percussions +percussor +percussors +perdition +perdu +perdues +perdurability +perdus +peregrination +peregrinations +peregrinator +peregrinators +peregrine +peregrines +peregrinity +pereion +perennial +perenniality +perennials +perfect +perfecta +perfectas +perfecter +perfecters +perfectibilist +perfectibilists +perfectibility +perfection +perfectionism +perfectionist +perfectionists +perfections +perfective +perfectness +perfecto +perfectos +perfects +perfervor +perfervour +perfidies +perfidiousness +perfidy +perforation +perforations +perforator +perforators +performance +performances +performer +performers +performing +performings +perfume +perfumer +perfumeries +perfumers +perfumery +perfumes +perfunctoriness +perfusion +perfusions +pergola +pergolas +peri +perianth +perianths +periapt +periastron +periblast +periblem +periblems +peribolos +peribolus +pericarditis +pericardium +pericardiums +pericarp +pericarps +perichaetium +perichaetiums +perichondrium +perichondriums +periclase +pericline +periclines +pericope +pericopes +pericranium +pericraniums +pericycle +pericycles +pericynthion +pericynthions +periderm +periderms +peridinian +peridinians +peridinium +peridiniums +peridium +peridiums +peridot +peridotes +peridotite +peridots +peridrome +peridromes +perigee +perigees +perigon +perigone +perigones +perigonium +perigoniums +perigons +perihelion +perihelions +peril +perilousness +perils +perilune +perilymph +perilymphs +perimeter +perimeters +perimorph +perimorphs +perimysium +perimysiums +perinephrium +perinephriums +perineum +perineums +perineuritis +perineurium +perineuriums +period +periodate +periodates +periodical +periodicalist +periodicalists +periodicals +periodicity +periodization +periodizations +periodontia +periodontics +periodontist +periodontists +periodontitis +periods +perionychium +perionychiums +periosteum +periostitis +periostracum +periostracums +peripatetic +peripateticism +peripatus +peripatuses +peripeteia +peripeteias +peripheral +peripherally +peripherals +peripheries +periphery +periphrasis +periphyton +periptery +perique +peris +perisarc +perisarcs +periscope +periscopes +perishability +perishable +perishableness +perishables +perisher +perishers +perisperm +perisperms +perispomenon +perispomenons +perissodactyl +perissodactyls +peristalith +peristaliths +peristalsis +peristerite +peristome +peristomes +peristyle +peristyles +perithecium +peritoneum +peritoneums +peritonitis +peritrich +periwig +periwigs +periwinkle +periwinkles +perjurer +perjurers +perjuries +perjury +perk +perkiness +perks +perlite +perlites +perlocution +perlocutions +perm +permafrost +permalloy +permalloys +permanence +permanences +permanencies +permanency +permanent +permanganate +permanganates +permeabilities +permeability +permeameter +permeameters +permeance +permeation +permeations +permissibility +permission +permissions +permissiveness +permit +permits +permittivity +perms +permutability +permutation +permutations +pernancy +perniciousness +pernicketiness +peroneus +peroneuses +peroration +perorations +peroxidase +peroxidation +peroxidations +peroxide +peroxides +perpend +perpendicular +perpendicularity +perpendiculars +perpends +perpent +perpents +perpetration +perpetrations +perpetrator +perpetrators +perpetual +perpetualities +perpetuality +perpetuals +perpetuance +perpetuances +perpetuation +perpetuations +perpetuator +perpetuators +perpetuities +perpetuity +perplexedness +perplexities +perplexity +perquisite +perquisites +perries +perron +perrons +perruquier +perruquiers +perry +persecution +persecutions +persecutor +persecutors +perseities +perseity +perseverance +perseverances +perseveration +perseverations +persicaria +persiflage +persiflages +persimmon +persimmons +persistence +persistences +persistencies +persistency +person +persona +personableness +personage +personages +personal +personalisation +personalism +personalist +personalists +personalities +personality +personalization +personals +personalties +personalty +personas +personation +personations +personator +personators +personhood +personification +personifications +personifier +personifiers +personnel +personnels +persons +perspective +perspectives +perspectivism +perspectivist +perspectivists +perspicaciousness +perspicacity +perspicuities +perspicuity +perspicuousness +perspiration +perspiring +persuader +persuaders +persuasibility +persuasion +persuasions +persuasiveness +pertinaciousness +pertinacity +pertinence +pertinency +pertness +perturbation +perturbations +perturbative +perturbator +perturbators +perturber +perturbers +pertussis +peruke +perukes +perusal +perusals +peruser +perusers +perusing +perv +pervasion +pervasions +pervasiveness +perverseness +perversion +perversions +perversities +perversity +pervert +perverter +perverters +perverts +perves +pervicaciousness +perviousness +pervs +pesade +pesades +peseta +pesetas +pesewa +pesewas +peso +pesos +pessaries +pessary +pessimism +pessimist +pessimists +pest +pesterer +pesterers +pesthouse +pesthouses +pesticide +pesticides +pestilence +pestilences +pestle +pestles +pests +pet +petal +petalody +petals +petard +petards +petasus +petasuses +petcharies +petchary +petcock +petcocks +petechia +peter +peters +petersham +petershams +pethidine +petiole +petioles +petiolule +petiolules +petite +petition +petitioner +petitioners +petitionist +petitionists +petitions +petrel +petrels +petrifaction +petrifactions +petrification +petrifications +petrochemical +petrochemicals +petrochemistry +petrodollar +petrodollars +petrogenesis +petroglyph +petroglyphs +petrogram +petrograms +petrographer +petrographers +petrography +petrol +petrolatum +petroleum +petrologist +petrology +petrols +petronel +petronels +pets +pettedness +petticoat +petticoats +pettifogger +pettifoggers +pettiness +petting +pettings +pettishness +petulance +petulancy +petunia +petunias +petuntse +pew +pewee +pewees +pewit +pewits +pews +pewter +pewters +peyote +pfennig +pfennigs +phacelia +phacelias +phacolite +phacolites +phaeton +phaetons +phage +phagedena +phages +phagocyte +phagocytes +phagocytosis +phagophobia +phalange +phalanger +phalangers +phalanges +phalansterian +phalanstery +phalanx +phalanxes +phalarope +phalaropes +phallicism +phallus +phalluses +phanerogam +phanerogams +phanerophyte +phanerophytes +phantasies +phantasm +phantasmagoria +phantasmagorias +phantasms +phantasy +phantom +phantoms +pharmaceutical +pharmaceuticals +pharmaceutics +pharmacies +pharmacist +pharmacists +pharmacodynamics +pharmacognosist +pharmacognosy +pharmacologist +pharmacologists +pharmacology +pharmacopoeia +pharmacopoeias +pharmacy +pharos +pharoses +pharyngeal +pharyngitis +pharyngology +pharyngoscope +pharyngoscopes +pharyngoscopy +pharyngotomies +pharyngotomy +pharynx +pharynxes +phase +phases +phasis +phasmid +phasmids +pheasant +pheasant's-eye +pheasants +phellem +phellems +phelloderm +phellogen +phellogens +phelonion +phelonions +phenacetin +phenacite +phenobarbital +phenobarbitone +phenocryst +phenocrysts +phenol +phenolate +phenolates +phenolic +phenology +phenolphthalein +phenols +phenomena +phenomenalism +phenomenalist +phenomenalists +phenomenality +phenomenology +phenomenon +phenothiazine +phenotype +phenotypes +phenyl +phenylalanine +phenylbutazone +phenylketonuria +pheon +pheons +pheromone +pheromones +phi +phial +phials +philabeg +philabegs +philadelphus +philadelphuses +philanderer +philanderers +philanthropies +philanthropist +philanthropists +philanthropy +philatelist +philatelists +philately +philharmonic +philhellene +philhellenes +philhellenism +philibeg +philibegs +philippic +philippics +philippine +philistine +philistines +philistinism +phillumenist +phillumenists +philodendron +philodendrons +philogyny +philologer +philologers +philologian +philologians +philologist +philologists +philologue +philologues +philology +philomel +philopena +philopenas +philosopher +philosophers +philosophies +philosophiser +philosophisers +philosophism +philosophizer +philosophizers +philosophizing +philosophy +philter +philters +philtre +philtres +phimosis +phiz +phlebitis +phlebotomist +phlebotomists +phlebotomy +phlegm +phloem +phloems +phlogiston +phlogopite +phlox +phloxes +phlyctaena +phlyctena +phobia +phobias +phoca +phocas +phocomelia +phoebe +phoebes +phoenix +phoenixes +pholas +phon +phonasthenia +phonation +phonautograph +phonautographs +phone +phone-in +phone-ins +phoneme +phonemes +phonemicist +phonemicists +phonemics +phonendoscope +phonendoscopes +phoner +phoners +phones +phonetician +phoneticians +phonetics +phonetist +phonetists +phoney +phoneys +phonics +phonies +phoniness +phonogram +phonograms +phonograph +phonographer +phonographers +phonographist +phonographists +phonographs +phonography +phonolite +phonologist +phonologists +phonology +phonometer +phonometers +phonon +phonons +phonophore +phonophores +phonotactics +phonotype +phonotypes +phonotypist +phonotypy +phons +phony +phoresy +phosgene +phosphate +phosphates +phosphatide +phosphaturia +phosphene +phosphenes +phosphide +phosphides +phosphine +phosphines +phosphite +phosphites +phospholipid +phosphonium +phosphoprotein +phosphoproteins +phosphor +phosphorescence +phosphorism +phosphorite +phosphorus +phosphorylase +phosphorylation +phot +photics +photism +photo +photo-offset +photocell +photocells +photochemist +photochemistry +photochromy +photocomposition +photoconductivity +photocopier +photocopiers +photocopies +photocopy +photoelasticity +photoelectron +photoelectrons +photoengraver +photoengravers +photoengraving +photoengravings +photofission +photoflash +photoflashes +photoflood +photofloods +photogen +photogene +photogenes +photogens +photogeology +photogram +photogrammetry +photograms +photograph +photographer +photographers +photographs +photography +photogravure +photogravures +photojournalism +photojournalist +photojournalists +photokinesis +photolithograph +photolithographer +photolithography +photoluminescence +photolysis +photomechanical +photometer +photometers +photometry +photomicrograph +photomicrography +photomontage +photomontages +photomultiplier +photon +photonasty +photons +photoperiod +photoperiodism +photoperiods +photophily +photophobia +photophore +photophores +photopia +photoreceptor +photoreceptors +photos +photosphere +photosynthesis +photosynthesises +phototaxis +phototelegraph +phototelegraphs +phototelegraphy +phototherapeutics +phototherapy +phototropism +phototype +phototypes +phototypesetting +phototypy +photozincography +phots +phrase +phraseogram +phraseograms +phraseograph +phraseographs +phraseologies +phraseologist +phraseology +phrases +phrasing +phrasings +phratries +phratry +phreatophyte +phreatophytes +phrenitis +phrenologist +phrenologists +phrenology +phrensy +phthalein +phthaleins +phthalocyanine +phthiriasis +phthisic +phthisis +phut +phuts +phycocyanin +phycoerythrin +phycologist +phycologists +phycology +phycomycete +phycomycetes +phyla +phylacteries +phylactery +phyle +phyles +phyllaries +phyllary +phyllite +phyllo +phylloclade +phylloclades +phyllode +phyllodes +phyllody +phyllome +phyllomes +phyllopod +phyllopods +phylloquinone +phyllotaxis +phylloxera +phylloxeras +phylogenesis +phylogeny +phylum +physalia +physalias +physalis +physalises +physeter +physic +physical +physicalism +physicality +physician +physicians +physicianship +physicist +physicists +physics +physiocrat +physiocrats +physiognomies +physiognomist +physiognomists +physiognomy +physiography +physiologist +physiologists +physiology +physiotherapist +physiotherapists +physiotherapy +physique +physiques +phytogenesis +phytogeographer +phytogeography +phytographer +phytographers +phytography +phytohormone +phytologist +phytologists +phytology +phyton +phytonadione +phytons +phytopathologist +phytopathology +phytoplankton +phytotoxin +phytotoxins +phytotron +phytotrons +pia +piaffe +piaffes +pianette +pianettes +pianism +pianissimo +pianist +pianists +piano +pianoforte +pianofortes +pianos +pias +piassava +piassavas +piastre +piastres +piazza +piazzas +pibroch +pibrochs +pic +pica +picador +picadors +picaroon +picaroons +picas +picayune +picayunes +piccalilli +piccolo +piccolos +pice +pichiciago +pichiciagos +pick +pick-me-up +pick-me-ups +pick-up +pick-ups +pickaback +pickabacks +pickaninnies +pickaninny +pickax +pickaxe +pickaxes +pickelhaube +pickelhaubes +picker +pickerel +pickerels +pickers +picket +picketer +picketers +pickets +picking +pickings +pickle +pickles +picklock +picklocks +picks +picnic +picnicker +picnickers +picnics +picocurie +picocuries +picornavirus +picornaviruses +picosecond +picoseconds +picot +picotee +picotees +picots +picrate +picrates +picrite +picrites +picrotoxin +pics +pictogram +pictograms +pictograph +pictographs +pictorial +pictorials +picture +picturegoer +picturegoers +pictures +picturesqueness +picturing +picul +piculs +piddle +piddler +piddlers +piddles +piddock +piddocks +pidgin +pidginization +pidgins +pie +pie-dog +pie-dogs +piebald +piebalds +piece +piecer +piecers +pieces +piecrust +piecrusts +piedmontite +pieman +piend +piends +pier +pierce +piercer +piercers +pierces +piercingness +pierid +pierids +pierrot +pierrots +piers +pies +piet +pieties +pietism +piets +piety +piezochemistry +piezoelectricity +piezometer +piezometers +piffle +piffles +pig +pigboat +pigboats +pigeon +pigeonhole +pigeonholes +pigeonholing +pigeons +piggeries +piggery +piggie +piggies +piggin +piggins +piggishness +piggy +piggyback +piggybacks +pigheadedness +piglet +piglets +pigling +piglings +pigmeat +pigment +pigmentation +pigmentations +pigments +pigmies +pigmy +pigpen +pigpens +pigs +pigskin +pigskins +pigsties +pigsty +pigswill +pigswills +pigtail +pigtails +pigwash +pigwashes +pigweed +pigweeds +pika +pikas +pike +pikelet +pikelets +pikeman +piker +pikers +pikes +pikestaff +pikestaffs +pilaf +pilaff +pilaffs +pilafs +pilaster +pilastered +pilasters +pilau +pilaus +pilaw +pilaws +pilch +pilchard +pilchards +pilcher +pilches +pile +pile-driver +pile-drivers +pilea +piles +pileum +pileus +pilewort +pileworts +pilferage +pilferages +pilferer +pilferers +pilgarlic +pilgarlics +pilgrim +pilgrimage +pilgrimages +pilgrims +pili +piling +pilis +pill +pillage +pillager +pillagers +pillages +pillaging +pillar +pillars +pillion +pillions +pilliwinks +pilliwinkses +pillories +pillory +pillow +pillowcase +pillowcases +pillows +pills +pillwort +pillworts +pilocarpine +pilosity +pilot +pilotage +piloting +pilots +pilular +pilule +pilules +pilus +pimento +pimentos +pimiento +pimientos +pimp +pimpernel +pimpernels +pimple +pimples +pimply +pimps +pin +pin-up +pin-ups +pinacoid +pinacoids +pinafore +pinafores +pinaster +pinasters +pinball +pince-nez +pincer +pincers +pinch +pinchbeck +pinchbecks +pinchcock +pinchcocks +pincher +pinchers +pinches +pinchgut +pinchguts +pinchpennies +pinchpenny +pincushion +pincushions +pine +pineapple +pineapples +pineries +pinery +pines +pinetum +pinfish +pinfishes +pinfold +pinfolds +ping +ping-pong +pingo +pingoes +pingos +pings +pinguidity +pinhead +pinheads +pinhole +pinholes +pining +pinion +pinions +pinite +pink +pinkie +pinkies +pinko +pinkoes +pinkos +pinkroot +pinkroots +pinks +pinky +pinna +pinnace +pinnaces +pinnacle +pinnacles +pinnatiped +pinner +pinners +pinnies +pinning +pinnings +pinniped +pinnipedes +pinnipeds +pinnula +pinnulas +pinnule +pinnules +pinny +pinochle +pinochles +pinole +pinoles +pinpoint +pinpoints +pins +pint +pinta +pintado +pintados +pintail +pintails +pintas +pintle +pintles +pinto +pints +pinxit +piolet +piolets +pion +pioneer +pioneers +pions +piousness +pip +pipa +pipage +pipal +pipals +pipas +pipe +pipeclay +pipeful +pipefuls +pipeline +pipelines +piper +piperazine +piperidine +piperine +piperonal +pipers +pipes +pipestone +pipestones +pipette +pipettes +pipework +pipeworks +pipewort +pipeworts +piping +pipings +pipistrelle +pipistrelles +pipit +pipits +pipkin +pipkins +pippin +pippins +pips +pipsqueak +pipsqueaks +pipul +pipuls +piquancy +pique +piques +piquet +piquets +piracies +piracy +piragua +piraguas +piranha +piranhas +pirate +pirates +pirn +pirns +pirog +pirogi +pirogue +pirogues +piroshki +pirouette +pirouettes +pirozhki +piscaries +piscary +piscator +piscators +pisciculture +pisciculturist +pisciculturists +piscina +piscinas +pishogue +pisiform +pisiforms +pismire +pismires +pisolite +pisolites +piss +pisses +pissing +pistachio +pistachios +pistareen +pistareens +piste +pistes +pistil +pistils +pistol +pistole +pistoleer +pistoles +pistols +piston +pistons +pit +pita +pitapat +pitapats +pitas +pitch +pitch-and-toss +pitch-farthing +pitchblende +pitcher +pitcherful +pitcherfuls +pitchers +pitches +pitchfork +pitchforks +pitchiness +pitching +pitchings +pitchman +pitchstone +piteousness +pitfall +pitfalls +pith +pithead +pitheads +pithiness +pithos +pithoses +piths +pitiableness +pitier +pitiers +pities +pitifulness +pitilessness +pitman +piton +pitons +pits +pitsaw +pitsaws +pitta +pittance +pittances +pittas +pitter-patter +pitting +pittings +pituitaries +pituitary +pituri +pituris +pity +pityriasis +pivot +pivoting +pivots +pix +pixel +pixels +pixes +pixie +pixies +pixy +pizza +pizzas +pizzazz +pizzeria +pizzerias +pizzicato +pizzicatos +pizzle +pizzles +placability +placableness +placard +placards +placation +placations +place +placebo +placeboes +placebos +placeman +placement +placements +placenta +placental +placentals +placentas +placentation +placer +placers +places +placet +placets +placidity +placidness +plack +placket +plackets +placks +placoderm +placoderms +plafond +plafonds +plage +plages +plagiaries +plagiariser +plagiarisers +plagiarism +plagiarist +plagiarists +plagiary +plagiocephaly +plagioclase +plagioclases +plagiotropism +plague +plagues +plaice +plaices +plaid +plaids +plain +plainness +plains +plainsman +plainsong +plainsongs +plaint +plaintiff +plaintiffs +plaintiveness +plaints +plaister +plait +plaiting +plaitings +plaits +plan +planarian +planarians +planation +planations +planch +planches +planchet +planchets +planchette +planchettes +plane +planer +planers +planes +planet +planetarium +planetariums +planetary +planetesimal +planetoid +planetoids +planetology +planets +plangency +planigraph +planigraphs +planimeter +planimeters +planimetry +planisphere +planispheres +plank +plank-bed +plank-beds +planking +planks +plankton +planner +planners +planning +planoblast +planoblasts +planogamete +planogametes +planometer +planometers +plans +plant +plantain +plantain-eater +plantain-eaters +plantains +plantation +plantations +planter +planters +plantigrade +plantigrades +planting +plantings +plantocracies +plantocracy +plants +planula +plaque +plaques +plash +plashes +plasm +plasma +plasmapheresis +plasmas +plasmin +plasminogen +plasmodesma +plasmodium +plasmodiums +plasmogamy +plasmolysis +plasmolytic +plasmosome +plasmosomes +plasms +plaster +plasterboard +plasterboards +plasterer +plasterers +plasteriness +plastering +plasterings +plasters +plastic +plasticity +plasticizer +plasticizers +plastics +plastid +plastids +plastique +plastral +plastron +plastrons +plat +platan +platanes +platans +platband +platbands +plate +plateau +plateaus +plateful +platefuls +platelayer +platelayers +platelet +platelets +platemark +platen +platens +plater +platers +plates +platform +platforms +platies +platina +plating +platings +platinotype +platinotypes +platinum +platitude +platitudes +platoon +platoons +plats +platteland +platter +platters +platy +platyhelminth +platyhelminths +platypus +platypuses +platyrrhine +platyrrhines +platys +platysma +platysmas +plaudit +plaudits +plausibility +plausibleness +play +play-off +play-offs +playa +playas +playback +playbacks +playbill +playbills +playbook +playbooks +playboy +playboys +player +players +playfellow +playfellows +playfulness +playgirl +playgirls +playground +playgrounds +playhouse +playhouses +playing +playings +playlet +playlets +playmate +playmates +playroom +playrooms +plays +playschool +playschools +playsuit +playsuits +plaything +playthings +playtime +playtimes +playwright +playwrights +plaza +plazas +plea +pleader +pleaders +pleading +pleadings +pleas +pleasance +pleasances +pleasantness +pleasantries +pleasantry +pleaser +pleasers +pleasing +pleasingness +pleasings +pleasurableness +pleasure +pleasures +pleat +pleater +pleaters +pleating +pleats +pleb +plebeian +plebeianism +plebeianisms +plebeians +plebiscite +plebiscites +plebs +plectron +plectrons +plectrum +plectrums +pledge +pledgee +pledgees +pledger +pledgers +pledges +pledget +pledgets +pledgor +pledgors +pleiomery +pleiotropism +plenary +plenipotentiaries +plenipotentiary +plenitude +plenitudes +plenteousness +plentifulness +plentitude +plentitudes +plenty +plenum +plenums +pleochroism +pleomorphism +pleon +pleonasm +pleonasms +pleonaste +pleonastes +pleons +pleopod +pleopods +plesiosaur +plesiosaurs +plessor +plessors +plethora +plethoras +plethysmograph +plethysmographs +pleura +pleurisy +pleurodont +pleurodynia +pleuron +pleurotomies +pleurotomy +plexiglass +pleximeter +pleximeters +pleximetry +plexor +plexors +plexus +plexuses +pliability +pliableness +pliancy +pliantness +plica +plication +plications +plier +pliers +plies +plight +plights +plimsoll +plimsolls +plink +plinks +plinth +plinths +plod +plodder +plodders +plodding +ploddings +plodge +plodges +plods +plonk +plonks +plop +plops +plosion +plosions +plosive +plosives +plot +plots +plotter +plotters +plough +ploughboy +ploughboys +plougher +ploughers +ploughing +ploughings +ploughman +ploughs +ploughshare +ploughshares +ploughwright +ploughwrights +plover +plovers +plow +plowboy +plowboys +plower +plowers +plowman +plows +plowshare +plowshares +ploy +ploys +pluck +plucker +pluckers +pluckiness +plucks +plug +plug-uglies +plug-ugly +plugger +pluggers +plughole +plugholes +plugs +plum +plumage +plumages +plumb +plumbago +plumbagos +plumber +plumberies +plumbers +plumbery +plumbing +plumbism +plumbs +plumbum +plumcot +plumcots +plume +plumes +plummet +plummets +plump +plumper +plumpers +plumpness +plumps +plums +plumule +plumules +plunder +plunderage +plunderer +plunderers +plundering +plunders +plunge +plunger +plungers +plunges +plunk +plunker +plunkers +plunks +pluperfect +pluperfects +plural +pluralisation +pluralisations +pluralism +pluralisms +pluralist +pluralists +pluralities +plurality +pluralization +pluralizations +plurals +pluripresence +plus +pluses +plush +plushes +plushness +pluteus +pluteuses +plutocracies +plutocracy +plutocrat +plutocrats +pluton +plutonium +plutons +pluvial +pluvials +pluviometer +pluviometers +pluviose +ply +plywood +plywoods +pneuma +pneumas +pneumatic +pneumaticity +pneumatics +pneumatologist +pneumatologists +pneumatology +pneumatolysis +pneumatometer +pneumatometers +pneumatophore +pneumatophores +pneumococcus +pneumoconiosis +pneumodynamics +pneumogastric +pneumonectomies +pneumonectomy +pneumonia +pneumonitis +pneumonoultramicroscopicsilicovolcanoconiosis +pneumothorax +poa +poacher +poachers +poachiness +poaching +poachings +poas +pochard +pochards +pochette +pochettes +pock +pocket +pocket-handkerchief +pocket-handkerchiefs +pocketful +pocketfuls +pocketing +pockets +pockmark +pockmarks +pocks +pococurante +pococuranteism +pococurantism +pod +podagra +poddy +podginess +podiatrist +podiatrists +podiatry +podite +podites +podium +podiums +podocarp +podophyllin +pods +podsol +podsols +podzol +podzols +poem +poems +poenology +poesies +poesy +poet +poetaster +poetastering +poetasters +poetastery +poetastry +poetess +poetesses +poetics +poetries +poetry +poets +pogge +pogges +pogies +pogrom +pogroms +pogy +pohutukawa +poi +poignancies +poignancy +poikilothermy +poilu +poinciana +poincianas +poinsettia +poinsettias +point +point-to-point +point-to-points +pointe +pointedness +pointel +pointels +pointer +pointers +pointillism +pointillist +pointillists +pointing +pointings +pointlessness +points +pointsman +pois +poise +poiser +poisers +poises +poison +poisoner +poisoners +poisoning +poisons +poke +pokeberries +pokeberry +poker +pokers +pokes +pokeweed +pokeweeds +pokey +pokeys +pokies +pokiness +poking +poky +polacca +polaccas +polacre +polacres +polarimeter +polarimeters +polarisation +polarisations +polariscope +polariscopes +polariser +polarisers +polarities +polarity +polarization +polarizations +polarography +polder +polders +pole +pole-vaulter +pole-vaulters +polecat +polecats +polemarch +polemarchs +polemic +polemics +polemist +polemists +polemonium +polemoniums +polenta +polentas +poler +polers +poles +polestar +polestars +poleyn +poleyns +polianite +police +policeman +polices +policewoman +policies +policy +polio +poliomyelitis +polios +polish +polisher +polishers +polishes +polishing +polishings +politeness +politesse +politician +politicians +politicking +politico +politicoes +politicos +politics +polities +polity +polje +poljes +polk +polka +polkas +polks +poll +pollack +pollacks +pollan +pollans +pollard +pollards +pollen +pollenosis +pollens +pollex +pollicitation +pollicitations +pollination +pollinations +pollinator +pollinators +pollinium +polliwog +polliwogs +pollock +pollocks +polls +pollster +pollsters +pollutant +pollutants +pollutedness +polluter +polluters +pollution +pollutions +pollywog +pollywogs +polo +polo-neck +poloist +poloists +polonaise +polonaises +polonies +polonium +polony +polos +poltergeist +poltergeists +poltroon +poltroonery +poltroons +poly +polyacid +polyamide +polyamides +polyandry +polyanthus +polyanthuses +polyarchies +polyarchy +polychaete +polychaetes +polychrome +polychromes +polychromy +polyclinic +polyclinics +polycrystal +polycrystals +polycyclic +polydactyl +polydactylism +polydactyls +polydaemonism +polydipsia +polyembryony +polyester +polyesters +polyethylene +polygala +polygalas +polygamist +polygamists +polygamy +polygene +polygenes +polygenesis +polygenetic +polygenist +polygenists +polyglot +polyglots +polygon +polygonatum +polygonatums +polygons +polygonum +polygonums +polygraph +polygraphs +polygyny +polyhedron +polyhedrons +polyhistor +polyhistories +polyhistors +polyhistory +polyisoprene +polymath +polymaths +polymer +polymerase +polymerases +polymerisation +polymerisations +polymerism +polymerization +polymerizations +polymers +polymorph +polymorphism +polymorphs +polymyositis +polyneuritis +polynomial +polynomials +polynucleotide +polynya +polyoma +polyp +polyparies +polypary +polypeptide +polypeptides +polyphagia +polyphone +polyphones +polyphonies +polyphony +polypidom +polypidoms +polyploid +polyploidy +polypod +polypodies +polypods +polypody +polypropylene +polyprotodont +polyprotodonts +polyps +polyptych +polyptychs +polypus +polyrhythm +polyrhythms +polys +polysaccharide +polysaccharides +polysemy +polystyrene +polystyrenes +polysyllable +polysyllables +polysyllogism +polysyllogisms +polysyndeton +polysyndetons +polytechnic +polytechnics +polytetrafluoroethylene +polytheism +polytheist +polytheists +polythene +polythenes +polytonality +polyurethane +polyuria +polyvinyl +polyvinyls +polyzoan +polyzoans +polyzoarium +polyzoariums +pom +pomace +pomaces +pomade +pomades +pomander +pomanders +pomatum +pomatums +pombe +pombes +pome +pomegranate +pomegranates +pomelo +pomelos +pomes +pomfret +pomfrets +pomiculture +pommel +pommels +pommies +pommy +pomologist +pomologists +pomology +pomp +pompadour +pompadours +pompano +pompanos +pompey +pompeys +pompom +pompoms +pompon +pompons +pomposities +pomposity +pompousness +pomps +poms +ponce +ponceau +ponceaus +ponces +poncho +ponchos +pond +ponderable +ponderables +ponderer +ponderers +ponderosity +ponderousness +pondokkie +pondokkies +ponds +pondweed +pondweeds +pone +pones +pong +pongee +pongid +pongids +pongo +pongoes +pongos +pongs +poniard +poniards +ponies +pons +pont +pontage +pontages +pontes +pontianak +pontianaks +pontic +ponticello +ponticellos +pontifex +pontiff +pontiffs +pontifical +pontificals +pontificate +pontificates +pontil +pontils +pontlevis +pontlevises +pontonier +pontoniers +pontoon +pontoons +ponts +pony +pony-trekking +ponytail +ponytails +pooch +pooches +pood +poodle +poodles +poods +poof +poofs +pooftah +pooftahs +pooka +pookas +pool +poolroom +poolrooms +pools +poon +poonce +poonces +poons +poop +poops +poorhouse +poorhouses +poorness +poort +poortith +poorts +poorwill +poorwills +poove +pooves +pop +pop-shop +popcorn +popcorns +pope +popedom +popedoms +popery +popes +popinjay +popinjays +poplar +poplars +poplin +poplins +popover +popovers +poppa +popper +poppers +poppet +poppets +poppies +popping +poppy +poppycock +pops +popsies +popsy +populace +popularisation +popularisations +populariser +popularisers +popularities +popularity +popularization +popularizations +popularizer +popularizers +populating +population +populations +populism +populist +populists +populousness +porbeagle +porbeagles +porcelain +porcelains +porch +porches +porcupine +porcupines +pore +pores +porgies +porgy +poriferan +porism +porisms +pork +porker +porkers +porn +porno +pornocracy +pornographer +pornographers +pornography +pornos +porns +poromeric +porosities +porosity +porousness +porphyria +porphyries +porphyrin +porphyrio +porphyrios +porphyry +porpoise +porpoises +porrection +porrections +porridge +porridges +porringer +porringers +port +portability +portable +portables +portage +portages +portal +portals +portamento +portance +portcullis +portcullises +portent +portentousness +portents +porter +porterage +porterages +porteress +porteresses +porterhouse +porterhouses +porters +portfolio +portfolios +porthole +portholes +portico +porticoes +porticos +portion +portioner +portioners +portions +portland +portliness +portmanteau +portmanteaus +portolano +portolanos +portrait +portraitist +portraitists +portraits +portraiture +portraitures +portrayal +portrayals +portrayer +portrayers +portraying +portress +portresses +ports +portulaca +portulacas +pos +posada +posadas +pose +poser +posers +poses +poseur +poseurs +poseuse +poseuses +posies +posing +posings +posit +positif +position +positioning +positions +positive +positiveness +positives +positivism +positivist +positivists +positivities +positivity +positron +positronium +positrons +posits +posology +poss +posse +posses +possession +possessions +possessive +possessiveness +possessives +possessor +possessors +possessorship +posset +possets +possibilities +possibility +possible +possibles +possie +possies +possum +possums +post +post-Reformation +post-bag +post-bags +post-mortem +post-mortems +post-obit +postage +postages +postboy +postboys +postcard +postcards +postcava +poster +posterior +posteriority +posteriors +posterities +posterity +postern +posterns +posters +postfix +postfixes +postiche +postiches +postie +posties +postil +postilion +postilions +postillion +postillions +postils +posting +postings +postliminy +postlude +postludes +postman +postmark +postmarks +postmaster +postmasters +postmastership +postmasterships +postmillennialist +postmillennialists +postmistress +postmistresses +postponement +postponements +postponer +postponers +postposition +postpositions +postpositive +postrider +posts +postscript +postscripts +postulant +postulants +postulate +postulates +postulation +postulations +postulator +posture +posturer +posturers +postures +posturing +posy +pot +pot-au-feu +pot-walloper +potability +potable +potables +potage +potages +potamogeton +potamogetons +potamology +potash +potashes +potass +potassa +potassium +potation +potations +potato +potatoes +potch +potches +poteen +poteens +potence +potences +potencies +potency +potentate +potentates +potential +potentialities +potentiality +potentials +potentiation +potentiometer +potentiometers +potes +potful +potfuls +pothead +potheads +pothecaries +pothecary +potheen +potheens +pother +potherb +potherbs +pothers +pothole +potholer +potholers +potholes +potholing +pothook +pothooks +pothouse +pothouses +potiche +potiches +potion +potions +potlatch +potlatches +potman +potometer +potometers +potoo +potoos +potoroo +potoroos +potpie +potpies +pots +potsherd +potsherds +potstone +pott +pottage +pottages +potter +potterer +potterers +potteries +potters +pottery +potties +pottle +pottles +potto +pottos +potts +potty +potty-chair +potty-chairs +pouch +pouches +pouf +pouffe +pouffes +poufs +poulard +poulards +poult +poulterer +poulterers +poultice +poultices +poultry +poults +pounce +pounces +pound +poundage +poundages +poundal +poundals +pounder +pounders +pounding +pounds +pour +pourboire +pourboires +pourer +pourers +pouring +pourings +pourparler +pourparlers +pourpoint +pourpoints +pours +poussette +poussettes +poussin +poussins +pout +pouter +pouters +pouts +poverty +pow +powan +powans +powder +powders +power +powerboat +powerboats +powerfulness +powerlessness +powers +pows +powwow +powwows +pox +poxes +poxvirus +pozzies +pozzuolana +pozzy +praam +praams +practicability +practicableness +practicalities +practicality +practicalness +practice +practices +practician +practicians +practicum +practitioner +practitioners +prad +prads +praefect +praefects +praemunire +praemunires +praenomen +praenomens +praepostor +praepostors +praesidium +praesidiums +praetor +praetorian +praetorians +praetorium +praetoriums +praetors +praetorship +praetorships +pragmaticality +pragmaticalness +pragmatics +pragmatism +pragmatist +pragmatists +prahu +prahus +prairial +prairie +prairies +praise +praises +praiseworthiness +praline +pralines +pram +prams +prana +prance +prancer +prancers +prances +prang +prangs +prank +pranks +prankster +pranksters +prase +praseodymium +prat +prate +prater +praters +prates +pratfall +pratfalls +pratincole +pratincoles +pratique +pratiques +prats +prattle +prattler +prattlers +prattles +prau +praus +prawn +prawns +praxis +prayer +prayerfulness +prayerlessness +prayers +pre-Reformation +pre-eclampsia +pre-emption +pre-emptor +pre-existence +pre-ignition +preacher +preachers +preaching +preachings +preachment +preachments +preacquaintance +preadaptation +preadaptations +preadmonition +preadmonitions +preamble +preambles +preamplifier +preamplifiers +prearrangement +prearrangements +preassurance +preassurances +prebend +prebendaries +prebendary +prebends +precariousness +precaution +precautions +precava +precedence +precedences +precedencies +precedency +precedent +precedents +precentor +precentors +precentorship +precentorships +precept +preceptor +preceptors +preceptory +precepts +precession +precessions +precinct +precincts +preciosities +preciosity +preciousness +precipice +precipices +precipitance +precipitances +precipitancies +precipitancy +precipitant +precipitants +precipitate +precipitates +precipitation +precipitations +precipitator +precipitators +precipitin +precipitousness +preciseness +precisian +precisianism +precisians +precision +precisions +preclusion +preclusions +precocial +precociousness +precocities +precocity +precognition +precognitions +preconception +preconceptions +preconcertedness +precondition +preconditions +preconise +preconises +preconization +preconizations +preconscious +preconstruction +precontract +precontracts +precursor +precursors +predation +predations +predator +predators +predecease +predeceases +predecessor +predecessors +predefinition +predefinitions +predella +predellas +predestinarian +predestinarianism +predestinarians +predestination +predetermination +predeterminer +predeterminers +predevelopment +predevelopments +predicability +predicable +predicament +predicaments +predicant +predicants +predicate +predicates +predication +predications +predictability +prediction +predictions +predictor +predictors +predigestion +predikant +predikants +predilection +predilections +predisposition +predispositions +prednisone +predominance +predominances +predomination +predominations +preemie +preemies +preen +preens +prefab +prefabrication +prefabricator +prefabricators +prefabs +preface +prefaces +prefect +prefects +prefecture +prefectures +preferability +preference +preferences +preferentialist +preferment +preferments +preferrer +preferrers +prefiguration +prefigurations +prefigurement +prefigurements +prefix +prefixes +prefixion +prefixions +preflight +preform +preformation +preformations +preforms +pregnancies +pregnancy +prehension +prehensions +prehistorian +prehistorians +prehistory +prehnite +prejudgement +prejudgements +prejudgment +prejudgments +prejudice +prejudices +prelacies +prelacy +prelate +prelates +prelateship +prelateships +prelatism +prelatist +prelatists +prelature +prelatures +prelection +prelections +prelibation +prelibations +prelim +preliminaries +preliminary +prelims +prelude +preludes +prematureness +prematurities +prematurity +premaxilla +premed +premedication +premedications +premeditation +premeditations +premeds +premie +premier +premiere +premieres +premiers +premiership +premierships +premies +premillenarian +premillenarianism +premillenarians +premillennialism +premillennialist +premise +premises +premiss +premisses +premium +premiums +premix +premixes +premolar +premolars +premonition +premonitions +prenatal +prenegotiation +prenotion +prenotions +prentice +prentices +preoccupancies +preoccupancy +preoccupant +preoccupants +preoccupation +preoccupations +preoption +preoptions +preoral +preorder +preorders +preordinance +preordinances +preordination +preordinations +prep +preparation +preparations +preparative +preparator +preparators +preparedness +prepayment +prepayments +prepollex +prepollexes +preponderance +preponderances +preposition +prepositions +prepositive +prepositor +prepositors +prepossession +prepossessions +preposterousness +prepostor +prepostors +prepotency +preps +prepuce +prepuces +prerelease +prereleases +prerequisite +prerequisites +prerogative +prerogatives +presa +presage +presager +presagers +presages +presanctification +presbycusis +presbyope +presbyopes +presbyopia +presbyter +presbyterate +presbyterates +presbyteries +presbyters +presbytery +presbytes +preschool +prescience +prescriber +prescribers +prescript +prescription +prescriptions +prescriptiveness +prescriptivism +prescripts +preselection +preselections +preselector +preselectors +presence +presences +present +present-day +presentability +presentableness +presentation +presentationism +presentationist +presentations +presentee +presentees +presenter +presenters +presentiment +presentiments +presentiveness +presentment +presentments +presentness +presents +preservability +preservation +preservations +preservative +preservatives +preserve +preserver +preservers +preserves +preserving +presidencies +presidency +president +presidents +presidentship +presidentships +presidio +presidios +presidium +presidiums +press +press-up +press-ups +presser +pressers +presses +pressie +pressies +pressing +pressings +pressman +pressmark +pressmarks +pressure +pressures +pressurization +prest +prestidigitation +prestidigitator +prestidigitators +prestige +prestiges +prestissimo +prestissimos +presto +prestos +presumer +presumers +presumption +presumptions +presumptuousness +presupposition +presuppositions +presurmise +pretence +pretences +pretender +pretenders +pretending +pretense +pretenses +pretension +pretensions +pretentiousness +preterist +preterists +preterit +preterite +preteriteness +preterites +preterition +preteritions +preterits +pretermission +pretermissions +preternaturalism +preternaturalness +pretext +pretexts +pretor +pretors +pretties +prettification +prettifications +prettiness +pretty +pretzel +pretzels +prevalence +prevalences +prevarication +prevarications +prevaricator +prevaricators +preventative +preventatives +preventer +preventers +prevention +preventions +preventive +preventiveness +preventives +preview +previews +prevision +previsions +prevue +prevues +prewash +prewashes +prexies +prexy +prey +preying +preys +priapism +price +price-fixing +pricelessness +pricer +pricers +prices +pricing +prick +pricker +prickers +pricket +pricking +prickings +prickle +prickles +prickling +pricklings +pricks +pride +pridefulness +prides +prie-dieu +prier +priers +pries +priest +priestcraft +priestess +priestesses +priesthood +priesthoods +priestliness +priests +prig +priggery +priggish +priggishness +prigs +prill +prills +prima +primacies +primacy +primage +primages +primaries +primariness +primary +primatal +primate +primates +primateship +primateships +primatologist +primatologists +primatology +prime +primely +primeness +primer +primero +primers +primes +primigravida +primigravidas +primine +primines +priming +primings +primipara +primiparas +primitive +primitiveness +primitives +primitivism +primitivist +primitivists +primness +primo +primogenitor +primogenitors +primogeniture +primogenitures +primogenitureship +primordial +primordiality +primordials +primordium +primordiums +primos +primping +primrose +primroses +primula +primulas +primus +primuses +prince +prince's-feather +princedom +princedoms +princekin +princekins +princeliness +princeling +princelings +princes +princess +princesses +principal +principalities +principality +principals +principalship +principalships +principate +principates +principium +principle +principles +print +print-out +print-outs +printer +printeries +printers +printery +printing +printings +printmaker +printmakers +prints +prion +prions +prior +priorate +priorates +prioress +prioresses +priories +priorities +priority +priors +priorship +priorships +priory +prisage +prisages +prise +prises +prism +prismoid +prismoids +prisms +prison +prison-breaking +prison-breakings +prisoner +prisoners +prisons +prissiness +prittle-prattle +privacies +privacy +private +privateer +privateers +privateersman +privateness +privates +privation +privations +privet +privets +privies +privilege +privileges +privities +privity +privy +prize +prizes +pro +pro-oestrus +proa +proas +prob +probabilism +probabilities +probability +probable +probables +proband +probands +probang +probangs +probate +probates +probation +probationer +probationers +probationership +probations +probe +prober +probers +probes +probing +probity +problem +problems +proboscidean +proboscideans +proboscidian +proboscidians +proboscis +proboscises +probs +procaine +procaryote +procaryotes +procathedral +procathedrals +procedure +procedures +proceeder +proceeders +proceeding +proceedings +proceeds +proceleusmatic +process +process-server +process-servers +processes +processing +procession +processional +processionals +processions +processor +processors +prochronism +prochronisms +proclaimer +proclaimers +proclamation +proclamations +proclitic +proclitics +proclivities +proclivity +proconsul +proconsulate +proconsulates +proconsuls +proconsulship +proconsulships +procrastination +procrastinativeness +procrastinator +procrastinators +procreant +procreants +procreation +procreativeness +procreator +procreators +proctitis +proctodaeum +proctodaeums +proctologist +proctologists +proctology +proctor +proctors +proctorship +proctorships +proctoscope +proctoscopes +proctoscopy +procuracies +procuracy +procuration +procurations +procurator +procurators +procuratorship +procuratorships +procuratory +procurement +procurements +procurer +procurers +procuress +procuresses +prod +prodder +prodders +prodding +prodigal +prodigality +prodigals +prodigies +prodigiousness +prodigy +prodrome +prodromes +prods +produce +producer +producers +produces +product +production +productions +productiveness +productivities +productivity +products +proem +proems +proenzyme +proenzymes +prof +profanation +profanations +profaneness +profanities +profanity +professing +profession +professional +professionalisation +professionalism +professionalization +professionals +professions +professor +professorate +professorates +professoriate +professoriates +professors +professorship +professorships +proffer +profferer +profferers +proffers +proficiencies +proficiency +proficient +proficients +profile +profiler +profilers +profiles +profit +profit-sharing +profitability +profitableness +profiteer +profiteers +profiterole +profiteroles +profits +profligacies +profligacy +profligate +profligates +profound +profoundness +profounds +profs +profundities +profundity +profuseness +profusion +profusions +prog +progenies +progenitor +progenitors +progeny +progesterone +progestin +proglottis +prognosis +prognostic +prognostication +prognostications +prognosticator +prognosticators +prognostics +program +programme +programmer +programmers +programmes +programming +programs +progress +progresses +progression +progressionism +progressionist +progressionists +progressions +progressism +progressist +progressists +progressive +progressiveness +progressives +progressivism +progressivist +progressivists +progs +prohibiter +prohibiters +prohibition +prohibitionist +prohibitionists +prohibitions +prohibitiveness +prohibitor +prohibitors +project +projectile +projectiles +projection +projectionist +projectionists +projections +projectivities +projectivity +projector +projectors +projects +prokaryote +prokaryotes +prolactin +prolamin +prolamine +prolapse +prolapses +prolapsus +prolapsuses +prolateness +prolation +prolations +prole +proleg +prolegomenon +prolegs +prolepsis +proles +proletarian +proletarianization +proletarians +proletariat +proletariats +proletaries +proletary +prolicide +prolicides +proliferation +proliferations +prolificacy +proline +prolixities +prolixity +prolixness +prolocutor +prolocutors +prolocutorship +prolocutorships +prolog +prologs +prologue +prologues +prolongation +prolongations +prolonge +prolonger +prolongers +prolonges +prolusion +prolusions +prom +promenade +promenader +promenaders +promenades +promethazine +promethium +prominence +prominences +promiscuity +promise +promisee +promisees +promiser +promisers +promises +promisor +promisors +promontories +promontory +promoter +promoters +promotion +promotions +prompt +prompter +prompters +prompting +promptings +promptitude +promptness +prompts +proms +promulgation +promulgations +promulgator +promulgators +promycelium +promyceliums +pronaos +pronation +pronations +pronator +pronators +proneness +pronephros +pronephroses +prong +prongbuck +prongbucks +pronghorn +pronghorns +prongs +pronotum +pronoun +pronouncement +pronouncements +pronouncer +pronouncers +pronouns +pronucleus +pronunciamento +pronunciamentoes +pronunciamentos +pronunciation +pronunciations +proof +proofing +proofings +proofs +prop +propaedeutic +propaganda +propagandism +propagandist +propagandists +propagation +propagations +propagator +propagators +propagule +propagules +propagulum +propagulums +propane +propanol +proparoxytone +propellant +propellants +propellent +propellents +propeller +propellers +propene +propensities +propensity +proper +properness +propers +properties +property +prophage +prophages +prophase +prophases +prophecies +prophecy +prophesier +prophesiers +prophet +prophetess +prophetesses +prophets +prophylactic +prophylactics +prophylaxis +propine +propines +propinquities +propinquity +propionate +propionates +propitiation +propitiations +propitiatory +propitiousness +propolis +proponent +proponents +proportion +proportionableness +proportional +proportionality +proportionateness +proportionment +proportions +proposal +proposals +proposer +proposers +proposition +propositions +propraetor +propraetors +propranolol +proprietaries +proprietary +proprieties +proprietor +proprietors +proprietorship +proprietorships +proprietress +proprietresses +propriety +proprioceptor +proprioceptors +props +proptosis +propulsion +propyl +propylaea +propylaeum +propylene +propylite +propylites +proration +prorations +prorogation +prorogations +pros +prosaicness +prosaism +proscenium +prosceniums +prosciutto +prosciuttos +proscriber +proscribers +proscription +proscriptions +prose +prosector +prosectors +prosecution +prosecutions +prosecutor +prosecutors +proselyte +proselytes +proselytiser +proselytisers +proselytism +prosencephalon +prosencephalons +prosenchyma +prosenchymas +proser +prosers +proses +prosimian +prosimians +prosiness +prosodist +prosodists +prosody +prosopopoeia +prospect +prospectiveness +prospector +prospectors +prospects +prospectus +prospectuses +prosperities +prosperity +prosperousness +prostaglandin +prostaglandins +prostate +prostatectomies +prostatectomy +prostates +prostatitis +prosthesis +prosthetics +prosthetist +prosthetists +prosthodontics +prosthodontist +prosthodontists +prostitute +prostitutes +prostitution +prostitutor +prostitutors +prostomium +prostomiums +prostration +prostrations +prostyle +prostyles +protactinium +protagonist +protagonists +protamine +protamines +protandry +protanomaly +protanope +protanopes +protanopia +protasis +protea +proteaceae +proteas +protease +proteases +protecting +protection +protectionism +protectionist +protectionists +protections +protective +protectiveness +protectives +protector +protectorate +protectorates +protectories +protectors +protectorship +protectorships +protectory +protein +proteins +proteolysis +proteose +proteoses +proterandry +proterogyny +proterozoic +protest +protestant +protestants +protestation +protestations +protester +protesters +protests +proteus +proteuses +prothalamion +prothalamium +prothallus +prothesis +prothonotaries +prothonotary +prothorax +prothoraxes +prothrombin +protist +protistology +protists +protium +protoactinium +protoavis +protochordate +protocol +protocols +protogine +protogyny +protohuman +protohumans +protolanguage +protolanguages +protomartyr +protomartyrs +proton +protonema +protonemas +protonotaries +protonotary +protons +protopathy +protoplasm +protoplast +protoplasts +protostar +protostars +protostele +protosteles +prototherian +prototype +prototypes +protoxide +protoxides +protoxylem +protoxylems +protozoa +protozoan +protozoans +protozoologist +protozoologists +protozoology +protozoon +protraction +protractions +protractor +protractors +protrusion +protrusions +protuberance +protuberances +protyle +proudness +proustite +provability +provenance +provenances +provender +provenders +provenience +proveniences +proventriculus +proventriculuses +prover +proverb +proverbs +provers +providence +providences +provider +providers +providing +province +provinces +provincial +provincialism +provincialisms +provinciality +provincials +proving +provision +provisional +provisions +proviso +provisoes +provisos +provitamin +provitamins +provocation +provocations +provocativeness +provoker +provokers +provolone +provolones +provost +provosts +provostship +provostships +prow +prowess +prowl +prowler +prowlers +prowls +prows +proxemics +proxies +proximation +proximations +proximities +proximity +proxy +prude +prudence +pruderies +prudery +prudes +prudishness +prune +prunella +prunellas +prunelle +prunelles +pruner +pruners +prunes +pruning +prunings +prunt +prunts +prunus +prurience +pruriency +prurigo +prurigos +pruritus +prussiate +prussiates +pry +pryer +pryers +prying +pryings +prys +prytaneum +prythee +prythees +psalm +psalmist +psalmists +psalmodies +psalmodist +psalmodists +psalmody +psalms +psalteries +psalterium +psaltery +psammite +psammites +pschent +psellism +psellisms +psephite +psephites +psephologist +psephologists +psephology +pseud +pseudaxis +pseudepigrapha +pseudo +pseudocarp +pseudocarps +pseudoclassicism +pseudocyesis +pseudoephedrine +pseudohermaphroditism +pseudomonad +pseudomonades +pseudomonads +pseudomonas +pseudomorph +pseudomorphism +pseudomorphs +pseudonym +pseudonymity +pseudonyms +pseudopod +pseudopodium +pseudopods +pseudos +pseudoscope +pseudoscopes +pseudoscorpion +pseuds +psi +psilanthropist +psilanthropists +psilocin +psilocybin +psilomelane +psis +psittacosis +psoas +psoases +psocid +psocids +psoriasis +pst +psts +psychasthenia +psyche +psychedelia +psyches +psychiatrist +psychiatrists +psychiatry +psychic +psychics +psycho +psychoanalysis +psychoanalyst +psychoanalysts +psychobabble +psychobiologist +psychobiologists +psychobiology +psychochemical +psychodrama +psychodramas +psychodynamics +psychogenesis +psychohistories +psychohistory +psychokinesis +psycholinguistics +psychologies +psychologism +psychologist +psychologists +psychology +psychometrician +psychometrics +psychometrist +psychometrists +psychometry +psychoneurosis +psychoneurotic +psychonomics +psychopath +psychopathist +psychopathists +psychopathologist +psychopathology +psychopaths +psychopathy +psychopharmacology +psychophysics +psychophysiology +psychopomp +psychopomps +psychoprophylaxis +psychos +psychosis +psychosomatics +psychosurgery +psychotechnics +psychotherapeutics +psychotherapist +psychotherapy +psychotic +psychotics +psychrometer +psychrometers +psychrometry +psylla +psyllas +psyllid +psyllids +ptarmigan +ptarmigans +pteranodon +pteranodons +pteridologist +pteridologists +pteridology +pteridophyte +pteridophytes +pteridosperm +pteridosperms +pterodactyl +pterodactyls +pteropod +pteropods +pterosaur +pterosaurs +pterygium +pterygoid +pterygoids +pteryla +pterylography +pterylosis +ptilosis +ptisan +ptisans +ptochocracy +ptomaine +ptomaines +ptosis +ptyalin +ptyalism +pub +pub-crawl +pub-crawls +puberty +pubes +pubescence +pubescences +pubis +pubises +public +publican +publicans +publication +publications +publicist +publicists +publicity +publicizing +publicness +publics +publisher +publishers +publishing +publishment +pubs +puccoon +puccoons +puce +puck +pucker +puckers +pucks +pud +pudding +puddings +puddle +puddler +puddlers +puddles +puddling +puddlings +puddock +puddocks +pudency +pudendum +pudginess +puds +pueblo +pueblos +puerilism +puerility +puerperium +puerperiums +puff +puff-puff +puffball +puffballs +puffer +pufferies +puffers +puffery +puffin +puffiness +puffing +puffings +puffins +puffs +pug +pug-dog +pug-dogs +puggaree +puggarees +pugging +puggings +puggree +puggrees +pugilism +pugilist +pugilists +pugnaciousness +pugnacity +pugs +puissance +puissances +puja +pujas +puke +pukes +puking +puku +pula +pulchritude +pulchritudes +pulchritudinous +puler +pulers +pulka +pulkas +pull +pull-in +pull-ins +pull-off +pull-out +pull-outs +pull-through +pull-up +pull-ups +pullet +pullets +pulley +pulleys +pulling +pullover +pullovers +pulls +pullulation +pullulations +pulmonate +pulmonates +pulmonic +pulmonics +pulp +pulpboard +pulpit +pulpiteer +pulpiteers +pulpits +pulpitum +pulpitums +pulps +pulpwood +pulpwoods +pulque +pulques +pulsar +pulsars +pulsation +pulsations +pulsator +pulsators +pulse +pulsejet +pulsejets +pulses +pulsimeter +pulsimeters +pulsing +pulsojet +pulsojets +pulsometer +pulsometers +pulu +pulverisation +pulverisations +pulveriser +pulverisers +pulverization +pulverizations +pulverizer +pulverizers +pulverulence +pulvillus +pulvinus +puma +pumas +pumice +pumices +pump +pumpernickel +pumpernickels +pumping +pumpkin +pumpkins +pumps +pun +puna +punas +punce +punces +punch +punch-up +punch-ups +puncheon +puncheons +puncher +punchers +punches +punctation +punctations +punctilio +punctilios +punctiliousness +punctualities +punctuality +punctuation +punctuations +punctuator +punctuators +puncture +punctures +puncturing +pundit +pundits +pungency +puniness +punisher +punishers +punishment +punishments +punk +punka +punkah +punkahs +punkas +punks +punner +punners +punnet +punnets +punning +punnings +puns +punster +punsters +punt +punter +punters +punties +punting +punts +punty +pup +pupa +puparium +pupas +pupil +pupillage +pupillages +pupils +puppet +puppeteer +puppeteers +puppetry +puppets +puppies +puppy +puppydom +puppyhood +pups +purblindness +purchase +purchaser +purchasers +purchases +purchasing +purdah +purdahs +puree +purees +pureness +purenesses +purfle +purfles +purgation +purgations +purgative +purgatives +purgatories +purgatory +purge +purger +purgers +purges +purging +purgings +purification +purifications +purificator +purificators +purifier +purifiers +purim +purims +purine +purism +purist +purists +puritan +puritanism +puritans +purity +purl +purler +purlers +purlieu +purlieus +purlin +purlines +purlins +purloiner +purloiners +purls +purple +purples +purport +purports +purpose +purposefulness +purposelessness +purposes +purposiveness +purpresture +purprestures +purpure +purpures +purpurin +purr +purrs +purse +purser +pursers +purses +pursiness +purslane +purslanes +pursuance +pursuances +pursued +pursuer +pursuers +pursuit +pursuits +pursuivant +pursuivants +purtenance +purulence +purulency +purveyance +purveyances +purveyor +purveyors +purview +purviews +pus +push +push-bike +push-bikes +push-pull +push-start +push-starts +push-up +push-ups +pusher +pushers +pushes +pushiness +pushing +pushrod +pushrods +pusillanimity +puss +pusses +pussies +pussy +pussyfoot +pussyfoots +pustulant +pustulants +pustulation +pustulations +pustule +pustules +put +put-and-take +put-down +put-downs +put-on +put-ons +put-put +put-puts +putamen +putlog +putlogs +putout +putrefaction +putrescence +putrescences +putrescible +putrescine +putridity +putridness +puts +putsch +putsches +putt +puttee +puttees +putter +putterer +putterers +putters +puttie +puttier +puttiers +putties +putting +puttings +putto +putts +putty +puttying +puzzle +puzzlement +puzzler +puzzlers +puzzles +puzzolana +pya +pyaemia +pycnidium +pycnidiums +pycnodysostosis +pycnogonid +pycnogonids +pycnometer +pycnometers +pycnosis +pye +pye-dog +pye-dogs +pyelitis +pyelography +pyelonephritis +pyemia +pyes +pygidium +pygidiums +pygmies +pygmy +pyjama +pyjamas +pylon +pylons +pylorus +pyloruses +pyogenesis +pyorrhoea +pyracanth +pyracantha +pyracanthas +pyracanths +pyralid +pyralis +pyramid +pyramides +pyramidion +pyramidions +pyramids +pyrargyrite +pyre +pyrene +pyrenes +pyrenocarp +pyrenocarps +pyrenoid +pyrenoids +pyres +pyrethrin +pyrethrum +pyrethrums +pyretology +pyretotherapy +pyrexia +pyrheliometer +pyrheliometers +pyridine +pyridoxine +pyrimidine +pyrimidines +pyrite +pyrites +pyritohedron +pyrogallol +pyrogen +pyrogens +pyrography +pyrolatry +pyrolusite +pyrolysis +pyromancies +pyromancy +pyromania +pyromaniac +pyromaniacs +pyromanias +pyrometer +pyrometers +pyrometry +pyromorphite +pyrope +pyropes +pyrophobia +pyrophorus +pyrophosphate +pyrophosphates +pyrophyllite +pyroscope +pyroscopes +pyrosis +pyrostat +pyrostats +pyrosulphate +pyrotechnics +pyrotechny +pyroxene +pyroxenes +pyroxenite +pyroxylin +pyrrhic +pyrrhics +pyrrhotite +pyrrole +pyrroles +pyrrolidine +pythium +pythiums +python +pythoness +pythonesses +pythons +pyuria +pyx +pyxes +pyxidium +pyxis +qadi +qadis +qasida +qasidas +qat +qibla +qiblas +qintar +qintars +qoph +qophs +quack +quackery +quacks +quacksalver +quacksalvers +quad +quadragenarian +quadragenarians +quadrangle +quadrangles +quadrangular +quadrant +quadrantes +quadrants +quadraphonics +quadraphony +quadrat +quadrate +quadrates +quadratic +quadrats +quadrature +quadratures +quadrella +quadrellas +quadrennial +quadrennials +quadrennium +quadric +quadricentennial +quadriceps +quadricepses +quadriga +quadrilateral +quadrilaterals +quadrille +quadrilles +quadrillion +quadrillions +quadrillionth +quadrillionths +quadrinomial +quadriplegia +quadriplegic +quadrireme +quadriremes +quadrisection +quadrisections +quadrisyllable +quadrisyllables +quadrivalence +quadrivalences +quadrivium +quadroon +quadroons +quadrumane +quadrumanes +quadrumvirate +quadrumvirates +quadruped +quadrupeds +quadruple +quadruples +quadruplet +quadruplets +quadruplicate +quadruplicates +quadruplicity +quadrupling +quads +quaere +quaeres +quaestor +quaestors +quaestorship +quaestorships +quaffer +quaffers +quag +quagga +quaggas +quagmire +quagmires +quags +quahaug +quahaugs +quahog +quahogs +quaich +quaichs +quail +quails +quaintness +quake +quakes +quakiness +quale +qualification +qualifications +qualifier +qualifiers +qualifying +qualifyings +qualities +quality +qualm +qualmishness +qualms +quamash +quamashes +quandang +quandangs +quandaries +quandary +quandong +quandongs +quango +quangos +quant +quanta +quantic +quantics +quantification +quantifications +quantifier +quantifiers +quantisation +quantisations +quantities +quantity +quantization +quantizations +quantong +quantongs +quants +quantum +quarantine +quarantines +quark +quarks +quarrel +quarreler +quarrelers +quarreller +quarrellers +quarrels +quarrelsomeness +quarrian +quarrians +quarrier +quarriers +quarries +quarry +quarrying +quarryman +quart +quarte +quarter +quarter-deck +quarter-decks +quarter-hour +quarter-miler +quarterage +quarterages +quartering +quarterings +quarterlies +quarterlight +quarterlights +quarterly +quartermaster +quartermasters +quartern +quarters +quarterstaff +quartes +quartet +quartets +quartette +quartettes +quartic +quartics +quartile +quartiles +quarto +quartos +quarts +quartz +quartzes +quartzite +quasar +quasars +quassia +quassias +quatercentenaries +quatercentenary +quaternaries +quaternary +quaternion +quaternions +quaternities +quaternity +quatorze +quatorzes +quatrain +quatrains +quatrefoil +quatrefoils +quattrocento +quaver +quaverer +quaverers +quavers +quay +quayage +quayages +quays +quayside +quaysides +quean +queans +queasiness +quebracho +quebrachos +queen +queendom +queendoms +queenfish +queenhood +queenhoods +queening +queenings +queenliness +queens +queer +queer-bashing +queerness +queers +queller +quellers +quelling +quelquechose +quencher +quenchers +quenching +quenchings +quenelle +quenelles +quercetin +quercitron +quercitrons +queries +querist +querists +quern +querns +quersprung +quersprungs +querulousness +query +quest +quester +questers +question +questionability +questionableness +questionaries +questionary +questioner +questioners +questioning +questionings +questionnaire +questionnaires +questions +questor +questors +quests +quetsch +quetsches +quetzal +quetzales +quetzals +queue +queues +quey +queys +quibble +quibbler +quibblers +quibbles +quibbling +quiche +quiches +quick +quick-wittedness +quickening +quickenings +quickie +quickies +quicklime +quickness +quicks +quicksand +quicksands +quickset +quicksets +quicksilver +quicksilvers +quickstep +quicksteps +quid +quiddities +quiddity +quidnunc +quidnuncs +quids +quiescence +quiescency +quiet +quieter +quieters +quietism +quietist +quietists +quietness +quiets +quietude +quietus +quietuses +quiff +quiffs +quill +quillai +quillais +quillet +quillets +quilling +quillings +quillon +quillons +quills +quillwort +quillworts +quilt +quilter +quilters +quilting +quiltings +quilts +quin +quinacrine +quinary +quince +quincentenaries +quincentenary +quincentennial +quinces +quincunx +quincunxes +quine +quines +quinidine +quinine +quinines +quinoa +quinoas +quinoid +quinol +quinoline +quinone +quinones +quinquagenarian +quinquagenarians +quinquennial +quinquennials +quinquennium +quinquereme +quinqueremes +quinquevalence +quins +quinsy +quint +quintain +quintains +quintal +quintals +quinte +quintes +quintessence +quintessences +quintet +quintets +quintette +quintettes +quintile +quintiles +quintillion +quintillions +quintillionth +quintillionths +quints +quintuple +quintuples +quintuplet +quintuplets +quintuplicate +quintuplicates +quintuplication +quintupling +quinze +quip +quips +quipster +quipsters +quipu +quipus +quire +quires +quirk +quirkiness +quirks +quirt +quirts +quisling +quislings +quist +quists +quitch +quitches +quittance +quittances +quitter +quitters +quittor +quittors +quiver +quiverful +quiverfuls +quivering +quivers +quixotism +quiz +quizes +quizzer +quizzers +quizzicality +quod +quodlibet +quodlibets +quods +quoin +quoins +quoit +quoits +quokka +quokkas +quorum +quorums +quota +quotability +quotas +quotation +quotations +quote +quoter +quoters +quotes +quoteworthy +quotidian +quotidians +quotient +quotients +rabat +rabato +rabatos +rabats +rabbet +rabbets +rabbi +rabbin +rabbinate +rabbinates +rabbinism +rabbins +rabbis +rabbit +rabbiter +rabbiters +rabbitries +rabbitry +rabbits +rabble +rabble-rouser +rabble-rousers +rabblement +rabblements +rabbler +rabblers +rabbles +rabi +rabidity +rabidness +rabies +rabis +raccoon +raccoons +race +racecourse +racecourses +racegoer +racegoers +racehorse +racehorses +raceme +racemes +racemism +racemization +racemizations +racer +racers +races +racetrack +racetracks +raceway +raceways +rachilla +rachillas +rachis +rachises +rachitis +racialism +racialist +racialists +raciness +racing +racings +racism +racist +racists +rack +rack-and-pinion +rack-rent +rack-renter +rack-renters +rack-rents +racket +racket-tail +racketeer +racketeering +racketeerings +racketeers +rackets +rackett +racketts +racks +rackwork +racon +racons +raconteur +raconteurs +racoon +racoons +racquet +racquetball +racquets +rad +radar +radars +radarscope +radarscopes +raddle +raddleman +raddles +radial +radiales +radials +radian +radiance +radiancy +radians +radiant +radiants +radiation +radiations +radiator +radiators +radical +radicalism +radicalness +radicals +radicchio +radicel +radicels +radices +radicle +radicles +radii +radio +radioactivity +radioautograph +radioautographs +radiobiology +radiocarbon +radiochemistry +radiocommunication +radiogram +radiograms +radiograph +radiographer +radiographers +radiographs +radiography +radiolarian +radiolarians +radiolocation +radiologist +radiologists +radiology +radioluminescence +radiolysis +radiometeorograph +radiometer +radiometers +radiometry +radionuclide +radionuclides +radiophone +radiophones +radios +radioscope +radioscopes +radioscopy +radiosonde +radiosondes +radiotelegram +radiotelegrams +radiotelegraph +radiotelegraphs +radiotelegraphy +radiotelephone +radiotelephones +radiotelephony +radioteletype +radioteletypes +radiotherapist +radiotherapists +radiotherapy +radish +radishes +radium +radius +radiuses +radix +radixes +radome +radomes +radon +rads +radula +raff +raffia +raffias +raffinate +raffinates +raffinose +raffishness +raffle +raffles +raffs +raft +rafter +rafters +raftman +rafts +raftsman +rag +raga +ragamuffin +ragamuffins +ragas +ragbolt +ragbolts +rage +ragee +rages +raggedness +raggle +raggles +ragi +raglan +raglans +ragman +ragout +ragouts +rags +ragtime +ragtimes +ragweed +ragweeds +ragwork +ragworm +ragworms +ragwort +ragworts +rah-rah +raid +raider +raiders +raids +rail +rail-splitter +rail-splitters +railer +railers +railes +railhead +railheads +railing +railings +railleries +raillery +railroad +railroader +railroading +railroads +rails +railway +railwayman +railways +raiment +raiments +rain +rainbow +rainbows +raincheck +rainchecks +raincoat +raincoats +raindrop +raindrops +rainfall +rainfalls +raininess +rains +rainstorm +rainstorms +rainwear +raise +raiser +raisers +raises +raisin +raising +raisins +raj +raja +rajah +rajahs +rajas +rake +rake-off +rake-offs +rakee +rakees +rakehell +rakehells +raker +rakers +rakes +raki +rakis +rakishness +rale +rales +rallier +ralliers +rallies +rally +rallycross +rallye +rallyes +rallying +ram +ramble +rambler +ramblers +rambles +rambutan +rambutans +ramee +ramees +ramekin +ramekins +ramentum +ramequin +ramequins +rami +ramie +ramies +ramification +ramifications +ramis +rammer +rammers +ramp +rampage +rampages +rampart +ramparts +rampike +rampikes +rampion +rampions +ramps +ramrod +ramrods +rams +ramson +ramsons +ramstam +ramus +rana +ranas +rance +rances +ranch +rancher +rancherie +rancheries +ranchero +rancheros +ranchers +ranches +ranching +ranchings +ranchman +rancho +ranchos +rancidity +rancidness +rancor +rancour +rand +randan +randans +randie +randies +random +randomisation +randomisations +randomization +randomizations +randomness +randoms +rands +randy +ranee +ranees +range +rangefinder +rangefinders +rangeland +rangelands +ranger +rangers +ranges +rani +ranis +rank +ranker +rankers +ranking +rankings +rankness +ranks +ransacker +ransackers +ransacking +ransom +ransomer +ransomers +ransoms +rant +ranter +ranters +ranting +rants +ranula +ranulas +ranunculus +ranunculuses +raoulia +rap +rapaciousness +rapacity +rape +raper +rapers +rapes +raphe +raphes +raphide +raphides +rapid +rapidity +rapids +rapier +rapiers +rapine +rapines +rapist +rapists +raploch +raplochs +rapparee +rapparees +rappee +rappees +rappel +rappels +rapper +rappers +rapping +rapport +rapporteur +rapporteurs +rapports +rapprochement +rapprochements +raps +rapscallion +rapscallions +raptor +raptors +rapture +raptures +rapturousness +rarebit +rarebits +raree-show +rarefaction +rareness +rarities +rarity +rascal +rascality +rascals +rascasse +rascasses +rash +rasher +rashers +rashes +rashness +rasp +raspatories +raspatory +raspberries +raspberry +rasper +raspers +rasping +raspings +rasps +rasse +rasses +raster +rasters +rasure +rasures +rat +rat-a-tat-tat +rat-a-tat-tats +rat-catcher +rat-kangaroo +rat-tail +rat-tat +rat-tats +rata +ratability +ratafia +ratafias +ratan +ratans +rataplan +rataplans +ratas +ratatouille +ratatouilles +ratbag +ratbags +ratch +ratches +ratchet +ratchets +rate +rateability +ratel +ratels +ratepayer +ratepayers +rater +raters +rates +ratfink +ratfinks +rath +raths +ratification +ratifications +ratifier +ratifiers +ratine +ratines +rating +ratings +ratio +ratiocination +ratiocinator +ratiocinators +ration +rationale +rationales +rationalisation +rationalisations +rationalism +rationalist +rationalists +rationalities +rationality +rationalization +rationalizations +rationing +rations +ratios +ratite +ratlin +ratline +ratlines +ratlins +ratoon +ratoons +rats +ratsbane +ratsbanes +rattan +rattans +ratteen +ratteens +rattening +rattenings +ratter +ratters +ratting +rattle +rattlebox +rattleboxes +rattler +rattlers +rattles +rattlesnake +rattlesnakes +rattling +rattlings +ratton +rattons +raucousness +raught +ravage +ravager +ravagers +ravages +ravaging +rave +rave-up +rave-ups +ravel +ravelin +ravelins +ravelling +ravellings +ravelment +ravelments +ravels +raven +ravenousness +ravens +raver +ravers +raves +ravine +ravines +raving +ravings +ravioli +raviolis +ravisher +ravishers +ravishment +ravishments +raw +rawhide +rawhides +rawness +raws +ray +rayah +rayahs +raylet +raylets +rayon +rays +razee +razees +razing +razmataz +razmatazes +razoo +razoos +razor +razor-cut +razor-cuts +razor-shell +razors +razz +razzes +razzia +razzias +razzing +razzle +razzle-dazzle +razzles +razzmatazz +razzmatazzes +re-echo +re-echoes +re-education +re-entrance +re-entrant +re-entries +re-entry +re-export +re-exportation +re-exports +reabsorption +reabsorptions +reach +reach-me-down +reach-me-downs +reacher +reachers +reaches +reaching +reacquaintance +reacquaintances +reactance +reactances +reactant +reactants +reaction +reactionaries +reactionarism +reactionary +reactions +reactivation +reactivations +reactivity +reactor +reactors +read +readability +readaptation +readaptations +reader +readers +readership +readerships +readies +readiness +reading +readings +readjustment +readjustments +readmission +readmissions +readmittance +readmittances +readoption +readoptions +reads +readvertisement +ready +ready-made +ready-mix +ready-to-wear +readying +reaffirmation +reaffirmations +reagent +reagents +real +realgar +realignment +realignments +realisation +realisations +realiser +realisers +realism +realist +realists +realities +reality +realizability +realization +realizations +realizer +realizers +reallocation +reallocations +reallotment +reallotments +realm +realms +realness +realpolitik +reals +realties +realty +ream +reamendment +reamendments +reamer +reamers +reams +reanalysis +reanimation +reanimations +reaper +reapers +reappearance +reappearances +reapplication +reapplications +reappointment +reappointments +reapportioning +reapportionment +reappraisal +reappraisals +rear +rearguard +rearguards +rearing +rearmament +rearmouse +rearousal +rearousals +rearrangement +rearrangements +rearrest +rearrests +rears +rearward +rearwards +reascent +reascents +reason +reasonableness +reasoner +reasoners +reasoning +reasonings +reasons +reassemblies +reassembly +reassertion +reassertions +reassessment +reassessments +reassignment +reassignments +reassumption +reassumptions +reassurance +reassurances +reassurer +reassurers +reata +reatas +reattachment +reattachments +reawakening +reawakenings +rebaptism +rebaptisms +rebate +rebatement +rebatements +rebates +rebato +rebatoes +rebbe +rebbes +rebec +rebecs +rebel +rebeldom +rebellion +rebellions +rebelliousness +rebels +rebirth +rebirths +rebore +rebores +rebound +rebounds +rebozo +rebozos +rebroadcast +rebroadcasts +rebuff +rebuffs +rebuilding +rebuke +rebukes +reburial +reburials +reburying +rebus +rebuses +rebuttal +rebuttals +rebutter +rebutters +rec +recalcitrance +recalcitrant +recalcitration +recalescence +recall +recalls +recantation +recantations +recanter +recanters +recap +recapitalization +recapitulation +recapitulations +recaps +recaption +recaptions +recapture +recaptures +recast +recasting +recasts +recce +recces +reccies +recco +reccos +reccy +receding +receipt +receipts +receivability +receivable +receivableness +receivables +receiver +receivers +receivership +receiving +recency +recension +recensions +recentness +recept +receptacle +receptacles +reception +receptionist +receptionists +receptions +receptiveness +receptivities +receptivity +receptor +receptors +recepts +recess +recesses +recession +recessional +recessionals +recessions +recessive +recessiveness +recheck +rechecks +recidivism +recidivist +recidivists +recipe +recipes +recipience +recipiences +recipient +recipients +reciprocal +reciprocality +reciprocals +reciprocation +reciprocations +reciprocator +reciprocators +reciprocity +recision +recisions +recital +recitalist +recitalists +recitals +recitation +recitations +recitative +recitatives +recitativo +recitativos +reciter +reciters +recklessness +reckoner +reckoners +reckoning +reckonings +reclaim +reclaimant +reclaimants +reclaimer +reclaimers +reclaims +reclamation +reclamations +reclassification +reclination +reclinations +recliner +recliners +reclining +recluse +recluses +reclusion +reclusions +recoding +recognisance +recogniser +recognisers +recognition +recognitions +recognizance +recognizer +recognizers +recoil +recoils +recoinage +recoinages +recollectedness +recollection +recollections +recolonisation +recolonisations +recolonization +recolonizations +recombination +recombinations +recommencement +recommencements +recommendation +recommendations +recommender +recommenders +recommission +recommissions +recommitment +recommitments +recommittal +recommittals +recompense +recompenses +recomposition +recompositions +reconcilability +reconcilableness +reconcilement +reconcilements +reconciler +reconcilers +reconciliation +reconciliations +recondensation +recondensations +reconnaissance +reconnaissances +reconnoiterer +reconnoiterers +reconnoitering +reconnoitre +reconnoitrer +reconnoitrers +reconnoitres +reconquest +reconquests +reconsecration +reconsecrations +reconsideration +reconsolidation +reconstitute +reconstitutes +reconstitution +reconstitutions +reconstruction +reconstructions +reconversion +reconversions +reconveyance +reconveyances +record +record-player +record-players +recorder +recorders +recording +recordings +records +recount +recountal +recounting +recounts +recoup +recoupment +recoupments +recoups +recourse +recourses +recoverableness +recoverer +recoverers +recoveries +recovery +recreance +recreancy +recreant +recreants +recreation +recreations +recrement +recrements +recrimination +recriminations +recriminator +recriminators +recrudescence +recruit +recruiter +recruiters +recruitment +recruitments +recruits +recrystallization +recs +recta +rectangle +rectangles +rectangularity +recti +rectification +rectifications +rectifier +rectifiers +rectitude +rectitudes +recto +rector +rectorial +rectorials +rectories +rectors +rectory +rectos +rectrix +rectum +rectums +rectus +recuperation +recuperations +recuperator +recuperators +recurrence +recurrences +recursion +recursions +recusancy +recusant +recusants +recusation +recusations +recycle +recycles +recycling +red +red-water +redaction +redactions +redactor +redactors +redan +redans +redbird +redbreast +redbreasts +redbrick +redcap +redcaps +redcoat +redcoats +redcurrant +redcurrants +redd +reddle +reddleman +reddles +redds +rede +redeal +redeals +redecoration +redeemability +redeemableness +redeemer +redeemers +redefinition +redefinitions +redeliverer +redeliverers +redeliveries +redelivery +redemption +redemptioner +redemptioners +redemptions +redeployment +redeployments +redes +redetermination +redevelopment +redevelopments +redeye +redeyes +redfish +redfishes +redia +redingote +redingotes +redintegration +rediscoveries +rediscovery +redissolution +redissolutions +redistillation +redistribution +redistributions +redivision +redivisions +redleg +redlegs +redneck +redness +redolence +redolency +redouble +redoubles +redoubt +redoubts +redowa +redowas +redox +redpoll +redpolls +redraft +redrafts +redress +redresser +redressers +redresses +reds +redtop +reducer +reducers +reducibility +reducibleness +reducing +reductase +reductases +reduction +reductionism +reductions +reductive +redundance +redundances +redundancies +redundancy +reduplication +reduplications +reduviid +reduviids +redwing +redwings +redwood +redwoods +reebok +reeboks +reed +reedbuck +reedbucks +reediness +reeding +reedings +reedling +reedlings +reeds +reef +reefer +reefers +reefs +reek +reeks +reel +reeler +reelers +reels +reen +reens +reeve +reeves +ref +refection +refections +refectories +refectory +refer +referee +refereeing +referees +reference +references +referendum +referendums +referent +referential +referents +referral +referrals +refers +reffo +reffos +refill +refilling +refills +refinedness +refinement +refinements +refiner +refineries +refiners +refinery +refining +refinings +refit +refits +reflation +reflations +reflectance +reflectances +reflection +reflections +reflectiveness +reflectivity +reflector +reflectors +reflet +reflets +reflex +reflexes +reflexion +reflexions +reflexive +reflexiveness +reflexivity +reflower +reflowers +refluence +refluences +reflux +refluxes +refocusing +reforestation +reforestations +reform +reformability +reformation +reformations +reformatories +reformatory +reformer +reformers +reformism +reformist +reformists +reforms +reformulation +reformulations +refortification +refraction +refractions +refractivity +refractometer +refractometers +refractor +refractories +refractoriness +refractors +refractory +refrain +refrains +refresher +refreshers +refreshment +refreshments +refrigerant +refrigerants +refrigeration +refrigerations +refrigerator +refrigerators +refringency +refs +refuge +refugee +refugees +refuges +refugium +refulgence +refulgency +refund +refunder +refunders +refundment +refundments +refunds +refusal +refusals +refuse +refuser +refusers +refuses +refutation +refutations +refuter +refuters +refuting +regainer +regainers +regaining +regal +regale +regales +regalia +regality +regals +regard +regardfulness +regards +regatta +regattas +regelation +regelations +regencies +regency +regeneracies +regeneracy +regeneration +regenerations +regenerator +regenerators +regent +regents +reggae +regicide +regicides +regime +regimen +regimens +regiment +regimental +regimentals +regimentation +regimentations +regiments +regimes +regina +reginas +region +regionalism +regionalisms +regionalist +regionalists +regions +register +registers +registrant +registrants +registrar +registrars +registrarship +registrarships +registration +registrations +registries +registry +reglet +reglets +regma +rego +regoes +regolith +regoliths +regrant +regrants +regrater +regraters +regress +regresses +regression +regressions +regressiveness +regret +regrets +regrowth +regrowths +regular +regularisation +regularisations +regularities +regularity +regularization +regularizations +regulars +regulating +regulation +regulations +regulator +regulators +regulus +reguluses +regur +regurgitation +regurgitations +rehabilitation +rehabilitations +rehash +rehashes +rehearing +rehearings +rehearsal +rehearsals +rehearser +rehearsers +reheat +reheater +reheaters +reheating +reheats +rehoboam +rehoboams +reif +reification +reifications +reign +reigns +reimbursement +reimbursements +reimplantation +reimport +reimports +reimposition +reimpositions +reimpression +reimpressions +rein +reincarnation +reincarnationist +reincarnations +reindeer +reindeers +reindustrialization +reinfection +reinfections +reinflation +reinforcement +reinforcements +reins +reinsertion +reinsertions +reinspection +reinspections +reinstalment +reinstalments +reinstatement +reinstatements +reinstation +reinstations +reinsurance +reinsurances +reinsurer +reinsurers +reintegration +reintegrations +reinterment +reinterments +reinterpretation +reinterpretations +reinterrogation +reintroduction +reintroductions +reinvention +reinventions +reinvestment +reinvestments +reinvigoration +reinvigorations +reis +reises +reissue +reissues +reiteration +reiterations +reiver +reivers +reject +rejecter +rejecters +rejection +rejections +rejects +rejoicing +rejoicings +rejoinder +rejoinders +rejuvenation +rejuvenations +rejuvenescence +rejuvenescences +relapse +relapser +relapsers +relapses +relapsing +relatedness +relater +relaters +relation +relations +relationship +relationships +relative +relativeness +relatives +relativism +relativist +relativists +relativities +relativity +relator +relators +relaxant +relaxants +relaxation +relaxations +relaxin +relay +relays +release +releasees +releaser +releasers +releases +relegating +relegation +relegations +relentlessness +relevance +relevancy +reliability +reliableness +reliance +relic +relics +relict +relicts +relief +reliefs +relier +reliever +relievers +relievo +relievos +religieuse +religieuses +religieux +religion +religionism +religionist +religionists +religions +religiosity +religious +religiousness +relinquishing +relinquishment +relinquishments +reliquaries +reliquary +relique +reliques +relish +relishes +relishing +reliving +reload +reloads +relocation +relocations +reluctance +rem +remainder +remainders +remains +remake +remakes +remaking +remand +remands +remanence +remark +remarker +remarkers +remarks +remarque +remarques +remarriage +remarriages +rematch +rematches +remblai +remeasurement +remeasurements +remediation +remediations +remedies +remedy +rememberer +rememberers +remembering +remembrance +remembrancer +remembrancers +remembrances +remex +remigration +remigrations +remilitarization +remilitarizations +reminder +reminders +reminiscence +reminiscences +remise +remises +remissibility +remission +remissions +remissness +remit +remits +remittal +remittals +remittance +remittances +remittee +remittees +remitter +remitters +remittor +remittors +remnant +remnants +remonetisation +remonetisations +remonetization +remonetizations +remonstrance +remonstrances +remonstrant +remonstrants +remonstration +remonstrations +remonstrator +remonstrators +remontant +remontants +remora +remoras +remorse +remorsefulness +remorselessness +remote +remoteness +remotion +remould +remoulds +remount +remounts +removability +removal +removals +remove +removedness +remover +removers +removes +rems +remuda +remudas +remuneration +remunerations +remunerativeness +remunerator +remunerators +renaissance +renaissances +renascence +renascences +rencontre +render +renderer +renderers +rendering +renderings +renders +rendezvous +rendition +renditions +rendzina +renegade +renegades +renegado +renegados +renegation +renegations +renege +reneger +renegers +reneges +renegotiation +renegotiations +renewal +renewals +renewer +renewers +renga +rengas +renin +renitencies +renitency +rennet +rennets +rennin +renomination +renominations +renormalization +renounce +renouncement +renouncements +renouncer +renouncers +renounces +renovation +renovations +renovator +renovators +renown +renowns +rensselaerite +rent +rent-roll +rent-rolls +rentability +rental +rentals +rente +renter +renters +rentes +rentier +rentiers +renting +rents +renunciation +renunciations +renvoi +renvois +reoccupation +reoccupations +reorder +reordering +reorders +reorganisation +reorganisations +reorganization +reorganizations +reorientation +reorientations +rep +repagination +repaint +repaints +repair +repairer +repairers +repairman +repairs +reparation +reparations +repartee +repartees +repartition +repartitions +repassage +repassages +repast +repasts +repatriate +repatriates +repatriation +repatriations +repayment +repayments +repeal +repealer +repealers +repeals +repeat +repeater +repeaters +repeating +repeatings +repeats +repechage +repellant +repellants +repellence +repellences +repellencies +repellency +repellent +repellents +repeller +repellers +repelling +repentance +repentances +repercussion +repercussions +repertoire +repertoires +repertories +repertory +reperusal +reperusals +repetend +repetends +repetition +repetitions +repetitiousness +repetitiveness +rephotograph +rephotographs +rephrasing +repiner +repiners +replacement +replacements +replacing +replay +replays +replenishment +replenishments +repleteness +repletion +repletions +replevies +replevin +replevins +replevisable +replevy +replica +replicas +replication +replications +replier +repliers +replies +reply +report +reportage +reportages +reporter +reporters +reporting +reportings +reports +reposal +reposals +repose +reposedness +reposes +repositing +reposition +repositions +repositories +repository +repossession +repossessions +repossessor +repoussage +repoussages +repp +repps +reprehender +reprehenders +reprehensibility +reprehension +reprehensions +representation +representationalism +representations +representative +representativeness +representatives +repression +repressions +repressor +repressors +reprieve +reprieves +reprimand +reprimands +reprint +reprinting +reprints +reprisal +reprisals +reprise +reprises +repro +reproach +reproacher +reproachers +reproaches +reproachfulness +reprobate +reprobates +reprobation +reprobations +reproducer +reproducers +reproduction +reproductions +reproductiveness +reprography +reproof +reproofs +repros +reproval +reprovals +reps +reptile +reptiles +reptilian +reptilians +republic +republican +republicanism +republicans +republication +republications +republics +republishing +repudiation +repudiations +repugnance +repugnances +repulse +repulses +repulsion +repulsions +repulsiveness +repurchase +repurchases +reputability +reputation +reputations +repute +reputes +request +requests +requiem +requiems +requiescat +requiescats +requirement +requirements +requisite +requisiteness +requisites +requisition +requisitionist +requisitionists +requisitions +requital +requitals +requitement +requitements +requiter +requiters +reradiation +reradiations +rerebrace +rerebraces +reredos +reredoses +reregulation +reremouse +rerun +reruns +res +resale +resales +rescinding +rescission +rescissions +rescript +rescripts +rescue +rescuer +rescuers +rescues +research +researcher +researchers +researches +resect +resection +resections +resects +reselection +reselections +resemblance +resemblances +resentence +resentences +resentfulness +resentment +resentments +reserpine +reservation +reservations +reserve +reservedness +reserves +reservist +reservists +reservoir +reservoirs +reset +resets +resetter +resetters +resettlement +resettlements +reshipment +reshipments +reshuffle +reshuffles +reshuffling +residence +residences +residencies +residency +resident +residentiaries +residentiary +residents +residentship +residentships +resider +residual +residuals +residue +residues +residuum +resignation +resignations +resilience +resiliency +resin +resinification +resinoid +resinoids +resins +resipiscence +resist +resistance +resistances +resistant +resistants +resister +resisters +resistibility +resistivities +resistivity +resistlessness +resistor +resistors +resists +resnatron +resnatrons +resoluteness +resolution +resolutioner +resolutioners +resolutions +resolvability +resolve +resolvedness +resolvent +resolvents +resolver +resolvers +resolves +resolving +resonance +resonances +resonator +resonators +resorbence +resorcinol +resorption +resorptions +resort +resorts +resource +resourcefulness +resources +respect +respectabilities +respectability +respecter +respecters +respectfulness +respects +respiration +respirations +respirator +respirators +respiratory +respite +respites +resplendence +resplendency +respond +respondence +respondent +respondents +responder +responders +responds +response +responser +responsers +responses +responsibilities +responsibility +responsible +responsiveness +responsor +responsories +responsors +responsory +responsum +rest +rest-cure +rest-cures +rest-home +rest-homes +restart +restarts +restatement +restatements +restaurant +restaurants +restaurateur +restaurateurs +rester +resters +restfulness +restitution +restitutions +restiveness +restlessness +restorableness +restoration +restorationism +restorations +restorative +restoratives +restorer +restorers +restrainer +restrainers +restraint +restraints +restriction +restrictions +restrictiveness +rests +result +resultant +resultants +results +resume +resumes +resumption +resumptions +resurgence +resurgences +resurrection +resurrectionism +resurrectionist +resurrections +resurvey +resurveys +resuscitation +resuscitations +resuscitator +resuscitators +retable +retables +retail +retailer +retailers +retailing +retails +retainer +retainers +retake +retaker +retakers +retakes +retaking +retakings +retaliation +retaliations +retaliator +retaliators +retama +retamas +retard +retardant +retardants +retardate +retardates +retardation +retardations +retarder +retarders +retardment +retardments +retards +retch +retches +rete +retene +retention +retentionist +retentionists +retentions +retentiveness +retentivity +retes +rethink +rethinks +retiarius +retiariuses +reticence +reticle +reticles +reticulation +reticulations +reticule +reticules +reticulum +reticulums +retina +retinaculum +retinal +retinas +retinite +retinitis +retinol +retinoscope +retinoscopy +retinue +retinues +retiredness +retiree +retirees +retirement +retirements +retirer +retirers +retorsion +retorsions +retort +retorter +retorters +retortion +retortions +retorts +retouch +retoucher +retouchers +retouches +retractation +retractility +retraction +retractions +retractor +retractors +retraining +retransfer +retransfers +retranslation +retranslations +retransmission +retransmissions +retread +retreads +retreat +retreatant +retreated +retreats +retrenchment +retrenchments +retrial +retrials +retribution +retributions +retrieval +retrievals +retrieve +retriever +retrievers +retrieves +retro +retroaction +retrocession +retrocessions +retrochoir +retrochoirs +retroflection +retroflections +retroflexion +retroflexions +retrogradation +retrogression +retrogressions +retros +retrospect +retrospection +retrospections +retrospective +retrospectives +retrospects +retroussage +retroversion +retrovirus +retroviruses +retsina +retsinas +return +returnee +returnees +returns +reunification +reunifications +reunion +reunionism +reunionist +reunionists +reunions +rev +revaccination +revaccinations +revalidation +revaluation +revaluations +revamp +revamps +revanche +revanches +revanchism +reveal +revealer +revealers +revealing +revealings +revealment +revealments +reveals +reveille +reveilles +revel +revelation +revelationist +revelationists +revelations +revelator +revelators +reveler +revelers +reveller +revellers +revelries +revelry +revels +revenant +revenants +revenge +revengefulness +revenger +revengers +revenges +revenue +revenues +reverberation +reverberations +reverberator +reverberators +reverberatory +revere +reverence +reverencer +reverencers +reverences +reverend +reverends +reverer +reverers +reveres +reverie +reveries +revers +reversal +reversals +reverse +reverser +reversers +reverses +reversibility +reversible +reversion +reversioner +reversioners +reversions +reverso +reversos +revert +reverting +reverts +revery +revetment +revetments +review +reviewer +reviewers +reviews +revilement +reviler +revilers +revindication +revindications +revisal +revisals +revise +reviser +revisers +revises +revising +revision +revisionism +revisionist +revisionists +revisions +revisitation +revisitations +revitalisation +revitalisations +revitalization +revitalizations +revivability +revival +revivalism +revivalist +revivalists +revivals +reviver +revivers +revivification +reviviscence +revivor +revivors +revocability +revocableness +revocation +revocations +revoke +revokes +revolt +revolter +revolters +revolts +revolution +revolutionaries +revolutionary +revolutionist +revolutionists +revolutions +revolver +revolvers +revs +revue +revues +revulsion +revulsions +revulsive +rewa-rewa +rewa-rewas +reward +rewards +rewind +rewinds +rewording +rewrite +rewrites +rewriting +rex +reynard +reynards +rhabdomancy +rhabdomyoma +rhachis +rhachises +rhamphotheca +rhamphothecas +rhapsodic +rhapsodies +rhapsodist +rhapsodists +rhapsody +rhatanies +rhatany +rhea +rheas +rhebok +rheboks +rhenium +rheologist +rheologists +rheology +rheometer +rheometers +rheostat +rheostats +rheotaxis +rheotrope +rheotropes +rheotropism +rhesus +rhesuses +rhetor +rhetoric +rhetorician +rhetoricians +rhetors +rheum +rheumatic +rheumatics +rheumatism +rheumatologist +rheumatologists +rheumatology +rheums +rhexis +rhine +rhinencephalon +rhinencephalons +rhines +rhinestone +rhinestones +rhinitis +rhino +rhinoceros +rhinoceroses +rhinologist +rhinologists +rhinology +rhinoplasty +rhinos +rhinoscope +rhinoscopes +rhinoscopy +rhizobium +rhizoid +rhizoids +rhizome +rhizomes +rhizomorph +rhizomorphs +rhizopod +rhizopods +rhizopus +rhizopuses +rhizosphere +rhizospheres +rho +rhodamine +rhodium +rhodochrosite +rhododendron +rhododendrons +rhodolite +rhodolites +rhodonite +rhodopsin +rhomb +rhombencephalon +rhombohedron +rhombohedrons +rhomboid +rhomboides +rhomboids +rhombs +rhombus +rhombuses +rhonchus +rhone +rhones +rhos +rhotacism +rhotacisms +rhubarb +rhubarbs +rhumb +rhumba +rhumbas +rhumbs +rhus +rhuses +rhyme +rhymes +rhymester +rhymesters +rhyolite +rhythm +rhythmic +rhythmicity +rhythmics +rhythmist +rhythmists +rhythms +rhytidectomies +rhytidectomy +rhyton +ria +rial +rials +rias +riata +riatas +rib +ribald +ribaldries +ribaldry +ribalds +riband +ribands +ribband +ribbands +ribbing +ribbings +ribble-rabble +ribbon +ribbons +riboflavin +ribonuclease +ribose +ribosome +ribosomes +ribs +ribwort +ribworts +rice +ricer +ricercar +ricercare +ricercares +ricercars +ricers +rices +rich +riches +richness +ricin +rick +ricketiness +rickets +rickettsia +rickettsias +rickey +rickeys +rickle +rickles +ricks +ricksha +rickshas +rickshaw +rickshaws +ricochet +ricochets +ricotta +rictus +rictuses +ridability +riddance +riddances +ridder +ridders +riddle +riddles +ride +rider +riders +rides +ridge +ridgel +ridgels +ridgepole +ridgepoles +ridges +ridgeway +ridgeways +ridgil +ridgils +ridgling +ridglings +ridicule +ridiculer +ridiculers +ridicules +ridiculousness +riding +ridings +ridotto +ridottos +riebeckite +riel +riels +riempie +riempies +rifacimento +rifeness +riff +riffle +riffler +rifflers +riffles +riffs +rifle +rifleman +rifler +riflers +rifles +rifling +riflings +rift +rifts +rig +rigadoon +rigadoons +rigatoni +rigger +riggers +rigging +riggings +right +right-handedness +right-hander +right-handers +right-mindedness +right-winger +right-wingers +righteousness +rightfulness +rightism +rightist +rightists +rightness +rights +rigidity +rigidness +rigmarole +rigmaroles +rigol +rigols +rigor +rigorism +rigorist +rigorists +rigorousness +rigors +rigour +rigours +rigout +rigouts +rigs +rilievo +rill +rilles +rillet +rillets +rills +rim +rime +rimer +rimers +rimes +rims +rimu +rimus +rin +rind +rinderpest +rinds +ring +ring-dyke +ring-dykes +ringbone +ringbones +ringer +ringers +ringgit +ringgits +ringhals +ringhalses +ringing +ringings +ringleader +ringleaders +ringlet +ringlets +rings +ringside +ringsides +ringster +ringsters +ringworm +ringworms +rink +rinkhals +rinkhalses +rinks +rins +rinse +rinses +rinsing +rinsings +riot +rioter +rioters +rioting +riotings +riotousness +riots +rip +rip-off +rip-offs +riparian +riparians +ripeness +ripening +ripes +ripidolite +ripieno +ripienos +riposte +ripostes +ripper +rippers +ripple +rippler +ripplers +ripples +ripplet +ripplets +rippling +ripplings +riprap +ripraps +rips +ripsnorter +ripsnorters +riptide +riptides +rise +riser +risers +rises +rishi +rishis +risibility +rising +risings +risk +risker +riskers +riskiness +risking +risks +risotto +risottos +rissole +rissoles +rit +rite +rites +ritornello +ritornellos +rits +ritter +ritters +ritual +ritualise +ritualises +ritualism +ritualist +ritualists +ritualization +ritualizations +rituals +rivage +rivages +rival +rivalries +rivalry +rivals +river +rivers +riverside +rivet +riveter +riveters +rivets +riviera +rivieras +rivulet +rivulets +rix-dollar +rix-dollars +riyal +riyals +roach +roaches +road +roadblock +roadblocks +roadholding +roadhouse +roadhouses +roadman +roads +roadside +roadsides +roadstead +roadsteads +roadster +roadsters +roadway +roadways +roadwork +roadworks +roam +roamer +roamers +roams +roan +roans +roar +roarer +roarers +roaring +roarings +roars +roast +roaster +roasters +roasting +roastings +roasts +robalo +robalos +robber +robberies +robbers +robbery +robe +robe-de-chambre +robes +robin +robinia +robinias +robins +roble +robles +roborant +roborants +robot +robotics +robots +robustness +roc +rocaille +rocailles +rocambole +rocamboles +rochet +rochets +rock +rock-'n'-roll +rock-and-roll +rockabilly +rockaway +rockaways +rocker +rockeries +rockers +rockery +rocket +rocketeer +rocketeers +rocketry +rockets +rockiness +rockling +rocklings +rocks +rockweed +rococo +rococos +rocs +rod +rode +rodent +rodenticide +rodenticides +rodents +rodeo +rodeos +rodes +rodomontade +rodomontades +rods +roe +roebuck +roebucks +roemer +roemers +roentgen +roentgens +roes +rogation +rogations +rogue +rogueries +roguery +rogues +roguishness +roisterer +roisterers +roisterous +roke +rokes +role +role-playing +roles +roll +roll-on +roll-ons +roll-out +roll-outs +rollaway +rollbar +rollbars +roller +roller-skater +rollers +rollick +rollicks +rolling +rollings +rollmop +rollmops +rollneck +rollnecks +rollock +rollocks +rolls +roly-polies +roly-poly +rom +roma +romaine +romaines +romaji +roman +romance +romancer +romancers +romances +romans +romantic +romanticisation +romanticise +romanticises +romanticism +romanticist +romanticists +romanticization +romantics +romas +romaunt +romaunts +romneya +romneyas +romp +romper +rompers +rompishness +romps +roms +ronde +rondeau +rondel +rondels +rondes +rondo +rondos +rondure +rondures +rone +roneo +roneos +rones +ronggeng +ronggengs +ronin +ronyon +roo +rood +rood-tree +roods +roof +roofer +roofers +roofing +roofings +roofs +rooibos +rooinek +rooineks +rook +rookeries +rookery +rookie +rookies +rooks +room +roomer +roomers +roomette +roomettes +roomful +roomfuls +roominess +rooms +roos +roost +rooster +roosters +roosts +root +rootage +rootages +rooter +rooters +rooting +rootings +rootlet +rootlets +roots +rootstock +rootstocks +rooty +rope +roper +ropers +ropery +ropes +ropeway +ropeways +ropiness +roping +ropings +roque +roquelaure +roquelaures +roquet +roquets +roquette +roquettes +rorqual +rorquals +rort +rorts +rosace +rosaces +rosaniline +rosarian +rosarians +rosaries +rosarium +rosariums +rosary +rose +rose-root +rose-water +rosefish +rosefishes +rosehip +rosehips +rosella +rosellas +roselle +roselles +rosemaling +rosemaries +rosemary +roseola +roseries +rosery +roses +roset +rosets +rosette +rosettes +rosewood +rosewoods +rosin +rosiness +rosins +rostellum +rostellums +roster +rosters +rostra +rostrocarinate +rostrocarinates +rostrum +rostrums +rot +rota +rotaries +rotary +rotas +rotation +rotations +rotator +rotators +rotavirus +rotaviruses +rote +rotenone +rotes +rotgut +rotguts +roti +rotifer +rotifers +rotis +rotisserie +rotisseries +rotl +rotls +rotogravure +rotogravures +rotor +rotorcraft +rotors +rots +rottenness +rottenstone +rottenstones +rotter +rotters +rotting +rotunda +rotundas +rotundities +rotundity +roturier +roturiers +rouble +roubles +roucou +rouge +rouges +rough +rough-and-tumble +roughage +roughcast +roughcasts +rougher +roughers +roughhouse +roughhouses +roughness +roughnesses +roughs +roulade +roulades +rouleau +rouleaus +roulette +roulettes +rounce +rounces +round +roundabout +roundabouts +roundedness +roundel +roundelay +roundelays +roundels +rounder +rounders +rounding +roundings +roundlet +roundlets +roundness +rounds +roundsman +roup +roups +roupy +rouse +rouseabout +rouser +rousers +rouses +rousing +roustabout +roustabouts +rout +route +routeman +router +routers +routes +routh +routine +routines +routing +routings +routinism +routinist +routinists +routs +roux +rove +rover +rovers +roves +roving +rovings +row +rowan +rowans +rowboat +rowboats +rowdies +rowdiness +rowdy +rowdyism +rowel +rowels +rowen +rowens +rower +rowers +rowing +rowlock +rowlocks +rows +royal +royalism +royalist +royalists +royals +royalties +royalty +rozelle +rozelles +rozzer +rozzers +rub +rub-a-dub +rubato +rubatos +rubber +rubberneck +rubbernecks +rubbers +rubbing +rubbings +rubbish +rubbishes +rubble +rubbles +rubdown +rubdowns +rube +rubefacient +rubefacients +rubefaction +rubefies +rubefy +rubella +rubellite +rubeola +rubicelle +rubicelles +rubicon +rubicons +rubicundity +rubidium +rubies +ruble +rubles +rubric +rubrication +rubricator +rubricators +rubrician +rubricians +rubrics +rubs +rubstone +rubstones +ruby +ruche +ruches +ruching +ruchings +ruck +rucks +rucksack +rucksacks +ruckus +ruckuses +ruction +ructions +rudbeckia +rudbeckias +rudd +rudder +rudders +ruddiness +ruddleman +ruddles +ruddock +ruddocks +rudds +rudeness +rudenesses +ruderal +ruderals +rudiment +rudimentariness +rudiments +rue +ruefulness +rues +ruff +ruffe +ruffes +ruffian +ruffianism +ruffians +ruffle +ruffler +rufflers +ruffles +ruffs +rug +rugby +ruggedness +rugger +rugging +ruggings +rugosity +rugs +ruin +ruination +ruinations +ruiner +ruiners +ruining +ruinings +ruinousness +ruins +rule +ruler +rulers +rulership +rulerships +rules +ruling +rulings +rum +rumba +rumbas +rumble +rumbler +rumblers +rumbles +rumbling +rumblings +rumen +ruminant +ruminants +rumination +ruminations +rummage +rummager +rummagers +rummages +rummer +rummers +rummy +rumor +rumors +rumour +rumourmonger +rumourmongers +rumours +rump +rumple +rumples +rumps +rumpus +rumpuses +rums +run +run-in +run-on +run-through +run-throughs +run-up +run-ups +runabout +runabouts +runagate +runagates +runaway +runaways +runch +runches +rundle +rundles +rundlet +rundlets +rune +runes +rung +rungs +runkle +runkles +runlet +runlets +runnel +runnels +runner +runner-up +runners +running +runnings +runs +runt +runts +runway +runways +rupee +rupees +rupiah +rupiahs +rupture +ruptures +rupturewort +ruptureworts +ruralisation +ruralism +ruralist +ruralists +rurality +ruralization +ruscus +ruscuses +ruse +ruses +rush +rushee +rushees +rusher +rushers +rushes +rushing +rushlight +rushlights +rusk +rusks +russet +russets +russia +russias +rust +rustic +rustication +rustications +rusticator +rusticators +rusticity +rustics +rustiness +rusting +rustings +rustle +rustler +rustlers +rustles +rustling +rustlings +rusts +rut +rutabaga +ruth +ruthenium +rutherford +rutherfordium +rutherfords +ruthlessness +ruths +rutile +rutin +ruts +rya +ryal +ryals +ryas +rye +rye-grass +ryes +ryke +rykes +ryokan +ryokans +ryot +ryots +sabadilla +sabaton +sabatons +sabbat +sabbatical +sabbaticals +sabbats +saber +sabers +sabin +sabins +sable +sables +sabot +sabotage +sabotages +saboteur +saboteurs +sabots +sabra +sabras +sabre +sabres +sabretache +sabretaches +sac +sacaton +sacatons +saccharase +saccharate +saccharide +saccharides +saccharifies +saccharify +saccharimeter +saccharimeters +saccharimetry +saccharin +saccharinity +saccharization +saccharoid +saccharometer +saccharometers +saccharose +saccharoses +sacculation +sacculations +saccule +saccules +sacculus +sacellum +sacerdotalism +sacerdotalist +sacerdotalists +sachem +sachemdom +sachems +sachemship +sachet +sachets +sack +sackbut +sackbuts +sackcloth +sackcloths +sacker +sackers +sackful +sackfuls +sacking +sackings +sacks +sacque +sacques +sacrament +sacramental +sacramentalism +sacramentalist +sacramentalists +sacramentals +sacraments +sacrarium +sacrariums +sacredness +sacrifice +sacrificer +sacrificers +sacrifices +sacrilege +sacrileges +sacrilegiousness +sacring +sacrings +sacristan +sacristans +sacristies +sacristy +sacroiliac +sacrosanctity +sacrosanctness +sacrum +sacs +saddhu +saddhus +saddle +saddle-sore +saddleback +saddlebacks +saddlebill +saddlebills +saddler +saddleries +saddlers +saddlery +saddles +sade +sadhe +sadhu +sadhus +sadism +sadist +sadists +sadness +safari +safaris +safe +safe-blower +safe-breaker +safe-breakers +safe-conduct +safe-deposit +safe-deposits +safeguard +safeguards +safelight +safeness +safes +safeties +safety +safety-deposit +safety-deposits +saffian +saffians +safflower +safflowers +saffron +saffrons +safranine +safrole +safroles +sag +saga +sagaciousness +sagacity +sagamore +sagamores +sagas +sage +sagebrush +sagebrushes +sages +saggar +saggars +sagger +saggers +sagitta +sagittaries +sagittary +sagittas +sago +sagos +sags +saguaro +saguaros +sahib +sahibs +saice +said +saiga +saigas +sail +sailer +sailers +sailing +sailings +sailmaker +sailor +sailoring +sailorings +sailors +sailplane +sailplanes +sails +saimiri +saimiris +sainfoin +sainfoins +saint +saintdom +sainthood +saintliness +saints +saithe +saithes +sake +saker +sakers +sakes +saki +sakis +sakkos +sakkoses +sal +salaam +salaams +salability +salaciousness +salacity +salad +salade +salades +salads +salal +salals +salamander +salamanders +salami +salamis +salaries +salary +salchow +salchows +sale +saleability +salep +saleps +saleratus +sales +salesgirl +salesgirls +salesladies +saleslady +salesman +salesmanship +salesperson +salespersons +salesroom +salesrooms +saleswoman +salet +salets +salicin +salicional +salicionals +salicornia +salicornias +salicylate +salience +saliency +salient +salientian +salients +salimeter +salimeters +salina +salinas +saline +salines +salinity +salinometer +salinometers +saliva +salivas +salivation +salix +sallee +sallenders +sallet +sallets +sallies +sallow +sallowness +sallows +sally +salmagundi +salmagundies +salmagundis +salmi +salmis +salmon +salmonella +salmonellas +salmonellosis +salmonid +salmonids +salmonoid +salmonoids +salmons +salon +salons +saloon +saloons +saloop +saloops +salopette +salopettes +salp +salpa +salpas +salpicon +salpicons +salpiglossis +salpingectomies +salpingectomy +salpingitis +salpinx +salpinxes +salps +sals +salsa +salsifies +salsify +salt +salt-box +salt-boxes +saltando +saltarello +saltarellos +saltation +saltations +saltchuck +salter +saltern +salterns +salters +saltier +saltiers +saltiness +salting +saltings +saltire +saltires +saltishness +saltness +saltpeter +saltpetre +salts +saltus +saltuses +salubriousness +salubrities +salubrity +saluki +salukis +salutariness +salutation +salutations +salutatorian +salutatorians +salute +saluter +saluters +salutes +salvability +salvage +salvages +salvation +salvationism +salvationist +salvationists +salvations +salve +salver +salvers +salves +salvia +salvias +salvo +salvoes +salvor +salvors +salvos +sam +samadhi +saman +samara +samaras +samarium +samarskite +samba +sambar +sambars +sambas +sambo +sambuca +sambucas +sambur +samburs +samekh +sameness +sames +samfoo +samfoos +samiel +samiels +samisen +samisens +samite +samiti +samitis +samizdat +samlet +samlets +samovar +samovars +samp +sampan +sampans +samphire +samphires +sample +sampler +samplers +samples +sampling +samplings +samps +samsara +samshu +samshus +samurai +sanatorium +sanatoriums +sanbenito +sanbenitos +sanctification +sanctifications +sanctifier +sanctifiers +sanctimoniousness +sanctimony +sanction +sanctions +sanctities +sanctitude +sanctitudes +sanctity +sanctuaries +sanctuary +sanctum +sanctums +sand +sandal +sandals +sandalwood +sandarac +sandarach +sandbag +sandbagger +sandbaggers +sandbags +sandblast +sandblaster +sandblasters +sandblasts +sander +sanderling +sanderlings +sanders +sandhi +sandhis +sandiness +sandiver +sandivers +sandman +sandpaper +sandpapers +sandpiper +sandpipers +sands +sandsoap +sandstone +sandstones +sandwich +sandwiches +sandwort +sandworts +saneness +sang +sangaree +sangarees +sanglier +sangria +sangrias +sangs +sanguification +sanguinariness +sanguine +sanguineness +sanguines +sanguinity +sanicle +sanicles +sanidine +sanies +sanitarian +sanitarians +sanitarium +sanitariums +sanitation +sanitisation +sanitisations +sanitization +sanitizations +sanitizing +sanity +sanjak +sanjaks +sannup +sannups +sannyasi +sannyasis +sansevieria +sansevierias +sant +santal +santals +santir +santirs +santolina +santolinas +santonica +santonin +sap +sapajou +sapajous +sapele +sapeles +saphead +sapheads +saphena +saphenous +sapidity +sapidness +sapience +saplessness +sapling +saplings +sapodilla +sapodillas +saponification +saponin +saponite +sapor +sapors +sapota +sapotas +sapper +sappers +sapphire +sapphires +sapphirine +sapphism +sappiness +sapraemia +saprobe +saprobes +saprolegnia +saprolegnias +saprolite +saprolites +sapropel +saprophyte +saprophytes +saps +sapsago +sapsagos +sapsucker +sapsuckers +saraband +sarabandes +sarabands +sarangi +sarangis +sarape +sarapes +sarcasm +sarcasms +sarcenet +sarcenets +sarcocarp +sarcocarps +sarcocystis +sarcode +sarcodes +sarcoid +sarcoidosis +sarcolemma +sarcology +sarcoma +sarcomas +sarcomatosis +sarcomere +sarcophagus +sarcophaguses +sarcoplasm +sarcoplasms +sard +sardine +sardines +sardius +sardiuses +sardonyx +sardonyxes +saree +sarees +sargasso +sargassos +sargassum +sarge +sarges +sargo +sargos +sari +saris +sarmentum +sarong +sarongs +saros +saroses +sarpanch +sarracenia +sarracenias +sarrazin +sarrazins +sarrusophone +sarrusophones +sarsaparilla +sarsen +sarsenet +sarsenets +sarsens +sartor +sartorius +sartors +sash +sashay +sashays +sashes +sashimi +sashimis +sasin +sasines +sasins +saskatoon +saskatoons +sasquatch +sasquatches +sass +sassabies +sassaby +sassafras +sassafrases +sasses +sassing +sastruga +sat +satang +satanicalness +satanism +satanist +satanists +satanophobia +satchel +satchels +sateen +sateens +satellite +satellites +sates +satiability +satiation +satiety +satin +satinet +satinets +satinflower +satins +satinwood +satinwoods +satire +satires +satiricalness +satirist +satirists +satisfaction +satisfactions +satisfactoriness +satisfier +satisfiers +satisfying +satori +satoris +satrap +satrapies +satraps +satrapy +satsuma +satsumas +saturant +saturants +saturation +saturator +saturators +saturniid +saturnism +satyagraha +satyr +satyriasis +satyrid +satyrids +satyrs +sauce +sauce-alone +saucepan +saucepans +saucer +saucers +sauces +sauch +sauchs +sauciness +sauerbraten +sauerkraut +sauger +saugers +saugh +saughs +saul +sauls +sauna +saunas +saunter +saunterer +saunterers +saunters +saurel +saurels +saurian +saurians +sauries +saurischian +saurischians +sauropod +sauropods +saury +sausage +sausages +saussurite +saut +sauts +savableness +savage +savageness +savageries +savagery +savages +savagism +savanna +savannah +savannahs +savannas +savant +savants +savarin +savarins +savate +savates +save +save-all +saveloy +saveloys +saver +savers +saves +savin +savines +saving +savings +savins +savior +saviors +saviour +saviours +savoir-faire +savoir-vivre +savor +savories +savoriness +savors +savory +savour +savouries +savouriness +savours +savoury +savoy +savoys +savvies +savvy +saw +saw-wort +sawder +sawders +sawdust +sawdusts +sawer +sawers +sawpit +sawpits +saws +sawyer +sawyers +sax +saxes +saxhorn +saxhorns +saxifrage +saxifrages +saxonies +saxony +saxophone +saxophones +saxophonist +saxophonists +say +say-so +sayer +sayers +saying +sayings +sayonara +says +sayyid +sayyids +sazerac +scab +scabbard +scabbards +scabbedness +scabbiness +scabies +scabious +scabrousness +scabs +scad +scads +scaffold +scaffolding +scaffoldings +scaffolds +scag +scagliola +scalade +scalades +scalar +scalars +scalawag +scalawags +scald +scalds +scale +scalenohedron +scalenohedrons +scalenus +scaler +scalers +scales +scaliness +scaling +scalings +scall +scallion +scallions +scallop +scalloping +scallops +scallywag +scallywags +scalp +scalpel +scalpels +scalper +scalpers +scalping +scalps +scam +scammony +scamp +scamper +scampers +scampi +scampis +scampishness +scamps +scams +scan +scandal +scandalisation +scandaliser +scandalisers +scandalization +scandalizer +scandalizers +scandalmonger +scandalmongering +scandalmongers +scandalousness +scandals +scandium +scanner +scanners +scanning +scannings +scans +scansion +scansions +scanties +scantiness +scantling +scantlings +scantness +scanty +scape +scapegoat +scapegoats +scapegrace +scapegraces +scapes +scaphocephaly +scaphopod +scaphopods +scapolite +scapula +scapular +scapularies +scapulary +scapulas +scar +scarab +scarabaean +scarabaeid +scarabaeids +scarabaeus +scarabaeuses +scarabs +scarcement +scarcements +scarceness +scarcities +scarcity +scare +scarecrow +scarecrows +scaremonger +scaremongering +scaremongers +scarer +scarers +scares +scarf +scarfs +scarfskin +scarfskins +scarification +scarifications +scarificator +scarificators +scarlatina +scarlet +scarlets +scarp +scarper +scarpers +scarph +scarphs +scarps +scars +scarves +scat +scathe +scathes +scatology +scatophagy +scats +scatt +scatter +scatter-gun +scatterer +scatterers +scattering +scatterings +scatters +scatts +scaup +scauper +scaupers +scaups +scavenger +scavengers +scenario +scenarios +scenarist +scenarists +scend +scends +scene +sceneries +scenery +scenes +scenography +scent +scents +scepter +scepters +sceptic +scepticism +sceptics +sceptre +sceptres +schadenfreude +schappe +schappes +schedule +schedules +scheduling +scheelite +schefflera +schema +schematic +schematisation +schematism +schematization +scheme +schemer +schemers +schemes +scheming +schemings +scherzando +scherzandos +scherzo +scherzos +schiavone +schiavones +schiller +schillerization +schilling +schillings +schipperke +schipperkes +schism +schismatic +schismatics +schisms +schist +schistosity +schistosome +schistosomes +schistosomiasis +schists +schizo +schizocarp +schizocarps +schizogenesis +schizogony +schizoid +schizoids +schizomycete +schizont +schizonts +schizophrene +schizophrenes +schizophrenia +schizophrenic +schizophrenics +schizophyte +schizophytes +schizopod +schizopods +schizos +schizothymia +schlemiel +schlemiels +schlepp +schlepps +schlieren +schlimazel +schlimazels +schlock +schlumbergera +schmaltz +schmaltzes +schmalz +schmalzes +schmo +schmoes +schmooze +schmoozes +schmuck +schmucks +schnapper +schnappers +schnapps +schnappses +schnaps +schnapses +schnauzer +schnauzers +schnecken +schnitzel +schnitzels +schnook +schnooks +schnorkel +schnorkels +schnorrer +schnorrers +schnozzle +schnozzles +scholar +scholarch +scholarchs +scholars +scholarship +scholarships +scholastic +scholasticism +scholastics +scholiast +scholiasts +scholium +school +schoolbag +schoolbags +schoolboy +schoolboys +schoolfellow +schoolfellows +schoolgirl +schoolgirls +schoolhouse +schoolhouses +schoolie +schoolies +schooling +schoolings +schoolman +schoolmaster +schoolmasters +schoolmastership +schoolmistress +schoolmistresses +schoolroom +schoolrooms +schools +schoolwork +schooner +schooners +schorl +schottische +schottisches +schuit +schuits +schul +schuls +schuss +schusses +schuyt +schuyts +schwa +schwas +sci-fi +sciaenid +sciaenoid +sciamachies +sciamachy +sciarid +sciarids +sciatica +science +sciences +scientism +scientist +scientists +scilicet +scilla +scillas +scimitar +scimitars +scincoid +scintigraphy +scintilla +scintillas +scintillation +scintillations +scintillator +scintillators +scintillometer +scintillometers +sciolism +scion +scions +sciosophies +sciosophy +scirrhus +scirrhuses +scissel +scission +scissions +scissors +scissure +scissures +sciurine +sclaff +sclaffs +sclera +scleras +sclerema +sclerenchyma +sclerenchymas +scleriasis +sclerite +sclerites +scleritis +sclerocauly +scleroderma +scleroma +sclerometer +sclerometers +sclerophyll +sclerophylls +sclerophylly +scleroprotein +sclerosis +sclerotic +sclerotics +sclerotin +sclerotitis +sclerotium +sclerotomies +sclerotomy +scoff +scoffer +scoffers +scoffing +scoffings +scofflaw +scofflaws +scoffs +scold +scolder +scolders +scolding +scoldings +scolds +scolecite +scolex +scolion +scoliosis +scollop +scollops +scolopendrid +scombrid +scombroid +sconce +sconces +sconcheon +sconcheons +scone +scones +scoop +scooper +scoopers +scoopful +scoopfuls +scoops +scoot +scooter +scooters +scoots +scop +scope +scopes +scopolamine +scopula +scopulas +scorch +scorcher +scorchers +scorches +scordatura +scordaturas +score +scored +scorer +scorers +scores +scoria +scorn +scorner +scorners +scornfulness +scorns +scorpaenid +scorpaenoid +scorper +scorpers +scorpio +scorpion +scorpions +scorpios +scorzonera +scorzoneras +scot +scotch +scotches +scoter +scoters +scotoma +scotomas +scotopia +scoundrel +scoundrels +scour +scourer +scourers +scourge +scourger +scourgers +scourges +scouring +scourings +scours +scouse +scouses +scout +scouter +scouters +scouth +scouting +scoutings +scouts +scow +scowl +scowls +scows +scrabble +scrabbler +scrabblers +scrabbles +scrag +scragginess +scrags +scraich +scraichs +scramble +scrambler +scramblers +scrambles +scran +scrap +scrape +scraper +scraperboard +scraperboards +scrapers +scrapes +scrapie +scraping +scrapings +scrappiness +scrapple +scrapples +scraps +scratch +scratcher +scratchers +scratches +scratchiness +scratching +scratchings +scratchpad +scratchpads +scrawl +scrawler +scrawlers +scrawls +scrawniness +screak +screaks +scream +screamer +screamers +screaming +screams +scree +screech +screecher +screechers +screeches +screeching +screed +screeds +screen +screening +screenings +screenplay +screenplays +screens +screes +screw +screwer +screwers +screwing +screwings +screws +scribble +scribbler +scribblers +scribbles +scribe +scriber +scribers +scribes +scrim +scrimmage +scrimmager +scrimmagers +scrimmages +scrims +scrimshaw +scrimshaws +scrip +scrips +script +scriptorium +scripts +scripture +scriptures +scrivener +scriveners +scrod +scrods +scrofula +scrog +scrogs +scroll +scrolls +scrollwork +scrooge +scrooges +scroop +scroops +scrophularia +scrophularias +scrotum +scrotums +scrounger +scroungers +scrub +scrub-bird +scrubber +scrubbers +scrubbing +scrubland +scrublands +scrubs +scruff +scruffs +scrum +scrummage +scrummager +scrummagers +scrummages +scrumpies +scrumpy +scrums +scrunch +scrunches +scruple +scruples +scrupulosity +scrupulousness +scrutator +scrutators +scrutineer +scrutineers +scrutinies +scrutinizer +scrutinizers +scrutiny +scrutoire +scrutoires +scuba +scubas +scud +scudding +scudo +scuds +scuff +scuffing +scuffle +scuffles +scuffs +sculdudderies +sculduddery +sculduggery +sculk +sculks +scull +sculler +sculleries +scullers +scullery +sculles +sculling +scullings +scullion +scullions +sculls +sculp +sculpin +sculpins +sculps +sculptor +sculptors +sculptress +sculptresses +sculpture +sculptures +scum +scumble +scumbles +scums +scuncheon +scuncheons +scunge +scunges +scunner +scunners +scup +scupper +scuppernong +scuppernongs +scuppers +scups +scurf +scurfs +scurries +scurrility +scurrilousness +scurry +scurviness +scurvy +scut +scuta +scutage +scutages +scutch +scutcheon +scutcheons +scutches +scute +scutellation +scutellations +scutellum +scutes +scuts +scutter +scutters +scuttle +scuttles +scutum +scyphistoma +scyphistomas +scyphozoan +scyphus +scythe +scythes +sea +sea-ear +sea-god +sea-gods +sea-maid +sea-poacher +sea-rocket +seabed +seaboard +seaboards +seadrome +seadromes +seafarer +seafarers +seafaring +seafront +seafronts +seagull +seagulls +seal +seal-point +sealant +sealants +sealer +sealeries +sealers +sealery +sealing +sealings +seals +sealskin +sealskins +sealyham +sealyhams +seam +seaman +seamanship +seamark +seamarks +seamer +seamers +seaminess +seams +seamstress +seamstresses +seaplane +seaplanes +seaport +seaports +seaquake +seaquakes +sear +search +searcher +searchers +searches +searching +searchingness +searchlight +searchlights +sears +seas +seascape +seascapes +seasick +seasickness +seaside +seasides +season +seasonableness +seasoner +seasoners +seasoning +seasonings +seasons +seat +seater +seaters +seating +seatings +seats +seaway +seaways +seaweed +seaweeds +seaworthiness +seborrhea +seborrhoea +sebum +sec +secant +secants +secco +seccos +secernment +secernments +secession +secessionism +secessionist +secessionists +secessions +sech +seckel +seckels +seclusion +seclusions +seconal +second +second-in-command +second-rater +second-raters +secondaries +secondary +seconde +secondees +seconder +seconders +secondment +secondments +secondo +seconds +secrecies +secrecy +secret +secretaire +secretaires +secretariat +secretariate +secretariates +secretariats +secretaries +secretary +secretary-general +secretaryship +secretaryships +secretes +secretin +secreting +secretion +secretions +secretiveness +secretness +secrets +secs +sect +sectarian +sectarianism +sectarians +sectaries +sectary +section +sectionalisation +sectionalism +sectionalist +sectionalization +sections +sector +sectors +sects +secular +secularisation +secularisations +secularism +secularist +secularists +secularities +secularity +secularization +secularizations +seculars +secundine +secundines +secureness +securities +security +sedan +sedans +sedateness +sedation +sedative +sedatives +sedge +sedges +sedile +sedilia +sediment +sedimentation +sedimentologist +sedimentology +sediments +sedition +seditions +seditiousness +seducer +seducers +seduction +seductions +seductiveness +seductress +seductresses +sedulity +sedulousness +sedum +sedums +see +see-through +seecatch +seed +seedbed +seedbeds +seedcake +seedcakes +seedcase +seedcases +seeder +seeders +seediness +seedling +seedlings +seeds +seedsman +seeing +seeings +seek +seeker +seekers +seeking +seeks +seemer +seemers +seeming +seemings +seemliness +seep +seepage +seepages +seeps +seer +seeress +seeresses +seers +seersucker +sees +seesaw +seesaws +seethe +seethes +segar +segars +segment +segmentation +segmentations +segments +segno +segnos +sego +segos +segregation +segregationist +segregationists +segregations +seguidilla +seguidillas +sei +seicento +seiche +seiches +seif +seifs +seigneur +seigneurs +seignior +seigniorage +seigniorages +seigniories +seigniors +seigniory +seignories +seignory +seine +seiner +seiners +seines +seis +seisin +seising +seisins +seism +seismism +seismogram +seismograms +seismograph +seismographer +seismographers +seismographs +seismography +seismologist +seismologists +seismology +seismometry +seismoscope +seismoscopes +seisms +seizer +seizers +seizin +seizing +seizings +seizins +seizure +seizures +sekos +sekoses +selachian +selachians +selaginella +selaginellas +selah +selahs +selectee +selectees +selection +selections +selectivity +selectness +selector +selectors +selenate +selenates +selenide +selenides +selenite +selenites +selenium +selenodont +selenograph +selenographer +selenographers +selenographs +selenography +selenology +selenomorphology +self +self-abandonment +self-abasement +self-abnegation +self-absorption +self-abuse +self-accusation +self-action +self-actualization +self-admiration +self-advancement +self-advertisement +self-aggrandisement +self-aggrandizement +self-analysis +self-annihilation +self-applause +self-appreciation +self-approbation +self-approval +self-assertion +self-assumption +self-assurance +self-awareness +self-betrayal +self-cocker +self-command +self-commitment +self-conceit +self-conceitedness +self-concept +self-concern +self-condemnation +self-confidence +self-congratulation +self-consciousness +self-consequence +self-consistency +self-consistent +self-contempt +self-content +self-control +self-creation +self-criticism +self-deceit +self-deception +self-defence +self-degradation +self-delight +self-delusion +self-denial +self-dependence +self-despair +self-destruction +self-determination +self-determining +self-development +self-devotion +self-direction +self-director +self-discipline +self-disparagement +self-dispraise +self-dissociation +self-distrust +self-doubt +self-dramatization +self-drawing +self-effacement +self-election +self-employment +self-enjoyment +self-enrichment +self-esteem +self-examination +self-examinations +self-exertion +self-existence +self-explication +self-expression +self-feeder +self-fertilisation +self-fertilization +self-flattery +self-glorification +self-government +self-hate +self-hatred +self-heal +self-help +self-humiliation +self-hypnosis +self-hypnotism +self-identity +self-image +self-immolation +self-importance +self-impregnation +self-improvement +self-inductance +self-induction +self-indulgence +self-insurance +self-interest +self-justification +self-killer +self-knowledge +self-love +self-mastery +self-motion +self-murder +self-murderer +self-observation +self-pity +self-pollination +self-pollution +self-possession +self-praise +self-preparation +self-preservation +self-pride +self-profit +self-propulsion +self-protection +self-punishment +self-realisation +self-realization +self-regard +self-reliance +self-renunciation +self-repose +self-repression +self-reproach +self-reproof +self-respect +self-restraint +self-revelation +self-reverence +self-righteousness +self-rule +self-sacrifice +self-satisfaction +self-seeker +self-seekers +self-seeking +self-service +self-sovereignty +self-starter +self-starters +self-sufficiency +self-suggestion +self-support +self-sustainment +self-sustenance +self-sustentation +self-torment +self-tormentor +self-torture +self-transformation +self-treatment +self-trust +self-understanding +self-vindication +self-violence +self-will +self-worship +self-worth +self-wrong +selfhood +selfishness +selflessness +selfness +selfs +selfsameness +sell +seller +sellers +selles +selling +selling-plater +sells +seltzer +seltzers +selva +selvage +selvages +selvas +selvedge +selvedges +selves +semanteme +semantemes +semanticist +semanticists +semantics +semaphore +semaphores +semasiologist +semasiologists +semasiology +semblable +semblance +semblances +semeiology +sememe +sememes +semen +semens +semester +semesters +semi +semibold +semibreve +semibreves +semicircle +semicircles +semicolon +semicolons +semicoma +semicomas +semiconductor +semiconductors +semicylinder +semicylinders +semidesert +semies +semifinal +semifinalist +semifinalists +semifinals +semifluid +semifluids +seminar +seminarian +seminarians +seminaries +seminarist +seminarists +seminars +seminary +semination +seminations +semiology +semiotician +semiotics +semipermeability +semiporcelain +semiprofessional +semiprofessionals +semiquaver +semiquavers +semis +semises +semisolid +semitone +semitones +semitrailer +semitrailers +semitransparency +semivowel +semivowels +semolina +sempstress +sempstresses +sen +sena +senate +senates +senator +senators +senatorship +senatorships +send +send-off +send-offs +sendal +sendals +sender +senders +sending +sendings +sends +senecio +senecios +senega +senegas +senescence +seneschal +seneschals +senility +senior +seniorities +seniority +seniors +senna +sennas +sennet +sennets +sennight +sennights +sennit +sennits +sens +sensation +sensationalism +sensationalist +sensationalists +sensationism +sensationist +sensationists +sensations +sense +senselessness +senses +sensibilia +sensibilities +sensibility +sensible +sensibleness +sensillum +sensing +sensings +sensitisation +sensitiser +sensitisers +sensitiveness +sensitivities +sensitivity +sensitization +sensitizer +sensitizers +sensitizing +sensitometer +sensitometers +sensor +sensorium +sensoriums +sensors +sensualisation +sensualism +sensualist +sensualists +sensuality +sensualization +sensualness +sensum +sensuousness +sentence +sentencer +sentencers +sentences +sententiousness +sentience +sentiency +sentient +sentients +sentiment +sentimentalisation +sentimentalism +sentimentalist +sentimentalists +sentimentality +sentimentalization +sentiments +sentinel +sentinels +sentries +sentry +sepal +sepals +separability +separableness +separate +separateness +separates +separation +separations +separatism +separatist +separatists +separator +separators +separatrix +separatrixes +sepia +sepias +sepiolite +sepoy +sepoys +seppuku +seppukus +sepsis +sept +septa +septarium +septation +septations +septemvir +septemvirate +septemvirates +septemvirs +septenaries +septenary +septennium +septentrion +septentriones +septentrions +septet +septets +septette +septettes +septic +septicaemia +septicemia +septicity +septillion +septillions +septime +septimes +septs +septuagenarian +septuagenarians +septuagenaries +septuagenary +septum +septuor +septuors +septuplet +septuplets +sepulcher +sepulchers +sepulchre +sepulchres +sepulture +sepultures +sequaciousness +sequacity +sequel +sequela +sequels +sequence +sequencer +sequencers +sequences +sequent +sequentiality +sequents +sequestrant +sequestrants +sequestration +sequestrations +sequestrator +sequestrators +sequestrum +sequin +sequins +sequoia +sequoias +sera +seraglio +seraglios +serai +serail +serails +serais +serape +serapes +seraph +seraphim +seraphims +seraphs +serdab +serdabs +sere +serein +sereins +serenade +serenader +serenaders +serenades +serenata +serenatas +serendipity +sereneness +serenity +seres +serf +serfdom +serfhood +serfs +serge +sergeant +sergeants +serges +serial +serialisation +serialisations +serialism +serialisms +serialist +serialists +serialization +serializations +serials +sericin +sericite +sericterium +sericulture +sericulturist +sericulturists +seriema +seriemas +series +series-wound +serif +serifs +serigraph +serigrapher +serigraphers +serigraphs +serigraphy +serin +serine +seringa +seringas +serins +seriousness +serjeant +serjeanties +serjeants +serjeanty +sermon +sermoniser +sermonisers +sermonizer +sermonizers +sermons +serologist +serologists +serology +serosa +serosas +serosity +serotherapy +serotine +serotines +serotonin +serow +serows +serpent +serpentine +serpentinization +serpents +serpigo +serpigoes +serranid +serranids +serration +serrations +serratus +serratuses +serrulation +serrulations +sertularian +sertularians +serum +serums +serval +servals +servant +servants +serve +server +servers +serves +service +serviceability +serviceableness +serviceman +services +servicing +serviette +serviettes +servilities +servility +serving +servings +servitor +servitors +servitude +servitudes +servo +servomechanism +servomotor +servomotors +sesame +sesames +seseli +seselis +sesquialtera +sesquialteras +sesquicarbonate +sesquicentennial +sesquioxide +sesquipedalian +sesquipedality +sesquiterpene +sess +session +sessions +sesterce +sesterces +sestertium +sestet +sestets +sestina +sestinas +set +set-off +set-to +set-tos +set-up +set-ups +seta +setback +setbacks +seton +setons +sets +sett +settee +settees +setter +setters +setterwort +setterworts +setting +settings +settle +settledness +settlement +settlements +settler +settlers +settles +settling +settlings +settlor +settlors +setts +seven +sevens +seventeen +seventeens +seventeenth +seventeenths +seventh +sevenths +seventies +seventieth +seventieths +seventy +seventy-eight +severalties +severalty +severance +severances +severeness +severies +severing +severity +severy +sewage +sewellel +sewellels +sewer +sewerage +sewers +sewing +sewings +sex +sexagenarian +sexagenarians +sexagenaries +sexagenary +sexagesimal +sexcentenaries +sexcentenary +sexennial +sexes +sexfoil +sexfoils +sexiness +sexism +sexist +sexists +sexlessness +sexologist +sexologists +sexology +sexpot +sexpots +sext +sextant +sextants +sextet +sextets +sextette +sextettes +sextile +sextiles +sextillion +sextillions +sextodecimo +sextodecimos +sextolet +sextolets +sexton +sextons +sexts +sextuple +sextuples +sextuplet +sextuplets +sexualities +sexuality +sferics +sforzando +sforzandos +sfumato +sfumatos +sgraffito +shabbiness +shack +shackle +shackles +shacks +shad +shadberries +shadberry +shadblow +shadblows +shadbush +shadbushes +shaddock +shaddocks +shade +shades +shadiness +shading +shadings +shadoof +shadoofs +shadow +shadower +shadowers +shadowgraph +shadowgraphs +shadowiness +shadowing +shadowings +shadows +shads +shaduf +shadufs +shaft +shafting +shaftings +shafts +shag +shagginess +shagging +shaggymane +shagreen +shagreens +shags +shah +shahs +shake +shake-up +shake-ups +shaker +shakers +shakes +shakiness +shaking +shakings +shako +shakoes +shakos +shakudo +shale +shallon +shallons +shalloon +shallop +shallops +shallot +shallots +shallow +shallowness +shallows +shalwar +sham +shaman +shamanism +shamanist +shamanists +shamans +shamba +shamble +shambles +shambling +shamblings +shame +shamefacedness +shamefulness +shamelessness +shames +shammash +shammer +shammers +shammes +shammies +shammy +shampoo +shampooer +shampooers +shampoos +shamrock +shamrocks +shams +shamus +shamuses +shan +shan't +shandies +shandrydan +shandrydans +shandy +shandygaff +shanghai +shanghaier +shanghaiers +shanghais +shank +shanks +shannies +shanny +shans +shantey +shanteys +shanties +shantung +shantungs +shanty +shape +shapelessness +shapeliness +shaper +shapers +shapes +shaping +shapings +shard +shards +share +share-out +share-outs +sharefarmer +sharefarmers +shareholder +shareholders +shareholding +shareholdings +sharer +sharers +shares +shareware +sharif +sharifs +sharing +sharings +shark +sharks +sharkskin +sharkskins +sharp +sharpener +sharpeners +sharper +sharpers +sharpie +sharpies +sharpness +sharps +sharpshooter +sharpshooters +sharpshooting +shashlik +shashliks +shastra +shastras +shatter +shattering +shatters +shave +shaveling +shavelings +shaver +shavers +shaves +shavie +shavies +shaving +shavings +shaw +shawl +shawls +shawm +shawms +shaws +shay +shays +she +she-devil +she-oak +shea +sheading +sheadings +sheaf +sheafs +shealing +shealings +shear +shearer +shearers +shearing +shearings +shearling +shearlings +shears +shearwater +shearwaters +sheas +sheath +sheathes +sheathing +sheathings +sheaths +sheave +sheaves +shebang +shebangs +shebeen +shebeening +shebeenings +shebeens +shechitah +shed +shedder +shedders +shedding +sheddings +sheds +sheen +sheens +sheep +sheep's-bit +sheep-dip +sheepdog +sheepdogs +sheepfold +sheepfolds +sheepishness +sheepshank +sheepshanks +sheepskin +sheepskins +sheepwalk +sheepwalks +sheer +sheerlegs +sheers +sheet +sheeting +sheetings +sheets +shehitah +sheik +sheikdom +sheikdoms +sheikh +sheikha +sheikhas +sheikhdom +sheikhdoms +sheikhs +sheiks +sheila +sheilas +shekel +shekels +sheldrake +sheldrakes +shelduck +shelducks +shelf +shell +shellac +shellacking +shellackings +shellacs +shellback +shellbacks +shellbark +shellbarks +shellfire +shellfires +shellfish +shellfishes +shelling +shellings +shells +shelter +shelterbelt +shelterer +shelterers +shelters +sheltie +shelties +shelty +shelves +shelving +shelvings +shenanigan +shenanigans +shepherd +shepherd's-purse +shepherdess +shepherdesses +shepherds +sherbet +sherbets +sherd +sherds +sherif +sheriff +sheriffs +sherifs +sherlock +sherlocks +sherries +sherry +sherwani +sherwanis +shes +shetland +shetlands +sheugh +sheughs +shewbread +shewbreads +shiatsu +shibah +shibahs +shibboleth +shibboleths +shicker +shiel +shield +shield-fern +shielder +shielders +shielding +shields +shieling +shielings +shiels +shier +shiers +shies +shift +shiftiness +shifting +shiftings +shiftlessness +shifts +shigella +shigellas +shigellosis +shih-tzu +shih-tzus +shiitake +shikar +shikari +shikaris +shikars +shiksa +shiksas +shikse +shikses +shill +shillalah +shillalahs +shillelagh +shillelaghs +shilling +shillings +shillyshallies +shillyshally +shim +shimmer +shimmers +shimmies +shimmy +shims +shin +shinbone +shinbones +shindies +shindig +shindigs +shindy +shine +shiner +shiners +shines +shingle +shingler +shinglers +shingles +shingling +shinglings +shininess +shining +shinnies +shinny +shins +shinties +shinty +ship +ship-breaker +ship-breakers +shipboard +shipboards +shipbuilder +shipbuilders +shipbuilding +shipbuildings +shiplap +shiplaps +shipload +shiploads +shipman +shipmate +shipmates +shipment +shipments +shippen +shippens +shipper +shippers +shipping +shippings +shippon +shippons +ships +shipway +shipways +shipwreck +shipwrecks +shipwright +shipwrights +shipyard +shipyards +shiralee +shiralees +shire +shires +shirk +shirker +shirkers +shirking +shirks +shirr +shirring +shirrings +shirrs +shirt +shirt-tail +shirt-tails +shirting +shirts +shirtwaist +shirtwaister +shirtwaisters +shirtwaists +shittah +shittahs +shittim +shittims +shiv +shivah +shivahs +shivaree +shive +shiver +shiverer +shiverers +shivering +shiverings +shivers +shives +shivoo +shivoos +shivs +shlemiel +shlemiels +shlock +shoal +shoals +shoat +shoats +shochet +shock +shocker +shockers +shockingness +shocks +shockstall +shoddies +shoddiness +shoddy +shoe +shoeblack +shoeblacks +shoebox +shoeboxes +shoehorn +shoehorns +shoelace +shoelaces +shoemaker +shoemakers +shoemaking +shoer +shoers +shoes +shoeshine +shoeshines +shoestring +shoestrings +shoetree +shoetrees +shofar +shofars +shog +shogi +shogs +shogun +shogunate +shogunates +shoguns +shoji +shojis +shoo-in +shoo-ins +shoofly +shoogle +shoogles +shook +shooks +shool +shools +shoon +shoot +shoot-'em-up +shooter +shooters +shooting +shootings +shoots +shop +shopful +shopfuls +shophar +shophars +shopkeeper +shopkeepers +shoplifter +shoplifters +shoplifting +shopman +shopped +shopper +shoppers +shopping +shops +shoptalk +shopwalker +shopwalkers +shopwoman +shoran +shore +shoreline +shorelines +shores +shoring +shorings +short +short-sightedness +short-stop +shortage +shortages +shortbread +shortbreads +shortcake +shortcakes +shortcoming +shortcomings +shortcut +shortcuts +shortener +shorteners +shortening +shortfall +shortfalls +shorthand +shorthorn +shorthorns +shortie +shorties +shortness +shorts +shorty +shot +shot-blasting +shot-putter +shot-putters +shote +shotes +shotgun +shotguns +shots +shott +shotting +shotts +shoulder +shoulders +shouldn't +shout +shouter +shouters +shouting +shoutings +shouts +shove +shove-halfpenny +shovel +shoveler +shovelers +shovelful +shovelfuls +shovelnose +shovelnoses +shovels +shover +shovers +shoves +show +show-off +show-offs +showboat +showboats +showbread +showbreads +showcase +showcases +shower +showeriness +showers +showgirl +showgirls +showiness +showing +showings +showman +showmanship +showpiece +showpieces +showplace +showplaces +showroom +showrooms +shows +shraddha +shraddhas +shrapnel +shrapnels +shred +shredder +shredders +shreds +shrew +shrewdie +shrewdies +shrewdness +shrewishness +shrews +shriek +shrieker +shriekers +shrieking +shriekings +shrieks +shrievalties +shrievalty +shrieve +shrieves +shrift +shrifts +shrike +shrikes +shrilling +shrillings +shrillness +shrimp +shrimper +shrimpers +shrimps +shrine +shrines +shrink +shrinkage +shrinkages +shrinker +shrinkers +shrinking +shrinks +shroff +shroffs +shroud +shrouds +shrub +shrubberies +shrubbery +shrubbiness +shrubs +shrug +shrugs +shuck +shucker +shuckers +shucks +shuckses +shudder +shudders +shuffle +shuffler +shufflers +shuffles +shuffling +shufflings +shufties +shufty +shul +shuls +shunner +shunners +shunning +shunt +shunter +shunters +shunts +shut +shut-in +shut-off +shut-offs +shutes +shuts +shutter +shutterbug +shutterbugs +shuttering +shutters +shutting +shuttle +shuttlecock +shuttlecocks +shuttles +shwa +shwas +shy +shyer +shyers +shyness +shyster +shysters +sial +sialagogic +sialagogue +sialagogues +sialolith +sialoliths +siamang +siamangs +siamese +siameses +sib +sibilance +sibilancy +sibilant +sibilants +sibling +siblings +sibs +sibship +sibships +sibyl +sibyls +siccative +siccatives +sice +sices +siciliano +sicilianos +sick +sick-out +sickener +sickeners +sickie +sickies +sickle +sickles +sickliness +sickness +sicknesses +sicks +sida +sidalcea +sidalceas +sidas +siddur +side +side-glance +side-glances +side-saddle +side-wheeler +side-wheelers +side-whiskers +sideboard +sideboards +sideburn +sideburns +sidecar +sidecars +sidelight +sidelights +sideman +siderite +siderites +siderolite +sideropenia +siderosis +siderostat +siderostats +sides +sidesman +sideswipe +sideswiper +sideswipers +sideswipes +sidetrack +sidetracks +sidewalk +sidewalks +sidewall +sidewalls +sidewinder +sidewinders +siding +sidings +sidle +sidles +siege +sieges +siemens +sienna +siennas +sierra +sierras +siesta +siestas +sieve +sieves +sifaka +sifakas +sifter +sifters +sifting +siftings +sigh +sigher +sighers +sighs +sight +sight-reader +sighter +sighters +sighting +sightings +sightlessness +sightliness +sights +sightscreen +sightscreens +sightseeing +sightseer +sightseers +sigil +sigillation +sigillations +sigils +sigla +sigma +sigmation +sigmations +sigmatism +sigmoid +sigmoidectomy +sigmoidoscope +sign +signal +signaler +signalers +signaling +signaller +signallers +signalman +signals +signatories +signatory +signature +signatures +signboard +signboards +signer +signers +signet +signets +significance +significances +significancies +significancy +signification +significations +significs +signing +signor +signora +signoras +signore +signories +signorina +signorinas +signorino +signors +signory +signpost +signposts +signs +sika +sikas +sike +sikes +silage +silages +sild +silds +silence +silencer +silencers +silences +silene +silenes +silent +silentness +silenus +silenuses +silesia +silex +silhouette +silhouettes +silica +silicate +silicates +silicide +silicides +siliciferous +silicification +silicifications +silicium +silicle +silicles +silicon +silicone +silicones +silicosis +siliqua +siliquas +silique +siliques +silk +silk-screen +silkiness +silks +silkweed +silkworm +silkworms +sill +sillabub +sillabubs +siller +sillers +sillies +sillimanite +silliness +sills +silly +silo +silos +silphium +silphiums +silt +siltation +siltations +silts +siltstone +silurid +silva +silvan +silvans +silvas +silver +silverback +silverbacks +silvers +silverside +silversides +silversmith +silversmithing +silversmiths +silvertail +silverware +silverweed +silverweeds +silviculture +sim +sima +simar +simarouba +simaroubas +simars +simazine +simian +simians +similarities +similarity +simile +similes +similitude +similitudes +simitar +simitars +simmer +simmering +simmers +simnel +simnels +simoniac +simoniacs +simonies +simonist +simonists +simony +simoom +simooms +simoon +simoons +simp +simper +simpers +simple +simpleness +simples +simpleton +simpletons +simplex +simplicities +simplicity +simplification +simplifications +simplism +simps +sims +simulacre +simulacres +simulacrum +simulacrums +simular +simulars +simulation +simulations +simulator +simulators +simulcast +simulcasts +simulium +simultaneity +simultaneousness +sin +sinanthropus +sinapism +sinapisms +sincereness +sincerity +sinciput +sinciputs +sindon +sindons +sine +sinecure +sinecures +sinecurism +sinecurist +sinecurists +sines +sinew +sinews +sinfonia +sinfonias +sinfonietta +sinfoniettas +sinfulness +sing +singableness +singe +singer +singers +singes +singing +singings +single +single-action +single-cross +single-decker +single-end +single-foot +single-mindedness +single-spacing +singleness +singles +singlestick +singlesticks +singlet +singleton +singletons +singletree +singletrees +singlets +sings +singsong +singsongs +singspiel +singspiels +singular +singularities +singularity +singularization +singulars +singultus +sinh +sinistrality +sink +sinkage +sinkages +sinker +sinkers +sinking +sinkings +sinks +sinlessness +sinner +sinners +sinnet +sinnets +sinning +sinopia +sinopias +sinopis +sins +sinter +sinters +sinuation +sinuations +sinuosities +sinuosity +sinuousness +sinus +sinuses +sinusitis +sinusoid +sinusoids +sip +sipes +siphon +siphonage +siphonages +siphonophore +siphonophores +siphonostele +siphonosteles +siphons +sipper +sippers +sippet +sippets +sipping +sips +sipunculid +sipunculids +sir +sirdar +sirdars +sire +siren +sirenian +sirenians +sirens +sires +siriasis +siris +sirloin +sirloins +sirocco +siroccos +sirrah +sirrahs +sirs +sirup +sirups +sirvente +sirventes +sis +sisal +siskin +siskins +siss +sissies +sissoo +sissoos +sissy +sister +sister-in-law +sisterhood +sisterhoods +sisterliness +sisters +sistrum +sit-in +sit-ins +sit-upon +sitar +sitarist +sitarists +sitars +sitatunga +sitatungas +sitcom +sitcoms +site +sites +sitfast +sitfasts +sitology +sitter +sitters +sitting +sittings +situating +situation +situations +situla +situs +situtunga +situtungas +sitzkrieg +sitzkriegs +siwash +six +six-footer +six-footers +six-gun +six-pack +six-packs +six-shooter +six-shooters +sixain +sixaines +sixains +sixer +sixers +sixes +sixpence +sixpences +sixte +sixteen +sixteenmo +sixteenmos +sixteens +sixteenth +sixteenths +sixtes +sixth +sixth-former +sixth-formers +sixths +sixties +sixtieth +sixtieths +sixty +sizar +sizars +sizarship +sizarships +size +sizer +sizers +sizes +siziness +sizing +sizings +sizzle +sizzler +sizzlers +sizzles +sjambok +sjamboks +skald +skalds +skaldship +skat +skate +skateboard +skateboarder +skateboarders +skateboarding +skateboards +skatepark +skater +skaters +skates +skating +skatings +skatole +skats +skean +skeans +skedaddle +skedaddler +skedaddlers +skedaddles +skeet +skeg +skegs +skeigh +skein +skeins +skeleton +skeletons +skelf +skelfs +skellies +skellum +skellums +skelly +skelp +skelps +skep +skepful +skepfuls +skeps +skeptic +skepticism +skeptics +skerrick +skerries +skerry +sketch +sketchability +sketcher +sketchers +sketches +sketchiness +skew +skewbald +skewbalds +skewer +skewers +skewing +skewness +skews +ski +skiagram +skiagrams +skiagraph +skiagraphs +skiamachies +skiamachy +skiascopy +skiatron +skiatrons +skibob +skibobs +skid +skidlid +skidlids +skidpan +skidpans +skids +skier +skiers +skies +skiff +skiffle +skiffs +skiing +skiings +skijoring +skilfulness +skill +skillet +skillets +skillfulness +skilling +skillings +skillion +skills +skilly +skim +skimmer +skimmers +skimmia +skimmias +skimming +skimmings +skimpiness +skims +skin +skin-diver +skin-divers +skin-pop +skin-pops +skinflint +skinflints +skinful +skinfuls +skinhead +skinheads +skink +skinks +skinner +skinners +skinniness +skinny +skinny-dipper +skinny-dippers +skins +skip +skipjack +skipjacks +skiplane +skiplanes +skipper +skippers +skippet +skippets +skipping-rope +skipping-ropes +skips +skirl +skirling +skirlings +skirls +skirmish +skirmisher +skirmishers +skirmishes +skirr +skirret +skirrets +skirrs +skirt +skirter +skirters +skirting +skirtings +skirts +skis +skit +skite +skites +skits +skittishness +skittle +skittles +skiver +skivers +skivvies +skivvy +skivy +sklent +sklents +skokiaan +skokiaans +skua +skuas +skulduggery +skulk +skulker +skulkers +skulking +skulkings +skulks +skull +skullduggery +skulls +skunk +skunks +skutterudite +sky +sky-blue +skydiver +skydivers +skydiving +skyey +skyjacker +skyjackers +skylab +skylark +skylarker +skylarkers +skylarks +skylight +skylights +skyline +skylines +skysail +skysails +skyscape +skyscapes +skyscraper +skyscrapers +skyway +skyways +skywriter +skywriters +skywriting +slab +slabber +slabbers +slabs +slack +slackening +slackenings +slacker +slackers +slacking +slackness +slacks +slag +slags +slain +slaister +slaisters +slalom +slaloms +slam +slams +slander +slanderer +slanderers +slanderousness +slanders +slang +slanginess +slangs +slant +slants +slap +slapjack +slapper +slappers +slaps +slapshot +slapshots +slapstick +slapsticks +slash +slashes +slashing +slashings +slat +slatch +slate +slater +slaters +slates +slather +slatiness +slating +slatings +slats +slattern +slatternliness +slatterns +slaughter +slaughterer +slaughterers +slaughterman +slaughters +slave +slave-driver +slave-drivers +slaver +slavers +slavery +slaves +slavey +slaveys +slavishness +slavocracy +slavocrat +slavocrats +slaw +slaws +slayer +slayers +slaying +sleave +sleaves +sleaze +sleazes +sleaziness +sled +sledding +sleddings +sledge +sledges +sleds +sleeker +sleekers +sleekness +sleep +sleeper +sleepers +sleepiness +sleeping +sleepings +sleeplessness +sleeps +sleepwalker +sleepwalkers +sleepwalking +sleet +sleetiness +sleets +sleeve +sleeves +sleeving +sleigh +sleigher +sleighers +sleighs +sleight +sleights +slenderness +sleuth +sleuthing +sleuths +slew +slews +sley +sleys +slice +slicer +slicers +slices +slicing +slicings +slick +slickenside +slickensides +slicker +slickers +slickness +slicks +slide +slider +sliders +slides +slier +slight +slighter +slightness +slights +slime +slimes +sliminess +slimmer +slimmers +slimness +sling +slingback +slingbacks +slinger +slingers +slinging +slings +slink +slinks +slip +slip-on +slip-ons +slipcover +slipcovers +slipes +slipover +slipovers +slippage +slippages +slipper +slipperiness +slippers +slipperwort +slipperworts +slippiness +slips +slipslop +slipslops +slipstream +slipstreams +slipware +slipwares +slipway +slipways +slit +slither +slithers +slits +sliver +slivers +slivovitz +slivovitzes +slob +slobber +slobbers +slobs +sloe +sloes +slog +slogan +sloganeer +sloganeering +sloganeers +slogans +slogger +sloggers +slogs +sloid +sloop +sloops +sloot +sloots +slop +slope +slopes +sloppiness +slops +slopwork +slosh +sloshes +slot +sloth +slothfulness +sloths +slots +slotter +slotters +slouch +sloucher +slouchers +slouches +slough +sloughing +sloughs +sloven +slovenliness +slovens +slowcoach +slowcoaches +slowing +slowings +slowness +slowpoke +slowpokes +slowworm +slowworms +slub +slubberdegullion +slubs +sludge +sludges +sludgy +slue +slues +slug +slugfest +slugfests +sluggard +sluggards +slugger +sluggers +sluggishness +slugs +sluice +sluices +sluit +slum +slumber +slumberer +slumberers +slumberland +slumbers +slumlord +slumlords +slummer +slummers +slummy +slump +slumps +slums +slur +slurp +slurps +slurries +slurry +slurs +slush +slushes +slushiness +slushy +slut +sluts +sluttishness +slyboots +slyness +slype +slypes +smack +smacker +smackers +smacking +smackings +smacks +small +small-arm +small-arms +small-mindedness +small-timer +small-timers +smallage +smallages +smallholder +smallholders +smallholding +smallholdings +smallness +smallpox +smalls +smalt +smaltite +smalto +smaltos +smalts +smaragd +smaragdine +smaragdite +smaragds +smarm +smarminess +smarms +smart +smartie +smarties +smarting +smartness +smarts +smarty-pants +smash +smash-up +smash-ups +smasher +smashers +smashes +smashing +smatch +smatches +smatter +smatterer +smatterers +smattering +smatterings +smatters +smear +smeariness +smears +smeek +smeeks +smegma +smegmas +smell +smeller +smellers +smelliness +smelling +smellings +smells +smelt +smelter +smelteries +smelters +smeltery +smelts +smew +smews +smidgen +smidgens +smidgeon +smidgeons +smidgin +smidgins +smilax +smilaxes +smile +smiler +smilers +smiles +smiling +smilings +smirch +smirches +smirk +smirks +smit +smiter +smiters +smites +smith +smitheries +smithery +smithies +smiths +smithsonite +smithy +smits +smock +smocking +smockings +smocks +smog +smogs +smoke +smokeho +smokehos +smokelessness +smoker +smokers +smokes +smoking +smoking-concert +smokings +smoko +smokos +smolder +smolt +smolts +smooch +smooches +smooching +smooth +smoother +smoothers +smoothes +smoothie +smoothies +smoothness +smooths +smother +smothers +smoulder +smoulders +smriti +smudge +smudges +smudginess +smuggler +smugglers +smuggling +smugglings +smugness +smut +smutch +smutches +smuts +smuttiness +smytrie +smytries +snack +snacks +snaffle +snaffles +snafu +snag +snaggletooth +snags +snail +snailing +snails +snake +snakebird +snakebirds +snakebite +snakebites +snakeroot +snakeroots +snakes +snakeskin +snakeweed +snakeweeds +snakewood +snakewoods +snakiness +snap +snapdragon +snapdragons +snapper +snappers +snappiness +snappishness +snaps +snapshot +snapshots +snare +snarer +snarers +snares +snarl +snarl-up +snarl-ups +snarler +snarlers +snarls +snash +snashes +snatch +snatcher +snatchers +snatches +snath +snathes +snaths +snazziness +sneak +sneaker +sneakers +sneakiness +sneaks +sneck +snecks +sneer +sneerer +sneerers +sneering +sneerings +sneers +sneesh +sneeshes +sneeze +sneezes +sneezeweed +sneezeweeds +sneezewort +sneezeworts +sneezing +sneezings +snell +snells +snib +snibs +snick +snicker +snickers +snickersnee +snicket +snickets +snicks +snide +snideness +snides +sniff +sniffer +sniffers +sniffiness +sniffle +sniffler +snifflers +sniffles +sniffs +snifter +snifters +snigger +sniggerer +sniggerers +sniggers +sniggle +sniggles +snip +snipe +sniper +snipers +snipes +snippet +snippetiness +snippets +snipping +snippings +snips +snit +snitch +snitches +snits +snivel +sniveller +snivellers +snivels +snob +snobbery +snobbishness +snobbism +snobs +snog +snogging +snogs +snood +snoods +snook +snooker +snookers +snooks +snool +snools +snoop +snooper +snoopers +snooperscope +snooperscopes +snoops +snoot +snootiness +snoots +snooze +snoozer +snoozers +snoozes +snore +snorer +snorers +snores +snoring +snorings +snorkel +snorkeling +snorkels +snort +snorter +snorters +snorting +snortings +snorts +snot +snots +snotties +snottiness +snotty +snout +snouts +snow +snow-in-summer +snow-on-the-mountain +snowball +snowballs +snowberries +snowberry +snowbush +snowbushes +snowcap +snowcaps +snowdrift +snowdrifts +snowdrop +snowdrops +snowfall +snowfalls +snowfield +snowfields +snowflake +snowflakes +snowiness +snowman +snowmobile +snowmobiles +snows +snowstorm +snowstorms +snub +snubber +snubbers +snubs +snuff +snuff-colour +snuffbox +snuffboxes +snuffer +snuffers +snuffiness +snuffle +snuffler +snufflers +snuffles +snuffs +snug +snuggeries +snuggery +snuggle +snuggles +snuggling +snugness +snugs +snye +snyes +so-and-so +so-and-sos +soak +soakage +soakaway +soakaways +soaker +soakers +soaking +soakings +soaks +soap +soapberries +soapberry +soapbox +soapboxes +soaps +soapstone +soapwort +soapworts +soar +soarer +soarers +soaring +soarings +soars +sob +sobbing +sobbings +sober-mindedness +soberer +soberness +sobersides +sobriety +sobriquet +sobriquets +sobs +socage +socager +socagers +socages +soccer +sociability +sociable +sociableness +social +socialisation +socialism +socialist +socialists +socialite +socialites +sociality +socialization +socializing +socials +societies +society +sociobiologist +sociobiologists +sociobiology +sociogram +sociograms +sociolinguist +sociolinguistics +sociolinguists +sociological +sociologism +sociologisms +sociologist +sociologists +sociology +sociometry +sociopath +sociopaths +sociopathy +sock +sockdologer +sockdologers +socket +sockets +sockeye +sockeyes +socks +socle +socles +socman +sod +soda +sodalite +sodalities +sodality +sodamide +sodas +sodbuster +sodbusters +soddenness +soddy +sodium +sodomy +sods +sofa +sofar +sofas +soffit +soffits +soft +soft-cover +soft-pedal +soft-pedals +soft-shell +soft-shoe +softa +softas +softback +softbacks +softball +softener +softeners +softening +softenings +softhead +softheads +softie +softies +softness +softs +software +softwood +softy +sogginess +soh +sohs +soil +soilage +soiling +soilings +soils +soilure +soixante-neuf +soja +sojas +sojourn +sojourner +sojourners +sojourns +soke +sokeman +sokemanry +soken +sokens +sokes +sol +sol-fa +sol-faist +solace +solacement +solacements +solaces +solan +solander +solanders +solano +solanos +solans +solanum +solanums +solarimeter +solarimeters +solarism +solarist +solarists +solarium +solariums +solarization +solarizations +solatium +soldan +soldans +solder +soldering +solderings +solders +soldier +soldieries +soldiering +soldierings +soldiers +soldiership +soldiery +soldo +sole +solecism +solecisms +solemness +solemnise +solemnises +solemnities +solemnity +solemnization +solemnizations +solemnizer +solemnizers +solemnness +solenoid +solenoids +soles +soleus +soleuses +solfatara +solfataras +solfeggio +solfeggios +solferino +solferinos +solicitation +solicitations +solicitor +solicitors +solicitorship +solicitorships +solicitousness +solicitude +solicitudes +solid +solid-state +solidago +solidagos +solidarity +solidification +solidifications +solidifying +solidities +solidity +solidness +solids +solidungulate +solidus +solifidian +solifidianism +solifidians +solifluction +solifluctions +soliloquies +soliloquiser +soliloquisers +soliloquy +soling +soliped +solipeds +solipsism +solitaire +solitaires +solitaries +solitariness +solitary +solitude +solitudes +solitudinarian +solitudinarians +sollar +sollars +solleret +sollerets +solmisation +solmisations +solmization +solmizations +solo +soloist +soloists +solonchak +solonetz +solonetzes +solos +sols +solstice +solstices +solubility +solum +solums +solute +solutes +solution +solutions +solvate +solvates +solvation +solvency +solvent +solvents +solver +solvers +solving +soma +somas +somatism +somatology +somatoplasm +somatopleure +somatopleures +somatotonia +somatotonic +somatotrophin +somatotropin +somatotype +somatotypes +somberness +sombreness +sombrero +sombreros +somebodies +somebody +someone +somersault +somersaulting +somersaults +something +somethings +somite +somites +sommelier +sommeliers +somnambulance +somnambulant +somnambulants +somnambulate +somnambulates +somnambulation +somnambulations +somnambulator +somnambulators +somnambulism +somnambulist +somnambulists +somnifacient +somniloquism +somniloquist +somniloquists +somniloquy +somnolence +somnolency +son +son-in-law +sonant +sonants +sonar +sonars +sonata +sonatas +sonatina +sonatinas +sondage +sondages +sonde +sondes +sone +sones +song +songbird +songbirds +songbook +songbooks +songfest +songfests +songfulness +songs +songster +songsters +songstress +songstresses +songwriter +songwriters +sonics +sonnet +sonneteer +sonneteers +sonnets +sonnies +sonny +sonobuoy +sonobuoys +sonogram +sonograms +sonography +sonorant +sonorants +sonorities +sonority +sonorousness +sons +sonship +soogee +soogees +sook +sooks +soot +sooth +soother +soothers +soothes +soothfastness +sooths +soothsayer +soothsayers +soothsaying +soothsayings +sootiness +soots +sop +sophism +sophisms +sophist +sophister +sophisters +sophisticate +sophisticates +sophistication +sophistications +sophistries +sophistry +sophists +sophomore +sophomores +sopor +soporiferousness +soporific +soporifics +sopors +soppiness +sopranino +sopraninos +soprano +sopranos +sops +sora +soras +sorb +sorbate +sorbates +sorbefacient +sorbefacients +sorbent +sorbents +sorbet +sorbets +sorbitol +sorbs +sorbus +sorbuses +sorcerer +sorcerers +sorceress +sorceresses +sorceries +sorcery +sordidness +sordino +sore +soredium +sorees +sorehead +soreness +sores +sorex +sorexes +sorgho +sorghos +sorghum +sorgo +sorgos +sori +sorites +sorner +sorners +soroban +sorobans +sororate +sororates +sororicide +sororicides +sororities +sorority +sorosis +sorption +sorptions +sorrel +sorrels +sorriness +sorrow +sorrower +sorrowers +sorrowfulness +sorrows +sort +sorter +sorters +sortes +sortie +sorties +sortilege +sorting +sortings +sortition +sortitions +sorts +sorus +sos +soss +sot +soteriology +sots +sottishness +sou +souari +souaris +soubise +soubises +soubrette +soubrettes +soubriquet +soubriquets +souchong +souchongs +sough +soughs +souk +souks +soul +soul-searching +soulfulness +souls +sound +sounder +sounders +sounding +soundings +soundman +soundness +soundproofing +sounds +soup +souple +souples +soups +soupspoon +soupspoons +sour +source +sources +sourdine +sourdines +souring +sourings +sourness +sourpuss +sourpusses +sours +sous +sousaphone +sousaphones +souse +souses +sousing +sousings +souslik +sousliks +soutache +soutaches +soutane +soutanes +souter +souterrain +souterrains +souters +south +souther +southerliness +southerly +southerner +southerners +southernism +southernisms +southernwood +southernwoods +southers +southing +southings +southland +southlander +southlanders +southlands +southpaw +southpaws +souths +southward +southwards +souvenir +souvenirs +souvlaki +souvlakia +sovereign +sovereigns +sovereignties +sovereignty +soviet +sovietism +sovietisms +soviets +sovran +sovrans +sow +sowans +sowar +sowars +sowback +sowens +sower +sowers +sows +sox +soy +soya +soyas +soys +spa +space +space-bar +space-bars +space-time +spacecraft +spacefaring +spaceman +spaceport +spaceports +spacer +spacers +spaces +spaceship +spaceships +spacewalk +spacewalks +spacing +spacings +spaciousness +spade +spadefish +spadeful +spadefuls +spader +spaders +spades +spadework +spadix +spaeing +spaer +spaers +spaes +spaghetti +spaghettis +spahi +spahis +spain +spains +spale +spales +spall +spallation +spallations +spalls +spalpeen +spalpeens +spam +spams +span +spancel +spancels +spandex +spandrel +spandrels +spanes +spangle +spangles +spaniel +spaniels +spank +spanker +spankers +spanking +spankings +spanks +spanner +spanners +spans +spar +sparable +sparables +sparaxis +spare +spareness +sparer +sparers +spares +sparganium +sparganiums +sparger +spargers +sparid +sparids +sparingness +spark +sparkle +sparkler +sparklers +sparkles +sparklet +sparklets +sparkling +sparklings +sparks +sparling +sparlings +sparoid +sparoids +sparring +sparrings +sparrow +sparrows +spars +sparseness +sparsity +sparteine +spas +spasm +spasmodist +spasmodists +spasms +spastic +spasticities +spasticity +spastics +spat +spatchcock +spatchcocks +spate +spates +spathe +spathes +spathiphyllum +spatiality +spats +spatter +spatterdash +spatterdashes +spattering +spatters +spatula +spatulas +spavin +spawn +spawner +spawners +spawns +spaying +speaker +speakers +speakership +speakerships +speaking +speakings +spean +speans +spear +spearfish +spearfishes +spearhead +spearheads +spearman +spearmint +spearmints +spears +spearwort +spearworts +spec +special +specialisation +specialisations +specialism +specialisms +specialist +specialists +specialities +speciality +specialization +specializations +specializer +specializers +specials +specialties +specialty +speciation +specie +species +specific +specification +specifications +specificities +specificity +specifics +specifier +specifiers +specifying +specimen +specimens +speciosities +speciosity +speciousness +speck +speckle +speckles +specks +specs +spectacle +spectacles +spectacular +spectacularity +spectaculars +spectator +spectators +spectatress +spectatresses +specter +specters +spectra +spectralities +spectrality +spectre +spectres +spectrochemistry +spectrogram +spectrograms +spectrograph +spectrographs +spectrography +spectroheliogram +spectroheliograph +spectrohelioscope +spectrology +spectrometer +spectrometers +spectrometry +spectrophotometer +spectrophotometry +spectroscope +spectroscopes +spectroscopist +spectroscopists +spectroscopy +spectrum +speculation +speculations +speculativeness +speculator +speculators +speculum +speech +speech-reading +speeches +speechlessness +speed +speed-up +speed-ups +speedball +speeder +speeders +speediness +speeding +speedings +speedo +speedometer +speedometers +speedos +speeds +speedster +speedsters +speedway +speedways +speedwell +speedwells +speel +speels +speer +speers +speiss +speisses +spelaeologist +spelaeologists +spelaeology +speleologist +speleologists +speleology +spelk +spelks +spell +spellbinder +spellbinders +spelldown +spelldowns +speller +spellers +spellican +spellicans +spelling +spellings +spells +spelt +spelter +spelunker +spelunkers +spence +spencer +spencers +spences +spender +spenders +spending +spendings +spendthrift +spendthrifts +speos +speoses +sperm +spermaceti +spermaries +spermary +spermatheca +spermathecas +spermatid +spermatids +spermatium +spermatocele +spermatoceles +spermatocyte +spermatocytes +spermatogenesis +spermatogonium +spermatogoniums +spermatophore +spermatophores +spermatophyte +spermatophytes +spermatophytic +spermatorrhoea +spermatozoid +spermatozoids +spermatozoon +spermicide +spermicides +spermiogenesis +spermogonium +spermophile +spermophiles +spermophyte +spermophytes +sperms +sperrylite +spessartite +spew +spewer +spewers +spews +sphacelation +sphacelations +sphacelus +sphalerite +sphene +sphenodon +sphenodons +sphenogram +sphenograms +sphenoid +sphenoids +sphere +spheres +sphericality +sphericalness +sphericity +spherics +spherocyte +spherocytes +spheroid +spheroidicity +spheroids +spherometer +spherometers +spherule +spherules +spherulite +sphincter +sphincters +sphingid +sphingids +sphingomyelin +sphingosine +sphinx +sphinxes +sphragistic +sphragistics +sphygmogram +sphygmograms +sphygmograph +sphygmographs +sphygmography +sphygmomanometer +sphygmus +sphygmuses +spica +spicas +spiccato +spiccatos +spice +spiceberry +spiceries +spicery +spices +spiciness +spick +spicks +spicula +spiculas +spicule +spicules +spiculum +spider +spiderflower +spiderman +spiders +spiegeleisen +spiel +spieler +spielers +spiels +spies +spignel +spignels +spigot +spigots +spike +spike-rush +spikelet +spikelets +spikenard +spikenards +spikes +spikiness +spile +spiles +spilikin +spilikins +spill +spillage +spillages +spillikin +spillikins +spillover +spillovers +spills +spillway +spillways +spilosite +spilth +spin +spin-drier +spin-driers +spin-dryer +spin-dryers +spin-off +spin-offs +spina +spinach +spinaches +spinal +spinas +spindle +spindles +spindling +spindlings +spindrift +spine +spine-bashing +spine-chiller +spine-chillers +spinel +spinelessness +spinels +spines +spinet +spinets +spinifex +spinifexes +spininess +spink +spinks +spinnaker +spinnakers +spinner +spinneret +spinnerets +spinneries +spinners +spinnery +spinney +spinneys +spinnies +spinning +spinnings +spinny +spinode +spinodes +spinosity +spins +spinster +spinsterhood +spinsters +spinthariscope +spinthariscopes +spinule +spinules +spiracle +spiracles +spiraea +spiraeas +spiral +spirality +spirals +spirant +spirants +spire +spirea +spireas +spireme +spiremes +spires +spirilla +spirillum +spirit +spiritedness +spiritism +spiritist +spiritists +spiritlessness +spirits +spiritual +spiritualisation +spiritualiser +spiritualisers +spiritualism +spiritualist +spiritualists +spirituality +spiritualization +spiritualizer +spiritualizers +spirituals +spiritualties +spiritualty +spirituousness +spirochaete +spirochaetes +spirochaetosis +spirochete +spirochetes +spirogram +spirograph +spirographs +spirometer +spirometers +spirometry +spironolactone +spirt +spirts +spit +spital +spitals +spitchcock +spitchcocks +spite +spitefulness +spites +spitfire +spitfires +spits +spitter +spitters +spitting +spittings +spittle +spittlebug +spittles +spittoon +spittoons +spitz +spitzes +spiv +spivs +splanchnology +splash +splashdown +splashdowns +splasher +splashers +splashes +splashiness +splashing +splashings +splat +splats +splatter +splattering +splatters +splay +splays +spleen +spleens +splendidness +splendor +splendors +splendour +splendours +splenectomies +splenectomy +splenetic +splenetics +splenitis +splenius +spleniuses +splenomegaly +spleuchan +spleuchans +splice +splicer +splicers +splices +splicing +spline +splines +splint +splinter +splintering +splinters +splints +split +split-off +splits +splitter +splitters +splitting +splodge +splodges +splore +splores +splosh +sploshes +splotch +splotches +splurge +splurges +splutter +splutterer +splutterers +splutters +spode +spodumene +spoil +spoilage +spoiler +spoilers +spoiling +spoils +spoilsman +spoke +spokes +spokeshave +spokeshaves +spokesman +spokesperson +spokespersons +spokeswoman +spoliation +spoliations +spondee +spondees +spondulicks +spondulix +spondylitis +spondylolisthesis +sponge +sponger +spongers +sponges +spongin +sponginess +sponsion +sponsions +sponson +sponsons +sponsor +sponsors +sponsorship +sponsorships +spontaneity +spontaneousness +spontoon +spontoons +spoof +spoofery +spoofs +spook +spookiness +spooks +spool +spools +spoom +spooms +spoon +spoonbill +spoonbills +spoondrift +spoonerism +spoonerisms +spoonful +spoonfuls +spoons +spoor +spoors +sporangiophore +sporangiophores +sporangium +spore +spores +sporocarp +sporocarps +sporocyst +sporocysts +sporogenesis +sporogonium +sporogoniums +sporophore +sporophores +sporophyl +sporophyll +sporophylls +sporophyls +sporophyte +sporophytes +sporotrichosis +sporozoan +sporozoite +sporran +sporrans +sport +sporter +sporters +sportfulness +sportiness +sportiveness +sports +sportscast +sportscaster +sportscasters +sportscasts +sportsman +sportsmanship +sportswear +sportswoman +sporulation +sporulations +sporule +sporules +spot +spot-weld +spot-welds +spotlessness +spotlight +spotlights +spots +spottedness +spotter +spotters +spottiness +spotting +spottings +spousal +spousals +spouse +spouses +spout +spouter +spouters +spouts +sprag +sprags +sprain +sprains +sprat +sprats +sprattle +sprattles +sprawl +sprawling +sprawls +spray +sprayer +sprayers +spraying +sprays +spread +spread-eagleism +spreader +spreaders +spreading +spreadings +spreads +spreadsheet +spreadsheets +sprechgesang +sprechstimme +spree +sprees +sprig +sprightliness +sprigs +spring +spring-clean +spring-cleaning +spring-cleans +springald +springalds +springboard +springboards +springbok +springboks +springbuck +springbucks +springe +springer +springers +springes +springhaas +springhead +springheads +springiness +springing +springings +springlet +springlets +springs +springtail +springtails +springtide +springtides +springtime +springwood +sprinkle +sprinkler +sprinklers +sprinkles +sprinkling +sprinklings +sprint +sprinter +sprinters +sprints +sprit +sprite +sprites +sprits +spritsail +spritsails +spritz +spritzer +spritzers +spritzes +sprocket +sprockets +sprout +sprouting +sproutings +sprouts +spruce +spruceness +spruces +sprue +sprues +spruiker +spruikers +spruit +spud +spud-bashing +spuds +spumante +spume +spumes +spunk +spunkie +spunkies +spunkiness +spunks +spunky +spur +spur-rowel +spurge +spurges +spuriousness +spurn +spurns +spurrer +spurrers +spurrey +spurreys +spurrier +spurriers +spurries +spurring +spurrings +spurry +spurs +spurt +spurtle +spurtles +spurts +sputnik +sputniks +sputter +sputtering +sputterings +sputters +sputum +spy +spyglass +spyglasses +spying +spyings +squab +squabble +squabbler +squabblers +squabbles +squabs +squacco +squaccos +squad +squadron +squadrons +squads +squalene +squalidity +squalidness +squall +squaller +squallers +squalls +squalor +squama +squamation +squamations +squamosal +squamosals +squamule +squamules +squander +squanderer +squanderers +squandering +squanderings +squandermania +squanders +square +square-bashing +square-rigger +squareness +squarer +squarers +squares +squash +squashes +squashiness +squat +squatness +squats +squatter +squatters +squattiness +squatting +squattocracy +squaw +squawk +squawker +squawkers +squawks +squaws +squeak +squeaker +squeakers +squeaks +squeal +squealer +squealers +squeals +squeamishness +squeegee +squeegees +squeezability +squeeze +squeeze-box +squeeze-boxes +squeezer +squeezers +squeezes +squelch +squelcher +squelchers +squelches +squeteague +squeteagues +squib +squibs +squid +squids +squiffer +squiffers +squiggle +squiggles +squilgee +squilgees +squill +squilla +squills +squinancy +squinch +squinches +squinny +squint +squinter +squinters +squints +squirarchies +squirarchy +squire +squirearch +squirearchies +squirearchs +squirearchy +squiredom +squiredoms +squireen +squireens +squireling +squirelings +squires +squirm +squirms +squirrel +squirrelfish +squirrels +squirt +squirter +squirters +squirts +squish +squishes +squit +squits +squiz +stab +stabber +stabbers +stabile +stabiles +stabilisation +stabilisations +stabiliser +stabilisers +stabilities +stability +stabilization +stabilizations +stabilizer +stabilizers +stable +stablemate +stablemates +stableness +stables +stabling +stablings +stabs +stachys +stack +stacker +stacks +stackyard +stackyards +stacte +stactes +staddle +staddles +staddlestone +staddlestones +stade +stades +stadholder +stadholders +stadia +stadias +stadium +stadiums +staff +staffer +staffers +staffs +stag +stage +stagecoach +stagecoaches +stagecraft +stager +stagers +stages +stagflation +staggard +staggards +stagger +staggerer +staggerers +staggers +staghound +staghounds +staginess +staging +stagings +stagnancy +stagnation +stagnations +stags +staidness +stain +stainer +stainers +staining +stainings +stainless +stainlessness +stains +stair +stair-carpet +stair-carpets +stair-rod +stair-rods +staircase +staircases +stairhead +stairheads +stairs +stairway +stairways +stake +stakeholder +stakeholders +stakes +staking +stalactite +stalactites +stalag +stalagmite +stalagmites +stalagmometer +stalagmometers +stalags +stale +stalemate +stalemates +staleness +stales +stalk +stalker +stalkers +stalking +stalking-horse +stalking-horses +stalkings +stalks +stall +stallage +stalling +stallings +stallion +stallions +stalls +stalwart +stalwartness +stalwarts +stamen +stamens +stamina +staminode +staminodes +staminodium +staminodiums +staminody +stammel +stammels +stammer +stammerer +stammerers +stammers +stamnos +stamp +stampede +stampedes +stamper +stampers +stamps +stance +stances +stanch +stancher +stanchers +stanches +stanchion +stanchions +stand +stand-by +stand-bys +stand-in +stand-ins +stand-offishness +standard +standard-bearer +standard-bearers +standardisation +standardization +standardizer +standardizers +standards +standee +standees +standfast +standing +standings +standish +standishes +standpoint +standpoints +stands +standstill +standstills +stane +stanes +stang +stangs +stanhope +stanhopes +stank +stanks +stannaries +stannary +stannate +stannates +stannite +stannites +stanza +stanzaic +stanzas +stapedectomies +stapedectomy +stapelia +stapelias +stapes +stapeses +staph +staphylococci +staphylorrhaphy +staple +stapler +staplers +staples +star +star-apple +star-of-Bethlehem +star-thistle +starboard +starboards +starch +starches +starchiness +stardom +stare +stares +starets +staretses +starfish +starfishes +starkness +starlet +starlets +starlight +starling +starlings +starriness +stars +start +starter +starters +starting +startings +startle +startler +startlers +startles +starts +starvation +starvations +starveling +starvelings +starving +starvings +starwort +starworts +stash +stashes +stasidion +stasidions +stasimon +stasis +state +statecraft +statehood +statelessness +stateliness +statement +statements +stater +stateroom +staterooms +states +statesman +statesmanship +static +statice +statics +station +stationariness +stationer +stationers +stationery +stations +statism +statist +statistic +statistician +statisticians +statistics +statists +stative +statocyst +statocysts +statolith +statoliths +stator +stators +statoscope +statoscopes +statuaries +statuary +statue +statues +statuette +statuettes +stature +statures +status +statuses +statute +statutes +staunch +staunches +staunchness +staurolite +stauroscope +stave +staves +stavesacre +stavesacres +staw +staws +stay +stay-at-home +stay-at-homes +stayer +stayers +stays +staysail +staysails +stead +steadfastness +steadier +steadies +steadiness +steading +steadings +steads +steady +steak +steakhouse +steakhouses +steaks +steal +stealer +stealers +steales +stealing +stealings +steals +stealth +stealthiness +steam +steam-boiler +steam-boilers +steam-chest +steam-engine +steam-engines +steam-shovel +steam-shovels +steamboat +steamboats +steamer +steamers +steamie +steamies +steaminess +steams +steamship +steamships +steapsin +stearate +stearates +stearin +steatite +steatites +steatopygia +steatorrhea +steed +steeds +steek +steeks +steel +steelhead +steelheads +steeliness +steelman +steels +steelwork +steelworker +steelworkers +steelworks +steelyard +steelyards +steenbok +steenboks +steening +steenings +steep +steeper +steepers +steeple +steeplechase +steeplechaser +steeplechasers +steeplechases +steeplechasing +steeplechasings +steeplejack +steeplejacks +steeples +steepness +steeps +steer +steerage +steerages +steerer +steerers +steering +steerings +steers +steersman +steeve +steeves +stegodon +stegodons +stegomyia +stegosaur +stegosaurs +stein +steins +stela +stelas +stele +steles +stellarator +stellarators +stellionate +stellionates +stem +stemma +stemmer +stemmers +stems +stemson +stemsons +stemware +stench +stenches +stencil +stenciller +stencillers +stencils +steno +stenograph +stenographer +stenographers +stenographs +stenography +stenos +stenosis +stenotype +stenotypes +stenotypist +stenotypists +stenotypy +stentor +stentors +step +step-down +step-in +step-ins +step-parent +step-parents +step-up +step-ups +stepbrother +stepbrothers +stepchild +stepdame +stepdames +stepdaughter +stepdaughters +stepfather +stepfathers +stephanite +stephanotis +stephanotises +stepmother +stepmothers +steppe +stepper +steppers +steppes +steps +stepsister +stepsisters +stepson +stepsons +steradian +steradians +sterculia +sterculias +stere +stereo +stereobate +stereobates +stereochemistry +stereochrome +stereochromy +stereogram +stereograms +stereograph +stereographs +stereography +stereoisomer +stereoisomerism +stereoisomers +stereometry +stereophony +stereopsis +stereopticon +stereopticons +stereos +stereoscope +stereoscopes +stereoscopist +stereoscopists +stereoscopy +stereotaxis +stereotomies +stereotomy +stereotropism +stereotype +stereotypes +stereotypies +stereotypy +steres +sterigma +sterilant +sterilisation +sterilisations +steriliser +sterilisers +sterility +sterilization +sterilizations +sterlet +sterlets +sterling +sterlings +stern +stern-chaser +stern-wheeler +stern-wheelers +sterna +sternite +sternites +sternness +sterns +sternson +sternsons +sternum +sternums +sternutation +sternutations +sternutator +sternutators +sternutatory +sternway +sternways +steroid +steroids +sterol +sterols +stertorousness +stet +stethoscope +stethoscopes +stethoscopist +stethoscopists +stethoscopy +stets +stevedore +stevedores +stew +steward +stewardess +stewardesses +stewards +stewardship +stewardships +stewing +stewings +stewpan +stewpans +stewpot +stewpots +stews +stibine +stibium +stibnite +stich +sticharion +sticharions +stichic +stichometry +stichomythia +stichs +stick +stick-in-the-mud +stickability +sticker +stickers +stickful +stickfuls +stickies +stickiness +stickjaw +stickjaws +stickleback +sticklebacks +stickler +sticklers +sticks +stickup +stickups +stickweed +stickwork +sticky +stickybeak +stickybeaks +sties +stiff +stiffener +stiffeners +stiffening +stiffenings +stiffness +stiffs +stifle +stifler +stiflers +stifles +stifling +stiflings +stigma +stigmas +stigmata +stigmatic +stigmatics +stigmatisation +stigmatisations +stigmatism +stigmatist +stigmatists +stigmatization +stigmatizations +stilb +stilbene +stilbestrol +stilbite +stilbites +stilboestrol +stilbs +stile +stiles +stiletto +stilettoes +stilettoing +stilettos +still +still-hunter +stillage +stillages +stiller +stillers +stillicide +stillicides +stillness +stills +stilt +stilts +stime +stimes +stimies +stimulant +stimulants +stimulate +stimulates +stimulation +stimulations +stimulative +stimulatives +stimulator +stimulators +stimuli +stimulus +stimy +sting +stingaree +stingarees +stinger +stingers +stinginess +stinging +stingings +stingo +stingos +stings +stingy +stink +stinker +stinkers +stinkhorn +stinkhorns +stinking +stinkings +stinks +stinkstone +stinkweed +stint +stintedness +stinter +stinters +stints +stipe +stipel +stipels +stipend +stipendiaries +stipendiary +stipends +stipes +stipple +stippler +stipplers +stipples +stipulation +stipulations +stipulator +stipulators +stipule +stipules +stir +stirabout +stirabouts +stirk +stirks +stirpiculture +stirps +stirrer +stirrers +stirring +stirrings +stirrup +stirrups +stirs +stitch +stitcher +stitchers +stitchery +stitches +stitching +stitchings +stitchwork +stitchwort +stitchworts +stithies +stithy +stiver +stivers +stoa +stoas +stoat +stoats +stob +stobs +stoccado +stoccados +stock +stock-in-trade +stockade +stockades +stockbroker +stockbrokers +stockcar +stockcars +stocker +stockers +stockfish +stockfishes +stockholder +stockholders +stockholding +stockholdings +stockhorn +stockhorns +stockiness +stockinet +stockinets +stockinette +stockinettes +stocking +stockings +stockishness +stockist +stockists +stockman +stockpile +stockpiles +stockpiling +stockpilings +stocks +stocktaking +stocktakings +stockyard +stockyards +stodge +stodges +stodginess +stoep +stogey +stogy +stoic +stoichiology +stoichiometry +stoicism +stoics +stoit +stoits +stokehold +stokeholds +stoker +stokers +stokes +stole +stoles +stolidity +stolidness +stollen +stolon +stolons +stoma +stomach +stomacher +stomachers +stomachic +stomachics +stomachs +stomata +stomatitis +stomatology +stomatoplasty +stomatopod +stomatopods +stomp +stomper +stompers +stomps +stone +stone-lily +stoneboat +stonechat +stonechats +stonecrop +stonecrops +stonefish +stonefishes +stonemasonry +stoner +stoners +stones +stonewaller +stonewallers +stonewalling +stonewallings +stoneware +stonework +stonewort +stoneworts +stoniness +stonk +stonks +stooge +stooges +stook +stooker +stookers +stooks +stool +stoolie +stoolies +stools +stoop +stooper +stoopers +stoopes +stoops +stop +stop-off +stop-offs +stope +stopes +stoping +stopings +stoplight +stoplights +stoppage +stoppages +stopper +stoppers +stopping +stoppings +stopple +stopples +stops +storable +storage +storages +storax +storaxes +store +storefront +storehouse +storehouses +storekeeper +storekeepers +storer +storeroom +storerooms +storers +stores +storey +storeys +stories +storiette +storiettes +storing +stork +stork's-bill +storks +storm +storm-cock +storm-trooper +storm-troopers +storminess +storms +story +storyboard +storyline +stotinka +stotter +stotters +stound +stounds +stoup +stoups +stour +stours +stoush +stoushes +stout +stout-heartedness +stoutness +stouts +stove +stover +stoves +stowage +stowages +stowaway +stowaways +stowing +stowings +strabismus +strabismuses +strabotomies +strabotomy +straddle +straddler +straddlers +straddles +strafe +strafes +straggle +straggler +stragglers +straggles +straight +straight-arm +straightaway +straightener +straighteners +straightforwardness +straightjacket +straightjackets +straightness +straights +strain +strainer +strainers +straining +strainings +strains +strait +straitness +straits +strake +strakes +stramonium +stramoniums +strand +strands +strangeness +stranger +strangers +stranglehold +strangleholds +strangler +stranglers +strangles +strangling +strangulation +strangulations +strangury +strap +strap-hinge +strap-oil +strappado +strappados +strapper +strappers +straps +strass +strata +stratagem +stratagems +strategics +strategies +strategist +strategists +strategy +strath +straths +strathspey +strathspeys +stratification +stratifications +stratigrapher +stratigraphers +stratigraphy +stratocracies +stratocracy +stratocrat +stratocrats +stratopause +stratosphere +stratum +stratus +stratuses +straw +strawberries +strawberry +strawboard +strawboards +strawflower +strawman +straws +strawy +stray +strayer +strayers +strays +streak +streaker +streakers +streakiness +streaks +stream +streamer +streamers +streaminess +streaming +streamings +streamlet +streamlets +streamline +streamlines +streams +streek +streeks +street +streetcar +streetcars +streetlight +streetlights +streets +strelitzia +strelitzias +strength +strengthener +strengtheners +strengthening +strengths +strenuosity +strenuousness +strep +streps +streptocarpus +streptococci +streptococcus +streptokinase +streptomycin +streptosolen +stress +stresses +stretch +stretcher +stretcher-bearer +stretcher-bearers +stretchers +stretches +stretching +stretto +strewing +strewings +stria +striation +striations +strickle +strickles +strictness +stricture +strictures +stride +stridence +stridency +strides +stridor +stridors +stridulation +stridulations +strife +strifes +strigil +strigils +strike +strikeout +strikeouts +striker +strikers +strikes +striking +strikingness +strikings +string +stringencies +stringency +stringer +stringers +stringhalt +stringiness +stringing +stringings +strings +stringy-bark +strip +stripe +striper +stripers +stripes +striping +stripings +stripling +striplings +stripper +strippers +stripping +strippings +strips +striptease +stripteaser +stripteasers +striver +strivers +striving +strivings +strobe +strobes +strobila +strobilation +strobilations +strobile +strobiles +strobilus +stroboscope +stroboscopes +stroganoff +stroganoffs +stroke +strokes +stroking +strokings +stroll +stroller +strollers +strolls +stroma +stromatolite +strombus +strombuses +strong-mindedness +stronghold +strongholds +strongman +strongpoint +strongpoints +strongyle +strongyles +strongylosis +strontia +strontian +strontianite +strontias +strontium +strop +strophanthin +strophanthus +strophanthuses +strophe +strophes +strops +stroud +strouds +structuralism +structuralist +structuralists +structure +structures +strudel +strudels +struggle +struggler +strugglers +struggles +strum +struma +strumpet +strumpets +strums +strunt +strunts +strut +struts +strutter +strutters +strychnine +strychninism +stub +stubbed +stubbies +stubbiness +stubble +stubbles +stubbornness +stubby +stubs +stucco +stuccoes +stuccos +stud +studding +studdings +student +students +studentship +studentships +studiedness +studier +studiers +studies +studio +studios +studiousness +studs +studwork +study +studying +stuff +stuffiness +stuffing +stuffings +stuffs +stull +stulls +stultification +stum +stumble +stumblebum +stumblebums +stumbles +stumer +stumers +stump +stumpage +stumper +stumpers +stumpiness +stumping +stumps +stums +stun +stunner +stunners +stuns +stunsail +stunsails +stunt +stuntedness +stunting +stunts +stupa +stupas +stupe +stupefacient +stupefacients +stupefaction +stupefactions +stupendousness +stupes +stupid +stupidities +stupidity +stupidness +stupids +stupor +stupors +sturdies +sturdiness +sturdy +sturgeon +sturgeons +sturt +sturts +stutter +stutterer +stutterers +stutters +sty +stye +styes +style +styles +stylet +stylets +stylisation +stylisations +stylishness +stylist +stylists +stylite +stylites +stylization +stylizations +stylobate +stylobates +stylograph +stylographs +stylography +stylolite +stylopodium +stylopodiums +stylus +styluses +stymie +stymies +stypsis +styptic +styptics +styrax +styraxes +styrene +styrenes +suability +suasion +suasions +suasiveness +suaveness +suavity +sub +subabbot +subacetate +subacidity +subacidness +subadar +subadars +subadministrator +subadult +subagencies +subagency +subagent +subagents +subaggregate +subaggregates +subah +subahs +suballiance +subaltern +subalternation +subalternity +subalterns +subappearance +subappearances +subarea +subarticle +subassemblies +subassembly +subassociation +subaudition +subauditions +subbase +subbasement +subbasements +subbing +subbings +subbreed +subbreeds +subbureau +subcaste +subcategories +subcategory +subcavity +subcelestial +subception +subchapter +subchief +subchloride +subcircuit +subcivilization +subclass +subclasses +subclause +subclauses +subclimax +subcommission +subcommissioner +subcommissions +subcommittee +subcommittees +subconscious +subconsciousness +subcontinent +subcontinents +subcontract +subcontractor +subcontractors +subcontracts +subcontraries +subcontrary +subcortex +subcosta +subcostas +subculture +subcultures +subdeacon +subdeacons +subdelirium +subdeliriums +subdiaconate +subdiaconates +subdialect +subdistrict +subdistricts +subdivision +subdivisions +subdominant +subdominants +subdual +subduals +subduction +subductions +subduedness +subduer +subduers +subeditor +subeditorial +subeditors +suberin +suberization +suberizations +subfamilies +subfamily +subfield +subfloor +subfloors +subframe +subfusc +subfuscs +subgenus +subgenuses +subgrade +subgroup +subgroups +subgum +subgums +subheading +subheadings +subincision +subincisions +subinfeudation +subinfeudatory +subinspector +subinspectors +subinspectorship +subject +subjection +subjections +subjective +subjectiveness +subjectivism +subjectivist +subjectivists +subjectivity +subjects +subjoinder +subjoinders +subjoining +subjugation +subjugations +subjugator +subjugators +subjunction +subjunctive +subjunctives +subkingdom +subkingdoms +sublapsarianism +sublease +subleases +sublessee +sublessees +sublessor +sublessors +sublet +sublets +sublibrarian +sublibrarians +sublieutenant +sublieutenants +sublimate +sublimates +sublimation +sublimations +sublime +sublimeness +sublimer +sublimes +sublimities +sublimity +subluxation +subluxations +subman +submanager +submarine +submariner +submariners +submarines +submatrix +submediant +submediants +submergence +submergences +submergibility +submerging +submersibility +submersible +submersibles +submersion +submersions +submission +submissions +submissiveness +submolecule +submucosa +submultiple +submultiples +subnormal +subnormality +subnormals +suboffice +subofficer +subofficers +suboffices +suborder +suborders +subordinaries +subordinary +subordinate +subordinateness +subordinates +subordination +subordinationism +subordinations +subornation +subornations +suborner +suborners +suboxide +suboxides +subphylum +subplot +subplots +subpoena +subpoenas +subpopulation +subpopulations +subpostmaster +subpostmasters +subprefect +subprefects +subprefecture +subprefectures +subprincipal +subprincipals +subprior +subprioress +subpriors +subprogram +subprograms +subreference +subreferences +subregion +subregions +subreption +subreptions +subrogation +subrogations +subroutine +subroutines +subs +subsample +subscapular +subscapulars +subscriber +subscribers +subscript +subscription +subscriptions +subscripts +subsection +subsections +subsellium +subsequence +subsequences +subseries +subservience +subserviency +subset +subsets +subshrub +subshrubs +subsidence +subsidences +subsidiaries +subsidiarity +subsidiary +subsidies +subsiding +subsidisation +subsidisations +subsidization +subsidizations +subsidizer +subsidizers +subsidy +subsistence +subsistences +subsizar +subsizars +subsoil +subsoils +subspecies +substage +substages +substance +substances +substantial +substantialism +substantiality +substantialness +substantials +substantiation +substantiations +substantive +substantiveness +substantives +substation +substations +substituent +substituents +substitute +substitutes +substituting +substitution +substitutions +substrate +substrates +substratosphere +substratum +substructure +substructures +subsuming +subsumption +subsumptions +subsystem +subsystems +subtangent +subtangents +subteen +subteens +subtenancies +subtenancy +subtenant +subtenants +subterfuge +subterfuges +subterrane +subtext +subtexts +subtileness +subtilisation +subtitle +subtitles +subtleness +subtleties +subtlety +subtonic +subtonics +subtopia +subtopias +subtotal +subtotals +subtracter +subtraction +subtractions +subtrahend +subtrahends +subtreasurer +subtreasurers +subtreasuries +subtreasury +subtribe +subtribes +subtropics +subtype +subtypes +subunit +subunits +suburb +suburban +suburbanisation +suburbanite +suburbanites +suburbanization +suburbans +suburbia +suburbias +suburbs +subvarieties +subvariety +subvassal +subvassals +subvention +subventions +subversion +subversions +subversive +subversiveness +subversives +subverter +subverters +subwarden +subwardens +subway +subways +subzone +subzones +succah +succahs +succedaneum +succeeder +succeeders +succentor +succentors +success +successes +successfulness +succession +successions +successiveness +successlessness +successor +successors +succinate +succinates +succinctness +succinctorium +succinctoriums +succor +succories +succors +succory +succotash +succotashes +succour +succourer +succourers +succours +succuba +succubas +succubus +succubuses +succulence +succulency +succulent +succulents +succursal +succursales +succursals +succus +succuss +succussion +succussions +suchlike +suck +sucker +suckers +sucking +suckings +suckler +sucklers +suckling +sucklings +sucks +sucralfate +sucrase +sucre +sucres +sucrier +sucrose +suction +suctions +sudarium +sudariums +sudatories +sudatorium +sudatoriums +sudatory +sudd +sudden +suddenness +sudds +sudor +sudorific +sudors +suds +suede +suedes +suer +suers +suet +sufferableness +sufferance +sufferances +sufferer +sufferers +suffering +sufferings +sufficiencies +sufficiency +sufficient +suffix +suffixes +suffixion +sufflation +suffocation +suffocations +suffragan +suffragans +suffrage +suffrages +suffragette +suffragettes +suffragettism +suffragist +suffragists +suffumigation +suffusion +suffusions +sugar +sugarbush +sugariness +sugars +suggester +suggesters +suggestibility +suggestion +suggestions +suggestiveness +suicide +suicides +suing +suint +suit +suitabilities +suitability +suitableness +suite +suites +suiting +suitings +suitor +suitors +suits +sukiyaki +sukiyakis +sukkah +sukkahs +sulcation +sulcations +sulcus +sulfa +sulfacetamide +sulfadiazine +sulfanilamide +sulfate +sulfathiazole +sulfation +sulfide +sulfonate +sulfonation +sulfone +sulfonic +sulfur +sulk +sulkies +sulkiness +sulks +sulky +sullage +sullen +sullenness +sullies +sully +sulpha +sulphadiazine +sulphanilamide +sulphate +sulphates +sulphathiazole +sulphation +sulphide +sulphides +sulphinyl +sulphite +sulphites +sulphonamide +sulphonamides +sulphonate +sulphonates +sulphonation +sulphone +sulphones +sulphonium +sulphur +sulphur-bottom +sulphuration +sulphurations +sulphurator +sulphurators +sulphureous +sulphurization +sulphurs +sultan +sultana +sultanas +sultanate +sultanates +sultans +sultanship +sultanships +sultriness +sum +sumac +sumach +sumachs +sumacs +sumatra +sumatras +summa +summand +summands +summaries +summariness +summarist +summarists +summary +summation +summations +summer +summers +summersault +summersaults +summerset +summersets +summertime +summertimes +summerwood +summing-up +summit +summitry +summits +summoner +summoners +summoning +summons +summonses +sumo +sumos +sump +sumps +sumpter +sumpters +sumptuosity +sumptuousness +sums +sun +sunbake +sunbakes +sunbather +sunbathers +sunbathing +sunbelt +sunberry +sunblind +sunblinds +sunbow +sunbows +sunburn +sunburns +sunburst +sunbursts +sundae +sundaes +sunder +sunderance +sunderances +sunders +sundial +sundials +sundown +sundowns +sundress +sundresses +sundries +sundry +sunfish +sunfishes +sunflower +sunflowers +sunglass +sunglasses +sunglow +sunglows +sunhat +sunhats +sunk +sunket +sunkets +sunks +sunlessness +sunlight +sunn +sunniness +sunns +sunray +sunrays +sunrise +sunrises +sunroom +suns +sunscreen +sunscreens +sunset +sunsets +sunshine +sunshine-roof +sunshine-roofs +sunspot +sunspots +sunstar +sunstars +sunstone +sunstones +sunstroke +sunsuit +sunsuits +suntan +suntans +suntrap +suntraps +suovetaurilia +sup +super +superabundance +superabundances +superaddition +superadditions +superaltar +superaltars +superannuation +superannuations +superbness +superbrain +superbug +superbugs +supercalender +supercalenders +supercargo +supercargoes +supercharger +superchargers +superciliousness +superclass +superclasses +superconductivity +superconductor +superconductors +supercriminal +superdominant +superdreadnought +superelevation +superelevations +supereminence +supererogation +superexaltation +superexcellence +superfamilies +superfamily +superfecta +superfectas +superfecundation +superfetation +superfetations +superficiality +superficies +superfluid +superfluidity +superfluities +superfluity +superflux +superfusion +superfusions +supergiant +supergiants +supergun +superheater +superheaters +superhero +superheros +superhet +superheterodyne +superhets +superhighway +superhumanity +superhumeral +superhumerals +superimposition +superincumbence +superinduction +superinductions +superinfection +superinfections +superintendence +superintendency +superintendent +superintendents +superior +superiorities +superiority +superiors +superlative +superlativeness +superlatives +superman +supermarket +supermarkets +supernatant +supernationalism +supernatural +supernaturalism +supernaturalness +supernaturals +supernormality +supernova +supernovas +supernumeraries +supernumerary +superorder +superorders +superordinate +superordinates +superordination +superoxide +superpatriot +superpatriotism +superphosphate +superphosphates +superphylum +superposition +superpower +superpowers +superpraise +supers +supersalesman +supersaturation +superscript +superscription +superscriptions +superscripts +superseder +supersederes +superseders +supersedure +supersedures +supersensitiveness +supersession +supersessions +supersonics +superspecies +superstar +superstars +superstate +superstates +superstition +superstitions +superstratum +superstructure +superstructures +supersubtlety +supersymmetry +supertanker +supertankers +supertax +supertaxes +supertitle +supertitles +supertonic +supertonics +supervenience +supervising +supervision +supervisions +supervisor +supervisors +superwoman +supes +supination +supinator +supinators +supine +supineness +suppedaneum +supper +suppers +suppertime +suppertimes +supping +supplantation +supplantations +supplanter +supplanters +supplanting +supplement +supplementaries +supplementary +supplementation +supplementer +supplementers +supplements +suppleness +suppletion +suppletions +suppliance +suppliances +suppliant +suppliants +supplicant +supplicants +supplication +supplications +supplier +suppliers +supplies +supply +supplying +support +supportableness +supporter +supporters +supporting +supportings +supports +supposal +supposals +supposition +suppositions +suppositive +suppositories +suppository +suppression +suppressions +suppressor +suppressors +suppuration +suppurations +suppurative +suppuratives +supranationalism +supremacies +supremacist +supremacists +supremacy +supreme +supremeness +supremes +supremo +supremos +sups +suq +suqs +sura +surah +surahs +suras +surat +surbase +surbases +surcease +surceases +surcharge +surcharger +surchargers +surcharges +surcingle +surcingles +surcoat +surcoats +surd +surds +sure-footedness +sureness +sureties +surety +surf +surface +surfacer +surfacers +surfaces +surfacing +surfacings +surfactant +surfactants +surfcasting +surfeit +surfeits +surfer +surfers +surfie +surfies +surfing +surfings +surfperch +surfs +surge +surgeon +surgeoncies +surgeoncy +surgeons +surgeries +surgery +surges +suricate +suricates +surjection +surjections +surliness +surmise +surmiser +surmisers +surmises +surmounter +surmounters +surmullet +surmullets +surname +surnames +surpassing +surpassingness +surplice +surplices +surplus +surplusage +surplusages +surpluses +surprisal +surprisals +surprise +surpriser +surprisers +surprises +surprising +surprisingness +surprisings +surra +surreal +surrealism +surrealist +surrealists +surrebuttal +surrebuttals +surrebutter +surrebutters +surrejoinder +surrejoinders +surrender +surrenderer +surrenderers +surrenders +surrey +surreys +surrogate +surrogates +surrogateship +surrogation +surrogations +surround +surrounding +surroundings +surrounds +surtax +surtaxes +surtitle +surtitles +surtout +surtouts +surveillance +surveillances +surveillant +surveillants +survey +surveying +surveyings +surveyor +surveyors +surveyorship +surveyorships +surveys +survivability +survival +survivals +survivor +survivors +survivorship +sus +susceptance +susceptances +susceptibilities +susceptibility +susceptibleness +sushi +sushis +suslik +susliks +suspect +suspectedness +suspects +suspender +suspenders +suspense +suspenses +suspensibility +suspension +suspensions +suspensoid +suspensoids +suspensor +suspensories +suspensors +suspensory +suspicion +suspicions +suspiciousness +suspiration +suspirations +suss +sustainability +sustainer +sustainers +sustainment +sustainments +sustenance +sustenances +sustentation +sustentations +sustention +sustentions +susurration +susurrus +susurruses +sutler +sutlers +sutra +sutras +suttee +suttees +suture +sutures +suturing +suzerain +suzerains +suzerainties +suzerainty +swab +swabber +swabbers +swabbing +swabs +swad +swaddle +swaddles +swads +swag +swage +swages +swagger +swaggerer +swaggerers +swaggers +swagman +swags +swagsman +swain +swains +swale +swales +swallet +swallets +swallow +swallower +swallowers +swallows +swami +swamis +swamp +swamper +swampers +swampland +swamplands +swamps +swan +swan-upping +swanherd +swanherds +swank +swankiness +swanks +swanneries +swannery +swans +swap +swapper +swappers +swaps +swaraj +swarajism +swarajist +swarajists +sward +swards +swarf +swarfs +swarm +swarmer +swarmers +swarms +swarth +swarthiness +swash +swashbuckler +swashbucklers +swashbuckling +swashes +swastika +swastikas +swat +swatch +swatches +swath +swathe +swathes +swathing +swaths +swats +swatter +swatters +sway +sway-back +sway-backs +swayer +swayers +sways +swear +swearer +swearers +swearing +swearings +swears +sweat +sweater +sweaters +sweatiness +sweating +sweatings +sweats +sweatshirt +sweatshirts +swede +swedes +sweeny +sweep +sweepback +sweepbacks +sweeper +sweepers +sweeping +sweepingness +sweepings +sweeps +sweepstake +sweepstakes +sweet +sweet-talk +sweet-talks +sweetbread +sweetbreads +sweetener +sweeteners +sweetening +sweetenings +sweetheart +sweethearts +sweetie +sweeties +sweetiewife +sweeting +sweetings +sweetmeat +sweetmeats +sweetness +sweetpea +sweetpeas +sweets +swell +swelling +swellings +swells +swelter +swelters +swerve +swerver +swervers +swerves +swerving +swervings +sweven +swies +swift +swifter +swifters +swiftie +swifties +swiftlet +swiftlets +swiftness +swifts +swig +swigger +swiggers +swigs +swill +swiller +swillers +swilling +swillings +swills +swim +swimmer +swimmeret +swimmerets +swimmers +swimming +swimmingness +swimmings +swims +swimsuit +swimsuits +swindle +swindler +swindlers +swindles +swine +swineherd +swineherds +swing +swing-wing +swing-wings +swingboat +swingboats +swinger +swingers +swinges +swinging +swingings +swingle +swingles +swingletree +swingletrees +swingometer +swingometers +swings +swingtree +swingtrees +swinishness +swink +swinks +swipe +swipes +swipple +swipples +swirl +swirls +swish +swishes +switch +switch-hitter +switch-hitters +switchback +switchbacks +switchblade +switchblades +switchboard +switchboards +switcher +switcheroo +switcheroos +switchers +switches +switching +switchings +switchman +swither +swithers +swivel +swivels +swivet +swivets +swiz +swizzle +swizzles +swob +swobs +swoon +swoons +swoop +swoops +swoosh +swooshes +swop +swops +sword +sword-bearer +sword-cut +sword-cuts +swordcraft +swordfish +swordfishes +swordman +swordplay +swordplayer +swordplayers +swords +swordsman +swordsmanship +swot +swots +swotter +swotters +swound +swounds +swy +sybarite +sybarites +sybaritism +sycamine +sycamines +sycamore +sycamores +syce +sycee +syconium +syconiums +sycophancy +sycophant +sycophants +sycosis +syenite +syenites +syke +sykes +syllabaries +syllabary +syllabi +syllabic +syllabication +syllabications +syllabicities +syllabicity +syllabics +syllabification +syllabism +syllabisms +syllable +syllables +syllabub +syllabubs +syllabus +syllabuses +syllepsis +syllogisation +syllogisations +syllogiser +syllogisers +syllogism +syllogisms +syllogistic +sylph +sylphid +sylphides +sylphids +sylphs +sylva +sylvan +sylvanite +sylvas +sylviculture +sylvine +sylvite +symbiont +symbionts +symbiosis +symbol +symbolicalness +symbolics +symbolisation +symbolisations +symbolism +symbolisms +symbolist +symbolists +symbolization +symbolizations +symbolizing +symbology +symbololatry +symbols +symmetalism +symmetallism +symmetricalness +symmetries +symmetrisation +symmetrisations +symmetrization +symmetrizations +symmetry +sympathectomies +sympathectomy +sympathin +sympathizer +sympathizers +sympatholytic +sympatholytics +sympathomimetic +symphile +symphiles +symphonies +symphonist +symphonists +symphony +symphysis +symploce +symploces +sympodium +symposiac +symposiarch +symposiarchs +symposium +symposiums +symptom +symptomatology +symptoms +symptosis +synaeresis +synaesthesia +synaesthesias +synagogue +synagogues +synapse +synapses +synapsis +synapte +synaptes +synarchies +synarchy +synarthrosis +synaxarion +synaxarions +synaxis +sync +syncarp +syncarps +syncarpy +synchro +synchrocyclotron +synchroflash +synchroflashes +synchromesh +synchronicity +synchronies +synchronisation +synchronisations +synchroniser +synchronisers +synchronising +synchronism +synchronization +synchronizations +synchronizer +synchronizers +synchronizing +synchronousness +synchrony +synchroscope +synchrotron +synchrotrons +syncline +synclines +synclinorium +syncopation +syncopations +syncopator +syncopators +syncope +syncopes +syncretism +syncretisms +syncs +syncytium +syncytiums +synd +syndactyl +syndactylism +syndactyly +synderesis +syndesis +syndesmosis +syndet +syndets +syndic +syndical +syndicalism +syndicalist +syndicalists +syndicate +syndicates +syndication +syndications +syndics +syndrome +syndromes +synds +synecdoche +synechia +synecology +synectics +syneresis +synergism +synergist +synergists +synergy +synesis +syngamy +syngenesis +synizesis +synkaryon +synod +synods +synoekete +synoeketes +synonym +synonymies +synonymist +synonymists +synonymities +synonymity +synonymousness +synonyms +synonymy +synopsis +synopsises +synoptic +synoptist +synostosis +synovia +synovitis +syntagma +syntax +syntaxes +synteresis +synthesis +synthesises +synthesist +synthesists +synthesizer +synthesizers +synthetic +synthetics +synthetiser +synthetisers +synthetizer +synthetizers +syphilis +syphilisation +syphilisations +syphilise +syphilises +syphilitic +syphilitics +syphilization +syphilizations +syphilologist +syphilologists +syphilology +syphiloma +syphilomas +syphon +syphons +syringa +syringas +syringe +syringes +syringomyelia +syrinx +syrinxes +syrphid +syrphids +syrup +syrups +syssarcosis +system +systematics +systematisation +systematiser +systematisers +systematism +systematist +systematists +systematization +systematizer +systematizers +systematology +systemisation +systemisations +systemization +systemizations +systems +systole +systoles +syzygies +syzygy +taal +tab +tabanid +tabanids +tabard +tabards +tabaret +tabarets +tabbies +tabbinet +tabbouleh +tabboulehs +tabby +tabernacle +tabernacles +tabes +tabescence +tabescences +tabi +tabinet +tabla +tablas +tablature +tablatures +table +table-turning +tableau +tableful +tablefuls +tableland +tables +tablespoonful +tablespoonfuls +tablet +tablets +tabling +tablings +tabloid +tabloids +taboo +taboos +tabor +taborer +taborers +taboret +taborets +taborin +taborins +tabors +tabour +tabouret +tabourets +tabours +tabret +tabrets +tabs +tabu +tabularisation +tabularisations +tabularization +tabularizations +tabulation +tabulations +tabulator +tabulators +tabus +tacamahac +tacamahacs +tace +taces +tach +tache +tacheometer +tacheometers +tacheometry +taches +tachisme +tachistoscope +tachistoscopes +tachogram +tachograms +tachograph +tachographs +tachometer +tachometers +tachycardia +tachygraph +tachygrapher +tachygraphers +tachygraphist +tachygraphists +tachygraphs +tachygraphy +tachylite +tachylyte +tachymeter +tachymeters +tachymetry +tachyon +tachyons +tachypnea +tacitness +taciturnity +tack +tacker +tackers +tacket +tackets +tackiness +tacking +tackings +tackle +tackler +tacklers +tackles +tackling +tacklings +tacks +tacmahack +taco +taconite +tacos +tact +tactfulness +tactic +tactician +tacticians +tactics +tactility +taction +tactlessness +tacts +tad +tadpole +tadpoles +tads +tael +taels +taenia +taeniacide +taeniacides +taeniafuge +taenias +taeniasis +taffeta +taffetas +taffies +taffrail +taffrails +taffy +tafia +tafias +tag +tagliarini +tagliatelle +tagmeme +tagrag +tagrags +tags +taguan +taguans +tahina +tahinas +tahr +tahrs +tahsil +tahsildar +tahsildars +tahsils +tai +taig +taiga +taigas +taigs +tail +tailback +tailbacks +tailing +tailings +taille +tailles +tailor +tailor-made +tailored +tailoring +tailorings +tailors +tailpiece +tailpieces +tailplane +tailplanes +tails +tailskid +tailskids +tailstock +tailwind +tailwinds +taint +taints +taipan +taipans +taira +tairas +tais +taj +tajes +taka +takahe +takahes +takas +take +take-in +take-up +takeaway +takeaways +taker +takers +takes +takin +taking +takings +takins +tala +talapoin +talapoins +talas +talc +talcs +talcum +talcums +tale +talent +talented +talents +taler +talers +tales +talesman +talion +talions +taliped +talipeds +talipes +talipot +talipots +talisman +talismans +talk +talkability +talkathon +talkativeness +talker +talkers +talkfest +talkfests +talkie +talkies +talking +talking-to +talkings +talks +tallage +tallages +tallboy +tallboys +tallies +tallith +talliths +tallness +tallow +tallows +tally +tally-ho +tally-hos +tallyman +tallyshop +tallyshops +talon +talons +taluk +taluks +talus +taluses +talweg +talwegs +tam +tam-tam +tam-tams +tamable +tamale +tamales +tamandu +tamandua +tamanduas +tamandus +tamanoir +tamanoirs +tamara +tamarack +tamaracks +tamarao +tamaraos +tamaras +tamarau +tamaraus +tamarillo +tamarillos +tamarin +tamarind +tamarinds +tamarins +tamarisk +tamarisks +tamarix +tamasha +tambac +tambour +tamboura +tambouras +tambourin +tambourine +tambourines +tambourins +tambours +tameability +tameableness +tamelessness +tameness +tamer +tamers +tames +tamis +tamises +tammies +tammy +tamp +tamper +tamperer +tamperers +tampering +tamperings +tampers +tampion +tampions +tampon +tamponade +tamponades +tampons +tamps +tams +tan +tana +tanager +tanagers +tanas +tandem +tandems +tang +tanga +tangas +tangelo +tangelos +tangencies +tangency +tangent +tangents +tangerine +tangerines +tangibility +tangible +tangibleness +tangibles +tangier +tangle +tanglement +tanglements +tangler +tanglers +tangles +tango +tangos +tangram +tangrams +tangs +tanh +tanist +tanistry +tanists +tank +tanka +tankage +tankages +tankard +tankards +tankas +tanker +tankers +tankful +tankfuls +tanks +tanna +tannage +tannages +tannas +tannate +tannates +tanner +tanneries +tanners +tannery +tannin +tanning +tannings +tans +tansies +tansy +tantalate +tantalates +tantalisation +tantalisations +tantaliser +tantalisers +tantalite +tantalization +tantalizations +tantalizer +tantalizers +tantalum +tantalus +tantaluses +tantara +tantaras +tantivies +tantivy +tantrum +tantrums +tao +tap +tapa +tapaculo +tapaculos +tapadera +tapaderas +tapas +tape +tapeline +tapelines +tapenade +tapenades +taper +taperer +taperers +tapering +taperings +tapers +tapes +tapestries +tapestry +tapetum +tapeworm +tapeworms +taphephobia +taping +tapioca +tapiocas +tapir +tapirs +tapis +tappa +tappas +tapper +tappers +tappet +tappets +tapping +tappings +tappit-hen +taproom +taprooms +taproot +taproots +taps +tapster +tapsters +tar +tara +taradiddle +taradiddles +taramasalata +taramasalatas +tarantass +tarantasses +tarantella +tarantellas +tarantism +tarantula +tarantulas +taras +tarboosh +tarbooshes +tarbrush +tarbrushes +tardigrade +tardigrades +tardiness +tare +tares +targe +targes +target +targeteer +targeteers +targets +tariff +tariffs +tarlatan +tarmac +tarmacadam +tarmacs +tarn +tarnation +tarnish +tarnishes +tarns +taro +tarok +taroks +taros +tarot +tarots +tarp +tarpan +tarpans +tarpaulin +tarpaulins +tarpon +tarpons +tarps +tarradiddle +tarradiddles +tarragon +tarred +tarriance +tarriances +tarrier +tarriers +tarring +tarrings +tarrying +tars +tarsal +tarsals +tarsia +tarsier +tarsiers +tarsometatarsus +tarsus +tart +tartan +tartanes +tartans +tartar +tartares +tartarization +tartars +tartlet +tartlets +tartness +tartrate +tartrates +tartrazine +tarts +tarweed +tarweeds +tasimeter +tasimeters +task +taskmaster +taskmasters +taskmistress +taskmistresses +tasks +taskwork +tass +tasse +tassel +tassels +tasses +tasset +tassets +tassie +tassies +taste +tastefulness +tastelessness +taster +tasters +tastes +tastiness +tasting +tastings +tat +tatami +tatamis +tater +taters +tates +tatou +tatouay +tatouays +tatous +tats +tatter +tatterdemalion +tatterdemalions +tattered +tatters +tattiness +tatting +tattings +tattle +tattler +tattlers +tattles +tattoo +tattooer +tattooers +tattooist +tattooists +tattoos +tatu +tatus +tau +taunt +taunter +taunters +taunting +tauntings +taunts +taupe +taupes +taurine +taurobolium +tauroboliums +tauromachies +tauromachy +taus +tautness +tautochrone +tautochrones +tautog +tautogs +tautologies +tautologism +tautologisms +tautologist +tautologists +tautology +tautomer +tautomerism +tautomers +tautonym +tautonyms +tavern +taverner +taverners +taverns +taw +tawdriness +tawer +tawney +tawniness +tawny +taws +tawse +tawses +tax +taxability +taxable +taxation +taxations +taxes +taxi +taxicab +taxicabs +taxidermist +taxidermists +taxidermy +taxies +taximan +taximeter +taximeters +taxis +taxistand +taxiway +taxiways +taxman +taxon +taxonomer +taxonomers +taxonomies +taxonomist +taxonomists +taxonomy +taxpaying +tay +tayra +tayras +tazza +tazzas +te-hee +te-hees +tea +tea-leaf +tea-strainer +tea-strainers +teaberries +teaberry +teach +teach-in +teach-ins +teacher +teachers +teachership +teacherships +teaches +teaching +teachings +teacup +teacupful +teacupfuls +teacups +teak +teaks +teal +teals +team +team-mate +team-mates +teamer +teamers +teams +teamster +teamsters +teapoy +teapoys +tear +tear-jerker +tear-jerkers +tearaway +tearaways +tearer +tearers +tearfulness +tearing +tears +teas +tease +teasel +teaseler +teaselers +teaseller +teasellers +teasels +teaser +teasers +teases +teasing +teasings +teaspoon +teaspoonful +teaspoonfuls +teaspoons +teat +teats +teazel +teazels +teazle +teazles +tech +techiness +technetium +technic +technicalities +technicality +technicalness +technician +technicians +technics +technique +techniques +technobabble +technocracies +technocracy +technocrat +technocrats +technography +technologies +technologist +technologists +technology +technostructure +techs +tectonics +tectrix +ted +tedder +tedders +teddies +teddy +tediousness +tedium +tediums +teds +tee +teel +teels +teemer +teemers +teen +teenage +teenager +teenagers +teens +teepee +teepees +tees +teeter +teeters +teeth +teethes +teething +teethings +teetotalism +teetotaller +teetotallers +teetotum +teetotums +tef +teff +teffs +tefs +teg +tegmen +tegs +tegu +tegula +tegument +teguments +tegus +teil +teils +teind +teinds +teknonymy +tektite +tektites +tela +telaesthesia +telamon +telamones +telangiectasis +telautography +telecast +telecasting +telecasts +telecommunication +telecommunications +teleconference +teleconferences +teleconferencing +teledu +teledus +telefilm +telefilms +telega +telegas +telegnosis +telegony +telegram +telegrams +telegraph +telegrapher +telegraphers +telegraphese +telegraphist +telegraphists +telegraphs +telegraphy +telekinesis +telemark +telemarketing +telemarks +telemeter +telemeters +telemetry +telencephalon +teleologist +teleologists +teleology +teleost +teleostean +teleosteans +teleosts +telepathist +telepathists +telepathy +telephone +telephoner +telephoners +telephones +telephonist +telephonists +telephony +telephoto +telephotograph +telephotographs +telephotography +teleplay +teleplays +teleport +teleports +teleprinter +teleprinters +teleprocessing +teleprompter +teleprompters +telescope +telescopes +telescopist +telescopists +telescopy +teleselling +telesis +telespectroscope +telestereoscope +telesthesia +telestich +telestichs +telethon +telethons +teletypewriter +teletypewriters +teleutospore +teleutospores +televangelist +televangelists +television +televisions +televisor +televisors +telewriter +telewriters +telex +telexes +telfer +telferage +telfers +teliospore +telium +tell +teller +tellers +tellership +tellerships +tellies +tellin +telling +tellings +tellins +tells +telltale +telltales +tellurate +tellurates +tellurian +tellurians +telluride +tellurides +tellurion +tellurions +tellurite +tellurites +tellurium +tellurometer +tellurometers +telly +telophase +telpher +telpherage +telpherages +telphers +telson +telsons +temblor +temblores +temblors +temerity +temp +temper +tempera +temperament +temperaments +temperance +temperateness +temperature +temperatures +tempering +temperings +tempers +tempest +tempests +tempestuousness +templar +template +templates +temple +temples +templet +templets +tempo +temporalities +temporality +temporalness +temporalties +temporalty +temporaries +temporariness +temporary +temporisation +temporiser +temporisers +temporization +temporizer +temporizers +tempos +temps +temptation +temptations +tempter +tempters +temptingness +temptress +temptresses +tempura +tempuras +ten +tenability +tenableness +tenace +tenaces +tenaciousness +tenacities +tenacity +tenaculum +tenaille +tenailles +tenancies +tenancy +tenant +tenant-in-chief +tenantries +tenantry +tenants +tench +tenches +tendance +tendencies +tendency +tendentiousness +tender +tenderer +tenderers +tenderfoot +tenderfoots +tenderiser +tenderisers +tenderizer +tenderizers +tenderness +tenders +tending +tendinitis +tendon +tendonitis +tendons +tendril +tendrils +tenebrism +tenement +tenements +tenes +tenesmus +tenet +tenets +tenia +tenias +teniasis +tennantite +tenner +tenners +tennis +tenno +tennos +tenon +tenoner +tenoners +tenons +tenor +tenorite +tenoroon +tenoroons +tenorrhaphy +tenors +tenosynovitis +tenotomies +tenotomy +tenpence +tenpences +tenpin +tenpins +tenrec +tenrecs +tens +tense +tenseness +tenses +tensibility +tensility +tensimeter +tensiometer +tension +tensions +tensity +tenson +tensons +tensor +tensors +tent +tent-flies +tent-fly +tentacle +tentacles +tentage +tentages +tentation +tentations +tenter +tenters +tenth +tenths +tenting +tentings +tentorium +tentoriums +tents +tenuis +tenuity +tenuousness +tenure +tenures +teocalli +teocallis +teosinte +tepal +tepee +tepees +tepefaction +tephra +tephrite +tephroite +tepidity +tepidness +tequila +tequilas +terabyte +terabytes +teraph +teratism +teratisms +teratogen +teratogenesis +teratogens +teratogeny +teratology +teratoma +teratomas +terbium +terce +tercel +tercelet +tercelets +tercels +tercentenaries +tercentenary +tercentennial +tercentennials +terces +tercet +tercets +terebene +terebenes +terebinth +terebinths +teredo +teredos +tergiversation +tergiversations +tergiversator +tergiversators +tergum +teriyaki +teriyakis +term +termagant +termagants +termer +termers +terminability +terminableness +terminal +terminals +termination +terminations +terminator +terminators +terminism +terminist +terminists +terminologies +terminology +terminus +terminuses +termitarium +termitariums +termite +termites +termor +termors +terms +tern +ternary +terne +ternes +ternion +ternions +terns +terotechnology +terpene +terpenes +terpineol +terpsichorean +terra +terrace +terraces +terracing +terracings +terrain +terrains +terramara +terramycin +terrane +terrapin +terrapins +terrarium +terrariums +terras +terrazzo +terrazzos +terrene +terrenes +terreplein +terrepleins +terrestrial +terrestrials +terret +terrets +terribleness +terricolous +terrier +terriers +terries +terrifier +terrifiers +terrine +terrines +territorial +territorialisation +territorialism +territorialist +territorialists +territoriality +territorialization +territorials +territories +territory +terror +terrorisation +terroriser +terrorisers +terrorism +terrorist +terrorists +terrorization +terrorizer +terrorizers +terrors +terry +terseness +tertial +tertials +tertian +tertians +tertiary +terzetto +terzettos +teschenite +tesla +teslas +tessellation +tessellations +tessera +tesseract +tessitura +tessituras +test +test-bed +test-beds +testa +testament +testaments +testas +testate +testator +testators +testatrix +testee +testees +tester +testers +testes +testicle +testicles +testification +testifications +testifier +testifiers +testimonial +testimonials +testimonies +testimony +testiness +testing +testings +testis +teston +testons +testosterone +tests +testudines +testudo +testudos +tetanic +tetanisation +tetanisations +tetanization +tetanizations +tetanus +tetany +tetchiness +tether +tethers +tetra +tetrabasicity +tetrabranchiate +tetrachloride +tetrachlorides +tetrachloroethylene +tetrachloromethane +tetrachord +tetrachords +tetracycline +tetrad +tetrads +tetradymite +tetragon +tetragons +tetragram +tetragrammaton +tetragrammatons +tetragrams +tetrahedrite +tetrahedron +tetrahedrons +tetralogies +tetralogy +tetramerism +tetrameter +tetrameters +tetraplegia +tetraploid +tetraploidy +tetrapod +tetrapodies +tetrapods +tetrapody +tetrarch +tetrarchate +tetrarchates +tetrarchs +tetras +tetrasporangium +tetraspore +tetraspores +tetrastich +tetrastichs +tetrasyllable +tetrasyllables +tetrode +tetrodes +tetroxide +tetroxides +tetryl +tetter +tetters +tew +tews +texas +texases +text +textbook +textbooks +textile +textiles +texts +textualism +textualist +textualists +textuaries +textuary +texture +textures +thack +thacks +thalamencephalon +thalamus +thalassaemia +thalassemia +thalassocracies +thalassocracy +thalassographer +thalassography +thaler +thalers +thalictrum +thalictrums +thalidomide +thallium +thallophyte +thallophytes +thallus +thalluses +thalweg +thalwegs +thammuz +thana +thanas +thanatophobia +thanatopsis +thane +thanes +thaneship +thaneships +thanker +thankers +thankfulness +thanking +thanklessness +thanks +thanksgiver +thanksgivers +thanksgiving +thanksgivings +thar +thars +thatch +thatcher +thatchers +thatches +thatching +thatchings +thaumatolatry +thaumatology +thaumatrope +thaumatropes +thaumaturge +thaumaturges +thaumaturgy +thaw +thawing +thawings +thaws +theanthropism +theanthropist +theanthropists +thearchies +thearchy +theater +theaters +theatre +theatre-in-the-round +theatres +theatrical +theatricality +theatricalness +theatricals +theatrics +thebaine +theca +thecodont +thecodonts +theft +thefts +thegn +thegns +theine +theism +theist +theists +thema +thematic +theme +themes +then +thenar +thenars +thens +theobromine +theocracies +theocracy +theocrasies +theocrasy +theodicies +theodicy +theodolite +theodolites +theogonist +theogonists +theogony +theologian +theologians +theologies +theologiser +theologisers +theologist +theologists +theologizer +theologizers +theologue +theologues +theology +theomachies +theomachy +theomancy +theomania +theomaniac +theomaniacs +theomanias +theomorphism +theonomy +theopathies +theopathy +theophagy +theophany +theophobia +theophylline +theorbist +theorbists +theorbo +theorbos +theorem +theorems +theoretician +theoreticians +theories +theoriser +theorisers +theorist +theorists +theory +theosophism +theosophist +theosophists +theosophy +therapeutics +therapies +therapist +therapists +therapsid +therapsids +therapy +therblig +therbligs +there +thereness +theres +therian +therians +therianthropism +theriomorph +theriomorphs +therm +thermal +thermals +thermion +thermionics +thermions +thermistor +thermistors +thermite +thermochemist +thermochemistry +thermochemists +thermocline +thermoclines +thermodynamics +thermogenesis +thermograph +thermographs +thermography +thermoluminescence +thermolysis +thermometer +thermometers +thermometrograph +thermometry +thermophile +thermopile +thermopiles +thermoplastic +thermoplasticity +thermos +thermoscope +thermoscopes +thermoses +thermosiphon +thermosphere +thermostat +thermostats +thermotaxis +thermotherapy +thermotropism +therms +theropod +theropods +thesaurus +thesauruses +thesis +thespian +thespians +theta +thetas +theurgist +theurgists +theurgy +thew +thewes +thews +they'd +they'll +they're +they've +thiamin +thiamine +thiasus +thiasuses +thiazine +thick +thick-knee +thick-wittedness +thickener +thickeners +thickening +thickenings +thicket +thickets +thickhead +thickheads +thickness +thicknesses +thicks +thickset +thief +thievery +thieving +thievings +thievishness +thigger +thiggers +thigh +thighs +thigmotaxis +thigmotropism +thill +thills +thimble +thimbleful +thimblefuls +thimblerig +thimblerigger +thimbleriggers +thimblerigs +thimbles +thimbleweed +thimerosal +thin-skinnedness +thing +thing-in-itself +thingamabob +thingamabobs +thingamajig +thingamajigs +things +thingumabob +thingumabobs +thingumajig +thingumajigs +thingumbob +thingumbobs +thingummies +thingummy +think +think-tank +think-tanks +thinker +thinkers +thinking +thinkings +thinks +thinner +thinners +thinness +thinning +thinnings +thioalcohol +thiocarbamide +thiocyanate +thiocyanates +thiol +thiols +thiopental +thiopentone +thiophen +thiophene +thiosulphate +thiouracil +thiourea +third +thirds +thirdstream +thirlage +thirlages +thirst +thirster +thirsters +thirsts +thirteen +thirteens +thirteenth +thirteenths +thirties +thirtieth +thirtieths +thirty +thirty-twomo +thirty-twomos +thistle +thistles +tho +thole +tholes +tholos +tholus +thong +thongs +thoracoplasty +thoracostomy +thoracotomy +thorax +thoraxes +thoria +thorite +thorium +thorn +thornback +thornbacks +thornbill +thorns +thoron +thoroughbred +thoroughbreds +thoroughfare +thoroughfares +thoroughgoingness +thoroughness +thoroughpin +thorp +thorpes +thorps +thou +thought +thought-reader +thought-readers +thoughtfulness +thoughtlessness +thoughts +thous +thousand +thousands +thousandth +thousandths +thraldom +thrall +thralldom +thralls +thrash +thrasher +thrashers +thrashes +thrashing +thrashings +thrave +thraves +thread +threader +threaders +threadfin +threadiness +threads +threat +threatener +threateners +threats +three +three-D +three-decker +three-master +three-piece +three-quarter +three-quarters +three-wheeler +three-wheelers +threepence +threepences +threes +threescore +threescores +threesome +threesomes +thremmatology +threnode +threnodes +threnodies +threnodist +threnodists +threnody +threonine +thresh +thresher +threshers +threshes +threshing +threshings +threshold +thresholds +thrift +thriftiness +thriftlessness +thrifts +thrill +thriller +thrillers +thrills +thrips +thripses +thriver +thrivers +throat +throatiness +throats +throatwort +throatworts +throb +throbbing +throbbings +throbs +throe +throes +thrombin +thrombocyte +thrombocytes +thromboembolism +thrombokinase +thrombokinases +thrombolytic +thrombophlebitis +thromboplastin +thrombosis +thrombus +throne +thrones +throng +throngs +throstle +throstles +throttle +throttler +throttlers +throttles +throttling +throttlings +throughway +throughways +throw +throw-in +throw-ins +throwback +throwbacks +thrower +throwers +throws +throwster +throwsters +thrum +thrummer +thrummers +thrummy +thrums +thrush +thrushes +thrust +thruster +thrusters +thrusting +thrustings +thrusts +thruway +thruways +thud +thuds +thug +thuggee +thuggeries +thuggery +thugs +thuja +thujas +thulia +thulium +thumb +thumbnail +thumbnails +thumbprint +thumbprints +thumbs +thumbscrew +thumbscrews +thump +thumping +thumps +thunbergia +thunder +thunderbird +thunderbirds +thunderbolt +thunderbolts +thunderbox +thunderboxes +thunderer +thunderers +thunderhead +thunderheads +thunders +thurible +thuribles +thurifer +thurifers +thwack +thwacker +thwackers +thwacks +thwart +thwarter +thwarters +thwarting +thwartings +thwarts +thylacine +thylacines +thyme +thymes +thymidine +thymine +thymol +thymus +thyratron +thyratrons +thyristor +thyristors +thyroid +thyroidectomy +thyroiditis +thyroids +thyrotoxicosis +thyrotrophin +thyrotropin +thyroxin +thyroxine +thyrse +thyrses +thyrsus +thysanuran +thysanurans +tiara +tiaras +tibia +tibias +tibiotarsus +tibiotarsuses +tic +tic-tac-toe +tical +ticals +tices +tick +tick-tack-toe +ticker +tickers +ticket +ticket-porter +tickets +ticking +tickings +tickle +tickler +ticklers +tickles +tickling +ticklings +ticklishness +ticks +tics +tid +tidbit +tidbits +tiddler +tiddlers +tiddlywinks +tide +tide-rip +tideland +tidemark +tidemarks +tides +tidies +tidiness +tidings +tids +tidy +tidying +tie +tie-and-dye +tie-dyeing +tie-in +tie-ins +tie-up +tie-ups +tiebreaker +tiebreakers +tier +tierce +tiercel +tiercels +tierceron +tiercerons +tierces +tiers +ties +tiff +tiffin +tiffins +tiffs +tiger +tiger's-eye +tigerishness +tigers +tightener +tighteners +tightening +tightness +tightrope +tightropes +tights +tightwad +tightwads +tiglon +tiglons +tigon +tigons +tigress +tigresses +tike +tikes +tiki +tikis +til +tilapia +tilburies +tilbury +tilde +tildes +tile +tilefish +tilefishes +tileries +tilery +tiles +tiling +tilings +till +tillage +tillages +tillandsia +tillandsias +tiller +tillers +tilling +tillings +tillite +tills +tils +tilt +tilth +tilths +tilts +timarau +timaraus +timbal +timbale +timbales +timbals +timber +timberhead +timbering +timberings +timberland +timbers +timbre +timbrel +timbrels +timbres +time +time-ball +time-balls +time-fuse +time-fuses +time-lag +time-out +time-outs +time-switch +timelessness +timeliness +timepiece +timepieces +timer +timers +times +timetable +timetables +timid +timidity +timidness +timing +timings +timocracies +timocracy +timorousness +timothies +timothy +timpani +timpanist +timpanists +tin +tin-opener +tin-openers +tinamou +tinamous +tincal +tinct +tincts +tincture +tinctures +tinder +tinders +tine +tinea +tineid +tines +tinfoil +ting +ting-a-ling +tinge +tinges +tingle +tingler +tinglers +tingles +tingling +tings +tinhorn +tinhorns +tininess +tinker +tinkers +tinkle +tinkler +tinklers +tinkles +tinkling +tinklings +tinman +tinner +tinners +tinnies +tinniness +tinning +tinnings +tinnitus +tinnituses +tinny +tins +tinsel +tinsels +tinsmith +tinsmiths +tinsnips +tinstone +tint +tinter +tinters +tinting +tintings +tintinnabulation +tintinnabulum +tints +tintype +tintypes +tinware +tip +tip-off +tip-offs +tipi +tipis +tipper +tippers +tippet +tippets +tipple +tippler +tipplers +tipples +tips +tipsiness +tipstaff +tipstaffs +tipster +tipsters +tiptoe +tiptoes +tiptop +tirade +tirades +tirailleur +tirailleurs +tire +tiredness +tirelessness +tires +tiresomeness +tirl +tirls +tiro +tiroes +tiros +tirrivee +tirrivees +tisane +tisanes +tissue +tissues +tit +titan +titanate +titanates +titanite +titanium +titans +titbit +titbits +titer +titfer +titfers +tithe +tither +tithers +tithes +tithing +tithings +titi +titian +titillation +titillations +titis +titivation +titlark +titlarks +title +title-holder +titles +titmouse +titration +titrations +titre +titres +tits +titter +titters +titties +tittivation +tittivations +tittle +tittle-tattle +tittle-tattler +tittles +tittup +tittups +titty +titubation +titubations +titular +titularities +titularity +titulars +titulary +tizzies +tizzy +tmesis +to-and-fro +to-do +to-dos +to-name +toad +toad-in-the-hole +toadflax +toadflaxes +toadies +toads +toadstool +toadstools +toady +toadyism +toast +toaster +toasters +toasting +toastings +toastmaster +toastmasters +toasts +tobacco +tobaccoes +tobacconist +tobacconists +tobaccos +tobies +toboggan +tobogganing +tobogganings +tobogganist +tobogganists +toboggans +toby +toccata +toccatas +tocher +tochers +tocology +tocopherol +tocsin +tocsins +tod +today +todays +toddies +toddle +toddler +toddlers +toddles +toddy +todies +tods +tody +toe +toe-in +toea +toecap +toecaps +toes +toetoe +toff +toffee +toffee-apple +toffee-apples +toffees +toffies +toffs +toffy +toft +tofts +tofu +tog +toga +togas +togated +togetherness +toggery +toggle +toggles +togs +togue +togues +toheroa +toheroas +toil +toile +toiler +toilers +toiles +toilet +toiletries +toiletry +toilets +toilette +toilettes +toils +toilsomeness +toitoi +tokamak +tokamaks +toke +token +tokenism +tokens +tokes +tokology +tokoloshe +tola +tolas +tolbooth +tolbooths +tolbutamide +tole +tolerability +tolerance +tolerances +toleration +tolerationism +tolerationist +tolerationists +tolerations +tolerator +tolerators +toles +toleware +toll +tollbooth +tollbooths +toller +tollers +tollgate +tollgates +tollman +tolls +tolu +toluate +toluene +toluidine +toluol +tom +tom-tom +tom-toms +tomahawk +tomahawks +tomalley +tomalleys +toman +tomans +tomatillo +tomatilloes +tomatillos +tomato +tomatoes +tomb +tombac +tombacs +tombak +tombaks +tombola +tombolas +tombolo +tombolos +tomboy +tomboyishness +tomboys +tombs +tombstone +tombstones +tome +tomentum +tomes +tomfool +tomfooleries +tomfoolery +tomfoolishness +tomfools +tomium +tomiums +tommies +tommy +tomogram +tomograms +tomograph +tomographs +tomography +tomorrow +tomorrows +tompion +tompions +toms +tomtit +tomtits +ton +ton-up +tonalities +tonality +tondo +tondos +tone +tonelessness +toneme +tonemes +toner +toners +tones +tong +tonga +tongas +tongs +tongue +tongue-lashing +tongues +tonguing +tonguings +tonic +tonicities +tonicity +tonics +tonight +tonishness +tonite +tonk +tonks +tonlet +tonlets +tonnage +tonnages +tonne +tonneau +tonneaus +tonnes +tonnishness +tonometer +tonometers +tons +tonsil +tonsillectomies +tonsillectomy +tonsillitis +tonsillotomies +tonsillotomy +tonsils +tonsure +tonsures +tontine +tontines +tonus +tonuses +tool +toolbox +toolboxes +tooler +toolers +tooling +toolings +toolmaker +toolmakers +toolmaking +toolroom +toolrooms +tools +toom +tooms +toon +toons +toot +tooter +tooters +tooth +toothache +toothaches +toothbrush +toothbrushes +toothpaste +toothpastes +toothpick +toothpicks +tooths +toothsomeness +toothwort +toothworts +tootle +tootles +toots +tootses +tootsies +tootsy +tootsy-wootsies +tootsy-wootsy +top +top-level +top-shell +toparch +toparchs +topaz +topazes +topazolite +tope +topee +topees +toper +topers +topes +tophus +topi +topiaries +topiary +topic +topicalities +topicality +topics +topis +toplessness +toploftiness +topman +topmast +topmasts +topminnow +topographer +topographers +topography +topologist +topologists +topology +toponym +toponyms +toponymy +topos +topotype +topotypes +topper +toppers +topping +toppings +tops +topsail +topsails +topside +topsides +topspin +topspins +topsyturviness +toque +toques +tor +toran +torans +torbanite +torbernite +torc +torch +torches +torchier +torchiers +torchlight +torchlights +torchwood +torcs +tore +toreador +toreadors +torero +toreros +tores +toreutics +tori +torii +toriis +torment +tormenter +tormenters +tormentil +tormentils +tormentor +tormentors +torments +tornado +tornadoes +tornados +toroid +toroids +torpedo +torpedoes +torpedos +torpidity +torpidness +torpor +torque +torques +torr +torrent +torrents +torridity +torridness +torrs +tors +torsade +torsades +torse +torsel +torsels +torses +torsi +torsibility +torsion +torsions +torsk +torsks +torso +torsos +tort +torte +tortellini +tortes +torticollis +tortilla +tortillas +tortoise +tortoises +tortoni +tortonis +tortricid +tortricids +tortrix +torts +tortuosity +tortuousness +torture +torturer +torturers +tortures +torturing +torturings +torus +tosh +toshes +toss +toss-up +toss-ups +tosses +tosspot +tosspots +tostada +tostadas +tot +total +totalisator +totalisators +totaliser +totalisers +totalitarianism +totalities +totality +totalization +totalizations +totalizator +totalizators +totalizer +totalizers +totals +totaquine +totara +tote +totem +totemism +totemist +totemists +totems +totes +totient +totients +toting +totipalmation +tots +totter +totterer +totterers +totters +toucan +toucanet +toucanets +toucans +touch +touch-me-not +touch-typist +touch-typists +touchableness +toucher +touchers +touches +touchiness +touching +touchingness +touchings +touchstone +touchstones +touchwood +tough +toughener +tougheners +toughie +toughies +toughness +toughs +toupee +toupees +tour +touraco +touracos +tourbillion +tourbillions +tourer +tourers +touring +tourings +tourism +tourist +tourists +tourmaline +tournament +tournaments +tournedos +tourney +tourneys +tourniquet +tourniquets +tours +tous-les-mois +touse +touses +tousle +tousles +tout +touter +touters +touts +touzle +touzles +tovarich +tovariches +tovarisch +tovarisches +tow +towage +towages +towardliness +towardness +towbar +towbars +towboat +towboats +towel +toweling +towelings +towelling +towellings +towels +tower +towers +towhee +towhees +towline +towlines +towmond +town +townee +townees +townie +townies +towns +townscape +townscapes +townsfolk +township +townships +townsman +townspeople +townswoman +towny +towpath +towpaths +towrope +towropes +tows +towser +towsers +toxaemia +toxaphene +toxemia +toxicant +toxicants +toxicity +toxicologist +toxicologists +toxicology +toxin +toxins +toxiphobia +toxoid +toxoids +toxophilite +toxophilites +toxophily +toxoplasmosis +toy +toyer +toyers +toying +toyings +toys +toyshop +toyshops +tra-la +trabecula +tracasserie +trace +traceability +traceableness +traceably +tracer +traceries +tracers +tracery +traces +trachea +tracheal +tracheid +tracheides +tracheids +tracheitis +tracheophyte +tracheostomies +tracheostomy +tracheotomies +tracheotomy +trachoma +trachyte +tracing +tracings +track +tracker +trackers +tracking +trackings +tracklayer +tracklessness +trackman +tracks +tracksuit +tracksuits +tract +tractability +tractableness +tractarian +tractarianism +tractarians +tractate +tractates +tractility +traction +tractor +tractors +tractrix +tracts +trad +trade +trade-in +trade-last +trade-off +trade-offs +tradecraft +trademark +trademarks +trader +traders +trades +tradescantia +tradescantias +tradesman +tradeswoman +trading +tradings +tradition +traditionalism +traditionalist +traditionalists +traditionality +traditionist +traditionists +traditions +traditor +traditores +traditors +traducement +traducements +traducer +traducers +traffic +trafficator +trafficators +trafficker +traffickers +traffics +tragacanth +tragacanths +tragedian +tragedians +tragedienne +tragediennes +tragedies +tragedy +tragicalness +tragopan +tragopans +tragus +trail +trailer +trailers +trailing +trails +train +trainee +trainees +traineeship +traineeships +trainer +trainers +training +trainings +trainload +trainloads +trains +traipse +traipses +trait +traitor +traitorousness +traitors +traitorship +traitress +traitresses +traits +trajection +trajections +trajectories +trajectory +tram +tramline +tramlines +trammel +trammeller +trammellers +trammels +tramontana +tramontanas +tramontane +tramontanes +tramp +trample +trampler +tramplers +tramples +trampling +tramplings +trampoline +trampoliner +trampoliners +trampolines +trampolinist +trampolinists +tramps +trams +tramway +tramways +trance +trances +tranche +tranches +trangam +trangams +trannie +trannies +tranquility +tranquilization +tranquilizer +tranquilizers +tranquillity +tranquillizer +tranquillizers +tranquilness +transactinide +transaction +transactions +transactor +transactors +transalpine +transaminase +transcalency +transceiver +transceivers +transcendence +transcendences +transcendencies +transcendency +transcendent +transcendentalism +transcendentalist +transcriber +transcribers +transcript +transcription +transcriptions +transcripts +transducer +transducers +transduction +transductions +transection +transenna +transennas +transept +transepts +transfer +transferability +transferase +transferee +transferees +transference +transferences +transferor +transferors +transferral +transferrals +transferrer +transferrers +transferrin +transfers +transfiguration +transfigurations +transfigurement +transfixion +transfixions +transform +transformation +transformations +transformer +transformers +transformism +transformist +transformists +transforms +transfuser +transfusers +transfusion +transfusions +transgression +transgressions +transgressor +transgressors +transhipment +transhumance +transhumances +transience +transiency +transient +transientness +transients +transillumination +transistor +transistors +transit +transitable +transition +transitions +transitiveness +transitivity +transitoriness +transits +translation +translations +translative +translator +translators +transliteration +transliterations +translocation +translocations +translucence +translucency +translunary +transmigrant +transmigrants +transmigration +transmigrations +transmissibility +transmission +transmissions +transmissiveness +transmissivity +transmittal +transmittals +transmittance +transmitter +transmitters +transmitting +transmogrification +transmogrifications +transmontane +transmutability +transmutableness +transmutation +transmutations +transmuter +transmuters +transom +transoms +transparence +transparences +transparencies +transparency +transparentness +transpiration +transpirations +transplant +transplantation +transplanting +transplants +transponder +transponders +transport +transportation +transportations +transporter +transporters +transports +transposability +transposal +transposals +transpose +transposer +transposers +transposes +transposition +transpositions +transsexual +transsexualism +transsexuals +transshipment +transshipments +transubstantiation +transubstantiationalist +transudate +transudates +transudation +transudations +transvaluation +transvaluations +transversal +transversals +transverse +transverses +transvestism +transvestite +transvestites +transvestitism +tranter +tranters +trap +trapan +trapans +trapes +trapeses +trapeze +trapezes +trapezium +trapeziums +trapezius +trapeziuses +trapezohedron +trapezohedrons +trapezoid +trapezoids +trapper +trappers +trappiness +trapping +trappings +traps +trapshooter +trapunto +trapuntos +trash +trashes +trashiness +trass +trattoria +trattorias +trauchle +trauchles +trauma +traumas +traumatism +traumatization +travail +travails +trave +travel +traveler +travelers +traveling +travelings +traveller +travellers +travelling +travellings +travelog +travelogs +travelogue +travelogues +travels +traversal +traversals +traverse +traverser +traversers +traverses +travertine +traves +travesties +travesty +travois +trawl +trawler +trawlers +trawls +tray +traymobile +traymobiles +trays +treacheries +treacherousness +treachery +treacle +treacles +tread +treader +treaders +treadle +treadler +treadlers +treadles +treadmill +treadmills +treads +treason +treasonableness +treasons +treasure +treasure-house +treasure-houses +treasure-trove +treasurer +treasurers +treasurership +treasurerships +treasures +treasuries +treasury +treat +treaties +treatise +treatises +treatment +treatments +treats +treaty +treble +trebles +trebuchet +trebuchets +trecento +trecentos +tree +tree-worship +treelessness +treen +treenail +treenails +treenware +trees +treetop +treetops +trefoil +trefoils +trehala +trehalas +treillage +treillages +trek +trekker +trekkers +treks +trellis +trellises +trematode +trematodes +tremble +trembler +tremblers +trembles +trembling +tremblings +tremendousness +tremie +tremies +tremolant +tremolants +tremolite +tremolo +tremolos +tremor +tremors +tremulant +tremulants +tremulousness +trenail +trenails +trench +trenchancy +trencher +trenchers +trenches +trend +trend-setter +trend-setters +trendies +trends +trendy +trental +trentals +trente-et-quarante +trepan +trepanation +trepanations +trepang +trepangs +trepanner +trepanners +trepans +trephine +trephines +trepidation +trepidations +treponema +treponemas +trespass +trespasser +trespassers +trespasses +tress +tresses +tressure +tressures +trestle +trestles +tret +trets +trevallies +trevally +trews +trey +treys +triad +triads +triage +triages +trial +trials +triangle +triangles +triangularity +triangulation +triangulations +triarchies +triarchy +tribade +tribades +tribadism +tribalism +tribalist +tribalists +tribe +tribes +tribesman +triblet +triblets +tribologist +tribologists +tribology +triboluminescence +tribrach +tribrachs +tribulation +tribulations +tribunal +tribunals +tribunate +tribunates +tribune +tribunes +tribuneship +tribuneships +tributaries +tributary +tribute +tributes +trice +tricentenary +tricentennial +triceps +tricepses +triceratops +triceratopses +trices +trichiasis +trichina +trichinas +trichiniasis +trichinisation +trichinisations +trichinization +trichinizations +trichinosis +trichite +trichites +trichloroethylene +trichogyne +trichogynes +trichologist +trichologists +trichology +trichome +trichomes +trichomonad +trichomonads +trichomoniasis +trichophyton +trichophytons +trichosis +trichotillomania +trichotomies +trichotomy +trichroism +trichromat +trichromatism +trichromats +trick +trickeries +trickery +trickiness +trickishness +trickle +tricks +trickster +trickstering +tricksterings +tricksters +triclinium +tricliniums +tricolor +tricolors +tricolour +tricolours +tricorn +tricorne +tricorns +tricot +tricots +tricrotism +tricuspid +tricycle +tricycles +tricyclic +tridacna +tridacnas +trident +tridents +triduum +triduums +tridymite +triennial +triennium +trienniums +trier +trierarch +trierarchies +trierarchs +trierarchy +triers +tries +triethylamine +trifle +trifler +triflers +trifles +trifling +triflingness +trifocal +trifocals +trifolium +trifoliums +triforium +trifurcation +trifurcations +trig +trigamist +trigamists +trigeminal +trigeminals +trigger +triggerfish +triggers +triglyceride +triglycerides +triglyph +triglyphs +trigness +trigon +trigonometer +trigonometers +trigonometry +trigons +trigram +trigrams +trigraph +trigraphs +trigs +trihedral +trihedrals +trihedron +trihedrons +trike +trikes +trilateral +trilaterals +trilateration +trilbies +trilby +trilbys +trilemma +trilemmas +trilingualism +triliteral +trilithon +trilithons +trill +trillion +trillions +trillionth +trillionths +trillium +trilliums +trills +trilobite +trilobites +trilogies +trilogy +trim +trimaran +trimarans +trimer +trimers +trimester +trimesters +trimeter +trimeters +trimethylene +trimetrogon +trimmer +trimmers +trimming +trimmings +trimness +trimorphism +trims +trindle +trindles +trine +trines +tringle +tringles +trinities +trinitrobenzene +trinitrophenol +trinitrotoluene +trinity +trinket +trinketer +trinketry +trinkets +trinkum +trinkums +trinomial +trinomials +trio +triode +triodes +triolet +triolets +trios +trioxide +trioxides +trip +tripartition +tripartitions +tripe +tripersonality +tripes +triphenylmethane +triphthong +triplane +triplanes +triple +triples +triplet +triplets +triplicate +triplicates +triplication +triplications +triplicities +triplicity +tripling +triplings +triploid +triploidy +tripod +tripodies +tripods +tripody +tripoli +tripos +triposes +tripper +trippers +trippet +trippets +trips +triptane +triptanes +triptych +triptychs +triptyque +triptyques +tripwire +triquetra +triquetral +triquetras +trireme +triremes +trisaccharide +trisaccharides +trishaw +trishaws +triskaidekaphobia +triskelion +trismus +trismuses +trisoctahedron +trisoctahedrons +trisomy +tristich +tristichs +trisulphide +trisyllable +trisyllables +tritanopia +triteness +tritheism +tritheist +tritheists +triticale +tritium +triton +tritone +tritones +tritons +triturate +triturates +trituration +triturations +triturator +triturators +triumph +triumpher +triumphers +triumphs +triumvir +triumvirate +triumvirates +triumvirs +triune +triunes +trivalence +trivalences +trivalencies +trivalency +trivalent +trivalve +trivalves +trivet +trivets +trivia +trivialisation +trivialisations +trivialism +triviality +trivialness +trivium +trocar +trocars +trochaic +trochanter +trochanters +troche +trochee +trochees +troches +trochilus +trochiluses +trochlea +trochlear +trochleas +trochoid +trochoids +trochophore +troglodyte +troglodytes +troglodytism +trogon +trogons +troika +troikas +troilism +troke +trokes +troll +troller +trollers +trolley +trolleys +trollies +trollius +trollop +trollops +trolls +trolly +trombone +trombones +trombonist +trombonists +trommel +trommels +tromometer +tromometers +trompe +trompes +trona +trone +trones +troop +trooper +troopers +troops +tropaeolin +tropaeolum +tropaeolums +trope +tropes +trophallaxis +trophies +trophoblast +trophoblasts +trophoplasm +trophoplasms +trophotropism +trophozoite +trophozoites +trophy +tropic +tropicbird +tropicbirds +tropics +tropism +tropology +tropopause +tropophyte +tropophytes +troposphere +trot +troth +troths +trotline +trotlines +trots +trotter +trotters +trotyl +trou-de-loup +troubadour +troubadours +trouble +troublemaker +troublemakers +troubler +troublers +troubles +troubleshooter +troubleshooters +troublesomeness +troubling +troublings +troublousness +trough +troughs +trouncer +trouncers +trouncing +trouncings +troupe +trouper +troupers +troupes +troupial +troupials +trouser +trousering +trouserings +trousers +trousseau +trousseaus +trout +trouts +trouvaille +trouvailles +trouveur +trouveurs +trove +trover +trovers +troves +trowel +troweller +trowellers +trowels +troy +truancies +truancy +truant +truants +truce +truces +truck +truckage +truckages +trucker +truckers +truckie +truckies +trucking +truckings +truckle +truckler +trucklers +truckles +truckling +trucklings +trucks +truculence +truculency +trudge +trudgen +trudgens +trudges +true +true-heartedness +trueness +trues +truffle +truffles +trug +trugs +truism +truisms +trull +trulls +trumeau +trump +trumpery +trumpet +trumpet-tree +trumpeter +trumpeters +trumpets +trumping +trumps +truncation +truncations +truncheon +truncheons +trundle +trundler +trundlers +trundles +trunk +trunkfish +trunkfishes +trunkful +trunkfuls +trunks +trunnion +trunnions +truss +trusser +trussers +trusses +trussing +trussings +trust +trustee +trustees +trusteeship +trusteeships +truster +trusters +trustfulness +trusties +trustiness +trustlessness +trusts +trustworthiness +trusty +truth +truth-value +truthfulness +truthlessness +truths +try +try-on +try-ons +trypaflavine +trypanosome +trypanosomes +trypanosomiasis +trypsin +tryptophan +tryptophane +trysail +trysails +tryst +trysts +tsar +tsardom +tsarevitch +tsarevitches +tsarevna +tsarevnas +tsarina +tsarinas +tsarism +tsarist +tsarists +tsaritsa +tsaritsas +tsaritza +tsaritzas +tsars +tsetse +tsetses +tsotsi +tsotsis +tsunami +tsunamis +tuart +tuarts +tuatara +tuataras +tub +tub-thumper +tub-thumpers +tuba +tubas +tubber +tubbers +tubbiness +tube +tubeless +tubenose +tubenoses +tuber +tubercle +tubercles +tubercular +tuberculin +tuberculisation +tuberculize +tuberculizes +tuberculoma +tuberculomas +tuberculosis +tuberose +tuberosities +tuberosity +tubers +tubes +tubful +tubfuls +tubifex +tubing +tubings +tubs +tubulation +tubulations +tubule +tubules +tuchun +tuchuns +tuck +tuck-shop +tuck-shops +tuckahoe +tuckahoes +tucker +tuckers +tucket +tuckets +tucks +tucotuco +tucotucos +tufa +tuff +tuffet +tuffets +tuffs +tuft +tufter +tufters +tufting +tuftings +tufts +tug +tug-of-war +tugger +tuggers +tughrik +tughriks +tugrik +tugriks +tugs +tui +tuille +tuilles +tuis +tuition +tularaemia +tularemia +tule +tules +tulip +tulipomania +tulips +tulle +tulwar +tulwars +tum +tumble +tumbler +tumblers +tumbles +tumbling +tumblings +tumbrel +tumbrels +tumbril +tumbrils +tumefaction +tumefactions +tumescence +tumescences +tumidity +tumidness +tummies +tummy +tumor +tumors +tumour +tumours +tump +tumps +tums +tumult +tumults +tumultuousness +tumulus +tun +tuna +tunableness +tunas +tundra +tundras +tune +tunefulness +tuner +tuners +tunes +tunesmith +tunesmiths +tung +tungs +tungstate +tungstates +tungsten +tungstic +tunic +tunica +tunicate +tunicle +tunicles +tunics +tuning +tunings +tunnage +tunnages +tunnel +tunneler +tunnelers +tunneller +tunnellers +tunnels +tunnies +tunny +tuns +tup +tupek +tupeks +tupelo +tupelos +tupik +tupiks +tuppence +tuppences +tups +tuque +tuques +turaco +turacos +turban +turbans +turbaries +turbary +turbellarian +turbellarians +turbidimeter +turbidimeters +turbidity +turbidness +turbinal +turbinate +turbine +turbines +turbit +turbits +turbo +turbocar +turbocars +turbocharger +turbochargers +turbofan +turbofans +turboprop +turboprops +turbos +turbot +turbots +turbulence +turbulences +turbulencies +turbulency +turd +turds +tureen +tureens +turf +turfiness +turfman +turfs +turgidity +turgidness +turgor +turion +turions +turkey +turkeys +turmeric +turmerics +turmoil +turmoils +turn +turn-on +turn-ons +turnaround +turnarounds +turnbuckle +turnbuckles +turncoat +turncoats +turncock +turncocks +turner +turneries +turners +turnery +turning +turnings +turnip +turnips +turnkey +turnkeys +turnover +turnovers +turnpike +turnpikes +turnround +turnrounds +turns +turnsole +turnsoles +turnspit +turnspits +turnstile +turnstiles +turnstone +turnstones +turntable +turntables +turpentine +turpentines +turpeth +turpeths +turpitude +turps +turquoise +turret +turrets +turtle +turtleback +turtlebacks +turtleneck +turtlenecks +turtles +turves +tusche +tush +tushery +tushes +tushie +tushies +tushy +tusk +tusker +tuskers +tusks +tussah +tussahs +tusseh +tussehs +tusser +tussers +tussis +tussle +tussles +tussock +tussocks +tussore +tussores +tut +tut-tut +tut-tuts +tutee +tutees +tutelage +tutelages +tutenag +tutiorism +tutor +tutorial +tutorials +tutoring +tutors +tutorship +tutorships +tuts +tutsan +tutsans +tutti-frutti +tutti-fruttis +tutty +tutu +tutus +tux +tuxedo +tuxedoes +tuxedos +tuxes +twaddle +twaddler +twaddlers +twaddles +twain +twains +twang +twangle +twangles +twangs +twattle +twattles +tweak +tweaks +tweed +tweediness +tweeds +tweenies +tweeny +tweet +tweeter +tweeters +tweets +twelfth +twelfths +twelve +twelvemo +twelvemonth +twelvemonths +twelvemos +twelves +twenties +twentieth +twentieths +twenty +twenty-five +twenty-four +twenty-one +twenty-two +twerp +twerps +twibill +twibills +twicer +twicers +twiddle +twiddler +twiddlers +twiddles +twier +twiers +twig +twigs +twilight +twilights +twill +twills +twin +twine +twiner +twiners +twines +twinflower +twinflowers +twinge +twinges +twink +twinkle +twinkler +twinklers +twinkles +twinkling +twinklings +twinks +twins +twirl +twirler +twirlers +twirls +twirp +twirps +twist +twister +twisters +twisting +twistings +twists +twit +twitch +twitches +twitching +twitchings +twite +twites +twits +twitter +twitterer +twitterers +twitters +twitting +twittings +two +two-by-four +two-dimensionality +two-master +two-piece +two-step +two-steps +two-timer +two-timers +two-up +two-wheeler +two-wheelers +twopence +twopences +twos +twosome +twosomes +tychism +tycoon +tycoons +tye +tyes +tyg +tygs +tying +tyke +tykes +tyler +tylers +tylopod +tylopods +tylosis +tymbal +tymbals +tympan +tympani +tympanies +tympanist +tympanists +tympanites +tympanitis +tympans +tympanum +tympanums +tympany +tyne +tynes +type +types +typescript +typescripts +typesetter +typesetters +typewriter +typewriters +typewriting +typhlitis +typhlology +typhoid +typhoidal +typhoon +typhoons +typhus +typicality +typicalness +typification +typifications +typifier +typifiers +typifying +typing +typings +typist +typists +typo +typographer +typographers +typographies +typography +typologies +typologist +typologists +typology +typos +tyramine +tyrannicalness +tyrannicide +tyrannicides +tyrannies +tyrannosaur +tyrannosaurs +tyrannosaurus +tyrannosauruses +tyranny +tyrant +tyrants +tyre +tyres +tyro +tyroes +tyros +tyrosinase +tyrosine +tzaddik +tzaddiks +tzar +tzars +tzimmes +uakari +uakaris +ubiety +ubiquitarian +ubiquitarians +ubiquitousness +ubiquity +udal +udals +udder +udders +udo +udometer +udometers +udos +ufo +ufology +ufos +ugli +uglies +ugliness +uglis +ugsomeness +uhlan +uhlans +uhuru +uintathere +uintatheres +uitlander +uitlanders +ukase +ukases +uke +ukes +ukiyo-e +ukulele +ukuleles +ulcer +ulceration +ulcerations +ulcerousness +ulcers +ulema +ulemas +ulex +ulexes +ulitis +ullage +ullages +ulna +ulotrichy +ulster +ulsters +ultima +ultimacy +ultimas +ultimate +ultimates +ultimatum +ultimatums +ultimogeniture +ultra +ultracentrifugation +ultracentrifuge +ultrafiche +ultrafiches +ultrafilter +ultrafiltration +ultraism +ultraist +ultraists +ultramarine +ultramicroscope +ultramicroscopy +ultramontane +ultramontanism +ultramontanist +ultramontanists +ultrasonics +ultrasonography +ultrasound +ultrastructure +ultrastructures +ultraviolet +ululation +ululations +ulva +umbel +umbellifer +umbellifers +umbellule +umbellules +umbels +umber +umbers +umbilical +umbilication +umbilicus +umbilicuses +umbo +umbos +umbra +umbrage +umbrageousness +umbrages +umbras +umbrella +umbrellas +umbrette +umbrettes +umiak +umiaks +umlaut +umlauts +umpirage +umpirages +umpire +umpires +umpiring +unabridged +unacceptableness +unacceptance +unaccountability +unaccountableness +unaccustomedness +unadvisedness +unaffectedness +unalterability +unalterableness +unamiableness +unanimities +unanimity +unanswerableness +unapprehensiveness +unaptness +unassumingness +unattainableness +unattractiveness +unau +unaus +unauthenticity +unavailability +unavailableness +unavoidability +unavoidableness +unawareness +unbalance +unbalances +unbearableness +unbecomingness +unbelief +unbeliever +unbelievers +unbendingness +unbirthday +unbirthdays +unblamableness +unblessedness +unboundedness +unbrokenness +uncandidness +uncanniness +unceremoniousness +uncertainness +uncertainties +uncertainty +unchangeability +unchangeableness +uncharitableness +unchasteness +unchastity +uncheerfulness +uncial +uncials +unciform +uncinus +uncircumcision +uncle +uncleanliness +uncleanness +unclearness +uncles +uncloudedness +uncomfortableness +uncommonness +uncommunicativeness +uncompromisingness +unconcern +unconcerns +unconditionality +unconditionalness +unconfessed +unconformability +unconformity +uncongeniality +unconscientiousness +unconscionableness +unconscious +unconsciousness +unconstraint +unconventionality +uncourtliness +uncouthness +uncovering +unction +unctions +unctuosity +unctuousness +uncus +undauntedness +undemonstrativeness +undeniableness +undenominational +undependableness +underachievement +underachiever +underachievers +underactor +underactors +underagent +underagents +underbellies +underbelly +underbidder +underbidders +underbough +underboughs +underbridge +underbridges +underbrush +underbrushes +underbuilder +underbuilders +undercarriage +undercarriages +undercart +undercast +undercasts +undercharge +undercharges +underclassman +underclay +underclothes +underclothing +undercoat +undercoating +undercoats +underconsciousness +undercook +undercooks +undercountenance +undercrest +undercroft +undercrofts +undercurrent +undercurrents +undercut +undercuts +underdevelopment +underdog +underdogs +underdrain +underdrains +underdress +underdresses +underestimate +underestimates +underestimation +underexposure +underexposures +underfeed +underfeeds +underfelt +underflow +underflows +underfur +underfurs +undergarment +undergarments +underglaze +undergrad +undergrads +undergraduate +undergraduates +undergraduateship +undergraduette +undergraduettes +underground +undergrounds +undergrowth +undergrowths +underhandedness +underking +underkingdom +underkingdoms +underkings +underlay +underlayer +underlayers +underlays +underline +underlinen +underlinens +underlines +underling +underlings +underlip +underlips +undermeaning +underminer +underminers +underneath +undernote +undernotes +undernourishment +underpainting +underpants +underpass +underpasses +underpayment +underpayments +underpinning +underpinnings +underplot +underplots +underrating +underrepresentation +underring +underrun +underruns +underscore +underscores +underseal +underseals +underseller +undersellers +underset +undersets +undershirt +undershirts +undershrub +undershrubs +underside +undersides +undersigned +underskies +underskirt +underskirts +undersky +undersleeve +undersleeves +undersoil +undersoils +understanding +understandings +understatement +understatements +understock +understocks +understrapper +understrappers +understudies +understudy +undersupplies +undersupply +undertaker +undertakers +undertaking +undertakings +undertenancies +undertenancy +undertenant +undertenants +underthrust +underthrusts +undertint +undertints +undertone +undertones +undertow +undertows +underutilization +undervaluation +undervaluations +undervest +undervests +underviewer +underviewers +undervoice +undervoices +underwear +underwing +underwings +underwood +underwoods +underworker +underworkers +underworkman +underworld +underwriter +underwriters +undesirability +undesirable +undesirableness +undesirables +undies +undine +undines +undiscipline +undistractedness +undoer +undoers +undoing +undoings +undress +undresses +undulation +undulations +undutifulness +undyingness +unease +uneasiness +unemployment +unerringness +unessential +unevenness +unexceptionableness +unexpectedness +unfairness +unfaithfulness +unfamiliarity +unfastening +unfavorableness +unfavourableness +unfeelingness +unfitness +unfixity +unfolder +unfolders +unfolding +unfoldings +unfortunate +unfortunateness +unfortunates +unfriendedness +unfriendliness +ungainliness +ungentility +ungentleness +ungenuineness +ungodliness +ungovernableness +ungracefulness +ungraciousness +ungratefulness +unguardedness +unguent +unguents +unguiculate +unguis +ungula +ungulate +unhandsomeness +unhappiness +unhealthfulness +unhealthiness +unhingement +unhingements +unholiness +uni +unicorn +unicorns +unicycle +unicycles +unification +unifications +unifier +unifiers +uniform +uniformitarian +uniformitarianism +uniformitarians +uniformities +uniformity +uniformness +uniforms +unilateralism +unilateralist +unilateralists +unilaterality +unimaginableness +unimportance +unintelligibility +union +unionisation +unionisations +unionism +unionist +unionists +unionization +unionizations +unions +unipod +unipods +unique +uniqueness +uniques +unis +unisexuality +unison +unisons +unit +unitarianism +unite +unitedness +uniter +uniters +unites +unities +uniting +unitings +units +unity +univalence +univalences +univalve +universal +universalisation +universalism +universalist +universalists +universalities +universality +universalization +universals +universe +universes +universitarian +universitarians +universities +university +univocal +unjustness +unkindliness +unkindness +unknightliness +unknowing +unknowingness +unknown +unknownness +unknowns +unlawfulness +unlikelihood +unlikelihoods +unlikeliness +unlikeness +unlimitedness +unliveliness +unloader +unloaders +unloading +unloadings +unloveliness +unluckiness +unmalleability +unmanageableness +unmanliness +unmannerliness +unmasking +unmeaningness +unmercifulness +unmindfulness +unmorality +unnaturalness +unnecessariness +unneighbourliness +unnilhexium +unnilpentium +unnilquadium +unnilseptium +unobtrusiveness +unoriginality +unorthodoxies +unorthodoxy +unpacker +unpackers +unperson +unpersons +unpitifulness +unpleasantness +unpleasantnesses +unpoliteness +unpopularity +unpracticality +unpredictability +unpreparedness +unpretentiousness +unprettiness +unproductiveness +unproductivity +unprofitability +unprofitableness +unprogressiveness +unpropitiousness +unprosperousness +unprotectedness +unpunctuality +unqualifiedness +unquiet +unquiets +unraveller +unravellers +unravelment +unravelments +unreadiness +unrealism +unrealities +unreality +unreason +unreasonableness +unreconcilableness +unregenerate +unrelentingness +unreliability +unreliableness +unremittingness +unrepair +unreserve +unreservedness +unresponsiveness +unrest +unrestfulness +unrestraint +unrestraints +unrests +unriddler +unriddlers +unrighteousness +unrightfulness +unripeness +unruliness +uns +unsafeness +unsafety +unsalability +unsatisfactoriness +unsaturation +unsavouriness +unscrupulousness +unsearchableness +unseasonableness +unseaworthiness +unseemliness +unseen +unseens +unselfconsciousness +unselfishness +unsettledness +unsettlement +unsightliness +unskilfulness +unskillfulness +unsnarling +unsociability +unsociableness +unsocialism +unsolidity +unsophisticatedness +unsophistication +unsoundness +unspeakableness +unstableness +unstaidness +unsteadfastness +unsteadiness +unsubstantiality +unsuccess +unsuccessfulness +unsuitability +unsuitableness +unsuppleness +unsuspectedness +unsuspiciousness +untangling +untenability +untenableness +unthankfulness +unthatch +unthatches +unthinkability +unthinkingness +unthoughtfulness +unthriftiness +untidiness +untimeliness +untouchable +untowardness +untractableness +untrustiness +untrustworthiness +untruth +untruthfulness +untruths +untunableness +untying +unusefulness +unusualness +unveiling +unveilings +unverifiability +unwariness +unwashed +unwatchfulness +unwell +unwholesomeness +unwieldiness +unwillingness +unwisdom +unwiseness +unwit +unwittingness +unwontedness +unworldliness +unworthiness +unyieldingness +up-and-under +up-and-unders +up-bow +upas +upases +upbeat +upbeats +upbraiding +upbraidings +upbringing +upbringings +upburst +upcast +upcasts +update +updates +updating +upending +upgrade +upgrader +upgraders +upgrades +upgrowth +upgrowths +upheaval +upheavals +uphill +uphills +upholder +upholders +upholsterer +upholsterers +upholsteries +upholstery +uphroe +uphroes +upkeep +upland +uplander +uplanders +uplands +uplift +uplifter +uplifters +uplifting +upliftings +uplifts +uplink +uplinks +upper +upper-case +uppercut +uppercuts +uppers +uppishness +upright +uprightness +uprights +uprise +uprises +uprising +uprisings +upriver +uproar +uproariousness +uproars +uprooter +uprooters +uprush +uprushes +upset +upsets +upsetting +upsettings +upshot +upshots +upside +upsides +upsilon +upspring +upsprings +upstage +upstages +upstairs +upstart +upstarts +upstate +upstroke +upstrokes +upsurge +upsurges +upsweep +upsweeps +upswing +upswings +uptake +uptakes +upthrow +upthrows +upthrust +upthrusts +uptown +uptowner +uptowners +uptrend +uptrends +upturn +upturns +upwardness +uracil +uraemia +uraeus +uraeuses +uralite +uranalysis +uranide +uranides +uraninite +uranism +uranite +uranium +uranographer +uranographist +uranographists +uranography +uranology +uranometry +uranyl +uranyls +urari +uraris +urate +urates +urbaneness +urbanisation +urbanism +urbanite +urbanites +urbanity +urbanization +urchin +urchins +urd +urds +urea +uredinium +uredium +uredo +uredosorus +uredosoruses +uredospore +uredospores +ureide +uremia +urena +urenas +ureter +ureteritis +ureters +urethan +urethane +urethra +urethras +urethritis +urethroscope +urethroscopy +urge +urgencies +urgency +urger +urgers +urges +urging +urgings +urial +urials +uridine +urinal +urinals +urinalysis +urinaries +urinary +urination +urinations +urine +urn +urnfield +urnfields +urning +urnings +urns +urochord +urochordate +urochordates +urochords +urochrome +urodele +urodeles +urolith +uroliths +urologist +urologists +urology +uropod +uropods +uropygium +uropygiums +uroscopy +urostyle +urostyles +urtica +urticaria +urticas +urtication +urus +uruses +usableness +usage +usages +usance +usances +use +useful +usefulness +uselessness +user +users +uses +usher +usherette +usherettes +ushers +using +usnea +usneas +usquebaugh +usquebaughs +ustulation +usual +usualness +usuals +usufruct +usufructs +usufructuary +usurer +usurers +usuriousness +usurpation +usurpations +usurper +usurpers +usury +utensil +utensils +uterus +utilisation +utilisations +utilitarian +utilitarianism +utilitarians +utilities +utility +utilization +utilizations +utilizer +utilizers +utmost +utmosts +utopia +utopian +utopianism +utopians +utopias +utricle +utricles +utriculus +utterance +utterances +utterer +utterers +uttermost +utterness +utu +uvarovite +uvea +uveas +uveitis +uvula +uvular +uvulas +uvulitis +uxoricide +uxoricides +uxoriousness +vac +vacancies +vacancy +vacantness +vacation +vacationer +vacationers +vacationist +vacationists +vacations +vaccinating +vaccination +vaccinations +vaccinator +vaccinators +vaccine +vaccines +vaccinia +vaccinium +vacciniums +vacherin +vacherins +vacillation +vacillations +vacs +vacua +vacuities +vacuity +vacuolation +vacuolations +vacuole +vacuoles +vacuolization +vacuousness +vacuum +vacuums +vagabond +vagabondage +vagabonds +vagaries +vagary +vagina +vaginas +vaginismus +vaginitis +vagrancy +vagrant +vagrants +vagueness +vagus +vail +vails +vain +vaingloriousness +vainglory +vair +vairs +vaivode +vaivodes +vakeel +vakeels +valance +valances +vale +valediction +valedictions +valedictorian +valedictorians +valedictories +valedictory +valence +valences +valencies +valency +valentine +valentines +valerian +valerians +vales +valet +valeta +valetas +valets +valetudinarian +valetudinarianism +valetudinarians +valetudinaries +valetudinary +vali +valiance +valiances +valiancies +valiancy +validating +validation +validations +validity +validness +valine +valis +valise +valises +vallecula +valley +valleys +valonia +valonias +valor +valorisation +valorisations +valorization +valorizations +valour +valse +valses +valuable +valuableness +valuables +valuation +valuations +valuator +valuators +value +valuer +valuers +values +valuta +valutas +valve +valvelet +valvelets +valves +valvule +valvules +valvulitis +vambrace +vambraces +vamp +vamper +vampers +vampire +vampires +vampirism +vampirisms +vamps +van +vanadate +vanadates +vanadinite +vanadium +vandal +vandalism +vandals +vane +vanes +vanessa +vanessas +vang +vangs +vanguard +vanguards +vanilla +vanillas +vanillin +vanish +vanisher +vanishers +vanishes +vanishing +vanishings +vanishment +vanishments +vanities +vanity +vanquisher +vanquishers +vanquishment +vanquishments +vans +vantage +vantages +vapidity +vapidness +vapor +vaporetto +vaporettos +vaporimeter +vaporimeters +vaporing +vaporisation +vaporization +vaporizer +vaporizers +vaporosities +vaporosity +vaporousness +vapors +vapour +vapouring +vapourings +vapourishness +vapours +vaquero +vaqueros +vara +varactor +varactors +varan +varans +varas +varec +varecs +variability +variable +variableness +variables +variance +variances +variant +variants +variate +variates +variation +variational +variations +varicella +varicocele +varicoceles +varicosities +varicosity +varicotomies +varicotomy +variegation +variegations +varier +variers +varieties +variety +variola +variolas +variolation +variolations +variole +varioles +variolite +varioloid +variometer +variometers +variorum +variorums +variscite +varistor +varistors +varitypist +varitypists +varix +varlet +varletry +varlets +varment +varments +varmint +varmints +varna +varnas +varnish +varnisher +varnishers +varnishes +varsities +varsity +varve +varves +vas +vascularity +vascularization +vasculum +vasculums +vase +vasectomies +vasectomy +vases +vasoconstriction +vasoconstrictor +vasodilatation +vasodilatations +vasodilator +vasodilators +vasopressin +vasopressor +vasopressors +vassal +vassalage +vassalages +vassals +vast +vastitude +vastitudes +vastity +vastness +vastnesses +vasts +vat +vaticide +vaticides +vaticination +vaticinator +vaticinators +vats +vaudeville +vaudevilles +vaudevillian +vaudevillians +vault +vaulter +vaulters +vaulting +vaultings +vaults +vaunt +vaunt-courier +vaunter +vaunters +vaunts +vavasories +vavasory +vaward +veal +vealer +vealers +veals +vector +vectors +vedalia +vedalias +vedette +vedettes +vee +veep +veeps +veer +veeries +veering +veerings +veers +veery +vees +veg +vega +vegan +vegans +vegas +veges +vegetable +vegetables +vegetarian +vegetarianism +vegetarians +vegetation +veggie +veggies +vehemence +vehicle +vehicles +veil +veiling +veilings +veils +vein +veining +veinings +veinlet +veinlets +veins +veinstone +vela +velamen +velarium +velariums +velarization +velarizations +veld +velds +veldskoen +veldt +veldts +veleta +veletas +veliger +veligers +velitation +velitations +velleity +vellication +vellications +vellum +vellums +velocipede +velocipedes +velocities +velocity +velodrome +velodromes +velour +velours +velum +velure +velvet +velveteen +velveteens +velvetiness +velvets +vena +venality +venation +vendace +vendaces +vendee +vendees +vender +venders +vendetta +vendettas +vendibility +vendible +vendibleness +vending +vendition +venditions +vendor +vendors +vendue +veneer +veneerer +veneerers +veneering +veneerings +veneers +venepuncture +veneration +venerations +venerator +venerators +venereologist +venereologists +venereology +venerer +venerers +venery +venesection +venesections +vengeance +vengeances +vengefulness +veniality +venin +venins +venipuncture +venireman +venisection +venison +venography +venom +venomousness +venoms +venosity +vent +ventage +ventages +ventail +ventails +venter +venters +ventilation +ventilations +ventilator +ventilators +venting +ventings +ventose +ventosity +ventricle +ventricles +ventriculography +ventriculus +ventriloquism +ventriloquist +ventriloquists +ventriloquy +vents +venture +ventures +venturesomeness +venturi +venturis +venturousness +venue +venues +venule +venules +venus +venuses +veraciousness +veracities +veracity +veranda +verandah +verandahs +verandas +veratrine +veratrum +veratrums +verb +verbal +verbalisation +verbalisations +verbalism +verbalisms +verbalist +verbalists +verbality +verbalization +verbalizations +verbals +verbena +verbenas +verbiage +verbid +verbids +verbification +verboseness +verbosity +verbs +verdancy +verderer +verderers +verdict +verdicts +verdigris +verdigrises +verdin +verdins +verdite +verditer +verdure +verge +verger +vergers +verges +verglas +verglases +veridicality +veriest +verifiability +verification +verifications +verifier +verifiers +verisimilitude +verism +verismo +verist +verists +veritableness +verities +verity +verjuice +verjuices +verkrampte +verkramptes +verligte +verligtes +vermeil +vermeils +vermicelli +vermicide +vermicides +vermiculation +vermiculations +vermiculite +vermifuge +vermifuges +vermilion +vermilions +vermin +vermination +verminations +vermis +vermises +vermouth +vermouths +vernacular +vernacularisation +vernacularism +vernacularisms +vernacularization +vernaculars +vernalisation +vernalisations +vernalization +vernalizations +vernation +vernations +vernicle +vernicles +vernier +verniers +vernissage +veronica +veronicas +verruca +verrucas +vers +versant +versatileness +versatility +verse +verses +verset +versets +versicle +versicles +versification +versifications +versifier +versifiers +versine +versines +version +versions +verso +versos +verst +versts +vert +vertebra +vertebras +vertebrate +vertebrates +vertebration +vertebrations +vertex +vertexes +vertical +verticality +verticalness +verticals +vertices +verticil +verticillaster +verticillasters +verticillium +verticity +vertigo +vertigoes +vertigos +verts +vertu +vertus +vervain +vervains +verve +verves +vervet +vervets +vesica +vesicant +vesicants +vesication +vesications +vesicatories +vesicatory +vesicle +vesicles +vesiculation +vespa +vespas +vesper +vesperal +vespers +vespertilionid +vespertilionidae +vespiaries +vespiary +vessel +vessels +vest +vest-pocket +vesta +vestal +vestals +vestas +vestiaries +vestiary +vestibule +vestibules +vestige +vestiges +vestigium +vesting +vestings +vestment +vestments +vestries +vestry +vestryman +vests +vesture +vestures +vesuvianite +vet +vetch +vetches +vetchling +vetchlings +veteran +veterans +veterinarian +veterinarians +veterinaries +veterinary +vetiver +veto +vetoes +vets +vexation +vexations +vexatiousness +vexedness +vexer +vexers +vexillaries +vexillary +vexillology +vexillum +viability +viaduct +viaducts +vial +vials +viand +viands +viaticum +viaticums +viator +viators +vibes +vibist +vibists +vibraculum +vibraharp +vibraharps +vibrancy +vibrant +vibraphone +vibraphones +vibraphonist +vibraphonists +vibratile +vibration +vibrations +vibrato +vibrator +vibrators +vibratos +vibrio +vibrios +vibriosis +vibrissa +vibrometer +vibrometers +viburnum +viburnums +vicar +vicar-general +vicarage +vicarages +vicarate +vicariate +vicariates +vicariousness +vicars +vicarship +vicarships +vice +vice-admiral +vice-admiralty +vice-chairman +vice-consulate +vice-consulship +vice-presidency +vicegerencies +vicegerency +vicegerent +vicegerents +vicereine +vicereines +viceroy +viceroyalties +viceroyalty +viceroys +viceroyship +viceroyships +vices +vichyssoise +vichyssoises +vicinage +vicinages +vicinities +vicinity +viciousness +vicissitude +vicissitudes +vicomte +vicomtes +vicomtesse +vicomtesses +victim +victimisation +victimisations +victimiser +victimisers +victimization +victimizations +victimizer +victimizers +victims +victor +victoria +victorias +victories +victorine +victorines +victoriousness +victors +victory +victress +victresses +victrix +victrixes +victual +victualler +victuallers +victuals +video +videocassette +videocassettes +videodisk +videodisks +videophone +videophones +videos +videotape +videotapes +vidette +videttes +vie +vier +viers +vies +view +viewer +viewers +viewfinder +viewfinders +viewing +viewings +viewpoint +viewpoints +views +vigesimo-quarto +vigia +vigias +vigil +vigilance +vigilante +vigilantes +vigilantism +vigils +vignette +vignetter +vignetters +vignettes +vignetting +vignettist +vignettists +vigor +vigorish +vigorousness +vigour +vihara +viharas +vihuela +vihuelas +viking +vikings +vilayet +vilayets +vileness +vilification +vilifications +vilifier +vilifiers +villa +villadom +village +villager +villagers +villages +villain +villainage +villainages +villainess +villainesses +villainies +villains +villainy +villanelle +villanelles +villas +villein +villeinage +villeinages +villeins +villosity +villus +vim +vimana +vimanas +vims +vina +vinaigrette +vinaigrettes +vinas +vinasse +vinblastine +vincibility +vincristine +vinculum +vindication +vindications +vindicator +vindicators +vindictiveness +vine +vined +vinegar +vinegars +vineries +vinery +vines +vineyard +vineyards +vingt-et-un +viniculture +viniculturist +viniculturists +vinificator +vinificators +vino +vinos +vinosity +vintage +vintager +vintagers +vintages +vintner +vintners +viny +vinyl +vinylidene +viol +viola +violas +violation +violations +violator +violators +violence +violences +violet +violets +violin +violinist +violinists +violins +violist +violists +violoncello +violoncellos +violone +violones +viols +viper +vipers +virago +viragoes +viragos +virelay +virelays +vireo +vireos +virescence +virga +virgate +virgates +virgin +virgin's-bower +virginal +virginals +virginity +virginium +virgins +virgule +virgules +viricide +viricides +viridescence +viridian +viridity +virilism +virility +virilization +virion +virions +virl +virls +viroid +viroids +virology +virosis +virtu +virtuality +virtue +virtues +virtuosities +virtuosity +virtuoso +virtuosos +virtuousness +virtus +virucide +virucides +virulence +virus +viruses +vis +visa +visage +visages +visas +viscacha +viscachas +viscera +viscerotonia +viscidity +viscometer +viscometers +viscometry +viscose +viscosimeter +viscosimeters +viscosities +viscosity +viscount +viscountcies +viscountcy +viscountess +viscountesses +viscounties +viscounts +viscounty +viscousness +viscum +viscus +vise +vises +visibilities +visibility +visible +visibleness +vision +visionaries +visionariness +visionary +visions +visit +visitant +visitants +visitation +visitations +visites +visiting +visitings +visitor +visitors +visits +visor +visors +vista +vistas +visual +visualisation +visualisations +visualiser +visualisers +visualist +visualists +visualization +visualizations +visualizer +visualizers +visuals +vita +vital +vitalisation +vitaliser +vitalisers +vitalism +vitalist +vitalists +vitalities +vitality +vitalization +vitalizer +vitalizers +vitals +vitamin +vitamine +vitamines +vitamins +vitas +vitascope +vitascopes +vitellin +vitellines +vitellus +vitiation +vitiations +vitiator +vitiators +viticetum +viticetums +viticulture +vitiligo +vitrain +vitrescence +vitrics +vitrification +vitrifications +vitrine +vitrines +vitriol +vitriolization +vitriolizations +vitriols +vitta +vittle +vittles +vituperation +vituperator +vituperators +vivaciousness +vivacities +vivacity +vivarium +vivariums +viverrine +vives +vividity +vividness +vivification +vivifying +viviparism +viviparity +viviparousness +vivisection +vivisectionist +vivisectionists +vivisections +vivisector +vivisectors +vixen +vixens +viz +vizard +vizards +vizcacha +vizcachas +vizier +vizierate +vizierates +viziers +viziership +vizierships +vizirate +vizirates +vizor +vizors +vizsla +vizslas +vlei +vleis +vocab +vocable +vocables +vocabularies +vocabulary +vocal +vocalise +vocalises +vocalism +vocalisms +vocalist +vocalists +vocality +vocalization +vocalizer +vocalizers +vocalizing +vocalness +vocals +vocation +vocations +vocative +vocatives +voces +vociferance +vociferant +vociferation +vociferator +vociferators +vociferousness +vodka +vodkas +vogue +vogues +voice +voice-over +voice-overs +voicefulness +voicelessness +voices +void +voidance +voidances +voider +voiders +voiding +voidings +voidness +voidnesses +voids +voile +voiles +voiture +vol-au-vent +volaries +volary +volatile +volatileness +volatiles +volatilisation +volatilities +volatility +volcanicity +volcanism +volcano +volcanoes +volcanologist +volcanologists +volcanology +vole +voles +volition +volley +volleyer +volleyers +volleys +volost +volosts +volplane +volplanes +vols +volt +volta +voltage +voltages +voltaic +voltaism +voltameter +voltameters +volte-face +voltes +voltmeter +voltmeters +volts +volubility +volume +volumes +volumeter +volumeters +voluminosity +voluminousness +voluntaries +voluntariness +voluntarism +voluntary +voluntaryism +voluntaryist +voluntaryists +volunteer +volunteers +voluptuaries +voluptuary +voluptuousness +volute +volutes +volution +volutions +volva +volvas +volvulus +volvuluses +vomer +vomers +vomica +vomicas +vomit +vomiting +vomitings +vomitive +vomito +vomitories +vomitorium +vomitoriums +vomitory +vomits +vomiturition +vomitus +vomituses +voodoo +voodooism +voodooist +voodooists +voodoos +voraciousness +voracities +voracity +vortex +vortexes +vorticella +vortices +vorticism +vorticity +votaries +votary +vote +voter +voters +votes +voting +votress +votresses +vouch +vouchee +vouchees +voucher +vouchers +vouches +vouchsafement +vouchsafements +vouge +vouges +voussoir +voussoirs +vow +vowel +vowelize +vowelizes +vowels +vower +vowers +vows +vox +voyage +voyager +voyagers +voyages +voyageur +voyageurs +voyeur +voyeurism +voyeurs +vraisemblance +vraisemblances +vug +vugs +vulcan +vulcanisation +vulcanisations +vulcanism +vulcanist +vulcanists +vulcanite +vulcanization +vulcanizations +vulcanologist +vulcanologists +vulcanology +vulcans +vulgarian +vulgarians +vulgarisation +vulgarisations +vulgariser +vulgarisers +vulgarism +vulgarisms +vulgarities +vulgarity +vulgarization +vulgarizations +vulgate +vulgates +vulgus +vulguses +vulnerability +vulneraries +vulnerary +vulpicide +vulpicides +vulpinite +vulture +vultures +vulva +vulvas +vulvitis +wabble +wabbler +wabblers +wabbles +wack +wacke +wackiness +wacks +wad +wadding +waddings +waddle +waddles +wade +wader +waders +wades +wadi +wadies +wading +wadings +wadis +wadmal +wads +wadset +wadsets +wadsetter +wadsetters +wae +wafer +wafer-thin +wafers +waff +waffle +waffles +waffs +waft +waftage +waftages +wafter +wafters +wafts +wafture +waftures +wag +wage +wage-plug +wage-plugs +wager +wagerer +wagerers +wagers +wages +waggeries +waggery +waggishness +waggle +waggles +waggon +waggoner +waggoners +waggons +wagon +wagon-lit +wagon-lits +wagonage +wagonages +wagoner +wagoners +wagonette +wagonettes +wagons +wags +wagtail +wagtails +wahine +wahines +wahoo +wahoos +waif +waifs +wail +wailer +wailers +wailing +wailings +wails +wain +wainage +wainages +wains +wainscot +wainscoting +wainscotings +wainscots +wainscotting +wainscottings +wainwright +wainwrights +waist +waistband +waistbands +waistcloth +waistcloths +waistcoat +waistcoating +waistcoats +waister +waisters +waistline +waistlines +waists +wait +wait-a-bit +waiter +waiters +waiting +waitings +waitress +waitresses +waits +waiver +waivers +waka +wakas +wake +wake-robin +wakefulness +waken +wakening +wakenings +wakens +waker +wakers +wakes +waking +wakings +waldgrave +waldgraves +wale +wales +waling +walk +walk-on +walk-through +walk-throughs +walk-up +walk-ups +walkabout +walkabouts +walker +walkers +walkie-talkie +walkie-talkies +walking +walkings +walks +walkway +walkways +walky-talkies +walky-talky +wall +walla +wallaba +wallabas +wallabies +wallaby +wallah +wallahs +wallaroo +wallaroos +wallas +wallet +wallets +wallflower +wallflowers +wallies +wallop +walloper +wallopers +walloping +wallopings +wallops +wallow +wallower +wallowers +wallows +wallpaper +wallpapers +walls +wally +walnut +walnuts +walrus +walruses +waltz +waltzer +waltzers +waltzes +wamble +wambles +wambliness +wame +wames +wammus +wammuses +wampee +wampees +wampum +wampumpeag +wampumpeags +wampums +wampus +wampuses +wamus +wamuses +wan +wand +wander +wanderer +wanderers +wandering +wanderings +wanderlust +wanderoo +wanderoos +wanders +wandle +wandoo +wands +wane +wanes +wangle +wangler +wanglers +wangles +wangling +wanglings +wanigan +wanigans +waning +wanings +wanion +wannabe +wannabee +wannabees +wannabes +wanness +wans +want +wantage +wanter +wanters +wanton +wantonness +wantons +wants +wap +wapentake +wapentakes +wapinschaw +wapinschaws +wapiti +wapitis +wappenshaw +wappenshaws +waps +war +war-horse +war-horses +war-weary +waratah +waratahs +warble +warbler +warblers +warbles +ward +warden +wardenries +wardenry +wardens +wardenship +wardenships +warder +warders +wardress +wardresses +wardrobe +wardrobes +wardroom +wards +wardship +ware +warehouse +warehouseman +warehouses +warehousing +warehousings +wares +warfare +warfarin +warhead +warheads +wariness +warison +wark +warks +warlock +warlocks +warlord +warlords +warm +warm-up +warm-ups +warmer +warmers +warming +warmings +warmness +warmonger +warmongering +warmongers +warms +warmth +warner +warners +warning +warnings +warp +warpath +warpaths +warper +warpers +warping +warpings +warplane +warplanes +warps +warragal +warragals +warrant +warrantableness +warrantee +warrantees +warranter +warranters +warranties +warrantor +warrantors +warrants +warranty +warred +warren +warrener +warreners +warrens +warrigal +warrigals +warring +warrior +warriors +wars +warship +warships +warsle +warsles +wart +wartime +warts +wartweed +wartweeds +wartwort +wartworts +wase +wases +wash +wash-and-wear +wash-leather +wash-leathers +wash-up +washer +washerman +washers +washerwoman +washery +washes +washiness +washing +washing-up +washings +washrag +washrags +washroom +washrooms +wasn't +wasp +waspishness +wasps +wassail +wassailer +wassailers +wassails +wastage +wastages +waste +wastefulness +wasteland +wastelands +wastelot +wasteness +wastepaper +waster +wasters +wastery +wastes +wasting +wastings +wastrel +wastrels +wastry +wat +watap +watch +watch-glass +watch-glasses +watchband +watchbands +watcher +watchers +watches +watchfulness +watching +watchmaker +watchmakers +watchman +watchstrap +watchstraps +watchword +watchwords +water +water-bath +water-rate +water-rates +water-skiing +waterage +waterages +watercolor +watercolors +watercourse +watercourses +watercress +watercresses +waterer +waterers +waterfall +waterfalls +waterfront +waterfronts +wateriness +watering +waterings +waterishness +waterman +watermanship +watermark +watermarks +waterproof +waterproofing +waterproofs +waters +watershed +watersheds +waterside +watersides +watertightness +waterway +waterways +waterworks +wats +watt +watt-hour +watt-hours +wattage +wattages +wattle +wattles +wattmeter +wattmeters +watts +waucht +wauchts +waught +waughts +wauk +wauks +wave +waveband +wavebands +waveform +waveforms +waveguide +waveguides +wavelength +wavelengths +wavelet +wavelets +wavellite +wavemeter +wavemeters +waver +waverer +waverers +wavering +waverings +wavers +waves +wavey +waveys +waviness +waving +wavings +waw +waws +wax +wax-chandler +wax-chandlers +waxberries +waxberry +waxer +waxers +waxes +waxiness +waxing +waxings +waxplant +waxwing +waxwings +waxwork +waxworks +way +wayfarer +wayfarers +wayfaring +wayfarings +waylayer +waylayers +ways +wayside +waysides +wayzgoose +wayzgooses +we've +weak-mindedness +weakener +weakeners +weakening +weakfish +weakfishes +weakliness +weakling +weaklings +weakness +weaknesses +weal +weald +wealds +weals +wealth +wealthiness +wean +weaner +weaners +weaning +weanling +weanlings +weans +weapon +weaponry +weapons +wear +wearability +wearable +wearer +wearers +weariness +wearing +wearings +wearisomeness +wears +weasand +weasands +weasel +weasels +weather +weathercock +weathercocks +weathering +weatherings +weatherman +weathers +weave +weaver +weavers +weaves +weaving +weavings +weazand +weazands +web +webbing +webbings +weber +webers +webs +webster +websters +webwheel +webwheels +webworm +wed +wedding +weddings +wedeln +wedelns +wedge +wedges +wedgie +wedgies +wedlock +weds +wee +wee-wee +wee-wees +weed +weeder +weeders +weediness +weedkiller +weedkillers +weeds +week +weekday +weekdays +weekend +weekender +weekenders +weekends +weeklies +weekly +weeknight +weeknights +weeks +weenies +weeny +weeny-bopper +weeny-boppers +weep +weeper +weepers +weeping +weepings +weeps +wees +weever +weevers +weevil +weevils +weevily +weft +weftes +wefts +weigela +weigelas +weigh +weigh-in +weighbridge +weighbridges +weigher +weighers +weighing +weighings +weighs +weight +weightiness +weighting +weightings +weightlessness +weights +weir +weird +weirdie +weirdies +weirdness +weirdo +weirdos +weirds +weirs +weka +wekas +welcher +welchers +welcome +welcomeness +welcomes +welcoming +weld +weldability +welder +welders +welding +weldings +weldment +weldments +weldor +weldors +welds +welfare +welfarism +welkin +welkins +well +well-being +well-beloved +well-wisher +well-wishers +well-wishing +wellness +wells +welsh +welsher +welshers +welshes +welt +welter +welters +welts +welwitschia +welwitschias +wen +wench +wencher +wenchers +wenches +wens +wentletrap +wentletraps +weregild +weregilds +weren't +werewolf +wergild +wergilds +wernerite +werwolf +west +wester +westerlies +westerly +western +westerner +westerners +westernisation +westernisations +westernism +westernization +westernizations +westerns +westers +westing +westings +wests +westward +westwards +wet +wetback +wetbacks +wether +wethers +wetland +wetlands +wetness +wets +wetter +wetting +wey +weys +whack +whacker +whackers +whacking +whackings +whacks +whale +whalebone +whalebones +whaler +whalers +whales +whaling +whalings +wham +whammed +whamming +whams +whang +whangee +whangees +whangs +whap +whaps +whare +wharf +wharfage +wharfages +wharfie +wharfies +wharfinger +wharfingers +wharfs +wharve +wharves +whatnot +whatnots +whatsis +whaup +whaups +wheal +wheals +wheat +wheatear +wheatears +wheats +wheedling +wheedlings +wheel +wheelbarrow +wheelbarrows +wheelbase +wheelbases +wheeler +wheeler-dealer +wheeler-dealers +wheelers +wheelie +wheelies +wheeling +wheelings +wheelman +wheels +wheelwork +wheelworks +wheelwright +wheelwrights +wheeze +wheezes +wheeziness +whelk +whelks +whelp +whelps +when +whens +where +whereabouts +wherefore +wheres +wherewithal +wherries +wherry +whet +whets +whetstone +whetstones +whetter +whetters +whey +wheyishness +wheys +whidah +whiff +whiffer +whiffers +whiffet +whiffets +whiffler +whifflers +whiffletree +whiffletrees +whiffs +whig +whigmaleerie +whigmaleeries +whigs +while +whiles +whim +whimbrel +whimbrels +whimper +whimperer +whimperers +whimpers +whims +whimsey +whimseys +whimsicality +whimsies +whimsy +whin +whinberries +whinberry +whinchat +whinchats +whine +whiner +whiners +whines +whinge +whinges +whinnies +whinny +whins +whinstone +whinstones +whip +whip-round +whip-rounds +whip-tailed +whipcord +whipcords +whiplash +whiplashes +whipper +whipper-in +whippers +whippersnapper +whippersnappers +whippet +whippets +whipping +whippings +whippletree +whippletrees +whippoorwill +whippoorwills +whips +whipsaw +whipsaws +whipstall +whipstalls +whipworm +whipworms +whir +whirl +whirligig +whirligigs +whirling +whirlings +whirlpool +whirlpools +whirls +whirlwind +whirlwinds +whirly +whirlybird +whirlybirds +whirr +whirring +whirrings +whirrs +whirs +whish +whishes +whisk +whisker +whiskers +whiskey +whiskeys +whiskies +whisks +whisky +whisper +whisperer +whisperers +whispering +whisperings +whispers +whist +whistle +whistler +whistlers +whistles +whistling +whistlings +whists +whit +white +white-eye +whitebait +whitebaits +whitebeam +whitebeams +whitecap +whitecaps +whitedamp +whitefish +whitefishes +whitener +whiteners +whiteness +whitening +whitenings +whites +whitesmith +whitesmiths +whitethorn +whitethorns +whitethroat +whitethroats +whitewall +whitewash +whitewashes +whitewing +whitewings +whitewood +whitewoods +whiting +whitings +whitishness +whitleather +whitleathers +whitlow +whitlows +whits +whittle +whittler +whittlers +whittles +whittling +whity +whiz +whizbang +whizbangs +whizz +whizzes +who +who'd +who'll +who's +whole +wholefood +wholefoods +wholeheartedness +wholeness +wholes +wholesale +wholesaler +wholesalers +wholesales +wholesomeness +wholism +whoop +whoopee +whoopees +whooper +whoopers +whoops +whoosh +whooshes +whop +whopper +whoppers +whops +whore +whoredom +whorehouse +whorehouses +whoremaster +whoremonger +whoremongers +whores +whoreson +whoresons +whorl +whorls +whort +whortleberries +whortleberry +why +whydah +whys +wick +wickedness +wicker +wickers +wickerwork +wicket +wicket-keeper +wicket-keepers +wickets +wicking +wickiup +wickiups +wicks +widdies +widdy +wide +wide-awake +wide-awakeness +widener +wideners +wideness +widening +wides +widgeon +widgeons +widget +widgets +widgie +widgies +widow +widower +widowers +widowhood +widows +width +widths +wielder +wielders +wienie +wienies +wife +wifehood +wig +wigan +wigans +wigeon +wigeons +wiggery +wigging +wiggings +wiggle +wiggler +wigglers +wiggles +wight +wights +wigs +wigwag +wigwags +wigwam +wigwams +wild +wildcatter +wildebeest +wildebeests +wilderness +wildernesses +wildfire +wildfires +wilding +wildings +wildlife +wildness +wilds +wile +wiles +wilfulness +wiliness +will +will-lessness +will-o'-the-wisp +will-o'-the-wisps +willemite +willer +willers +willet +willets +willies +willing +willingness +williwaw +williwaws +willow +willows +willpower +wills +willy +willy-willies +willy-willy +wilt +wilting +wilts +wimble +wimbles +wimp +wimple +wimples +wimps +win +wince +winces +wincey +winceyette +winceys +winch +winches +wind +wind-sucking +windage +windages +windbaggery +windbreaker +windbreakers +windburn +windburns +windcheater +windcheaters +winder +winders +windfall +windfalls +windiness +winding +winding-sheet +winding-sheets +windings +windjammer +windjammers +windlass +windlasses +windle +windles +windlestraw +windlestraws +windmill +windmills +window +window-dresser +window-dressers +window-dressing +window-shopper +window-shoppers +windows +windpipe +windpipes +windrow +windrows +winds +windscreen +windscreens +windshield +windshields +windstorm +windward +windwards +wine +winemaker +winemakers +winemaking +wineries +winery +wines +wing +wing-case +wingding +wingdings +winger +wingers +winges +winglet +winglets +wingman +wings +wingspan +wingspans +wink +winker +winkers +winkle +winkles +winks +winner +winners +winning +winningness +winnings +winnow +winnowing +winnowings +winnows +wino +winos +wins +winsomeness +winter +wintergreen +winterization +winterkill +winterkills +winters +wintertime +wintle +wintles +wintriness +winze +winzes +wipe +wiper +wipers +wipes +wire +wire-puller +wireless +wirelesses +wireman +wirer +wirers +wires +wiretap +wiretaps +wirework +wiring +wirings +wisdom +wisdoms +wise +wiseacre +wiseacres +wisecrack +wisecracks +wiseness +wisent +wisents +wises +wish +wish-wash +wishbone +wishbones +wishes +wishfulness +wishing +wishings +wisp +wisps +wistaria +wistarias +wisteria +wisterias +wistfulness +wit +witan +witch +witch-elm +witch-hunt +witch-hunts +witchcraft +witchery +witches +witches'-broom +witching +witchings +wite +witenagemot +witenagemots +wites +withdrawal +withdrawals +withdrawer +withdrawers +withe +witheredness +withering +witherings +witherite +withers +withes +withholder +withholders +withholding +withies +withstander +withstanders +withy +witlessness +witling +witlings +witloof +witloofs +witness +witnesses +wits +witticism +witticisms +wittiness +wittol +wittols +wivern +wiverns +wives +wiz +wizard +wizardry +wizards +wizen +wizens +woad +woads +wobbegong +wobbegongs +wobble +wobbler +wobblers +wobbles +wodge +wodges +woe +woefulness +woes +wofulness +woggle +woggles +wok +woks +wold +wolds +wolf +wolfer +wolfers +wolfram +wolframite +wolfs +wolfsbane +wolfsbanes +wollastonite +wollies +wolly +wolver +wolverine +wolverines +wolvers +wolves +woman +woman-hater +woman-haters +womanhood +womaniser +womanisers +womanishness +womanizer +womanizers +womankind +womanliness +womans +womb +wombat +wombats +wombs +women +womenfolk +womenfolks +womera +womeras +won +wonder +wonderer +wonderers +wonderfulness +wonderland +wonderlands +wonderment +wonders +wondrousness +wonga-wonga +wonk +wonks +wons +wont +wontedness +wonts +wood +wood-swallow +woodbine +woodbines +woodchuck +woodchucks +woodcock +woodcocks +woodcraft +woodcut +woodcuts +wooden-headedness +woodenness +woodhouse +woodhouses +woodiness +woodland +woodlands +woodlouse +woodman +woodpecker +woodpeckers +woodruff +woods +woodshed +woodsheds +woodsia +woodsman +woodwind +woodwinds +woodwork +woodworker +woodworking +woodworks +wooer +wooers +woof +woofer +woofers +woofs +wooing +wooings +wool +woolen +woolens +woolfell +woolfells +woollen +woollens +woollies +woolliness +woolly +woollybutt +woolpack +woolpacks +wools +woolsack +woolshed +woolsheds +woomera +woomerang +woomerangs +woomeras +woorali +wooralis +woosh +wooshes +wootz +wooziness +worcester +word +word-lore +word-painter +word-painting +word-splitting +wordage +wordages +wordbook +wordbooks +wordbreak +wordiness +wording +wordings +wordplay +words +wordsmith +wordsmiths +work +work-in +work-study +workability +workableness +workbench +workbenches +workbook +workbooks +workbox +workboxes +worker +workers +workforce +workforces +workhorse +workhorses +workhouse +workhouses +working +workings +workload +workloads +workman +workmanship +workmate +workmates +workpiece +workpieces +workplace +workplaces +workroom +workrooms +works +worksheet +worksheets +workshop +workshops +workspace +workstation +workstations +worktable +worktables +world +world-beater +world-beaters +world-weariness +worldliness +worldling +worldlings +worldly-mindedness +worlds +worm +wormer +wormers +worms +wormwood +wormwoods +worrier +worriers +worries +worriment +worriments +worry +worrying +worryings +worrywart +worrywarts +worse +worseness +worsening +worship +worshipfulness +worshipper +worshippers +worships +worst +worsted +worsteds +worsts +wort +worth +worthies +worthiness +worthlessness +worths +worthy +worts +would-be +wouldn't +wound +wounded +wounding +woundings +wounds +woundwort +woundworts +wourali +wouralis +wow +wows +wowser +wowsers +wrack +wracks +wraith +wraiths +wrangle +wrangler +wranglers +wrangles +wrangling +wranglings +wrap +wraparound +wraparounds +wrapper +wrappers +wrapping +wrappings +wrapround +wraprounds +wraps +wrasse +wrasses +wrath +wrathiness +wraths +wreaker +wreakers +wreath +wreather +wreathers +wreathes +wreaths +wreck +wreckage +wreckages +wrecker +wreckers +wreckfish +wrecking +wreckings +wrecks +wren +wren-tit +wrench +wrenches +wrens +wrest +wrester +wresters +wrestle +wrestler +wrestlers +wrestles +wrestling +wrestlings +wrests +wretch +wretchedness +wretches +wrick +wricks +wriggle +wriggler +wrigglers +wriggles +wright +wrights +wring +wringer +wringers +wrings +wrinkle +wrinkles +wrist +wrist-drop +wristband +wristbands +wristlet +wristlets +wrists +writ +write-down +write-downs +write-in +write-ins +write-off +write-offs +writer +writers +writes +writhe +writhes +writing +writings +writs +written +wrong +wrong-headedness +wronger +wrongers +wrongfulness +wrongness +wrongs +wrybill +wrybills +wryneck +wrynecks +wryness +wulfenite +wunderkind +wurley +wurleys +wurst +wursts +wurtzite +wus +wuss +wych-elm +wych-hazel +wye +wyes +wynd +wynds +wynn +wynns +wyte +wytes +wyvern +wyverns +x-axis +x-height +x-heights +xanthate +xanthates +xanthein +xanthene +xanthin +xanthine +xanthium +xanthochroism +xanthoma +xanthomas +xanthophyll +xebec +xebecs +xenia +xenocryst +xenocrysts +xenogamy +xenogenesis +xenoglossia +xenograft +xenografts +xenolith +xenoliths +xenon +xenophile +xenophiles +xenophobe +xenophobes +xenophobia +xenotime +xeranthemum +xeranthemums +xeroderma +xerography +xerophagy +xerophthalmia +xerophyte +xerophytes +xerosis +xiphisternum +xiphisternums +xiphoid +xiphosuran +xiphosurans +xoanon +xylem +xylene +xylenes +xylocarp +xylocarps +xylograph +xylographer +xylographers +xylographs +xylography +xylol +xylols +xylophage +xylophages +xylophone +xylophones +xylophonist +xylophonists +xylose +xylyl +xylyls +xyst +xyster +xysters +xysts +y-axis +yabber +yabbers +yabbies +yabby +yacca +yaccas +yacht +yachting +yachtings +yachts +yachtsman +yachtsmanship +yachtswoman +yack +yackety-yak +yacks +yaffle +yaffles +yahoo +yahoos +yak +yakety-yak +yakka +yaks +yale +yales +yam +yamen +yamens +yammer +yammers +yams +yank +yanks +yap +yapok +yapoks +yapon +yapons +yapp +yapper +yappers +yapps +yaps +yard +yardage +yardages +yardang +yardangs +yardbird +yardbirds +yardman +yardmaster +yardmasters +yards +yardstick +yardsticks +yarmulka +yarmulkas +yarmulke +yarmulkes +yarn +yarns +yarraman +yarramans +yarrow +yarrows +yashmak +yashmaks +yataghan +yataghans +yate +yatter +yatters +yaud +yauds +yaup +yaupon +yaupons +yaw +yawl +yawls +yawn +yawner +yawners +yawns +yawp +yawper +yawpers +yawps +yaws +yea +yeanling +yeanlings +year +year-end +year-ends +yearlies +yearling +yearlings +yearly +yearner +yearners +yearning +yearnings +years +yeas +yeast +yeastiness +yeasts +yegg +yeggman +yeldring +yeldrings +yelk +yelks +yell +yelling +yellings +yellow +yellowback +yellowbacks +yellowbellies +yellowbelly +yellowness +yellows +yells +yelp +yelper +yelpers +yelping +yelpings +yelps +yen +yens +yenta +yentas +yeoman +yeomanry +yerba +yerbas +yes +yeses +yeshiva +yeshivas +yesterday +yesterdays +yestereve +yesterevening +yesterevenings +yestereves +yesternight +yesteryear +yesteryears +yeti +yetis +yett +yetts +yeuk +yeuks +yew +yews +yield +yielding +yieldingness +yieldings +yields +yike +yikes +yip +yips +ylang-ylang +ylem +yo-yo +yo-yos +yob +yobbo +yobboes +yobbos +yobs +yod +yodel +yodeler +yodelers +yodeling +yodeller +yodellers +yodels +yodle +yodler +yodlers +yodles +yoga +yogh +yoghourt +yoghourts +yoghurt +yoghurts +yogi +yogini +yoginis +yogis +yogurt +yogurts +yohimbine +yoke +yokel +yokels +yokes +yolk +yolks +yoni +yonis +yore +yores +york +yorker +yorkers +yorks +you +you'd +you'll +you're +you've +young +youngberries +youngberry +youngling +younglings +youngness +youngster +youngsters +younker +younkers +youth +youthfulness +youths +yowl +yowling +yowlings +yowls +ytterbia +ytterbium +yttria +yttrium +yuan +yucca +yuccas +yuk +yukes +yuks +yulan +yulans +yule +yules +yuletide +yuletides +yuppie +yuppies +yurt +yurts +zabaglione +zabagliones +zack +zacks +zaddik +zaddiks +zaffer +zag +zags +zaire +zakat +zakuska +zaman +zamang +zamarra +zamarras +zamia +zamias +zamindar +zamindari +zamindaris +zamindars +zander +zanders +zanies +zaniness +zany +zanyism +zap +zapateado +zapateados +zaps +zaptiah +zaptiahs +zaratite +zareba +zarebas +zarf +zarfs +zarzuela +zarzuelas +zastruga +zax +zaxes +zea +zeal +zealot +zealotries +zealotry +zealots +zealousness +zeals +zebec +zebecs +zebra +zebras +zebrass +zebrasses +zebu +zebus +zecchino +zecchinos +zed +zedoaries +zedoary +zeds +zee +zees +zein +zemindar +zemindars +zemstvo +zemstvos +zen +zenana +zenanas +zenith +zeniths +zeolite +zeolites +zephyr +zephyrs +zeppelin +zeppelins +zero +zeroed +zeroes +zeroing +zeros +zest +zestfulness +zests +zeta +zetas +zeugma +zeugmas +zho +zhos +zibeline +zibelines +zibet +zibets +zidovudine +ziff +ziffs +zig +zigs +zigzag +zigzags +zila +zilas +zilch +zilches +zillion +zillions +zinc +zincite +zincograph +zincographer +zincographers +zincographs +zincography +zincs +zing +zingiber +zingibers +zings +zinjanthropus +zinkenite +zinnia +zinnias +zip +zip-fastener +zip-fasteners +zipper +zippers +zips +zircalloy +zircon +zirconia +zirconium +zircons +zither +zithern +zitherns +zithers +ziti +zloty +zlotys +zoa +zoanthropy +zodiac +zodiacs +zoea +zoeas +zoetrope +zoetropes +zoisite +zombi +zombie +zombies +zombis +zonation +zonda +zondas +zone +zones +zoning +zonings +zonule +zonules +zoo +zoochemistry +zoochore +zoochores +zoogeography +zoogloea +zoografting +zoograftings +zoographer +zoographers +zoography +zooid +zooids +zoolater +zoolaters +zoolatry +zoologist +zoologists +zoology +zoom +zoometry +zoomorph +zoomorphism +zoomorphisms +zoomorphs +zooms +zoon +zoonosis +zoons +zoophile +zoophiles +zoophilia +zoophilism +zoophobia +zoophorus +zoophyte +zoophytes +zooplankton +zooplasty +zoos +zoosperm +zoosperms +zoosporangium +zoosporangiums +zoospore +zoospores +zootechnics +zootomy +zootoxin +zootoxins +zoril +zorils +zoster +zosters +zucchetto +zucchettos +zucchini +zucchinis +zugzwang +zugzwangs +zwitterion +zwitterions +zygapophysis +zygocactus +zygodactyl +zygoma +zygomas +zygomycetes +zygophyte +zygophytes +zygosis +zygospore +zygospores +zygote +zygotes +zymase +zymases +zymogen +zymology +zymolysis +zymometer +zymometers +zymosis +zymurgy diff --git a/installer/install/sudo.yml b/installer/install/sudo.yml new file mode 100644 index 00000000..220d6605 --- /dev/null +++ b/installer/install/sudo.yml @@ -0,0 +1,53 @@ +--- +####################################### +# T-Pot - Debian Bootstrapping (sudo) # +####################################### + +# Be sure to use root password as become password +- name: T-Pot - Debian Bootstrapping (sudo) + hosts: all + gather_facts: false + become: false + + tasks: + - name: Check if running as root + assert: + that: ansible_user != 'root' + fail_msg: "T-Pot playbook should not be run as root." + success_msg: "Running as user: {{ ansible_user }}." + tags: + - "Debian" + + - name: Check if running as tpot + assert: + that: ansible_user != 'tpot' + fail_msg: "Reserved username `tpot` detected." + success_msg: "Running as user: {{ ansible_user }}." + tags: + - "Debian" + + - name: Get distribution name + raw: awk -F= '/^NAME/{print $2}' /etc/os-release | tr -d '"' | cut -d " " -f1 + register: my_distribution + tags: + - "Debian" + + - name: Check if sudo is installed + # Use echo, or task will fail if sudo not found + raw: echo -n $(command -v sudo) + register: my_sudo + tags: + - "Debian" + + - name: Add sudo package and add ansible_user to sudo group (Debian) + become: true + become_method: su + raw: | + apt update + apt -y install sudo + /usr/sbin/usermod -aG sudo {{ ansible_user }} + echo '{{ ansible_user }} ALL=(ALL:ALL) ALL' | tee /etc/sudoers.d/{{ ansible_user }} + chmod 440 /etc/sudoers.d/{{ ansible_user }} + when: my_distribution.stdout | trim in ["Debian"] and my_sudo.stdout | trim == "" + tags: + - "Debian" diff --git a/installer/install/tpot.service b/installer/install/tpot.service new file mode 100644 index 00000000..08968d76 --- /dev/null +++ b/installer/install/tpot.service @@ -0,0 +1,17 @@ +[Unit] +Description=T-Pot +Wants=docker.service network-online.target +After=docker.service network-online.target + +[Service] +Restart=always +RestartSec=5 +Type=simple +TimeoutSec=infinity +ExecStartPre=-/usr/bin/docker compose -f /home/{{ ansible_user_id }}/tpotce/docker-compose.yml down -v +ExecStart=/usr/bin/docker compose -f /home/{{ ansible_user_id }}/tpotce/docker-compose.yml up +ExecStop=/usr/bin/docker compose -f /home/{{ ansible_user_id }}/tpotce/docker-compose.yml down -v +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/installer/install/tpot.yml b/installer/install/tpot.yml new file mode 100644 index 00000000..01954f9d --- /dev/null +++ b/installer/install/tpot.yml @@ -0,0 +1,777 @@ +--- +################################ +# T-Pot - Bootstrapping Python # +################################ + +- name: T-Pot - Bootstrapping Python + hosts: all + gather_facts: false + become: true + become_method: sudo + + tasks: + - name: Get distribution name (All) + raw: awk -F= '/^NAME/{print $2}' /etc/os-release | tr -d '"' | cut -d " " -f1 + register: my_distribution + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + - name: Check if python3 is installed (All) + raw: echo $(command -v python3) + register: my_python3 + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + - name: Add python package (Debian, Raspbian, Ubuntu) + raw: | + apt update + apt -y install python3 + when: my_distribution.stdout | trim in ["Debian", "Raspbian", "Ubuntu"] and my_python3.stdout | trim == "" + tags: + - "Debian" + - "Raspbian" + - "Ubuntu" + + - name: Add python package (Alma, Fedora, Rocky) + raw: | + dnf -y --refresh install python3 + when: my_distribution.stdout | trim in ["AlmaLinux", "Fedora", "Rocky"] and my_python3.stdout | trim == "" + tags: + - "AlmaLinux" + - "Fedora" + - "Rocky" + + - name: Add python package (openSUSE Tumbleweed) + raw: | + zypper refresh + zypper -y install python3 + when: my_distribution.stdout | trim in ["AlmaLinux", "Fedora", "Rocky"] and my_python3.stdout | trim == "" + tags: + - "openSUSE Tumbleweed" + +##################################################################### +# T-Pot - Abort if run as tpot, root or on unsupported distribution # +##################################################################### + +- name: T-Pot - Abort if run as tpot, root or on unsupported distribution + hosts: all + gather_facts: true + become: false + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + tasks: + - name: Check if running as root (All) + assert: + that: ansible_user_id != 'root' + fail_msg: "T-Pot playbook should not be run as root." + success_msg: "Running as user: {{ ansible_user_id }}." + + - name: Check if running as tpot (All) + assert: + that: ansible_user_id != 'tpot' + fail_msg: "Reserved username `tpot` detected." + success_msg: "Running as user: {{ ansible_user_id }}." + + - name: Check if supported distribution (All) + assert: + that: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + fail_msg: "T-Pot is not supported on this plattform: {{ ansible_distribution }}." + success_msg: "T-Pot will now install on {{ ansible_distribution }}." + +############################################################ +# T-Pot - Install recommended, remove conflicting packages # +############################################################ + +- name: T-Pot - Install recommended, remove conflicting packages + hosts: all + gather_facts: true + become: true + + tasks: + - name: Syncing clocks (All) + shell: "hwclock --hctosys" + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + ignore_errors: true + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + - name: Install recommended packages (Debian, Raspbian, Ubuntu) + package: + name: + - apache2-utils + - bash-completion + - ca-certificates + - cracklib-runtime + - cron + - curl + - exa + - git + - gnupg + - grc + - htop + - micro + - net-tools + - vim + - wget + state: latest + update_cache: yes + when: ansible_distribution in ["Debian", "Raspbian", "Ubuntu"] + tags: + - "Debian" + - "Raspbian" + - "Ubuntu" + + - name: Install grc from remote repo (AlmaLinux, Rocky) + ansible.builtin.dnf: + name: 'https://github.com/kriipke/grc/releases/download/1.13.8/grc-1.13.8-1.el7.noarch.rpm' + disable_gpg_check: true + state: present + when: ansible_distribution in ["AlmaLinux", "Rocky"] + tags: + - "AlmaLinux" + - "Rocky" + + - name: Install recommended packages (AlmaLinux, Rocky) + package: + name: + - bash-completion + - ca-certificates + - cracklib + - curl + - dnf-plugins-core + - exa + - git + - grc + - htop + - httpd-tools + - net-tools + - tar + - vim + - wget + state: latest + update_cache: yes + when: ansible_distribution in ["AlmaLinux", "Rocky"] + tags: + - "AlmaLinux" + - "Rocky" + + - name: Download and install micro editor (AlmaLinux, openSUSE Tumbleweed, Rocky) + shell: "curl https://getmic.ro | bash && mv micro /usr/bin" + args: + executable: /bin/bash + when: ansible_distribution in ["AlmaLinux", "openSUSE Tumbleweed", "Rocky"] + tags: + - "AlmaLinux" + - "openSUSE Tumbleweed" + - "Rocky" + + - name: Install recommended packages (Fedora) + package: + name: + - bash-completion + - ca-certificates + - cracklib + - cronie + - curl + - dnf-plugins-core + - exa + - git + - grc + - htop + - httpd-tools + - micro + - net-tools + - vim + - wget + state: latest + update_cache: yes + when: ansible_distribution in ["Fedora"] + tags: + - "Fedora" + + - name: Remove conflicting packages (openSUSE Tumbleweed) + package: + name: + - cups + - net-tools + - postfix + - yast2-auth-client + - yast2-auth-user + state: absent + update_cache: yes + when: ansible_distribution in ["openSUSE Tumbleweed"] + tags: + - "openSUSE Tumbleweed" + + - name: Install recommended packages (openSUSE Tumbleweed) + package: + name: + - apache2-utils + - bash-completion + - busybox-net-tools + - ca-certificates + - cracklib + - curl + - exa + - git + - grc + - htop + - vim + - wget + state: latest + update_cache: yes + when: ansible_distribution in ["openSUSE Tumbleweed"] + tags: + - "openSUSE Tumbleweed" + +##################################### +# T-Pot - Prepare for Docker Engine # +##################################### + +- name: T-Pot - Prepare for and install Docker Engine + hosts: all + gather_facts: true + become: true + + tasks: + - name: Remove distribution based Docker packages (AlmaLinux, Debian, Fedora, Raspbian, Rocky, Ubuntu) + package: + name: + - docker + - docker-engine + - docker.io + - containerd + - runc + state: absent + update_cache: yes + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "Raspbian", "Rocky", "Ubuntu"] + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + - name: Add folder for Docker Engine GPG key (Debian, Raspbian, Ubuntu) + file: + path: /etc/apt/keyrings + state: directory + mode: 0755 + when: ansible_distribution in ["Debian", "Raspbian", "Ubuntu"] + tags: + - "Debian" + - "Raspbian" + - "Ubuntu" + + - name: Download Docker Engine GPG key (Debian, Raspbian, Ubuntu) + get_url: + url: https://download.docker.com/linux/{{ ansible_distribution | lower }}/gpg + dest: /etc/apt/keyrings/docker + mode: 0755 + when: ansible_distribution in ["Debian", "Raspbian", "Ubuntu"] + tags: + - "Debian" + - "Raspbian" + - "Ubuntu" + + - name: Decrypt Docker Engine GPG key (Debian, Raspbian, Ubuntu) + shell: gpg --dearmor /etc/apt/keyrings/docker + args: + creates: /etc/apt/keyrings/docker.gpg + when: ansible_distribution in ["Debian", "Raspbian", "Ubuntu"] + tags: + - "Debian" + - "Raspbian" + - "Ubuntu" + + - name: Add Docker Engine repository (Debian, Raspbian, Ubuntu) + apt_repository: + filename: docker + repo: "deb [arch={{ ansible_architecture | replace('aarch64', 'arm64') | replace('x86_64', 'amd64') }} signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/{{ ansible_distribution | lower }} {{ ansible_distribution_release }} stable" + state: present + update_cache: yes + when: ansible_distribution in ["Debian", "Raspbian", "Ubuntu"] + tags: + - "Debian" + - "Raspbian" + - "Ubuntu" + + - name: Add Docker repository (Fedora) + shell: | + if [ "$(dnf repolist docker-ce-stable)" == "" ]; + then + dnf -y config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo + fi + when: ansible_distribution in ["Fedora"] + tags: + - "Fedora" + + - name: Add Docker repository (AlmaLinux, Rocky) + shell: | + if [ "$(dnf repolist docker-ce-stable)" == "" ]; + then + dnf -y config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo + fi + when: ansible_distribution in ["AlmaLinux", "Rocky"] + tags: + - "AlmaLinux" + - "Rocky" + + +################################# +# T-Pot - Install Docker Engine # +################################# + +- name: T-Pot - Install Docker Engine + hosts: all + gather_facts: true + become: true + + tasks: + - name: Install Docker Engine packages (openSUSE Tumbleweed) + package: + name: + - docker + - docker-bash-completion + - docker-buildx + - docker-compose + - docker-compose-switch + - liblvm2cmd2_03 + - lvm2 + state: latest + update_cache: yes + when: ansible_distribution in ["openSUSE Tumbleweed"] + tags: + - "openSUSE Tumbleweed" + + - name: Install Docker Engine packages (AlmaLinux, Debian, Fedora, Raspbian, Rocky, Ubuntu) + package: + name: + - docker-ce + - docker-ce-cli + - containerd.io + - docker-buildx-plugin + - docker-compose-plugin + state: latest + update_cache: yes + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "Raspbian", "Rocky", "Ubuntu"] + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + - name: Stop Docker (All) + service: + name: docker + state: stopped + enabled: false + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + +###################################################### +# T-Pot - Adjust configs, add users and groups, etc. # +###################################################### + +- name: T-Pot - Adjust configs, add users and groups, etc. + hosts: all + gather_facts: true + become: true + + tasks: + - name: Create T-Pot group (All) + group: + name: tpot + gid: 2000 + state: present + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + - name: Create T-Pot user (All) + user: + name: tpot + uid: 2000 + system: yes + shell: /bin/false + home: /nonexistent + group: tpot + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + - name: Disable ssh.socket unit (Ubuntu) + systemd: + name: ssh.socket + state: stopped + enabled: false + when: ansible_distribution in ["Ubuntu"] + tags: + - "Ubuntu" + + - name: Remove ssh.socket.conf file (Ubuntu) + file: + path: /etc/systemd/system/ssh.service.d/00-socket.conf + state: absent + when: ansible_distribution in ["Ubuntu"] + tags: + - "Ubuntu" + + - name: Change SSH Port to 64295 (AlmaLinux, Debian, Fedora, Raspbian, Rocky, Ubuntu) + lineinfile: + path: /etc/ssh/sshd_config + line: "Port 64295" + insertafter: EOF + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "Raspbian", "Rocky", "Ubuntu"] + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + - name: Change SSH Port to 64295 (openSUSE Tumbleweed) + lineinfile: + path: /etc/ssh/sshd_config.d/port.conf + line: "Port 64295" + create: yes + when: ansible_distribution in ["openSUSE Tumbleweed"] + tags: + - "openSUSE Tumbleweed" + + - name: Add T-Pot SSH port to Firewall (AlmaLinux, Fedora, openSUSE Tumbleweed, Rocky) + firewalld: + port: 64295/tcp + permanent: yes + state: enabled + when: ansible_distribution in ["AlmaLinux", "Fedora", "openSUSE Tumbleweed", "Rocky"] + tags: + - "AlmaLinux" + - "Fedora" + - "openSUSE Tumbleweed" + - "Rocky" + + - name: Set T-Pot default target to ACCEPT (AlmaLinux, Fedora, openSUSE Tumbleweed, Rocky) + firewalld: + zone: public + target: ACCEPT + permanent: yes + state: enabled + when: ansible_distribution in ["AlmaLinux", "Fedora", "openSUSE Tumbleweed", "Rocky"] + tags: + - "AlmaLinux" + - "Fedora" + - "openSUSE Tumbleweed" + - "Rocky" + + - name: Load kernel modules (AlmaLinux, Fedora, Rocky) + command: modprobe -v iptable_filter + when: ansible_distribution in ["AlmaLinux", "Fedora", "Rocky"] + tags: + - "AlmaLinux" + - "Fedora" + - "Rocky" + + - name: Update iptables.conf (AlmaLinux, Fedora, Rocky) + lineinfile: + path: /etc/modules-load.d/iptables.conf + line: iptable_filter + create: yes + when: ansible_distribution in ["AlmaLinux", "Fedora", "Rocky"] + tags: + - "AlmaLinux" + - "Fedora" + - "Rocky" + + - name: Set SELinux config to permissive (AlmaLinux, Fedora, Rocky) + lineinfile: + path: /etc/selinux/config + regexp: '^SELINUX=' + line: 'SELINUX=permissive' + when: ansible_distribution in ["AlmaLinux", "Fedora", "Rocky"] + tags: + - "AlmaLinux" + - "Fedora" + - "Rocky" + + - name: Set SELinux to permissive (AlmaLinux, Fedora, Rocky) + command: "setenforce Permissive" + when: ansible_distribution in ["AlmaLinux", "Fedora", "Rocky"] + tags: + - "AlmaLinux" + - "Fedora" + - "Rocky" + + - name: Stop Resolved (Fedora, Ubuntu) + service: + name: systemd-resolved + state: stopped + when: ansible_distribution in ["Fedora", "Ubuntu"] + tags: + - "Fedora" + - "Ubuntu" + + - name: Modify DNSStubListener in resolved.conf (Fedora, Ubuntu) + lineinfile: + path: /etc/systemd/resolved.conf + regexp: '^.*DNSStubListener=.*' + line: 'DNSStubListener=no' + state: present + when: ansible_distribution in ["Fedora", "Ubuntu"] + tags: + - "Fedora" + - "Ubuntu" + +############################ +# T-Pot - Restart services # +############################ + +- name: T-Pot - Restart services + hosts: all + gather_facts: true + become: true + + tasks: + - name: Start Resolved (Fedora, Ubuntu) + service: + name: systemd-resolved + state: restarted + when: ansible_distribution in ["Fedora", "Ubuntu"] + tags: + - "Fedora" + - "Ubuntu" + + - name: Restart Firewalld (AlmaLinux, Fedora, openSUSE Tumbleweed, Rocky) + service: + name: firewalld + state: restarted + when: ansible_distribution in ["AlmaLinux", "Fedora", "openSUSE Tumbleweed", "Rocky"] + tags: + - "AlmaLinux" + - "Fedora" + - "Rocky" + - "openSUSE Tumbleweed" + + - name: Get Firewall rules (AlmaLinux, Fedora, openSUSE Tumbleweed, Rocky) + command: "firewall-cmd --list-all" + register: firewall_output + when: ansible_distribution in ["AlmaLinux", "Fedora", "openSUSE Tumbleweed", "Rocky"] + tags: + - "AlmaLinux" + - "Fedora" + - "Rocky" + - "openSUSE Tumbleweed" + + - name: Print Firewall rules (AlmaLinux, Fedora, openSUSE Tumbleweed, Rocky) + debug: + var: firewall_output.stdout_lines + when: ansible_distribution in ["AlmaLinux", "Fedora", "openSUSE Tumbleweed", "Rocky"] + tags: + - "AlmaLinux" + - "Fedora" + - "openSUSE Tumbleweed" + - "Rocky" + + - name: Enable Docker Engine upon boot (All) + service: + name: docker + state: restarted + enabled: true + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + - name: Restart SSH (All) + service: + name: "{{ 'ssh' if ansible_distribution in ['Ubuntu'] else 'sshd' }}" + state: restarted + enabled: true + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + +####################################################################### +# T-Pot - Adjust group users, bashrc, clone / update T-Pot repository # +####################################################################### + +- name: T-Pot - Adjust group users, bashrc, clone / update T-Pot repository + hosts: all + gather_facts: true + become: false + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + tasks: + - name: Check for non-root user id (All) + debug: + msg: "Detected user: '{{ ansible_user_id }}'" + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + failed_when: ansible_user_id == "root" + + - name: Add aliases (All) + blockinfile: + path: ~/.bashrc + block: | + alias dps='grc --colour=on docker ps -f status=running -f status=exited --format "table {{'{{'}}.Names{{'}}'}}\\t{{'{{'}}.Status{{'}}'}}\\t{{'{{'}}.Ports{{'}}'}}" | sort' + alias dpsw='watch -c bash -ic dps' + alias mi='micro' + alias sudo='sudo ' + alias ls='exa' + alias ll='exa -hlg' + alias la='exa -hlag' + marker: "# {mark} ANSIBLE MANAGED BLOCK" + insertafter: EOF + state: present + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + + - name: Clone / Update T-Pot repository (All) + git: + repo: 'https://github.com/telekom-security/tpotce' + dest: '/home/{{ ansible_user_id }}/tpotce/' + version: master + clone: yes + update: no + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + + - name: Add current user to Docker, T-Pot group (All) + become: true + user: + name: "{{ ansible_user_id }}" + groups: + - docker + - tpot + append: yes + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + +######################################## +# T-Pot - Install service and cron job # +######################################## + +- name: T-Pot - Install service + hosts: all + gather_facts: true + become: false + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + tasks: + - name: Install systemd service (All) + become: true + ansible.builtin.template: + src: '/home/{{ ansible_user_id }}/tpotce/installer/install/tpot.service' + dest: '/etc/systemd/system/tpot.service' + owner: root + group: root + mode: '0755' + notify: Reload systemd and enable service + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + + handlers: + - name: Reload systemd and enable service + become: true + ansible.builtin.systemd: + name: tpot.service + daemon_reload: yes + state: stopped + enabled: yes + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + +- name: T-Pot - Setup a randomized daily reboot + hosts: all + gather_facts: true + become: yes + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + vars: + random_minute: "{{ range(0, 60) | random }}" + random_hour: "{{ range(0, 5) | random }}" # We want the reboot randomly happen at night + + tasks: + - name: Setup a randomized daily reboot (All) + cron: + name: "T-Pot Daily Reboot" + user: root + minute: "{{ random_minute }}" + hour: "{{ random_hour }}" + job: "bash -c 'systemctl stop tpot.service && docker container prune -f; docker image prune -f; docker volume prune -f; /usr/sbin/shutdown -r +1 \"T-Pot Daily Reboot\"'" + state: present + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] diff --git a/installer/remove/inventory.yml b/installer/remove/inventory.yml new file mode 100644 index 00000000..3ad479ce --- /dev/null +++ b/installer/remove/inventory.yml @@ -0,0 +1,8 @@ +tpotce: + hosts: + # Remote IP address, host name or alias: + 192.168.100.100: + # Remote SSH port: + ansible_port: 22 + # Remote SSH user: + ansible_user: tsec \ No newline at end of file diff --git a/installer/remove/tpot.yml b/installer/remove/tpot.yml new file mode 100644 index 00000000..887e52fd --- /dev/null +++ b/installer/remove/tpot.yml @@ -0,0 +1,331 @@ +--- +################### +# T-Pot - Removal # +################### + +##################################################################### +# T-Pot - Abort if run as tpot, root or on unsupported distribution # +##################################################################### + +- name: T-Pot - Abort if run as tpot, root or on unsupported distribution + hosts: all + gather_facts: true + become: false + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + tasks: + - name: Check if running as root (All) + assert: + that: ansible_user_id != 'root' + fail_msg: "T-Pot playbook should not be run as root." + success_msg: "Running as user: {{ ansible_user_id }}." + + - name: Check if running as tpot (All) + assert: + that: ansible_user_id != 'tpot' + fail_msg: "Reserved username `tpot` detected." + success_msg: "Running as user: {{ ansible_user_id }}." + + - name: Check if supported distribution (All) + assert: + that: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + fail_msg: "T-Pot uninstall is not supported on this plattform: {{ ansible_distribution }}." + success_msg: "T-Pot will now be removed from {{ ansible_distribution }}." + +####################################### +# T-Pot - Remove cron job and service # +####################################### + +- name: Remove T-Pot daily reboot + hosts: all + gather_facts: true + become: true + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + tasks: + - name: Remove the randomized daily reboot cron job (All) + cron: + name: "T-Pot Daily Reboot" + user: root + state: absent + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + +- name: Remove T-Pot systemd service + hosts: all + gather_facts: true + become: true + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + tasks: + - name: Stop and disable tpot.service (All) + ansible.builtin.systemd: + name: tpot.service + state: stopped + enabled: no + ignore_errors: yes + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + + - name: Remove systemd service file for tpot + ansible.builtin.file: + path: '/etc/systemd/system/tpot.service' + state: absent + notify: Reload systemd + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + + handlers: + - name: Reload systemd + become: true + ansible.builtin.systemd: + daemon_reload: yes + +################################################## +# T-Pot - Adjust bashrc, remove T-Pot repository # +################################################## + +- name: T-Pot - Revert Adjustments + hosts: all + gather_facts: true + become: true + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + tasks: + - name: Remove aliases from .bashrc (All) + blockinfile: + path: ~/.bashrc + block: "" + marker: "# {mark} ANSIBLE MANAGED BLOCK" + state: absent + become: false + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + +########################################################## +# T-Pot - Restore configs, remove users and groups, etc. # +########################################################## + +- name: T-Pot - Adjust configs, add users and groups, etc. + hosts: all + gather_facts: true + become: true + + tasks: + - name: Revert DNSStubListener setting in resolved.conf (Fedora, Ubuntu) + lineinfile: + path: /etc/systemd/resolved.conf + regexp: 'DNSStubListener=no' + line: 'DNSStubListener=yes' + state: present + when: ansible_distribution in ["Fedora", "Ubuntu"] + tags: + - "Fedora" + - "Ubuntu" + + - name: Revert SELinux config to enforcing (AlmaLinux, Fedora, Rocky) + lineinfile: + path: /etc/selinux/config + regexp: '^SELINUX=' + line: 'SELINUX=enforcing' + when: ansible_distribution in ["AlmaLinux", "Fedora", "Rocky"] + tags: + - "AlmaLinux" + - "Fedora" + - "Rocky" + + - name: Remove iptables.conf file (AlmaLinux, Fedora, Rocky) + file: + path: /etc/modules-load.d/iptables.conf + state: absent + when: ansible_distribution in ["AlmaLinux", "Fedora", "Rocky"] + tags: + - "AlmaLinux" + - "Fedora" + - "Rocky" + + - name: Revert firewall to default target DROP (AlmaLinux, Fedora, openSUSE Tumbleweed, Rocky) + firewalld: + zone: public + target: DROP + permanent: yes + state: enabled + when: ansible_distribution in ["AlmaLinux", "Fedora", "openSUSE Tumbleweed", "Rocky"] + tags: + - "AlmaLinux" + - "Fedora" + - "openSUSE Tumbleweed" + - "Rocky" + + - name: Revert firewall to SSH default (AlmaLinux, Fedora, openSUSE Tumbleweed, Rocky) + firewalld: + port: 22/tcp + permanent: yes + state: enabled + when: ansible_distribution in ["AlmaLinux", "Fedora", "openSUSE Tumbleweed", "Rocky"] + tags: + - "AlmaLinux" + - "Fedora" + - "openSUSE Tumbleweed" + - "Rocky" + + - name: Remove port.conf file to revert SSH to default port (openSUSE Tumbleweed) + file: + path: /etc/ssh/sshd_config.d/port.conf + state: absent + when: ansible_distribution in ["openSUSE Tumbleweed"] + tags: + - "openSUSE Tumbleweed" + + - name: Revert SSH Port to 22 (AlmaLinux, Debian, Fedora, Raspbian, Rocky, Ubuntu) + lineinfile: + path: /etc/ssh/sshd_config + line: "Port 64295" + state: absent + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "Raspbian", "Rocky", "Ubuntu"] + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + - name: Remove T-Pot user (All) + user: + name: tpot + state: absent + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + - name: Remove T-Pot group (All) + group: + name: tpot + state: absent + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + +################################ +# T-Pot - Remove Docker Engine # +################################ + +- name: T-Pot - Remove Docker Engine + hosts: all + gather_facts: true + become: true + + tasks: + - name: Remove Docker Engine packages (openSUSE Tumbleweed) + package: + name: + - docker + - docker-bash-completion + - docker-buildx + - docker-compose + - docker-compose-switch + - liblvm2cmd2_03 + - lvm2 + state: absent + when: ansible_distribution in ["openSUSE Tumbleweed"] + tags: + - "openSUSE Tumbleweed" + + - name: Remove Docker Engine packages (AlmaLinux, Debian, Fedora, Raspbian, Rocky, Ubuntu) + package: + name: + - docker-ce + - docker-ce-cli + - containerd.io + - docker-buildx-plugin + - docker-compose-plugin + state: absent + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "Raspbian", "Rocky", "Ubuntu"] + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "Raspbian" + - "Rocky" + - "Ubuntu" + + - name: Remove /var/lib/docker directory + file: + path: /var/lib/docker + state: absent + when: ansible_distribution in ["AlmaLinux", "Debian", "Fedora", "openSUSE Tumbleweed", "Raspbian", "Rocky", "Ubuntu"] + tags: + - "AlmaLinux" + - "Debian" + - "Fedora" + - "openSUSE Tumbleweed" + - "Raspbian" + - "Rocky" + - "Ubuntu" + +###################################### +# T-Pot - Remove Docker Engine Repos # +###################################### + +- name: T-Pot - Revert Docker Engine preparation + hosts: all + gather_facts: true + become: true + + tasks: + - name: Remove Docker Engine repository file (Debian, Raspbian, Ubuntu) + file: + path: /etc/apt/sources.list.d/docker.list + state: absent + when: ansible_distribution in ["Debian", "Raspbian", "Ubuntu"] + tags: + - "Debian" + - "Raspbian" + - "Ubuntu" + + - name: Remove Docker repository (AlmaLinux, Rocky) + file: + path: /etc/yum.repos.d/docker-ce.repo + state: absent + when: ansible_distribution in ["AlmaLinux", "Fedora", "Rocky"] + tags: + - "AlmaLinux" + - "Fedora" + - "Rocky" diff --git a/iso/installer/install.sh b/iso/installer/install.sh deleted file mode 100755 index 72d921a8..00000000 --- a/iso/installer/install.sh +++ /dev/null @@ -1,922 +0,0 @@ -#!/bin/bash -# T-Pot Universal Installer - -# Installer can only be executed once. -myTPOT_INSTALL_LOG="/install.log" -if [ -s "$myTPOT_INSTALL_LOG" ]; - then - echo "Aborting. Installer can only be executed once." - exit -fi - -################## -# I. Global vars # -################## - -myBACKTITLE="T-Pot-Installer" -myCONF_FILE="/root/installer/iso.conf" -myPROGRESSBOXCONF=" --backtitle "$myBACKTITLE" --progressbox 24 80" -mySITES="https://ghcr.io https://github.com https://pypi.python.org https://debian.org" -myTPOTCOMPOSE="/opt/tpot/etc/tpot.yml" -myLSB_STABLE_SUPPORTED="bullseye" -myLSB_TESTING_SUPPORTED="stable" -myREMOTESITES="https://hub.docker.com https://github.com https://pypi.python.org https://debian.org https://listbot.sicherheitstacho.eu" -myPREINSTALLPACKAGES="aria2 apache2-utils cracklib-runtime curl dialog figlet fuse grc libcrack2 libpq-dev lsb-release net-tools software-properties-common toilet" -if [ -f "../../packages.txt" ]; - then myINSTALLPACKAGESFILE="../../packages.txt" -elif [ -f "/opt/tpot/packages.txt" ]; - then myINSTALLPACKAGESFILE="/opt/tpot/packages.txt" -elif [ -f "/root/tpot/packages.txt" ]; - then myINSTALLPACKAGESFILE="/root/tpot/packages.txt" -else - echo "packages.txt NOT FOUND." - exit 1 -fi -myINSTALLPACKAGES=$(cat $myINSTALLPACKAGESFILE) -myINFO="\ -########################################### -### T-Pot Installer for Debian (Stable) ### -########################################### - -Disclaimer: -This script will install T-Pot on this system. -By running the script you know what you are doing: -1. SSH will be reconfigured to tcp/64295. -2. Please ensure other means of access to this system in case something goes wrong. -3. At best this script will be executed on the console instead through a SSH session. - -######################################## - -Usage: - $0 --help - Help. - -Example: - $0 --type=user - Best option for most users." -myNETWORK_INTERFACES=" -wpa-driver wired -wpa-conf /etc/wpa_supplicant/wired8021x.conf - -### Example wireless config for 802.1x -### This configuration was tested with the IntelNUC series -### If problems occur you can try and change wpa-driver to \"iwlwifi\" -### Do not forget to enter a ssid in /etc/wpa_supplicant/wireless8021x.conf -### The Intel NUC uses wlpXsY notation instead of wlanX -# -#auto wlp2s0 -#iface wlp2s0 inet dhcp -# wpa-driver wext -# wpa-conf /etc/wpa_supplicant/wireless8021x.conf -" -myNETWORK_WIRED8021x="ctrl_interface=/var/run/wpa_supplicant -ctrl_interface_group=root -eapol_version=1 -ap_scan=1 -network={ - key_mgmt=IEEE8021X - eap=TLS - identity=\"host/$myCONF_PFX_HOST_ID\" - private_key=\"/etc/wpa_supplicant/8021x.pfx\" - private_key_passwd=\"$myCONF_PFX_PW\" -} -" -myNETWORK_WLAN8021x="ctrl_interface=/var/run/wpa_supplicant -ctrl_interface_group=root -eapol_version=1 -ap_scan=1 -network={ - ssid=\"\" - key_mgmt=WPA-EAP - pairwise=CCMP - group=CCMP - eap=TLS - identity=\"host/$myCONF_PFX_HOST_ID\" - private_key=\"/etc/wpa_supplicant/8021x.pfx\" - private_key_passwd=\"$myCONF_PFX_PW\" -} -" -myNETWORK_WLANEXAMPLE=" -### Example static ip config -### Replace with the name of your physical interface name -# -#auto eth0 -#iface eth0 inet static -# address 192.168.1.1 -# netmask 255.255.255.0 -# network 192.168.1.0 -# broadcast 192.168.1.255 -# gateway 192.168.1.1 -# dns-nameservers 192.168.1.1 - -### Example wireless config without 802.1x -### This configuration was tested with the IntelNUC series -### If problems occur you can try and change wpa-driver to \"iwlwifi\" -# -#auto wlan0 -#iface wlan0 inet dhcp -# wpa-driver wext -# wpa-ssid -# wpa-ap-scan 1 -# wpa-proto RSN -# wpa-pairwise CCMP -# wpa-group CCMP -# wpa-key-mgmt WPA-PSK -# wpa-psk \"\" -" -myUPDATECHECK="APT::Periodic::Update-Package-Lists \"1\"; -APT::Periodic::Download-Upgradeable-Packages \"0\"; -APT::Periodic::AutocleanInterval \"7\"; -" -mySYSCTLCONF=" -# Reboot after kernel panic, check via /proc/sys/kernel/panic[_on_oops] -# Set required map count for ELK -kernel.panic = 1 -kernel.panic_on_oops = 1 -vm.max_map_count = 262144 -" -myFAIL2BANCONF="[DEFAULT] -ignoreip = 127.0.0.1/8 -bantime = 3600 -findtime = 600 -maxretry = 5 - -[nginx-http-auth] -enabled = true -filter = nginx-http-auth -port = 64297 -logpath = /data/nginx/log/error.log - -[pam-generic] -enabled = true -port = 64294 -filter = pam-generic -logpath = /var/log/auth.log - -[sshd] -enabled = true -port = 64295 -filter = sshd -logpath = /var/log/auth.log -" -mySYSTEMDFIX="[Link] -NamePolicy=kernel database onboard slot path -MACAddressPolicy=none -" -myCOCKPIT_SOCKET="[Socket] -ListenStream= -ListenStream=64294 -" -mySSHSETTINGS=" -Port 64295 -Match Group tpotlogs - PermitOpen 127.0.0.1:64305 - ForceCommand /usr/bin/false -" -myRANDOM_HOUR=$(shuf -i 2-22 -n 1) -myRANDOM_MINUTE=$(shuf -i 0-59 -n 1) -myDEL_HOUR=$(($myRANDOM_HOUR+1)) -myPULL_HOUR=$(($myRANDOM_HOUR-2)) -myCRONJOBS=" -# Check if updated images are available and download them -$myRANDOM_MINUTE $myPULL_HOUR * * * root docker-compose -f /opt/tpot/etc/tpot.yml pull - -# Uploaded binaries are not supposed to be downloaded -*/1 * * * * root mv --backup=numbered /data/dionaea/roots/ftp/* /data/dionaea/binaries/ - -# Daily reboot -$myRANDOM_MINUTE $myRANDOM_HOUR * * 1-6 root systemctl stop tpot && docker stop \$(docker ps -aq) && docker rm \$(docker ps -aq); reboot - -# Check for updated packages every sunday, upgrade and reboot -$myRANDOM_MINUTE $myRANDOM_HOUR * * 0 root apt-fast autoclean -y && apt-fast autoremove -y && apt-fast update -y && apt-fast upgrade -y && sleep 10 && reboot -" -mySHELLCHECK='[[ $- == *i* ]] || return' -myROOTPROMPT='PS1="\[\033[38;5;8m\][\[$(tput sgr0)\]\[\033[38;5;1m\]\u\[$(tput sgr0)\]\[\033[38;5;6m\]@\[$(tput sgr0)\]\[\033[38;5;4m\]\h\[$(tput sgr0)\]\[\033[38;5;6m\]:\[$(tput sgr0)\]\[\033[38;5;5m\]\w\[$(tput sgr0)\]\[\033[38;5;8m\]]\[$(tput sgr0)\]\[\033[38;5;1m\]\\$\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]"' -myUSERPROMPT='PS1="\[\033[38;5;8m\][\[$(tput sgr0)\]\[\033[38;5;2m\]\u\[$(tput sgr0)\]\[\033[38;5;6m\]@\[$(tput sgr0)\]\[\033[38;5;4m\]\h\[$(tput sgr0)\]\[\033[38;5;6m\]:\[$(tput sgr0)\]\[\033[38;5;5m\]\w\[$(tput sgr0)\]\[\033[38;5;8m\]]\[$(tput sgr0)\]\[\033[38;5;2m\]\\$\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]"' -myROOTCOLORS="export LS_OPTIONS='--color=auto' -eval \"\`dircolors\`\" -alias ls='ls \$LS_OPTIONS' -alias ll='ls \$LS_OPTIONS -l' -alias l='ls \$LS_OPTIONS -lA'" - - -################# -# II. Functions # -################# - -# Create banners -function fuBANNER { - toilet -f ivrit "$1" -} - -# Create funny words for hostnames -function fuRANDOMWORD { - local myWORDFILE="$1" - local myLINES=$(cat $myWORDFILE | wc -l) - local myRANDOM=$((RANDOM % $myLINES)) - local myNUM=$((myRANDOM * myRANDOM % $myLINES + 1)) - echo -n $(sed -n "$myNUM p" $myWORDFILE | tr -d \' | tr A-Z a-z) -} - -# Do we have root? -function fuGOT_ROOT { -echo -echo -n "### Checking for root: " -if [ "$(whoami)" != "root" ]; - then - echo "[ NOT OK ]" - echo "### Please run as root." - echo "### Example: sudo $0" - exit - else - echo "[ OK ]" -fi -} - -# Check for pre-installer package requirements. -# If not present install them -function fuCHECKPACKAGES { - export DEBIAN_FRONTEND=noninteractive - # Make sure dependencies for apt-fast are installed - myCURL=$(which curl) - myWGET=$(which wget) - mySUDO=$(which sudo) - if [ "$myCURL" == "" ] || [ "$myWGET" == "" ] || [ "$mySUDO" == "" ] - then - echo "### Installing deps for apt-fast" - apt-get -y update - apt-get -y install curl wget sudo - fi - echo "### Installing apt-fast" - /bin/bash -c "$(curl -sL https://raw.githubusercontent.com/ilikenwf/apt-fast/master/quick-install.sh)" - echo -n "### Checking for installer dependencies: " - local myPACKAGES="$1" - for myDEPS in $myPACKAGES; - do - myOK=$(dpkg -s $myDEPS 2>&1 | grep -w ok | awk '{ print $3 }' | head -n 1) - if [ "$myOK" != "ok" ]; - then - echo "[ NOW INSTALLING ]" - apt-fast update -y - apt-fast install -y $myPACKAGES - break - fi - done - if [ "$myOK" = "ok" ]; - then - echo "[ OK ]" - fi -} - -# Check if remote sites are available -function fuCHECKNET { - if [ "$myTPOT_DEPLOYMENT_TYPE" == "iso" ] || [ "$myTPOT_DEPLOYMENT_TYPE" == "user" ]; - then - local mySITES="$1" - mySITESCOUNT=$(echo $mySITES | wc -w) - j=0 - for i in $mySITES; - do - echo $(expr 100 \* $j / $mySITESCOUNT) | dialog --title "[ Availability check ]" --backtitle "$myBACKTITLE" --gauge "\n Now checking: $i\n" 8 80 - curl --connect-timeout 30 -IsS $i 2>&1>/dev/null - if [ $? -ne 0 ]; - then - dialog --keep-window --backtitle "$myBACKTITLE" --title "[ Continue? ]" --yesno "\nAvailability check failed. You can continue, but the installation might fail." 10 50 - if [ $? = 1 ]; - then - dialog --keep-window --backtitle "$myBACKTITLE" --title "[ Abort ]" --msgbox "\nInstallation aborted. Exiting the installer." 7 50 - exit - else - break; - fi; - fi; - let j+=1 - echo $(expr 100 \* $j / $mySITESCOUNT) | dialog --keep-window --title "[ Availability check ]" --backtitle "$myBACKTITLE" --gauge "\n Now checking: $i\n" 8 80 - done; - fi -} - -# Install T-Pot dependencies -function fuGET_DEPS { - export DEBIAN_FRONTEND=noninteractive - echo - echo "### Getting update information." - echo - apt-fast -y update - echo - echo "### Upgrading packages." - echo - # Downlaod and upgrade packages, but silently keep existing configs - echo "docker.io docker.io/restart boolean true" | debconf-set-selections -v - echo "debconf debconf/frontend select noninteractive" | debconf-set-selections -v - apt-fast -y dist-upgrade -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --force-yes - echo - echo "### Installing T-Pot dependencies." - echo - apt-fast -y install $myINSTALLPACKAGES - # Remove exim4 - echo "### Removing and holding back problematic packages ..." - apt-fast -y purge exim4-base mailutils pcp cockpit-pcp elasticsearch-curator - apt-fast -y autoremove - apt-mark hold exim4-base mailutils pcp cockpit-pcp -} - -# Check for other services -function fuCHECK_PORTS { -if [ "$myTPOT_DEPLOYMENT_TYPE" == "user" ]; - then - echo - echo "### Checking for active services." - echo - grc netstat -tulpen - echo - echo "### Please review your running services." - echo "### We will take care of SSH (22), but other services i.e. FTP (21), TELNET (23), SMTP (25), HTTP (80), HTTPS (443), etc." - echo "### might collide with T-Pot's honeypots and prevent T-Pot from starting successfully." - echo - while [ 1 != 2 ] - do - read -s -n 1 -p "Continue [y/n]? " mySELECT - echo - case "$mySELECT" in - [y,Y]) - break - ;; - [n,N]) - exit - ;; - esac - done -fi -} - -############################ -# III. Pre-Installer phase # -############################ -fuGOT_ROOT -fuCHECKPACKAGES "$myPREINSTALLPACKAGES" - -##################################### -# IV. Prepare installer environment # -##################################### - -# Check for Debian release and extract command line arguments -myLSB=$(lsb_release -c | awk '{ print $2 }') -myVERSIONS="$myLSB_STABLE_SUPPORTED $myLSB_TESTING_SUPPORTED" -mySUPPORT="FALSE" -for i in $myVERSIONS - do - if [ "$myLSB" = "$i" ]; - then - mySUPPORT="TRUE" - fi -done -if [ "$mySUPPORT" = "FALSE" ]; - then - echo "Aborting. Debian $myLSB is not supported." - exit -fi -if [ "$1" == "" ]; - then - echo "$myINFO" - exit -fi -for i in "$@" - do - case $i in - --conf=*) - myTPOT_CONF_FILE="${i#*=}" - shift - ;; - --type=user) - myTPOT_DEPLOYMENT_TYPE="${i#*=}" - shift - ;; - --type=auto) - myTPOT_DEPLOYMENT_TYPE="${i#*=}" - shift - ;; - --type=iso) - myTPOT_DEPLOYMENT_TYPE="${i#*=}" - shift - ;; - --help) - echo "Usage: $0 " - echo - echo "--conf=" - echo " Use this if you want to automatically deploy a T-Pot instance (--type=auto implied)." - echo " A configuration example is available in \"tpotce/iso/installer/tpot.conf.dist\"." - echo - echo "--type=<[user, auto, iso]>" - echo " user, use this if you want to manually install a T-Pot on a Debian (Stable) machine." - echo " auto, implied if a configuration file is passed as an argument for automatic deployment." - echo " iso, use this if you are a T-Pot developer and want to install a T-Pot from a pre-compiled iso." - echo - exit - ;; - *) - echo "$myINFO" - exit - ;; - esac - done - -# Validate command line arguments and load config -# If a valid config file exists, set deployment type to "auto" and load the configuration -if [ "$myTPOT_DEPLOYMENT_TYPE" == "auto" ] && [ "$myTPOT_CONF_FILE" == "" ]; - then - echo "Aborting. No configuration file given." - exit -fi -if [ -s "$myTPOT_CONF_FILE" ] && [ "$myTPOT_CONF_FILE" != "" ]; - then - myTPOT_DEPLOYMENT_TYPE="auto" - if [ "$(head -n 1 $myTPOT_CONF_FILE | grep -c "# tpot")" == "1" ]; - then - source "$myTPOT_CONF_FILE" - else - echo "Aborting. Config file \"$myTPOT_CONF_FILE\" not a T-Pot configuration file." - exit - fi - elif ! [ -s "$myTPOT_CONF_FILE" ] && [ "$myTPOT_CONF_FILE" != "" ]; - then - echo "Aborting. Config file \"$myTPOT_CONF_FILE\" not found." - exit -fi - -# Prepare running the installer -myUSERCHECK=$(grep "tpot" /etc/passwd | wc -l) -if [ "$myUSERCHECK" -gt "0" ]; - then - echo "### The user name \"tpot\" already exists. The tpot username and group may not previously exist or T-Pot will not work." - echo "### We recommend a fresh install according to the T-Pot Readme Post-Install method." - echo - echo "Aborting." - echo - exit 0 -fi -echo "$myINFO" | head -n 3 -fuCHECK_PORTS - - -####################################### -# V. Installer user interaction phase # -####################################### - -# Set TERM -export TERM=linux - -# If this is a ISO installation we need to wait a few seconds to avoid interference with service messages -if [ "$myTPOT_DEPLOYMENT_TYPE" == "iso" ]; - then - sleep 5 - dialog --keep-window --no-ok --no-cancel --backtitle "$myBACKTITLE" --title "[ Wait to avoid interference with service messages ]" --pause "" 7 80 7 -fi - -# Check if remote sites are available -fuCHECKNET "$myREMOTESITES" - -# Let' s load the iso config file if there is one -if [ -f $myCONF_FILE ]; - then - dialog --keep-window --backtitle "$myBACKTITLE" --title "[ Found personalized iso.config ]" --msgbox "\nYour personalized settings will be applied!" 7 47 - source $myCONF_FILE - else - # dialog logic considers 1=false, 0=true - myCONF_PROXY_USE="1" - myCONF_PFX_USE="1" - myCONF_NTP_USE="1" -fi - -### <--- Begin proxy setup -# If a proxy is set in iso.conf it needs to be setup. -# However, none of the other installation types will automatically take care of a proxy. -# Please open a feature request if you think this is something worth considering. -myPROXY="http://$myCONF_PROXY_IP:$myCONF_PROXY_PORT" -myPROXY_ENV="export http_proxy=$myPROXY -export https_proxy=$myPROXY -export HTTP_PROXY=$myPROXY -export HTTPS_PROXY=$myPROXY -export no_proxy=localhost,127.0.0.1,.sock -" -myPROXY_APT="Acquire::http::Proxy \"$myPROXY\"; -Acquire::https::Proxy \"$myPROXY\"; -" -myPROXY_DOCKER="http_proxy=$myPROXY -https_proxy=$myPROXY -HTTP_PROXY=$myPROXY -HTTPS_PROXY=$myPROXY -no_proxy=localhost,127.0.0.1,.sock -" - -if [ "$myCONF_PROXY_USE" == "0" ]; - then - # Let's setup proxy for the environment - echo "$myPROXY_ENV" 2>&1 | tee -a /etc/environment | dialog --keep-window --title "[ Setting up the proxy ]" $myPROGRESSBOXCONF - source /etc/environment - - # Let's setup the proxy for apt - echo "$myPROXY_APT" 2>&1 | tee /etc/apt/apt.conf | dialog --keep-window --title "[ Setting up the proxy ]" $myPROGRESSBOXCONF - - # Let's add proxy settings to docker defaults - echo "$myPROXY_DOCKER" 2>&1 | tee -a /etc/default/docker | dialog --keep-window --title "[ Setting up the proxy ]" $myPROGRESSBOXCONF - - # Let's restart docker for proxy changes to take effect - systemctl stop docker 2>&1 | dialog --keep-window --title "[ Stop docker service ]" $myPROGRESSBOXCONF - systemctl start docker 2>&1 | dialog --keep-window --title "[ Start docker service ]" $myPROGRESSBOXCONF -fi -### ---> End proxy setup - -# Let's ask the user for install flavor -if [ "$myTPOT_DEPLOYMENT_TYPE" == "iso" ] || [ "$myTPOT_DEPLOYMENT_TYPE" == "user" ]; - then - myCONF_TPOT_FLAVOR=$(dialog --keep-window --no-cancel --backtitle "$myBACKTITLE" --title "[ Choose Your T-Pot Edition ]" --menu \ - "\nRequired: 8-16GB RAM, 128GB SSD\nRecommended: 16GB RAM, 256GB SSD" 17 70 1 \ - "STANDARD" "T-Pot Standalone with everything you need" \ - "HIVE" "T-Pot Hive: ELK & Tools" \ - "HIVE_SENSOR" "T-Pot Hive Sensor: Honeypots & NSM" \ - "INDUSTRIAL" "Same as Standard with focus on Conpot" \ - "LOG4J" "Log4Pot, ELK, NSM & Tools" \ - "MEDICAL" "Dicompot, Medpot, ELK, NSM & Tools" \ - "MINI" "Same as Standard with focus on qHoneypots" \ - "SENSOR" "Just Honeypots & NSM" 3>&1 1>&2 2>&3 3>&-) -fi - -# Let's ask for a secure tsec password if installation type is iso -if [ "$myTPOT_DEPLOYMENT_TYPE" == "iso" ]; - then - myCONF_TPOT_USER="tsec" - myPASS1="pass1" - myPASS2="pass2" - mySECURE="0" - while [ "$myPASS1" != "$myPASS2" ] && [ "$mySECURE" == "0" ] - do - while [ "$myPASS1" == "pass1" ] || [ "$myPASS1" == "" ] - do - myPASS1=$(dialog --keep-window --insecure --backtitle "$myBACKTITLE" \ - --title "[ Enter password for console user (tsec) ]" \ - --passwordbox "\nPassword" 9 60 3>&1 1>&2 2>&3 3>&-) - done - myPASS2=$(dialog --keep-window --insecure --backtitle "$myBACKTITLE" \ - --title "[ Repeat password for console user (tsec) ]" \ - --passwordbox "\nPassword" 9 60 3>&1 1>&2 2>&3 3>&-) - if [ "$myPASS1" != "$myPASS2" ]; - then - dialog --keep-window --backtitle "$myBACKTITLE" --title "[ Passwords do not match. ]" \ - --msgbox "\nPlease re-enter your password." 7 60 - myPASS1="pass1" - myPASS2="pass2" - fi - mySECURE=$(printf "%s" "$myPASS1" | cracklib-check | grep -c "OK") - if [ "$mySECURE" == "0" ] && [ "$myPASS1" == "$myPASS2" ]; - then - dialog --keep-window --backtitle "$myBACKTITLE" --title "[ Password is not secure ]" --defaultno --yesno "\nKeep insecure password?" 7 50 - myOK=$? - if [ "$myOK" == "1" ]; - then - myPASS1="pass1" - myPASS2="pass2" - fi - fi - done - printf "%s" "$myCONF_TPOT_USER:$myPASS1" | chpasswd -fi - -# Let's ask for web user credentials if deployment type is iso or user -# In case of auto, credentials are created from config values -# Skip this step entirely if SENSOR flavor -if [ "$myTPOT_DEPLOYMENT_TYPE" == "iso" ] || [ "$myTPOT_DEPLOYMENT_TYPE" == "user" ]; - then - myOK="1" - myCONF_WEB_USER="webuser" - myCONF_WEB_PW="pass1" - myCONF_WEB_PW2="pass2" - mySECURE="0" - while [ 1 != 2 ] - do - myCONF_WEB_USER=$(dialog --keep-window --backtitle "$myBACKTITLE" --title "[ Enter your web user name ]" --inputbox "\nUsername (tsec not allowed)" 9 50 3>&1 1>&2 2>&3 3>&-) - myCONF_WEB_USER=$(echo $myCONF_WEB_USER | tr -cd "[:alnum:]_.-") - dialog --keep-window --backtitle "$myBACKTITLE" --title "[ Your username is ]" --yesno "\n$myCONF_WEB_USER" 7 50 - myOK=$? - if [ "$myOK" = "0" ] && [ "$myCONF_WEB_USER" != "tsec" ] && [ "$myCONF_WEB_USER" != "" ]; - then - break - fi - done - while [ "$myCONF_WEB_PW" != "$myCONF_WEB_PW2" ] && [ "$mySECURE" == "0" ] - do - while [ "$myCONF_WEB_PW" == "pass1" ] || [ "$myCONF_WEB_PW" == "" ] - do - myCONF_WEB_PW=$(dialog --keep-window --insecure --backtitle "$myBACKTITLE" \ - --title "[ Enter password for your web user ]" \ - --passwordbox "\nPassword" 9 60 3>&1 1>&2 2>&3 3>&-) - done - myCONF_WEB_PW2=$(dialog --keep-window --insecure --backtitle "$myBACKTITLE" \ - --title "[ Repeat password for your web user ]" \ - --passwordbox "\nPassword" 9 60 3>&1 1>&2 2>&3 3>&-) - if [ "$myCONF_WEB_PW" != "$myCONF_WEB_PW2" ]; - then - dialog --keep-window --backtitle "$myBACKTITLE" --title "[ Passwords do not match. ]" \ - --msgbox "\nPlease re-enter your password." 7 60 - myCONF_WEB_PW="pass1" - myCONF_WEB_PW2="pass2" - fi - mySECURE=$(printf "%s" "$myCONF_WEB_PW" | cracklib-check | grep -c "OK") - if [ "$mySECURE" == "0" ] && [ "$myCONF_WEB_PW" == "$myCONF_WEB_PW2" ]; - then - dialog --keep-window --backtitle "$myBACKTITLE" --title "[ Password is not secure ]" --defaultno --yesno "\nKeep insecure password?" 7 50 - myOK=$? - if [ "$myOK" == "1" ]; - then - myCONF_WEB_PW="pass1" - myCONF_WEB_PW2="pass2" - fi - fi - done -fi - -dialog --clear - -########################## -# VI. Installation phase # -########################## - -exec 2> >(tee "/install.err") -exec > >(tee "/install.log") - -fuBANNER "Installing ..." - -fuGET_DEPS - -# If flavor is SENSOR do not write credentials -if ! [ "$myCONF_TPOT_FLAVOR" == "SENSOR" ]; - then - fuBANNER "Webuser creds" - mkdir -p /data/nginx/conf - htpasswd -b -c /data/nginx/conf/nginxpasswd "$myCONF_WEB_USER" "$myCONF_WEB_PW" - echo -fi - -# Let's generate a SSL self-signed certificate without interaction (browsers will see it invalid anyway) -if ! [ "$myCONF_TPOT_FLAVOR" == "SENSOR" ]; -then - fuBANNER "NGINX Certificate" - myINTIP=$(hostname -I | awk '{ print $1 }') - mkdir -p /data/nginx/cert - openssl req \ - -nodes \ - -x509 \ - -sha512 \ - -newkey rsa:8192 \ - -keyout "/data/nginx/cert/nginx.key" \ - -out "/data/nginx/cert/nginx.crt" \ - -days 3650 \ - -subj '/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd' \ - -addext "subjectAltName = IP:$myINTIP" -fi - -# Let's setup the ntp server -if [ "$myCONF_NTP_USE" == "0" ]; - then - fuBANNER "Setup NTP" - cp $myCONF_NTP_CONF_FILE /etc/systemd/timesyncd.conf -fi - -# Let's setup 802.1x networking -if [ "myCONF_PFX_USE" == "0" ]; - then - fuBANNER "Setup 802.1x" - cp $myCONF_PFX_FILE /etc/wpa_supplicant/ - echo "$myNETWORK_INTERFACES" | tee -a /etc/network/interfaces - echo "$myNETWORK_WIRED8021x" | tee /etc/wpa_supplicant/wired8021x.conf - echo "$myNETWORK_WLAN8021x" | tee /etc/wpa_supplicant/wireless8021x.conf -fi - -# Let's provide a wireless example config ... -fuBANNER "Example config" -echo "$myNETWORK_WLANEXAMPLE" | tee -a /etc/network/interfaces - -# Let's make sure SSH roaming is turned off (CVE-2016-0777, CVE-2016-0778) -fuBANNER "SSH roaming off" -echo "UseRoaming no" | tee -a /etc/ssh/ssh_config - -# Installing elasticdump, yq -fuBANNER "Installing pkgs" -npm install elasticdump -g -pip3 install glances[docker] yq -hash -r - -# Cloning T-Pot from GitHub -if ! [ "$myTPOT_DEPLOYMENT_TYPE" == "iso" ]; - then - fuBANNER "Cloning T-Pot" - ### DEV - git clone https://github.com/telekom-security/tpotce /opt/tpot -fi - -# Let's create the T-Pot user -fuBANNER "Create groups" -addgroup --gid 2000 tpot -addgroup tpotlogs -fuBANNER "Create user" -adduser --system --no-create-home --uid 2000 --disabled-password --disabled-login --gid 2000 tpot - -# Let's set the hostname -a=$(fuRANDOMWORD /opt/tpot/host/usr/share/dict/a.txt) -n=$(fuRANDOMWORD /opt/tpot/host/usr/share/dict/n.txt) -myHOST=$a$n -fuBANNER "Set hostname" -hostnamectl set-hostname $myHOST -sed -i 's#127.0.1.1.*#127.0.1.1\t'"$myHOST"'#g' /etc/hosts - -# Prevent cloud-init from overwriting our new hostname -if [ -f '/etc/cloud/cloud.cfg' ]; then - sed -i 's/preserve_hostname.*/preserve_hostname: true/g' /etc/cloud/cloud.cfg -fi - -# Let's patch cockpit.socket, sshd_config -fuBANNER "Adjust ports" -mkdir -p /etc/systemd/system/cockpit.socket.d -echo "$myCOCKPIT_SOCKET" | tee /etc/systemd/system/cockpit.socket.d/listen.conf -sed -i '/^port/Id' /etc/ssh/sshd_config -echo "$mySSHSETTINGS" | tee -a /etc/ssh/sshd_config - -# Do not allow root login for cockpit -sed -i '2i\auth requisite pam_succeed_if.so uid >= 1000' /etc/pam.d/cockpit - -# Let's make sure only myCONF_TPOT_FLAVOR images will be downloaded and started -case $myCONF_TPOT_FLAVOR in - STANDARD) - fuBANNER "STANDARD" - ln -s /opt/tpot/etc/compose/standard.yml $myTPOTCOMPOSE - ;; - HIVE) - fuBANNER "HIVE" - ln -s /opt/tpot/etc/compose/hive.yml $myTPOTCOMPOSE - ;; - HIVE_SENSOR) - fuBANNER "HIVE_SENSOR" - ln -s /opt/tpot/etc/compose/hive_sensor.yml $myTPOTCOMPOSE - ;; - INDUSTRIAL) - fuBANNER "INDUSTRIAL" - ln -s /opt/tpot/etc/compose/industrial.yml $myTPOTCOMPOSE - ;; - LOG4J) - fuBANNER "LOG4J" - ln -s /opt/tpot/etc/compose/log4j.yml $myTPOTCOMPOSE - ;; - MEDICAL) - fuBANNER "MEDICAL" - ln -s /opt/tpot/etc/compose/medical.yml $myTPOTCOMPOSE - ;; - MINI) - fuBANNER "MINI" - ln -s /opt/tpot/etc/compose/mini.yml $myTPOTCOMPOSE - ;; - SENSOR) - fuBANNER "SENSOR" - ln -s /opt/tpot/etc/compose/sensor.yml $myTPOTCOMPOSE - ;; -esac - -# Let's load docker images -function fuPULLIMAGES { -for name in $(cat $myTPOTCOMPOSE | grep -v '#' | grep image | cut -d'"' -f2 | uniq) - do - docker pull $name -done -} -fuBANNER "Pull images" -fuPULLIMAGES - -# Let's add the daily update check with a weekly clean interval -fuBANNER "Modify checks" -echo "$myUPDATECHECK" | tee /etc/apt/apt.conf.d/10periodic - -# Let's make sure to reboot the system after a kernel panic -fuBANNER "Tweak sysctl" -echo "$mySYSCTLCONF" | tee -a /etc/sysctl.conf - -# Let's setup fail2ban config -fuBANNER "Setup fail2ban" -echo "$myFAIL2BANCONF" | tee /etc/fail2ban/jail.d/tpot.conf - -# Fix systemd error https://github.com/systemd/systemd/issues/3374 -fuBANNER "Systemd fix" -echo "$mySYSTEMDFIX" | tee /etc/systemd/network/99-default.link - -# Let's add some cronjobs -fuBANNER "Add cronjobs" -echo "$myCRONJOBS" | tee -a /etc/crontab - -# Let's create some files and folders -fuBANNER "Files & folders" -mkdir -vp /data/adbhoney/{downloads,log} \ - /data/ciscoasa/log \ - /data/conpot/log \ - /data/citrixhoneypot/logs \ - /data/cowrie/{downloads,keys,misc,log,log/tty} \ - /data/ddospot/{bl,db,log} \ - /data/dicompot/{images,log} \ - /data/dionaea/{log,bistreams,binaries,rtp,roots,roots/ftp,roots/tftp,roots/www,roots/upnp} \ - /data/elasticpot/log \ - /data/elk/{data,log} \ - /data/endlessh/log \ - /data/ews/conf \ - /data/fatt/log \ - /data/glutton/log \ - /data/hellpot/log \ - /data/heralding/log \ - /data/honeypots/log \ - /data/honeysap/log \ - /data/honeytrap/{log,attacks,downloads} \ - /data/ipphoney/log \ - /data/log4pot/{log,payloads} \ - /data/mailoney/log \ - /data/medpot/log \ - /data/nginx/{log,heimdall} \ - /data/p0f/log \ - /data/redishoneypot/log \ - /data/sentrypeer/log \ - /data/spiderfoot \ - /data/suricata/log \ - /data/tanner/{log,files} \ - /home/tsec/.ssh/ -touch /data/nginx/log/error.log - -# Let's copy some files -fuBANNER "Copy configs" -tar xvfz /opt/tpot/etc/objects/elkbase.tgz -C / -cp /opt/tpot/host/etc/systemd/* /etc/systemd/system/ -systemctl enable tpot - -# Let's take care of some files and permissions -fuBANNER "Permissions" -chmod 770 -R /data -if [ "$myTPOT_DEPLOYMENT_TYPE" == "iso" ]; - then - usermod -a -G tpot tsec - chown tsec:tsec -R /home/tsec/.ssh - else - usermod -a -G tpot $(who am i | awk '{ print $1 }') -fi -chown tpot:tpot -R /data -chmod 644 -R /data/nginx/conf -chmod 644 -R /data/nginx/cert - -# Let's replace "quiet splash" options, set a console font for more screen canvas and update grub -fuBANNER "Options" -sed -i 's#GRUB_CMDLINE_LINUX_DEFAULT="quiet"#GRUB_CMDLINE_LINUX_DEFAULT="quiet consoleblank=0"#' /etc/default/grub -sed -i 's#GRUB_CMDLINE_LINUX=""#GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"#' /etc/default/grub -update-grub - -fuBANNER "Setup console" -cp /usr/share/consolefonts/Uni2-Terminus12x6.psf.gz /etc/console-setup/ -gunzip /etc/console-setup/Uni2-Terminus12x6.psf.gz -sed -i 's#FONTFACE=".*#FONTFACE="Terminus"#' /etc/default/console-setup -sed -i 's#FONTSIZE=".*#FONTSIZE="12x6"#' /etc/default/console-setup -update-initramfs -u -sed -i 's#After=.*#After=systemd-tmpfiles-setup.service console-screen.service kbd.service local-fs.target#' /etc/systemd/system/multi-user.target.wants/console-setup.service - -# Let's enable a color prompt and add /opt/tpot/bin to path -fuBANNER "Setup prompt" -tee -a /root/.bashrc <&1 1>&2 2>&3 3>&-) -if [ "$myARCH" == "" ]; - then - exit -fi -myMINIISOLINK="http://ftp.debian.org/debian/dists/bullseye/main/installer-$myARCH/current/images/netboot/mini.iso" -myMINIISO="mini_$myARCH.iso" -myTPOTISO="tpot_$myARCH.iso" - -# Let's load the default config file -if [ -f $myCONF_DEFAULT_FILE ]; - then - source $myCONF_DEFAULT_FILE -fi - -# Let's ask the user for a proxy ... -while true; -do - dialog --backtitle "$myBACKTITLE" --title "[ Proxy Settings ]" --yesno "\nDo you want to configure a proxy?" 7 50 - myCONF_PROXY_USE=$? - if [ "$myCONF_PROXY_USE" = "0" ] - then - myIPRESULT="false" - while [ "$myIPRESULT" = "false" ]; - do - myCONF_PROXY_IP=$(dialog --backtitle "$myBACKTITLE" --no-cancel --title "Proxy IP?" --inputbox "" 7 50 "$myCONF_PROXY_IP" 3>&1 1>&2 2>&3 3>&-) - if valid_ip $myCONF_PROXY_IP; then myIPRESULT="true"; fi - done - myPORTRESULT="false" - while [ "$myPORTRESULT" = "false" ]; - do - myCONF_PROXY_PORT=$(dialog --backtitle "$myBACKTITLE" --no-cancel --title "Proxy Port (i.e. 3128)?" --inputbox "" 7 50 "$myCONF_PROXY_PORT" 3>&1 1>&2 2>&3 3>&-) - if [[ $myCONF_PROXY_PORT =~ ^-?[0-9]+$ ]] && [ $myCONF_PROXY_PORT -gt 0 ] && [ $myCONF_PROXY_PORT -lt 65536 ]; then myPORTRESULT="true"; fi - done - sed -i.bak 's#d-i mirror/http/proxy.*#d-i mirror/http/proxy string http://'$myCONF_PROXY_IP':'$myCONF_PROXY_PORT'/#' $myTPOTSEED - break - else - myCONF_PROXY_IP="" - myCONF_PROXY_PORT="" - break - fi -done - -# Let's ask the user for 802.1x data ... -while true; -do - dialog --backtitle "$myBACKTITLE" --title "[ Need 802.1x auth? ]" --yesno "\nDo you want to add a 802.1x host certificate?" 7 50 - myCONF_PFX_USE=$? - if [ "$myCONF_PFX_USE" = "0" ] - then - myCONF_PFX_FILE=$(dialog --backtitle "$myBACKTITLE" --fselect "$myCONF_PFX_FILE" 15 50 3>&1 1>&2 2>&3 3>&-) - if [ -f "$myCONF_PFX_FILE" ] - then - cp $myCONF_PFX_FILE $myPFXFILE - dialog --backtitle "$myBACKTITLE" --title "[ Password protected? ]" --yesno "\nDoes the certificate need your password?" 7 50 - myCONF_PFX_PW_USE=$? - if [ "$myCONF_PFX_PW_USE" = "0" ] - then - myCONF_PFX_PW=$(dialog --backtitle "$myBACKTITLE" --no-cancel --inputbox "Password?" 7 50 3>&1 1>&2 2>&3 3>&-) - else - myCONF_PFX_PW="" - fi - myCONF_PFX_HOST_ID=$(dialog --backtitle "$myBACKTITLE" --no-cancel --inputbox "Host ID?" 7 50 "$myCONF_PFX_HOST_ID" 3>&1 1>&2 2>&3 3>&-) - break - else - dialog --backtitle "$myBACKTITLE" --title "[ Try again! ]" --msgbox "\nThis is no regular file." 7 50; - fi - else - myCONF_PFX_FILE="" - myCONF_PFX_HOST_ID="" - myCONF_PFX_PW="" - break - fi -done - -# Let's ask the user for a ntp server ... -while true; -do - dialog --backtitle "$myBACKTITLE" --title "[ NTP server? ]" --yesno "\nDo you want to configure a ntp server?" 7 50 - myCONF_NTP_USE=$? - if [ "$myCONF_NTP_USE" = "0" ] - then - myIPRESULT="false" - while [ "$myIPRESULT" = "false" ]; - do - myCONF_NTP_IP=$(dialog --backtitle "$myBACKTITLE" --no-cancel --title "NTP IP?" --inputbox "" 7 50 "$myCONF_NTP_IP" 3>&1 1>&2 2>&3 3>&-) - if valid_ip $myCONF_NTP_IP; then myIPRESULT="true"; fi - done -tee $myNTPCONFFILE < $myCONF_FILE - echo "myCONF_PROXY_USE=\"$myCONF_PROXY_USE\"" >> $myCONF_FILE - echo "myCONF_PROXY_IP=\"$myCONF_PROXY_IP\"" >> $myCONF_FILE - echo "myCONF_PROXY_PORT=\"$myCONF_PROXY_PORT\"" >> $myCONF_FILE - echo "myCONF_PFX_USE=\"$myCONF_PFX_USE\"" >> $myCONF_FILE - echo "myCONF_PFX_FILE=\"/root/installer/keys/8021x.pfx\"" >> $myCONF_FILE - echo "myCONF_PFX_PW_USE=\"$myCONF_PFX_PW_USE\"" >> $myCONF_FILE - echo "myCONF_PFX_PW=\"$myCONF_PFX_PW\"" >> $myCONF_FILE - echo "myCONF_PFX_HOST_ID=\"$myCONF_PFX_HOST_ID\"" >> $myCONF_FILE - echo "myCONF_NTP_USE=\"$myCONF_NTP_USE\"" >> $myCONF_FILE - echo "myCONF_NTP_IP=\"$myCONF_NTP_IP\"" >> $myCONF_FILE - echo "myCONF_NTP_CONF_FILE=\"/root/installer/timesyncd.conf\"" >> $myCONF_FILE -fi - -# Let's download Debian Minimal ISO -if [ ! -f $myMINIISO ] - then - wget $myMINIISOLINK --progress=dot 2>&1 | awk '{print $7+0} fflush()' | dialog --backtitle "$myBACKTITLE" --title "[ Downloading Debian for $myARCH ]" --gauge "" 5 70; - echo 100 | dialog --backtitle "$myBACKTITLE" --title "[ Downloading Debian for $myARCH ... Done! ]" --gauge "" 5 70; - # Need to rename after download or progresss bar does not work. - mv mini.iso $myMINIISO - else - dialog --infobox "Using previously downloaded .iso ..." 3 50; -fi - -# Let's extract ISO contents (using / to extract all from ISO root) -xorriso -osirrox on -indev $myMINIISO -extract / $myTPOTDIR - -# Let's modify initrd and create a tmp for the initrd filesystem we need to modify -gunzip $myTPOTDIR/initrd.gz -mkdir $myTPOTDIR/tmp -cd $myTPOTDIR/tmp -cpio --extract --make-directories --no-absolute-filenames < ../initrd -cd .. -rm initrd -cd .. - -# Let's add the files for the automated install -mkdir -p $myTPOTDIR/tmp/opt/ -cp iso/installer -R $myTPOTDIR/tmp/opt/ -# Isolinux is only necessary for AMD64 -if [ "$myARCH" = "amd64" ]; - then - cp iso/isolinux/* $myTPOTDIR/ - else - sed -i "s#menuentry 'Install'#menuentry 'Install T-Pot 22.04.0 (ARM64)'#g" $myTPOTDIR/boot/grub/grub.cfg -fi -# For now we need architecture based preseeds -cp iso/preseed/tpot_$myARCH.seed $myTPOTDIR/tmp/preseed.cfg - -# Let's create the new initrd -cd $myTPOTDIR/tmp -find . | cpio -H newc --create > ../initrd -cd .. -gzip initrd -rm -rf tmp -cd .. - -# Since ARM64 needs EFI we need different methods to build the ISO -cd $myTPOTDIR -if [ "$myARCH" == "amd64" ]; - then - # Create AMD64 .iso - xorrisofs -r -V "T-Pot $myARCH" \ - -iso-level 3 \ - -full-iso9660-filenames \ - --mbr-force-bootable -partition_offset 16 \ - -joliet -joliet-long -rational-rock \ - -isohybrid-mbr $myMBR_TEMPLATE \ - -b isolinux.bin \ - -no-emul-boot \ - -boot-load-size 4 \ - -boot-info-table \ - -c boot.cat \ - -eltorito-alt-boot \ - -no-emul-boot \ - -isohybrid-gpt-basdat \ - -o ../"$myTPOTISO" ../"$myTPOTDIR" 2>&1 | awk '{print $1+0} fflush()' | cut -f1 -d"." | dialog --backtitle "$myBACKTITLE" --title "[ Building T-Pot $myARCH .iso ... ]" --gauge "" 5 70 0 - echo 100 | dialog --backtitle "$myBACKTITLE" --title "[ Building T-Pot $myARCH .iso ... Done! ]" --gauge "" 5 70 - cd .. - else - # Create ARM64 .iso - xorriso -as mkisofs -r -V "T-Pot $myARCH" \ - -J -joliet-long -cache-inodes \ - -e boot/grub/efi.img \ - -no-emul-boot \ - -append_partition 2 0xef boot/grub/efi.img \ - -partition_cyl_align all \ - -o ../"$myTPOTISO" \ - ../"$myTPOTDIR" - echo 100 | dialog --backtitle "$myBACKTITLE" --title "[ Building T-Pot $myARCH .iso ... Done! ]" --gauge "" 5 70 - cd .. -fi -sha256sum $myTPOTISO > "tpot_$myARCH.sha256" - -# Let's write the image -while true; -do - dialog --backtitle "$myBACKTITLE" --yesno "\nWrite .iso to USB drive?" 7 50 - myUSBCOPY=$? - if [ "$myUSBCOPY" = "0" ] - then - myTARGET=$(dialog --backtitle "$myBACKTITLE" --title "[ Select target device ... ]" --menu "" 16 40 10 $(lsblk -io NAME,SIZE -dnp) 3>&1 1>&2 2>&3 3>&-) - if [ "$myTARGET" != "" ] - then - dialog --backtitle "$myBACKTITLE" --yesno "\nWrite .iso to "$myTARGET"?" 7 50 - myWRITE=$? - if [ "$myWRITE" = "0" ] - then - umount $myTARGET? 2>&1 || true - (pv -n "$myTPOTISO" | dd of="$myTARGET") 2>&1 | dialog --backtitle "$myBACKTITLE" --title "[ Writing .iso to target ... ]" --gauge "" 5 70 0 - echo 100 | dialog --backtitle "$myBACKTITLE" --title "[ Writing .iso to target ... Done! ]" --gauge "" 5 70 - udisksctl power-off -b $myTARGET 2>&1 - break - fi - fi - else - break; - fi -done - -dialog --clear - -exit 0 diff --git a/packages.txt b/packages.txt deleted file mode 100644 index 78c6795a..00000000 --- a/packages.txt +++ /dev/null @@ -1,61 +0,0 @@ -aria2 -apache2-utils -apparmor -apt-transport-https -bash-completion -bat -build-essential -ca-certificates -cgroupfs-mount -cockpit conntrack -console-setup -console-setup-linux -cracklib-runtime -curl -debconf-utils -dialog -dnsutils -docker.io -docker-compose -ethtool -fail2ban -figlet -fuse -genisoimage -git -grc -haveged -html2text -htop -iptables -iw -jq -kbd -libcrack2 -libltdl7 -libpam-google-authenticator -libpq-dev -lsb-release -man -mosh -multitail -net-tools -neovim -npm -openssh-server -openssl -pass -pigz -prips -software-properties-common -sshpass -psmisc -pv -python3-pip -systemd-timesyncd -toilet -unattended-upgrades -unzip -wget -wireless-tools -wpasupplicant diff --git a/preview/.env b/preview/.env deleted file mode 100644 index f55ff641..00000000 --- a/preview/.env +++ /dev/null @@ -1,52 +0,0 @@ -# T-Pot config file. Do not remove. - -# Set Web username and password here, only required for first run -# Removing the password after first run is recommended -# You can always add or remove users as you see fit using htpasswd: -# htpasswd -b -c //nginx/conf/nginxpasswd -WEB_USER=changeme -WEB_PW=changeme - -# T-Pot Blackhole -# ENABLED: T-Pot will download a db of known mass scanners and nullroute them -# Be aware, this will put T-Pot off the map for stealth reasons and -# you will get less traffic. Routes will active until reboot and will -# be re-added with every T-Pot start until disabled. -# DISABLED: This is the default and no stealth efforts are in place. -TPOT_BLACKHOLE=DISABLED - -################################################################################### -# NEVER MAKE CHANGES TO THIS SECTION UNLESS YOU REALLY KNOW WHAT YOU ARE DOING!!! # -################################################################################### - -# T-Pot Landing page provides Cockpit Link -COCKPIT=false - -# docker.sock Path -TPOT_DOCKER_SOCK=/var/run/docker.sock - -# docker compose .env -TPOT_DOCKER_ENV=./.env - -# Docker-Compose file -TPOT_DOCKER_COMPOSE=./docker-compose.yml - -# T-Pot Repo -TPOT_REPO=dtagdevsec - -# T-Pot Version Tag -TPOT_VERSION=2204 - -# T-Pot Pull Policy -# always: (T-Pot default) Compose implementations SHOULD always pull the image from the registry. -# never: Compose implementations SHOULD NOT pull the image from a registry and SHOULD rely on the platform cached image. -# missing: Compose implementations SHOULD pull the image only if it's not available in the platform cache. -# build: Compose implementations SHOULD build the image. Compose implementations SHOULD rebuild the image if already present. -TPOT_PULL_POLICY=always - -# T-Pot Data Path -TPOT_DATA_PATH=./data - -# OSType (linux, mac, win) -# Most docker features are available on linux -TPOT_OSTYPE=linux diff --git a/preview/README.md b/preview/README.md deleted file mode 100644 index 7e60ad72..00000000 --- a/preview/README.md +++ /dev/null @@ -1,196 +0,0 @@ -# T-Pot - Technical Preview - -T-Pot will be turning 10 years next year and this milestone will be celebrated when the time comes, which brings us today to the best time to reflect on how technology advanced, what this means for the project and how we can ensure T-Pot will meet the current and future requirements of the community. -

- -# TL;DR -1. [Download](#choose-your-distro) or use a running, supported distribution -2. Install the ISO with as minimal packages / services as possible (SSH required!) -3. Clone T-Pot: `$ git clone https://github.com/telekom-security/tpotce` -4. Locate installer for your distribution: `$ cd tpotce/preview/installer/` -5. Run installer as non-root: `$ ./install.sh` - * Follow instructions, read messages, check for possible port conflicts and reboot -7. [Set](#t-pot-config-file) username and password in config `.env`: `vi preview/.env` -8. [Start](#start-t-pot) T-Pot for the first time: -``` -$ cd tpotce/preview/ -$ docker compose up -``` - - -# Table of Contents -- [Disclaimer](#disclaimer) -- [Last Time Departed](#last-time-departed) -- [Present Time](#present-time) -- [Destination Time](#destination-time) -- [Technical Preview](#technical-preview) - - [Architecture](#architecture) -- [Installation](#installation) - - [Choose your distro](#choose-your-distro) - - [Get and Install T-Pot](#get-and-install-t-pot) - - [T-Pot Config File](#t-pot-config-file) - - [macOS & Windows](#macos--windows) -- [Start T-Pot](#start-t-pot) -- [Stop T-Pot](#stop-t-pot) -- [Uninstall T-Pot](#uninstall-t-pot) -- [Feedback](#uninstall-t-pot) - -

- -# Disclaimer -- This is a Technical Preview, a very very early stage in the development T-Pot. You have been warned - there will be dragons steering flying time machines possibly causing paradoxes. -- The T-Pot [disclaimer](https://github.com/telekom-security/tpotce/blob/master/README.md#disclaimer) and [documentation](https://github.com/telekom-security/tpotce/blob/master/README.md) apply. -

- -# Last Time Departed -Jumping back to 2014 T-Pot was born as the direct ancestor of our Raspberry Pi images we used to offer for download (which probably by now only insiders will remember πŸ˜…). Docker was just the new kid on the block with the shiny new container engine everyone desperately unknowingly waited for and thus taking the dev-world by storm. At that point we wanted to ensure that T-Pot was something tangible, tethered to a physical device (Hello NUC my old friend πŸ‘‹) while using latest technologies ensuring an easy transition should we ever leave hardware based installations (or VMs for that matter). And Oh-My-Zsh as you all know that day came faster than anticipated! (Special thanks @vorband, @shaderecker and @tmariuss for all of their contributions!) -

- -# Present Time -Flash Forward to today, T-Pot offers support for Debian, both as an ISO based installation or a post installation method (install your own Debian Server), support for OTC, AWS and other clouds through Ansible and Terraform Support. All of this in many different flavors and even a distributed installation. At the same time we are still relying on the same base concept we originally started with which does not seem fit for the foreseeable future.
-In the last couple of years being independent of a certain platform was the one feature that stood out by far. The reason for this, until today, is the simple fact that T-Pot, although relying heavily on Docker, still relies on a fully controlled environment. This has its advantages but can not meet a demand where cloud based installations need different settings than we can provide (we can only run limited platform tests), companies follow different guidelines for allowed distributions or hosters simply offer Debian images slightly adjusted to their environments causing issues with the setting T-Pot relies on. Roll the dice or ask the Magic-8-Ball. -

- -# Destination Time -Back to the future of T-Pot. For a brief time we had the idea of T-Pot Light which should compensate for the missing platform support. A concept was whipped up to support all of T-Pot's dockered services on minimal installations of Debian, Fedora, OpenSuse and Ubuntu Server. And it worked! It worked so good that we have almost achieved feature parity for this Technical Preview and decided that this is the best candidate for the future of the development of T-Pot
-We are thrilled to share this now, so you can test, provide us with feedback, open issues and discussions and give us the chance to make the next T-Pot the best T-Pot we have ever released! -

- -## Technical Preview -For the purpose of the Technical Preview T-Pot will still use the 22.04 images and for a great part rely on the 22.04 release. This will lay the groundwork though for the next T-Pot release by just relying on the latest Docker package repositories (yes, the distros mostly do not offer Docker's bleeding edge features), some tiny modifications on the host (installer and uninstaller provided!) and move all of T-Pot's core in its own Docker image with a simple, user adjustable, configuration.
-

- -## Architecture -While the basic architecture still remains, the Technical Preview of T-Pot is mostly independent of the underlying OS with only some basic requirements: -1. Underlying OS is available as supported distribution: - * Only the bare minimum of services and packages are installed to avoid possible port conflicts with T-Pot's services - * Debian, Fedora, OpenSuse and Ubuntu Server are currently supported, others might follow if the requirements will be met -2. Latest Docker Engine from Docker's repositories is supported - * Only the latest Docker Engine packages offer all the features needed for T-Pot - * Docker Desktop does not offer host network capabilities and thus only a limited T-Pot experience (not available for the Technical Preview, but planned to even get started faster!) -3. Changes to the host - * Some changes to the host are necessary but will be kept as minimalistic as possible, just enough T-Pot will be able to run - * There are uninstallers available this time 😁 -

- -# System Requirements -The known T-Pot hardware (CPU, RAM, SSD) requirements and recommendations still apply. -

- -# Installation -[Download](#choose-your-distro) one of the supported Linux distro images, `git clone` the T-Pot repository and run the installer specific to your system. Running T-Pot on top of a running and supported Linux system is possible, but a clean installation is recommended to avoid port conflicts with running services. -

- -## Choose your distro -Choose a supported distro of your choice. It is recommended to use the minimum / netiso installers linked below and only install a minimalistic set of packages. SSH is mandatory or you will not be able to connect to the machine remotely. - -| Distribution Name | x64 | arm64 -|:-----------------------------------------------|:-----------------------------------------------------------------------------------------------------------|:-------------- -| [Debian](https://www.debian.org/index.en.html) | [download](http://ftp.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/mini.iso) | [download](http://ftp.debian.org/debian/dists/stable/main/installer-arm64/current/images/netboot/mini.iso) -| [Fedora](https://fedoraproject.org) | [download](https://download.fedoraproject.org/pub/fedora/linux/releases/38/Server/x86_64/iso/Fedora-Server-netinst-x86_64-38-1.6.iso) | [download](https://download.fedoraproject.org/pub/fedora/linux/releases/38/Server/aarch64/iso/Fedora-Server-netinst-aarch64-38-1.6.iso) -| [OpenSuse](https://www.opensuse.org) | [download](https://download.opensuse.org/tumbleweed/iso/openSUSE-Tumbleweed-NET-x86_64-Current.iso) | [download](https://download.opensuse.org/ports/aarch64/tumbleweed/iso/openSUSE-Tumbleweed-NET-aarch64-Current.iso) -| [Ubuntu](https://ubuntu.com) | [download](https://releases.ubuntu.com/22.04.2/ubuntu-22.04.2-live-server-amd64.iso) | [download](https://cdimage.ubuntu.com/releases/22.04/release/ubuntu-22.04.2-live-server-arm64.iso) - - -

- -## Get and install T-Pot -1. Clone the GitHub repository: `$ git clone https://github.com/telekom-security/tpotce` -2. Change into the **tpotce/preview/installer** folder: `$ cd tpotce/preview/installer` -3. Locate your distribution, i.e. `fedora`: `$ cd fedora` -4. Run the installer as non-root: `$ ./install.sh`: - * ⚠️ ***Depending on your Linux distribution of choice the installer will:*** - * Change the SSH port to `tcp/64295` - * Disable the DNS Stub Listener to avoid port conflicts with honeypots - * Set SELinux to Monitor Mode - * Set the firewall target for the public zone to ACCEPT - * Add Docker's repository and install Docker - * Install recommended packages - * Remove package known to cause issues - * Add the current user to the docker group (allow docker interaction without `sudo`) - * Add `dps` and `dpsw` aliases (`grc docker ps -a`, `watch -c "grc --colour=on docker ps -a`) - * Display open ports on the host (compare with T-Pot [required](https://github.com/telekom-security/tpotce#required-ports) ports) -5. Follow the installer instructions, you will have to enter your password at least once -6. Check the installer messages for errors and open ports that might cause port conflicts -7. Reboot: `$ sudo reboot` -

- -## T-Pot Config File -T-Pot offers a configuration file providing environment variables not only for the docker services (i.e. honeypots and tools) but also for the docker compose environment. The configuration file is hidden in the `preview` folder and is called `.env`. There is however an example file (`env.example`) which holds the default configuration.
Before the first start set the `WEB_USER` and `WEB_PW`. Once T-Pot was initialized it is recommended to remove the password and set `WEB_PW=`. Other settings are available also, these however should only be changed if you are comfortable with possible errors 🫠 as some of the features are not fully integrated and tested yet. -``` -# T-Pot config file. Do not remove. - -# Set Web username and password here, only required for first run -# Removing the password after first run is recommended -# You can always add or remove users as you see fit using htpasswd: -# htpasswd -b -c //nginx/conf/nginxpasswd -WEB_USER= -WEB_PW= - -# T-Pot Blackhole -# ENABLED: T-Pot will download a db of known mass scanners and nullroute them -# Be aware, this will put T-Pot off the map for stealth reasons and -# you will get less traffic. Routes will active until reboot and will -# be re-added with every T-Pot start until disabled. -# DISABLED: This is the default and no stealth efforts are in place. -TPOT_BLACKHOLE=DISABLED -``` - -## macOS & Windows -Sometimes it is just nice if you can spin up a T-Pot instance on macOS or Windows, i.e. for development, testing or just the fun of it. While Docker Desktop is rather limited not all honeypot types or T-Pot features are supported. Also remember, by default the macOS and Windows firewall are blocking access from remote, so testing is limited to the host. For production it is recommended to run T-Pot on Linux.
-To get things up and running just follow these steps: -1. Install Docker Desktop for [macOS](https://docs.docker.com/desktop/install/mac-install/) or [Windows](https://docs.docker.com/desktop/install/windows-install/) -2. Clone the GitHub repository: `$ git clone https://github.com/telekom-security/tpotce` -2. Change into the **tpotce/preview/compose** folder: `$ cd tpotce/preview/compose` -3. Copy **mac_win.yml** to the **tpotce/preview** folder by overwriting **docker-compose.yml**: `$ cp mac_win.yml ../docker-compose.yml` -4. Adjust the **.env** file by changing **TPOT_OSTYPE** to either **mac** or **win**: -``` -# OSType (linux, mac, win) -# Most docker features are available on linux -TPOT_OSTYPE=mac -``` -5. You have to ensure on your own there are no port conflicts keeping T-Pot from starting up. -You can follow the README on how to [Start T-Pot](#start-t-pot), however you may skip the **crontab**. - - -# Start T-Pot -1. Change into the **tpotce/preview/** folder: `$ cd tpotce/preview/` -2. Run: `$ docker compose up` (notice the missing dash, `docker-compose` no longer exists with the latest Docker installation) - * You can also run `$ docker compose -f //tpotce/preview/docker-compose.yml up` directly if you want to avoid to change into the `preview` folder or add an alias of your choice. -3. `docker compose` will now download all the necessary images to run the T-Pot Docker containers -4. On the first run T-Pot (`tpotinit`) will initialize and create the `data` folder in the path specified (by default it is located in `tpotce/preview/data/`): - * It takes about 2-3 minutes to bring all the containers up (should port conflicts arise `docker compose` will simply abort) - * Once all containers have started successfully for the first time you can access T-Pot as described [here](https://github.com/telekom-security/tpotce#remote-access-and-tools) or cancel with `CTRL-C` ... -5. ... and run T-Pot in the background: `$ docker compose up -d` - * Unless you run `docker compose down -v` T-Pot's Docker service will remain persistent and restart with a reboot - * You can however add a crontab entry with `crontab -e` which will also add some container and image management. -``` -@reboot docker compose -f //tpotce/preview/docker-compose.yml down -v; \ -docker container prune -f; \ -docker image prune -f; \ -docker compose -f //tpotce/preview/docker-compose.yml up -d -``` -6. By default Docker will always check if the local and remote docker images match, if not, Docker will either revert to a fitting locally cached image or download the image from remote. This ensures T-Pot images will always be up-to-date - -# Stop T-Pot -1. Change into the **tpotce/preview/** folder: `$ cd tpotce/preview/` -2. Run: `$ docker compose down -v` (notice the missing dash, `docker-compose` no longer exists with the latest docker installation) -3. Docker will now stop all running T-Pot containers and disable reboot persistence (unless you made a [crontab entry](#start-t-pot) - * You can also run `$ docker compose -f //tpotce/preview/docker-compose.yml down -v` directly if you want to avoid to change into the `preview` folder or add an alias of your choice. - -# Uninstall T-Pot -1. Change into the **tpotce/preview/uninstaller/** folder: `$ cd tpotce/preview/uninstaller/` -2. Locate your distribution, i.e. `fedora`: `$ cd fedora` -3. Run the installer as non-root: `$ ./uninstall.sh`: - * The uninstaller will reverse the installation steps -4. Follow the uninstaller instructions, you will have to enter your password at least once -5. Check the uninstaller messages for errors -6. Reboot: `$ sudo reboot` -

- -# Feedback -To ensure the next T-Pot release will be everything we and you - The T-Pot Community - have in mind please feel free to leave comments in the `Technical Preview` [discussion](https://github.com/telekom-security/tpotce/discussions/1325) pinned on our GitHub [Discussions](https://github.com/telekom-security/tpotce/discussions) section. Please bear in mind that this Technical Preview is made public in the earliest stage of the T-Pot development process at your convenience for ***your*** valuable input. -

-Thank you for testing πŸ’– - -Special thanks to all the [contributors](https://github.com/telekom-security/tpotce/graphs/contributors) and [developers](https://github.com/telekom-security/tpotce#credits) making this project possible! diff --git a/preview/compose/README b/preview/compose/README deleted file mode 100644 index 4dd3a21a..00000000 --- a/preview/compose/README +++ /dev/null @@ -1,9 +0,0 @@ -This folder contains docker-compose.yml files, basically referring to installation types. - -Just copy the .yml file you want to use over the on in the parent folder, but unload docker compose first: -> $ docker compose down -v -> $ cd compose -> $ cp standard.yml ../docker-compose.yml - -For Docker Desktop on macOS and Windows machines is only one .yml available "mac_win.yml" which is a stripped down -version of T-Pot able to run with the constraints of Docker Desktop. diff --git a/preview/docker/Dockerfile b/preview/docker/Dockerfile deleted file mode 100644 index 93af7b17..00000000 --- a/preview/docker/Dockerfile +++ /dev/null @@ -1,61 +0,0 @@ -FROM alpine:edge -# -# Include dist -COPY dist/ /root/dist/ -# -# Get and install dependencies & packages -RUN apk --no-cache -U add \ - aria2 \ - apache2-utils \ - bash \ - bind-tools \ - conntrack-tools \ - curl \ - ethtool \ - figlet \ - git \ - grep \ - iproute2 \ - iptables \ - jq \ - logrotate \ - lsblk \ - net-tools \ - openssl \ - pigz \ - tar \ - uuidgen && \ - apk --no-cache -U add --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community \ - yq && \ -# -# Setup user - addgroup -g 2000 tpot && \ - adduser -S -s /bin/ash -u 2000 -D -g 2000 tpot && \ -# -# Install tpot - git clone --depth=1 https://github.com/telekom-security/tpotce /opt/tpot && \ - cd /opt/tpot && \ - sed -i "s#/opt/tpot/etc/logrotate/status#/data/tpot/etc/logrotate/status#g" bin/clean.sh && \ - sed -i "s#/opt/tpot/etc/compose/elk_environment#/data/tpot/etc/compose/elk_environment#g" bin/clean.sh && \ - sed -i "s#/usr/sbin/iptables-legacy#/sbin/iptables-legacy#g" bin/rules.sh && \ - sed -i "s/tr -d '\", '/tr -d '\", ,#,-'/g" bin/rules.sh && \ - sed -i "s#/opt/tpot/etc/compose/elk_environment#/data/tpot/etc/compose/elk_environment#g" bin/updateip.sh && \ - sed -i "s#.*myLOCALIP=.*#myLOCALIP=\$(/sbin/ip address show | awk '/inet .*brd/{split(\$2,a,\"/\"); print a[1]; exit}')#" bin/updateip.sh && \ - sed -i "s#.*myUUID=.*#myUUID=\$(cat /data/uuid)#" bin/updateip.sh && \ - sed -i "s#/etc/issue#/tmp/etc/issue#g" bin/updateip.sh && \ - sed -i "/toilet/d" bin/updateip.sh && \ - sed -i "/source \/etc\/environment/d" bin/updateip.sh && \ - touch /opt/tpot/etc/tpot.yml && \ - cp /root/dist/entrypoint.sh . && \ -# -# Clean up - apk del --purge git && \ - rm -rf /root/* /tmp/* && \ - rm -rf /root/.cache /opt/tpot/.git && \ - rm -rf /var/cache/apk/* -# -# Run tpotinit -WORKDIR /opt/tpot -HEALTHCHECK --retries=1000 --interval=5s CMD test -f /tmp/success || exit 1 -STOPSIGNAL SIGKILL -CMD ["/opt/tpot/entrypoint.sh"] diff --git a/preview/docker/dist/entrypoint.sh b/preview/docker/dist/entrypoint.sh deleted file mode 100755 index 8a67e0fd..00000000 --- a/preview/docker/dist/entrypoint.sh +++ /dev/null @@ -1,168 +0,0 @@ -#!/bin/bash - -VERSION="T-Pot $(cat /opt/tpot/version)" -COMPOSE="/tmp/tpot/docker-compose.yml" - -# Check for compatible OSType -echo -echo "# Checking if OSType is compatible." -echo -myOSTYPE=$(uname -a | grep -Eo "linuxkit") -if [ "${myOSTYPE}" == "linuxkit" ] && [ "${TPOT_OSTYPE}" == "linux" ]; - then - echo "# Docker Desktop for macOS or Windows detected." - echo "# 1. You need to adjust the OSType in the hidden \".env\" file." - echo "# 2. You need to use the macos or win docker compose file." - echo - echo "# Aborting." - echo - exit 1 -fi - -# Data folder management -if [ -f "/data/uuid" ]; - then - figlet "Initializing ..." - figlet "${VERSION}" - echo - echo "# Data folder is present, just cleaning up, please be patient ..." - echo - /opt/tpot/bin/clean.sh on - echo - else - figlet "Setting up ..." - figlet "${VERSION}" - echo - echo "# Checking for default user." - if [ "${WEB_USER}" == "changeme" ] || [ "${WEB_PW}" == "changeme" ]; - then - echo "# Please change WEB_USER and WEB_PW in the hidden \".env\" file." - echo "# Aborting." - echo - exit 1 - fi - echo - echo "# Setting up data folder structure ..." - echo - mkdir -vp /data/ews/conf \ - /data/nginx/{cert,conf,log} \ - /data/tpot/etc/compose/ \ - /data/tpot/etc/logrotate/ \ - /tmp/etc/ - echo - echo "# Generating self signed certificate ..." - echo - myINTIP=$(/sbin/ip address show | awk '/inet .*brd/{split($2,a,"/"); print a[1]; exit}') - openssl req \ - -nodes \ - -x509 \ - -sha512 \ - -newkey rsa:8192 \ - -keyout "/data/nginx/cert/nginx.key" \ - -out "/data/nginx/cert/nginx.crt" \ - -days 3650 \ - -subj '/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd' \ - -addext "subjectAltName = IP:${myINTIP}" - echo - echo "# Creating web user from tpot.env, make sure to erase the password from the .env ..." - echo - htpasswd -b -c /data/nginx/conf/nginxpasswd "${WEB_USER}" "${WEB_PW}" - echo - echo "# Extracting objects, final touches and permissions ..." - echo - tar xvfz /opt/tpot/etc/objects/elkbase.tgz -C / - /opt/tpot/bin/clean.sh off - uuidgen > /data/uuid -fi - -# Check if TPOT_BLACKHOLE is enabled -if [ "${myOSTYPE}" == "linuxkit" ]; - then - echo - echo "# Docker Desktop for macOS or Windows detected, Blackhole feature is not supported." - echo - else - if [ "${TPOT_BLACKHOLE}" == "ENABLED" ] && [ ! -f "/etc/blackhole/mass_scanner.txt" ]; - then - echo "# Adding Blackhole routes." - /opt/tpot/bin/blackhole.sh add - echo - fi - if [ "${TPOT_BLACKHOLE}" == "DISABLED" ] && [ -f "/etc/blackhole/mass_scanner.txt" ]; - then - echo "# Removing Blackhole routes." - /opt/tpot/bin/blackhole.sh del - echo - else - echo "# Blackhole is not active." - fi -fi - -# Get IP -echo -echo "# Updating IP Info ..." -echo -/opt/tpot/bin/updateip.sh - -# Update permissions -echo -echo "# Updating permissions ..." -echo -chown -R tpot:tpot /data -chmod -R 777 /data -#chmod 644 -R /data/nginx/conf -#chmod 644 -R /data/nginx/cert - -# Update interface settings (p0f and Suricata) and setup iptables to support NFQ based honeypots (glutton, honeytrap) -### This is currently not supported on Docker for Desktop, only on Docker Engine for Linux -if [ "${myOSTYPE}" != "linuxkit" ] && [ "${TPOT_OSTYPE}" == "linux" ]; - then - echo - echo "# Get IF, disable offloading, enable promiscious mode for p0f and suricata ..." - echo - ethtool --offload $(/sbin/ip address | grep "^2: " | awk '{ print $2 }' | tr -d [:punct:]) rx off tx off - ethtool -K $(/sbin/ip address | grep "^2: " | awk '{ print $2 }' | tr -d [:punct:]) gso off gro off - ip link set $(/sbin/ip address | grep "^2: " | awk '{ print $2 }' | tr -d [:punct:]) promisc on - echo - echo "# Adding firewall rules ..." - echo - /opt/tpot/bin/rules.sh ${COMPOSE} set -fi - -# Display open ports -if [ "${myOSTYPE}" != "linuxkit" ]; - then - echo - echo "# This is a list of open ports on the host (netstat -tulpen)." - echo "# Make sure there are no conflicting ports by checking the docker compose file." - echo "# Conflicting ports will prevent the startup of T-Pot." - echo - netstat -tulpen | grep -Eo ':([0-9]+)' | cut -d ":" -f 2 | uniq - echo - else - echo - echo "# Docker Desktop for macOS or Windows detected, cannot show open ports on the host." - echo -fi - - -# Done -echo -figlet "Starting ..." -figlet "${VERSION}" -echo -touch /tmp/success - -# We want to see true source for UDP packets in container (https://github.com/moby/libnetwork/issues/1994) -if [ "${myOSTYPE}" != "linuxkit" ]; - then - sleep 60 - /usr/sbin/conntrack -D -p udp - else - echo - echo "# Docker Desktop for macOS or Windows detected, Conntrack feature is not supported." - echo -fi - -# Keep the container running ... -sleep infinity diff --git a/preview/docker/docker-compose.yml b/preview/docker/docker-compose.yml deleted file mode 100644 index 2def27a6..00000000 --- a/preview/docker/docker-compose.yml +++ /dev/null @@ -1,15 +0,0 @@ -version: '3.9' - -services: - -# T-Pot Init Service - tpotinit: - build: . - container_name: tpotinit - restart: "no" - image: "dtagdevsec/tpotinit:2204" -# volumes: -# - /var/run/docker.sock:/var/run/docker.sock:ro - network_mode: "host" - cap_add: - - NET_ADMIN diff --git a/preview/env.example b/preview/env.example deleted file mode 100644 index f11f60cc..00000000 --- a/preview/env.example +++ /dev/null @@ -1,52 +0,0 @@ -# T-Pot Light config file. Do not remove. - -# Set Web username and password here, only required for first run -# Removing the password after first run is recommended -# You can always add or remove users as you see fit using htpasswd: -# htpasswd -b -c //nginx/conf/nginxpasswd -WEB_USER=changeme -WEB_PW=changeme - -# T-Pot Blackhole -# ENABLED: T-Pot will download a db of known mass scanners and nullroute them -# Be aware, this will put T-Pot off the map for stealth reasons and -# you will get less traffic. Routes will active until reboot and will -# be re-added with every T-Pot start until disabled. -# DISABLED: This is the default and no stealth efforts are in place. -TPOT_BLACKHOLE=DISABLED - -################################################################################### -# NEVER MAKE CHANGES TO THIS SECTION UNLESS YOU REALLY KNOW WHAT YOU ARE DOING!!! # -################################################################################### - -# T-Pot Landing page provides Cockpit Link -COCKPIT=false - -# docker.sock Path -TPOT_DOCKER_SOCK=/var/run/docker.sock - -# docker compose .env -TPOT_DOCKER_ENV=./.env - -# Docker-Compose file -TPOT_DOCKER_COMPOSE=./docker-compose.yml - -# T-Pot Repo -TPOT_REPO=dtagdevsec - -# T-Pot Version Tag -TPOT_VERSION=2204 - -# T-Pot Pull Policy -# always: (T-Pot default) Compose implementations SHOULD always pull the image from the registry. -# never: Compose implementations SHOULD NOT pull the image from a registry and SHOULD rely on the platform cached image. -# missing: Compose implementations SHOULD pull the image only if it's not available in the platform cache. -# build: Compose implementations SHOULD build the image. Compose implementations SHOULD rebuild the image if already present. -TPOT_PULL_POLICY=always - -# T-Pot Data Path -TPOT_DATA_PATH=./data - -# OSType (linux, mac, win) -# Most docker features are available on linux -TPOT_OSTYPE=linux diff --git a/preview/installer/debian/install.sh b/preview/installer/debian/install.sh deleted file mode 100755 index 821e4b4d..00000000 --- a/preview/installer/debian/install.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/bash - -# Needs to run as non-root -myWHOAMI=$(whoami) -if [ "$myWHOAMI" == "root" ] - then - echo "Need to run as user ..." - exit -fi - -# Check if running on Debian -if ! grep -q 'ID=debian' /etc/os-release; then - echo "This script is designed to run on Debian. Aborting." - exit 1 -fi - -if [ -f /var/log/debian-install-lock ]; then - echo "Error: The installer has already been run on this system. If you wish to run it again, please run the uninstall.sh first." - exit 1 -fi - -# Create installer lock file -sudo touch /var/log/debian-install-lock - -# Update SSH config -echo "Updating SSH config..." -sudo bash -c 'echo "Port 64295" >> /etc/ssh/sshd_config' - -# Install recommended packages -echo "Installing recommended packages..." -sudo apt-get -y update -sudo apt-get -y install bash-completion git grc neovim net-tools - -# Remove old Docker -echo "Removing old docker packages..." -sudo apt-get -y remove docker docker-engine docker.io containerd runc - -# Add Docker to repositories, install latest docker -echo "Adding Docker to repositories and installing..." -sudo apt-get -y update -sudo apt-get -y install ca-certificates curl gnupg -sudo install -m 0755 -d /etc/apt/keyrings -curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg -sudo chmod a+r /etc/apt/keyrings/docker.gpg -echo \ - "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ - "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ - sudo tee /etc/apt/sources.list.d/docker.list > /dev/null -sudo apt-get -y update -sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -sudo systemctl enable docker -sudo systemctl stop docker -sudo systemctl start docker - -# Add user to Docker group -echo "Adding user to Docker group..." -sudo usermod -aG docker $(whoami) - -# Add aliases -echo "Adding aliases..." -echo "alias dps='grc docker ps -a'" >> ~/.bashrc -echo "alias dpsw='watch -c \"grc --colour=on docker ps -a\"'" >> ~/.bashrc - -# Show running services -sudo grc netstat -tulpen -echo "Please review for possible honeypot port conflicts." -echo "While SSH is taken care of, other services such as" -echo "SMTP, HTTP, etc. might prevent T-Pot from starting." - -echo "Done. Please reboot and re-connect via SSH on tcp/64295." - diff --git a/preview/installer/debian/sudo-install.sh b/preview/installer/debian/sudo-install.sh deleted file mode 100755 index 86fcfa80..00000000 --- a/preview/installer/debian/sudo-install.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -if ! command -v sudo &> /dev/null -then - echo "sudo is not installed. Installing now..." - su -c "apt-get -y update && apt-get -y install sudo" - su -c "/usr/sbin/usermod -aG sudo $(whoami)" -else - echo "sudo is already installed." -fi diff --git a/preview/installer/debian/uninstall.sh b/preview/installer/debian/uninstall.sh deleted file mode 100755 index 323a8d40..00000000 --- a/preview/installer/debian/uninstall.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash - -# Needs to run as non-root -myWHOAMI=$(whoami) -if [ "$myWHOAMI" == "root" ] - then - echo "Need to run as user ..." - exit -fi - -# Check if running on Debian -if ! grep -q 'ID=debian' /etc/os-release; then - echo "This script is designed to run on Debian. Aborting." - exit 1 -fi - -# Check if installer lock file exists -if [ ! -f /var/log/debian-install-lock ]; then - echo "Error: The installer has not been run on this system. Aborting." - exit 1 -fi - -# Remove SSH config changes -echo "Removing SSH config changes..." -sudo sed -i '/Port 64295/d' /etc/ssh/sshd_config - -# Uninstall Docker -echo "Stopping and removing all containers ..." -docker stop $(docker ps -aq) -docker rm $(docker ps -aq) -echo "Uninstalling Docker..." -sudo systemctl stop docker -sudo systemctl disable docker -sudo apt-get -y remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -sudo apt-get -y autoremove -sudo rm -rf /etc/apt/sources.list.d/docker.list -sudo rm -rf /etc/apt/keyrings/docker.gpg - -# Remove user from Docker group -echo "Removing user from Docker group..." -sudo deluser $(whoami) docker - -# Remove aliases -echo "Removing aliases..." -sed -i '/alias dps=/d' ~/.bashrc -sed -i '/alias dpsw=/d' ~/.bashrc - -# Remove installer lock file -sudo rm -f /var/log/debian-install-lock - -echo "Done. Please reboot and re-connect via SSH on tcp/22" - diff --git a/preview/installer/fedora/install.sh b/preview/installer/fedora/install.sh deleted file mode 100755 index 6226077a..00000000 --- a/preview/installer/fedora/install.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash - -# Needs to run as non-root -myWHOAMI=$(whoami) -if [ "$myWHOAMI" == "root" ] - then - echo "Need to run as user ..." - exit -fi - -# Check if running on Fedora -if ! grep -q 'ID=fedora' /etc/os-release; then - echo "This script is designed to run on Fedora. Aborting." - exit 1 -fi - -if [ -f /var/log/fedora-install-lock ]; then - echo "Error: The installer has already been run on this system. If you wish to run it again, please run the uninstall.sh first." - exit 1 -fi - -# Create installer lock file -sudo touch /var/log/fedora-install-lock - -# Update SSH config -echo "Updating SSH config..." -sudo bash -c 'echo "Port 64295" >> /etc/ssh/sshd_config' - -# Update DNS config -echo "Updating DNS config..." -sudo bash -c "sed -i 's/^.*DNSStubListener=.*/DNSStubListener=no/' /etc/systemd/resolved.conf" -sudo systemctl restart systemd-resolved.service - -# Update SELinux config -echo "Updating SELinux config..." -sudo sed -i s/SELINUX=enforcing/SELINUX=permissive/g /etc/selinux/config - -# Update Firewall rules -echo "Updating Firewall rules..." -sudo firewall-cmd --permanent --add-port=64295/tcp -sudo firewall-cmd --permanent --zone=public --set-target=ACCEPT -#sudo firewall-cmd --reload -sudo firewall-cmd --list-all - -# Load kernel modules -echo "Loading kernel modules..." -sudo modprobe -v iptable_filter -echo "iptable_filter" | sudo tee /etc/modules-load.d/iptables.conf - -# Add Docker to repositories, install latest docker -echo "Adding Docker to repositories and installing..." -sudo dnf -y update -sudo dnf -y install dnf-plugins-core -sudo dnf -y config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo -sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -sudo systemctl enable docker -sudo systemctl start docker - -# Install recommended packages -echo "Installing recommended packages..." -sudo dnf -y install bash-completion git grc net-tools - -# Add user to Docker group -echo "Adding user to Docker group..." -sudo usermod -aG docker $(whoami) - -# Add aliases -echo "Adding aliases..." -echo "alias dps='grc docker ps -a'" >> ~/.bashrc -echo "alias dpsw='watch -c \"grc --colour=on docker ps -a\"'" >> ~/.bashrc - -# Show running services -sudo grc netstat -tulpen -echo "Please review for possible honeypot port conflicts." -echo "While SSH is taken care of, other services such as" -echo "SMTP, HTTP, etc. might prevent T-Pot from starting." - -echo "Done. Please reboot and re-connect via SSH on tcp/64295." - diff --git a/preview/installer/fedora/uninstall.sh b/preview/installer/fedora/uninstall.sh deleted file mode 100755 index 2b0f2f38..00000000 --- a/preview/installer/fedora/uninstall.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/bash - -# Needs to run as non-root -myWHOAMI=$(whoami) -if [ "$myWHOAMI" == "root" ] - then - echo "Need to run as user ..." - exit -fi - -# Check if running on Fedora -if ! grep -q 'ID=fedora' /etc/os-release; then - echo "This script is designed to run on Fedora. Aborting." - exit 1 -fi - -if [ ! -f /var/log/fedora-install-lock ]; then - echo "Error: The installer has not been run on this system. Aborting uninstallation." - exit 1 -fi - -# Remove SSH config changes -echo "Removing SSH config changes..." -sudo sed -i '/Port 64295/d' /etc/ssh/sshd_config - -# Remove DNS config changes -echo "Updating DNS config..." -sudo bash -c "sed -i 's/^.*DNSStubListener=.*/#DNSStubListener=yes/' /etc/systemd/resolved.conf" -sudo systemctl restart systemd-resolved.service - -# Restore SELinux config -echo "Restoring SELinux config..." -sudo sed -i s/SELINUX=permissive/SELINUX=enforcing/g /etc/selinux/config - -# Remove Firewall rules -echo "Removing Firewall rules..." -sudo firewall-cmd --permanent --remove-port=64295/tcp -sudo firewall-cmd --permanent --zone=public --set-target=default -#sudo firewall-cmd --reload -sudo firewall-cmd --list-all - -# Unload kernel modules -echo "Unloading kernel modules..." -sudo modprobe -rv iptable_filter -sudo rm /etc/modules-load.d/iptables.conf - -# Uninstall Docker -echo "Stopping and removing all containers ..." -docker stop $(docker ps -aq) -docker rm $(docker ps -aq) -echo "Uninstalling Docker..." -sudo systemctl stop docker -sudo systemctl disable docker -sudo dnf -y remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -sudo dnf config-manager --disable docker-ce-stable -sudo rm /etc/yum.repos.d/docker-ce.repo - -# Remove user from Docker group -echo "Removing user from Docker group..." -sudo gpasswd -d $(whoami) docker - -# Remove aliases -echo "Removing aliases..." -sed -i '/alias dps=/d' ~/.bashrc -sed -i '/alias dpsw=/d' ~/.bashrc - -# Remove installer lock file -sudo rm /var/log/fedora-install-lock - -echo "Done. Please reboot and re-connect via SSH on tcp/22" - diff --git a/preview/installer/suse/install.sh b/preview/installer/suse/install.sh deleted file mode 100755 index 5096d32f..00000000 --- a/preview/installer/suse/install.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash - -# Needs to run as non-root -myWHOAMI=$(whoami) -if [ "$myWHOAMI" == "root" ] - then - echo "Need to run as user ..." - exit -fi - -# Check if running on OpenSuse Tumbleweed -if ! grep -q 'ID="opensuse-tumbleweed"' /etc/os-release; then - echo "This script is designed to run on OpenSuse Tumbleweed. Aborting." - exit 1 -fi - -if [ -f /var/log/suse-install-lock ]; then - echo "Error: The installer has already been run on this system. If you wish to run it again, please run the uninstall.sh first." - exit 1 -fi - -# Create installer lock file -sudo touch /var/log/suse-install-lock - -# Update SSH config -echo "Updating SSH config..." -sudo bash -c 'echo "Port 64295" >> /etc/ssh/sshd_config.d/port.conf' - -# Update Firewall rules -echo "Updating Firewall rules..." -sudo firewall-cmd --permanent --add-port=64295/tcp -sudo firewall-cmd --permanent --zone=public --set-target=ACCEPT -#sudo firewall-cmd --reload -sudo firewall-cmd --list-all - -# Install docker and recommended packages -echo "Installing recommended packages..." -sudo zypper -n update -sudo zypper -n remove cups net-tools postfix yast2-auth-client yast2-auth-server -sudo zypper -n install bash-completion docker docker-compose git grc busybox-net-tools - -# Enable and start docker -echo "Enabling and starting docker..." -systemctl enable docker -systemctl start docker - -# Add user to Docker group -echo "Adding user to Docker group..." -sudo usermod -aG docker $(whoami) - -# Add aliases -echo "Adding aliases..." -echo "alias dps='grc docker ps -a'" >> ~/.bashrc -echo "alias dpsw='watch -c \"grc --colour=on docker ps -a\"'" >> ~/.bashrc - -# Show running services -sudo grc netstat -tulpen -echo "Please review for possible honeypot port conflicts." -echo "While SSH is taken care of, other services such as" -echo "SMTP, HTTP, etc. might prevent T-Pot from starting." - -echo "Done. Please reboot and re-connect via SSH on tcp/64295." - diff --git a/preview/installer/suse/uninstall.sh b/preview/installer/suse/uninstall.sh deleted file mode 100755 index 632e44d2..00000000 --- a/preview/installer/suse/uninstall.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash - -# Needs to run as non-root -myWHOAMI=$(whoami) -if [ "$myWHOAMI" == "root" ] - then - echo "Need to run as user ..." - exit -fi - -# Check if running on OpenSuse Tumbleweed -if ! grep -q 'ID="opensuse-tumbleweed"' /etc/os-release; then - echo "This script is designed to run on OpenSuse Tumbleweed. Aborting." - exit 1 -fi - -if [ ! -f /var/log/suse-install-lock ]; then - echo "Error: The installer has not been run on this system. Aborting uninstallation." - exit 1 -fi - -# Remove SSH config changes -echo "Removing SSH config changes..." -sudo sed -i '/Port 64295/d' /etc/ssh/sshd_config.d/port.conf - -# Remove Firewall rules -echo "Removing Firewall rules..." -sudo firewall-cmd --permanent --remove-port=64295/tcp -sudo firewall-cmd --permanent --zone=public --set-target=default -#sudo firewall-cmd --reload -sudo firewall-cmd --list-all - -# Uninstall Docker -echo "Stopping and removing all containers ..." -docker stop $(docker ps -aq) -docker rm $(docker ps -aq) -echo "Uninstalling Docker..." -sudo systemctl stop docker -sudo systemctl disable docker -sudo zypper -n remove docker docker-compose -sudo zypper -n install cups postfix - -# Remove user from Docker group -echo "Removing user from Docker group..." -sudo gpasswd -d $(whoami) docker - -# Remove aliases -echo "Removing aliases..." -sed -i '/alias dps=/d' ~/.bashrc -sed -i '/alias dpsw=/d' ~/.bashrc - -# Remove installer lock file -sudo rm /var/log/suse-install-lock - -echo "Done. Please reboot and re-connect via SSH on tcp/22" - diff --git a/preview/installer/ubuntu/install.sh b/preview/installer/ubuntu/install.sh deleted file mode 100755 index 876526f8..00000000 --- a/preview/installer/ubuntu/install.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash - -# Needs to run as non-root -myWHOAMI=$(whoami) -if [ "$myWHOAMI" == "root" ] - then - echo "Need to run as user ..." - exit -fi - -# Check if running on Ubuntu -if ! grep -q 'ID=ubuntu' /etc/os-release; then - echo "This script is designed to run on Ubuntu. Aborting." - exit 1 -fi - -if [ -f /var/log/ubuntu-install-lock ]; then - echo "Error: The installer has already been run on this system. If you wish to run it again, please run the uninstall.sh first." - exit 1 -fi - -# Create installer lock file -sudo touch /var/log/ubuntu-install-lock - -# Update SSH config -echo "Updating SSH config..." -sudo bash -c 'echo "Port 64295" >> /etc/ssh/sshd_config' -sudo systemctl disable ssh.socket -sudo rm /etc/systemd/system/ssh.service.d/00-socket.conf -sudo systemctl enable ssh.service - -# Update DNS config -echo "Updating DNS config..." -sudo bash -c "sed -i 's/^.*DNSStubListener=.*/DNSStubListener=no/' /etc/systemd/resolved.conf" -sudo systemctl restart systemd-resolved.service - -# Install recommended packages -echo "Installing recommended packages..." -sudo apt-get -y update -sudo apt-get -y install bash-completion git grc net-tools vim - -# Remove old Docker -echo "Removing old docker packages..." -sudo apt-get -y remove docker docker-engine docker.io containerd runc - -# Add Docker to repositories, install latest docker -echo "Adding Docker to repositories and installing..." -sudo apt-get -y update -sudo apt-get -y install ca-certificates curl gnupg -sudo install -m 0755 -d /etc/apt/keyrings -curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg -sudo chmod a+r /etc/apt/keyrings/docker.gpg -echo \ - "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ - "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ - sudo tee /etc/apt/sources.list.d/docker.list > /dev/null -sudo apt-get -y update -sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -sudo systemctl enable docker -sudo systemctl stop docker -sudo systemctl start docker - -# Add user to Docker group -echo "Adding user to Docker group..." -sudo usermod -aG docker $(whoami) - -# Add aliases -echo "Adding aliases..." -echo "alias dps='grc docker ps -a'" >> ~/.bashrc -echo "alias dpsw='watch -c \"grc --colour=on docker ps -a\"'" >> ~/.bashrc - -# Show running services -sudo grc netstat -tulpen -echo "Please review for possible honeypot port conflicts." -echo "While SSH is taken care of, other services such as" -echo "SMTP, HTTP, etc. might prevent T-Pot from starting." - -echo "Done. Please reboot and re-connect via SSH on tcp/64295." - diff --git a/preview/installer/ubuntu/uninstall.sh b/preview/installer/ubuntu/uninstall.sh deleted file mode 100755 index fd5995cf..00000000 --- a/preview/installer/ubuntu/uninstall.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash - -# Needs to run as non-root -myWHOAMI=$(whoami) -if [ "$myWHOAMI" == "root" ] - then - echo "Need to run as user ..." - exit -fi - -# Check if running on Ubuntu -if ! grep -q 'ID=ubuntu' /etc/os-release; then - echo "This script is designed to run on Ubuntu. Aborting." - exit 1 -fi - -# Check if installer lock file exists -if [ ! -f /var/log/ubuntu-install-lock ]; then - echo "Error: The installer has not been run on this system. Aborting." - exit 1 -fi - -# Remove SSH config changes -echo "Removing SSH config changes..." -sudo sed -i '/Port 64295/d' /etc/ssh/sshd_config -sudo systemctl disable ssh.service -sudo systemctl enable ssh.socket - -# Remove DNS config changes -echo "Updating DNS config..." -sudo bash -c "sed -i 's/^.*DNSStubListener=.*/#DNSStubListener=yes/' /etc/systemd/resolved.conf" -sudo systemctl restart systemd-resolved.service - -# Uninstall Docker -echo "Stopping and removing all containers ..." -docker stop $(docker ps -aq) -docker rm $(docker ps -aq) -echo "Uninstalling Docker..." -sudo systemctl stop docker -sudo systemctl disable docker -sudo apt-get -y remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -sudo apt-get -y autoremove -sudo rm -rf /etc/apt/sources.list.d/docker.list -sudo rm -rf /etc/apt/keyrings/docker.gpg - -# Remove user from Docker group -echo "Removing user from Docker group..." -sudo deluser $(whoami) docker - -# Remove aliases -echo "Removing aliases..." -sed -i '/alias dps=/d' ~/.bashrc -sed -i '/alias dpsw=/d' ~/.bashrc - -# Remove installer lock file -sudo rm -f /var/log/ubuntu-install-lock - -echo "Done. Please reboot and re-connect via SSH on tcp/22" - diff --git a/bin/setup_builder.sh b/tools/setup_builder.sh similarity index 77% rename from bin/setup_builder.sh rename to tools/setup_builder.sh index 93aac477..30ffc737 100755 --- a/bin/setup_builder.sh +++ b/tools/setup_builder.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Got root? myWHOAMI=$(whoami) @@ -11,20 +11,13 @@ fi # Only run with command switch if [ "$1" != "-y" ]; then echo "### Setting up docker for Multi Arch Builds." + echo "### Requires Docker packages from https://get.docker.com/" echo "### Use on x64 only!" - echo "### Run with -y to install!" + echo "### Run with -y if you fit the requirements!" echo exit fi -# Main -mkdir -p /root/.docker/cli-plugins/ -cd /root/.docker/cli-plugins/ -wget https://github.com/docker/buildx/releases/download/v0.10.0/buildx-v0.10.0.linux-amd64 -O docker-buildx -chmod +x docker-buildx - -docker buildx ls - # We need to create a new builder as the default one cannot handle multi-arch builds # https://docs.docker.com/desktop/multi-arch/ docker buildx create --name mybuilder diff --git a/uninstall.sh b/uninstall.sh new file mode 100755 index 00000000..f1f9f00f --- /dev/null +++ b/uninstall.sh @@ -0,0 +1,102 @@ +#!/usr/bin/env bash + +myUNINSTALL_NOTIFICATION="### Now installing required packages ..." +myUSER=$(whoami) +myTPOT_CONF_FILE="/home/${myUSER}/tpotce/.env" +myANSIBLE_TPOT_PLAYBOOK="installer/remove/tpot.yml" + +myUNINSTALLER=$(cat << "EOF" + _____ ____ _ _ _ _ _ _ _ +|_ _| | _ \ ___ | |_ | | | |_ __ (_)_ __ ___| |_ __ _| | | ___ _ __ + | |_____| |_) / _ \| __| | | | | _ \| | _ \/ __| __/ _ | | |/ _ \ __| + | |_____| __/ (_) | |_ | |_| | | | | | | | \__ \ || (_| | | | __/ | + |_| |_| \___/ \__| \___/|_| |_|_|_| |_|___/\__\__,_|_|_|\___|_| +EOF +) + +# Check if running with root privileges +if [ ${EUID} -eq 0 ]; + then + echo "This script should not be run as root. Please run it as a regular user." + echo + exit 1 +fi + +# Check if running on a supported distribution +mySUPPORTED_DISTRIBUTIONS=("AlmaLinux" "Debian GNU/Linux" "Fedora Linux" "openSUSE Tumbleweed" "Raspbian GNU/Linux" "Rocky Linux" "Ubuntu") +myCURRENT_DISTRIBUTION=$(awk -F= '/^NAME/{print $2}' /etc/os-release | tr -d '"') + +if [[ ! " ${mySUPPORTED_DISTRIBUTIONS[@]} " =~ " ${myCURRENT_DISTRIBUTION} " ]]; + then + echo "### Only the following distributions are supported: AlmaLinux, Fedora, Debian, openSUSE Tumbleweed, Rocky Linux and Ubuntu." + echo "### Please follow the T-Pot documentation on how to run T-Pot on macOS, Windows and other currently unsupported platforms." + echo + exit 1 +fi + +# Begin of Uninstaller +echo "$myUNINSTALLER" +echo +echo +echo "### This script will now uninstall T-Pot." +while [ "${myQST}" != "y" ] && [ "${myQST}" != "n" ]; + do + echo + read -p "### Uninstall? (y/n) " myQST + echo + done +if [ "${myQST}" = "n" ]; + then + echo + echo "### Aborting!" + echo + exit 0 +fi + +# Define tag for Ansible +myANSIBLE_DISTRIBUTIONS=("Fedora Linux" "Debian GNU/Linux" "Raspbian GNU/Linux" "Rocky Linux") +if [[ "${myANSIBLE_DISTRIBUTIONS[@]}" =~ "${myCURRENT_DISTRIBUTION}" ]]; + then + myANSIBLE_TAG=$(echo ${myCURRENT_DISTRIBUTION} | cut -d " " -f 1) + else + myANSIBLE_TAG=${myCURRENT_DISTRIBUTION} +fi + +# Check type of sudo access +sudo -n true > /dev/null 2>&1 +if [ $? -eq 1 ]; + then + myANSIBLE_BECOME_OPTION="--ask-become-pass" + echo "### β€˜sudoβ€˜ not acquired, setting ansible become option to ${myANSIBLE_BECOME_OPTION}." + echo "### Ansible will ask for the β€˜BECOME passwordβ€˜ which is typically the password you ’sudo’ with." + echo + else + myANSIBLE_BECOME_OPTION="--become" + echo "### β€˜sudoβ€˜ acquired, setting ansible become option to ${myANSIBLE_BECOME_OPTION}." + echo +fi + +# Run Ansible Playbook +echo "### Now running T-Pot Ansible Uninstallation Playbook ..." +echo +rm ${HOME}/uninstall_tpot.log > /dev/null 2>&1 +ANSIBLE_LOG_PATH=${HOME}/uninstall_tpot.log ansible-playbook ${myANSIBLE_TPOT_PLAYBOOK} -i 127.0.0.1, -c local --tags "${myANSIBLE_TAG}" ${myANSIBLE_BECOME_OPTION} + +# Something went wrong +if [ ! $? -eq 0 ]; + then + echo "### Something went wrong with the Playbook, please review the output and / or uninstall_tpot.log for clues." + echo "### Aborting." + echo + exit 1 + else + echo "### Playbook was successful." + echo "### Now removing ${HOME}/tpotce." + sudo rm -rf ${HOME}/tpotce + rm -rf ${HOME}/tpot.yml + echo +fi + +# Done +echo "### Done. Please reboot and re-connect via SSH on tcp/22." +echo diff --git a/update.sh b/update.sh index 877d38fd..46888c4c 100755 --- a/update.sh +++ b/update.sh @@ -1,392 +1,218 @@ #!/bin/bash # Some global vars -myCONFIGFILE="/opt/tpot/etc/tpot.yml" -myCOMPOSEPATH="/opt/tpot/etc/compose" -myLSB_RELEASE=("bullseye" "bookworm") +myCOMPOSEFILE="~/tpotce/docker-compose.yml" +myDATE=$(date +%Y%m%d%H%M) myRED="" myGREEN="" myWHITE="" myBLUE="" -# Check for existing tpot.yml -function fuCONFIGCHECK () { - echo - echo "### Checking for T-Pot configuration file ..." - if ! [ -L $myCONFIGFILE ]; - then - echo -n "###### $myBLUE$myCONFIGFILE$myWHITE " - myFILE=$(head -n 1 $myCONFIGFILE | tr -d "()" | tr [:upper:] [:lower:] | awk '{ print $3 }') - myFILE+=".yml" - echo "[ $myRED""NOT OK""$myWHITE ] - Broken symlink, trying to reset to '$myFILE'." - rm -rf $myCONFIGFILE - ln -s $myCOMPOSEPATH/$myFILE $myCONFIGFILE - fi - if [ -L $myCONFIGFILE ]; - then - echo "###### $myBLUE$myCONFIGFILE$myWHITE [ $myGREEN""OK""$myWHITE ]" - else - echo "[ $myRED""NOT OK""$myWHITE ] - Broken symlink and / or restore failed." - echo "Please create a link to your desired config i.e. 'ln -s /opt/tpot/etc/compose/standard.yml /opt/tpot/etc/tpot.yml'." - exit - fi -echo -} +myUPDATER=$(cat << "EOF" + _____ ____ _ _ _ _ _ +|_ _| | _ \ ___ | |_ | | | |_ __ __| | __ _| |_ ___ _ __ + | |_____| |_) / _ \| __| | | | | '_ \ / _` |/ _` | __/ _ \ '__| + | |_____| __/ (_) | |_ | |_| | |_) | (_| | (_| | || __/ | + |_| |_| \___/ \__| \___/| .__/ \__,_|\__,_|\__\___|_| + |_| +EOF +) + +# Check if running with root privileges +if [ ${EUID} -eq 0 ]; + then + echo "This script should not be run as root. Please run it as a regular user." + echo + exit 1 +fi # Let's test the internet connection function fuCHECKINET () { -mySITES=$1 - echo - echo "### Now checking availability of ..." - for i in $mySITES; - do - echo -n "###### $myBLUE$i$myWHITE " - curl --connect-timeout 5 -IsS $i 2>&1>/dev/null - if [ $? -ne 0 ]; - then - echo - echo "###### $myBLUE""Error - Internet connection test failed.""$myWHITE"" [ $myRED""NOT OK""$myWHITE ]" - echo "Exiting.""$myWHITE" - echo - exit 1 - else - echo "[ $myGREEN"OK"$myWHITE ]" - fi - done; -echo + mySITES=$1 + echo + echo "### Now checking availability of ..." + for i in $mySITES; + do + echo -n "###### $myBLUE$i$myWHITE " + curl --connect-timeout 5 -IsS $i >/dev/null 2>&1 + if [ $? -ne 0 ]; + then + echo + echo "###### $myBLUE""Error - Internet connection test failed.""$myWHITE"" [ $myRED""NOT OK""$myWHITE ]" + echo "Exiting.""$myWHITE" + echo + exit 1 + else + echo "[ $myGREEN"OK"$myWHITE ]" + fi + done; + echo } # Update function fuSELFUPDATE () { - echo - echo "### Now checking for newer files in repository ..." - git fetch --all - myREMOTESTAT=$(git status | grep -c "up-to-date") - if [ "$myREMOTESTAT" != "0" ]; - then - echo "###### $myBLUE""No updates found in repository.""$myWHITE" - return - fi - ### DEV - myRESULT=$(git diff --name-only origin/master | grep "^update.sh") - if [ "$myRESULT" == "update.sh" ]; - then - echo "###### $myBLUE""Found newer version, will be pulling updates and restart myself.""$myWHITE" - git reset --hard - git pull --force - exec ./update.sh -y - exit 1 - else - echo "###### $myBLUE""Pulling updates from repository.""$myWHITE" - git reset --hard - git pull --force - fi -echo + echo + echo "### Now checking for newer files in repository ..." + git fetch --all + myREMOTESTAT=$(git status | grep -c "up-to-date") + if [ "$myREMOTESTAT" != "0" ]; + then + echo "###### $myBLUE""No updates found in repository.""$myWHITE" + return + fi + ### DEV + myRESULT=$(git diff --name-only origin/master | grep "^update.sh") + if [ "$myRESULT" == "update.sh" ]; + then + echo "###### $myBLUE""Found newer version, will be pulling updates and restart myself.""$myWHITE" + git reset --hard + git pull --force + exec ./update.sh -y + exit 1 + else + echo "###### $myBLUE""Pulling updates from repository.""$myWHITE" + git reset --hard + git pull --force + fi + echo } -# Let's check for version, upgrade to Debian 11 function fuCHECK_VERSION () { -local myMINVERSION="22.04.0" -local myMASTERVERSION="22.04.0" -echo -echo "### Checking for Release ID" -myRELEASE=$(lsb_release -c | awk '{ print $2 }') -if [[ ! " ${myLSB_RELEASE[@]} " =~ " ${myRELEASE} " ]]; - then - echo "###### Need to upgrade to Debian 11 (Bullseye) first:$myWHITE"" [ $myRED""NOT OK""$myWHITE ]" - echo "###### Upgrade may result in complete data loss and should not be run via SSH." - echo "###### If you installed T-Pot using the post-install method instead of the ISO it is recommended you upgrade manually to Debian 11 (Bullseye) and then re-run update.sh." - echo "###### Do you want to upgrade to Debian 11 (Bullseye) now?" - while [ "$myQST" != "y" ] && [ "$myQST" != "n" ]; - do - read -p "Upgrade? (y/n) " myQST - done - if [ "$myQST" = "n" ]; - then - echo - echo $myGREEN"Aborting!"$myWHITE - echo - exit - else - echo "###### Stopping and disabling T-Pot services ... " - echo - systemctl stop tpot - systemctl disable tpot - systemctl stop docker - systemctl start docker - docker stop $(docker ps -aq) - docker rm -v $(docker ps -aq) - echo "###### Switching /etc/apt/sources.list from buster to bullseye ... " - echo - sed -i 's/buster/bullseye/g' /etc/apt/sources.list - echo "###### Updating repositories ... " - echo - apt-fast update - export DEBIAN_FRONTEND=noninteractive - echo "###### Running full upgrade ... " - echo - echo "docker.io docker.io/restart boolean true" | debconf-set-selections -v - echo "ssh ssh/restart boolean true" | debconf-set-selections -v - echo "cron cron/restart boolean true" | debconf-set-selections -v - echo "debconf debconf/frontend select noninteractive" | debconf-set-selections -v - apt-fast full-upgrade -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --force-yes - dpkg --configure -a - echo "###### $myBLUE""Finished with upgrading. Now restarting update.sh and to continue with T-Pot related updates.""$myWHITE" - exec ./update.sh -y - exit 1 - fi -fi -echo -echo "### Checking for version tag ..." -if [ -f "version" ]; - then - myVERSION=$(cat version) - if [[ "$myVERSION" > "$myMINVERSION" || "$myVERSION" == "$myMINVERSION" ]] && [[ "$myVERSION" < "$myMASTERVERSION" || "$myVERSION" == "$myMASTERVERSION" ]] - then - echo "###### $myBLUE$myVERSION is eligible for the update procedure.$myWHITE"" [ $myGREEN""OK""$myWHITE ]" - else - echo "###### $myBLUE $myVERSION cannot be upgraded automatically. Please run a fresh install.$myWHITE"" [ $myRED""NOT OK""$myWHITE ]" - exit - fi - else - echo "###### $myBLUE""Unable to determine version. Please run 'update.sh' from within '/opt/tpot'.""$myWHITE"" [ $myRED""NOT OK""$myWHITE ]" - exit - fi -echo + local myMINVERSION="24.04.0" + local myMASTERVERSION="24.04.0" + echo + echo "### Checking for version tag ..." + if [ -f "version" ]; + then + myVERSION=$(cat version) + if [[ "$myVERSION" > "$myMINVERSION" || "$myVERSION" == "$myMINVERSION" ]] && [[ "$myVERSION" < "$myMASTERVERSION" || "$myVERSION" == "$myMASTERVERSION" ]] + then + echo "###### $myBLUE$myVERSION is eligible for the update procedure.$myWHITE"" [ $myGREEN""OK""$myWHITE ]" + else + echo "###### $myBLUE $myVERSION cannot be upgraded automatically. Please run a fresh install.$myWHITE"" [ $myRED""NOT OK""$myWHITE ]" + exit + fi + else + echo "###### $myBLUE""Unable to determine version. Please run 'update.sh' from within 'tpotce/'.""$myWHITE"" [ $myRED""NOT OK""$myWHITE ]" + exit + fi + echo } # Stop T-Pot to avoid race conditions with running containers with regard to the current T-Pot config function fuSTOP_TPOT () { -echo -echo "### Need to stop T-Pot ..." -echo -n "###### $myBLUE Now stopping T-Pot.$myWHITE " -systemctl stop tpot -if [ $? -ne 0 ]; - then - echo " [ $myRED""NOT OK""$myWHITE ]" - echo "###### $myBLUE""Could not stop T-Pot.""$myWHITE"" [ $myRED""NOT OK""$myWHITE ]" - echo "Exiting.""$myWHITE" - echo - exit 1 - else - echo "[ $myGREEN"OK"$myWHITE ]" - echo "###### $myBLUE Now disabling T-Pot service.$myWHITE " - systemctl disable tpot - echo "###### $myBLUE Now cleaning up containers.$myWHITE " - if [ "$(docker ps -aq)" != "" ]; - then - docker stop $(docker ps -aq) - docker rm $(docker ps -aq) - fi -fi -echo + echo + echo "### Need to stop T-Pot ..." + echo -n "###### $myBLUE Now stopping T-Pot.$myWHITE " + sudo systemctl stop tpot.service + if [ $? -ne 0 ]; + then + echo " [ $myRED""NOT OK""$myWHITE ]" + echo "###### $myBLUE""Could not stop T-Pot.""$myWHITE"" [ $myRED""NOT OK""$myWHITE ]" + echo "Exiting.""$myWHITE" + echo + exit 1 + else + echo "[ $myGREEN"OK"$myWHITE ]" + echo -n "###### $myBLUE Now cleaning up containers.$myWHITE " + if [ "$(docker ps -aq)" != "" ]; + then + docker stop $(docker ps -aq) + docker container prune -f && docker image prune -f && docker volume prune -f + fi + echo "[ $myGREEN"OK"$myWHITE ]" + fi + echo } # Backup function fuBACKUP () { -local myARCHIVE="/root/$(date +%Y%m%d%H%M)_tpot_backup.tgz" -local myPATH=$PWD -echo -echo "### Create a backup, just in case ... " -echo -n "###### $myBLUE Building archive in $myARCHIVE $myWHITE" -cd /opt/tpot -tar cvfz $myARCHIVE * 2>&1>/dev/null -if [ $? -ne 0 ]; - then - echo " [ $myRED""NOT OK""$myWHITE ]" - echo "###### $myBLUE""Something went wrong.""$myWHITE"" [ $myRED""NOT OK""$myWHITE ]" - echo "Exiting.""$myWHITE" - echo - cd $myPATH - exit 1 - else - echo "[ $myGREEN"OK"$myWHITE ]" - cd $myPATH -fi -echo + myARCHIVE="$HOME/${myDATE}_tpot_backup.tgz" + local myPATH=$PWD + echo + echo "### Create a backup, just in case ... " + echo -n "###### $myBLUE Building archive in $myARCHIVE $myWHITE" + cd $HOME/tpotce + sudo tar cvf $myARCHIVE * .env >/dev/null 2>&1 + sudo chown $LOGNAME:$LOGNAME $myARCHIVE + if [ $? -ne 0 ]; + then + echo " [ $myRED""NOT OK""$myWHITE ]" + echo "###### $myBLUE""Something went wrong.""$myWHITE"" [ $myRED""NOT OK""$myWHITE ]" + echo "Exiting.""$myWHITE" + echo + cd $myPATH + exit 1 + else + echo "[ $myGREEN"OK"$myWHITE ]" + cd $myPATH + fi + echo } # Remove old images for specific tag function fuREMOVEOLDIMAGES () { -local myOLDTAG=$1 -local myOLDIMAGES=$(docker images | grep -c "$myOLDTAG") -if [ "$myOLDIMAGES" -gt "0" ]; - then - echo + local myOLDTAG=$1 echo "### Removing old docker images." - docker rmi $(docker images | grep "$myOLDTAG" | awk '{print $3}') -fi + docker rmi $(docker images -q "$myOLDTAG") >/dev/null 2>&1 } -# Let's load docker images in parallel function fuPULLIMAGES { -local myTPOTCOMPOSE="/opt/tpot/etc/tpot.yml" -for name in $(cat $myTPOTCOMPOSE | grep -v '#' | grep image | cut -d'"' -f2 | uniq) - do - docker pull $name & - done -wait -echo + docker compose -f ~/tpotce/docker-compose.yml pull } function fuUPDATER () { -export DEBIAN_FRONTEND=noninteractive -echo -echo "### Installing apt-fast" -/bin/bash -c "$(curl -sL https://raw.githubusercontent.com/ilikenwf/apt-fast/master/quick-install.sh)" -local myPACKAGES=$(cat /opt/tpot/packages.txt) -echo -echo "### Removing and holding back problematic packages ..." -apt-fast -y --allow-change-held-packages purge cockpit-pcp elasticsearch-curator exim4-base mailutils ntp pcp -apt-mark hold exim4-base mailutils ntp pcp cockpit-pcp -hash -r -echo -echo "### Now upgrading packages ..." -dpkg --configure -a -apt-fast -y autoclean -apt-fast -y autoremove -apt-fast update -apt-fast -y install $myPACKAGES - -# Some updates require interactive attention, and the following settings will override that. -echo "docker.io docker.io/restart boolean true" | debconf-set-selections -v -echo "debconf debconf/frontend select noninteractive" | debconf-set-selections -v -apt-fast -y dist-upgrade -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --force-yes -dpkg --configure -a -npm cache clean --force -npm install elasticdump -g -pip3 install --upgrade glances[docker] yq -hash -r -echo -echo "### Now replacing T-Pot related config files on host" -cp host/etc/systemd/* /etc/systemd/system/ -systemctl daemon-reload - -# Ensure some defaults -echo -echo "### Ensure some T-Pot defaults with regard to some folders, permissions and configs." -sed -i '/^port/I,$d' /etc/ssh/sshd_config -tee -a /etc/ssh/sshd_config << EOF -Port 64295 -Match Group tpotlogs - PermitOpen 127.0.0.1:64305 - ForceCommand /usr/bin/false -EOF - -### Ensure creation of T-Pot related folders, just in case -mkdir -vp /data/adbhoney/{downloads,log} \ - /data/ciscoasa/log \ - /data/conpot/log \ - /data/citrixhoneypot/logs \ - /data/cowrie/{downloads,keys,misc,log,log/tty} \ - /data/ddospot/{bl,db,log} \ - /data/dicompot/{images,log} \ - /data/dionaea/{log,bistreams,binaries,rtp,roots,roots/ftp,roots/tftp,roots/www,roots/upnp} \ - /data/elasticpot/log \ - /data/elk/{data,log} \ - /data/endlessh/log \ - /data/ews/conf \ - /data/fatt/log \ - /data/glutton/log \ - /data/hellpot/log \ - /data/heralding/log \ - /data/honeypots/log \ - /data/honeysap/log \ - /data/honeytrap/{log,attacks,downloads} \ - /data/ipphoney/log \ - /data/log4pot/{log,payloads} \ - /data/mailoney/log \ - /data/medpot/log \ - /data/nginx/{log,heimdall} \ - /data/p0f/log \ - /data/redishoneypot/log \ - /data/sentrypeer/log \ - /data/spiderfoot \ - /data/suricata/log \ - /data/tanner/{log,files} \ - /home/tsec/.ssh/ - -### Let's take care of some files and permissions -chmod 770 -R /data -chown tpot:tpot -R /data -chmod 644 -R /data/nginx/conf -chmod 644 -R /data/nginx/cert - -echo -echo "### Now pulling latest docker images ..." -echo "######$myBLUE This might take a while, please be patient!$myWHITE" -fuPULLIMAGES 2>&1>/dev/null - -fuREMOVEOLDIMAGES "2006" - -echo -echo "### Copying T-Pot service to systemd." -cp /opt/tpot/host/etc/systemd/tpot.service /etc/systemd/system/ -systemctl enable tpot - -echo -echo "### If you made changes to tpot.yml please ensure to add them again." -echo "### We stored the previous version as backup in /root/." -echo "### Some updates may need an import of the latest Kibana objects as well." -echo "### Download the latest objects here if they recently changed:" -echo "### https://raw.githubusercontent.com/telekom-security/tpotce/master/etc/objects/kibana_export.ndjson.zip" -echo "### Export and import the objects easily through the Kibana WebUI:" -echo "### Go to Kibana > Management > Saved Objects > Export / Import" -echo + echo "### Now pulling latest docker images ..." + echo "######$myBLUE This might take a while, please be patient!$myWHITE" + fuPULLIMAGES + fuREMOVEOLDIMAGES "dtagdevsec/*:dev" + fuREMOVEOLDIMAGES "ghcr.io/telekom-security/*:dev" + echo + echo "### If you made changes to docker-compose.yml please ensure to add them again." + echo "### We stored the previous version as backup in $myARCHIVE." + echo "### Some updates may need an import of the latest Kibana objects as well." + echo "### Download the latest objects here if they recently changed:" + echo "### https://raw.githubusercontent.com/telekom-security/tpotce/master/etc/objects/kibana_export.ndjson.zip" + echo "### Export and import the objects easily through the Kibana WebUI:" + echo "### Go to Kibana > Management > Saved Objects > Export / Import" + echo } -function fuRESTORE_EWSCFG () { -if [ -f '/data/ews/conf/ews.cfg' ] && ! grep 'ews.cfg' $myCONFIGFILE > /dev/null; then - echo - echo "### Restoring volume mount for ews.cfg in tpot.yml" - sed -i --follow-symlinks '/\/opt\/ewsposter\/ews.ip/a\\ \ \ \ \ - /data/ews/conf/ews.cfg:/opt/ewsposter/ews.cfg' $myCONFIGFILE -fi +function fuRESTORE () { + if [ -f '~/tpotce/data/ews/conf/ews.cfg' ] && ! grep 'ews.cfg' $myCOMPOSEFILE > /dev/null; then + echo + echo "### Restoring volume mount for ews.cfg in tpot.yml" + sed -i '/- ${TPOT_DATA_PATH}:\/data/a \ \ \ \ \ - ${TPOT_DATA_PATH}/ews/conf/ews.cfg:/opt/ewsposter/ews.cfg' $myCOMPOSEFILE + fi + echo "### Restoring T-Pot config file .env" + tar xvf $myARCHIVE .env -C $HOME/tpotce >/dev/null 2>&1 } -function fuRESTORE_HPFEEDS () { -if [ -f '/data/ews/conf/hpfeeds.cfg' ]; then - echo - echo "### Restoring HPFEEDS in tpot.yml" - ./bin/hpfeeds_optin.sh --conf=/data/ews/conf/hpfeeds.cfg -fi -} - - ################ # Main section # ################ -# Got root? -myWHOAMI=$(whoami) -if [ "$myWHOAMI" != "root" ] - then - echo - echo "Need to run as root ..." - echo - exit -fi - # Only run with command switch +sudo echo "$myUPDATER" + if [ "$1" != "-y" ]; then echo - echo "This script will update / upgrade all T-Pot related scripts, tools and packages to the latest versions." - echo "A backup of /opt/tpot will be written to /root. If you are unsure, you should save your work." - echo "This is a beta feature and only recommended for experienced users." + echo "This script will update T-Pot to the latest version." + echo "A backup of ~/tpotce will be written to $HOME. If you are unsure, you should save your work." + echo "This tool might break things and therefore only recommended for experienced users." echo "If you understand the involved risks feel free to run this script with the '-y' switch." echo exit fi fuCHECK_VERSION -fuCONFIGCHECK -fuCHECKINET "https://index.docker.io https://github.com https://pypi.python.org https://debian.org" +fuCHECKINET "https://index.docker.io https://github.com" fuSTOP_TPOT fuBACKUP fuSELFUPDATE "$0" "$@" fuUPDATER -fuRESTORE_EWSCFG -fuRESTORE_HPFEEDS +fuRESTORE echo -echo "### Done. Please reboot." +echo "### Done. You can now start T-Pot using 'systemctl start tpot' or 'docker compose up -d'." echo diff --git a/version b/version index c207f759..51ec2f02 100644 --- a/version +++ b/version @@ -1 +1 @@ -22.04.0 +24.04.0