diff --git a/core/src/setup.rs b/core/src/setup.rs index 7e2764f3a..2166cfc08 100644 --- a/core/src/setup.rs +++ b/core/src/setup.rs @@ -176,8 +176,6 @@ pub struct AttachParams { pub guid: InternedString, #[ts(optional)] pub kiosk: Option, - pub name: Option, - pub hostname: Option, } #[instrument(skip_all)] @@ -187,8 +185,6 @@ pub async fn attach( password, guid: disk_guid, kiosk, - name, - hostname, }: AttachParams, ) -> Result { let setup_ctx = ctx.clone(); @@ -242,10 +238,8 @@ pub async fn attach( } disk_phase.complete(); - let hostname = ServerHostnameInfo::new_opt(name, hostname)?; - let (account, net_ctrl) = - setup_init(&setup_ctx, password, kiosk, hostname, init_phases).await?; + setup_init(&setup_ctx, password, kiosk, None, init_phases).await?; let rpc_ctx = RpcContext::init( &setup_ctx.webserver, diff --git a/sdk/base/lib/osBindings/AttachParams.ts b/sdk/base/lib/osBindings/AttachParams.ts index 08d6e5ac7..31283fec6 100644 --- a/sdk/base/lib/osBindings/AttachParams.ts +++ b/sdk/base/lib/osBindings/AttachParams.ts @@ -5,6 +5,4 @@ export type AttachParams = { password: EncryptedWire | null guid: string kiosk?: boolean - name: string | null - hostname: string | null } diff --git a/web/projects/setup-wizard/src/app/pages/password.page.ts b/web/projects/setup-wizard/src/app/pages/password.page.ts index fb3f4f39e..6e8e7fcd7 100644 --- a/web/projects/setup-wizard/src/app/pages/password.page.ts +++ b/web/projects/setup-wizard/src/app/pages/password.page.ts @@ -10,15 +10,14 @@ import { } from '@angular/forms' import { ErrorService, - generateHostname, i18nPipe, LoadingService, + normalizeHostname, } from '@start9labs/shared' import { TuiAutoFocus, TuiMapperPipe, TuiValidator } from '@taiga-ui/cdk' import { TuiButton, TuiError, - TuiHint, TuiIcon, TuiTextfield, TuiTitle, @@ -26,7 +25,6 @@ import { import { TuiFieldErrorPipe, TuiPassword, - TuiTooltip, tuiValidationErrorsProvider, } from '@taiga-ui/kit' import { TuiCardLarge, TuiHeader } from '@taiga-ui/layout' @@ -48,29 +46,16 @@ import { StateService } from '../services/state.service'
@if (isFresh) { - - - .local - - + + + @if (form.controls.name.value?.trim()) { +

{{ derivedHostname }}.local

+ } } @@ -134,8 +119,10 @@ import { StateService } from '../services/state.service' `, styles: ` - .local-suffix { + .hostname-preview { color: var(--tui-text-secondary); + font: var(--tui-font-text-s); + margin-top: 0.25rem; } footer { @@ -160,8 +147,6 @@ import { StateService } from '../services/state.service' TuiMapperPipe, TuiHeader, TuiTitle, - TuiHint, - TuiTooltip, i18nPipe, ], providers: [ @@ -170,7 +155,6 @@ import { StateService } from '../services/state.service' minlength: 'Must be 12 characters or greater', maxlength: 'Must be 64 character or less', match: 'Passwords do not match', - pattern: 'Only lowercase letters, numbers, and hyphens allowed', }), ], }) @@ -181,7 +165,7 @@ export default class PasswordPage { private readonly stateService = inject(StateService) private readonly i18n = inject(i18nPipe) - // Fresh install requires password and hostname + // Fresh install requires password and name readonly isFresh = this.stateService.setupType === 'fresh' readonly form = new FormGroup({ @@ -191,10 +175,7 @@ export default class PasswordPage { Validators.maxLength(64), ]), confirm: new FormControl(''), - hostname: new FormControl(generateHostname(), [ - Validators.required, - Validators.pattern(/^[a-z0-9][a-z0-9-]*$/), - ]), + name: new FormControl('', [Validators.required]), }) readonly validator = (value: string) => (control: AbstractControl) => @@ -202,8 +183,8 @@ export default class PasswordPage { ? null : { match: this.i18n.transform('Passwords do not match') } - randomizeHostname() { - this.form.controls.hostname.setValue(generateHostname()) + get derivedHostname(): string { + return normalizeHostname(this.form.controls.name.value || '') } async skip() { @@ -217,14 +198,15 @@ export default class PasswordPage { private async executeSetup(password: string | null) { const loader = this.loader.open('Starting setup').subscribe() - const hostname = this.form.controls.hostname.value || generateHostname() + const name = this.form.controls.name.value || '' + const hostname = normalizeHostname(name) try { if (this.stateService.setupType === 'attach') { - await this.stateService.attachDrive(password, hostname) + await this.stateService.attachDrive(password) } else { // fresh, restore, or transfer - all use execute - await this.stateService.executeSetup(password, hostname) + await this.stateService.executeSetup(password, name, hostname) } await this.router.navigate(['/loading']) diff --git a/web/projects/setup-wizard/src/app/services/state.service.ts b/web/projects/setup-wizard/src/app/services/state.service.ts index 10ff3e81f..abc0535b4 100644 --- a/web/projects/setup-wizard/src/app/services/state.service.ts +++ b/web/projects/setup-wizard/src/app/services/state.service.ts @@ -48,11 +48,10 @@ export class StateService { /** * Called for attach flow (existing data drive) */ - async attachDrive(password: string | null, hostname: string): Promise { + async attachDrive(password: string | null): Promise { await this.api.attach({ guid: this.dataDriveGuid, password: password ? await this.api.encrypt(password) : null, - hostname, }) } @@ -60,7 +59,11 @@ export class StateService { * Called for fresh, restore, and transfer flows * Password is required for fresh, optional for restore/transfer */ - async executeSetup(password: string | null, hostname: string): Promise { + async executeSetup( + password: string | null, + name: string, + hostname: string, + ): Promise { let recoverySource: T.RecoverySource | null = null if (this.recoverySource) { @@ -81,6 +84,7 @@ export class StateService { guid: this.dataDriveGuid, // @ts-expect-error TODO: backend should make password optional for restore/transfer password: password ? await this.api.encrypt(password) : null, + name, hostname, recoverySource, }) diff --git a/web/projects/shared/src/i18n/dictionaries/de.ts b/web/projects/shared/src/i18n/dictionaries/de.ts index 0e7cc6f19..dc8546295 100644 --- a/web/projects/shared/src/i18n/dictionaries/de.ts +++ b/web/projects/shared/src/i18n/dictionaries/de.ts @@ -691,12 +691,9 @@ export default { 755: 'Schnittstelle(n)', 756: 'Keine Portweiterleitungsregeln', 757: 'Portweiterleitungsregeln am Gateway erforderlich', - 758: 'Server-Hostname', - 760: 'Dieser Wert wird als Hostname Ihres Servers und mDNS-Adresse im LAN verwendet. Nur Kleinbuchstaben, Zahlen und Bindestriche sind erlaubt.', - 761: 'Zufällig generieren', - 762: 'Nur Kleinbuchstaben, Zahlen und Bindestriche erlaubt', 763: 'Sie sind derzeit über Ihre .local-Adresse verbunden. Das Ändern des Hostnamens erfordert einen Wechsel zur neuen .local-Adresse.', 764: 'Hostname geändert', 765: 'Neue Adresse öffnen', 766: 'Ihr Server ist jetzt erreichbar unter', + 767: 'Servername', } satisfies i18n diff --git a/web/projects/shared/src/i18n/dictionaries/en.ts b/web/projects/shared/src/i18n/dictionaries/en.ts index 12002ecde..034e5e5cd 100644 --- a/web/projects/shared/src/i18n/dictionaries/en.ts +++ b/web/projects/shared/src/i18n/dictionaries/en.ts @@ -691,12 +691,9 @@ export const ENGLISH: Record = { 'Interface(s)': 755, 'No port forwarding rules': 756, 'Port forwarding rules required on gateway': 757, - 'Server Hostname': 758, - 'This value will be used as your server hostname and mDNS address on the LAN. Only lowercase letters, numbers, and hyphens are allowed.': 760, - 'Randomize': 761, - 'Only lowercase letters, numbers, and hyphens allowed': 762, 'You are currently connected via your .local address. Changing the hostname will require you to switch to the new .local address.': 763, 'Hostname Changed': 764, 'Open new address': 765, 'Your server is now reachable at': 766, + 'Server Name': 767, } diff --git a/web/projects/shared/src/i18n/dictionaries/es.ts b/web/projects/shared/src/i18n/dictionaries/es.ts index 6804d067b..847e69f5c 100644 --- a/web/projects/shared/src/i18n/dictionaries/es.ts +++ b/web/projects/shared/src/i18n/dictionaries/es.ts @@ -691,12 +691,9 @@ export default { 755: 'Interfaz/Interfaces', 756: 'Sin reglas de redirección de puertos', 757: 'Reglas de redirección de puertos requeridas en la puerta de enlace', - 758: 'Nombre de host del servidor', - 760: 'Este valor se usará como el nombre de host de su servidor y la dirección mDNS en la LAN. Solo se permiten letras minúsculas, números y guiones.', - 761: 'Aleatorizar', - 762: 'Solo se permiten letras minúsculas, números y guiones', 763: 'Actualmente está conectado a través de su dirección .local. Cambiar el nombre de host requerirá que cambie a la nueva dirección .local.', 764: 'Nombre de host cambiado', 765: 'Abrir nueva dirección', 766: 'Su servidor ahora es accesible en', + 767: 'Nombre del servidor', } satisfies i18n diff --git a/web/projects/shared/src/i18n/dictionaries/fr.ts b/web/projects/shared/src/i18n/dictionaries/fr.ts index 56469919f..642576d83 100644 --- a/web/projects/shared/src/i18n/dictionaries/fr.ts +++ b/web/projects/shared/src/i18n/dictionaries/fr.ts @@ -691,12 +691,9 @@ export default { 755: 'Interface(s)', 756: 'Aucune règle de redirection de port', 757: 'Règles de redirection de ports requises sur la passerelle', - 758: "Nom d'hôte du serveur", - 760: "Cette valeur sera utilisée comme nom d'hôte de votre serveur et adresse mDNS sur le LAN. Seules les lettres minuscules, les chiffres et les tirets sont autorisés.", - 761: 'Générer aléatoirement', - 762: 'Seules les lettres minuscules, les chiffres et les tirets sont autorisés', 763: "Vous êtes actuellement connecté via votre adresse .local. Changer le nom d'hôte nécessitera de passer à la nouvelle adresse .local.", 764: "Nom d'hôte modifié", 765: 'Ouvrir la nouvelle adresse', 766: 'Votre serveur est maintenant accessible à', + 767: 'Nom du serveur', } satisfies i18n diff --git a/web/projects/shared/src/i18n/dictionaries/pl.ts b/web/projects/shared/src/i18n/dictionaries/pl.ts index ca3c2cab9..4b656f03b 100644 --- a/web/projects/shared/src/i18n/dictionaries/pl.ts +++ b/web/projects/shared/src/i18n/dictionaries/pl.ts @@ -691,12 +691,9 @@ export default { 755: 'Interfejs(y)', 756: 'Brak reguł przekierowania portów', 757: 'Reguły przekierowania portów wymagane na bramce', - 758: 'Nazwa hosta serwera', - 760: 'Ta wartość będzie używana jako nazwa hosta serwera i adres mDNS w sieci LAN. Dozwolone są tylko małe litery, cyfry i myślniki.', - 761: 'Losuj', - 762: 'Dozwolone są tylko małe litery, cyfry i myślniki', 763: 'Jesteś obecnie połączony przez adres .local. Zmiana nazwy hosta będzie wymagać przełączenia na nowy adres .local.', 764: 'Nazwa hosta zmieniona', 765: 'Otwórz nowy adres', 766: 'Twój serwer jest teraz dostępny pod adresem', + 767: 'Nazwa serwera', } satisfies i18n diff --git a/web/projects/shared/src/util/hostname.ts b/web/projects/shared/src/util/hostname.ts index baa22a3f4..cdb190991 100644 --- a/web/projects/shared/src/util/hostname.ts +++ b/web/projects/shared/src/util/hostname.ts @@ -1,9088 +1,24 @@ -// Word lists ported from core/src/assets/{adjectives,nouns}.txt -// Used to generate random hostnames in adjective-noun format +/** + * TS port of the Rust `normalize()` function from core/src/hostname.rs. + * Converts a free-text name into a valid hostname. + */ +export function normalizeHostname(name: string): string { + let prevWasDash = true + let normalized = '' -const ADJECTIVES = [ - 'ominous', - 'sturdy', - 'angelic', - 'frontal', - 'legal', - 'murky', - 'rougher', - 'formal', - 'local', - 'bold', - 'grouchy', - 'grazing', - 'bumpy', - 'wonky', - 'boxed', - 'factual', - 'sunny', - 'trim', - 'selfish', - 'humble', - 'plastic', - 'broke', - 'shorter', - 'rustic', - 'brittle', - 'narrow', - 'astute', - 'icky', - 'sullen', - 'bemused', - 'creative', - 'snowy', - 'sane', - 'sedate', - 'deviant', - 'icy', - 'spoiled', - 'blond', - 'concave', - 'cyan', - 'lucky', - 'lively', - 'risky', - 'wounded', - 'greater', - 'limber', - 'social', - 'glued', - 'painful', - 'warm', - 'nutty', - 'amused', - 'carried', - 'amateur', - 'meager', - 'working', - 'faded', - 'stark', - 'reborn', - 'darkened', - 'entire', - 'charred', - 'speedy', - 'clear', - 'kinky', - 'impish', - 'ageless', - 'prewar', - 'correct', - 'molten', - 'admired', - 'uneasy', - 'higher', - 'tragic', - 'inane', - 'magenta', - 'urban', - 'nearby', - 'grouped', - 'noisy', - 'rural', - 'fetid', - 'waxed', - 'dandy', - 'cocky', - 'aqua', - 'dingy', - 'unbent', - 'lewd', - 'quiet', - 'mellow', - 'unvalued', - 'itchy', - 'clunky', - 'snug', - 'opaque', - 'bulky', - 'smug', - 'helpful', - 'velvet', - 'violet', - 'valid', - 'wobbly', - 'dodgy', - 'rare', - 'cocoa', - 'selfless', - 'complex', - 'simple', - 'prim', - 'blank', - 'obsolete', - 'surplus', - 'funky', - 'chubby', - 'daring', - 'spongy', - 'tinted', - 'prepaid', - 'geeky', - 'unsure', - 'broken', - 'wimpy', - 'obscene', - 'monthly', - 'brown', - 'erased', - 'freaky', - 'decent', - 'rimless', - 'cordless', - 'tainted', - 'huffy', - 'yawning', - 'toxic', - 'puffy', - 'inner', - 'smart', - 'lesser', - 'mute', - 'mighty', - 'deluxe', - 'thatch', - 'frosty', - 'vulgar', - 'darkish', - 'fun', - 'annoying', - 'swollen', - 'loco', - 'magic', - 'generic', - 'tan', - 'trendy', - 'blind', - 'worried', - 'stray', - 'pungent', - 'fluid', - 'mixed', - 'soviet', - 'ruby', - 'rabid', - 'silky', - 'regular', - 'winter', - 'ethnic', - 'sour', - 'sleepy', - 'frail', - 'dicey', - 'heavy', - 'rude', - 'asleep', - 'loony', - 'singing', - 'exterior', - 'bendy', - 'feeble', - 'intact', - 'robust', - 'foamy', - 'pale', - 'crazed', - 'sloping', - 'soaked', - 'next', - 'thorny', - 'voting', - 'squeaky', - 'pregame', - 'dismal', - 'teak', - 'rumbling', - 'furry', - 'hazel', - 'quaint', - 'older', - 'custard', - 'golden', - 'paltry', - 'phony', - 'smooth', - 'trivial', - 'happier', - 'unboxed', - 'chalky', - 'learned', - 'younger', - 'calm', - 'jagged', - 'hateful', - 'still', - 'round', - 'final', - 'unhappy', - 'jumbo', - 'obedient', - 'germy', - 'mangy', - 'pickled', - 'untamed', - 'puny', - 'pink', - 'mild', - 'mini', - 'able', - 'related', - 'auburn', - 'giddy', - 'tapered', - 'flabby', - 'cruel', - 'awake', - 'artsy', - 'dull', - 'virtual', - 'dry', - 'useless', - 'winking', - 'nerdy', - 'drastic', - 'dimpled', - 'slick', - 'purple', - 'jolly', - 'maple', - 'humorous', - 'swank', - 'ready', - 'level', - 'shrill', - 'amusing', - 'grim', - 'crabby', - 'canned', - 'anxious', - 'refried', - 'undying', - 'revised', - 'spicy', - 'refined', - 'aquatic', - 'foggy', - 'chosen', - 'grey', - 'bespoke', - 'flavored', - 'baggy', - 'foul', - 'shocked', - 'unlucky', - 'yapping', - 'insecure', - 'daft', - 'sleazy', - 'unused', - 'short', - 'your', - 'snarky', - 'tweed', - 'rosy', - 'brief', - 'welcome', - 'buffed', - 'enamel', - 'inept', - 'abrupt', - 'taboo', - 'hungry', - 'audible', - 'bitter', - 'untidy', - 'stale', - 'strong', - 'moldy', - 'brass', - 'crisp', - 'temp', - 'acidic', - 'top', - 'old', - 'limited', - 'neon', - 'cushy', - 'angled', - 'potent', - 'rotten', - 'snappy', - 'floppy', - 'good', - 'fatal', - 'darned', - 'somber', - 'stunned', - 'unloved', - 'vicious', - 'endless', - 'wavy', - 'louder', - 'musty', - 'no', - 'distant', - 'savage', - 'devout', - 'feisty', - 'rogue', - 'uneven', - 'excess', - 'main', - 'crimson', - 'illicit', - 'normal', - 'faux', - 'quick', - 'trite', - 'evil', - 'guilty', - 'kosher', - 'beloved', - 'wooden', - 'indigo', - 'gentle', - 'raunchy', - 'subtle', - 'finer', - 'stained', - 'wanted', - 'informal', - 'cute', - 'cedar', - 'returned', - 'square', - 'shady', - 'prissy', - 'bronze', - 'meaty', - 'taller', - 'vegan', - 'flying', - 'cloudy', - 'vague', - 'snazzy', - 'twisty', - 'primary', - 'timid', - 'liquid', - 'left', - 'nifty', - 'red', - 'alright', - 'smoky', - 'western', - 'okay', - 'fine', - 'armored', - 'rinsing', - 'denim', - 'glib', - 'routine', - 'silver', - 'harsh', - 'near', - 'useful', - 'preachy', - 'tedious', - 'arctic', - 'bluish', - 'primal', - 'medical', - 'sore', - 'buff', - 'patchy', - 'chief', - 'swell', - 'adept', - 'ideal', - 'yummy', - 'gutsy', - 'key', - 'mocha', - 'harmful', - 'loyal', - 'oblong', - 'dense', - 'violent', - 'great', - 'lousy', - 'emerald', - 'large', - 'magnum', - 'dancing', - 'chewy', - 'ashamed', - 'teal', - 'secular', - 'curly', - 'fertile', - 'furtive', - 'some', - 'ruined', - 'spry', - 'pliable', - 'beige', - 'bony', - 'frantic', - 'wary', - 'bawdy', - 'muscled', - 'past', - 'jumpy', - 'legit', - 'glossy', - 'fishy', - 'corny', - 'small', - 'crying', - 'beefy', - 'pompous', - 'tough', - 'other', - 'proper', - 'nimble', - 'vital', - 'foolish', - 'dainty', - 'rough', - 'herbal', - 'brainy', - 'afraid', - 'frilly', - 'hectic', - 'frigid', - 'bogus', - 'skilled', - 'tasty', - 'private', - 'slobbery', - 'plump', - 'shaved', - 'fatty', - 'initial', - 'zippy', - 'oldest', - 'bad', - 'nasty', - 'lame', - 'careless', - 'flaxen', - 'moonlit', - 'spare', - 'candied', - 'crafty', - 'hollow', - 'eager', - 'pointy', - 'caustic', - 'wronged', - 'dinky', - 'manmade', - 'niche', - 'fair', - 'varied', - 'melting', - 'blazing', - 'crass', - 'renewed', - 'waxy', - 'bald', - 'obese', - 'big', - 'passive', - 'slimy', - 'iced', - 'ultimate', - 'hairy', - 'dyed', - 'elusive', - 'sunken', - 'emphatic', - 'yeasty', - 'overt', - 'frugal', - 'ditzy', - 'remote', - 'clumsy', - 'diabetic', - 'ladylike', - 'swampy', - 'aging', - 'fur', - 'lined', - 'bossy', - 'dorky', - 'mobile', - 'crushed', - 'slate', - 'immense', - 'easiest', - 'pointed', - 'rented', - 'psycho', - 'minty', - 'expert', - 'new', - 'maroon', - 'elfish', - 'zany', - 'drafty', - 'ceramic', - 'felt', - 'same', - 'hideous', - 'marine', - 'elastic', - 'oozy', - 'novel', - 'hasty', - 'weary', - 'stuffy', - 'capable', - 'inert', - 'default', - 'central', - 'sweaty', - 'sloped', - 'smoked', - 'creepy', - 'vexed', - 'bionic', - 'regal', - 'cranky', - 'steep', - 'open', - 'floral', - 'movable', - 'varsity', - 'docile', - 'basic', - 'coping', - 'meek', - 'loose', - 'fried', - 'plush', - 'fuzzy', - 'another', - 'creaky', - 'white', - 'tubular', - 'angular', - 'edgy', - 'visible', - 'curvy', - 'neutral', - 'low', - 'woozy', - 'edible', - 'dill', - 'yucky', - 'camo', - 'hopeless', - 'polite', - 'smoggy', - 'wacky', - 'crude', - 'imposing', - 'west', - 'shaky', - 'rebel', - 'soft', - 'mythic', - 'sheer', - 'flat', - 'aft', - 'wriggly', - 'citric', - 'noble', - 'crazy', - 'blurry', - 'insane', - 'spooky', - 'touchy', - 'unique', - 'bare', - 'funny', - 'sincere', - 'eldest', - 'unusual', - 'granite', - 'prime', - 'sooty', - 'engaged', - 'awful', - 'tangible', - 'manual', - 'weaker', - 'lukewarm', - 'junky', - 'amber', - 'gothic', - 'light', - 'steamy', - 'scabby', - 'unkind', - 'empty', - 'porous', - 'subdued', - 'frizzy', - 'yellow', - 'tall', - 'foreign', - 'anemic', - 'lean', - 'cuddly', - 'wrong', - 'upbeat', - 'greedy', - 'stout', - 'dotted', - 'alive', - 'profound', - 'frozen', - 'lavish', - 'wax', - 'onyx', - 'milky', - 'veteran', - 'thin', - 'classic', - 'gruesome', - 'personal', - 'taxable', - 'lasting', - 'random', - 'valiant', - 'pulpy', - 'stiff', - 'dirty', - 'retired', - 'secret', - 'lacy', - 'online', - 'bloody', - 'royal', - 'wild', - 'found', - 'nervous', - 'viable', - 'dusty', - 'peachy', - 'sudsy', - 'moody', - 'askew', - 'sad', - 'little', - 'kissable', - 'convex', - 'grubby', - 'broad', - 'employed', - 'glass', - 'muscular', - 'avian', - 'direct', - 'goofy', - 'absent', - 'boiling', - 'loving', - 'gaudy', - 'micro', - 'muggy', - 'happy', - 'nearest', - 'strange', - 'growing', - 'ashy', - 'brisk', - 'sporty', - 'blunt', - 'stoic', - 'high', - 'mundane', - 'newborn', - 'longer', - 'needy', - 'feral', - 'plain', - 'front', - 'mature', - 'lucid', - 'washed', - 'husky', - 'eerie', - 'unseen', - 'weepy', - 'strict', - 'real', - 'hyper', - 'orange', - 'raw', - 'stormy', - 'foxy', - 'latex', - 'dang', - 'tired', - 'fragile', - 'tactful', - 'active', - 'squishy', - 'wealthy', - 'portly', - 'magical', - 'curved', - 'fasting', - 'worn', - 'silent', - 'wiry', - 'replica', - 'tame', - 'backlit', - 'fragrant', - 'nice', - 'adapted', - 'wet', - 'first', - 'whole', - 'unarmed', - 'suitable', - 'sober', - 'green', - 'oiled', - 'benign', - 'only', - 'erratic', - 'lonely', - 'balsa', - 'poor', - 'damp', - 'spiffy', - 'groggy', - 'losing', - 'black', - 'vast', - 'rusted', - 'leaky', - 'blocky', - 'futile', - 'decaf', - 'prompt', - 'ironic', - 'sulky', - 'giant', - 'folded', - 'tender', - 'mean', - 'powered', - 'tacky', - 'single', - 'hot', - 'moist', - 'lush', - 'slim', - 'ripe', - 'messy', - 'aloof', - 'blotchy', - 'shaggy', - 'billowy', - 'boring', - 'demented', - 'usual', - 'bloated', - 'cheap', - 'medium', - 'secure', - 'subpar', - 'holy', - 'trusty', - 'steel', - 'gory', - 'solid', - 'starchy', - 'worst', - 'better', - 'nosy', - 'tepid', - 'irate', - 'wispy', - 'bored', - 'sharper', - 'damn', - 'epic', - 'dreary', - 'neat', - 'dank', - 'crooked', - 'urgent', - 'stupid', - 'mousy', - 'nude', - 'filthy', - 'usable', - 'smutty', - 'burly', - 'kooky', - 'tangled', - 'rusty', - 'illegal', - 'lethal', - 'optimal', - 'sudden', - 'marble', - 'mint', - 'padded', - 'closed', - 'onerous', - 'lit', - 'uneaten', - 'bushy', - 'bootleg', - 'robotic', - 'scary', - 'petite', - 'late', - 'bent', - 'kind', - 'radiant', - 'ivory', - 'alpine', - 'joyous', - 'batty', - 'copper', - 'ample', - 'armed', - 'extra', - 'wise', - 'vintage', - 'butch', - 'sharp', - 'tied', - 'glum', - 'sticky', - 'free', - 'pure', - 'stinky', - 'super', - 'humid', - 'dark', - 'grimy', - 'senior', - 'sneaky', - 'wide', - 'detached', - 'twitchy', - 'brawny', - 'his', - 'hefty', - 'tidy', - 'ancient', - 'thinner', - 'badass', - 'fancy', - 'barbed', - 'native', - 'fresh', - 'buggy', - 'exposed', - 'gummy', - 'pudgy', - 'chrome', - 'deaf', - 'busy', - 'bamboo', - 'amazing', - 'dear', - 'scenic', - 'knit', - 'fruity', - 'young', - 'demur', - 'sugary', - 'deep', - 'fantasy', - 'antique', - 'brunette', - 'vanilla', - 'leather', - 'undead', - 'torn', - 'extinct', - 'vivid', - 'serious', - 'lost', - 'amiable', - 'sassy', - 'poison', - 'slushy', - 'mossy', - 'hardy', - 'hard', - 'favored', - 'cheesy', - 'bizarre', - 'lead', - 'sacred', - 'married', - 'custom', - 'static', - 'sensual', - 'idle', - 'pagan', - 'bland', - 'wrinkly', - 'safest', - 'odd', - 'lustful', - 'breezy', - 'hybrid', - 'natural', - 'maimed', - 'rocky', - 'frosted', - 'fond', - 'salty', - 'skinny', - 'sage', - 'blue', - 'sizable', - 'spiral', - 'mammoth', - 'crunchy', - 'gifted', - 'turbo', - 'female', - 'live', - 'warming', - 'dire', - 'woody', - 'massive', - 'festive', - 'lax', - 'upright', - 'tight', - 'fat', - 'sloppy', - 'silly', - 'shoddy', - 'acrid', - 'angry', - 'gloomy', - 'onshore', - 'unfair', - 'rapid', - 'virgin', - 'fluffy', - 'frisky', - 'eroded', - 'best', - 'warped', - 'gold', - 'steady', - 'slow', - 'swift', - 'postwar', - 'rich', - 'brutal', - 'feudal', - 'whacky', - 'partial', - 'dreaded', - 'common', - 'any', - 'elegant', - 'isolated', - 'thick', - 'homeless', - 'loud', - 'playful', - 'bright', - 'disco', - 'far', - 'jubilant', - 'woven', - 'dizzy', - 'joyful', - 'stuck', - 'weak', - 'fake', - 'dumb', - 'costly', - 'verdant', - 'soapy', - 'content', - 'unjust', - 'healthy', - 'agile', - 'superb', - 'elated', - 'catchy', - 'proud', - 'dreamy', - 'hunky', - 'mega', - 'chunky', - 'undated', - 'rotund', - 'rad', - 'drippy', - 'satin', - 'exotic', - 'drab', - 'surly', - 'slinky', - 'whiny', - 'early', - 'fleshy', - 'curled', - 'marbled', - 'mashed', - 'deadly', - 'brave', - 'botched', - 'pastel', - 'rubber', - 'naked', - 'ebony', - 'frayed', - 'general', - 'dental', - 'groovy', - 'dazzling', - 'devious', - 'elite', - 'junior', - 'last', - 'tangy', - 'huge', - 'chic', - 'bonus', - 'eastern', - 'upscale', - 'shiny', - 'gross', - 'jaded', - 'perky', - 'average', - 'lumpy', - 'used', - 'skiing', - 'warmer', - 'nuclear', - 'upset', - 'ex', - 'awkward', - 'kinder', - 'watery', - 'utopian', - 'hissy', - 'ornate', - 'greasy', - 'long', - 'baroque', - 'worthy', - 'bovine', - 'weird', - 'chaotic', - 'lazy', - 'covert', - 'bottom', - 'modest', - 'obvious', - 'nomadic', - 'public', - 'patient', - 'handy', - 'posh', - 'antsy', - 'crucial', - 'popular', - 'current', - 'creamy', - 'caring', - 'similar', - 'sleek', - 'saggy', - 'extreme', - 'vain', - 'weedy', - 'fizzy', - 'mad', - 'tense', - 'comfy', - 'uptight', - 'vile', - 'macho', - 'glowing', - 'lurid', - 'durable', - 'cozy', - 'fabric', - 'fit', - 'male', - 'plaid', - 'boxy', - 'finicky', - 'fast', - 'stern', - 'napping', - 'glad', - 'fickle', - 'dynamic', - 'perfect', - 'burnt', - 'cool', - 'windy', - 'tardy', - 'thrifty', - 'defiant', - 'crispy', - 'bouncy', - 'juicy', - 'saffron', - 'just', - 'wool', - 'crummy', - 'her', - 'oaky', - 'soggy', - 'naughty', - 'flirty', - 'tiny', - 'supreme', - 'tested', - 'azure', - 'soupy', - 'coarse', - 'wicked', - 'thirsty', - 'tart', - 'tapping', - 'modern', - 'leafy', - 'stony', - 'singed', - 'minor', - 'painted', - 'logical', - 'former', - 'deeper', - 'sterile', - 'tin', - 'pleasant', - 'firm', - 'kindly', - 'coveted', - 'eternal', - 'pushy', - 'runny', - 'austere', - 'stocky', - 'rigid', - 'flashy', - 'tricky', - 'upstate', - 'scruffy', - 'testy', - 'absurd', - 'cold', - 'lilac', - 'pebbly', - 'oval', - 'creased', - 'clever', - 'viral', - 'hidden', - 'modular', - 'sultry', - 'mushy', - 'recent', - 'dried', - 'chaste', - 'bubbly', - 'earthy', - 'jealous', - 'shabby', - 'copied', - 'iffy', - 'official', - 'core', - 'alert', - 'crusty', - 'shy', - 'jovial', - 'safe', - 'shifty', - 'dusky', - 'roomy', - 'petty', - 'grumpy', - 'educated', - 'sandy', - 'numb', - 'vibrant', - 'armless', - 'retro', - 'starlit', - 'sly', - 'wood', - 'aged', - 'enraged', - 'flawed', - 'indoor', - 'fixed', - 'metal', - 'fussy', - 'muddy', - 'witty', - 'gray', - 'bleak', - 'honest', - 'grand', - 'full', - 'my', - 'jelly', - 'shallow', - 'simpler', - 'cosmic', - 'scarlet', - 'musky', - 'donated', - 'heroic', - 'naive', - 'salted', - 'painless', - 'trained', - 'inky', - 'zesty', - 'scarce', - 'boiled', - 'rookie', - 'scented', - 'measly', - 'quirky', - 'exempt', - 'sweet', - 'pesky', - 'spotty', - 'easy', - 'sublime', - 'elderly', - 'faster', - 'clean', - 'daily', - 'wired', - 'bouncing', - 'organic', - 'gaunt', - 'swanky', - 'mouthy', - 'tipsy', - 'candid', - 'scared', - 'homely', - 'arcane', - 'weekly', - 'rowdy', - 'impure', - 'stable', - 'vapid', - 'buttery', - 'oily', - 'pretty', - 'unsafe', - 'gnarly', - 'limp', - 'more', -] + for (const c of name) { + if (/[a-zA-Z0-9]/.test(c)) { + prevWasDash = false + normalized += c.toLowerCase() + } else if ((c === '-' || /\s/.test(c)) && !prevWasDash) { + prevWasDash = true + normalized += '-' + } + } -const NOUNS = [ - 'scowls', - 'zest', - 'regime', - 'heist', - 'films', - 'bling', - 'lent', - 'hassle', - 'collar', - 'flock', - 'mountain', - 'river', - 'caveman', - 'row', - 'spyglass', - 'visions', - 'jelly', - 'cymbal', - 'pedestrian', - 'joke', - 'nets', - 'money', - 'songbird', - 'scuba', - 'toddy', - 'litter', - 'ginger', - 'gyms', - 'paws', - 'kits', - 'human', - 'mandolin', - 'molt', - 'lyric', - 'clot', - 'plural', - 'racism', - 'senator', - 'museums', - 'goose', - 'rams', - 'artwork', - 'thongs', - 'reveler', - 'dweeb', - 'scale', - 'distress', - 'looms', - 'burial', - 'native', - 'trio', - 'spirits', - 'refuse', - 'worrier', - 'rave', - 'mercy', - 'prong', - 'plethora', - 'mojo', - 'captives', - 'edicts', - 'creamer', - 'grips', - 'devices', - 'hobo', - 'dips', - 'irony', - 'dominion', - 'kilo', - 'manicure', - 'sequel', - 'locust', - 'yew', - 'pills', - 'penalty', - 'veggie', - 'airbag', - 'charge', - 'lance', - 'safe', - 'regalia', - 'kindling', - 'gent', - 'cloud', - 'volley', - 'democrats', - 'marks', - 'flutes', - 'fracture', - 'crepe', - 'fork', - 'jails', - 'union', - 'seltzer', - 'bores', - 'coats', - 'motel', - 'fairies', - 'uncle', - 'garage', - 'expense', - 'role', - 'context', - 'form', - 'brush', - 'puma', - 'thief', - 'snare', - 'pixy', - 'pageant', - 'hedge', - 'colonies', - 'bishops', - 'vessel', - 'glimpses', - 'peanuts', - 'ordeal', - 'cakes', - 'miles', - 'dogmas', - 'slang', - 'pranks', - 'sibling', - 'laxative', - 'gnat', - 'dip', - 'fuel', - 'cone', - 'edit', - 'imprint', - 'musk', - 'derby', - 'crush', - 'ticks', - 'abstinence', - 'statues', - 'fidelity', - 'rein', - 'swans', - 'poodle', - 'cads', - 'skunks', - 'togas', - 'gutters', - 'comics', - 'apology', - 'lobbies', - 'bundle', - 'helpline', - 'cook', - 'hunter', - 'idol', - 'loader', - 'blow', - 'relative', - 'feminism', - 'sword', - 'rugs', - 'corner', - 'gumball', - 'sail', - 'caps', - 'rarity', - 'putt', - 'class', - 'squads', - 'tourist', - 'mourners', - 'goblets', - 'scooter', - 'shark', - 'tuition', - 'card', - 'wallet', - 'luge', - 'alcohol', - 'swing', - 'studio', - 'arson', - 'player', - 'convent', - 'jogging', - 'disc', - 'hide', - 'babes', - 'bridges', - 'switch', - 'thunder', - 'spearman', - 'bonuses', - 'daddy', - 'sorcery', - 'cookbook', - 'net', - 'selector', - 'pelican', - 'hubcap', - 'umps', - 'ticket', - 'blizzard', - 'escape', - 'phonics', - 'handball', - 'dupe', - 'ink', - 'prongs', - 'lamps', - 'rocks', - 'snap', - 'inlay', - 'hatbox', - 'quakes', - 'scalp', - 'spare', - 'canister', - 'echo', - 'award', - 'pitcher', - 'robots', - 'fringe', - 'dregs', - 'wines', - 'gust', - 'joey', - 'conduct', - 'gyration', - 'night', - 'cab', - 'bees', - 'entries', - 'bagel', - 'ivory', - 'squire', - 'hairdo', - 'energy', - 'talent', - 'agency', - 'elder', - 'bonfires', - 'bacon', - 'dues', - 'plantation', - 'joust', - 'charter', - 'occasion', - 'icing', - 'salad', - 'walk', - 'clamp', - 'diaper', - 'scull', - 'hosts', - 'spuds', - 'stall', - 'mines', - 'wives', - 'cortex', - 'heroes', - 'clasps', - 'lane', - 'paint', - 'snobs', - 'farms', - 'sweep', - 'tunnel', - 'cups', - 'bear', - 'fangs', - 'cruelty', - 'moans', - 'proof', - 'swats', - 'owners', - 'wasabi', - 'riots', - 'cheese', - 'photon', - 'militia', - 'gurus', - 'sparks', - 'chisel', - 'borough', - 'scream', - 'effort', - 'trifles', - 'edge', - 'metro', - 'rats', - 'mediums', - 'novice', - 'internet', - 'missile', - 'manhood', - 'petal', - 'spoilage', - 'bread', - 'oil', - 'curry', - 'sills', - 'bit', - 'gun', - 'festival', - 'scrooge', - 'quality', - 'escort', - 'dub', - 'dares', - 'slot', - 'bangs', - 'rite', - 'socket', - 'candle', - 'fairy', - 'harpy', - 'anthems', - 'damages', - 'hound', - 'leaf', - 'serf', - 'splice', - 'profit', - 'fingers', - 'gout', - 'flaxseed', - 'lust', - 'feast', - 'surprise', - 'trolls', - 'zodiacs', - 'scoundrel', - 'activists', - 'deity', - 'sloth', - 'bottles', - 'limo', - 'hamlet', - 'flash', - 'comet', - 'salon', - 'garbage', - 'entree', - 'picnics', - 'cursor', - 'fabrics', - 'kidney', - 'dancers', - 'pellet', - 'scopes', - 'gulp', - 'doggy', - 'porch', - 'lute', - 'junction', - 'chill', - 'ammo', - 'letters', - 'codes', - 'snake', - 'disease', - 'sympathy', - 'mishap', - 'sprains', - 'ripple', - 'crusaders', - 'baby', - 'facility', - 'courier', - 'finale', - 'writing', - 'fragrance', - 'fees', - 'mocker', - 'earwig', - 'tantrum', - 'hacking', - 'flatware', - 'vicinity', - 'minks', - 'pram', - 'session', - 'earful', - 'shunt', - 'grudge', - 'straw', - 'playtime', - 'girth', - 'straps', - 'exhaust', - 'pushover', - 'can', - 'bits', - 'terror', - 'metal', - 'chariot', - 'men', - 'terms', - 'trombone', - 'bias', - 'concepts', - 'quake', - 'purl', - 'insults', - 'tipper', - 'manger', - 'keyboard', - 'pope', - 'coeds', - 'lobes', - 'oafs', - 'reader', - 'views', - 'orders', - 'empress', - 'activist', - 'jungles', - 'severity', - 'brail', - 'doctrine', - 'tractor', - 'rodeo', - 'shelves', - 'rod', - 'toga', - 'lips', - 'bend', - 'sums', - 'darkrooms', - 'grunge', - 'bite', - 'carving', - 'gang', - 'heel', - 'rotors', - 'couples', - 'lanes', - 'dissenter', - 'groups', - 'balconies', - 'clods', - 'monogram', - 'beard', - 'genres', - 'backhoe', - 'plums', - 'alumni', - 'schedule', - 'taper', - 'whim', - 'riff', - 'stories', - 'peer', - 'chop', - 'statutes', - 'posers', - 'slacks', - 'burro', - 'urns', - 'adversary', - 'cage', - 'blocks', - 'figs', - 'acts', - 'well', - 'light', - 'reseller', - 'weight', - 'ratios', - 'heathen', - 'whisk', - 'plan', - 'babe', - 'prose', - 'puff', - 'jokers', - 'colonel', - 'puppet', - 'guise', - 'retainer', - 'subplot', - 'rodent', - 'underdog', - 'diva', - 'pugs', - 'glut', - 'fighter', - 'aprons', - 'dare', - 'clones', - 'gravy', - 'sender', - 'gate', - 'muff', - 'snowsuit', - 'devourer', - 'gallon', - 'affair', - 'nuke', - 'oboe', - 'mirrors', - 'timothy', - 'ricotta', - 'spool', - 'pear', - 'locket', - 'fact', - 'village', - 'laptop', - 'mower', - 'hair', - 'revolver', - 'brawls', - 'ankle', - 'dots', - 'hour', - 'grill', - 'chin', - 'recovery', - 'result', - 'helms', - 'stags', - 'starlet', - 'fallacy', - 'wisps', - 'opiate', - 'flowers', - 'thrones', - 'bout', - 'farmland', - 'contacts', - 'trickery', - 'footwear', - 'cat', - 'briefs', - 'frill', - 'link', - 'pedal', - 'flyover', - 'path', - 'stews', - 'paradox', - 'reactor', - 'version', - 'push', - 'salts', - 'quilt', - 'output', - 'pikes', - 'affairs', - 'conscript', - 'lock', - 'landfill', - 'superman', - 'apache', - 'fraction', - 'pupils', - 'gloss', - 'wafer', - 'nurse', - 'air', - 'habitat', - 'repeater', - 'mars', - 'deals', - 'play', - 'fob', - 'mothball', - 'chefs', - 'victor', - 'bingo', - 'footsie', - 'passcode', - 'tragedy', - 'botanists', - 'tasks', - 'friar', - 'ramps', - 'glory', - 'stripe', - 'wolves', - 'muscle', - 'penguin', - 'upside', - 'factoid', - 'rubble', - 'pancreas', - 'festivals', - 'triumph', - 'refining', - 'fence', - 'threat', - 'antlers', - 'tint', - 'giant', - 'father', - 'flirts', - 'gear', - 'syrup', - 'pandas', - 'hurler', - 'theft', - 'daze', - 'haggler', - 'adhesive', - 'stretch', - 'removal', - 'harp', - 'isle', - 'gratuity', - 'fink', - 'families', - 'sandbank', - 'tapioca', - 'onus', - 'boats', - 'laces', - 'incense', - 'sizzle', - 'rain', - 'pith', - 'winter', - 'flakes', - 'glee', - 'smashup', - 'tides', - 'poles', - 'skeet', - 'petals', - 'reward', - 'pothole', - 'brig', - 'renderer', - 'fritter', - 'thistle', - 'gasoline', - 'lynx', - 'jury', - 'spout', - 'hoax', - 'roars', - 'stain', - 'razor', - 'power', - 'bio', - 'moments', - 'creel', - 'spud', - 'tears', - 'luster', - 'uptake', - 'domains', - 'balloon', - 'subs', - 'pueblo', - 'moan', - 'retiree', - 'ring', - 'wing', - 'symptom', - 'ceiling', - 'warranty', - 'strolls', - 'grimace', - 'trilogy', - 'tool', - 'images', - 'disco', - 'ump', - 'nirvana', - 'bet', - 'phantom', - 'hags', - 'axle', - 'serving', - 'plow', - 'reach', - 'gym', - 'pelt', - 'caves', - 'duet', - 'pouch', - 'homage', - 'senate', - 'roger', - 'solvent', - 'sardine', - 'boot', - 'elective', - 'hulks', - 'shelter', - 'gophers', - 'resource', - 'baboon', - 'flooding', - 'trend', - 'album', - 'beetle', - 'spindle', - 'coma', - 'flora', - 'scripts', - 'oils', - 'scar', - 'shimmy', - 'torso', - 'population', - 'sandworm', - 'malt', - 'honeybee', - 'pauper', - 'pears', - 'letdown', - 'tavern', - 'squall', - 'crane', - 'nooks', - 'lake', - 'shelving', - 'gulls', - 'naming', - 'cameras', - 'mesa', - 'character', - 'strobe', - 'number', - 'gore', - 'indexes', - 'heat', - 'cougar', - 'placard', - 'tribute', - 'murmurs', - 'junta', - 'cake', - 'ad', - 'reason', - 'diapers', - 'jellies', - 'squabble', - 'contours', - 'rogue', - 'stereo', - 'twerp', - 'slog', - 'swag', - 'duchess', - 'waif', - 'error', - 'customs', - 'curb', - 'crusts', - 'wounds', - 'gardens', - 'wrecker', - 'volcano', - 'bandanna', - 'feasts', - 'punishment', - 'needs', - 'sedation', - 'dance', - 'hinge', - 'handle', - 'advisor', - 'bargain', - 'flipper', - 'car', - 'toolbox', - 'stub', - 'barista', - 'lair', - 'almond', - 'panda', - 'courses', - 'cokes', - 'playlist', - 'domino', - 'pauses', - 'lox', - 'gaskets', - 'discovery', - 'welds', - 'fervor', - 'crypts', - 'vote', - 'ships', - 'fame', - 'volume', - 'audio', - 'fear', - 'browser', - 'hail', - 'streams', - 'nod', - 'punch', - 'novices', - 'breeches', - 'shrieks', - 'dribble', - 'brakes', - 'progeny', - 'softy', - 'baseball', - 'march', - 'hardhat', - 'rims', - 'meadow', - 'falls', - 'word', - 'gusts', - 'dude', - 'pip', - 'marmot', - 'magic', - 'velocity', - 'mitt', - 'outage', - 'handgun', - 'relic', - 'chapter', - 'steaks', - 'pawns', - 'upheaval', - 'towns', - 'famine', - 'crashes', - 'chai', - 'squiggle', - 'headlock', - 'quiver', - 'clasp', - 'oath', - 'wiz', - 'malts', - 'vans', - 'gambling', - 'barbarian', - 'decibels', - 'handset', - 'naturist', - 'florist', - 'larks', - 'barges', - 'bonds', - 'bomber', - 'bowls', - 'robotics', - 'enemy', - 'ports', - 'steak', - 'polls', - 'randy', - 'omelet', - 'solids', - 'lodges', - 'pixel', - 'loads', - 'oyster', - 'crimps', - 'theist', - 'wails', - 'heroics', - 'genre', - 'herb', - 'pork', - 'reproach', - 'bevel', - 'seashore', - 'rematch', - 'lama', - 'adage', - 'tidbit', - 'innovation', - 'home', - 'twang', - 'breast', - 'vagrant', - 'pagan', - 'nudge', - 'hoops', - 'ribbon', - 'ancestry', - 'hacker', - 'disgrace', - 'jot', - 'olive', - 'trends', - 'lead', - 'seas', - 'fishhook', - 'sale', - 'costume', - 'sill', - 'tong', - 'nosh', - 'monument', - 'wings', - 'market', - 'sternum', - 'freeware', - 'roster', - 'luncheon', - 'bliss', - 'fire', - 'cube', - 'pizzas', - 'ears', - 'vegan', - 'belch', - 'brie', - 'pruning', - 'carts', - 'wad', - 'beavers', - 'hardener', - 'axles', - 'totem', - 'chain', - 'try', - 'vice', - 'ravine', - 'goblet', - 'bid', - 'spelt', - 'wit', - 'ghost', - 'chowder', - 'cries', - 'glimpse', - 'mystery', - 'curbs', - 'brake', - 'faults', - 'dealers', - 'turkey', - 'sanctuary', - 'eyelid', - 'tanks', - 'members', - 'mailbox', - 'yelps', - 'forge', - 'firs', - 'sight', - 'senators', - 'tenant', - 'province', - 'debts', - 'edges', - 'leg', - 'mailroom', - 'breed', - 'mildew', - 'treaty', - 'jays', - 'puffin', - 'duplex', - 'herring', - 'cardinal', - 'mole', - 'promoter', - 'woodland', - 'meatball', - 'shower', - 'yeti', - 'disk', - 'cartoons', - 'byte', - 'peaches', - 'mirth', - 'ode', - 'gift', - 'gallery', - 'cot', - 'ointment', - 'jogs', - 'bran', - 'vicar', - 'fats', - 'lids', - 'squeak', - 'band', - 'tick', - 'oracle', - 'hats', - 'van', - 'turmoil', - 'chums', - 'frown', - 'cysts', - 'dumpling', - 'vendors', - 'sorority', - 'junkies', - 'panic', - 'moods', - 'amputee', - 'vitality', - 'deaths', - 'myths', - 'dusk', - 'slave', - 'wasps', - 'eggplant', - 'equation', - 'issues', - 'tummy', - 'focus', - 'gland', - 'hopes', - 'audience', - 'suction', - 'luck', - 'mummy', - 'smirk', - 'oaf', - 'splendor', - 'tutu', - 'pendant', - 'estrogen', - 'dummy', - 'rung', - 'pant', - 'makeup', - 'chemist', - 'journey', - 'boxer', - 'hood', - 'stripes', - 'marbling', - 'earphone', - 'theories', - 'walnuts', - 'eggshell', - 'loop', - 'vents', - 'platypus', - 'bob', - 'rider', - 'encore', - 'operas', - 'doodle', - 'ferry', - 'shim', - 'apricot', - 'prints', - 'stoops', - 'estimate', - 'snort', - 'rakes', - 'grains', - 'outpour', - 'petunia', - 'smack', - 'rubber', - 'force', - 'concept', - 'brisket', - 'atheist', - 'quota', - 'bundles', - 'chow', - 'furniture', - 'passes', - 'mast', - 'calcium', - 'chip', - 'jalapeno', - 'empire', - 'grout', - 'stools', - 'feet', - 'gosling', - 'rituals', - 'cadets', - 'extent', - 'roll', - 'keys', - 'frames', - 'smog', - 'violin', - 'cumin', - 'studs', - 'floor', - 'lockers', - 'recon', - 'city', - 'iguana', - 'tours', - 'thong', - 'daughter', - 'alpaca', - 'crop', - 'jammer', - 'plumbing', - 'blast', - 'cottages', - 'limeade', - 'lizard', - 'leash', - 'soaps', - 'scraps', - 'networks', - 'mane', - 'grandson', - 'detox', - 'cow', - 'dock', - 'admiral', - 'limit', - 'jock', - 'archery', - 'dollars', - 'colors', - 'swimwear', - 'tarps', - 'risk', - 'bolt', - 'inbox', - 'bee', - 'glades', - 'beaks', - 'tablet', - 'foes', - 'ransom', - 'deacon', - 'tour', - 'delay', - 'impacts', - 'paste', - 'mountains', - 'dragon', - 'wrist', - 'stench', - 'grills', - 'toggle', - 'noise', - 'tripods', - 'wish', - 'chef', - 'thinker', - 'chunks', - 'trash', - 'spell', - 'safety', - 'credential', - 'flake', - 'donation', - 'bonnets', - 'designer', - 'egret', - 'scratch', - 'worker', - 'outdoors', - 'suns', - 'jetty', - 'llama', - 'mimosa', - 'flypaper', - 'patina', - 'trunk', - 'tabasco', - 'distance', - 'blimp', - 'ridge', - 'prophecy', - 'yip', - 'scan', - 'actresses', - 'boys', - 'digit', - 'suitcase', - 'cranes', - 'sixties', - 'toucan', - 'landlady', - 'basket', - 'kiln', - 'zombies', - 'grandfather', - 'rye', - 'lawns', - 'kitty', - 'slipper', - 'robes', - 'hands', - 'flair', - 'drain', - 'pansy', - 'archive', - 'dikes', - 'mascara', - 'hooves', - 'crow', - 'footers', - 'cult', - 'impulse', - 'ingot', - 'pottery', - 'desk', - 'bong', - 'rhino', - 'clarinets', - 'fires', - 'vows', - 'bubble', - 'manhole', - 'cut', - 'ski', - 'chick', - 'produce', - 'belly', - 'chainsaw', - 'eel', - 'glider', - 'copies', - 'dugout', - 'total', - 'panther', - 'hurdle', - 'scarcity', - 'decree', - 'kinsman', - 'goldfish', - 'peg', - 'expo', - 'cog', - 'bin', - 'cooks', - 'wills', - 'ego', - 'delta', - 'ounce', - 'militant', - 'chemists', - 'voters', - 'pig', - 'webs', - 'niece', - 'cape', - 'clinics', - 'nip', - 'prisoner', - 'yoke', - 'traumas', - 'pillow', - 'matter', - 'microphone', - 'loans', - 'tripod', - 'reject', - 'slush', - 'crawlers', - 'fluids', - 'protector', - 'braid', - 'climate', - 'preset', - 'wail', - 'staple', - 'reels', - 'node', - 'taunt', - 'jurist', - 'galley', - 'mirror', - 'artifact', - 'newton', - 'diamonds', - 'skirmish', - 'digs', - 'zone', - 'gash', - 'urgency', - 'vices', - 'oaths', - 'flood', - 'purses', - 'buffer', - 'ladle', - 'aces', - 'lava', - 'clove', - 'piano', - 'caption', - 'tedium', - 'janitors', - 'shed', - 'almanac', - 'postbox', - 'meerkat', - 'sandpit', - 'plate', - 'grenade', - 'cello', - 'hose', - 'colas', - 'hit', - 'office', - 'mooch', - 'squatter', - 'pistol', - 'rake', - 'cyclists', - 'hazards', - 'anteater', - 'job', - 'peck', - 'medal', - 'pianist', - 'bozo', - 'jaw', - 'pad', - 'temple', - 'stooge', - 'stop', - 'snipers', - 'purist', - 'respect', - 'sombrero', - 'cops', - 'trimmer', - 'reed', - 'krypton', - 'objective', - 'overcoat', - 'balcony', - 'tribes', - 'humps', - 'ruse', - 'womb', - 'venture', - 'ignition', - 'rehab', - 'cramp', - 'gloves', - 'anthills', - 'lawyer', - 'gatherer', - 'bird', - 'refinery', - 'crafter', - 'tic', - 'ponies', - 'mall', - 'magician', - 'trickle', - 'escapade', - 'falcons', - 'drops', - 'galleria', - 'daggers', - 'sable', - 'tacks', - 'podium', - 'pinch', - 'crusader', - 'spoke', - 'addict', - 'lilac', - 'bulges', - 'screwdriver', - 'panty', - 'unifier', - 'horse', - 'chord', - 'snafu', - 'pumice', - 'yak', - 'shotgun', - 'teacup', - 'workers', - 'bases', - 'sear', - 'llamas', - 'rolls', - 'liquor', - 'cranks', - 'splices', - 'kinship', - 'surgery', - 'coaches', - 'scrap', - 'brim', - 'yam', - 'ledge', - 'poetry', - 'country', - 'sodas', - 'speeds', - 'sensors', - 'script', - 'ovary', - 'curling', - 'opacity', - 'rules', - 'rum', - 'nutcase', - 'groans', - 'stoppage', - 'ankles', - 'oak', - 'culprit', - 'pucker', - 'earl', - 'bunker', - 'divot', - 'kazoo', - 'balls', - 'rockfish', - 'roof', - 'healer', - 'infidel', - 'burns', - 'mechanism', - 'example', - 'dander', - 'grief', - 'tuxedo', - 'claim', - 'undead', - 'felt', - 'steed', - 'tonic', - 'casket', - 'sari', - 'fan', - 'peace', - 'fantasy', - 'kerchief', - 'justice', - 'crags', - 'engine', - 'cardigan', - 'pattern', - 'lentil', - 'duration', - 'motive', - 'figure', - 'retread', - 'mortuary', - 'pooch', - 'plumber', - 'coast', - 'pennant', - 'loon', - 'works', - 'medicine', - 'types', - 'notices', - 'nanny', - 'algae', - 'stamina', - 'carbs', - 'chum', - 'feedback', - 'octaves', - 'buttons', - 'crock', - 'mayo', - 'anatomy', - 'sinners', - 'desires', - 'nunnery', - 'hoe', - 'linguini', - 'plaza', - 'teabag', - 'marlin', - 'tools', - 'parody', - 'doubts', - 'decline', - 'rears', - 'defect', - 'hurdles', - 'aquarium', - 'tamale', - 'monitor', - 'runway', - 'yells', - 'rewards', - 'view', - 'sandals', - 'sewer', - 'ovaries', - 'detours', - 'dam', - 'auction', - 'trances', - 'porthole', - 'inactivity', - 'lavender', - 'lens', - 'shows', - 'thigh', - 'peon', - 'poison', - 'misinformation', - 'filth', - 'zeros', - 'warrior', - 'lilt', - 'prefix', - 'bulge', - 'charcoal', - 'sleds', - 'moat', - 'arena', - 'prods', - 'quarters', - 'file', - 'preacher', - 'riptide', - 'kettles', - 'resort', - 'fuses', - 'couple', - 'sting', - 'daffodil', - 'coworker', - 'bells', - 'pickle', - 'hardware', - 'crouton', - 'lore', - 'blitz', - 'debate', - 'elitism', - 'armpit', - 'omens', - 'neuron', - 'accident', - 'delirium', - 'scab', - 'roach', - 'mazes', - 'pushpin', - 'sprite', - 'shore', - 'slurp', - 'souls', - 'voter', - 'heights', - 'stroller', - 'probes', - 'basins', - 'elves', - 'ending', - 'defeats', - 'pension', - 'forces', - 'strip', - 'ruts', - 'quarks', - 'auto', - 'bruises', - 'subset', - 'dialog', - 'passerby', - 'altar', - 'exporter', - 'skid', - 'golf', - 'leeches', - 'futons', - 'crown', - 'splinter', - 'cavalry', - 'hay', - 'blooper', - 'prisms', - 'opponent', - 'chirp', - 'prawns', - 'maze', - 'lands', - 'husbands', - 'camps', - 'glasses', - 'camera', - 'dress', - 'fez', - 'zap', - 'privacy', - 'ping', - 'showcase', - 'kale', - 'cent', - 'beets', - 'preamble', - 'urn', - 'granny', - 'cache', - 'raises', - 'hulk', - 'fields', - 'griddle', - 'gerbil', - 'rumor', - 'waves', - 'tenor', - 'wreck', - 'deputies', - 'magazine', - 'parkas', - 'flattery', - 'ox', - 'chests', - 'blanket', - 'alehouse', - 'ravines', - 'princess', - 'necks', - 'women', - 'raisins', - 'advice', - 'swarms', - 'samba', - 'daytime', - 'renewal', - 'jolts', - 'veto', - 'shorts', - 'promos', - 'emperor', - 'intro', - 'belt', - 'scribe', - 'basil', - 'avatar', - 'lamb', - 'agencies', - 'bog', - 'wasp', - 'grinch', - 'sax', - 'ward', - 'quadrant', - 'tomahawk', - 'sip', - 'string', - 'knocks', - 'cover', - 'destiny', - 'hydrant', - 'bologna', - 'cobras', - 'dorks', - 'stallion', - 'hangover', - 'molds', - 'sheep', - 'scum', - 'lairs', - 'maize', - 'thrower', - 'boutique', - 'nicotine', - 'goal', - 'cigars', - 'oracles', - 'castle', - 'boa', - 'ladders', - 'corn', - 'brows', - 'sum', - 'viaduct', - 'apostle', - 'observer', - 'slugs', - 'groin', - 'grip', - 'purifier', - 'neck', - 'reentry', - 'nebula', - 'wombs', - 'tech', - 'cartons', - 'party', - 'lunacy', - 'earmark', - 'smoke', - 'haven', - 'bone', - 'comments', - 'disposal', - 'chimp', - 'minx', - 'slab', - 'bulls', - 'neutron', - 'purse', - 'order', - 'setting', - 'threats', - 'skiff', - 'monotype', - 'psychic', - 'zeal', - 'longbow', - 'computer', - 'surplus', - 'drafts', - 'filters', - 'maverick', - 'lion', - 'atlas', - 'pump', - 'clique', - 'register', - 'scrubber', - 'measles', - 'tests', - 'trusts', - 'jungle', - 'sniper', - 'rugby', - 'salvage', - 'composers', - 'capsules', - 'part', - 'look', - 'theism', - 'bug', - 'oblivion', - 'splash', - 'owl', - 'employer', - 'flasks', - 'skewers', - 'clogs', - 'support', - 'pegs', - 'tee', - 'urge', - 'sis', - 'hive', - 'rifle', - 'lung', - 'week', - 'fuzz', - 'badge', - 'mowers', - 'grubs', - 'genie', - 'provider', - 'antacids', - 'colts', - 'garnet', - 'taxis', - 'comets', - 'tarp', - 'wok', - 'comma', - 'waiter', - 'gourd', - 'clues', - 'clients', - 'yowls', - 'bookmark', - 'cask', - 'crease', - 'cuddle', - 'forks', - 'torch', - 'wedding', - 'magpie', - 'librarian', - 'sheets', - 'toad', - 'crimes', - 'demon', - 'thrush', - 'bean', - 'area', - 'falcon', - 'crevice', - 'eras', - 'handwork', - 'atrium', - 'odors', - 'shrapnel', - 'soup', - 'girdle', - 'stat', - 'rate', - 'cash', - 'ding', - 'mutation', - 'bins', - 'pout', - 'gangway', - 'violence', - 'want', - 'casts', - 'caviar', - 'tarmac', - 'substance', - 'steam', - 'brute', - 'whiskey', - 'gasket', - 'vitamin', - 'helmets', - 'flub', - 'felons', - 'tinkle', - 'appetite', - 'liquid', - 'lashes', - 'forms', - 'liar', - 'remnant', - 'cider', - 'tires', - 'spools', - 'section', - 'accusation', - 'curls', - 'dome', - 'tether', - 'throne', - 'virtues', - 'tomes', - 'agenda', - 'foxes', - 'prison', - 'pamphlet', - 'biped', - 'cinder', - 'turtle', - 'clicker', - 'foxhole', - 'fusion', - 'brunch', - 'amulet', - 'suspect', - 'charger', - 'yurts', - 'pie', - 'movers', - 'events', - 'oboes', - 'cicada', - 'hotel', - 'galaxies', - 'peat', - 'muss', - 'criteria', - 'dish', - 'boxes', - 'revival', - 'varsity', - 'fridge', - 'cougars', - 'bind', - 'armful', - 'science', - 'canteen', - 'gizzard', - 'crutch', - 'ethanol', - 'handoff', - 'gallons', - 'sprawl', - 'exits', - 'hilt', - 'crystals', - 'cosmos', - 'logs', - 'corral', - 'parka', - 'researcher', - 'cousin', - 'nephew', - 'voice', - 'escapist', - 'earring', - 'does', - 'taboos', - 'trail', - 'forgery', - 'snowplow', - 'soap', - 'memory', - 'fobs', - 'players', - 'self', - 'attic', - 'rump', - 'earwax', - 'puritan', - 'jocks', - 'scorpion', - 'duckling', - 'starch', - 'heaters', - 'glob', - 'crosses', - 'scare', - 'leader', - 'youth', - 'hearts', - 'jailers', - 'tropics', - 'digits', - 'kitchen', - 'hives', - 'kook', - 'molar', - 'custard', - 'spleen', - 'pushup', - 'paddle', - 'carafe', - 'dike', - 'tarts', - 'dowry', - 'insult', - 'paprika', - 'doom', - 'sides', - 'attorney', - 'sips', - 'climb', - 'kitchens', - 'battle', - 'banners', - 'bank', - 'lien', - 'crack', - 'notes', - 'baggage', - 'whisper', - 'tactics', - 'identity', - 'polygon', - 'cord', - 'leaps', - 'slabs', - 'record', - 'logos', - 'names', - 'swamp', - 'brims', - 'tub', - 'slug', - 'overtone', - 'vow', - 'hickory', - 'epiphany', - 'equinox', - 'giants', - 'meme', - 'dye', - 'bags', - 'joint', - 'salons', - 'plows', - 'bill', - 'satire', - 'tiaras', - 'gypsy', - 'face', - 'nouns', - 'mists', - 'spin', - 'iris', - 'siding', - 'pasture', - 'beaver', - 'clothing', - 'contest', - 'jarl', - 'roundup', - 'demeanor', - 'icons', - 'twigs', - 'post', - 'jitters', - 'speller', - 'sanctity', - 'gale', - 'custody', - 'flings', - 'prams', - 'porridge', - 'steps', - 'grids', - 'rook', - 'looter', - 'pastime', - 'reams', - 'curtsy', - 'bra', - 'tease', - 'flow', - 'birth', - 'skits', - 'pagers', - 'pebbles', - 'walnut', - 'check', - 'mobster', - 'yodel', - 'jars', - 'visit', - 'rubbers', - 'elevator', - 'contract', - 'candy', - 'thunderbolt', - 'swig', - 'savior', - 'railcar', - 'senders', - 'edibles', - 'bead', - 'thimble', - 'readers', - 'motion', - 'sulfide', - 'kelp', - 'rebels', - 'stains', - 'pits', - 'visas', - 'dweller', - 'pedigree', - 'jokes', - 'outpost', - 'thugs', - 'serpents', - 'spares', - 'sprites', - 'skull', - 'brigade', - 'leotard', - 'scrabble', - 'experts', - 'humor', - 'freebie', - 'ladybug', - 'commerce', - 'dismay', - 'seat', - 'document', - 'acting', - 'flags', - 'cough', - 'hip', - 'crust', - 'leap', - 'cornhusk', - 'coupons', - 'timber', - 'sonata', - 'punks', - 'vet', - 'offer', - 'wrester', - 'servers', - 'garland', - 'twine', - 'unit', - 'messes', - 'favors', - 'salary', - 'niche', - 'singer', - 'blogs', - 'purr', - 'squash', - 'journal', - 'freak', - 'papa', - 'pasta', - 'ceremony', - 'mauls', - 'model', - 'hanger', - 'scam', - 'gulps', - 'stanza', - 'dagger', - 'sensor', - 'plunder', - 'bikes', - 'agate', - 'frock', - 'curves', - 'corgi', - 'creek', - 'cufflink', - 'toast', - 'nations', - 'dads', - 'thrills', - 'kitten', - 'swath', - 'tombs', - 'pecks', - 'crick', - 'beam', - 'quicksand', - 'washer', - 'cues', - 'deeds', - 'grunts', - 'lettuce', - 'firms', - 'locks', - 'compounds', - 'cycling', - 'flukes', - 'consoles', - 'abdomens', - 'aliment', - 'platform', - 'squeal', - 'beast', - 'loves', - 'guild', - 'gelatin', - 'slates', - 'fig', - 'rice', - 'stalks', - 'loan', - 'squirt', - 'hangar', - 'cruises', - 'jowls', - 'knack', - 'club', - 'decency', - 'linens', - 'periods', - 'criminal', - 'harmony', - 'threads', - 'creed', - 'fists', - 'board', - 'minefield', - 'sulfur', - 'stew', - 'wetsuit', - 'recliner', - 'yield', - 'alerts', - 'cobs', - 'drizzle', - 'group', - 'runs', - 'words', - 'jaguars', - 'magazines', - 'bride', - 'realm', - 'stair', - 'losses', - 'water', - 'torque', - 'synopsis', - 'springs', - 'skirt', - 'divinity', - 'ore', - 'seeds', - 'tree', - 'toss', - 'peel', - 'skinhead', - 'fish', - 'envelopes', - 'cans', - 'paw', - 'studies', - 'deskwork', - 'anise', - 'starfish', - 'problem', - 'expedition', - 'introvert', - 'spots', - 'honor', - 'lodge', - 'shots', - 'space', - 'boy', - 'bellies', - 'honey', - 'friends', - 'reflux', - 'kink', - 'tapestry', - 'gems', - 'span', - 'growls', - 'cereal', - 'show', - 'irritant', - 'packs', - 'rental', - 'veils', - 'postcard', - 'roads', - 'infantry', - 'bongo', - 'shacks', - 'efforts', - 'imps', - 'locale', - 'roadway', - 'chat', - 'label', - 'legwork', - 'mound', - 'legroom', - 'rotor', - 'times', - 'immunity', - 'roast', - 'wells', - 'dinners', - 'banjos', - 'twitch', - 'vacation', - 'stick', - 'moonwalk', - 'passport', - 'smudges', - 'venues', - 'chap', - 'synergy', - 'morals', - 'ride', - 'tutors', - 'tar', - 'bandage', - 'morale', - 'cosigner', - 'boars', - 'craving', - 'delicacy', - 'cables', - 'branch', - 'radar', - 'sublevel', - 'planet', - 'dirk', - 'grade', - 'bag', - 'serve', - 'remedies', - 'kayaks', - 'thrust', - 'rebates', - 'spas', - 'beauty', - 'skies', - 'abs', - 'heroism', - 'creeks', - 'arsonist', - 'arrival', - 'swimsuit', - 'cousins', - 'viewer', - 'pads', - 'labs', - 'launch', - 'purge', - 'twister', - 'fiddles', - 'pile', - 'moocher', - 'south', - 'tribe', - 'junk', - 'verbs', - 'spotter', - 'villages', - 'name', - 'shock', - 'breasts', - 'cob', - 'dune', - 'bans', - 'fronds', - 'worm', - 'anchors', - 'deceit', - 'bleach', - 'moderator', - 'arch', - 'axes', - 'coasts', - 'dictator', - 'tin', - 'jersey', - 'kinfolk', - 'dayroom', - 'outbreak', - 'felon', - 'cycle', - 'soloist', - 'mosaic', - 'ends', - 'mushroom', - 'runner', - 'pepper', - 'boots', - 'headwind', - 'bicep', - 'mister', - 'berms', - 'outtakes', - 'ladles', - 'stalk', - 'dams', - 'ram', - 'briar', - 'burp', - 'belts', - 'mafia', - 'noose', - 'brooms', - 'frogs', - 'servant', - 'tail', - 'matchbox', - 'chart', - 'worms', - 'gut', - 'shill', - 'opal', - 'gazebo', - 'watch', - 'snout', - 'step', - 'doubling', - 'jarhead', - 'dreams', - 'jargon', - 'biscuit', - 'critic', - 'zebras', - 'forges', - 'chemical', - 'angel', - 'cuts', - 'links', - 'razors', - 'anteaters', - 'mints', - 'procurer', - 'fans', - 'champions', - 'hub', - 'shank', - 'angler', - 'taxation', - 'rebirth', - 'creeps', - 'grocer', - 'wax', - 'nerds', - 'fake', - 'man', - 'conflicts', - 'teen', - 'thermos', - 'oceans', - 'beach', - 'brink', - 'presto', - 'barley', - 'vodka', - 'history', - 'bore', - 'laugh', - 'dill', - 'slobs', - 'cockpit', - 'donor', - 'shin', - 'hexagons', - 'bluff', - 'mug', - 'granola', - 'hermits', - 'crusade', - 'norm', - 'game', - 'escargot', - 'sharpie', - 'powers', - 'turner', - 'echoes', - 'cleavage', - 'lid', - 'ribs', - 'corsage', - 'latitude', - 'upstairs', - 'manes', - 'tricycle', - 'daisy', - 'sofas', - 'reviver', - 'leak', - 'storage', - 'impulses', - 'plays', - 'bud', - 'department', - 'pretext', - 'mat', - 'rep', - 'pact', - 'fryer', - 'hammock', - 'bull', - 'jests', - 'way', - 'spokes', - 'titbit', - 'dwelling', - 'crab', - 'cobra', - 'hobbies', - 'puns', - 'spur', - 'docks', - 'rudder', - 'jog', - 'twins', - 'historic', - 'trench', - 'managers', - 'camels', - 'fiddle', - 'noises', - 'cocoon', - 'zeppelin', - 'sulfite', - 'omnivore', - 'jukebox', - 'rockets', - 'fluke', - 'newt', - 'cinch', - 'scanner', - 'siesta', - 'blur', - 'parcels', - 'clam', - 'farmers', - 'blemishes', - 'wage', - 'daybed', - 'brawn', - 'tacking', - 'parmesan', - 'hut', - 'mugs', - 'tines', - 'chains', - 'decoy', - 'scope', - 'hue', - 'quark', - 'samples', - 'tables', - 'prune', - 'judo', - 'lesson', - 'fajita', - 'schools', - 'school', - 'blade', - 'antler', - 'tip', - 'ship', - 'thud', - 'karma', - 'sushi', - 'turban', - 'pebble', - 'flanks', - 'qualm', - 'advocate', - 'ghoul', - 'void', - 'artisan', - 'pea', - 'villain', - 'hull', - 'lasers', - 'writer', - 'pastrami', - 'sugar', - 'diet', - 'equipment', - 'sprout', - 'snore', - 'room', - 'columns', - 'septum', - 'stuffing', - 'grit', - 'earth', - 'ninjas', - 'passage', - 'tot', - 'headsman', - 'recap', - 'duels', - 'subsidy', - 'particle', - 'renegade', - 'doorknob', - 'rim', - 'lyrics', - 'combo', - 'modes', - 'wheel', - 'place', - 'dimple', - 'bubbles', - 'ball', - 'blame', - 'tweak', - 'vandal', - 'portion', - 'mules', - 'visors', - 'dash', - 'huntsman', - 'shuttle', - 'bullet', - 'sect', - 'hounds', - 'refill', - 'season', - 'assassin', - 'spoof', - 'jumpers', - 'hobby', - 'tidings', - 'faction', - 'pride', - 'sabers', - 'feed', - 'sequence', - 'din', - 'act', - 'jar', - 'flux', - 'audits', - 'pupil', - 'con', - 'banister', - 'hardship', - 'speed', - 'profile', - 'jaguar', - 'flare', - 'populace', - 'educator', - 'spear', - 'friction', - 'fee', - 'deceiver', - 'ruses', - 'grub', - 'passenger', - 'menace', - 'toys', - 'idols', - 'dentists', - 'overbite', - 'monkey', - 'fights', - 'reply', - 'drive', - 'secretary', - 'dragster', - 'frolic', - 'blood', - 'macro', - 'paramour', - 'teacher', - 'server', - 'haunch', - 'sizes', - 'tangle', - 'scales', - 'refund', - 'druids', - 'rank', - 'bankers', - 'circuses', - 'pushes', - 'payday', - 'foal', - 'shackle', - 'kilowatt', - 'shroud', - 'piglets', - 'trough', - 'squabs', - 'sabotage', - 'deluge', - 'fungus', - 'cluck', - 'battery', - 'impact', - 'gondola', - 'halls', - 'pock', - 'decks', - 'climbs', - 'barbs', - 'marine', - 'length', - 'tug', - 'treason', - 'vibe', - 'tram', - 'riches', - 'habit', - 'carnivals', - 'records', - 'grants', - 'master', - 'boulder', - 'badger', - 'assistant', - 'urology', - 'condor', - 'radio', - 'kerosene', - 'mood', - 'prunes', - 'whims', - 'pacifier', - 'veal', - 'plugs', - 'cursors', - 'virus', - 'birds', - 'cola', - 'notification', - 'precinct', - 'chaos', - 'mayday', - 'perks', - 'morphine', - 'tightwad', - 'reefs', - 'mutants', - 'orchard', - 'scams', - 'bombers', - 'knots', - 'camp', - 'compilation', - 'dockyard', - 'lawyers', - 'sails', - 'shrouds', - 'couch', - 'category', - 'methods', - 'nutshell', - 'wart', - 'array', - 'drugs', - 'bunk', - 'shakes', - 'phases', - 'punk', - 'teeth', - 'flower', - 'travels', - 'relics', - 'peter', - 'mourner', - 'toe', - 'handclap', - 'valuables', - 'sheath', - 'soybean', - 'stud', - 'trait', - 'whisks', - 'hunt', - 'shopper', - 'quintet', - 'coke', - 'talc', - 'antidotes', - 'tulip', - 'cotton', - 'jaybird', - 'dandruff', - 'sarcasm', - 'hatchet', - 'summer', - 'freeway', - 'valves', - 'ark', - 'snail', - 'marmots', - 'knight', - 'antelope', - 'winnings', - 'protest', - 'reeds', - 'lottery', - 'inch', - 'sheen', - 'pants', - 'dot', - 'throats', - 'kites', - 'toes', - 'moss', - 'minutes', - 'curfew', - 'coward', - 'lobby', - 'lumber', - 'tone', - 'papyrus', - 'closet', - 'vixen', - 'salute', - 'nibble', - 'muffin', - 'cue', - 'tab', - 'rides', - 'cancer', - 'waist', - 'docs', - 'gangrene', - 'spore', - 'stint', - 'daisies', - 'spark', - 'strips', - 'mates', - 'gamer', - 'user', - 'orbits', - 'excess', - 'examples', - 'bunch', - 'shredder', - 'math', - 'snakes', - 'subway', - 'region', - 'salsa', - 'sufferer', - 'hedgehog', - 'displays', - 'pity', - 'shard', - 'visa', - 'bunkers', - 'powwow', - 'door', - 'rivet', - 'giblet', - 'robe', - 'team', - 'hem', - 'slips', - 'crime', - 'mascots', - 'kayaker', - 'pubs', - 'rest', - 'anaconda', - 'levers', - 'prey', - 'dev', - 'format', - 'cellmate', - 'rower', - 'popes', - 'fizz', - 'enzyme', - 'overlord', - 'lakes', - 'bidet', - 'moths', - 'prologue', - 'commander', - 'jeep', - 'condo', - 'sandwich', - 'welts', - 'epoxy', - 'lotto', - 'dudes', - 'rot', - 'twig', - 'cross', - 'cockatoo', - 'dolt', - 'blender', - 'spam', - 'buoy', - 'start', - 'nag', - 'thumps', - 'unease', - 'hawks', - 'sketch', - 'enemies', - 'strobes', - 'halos', - 'bond', - 'rooky', - 'earpiece', - 'queen', - 'aroma', - 'cradles', - 'twilight', - 'togs', - 'defenses', - 'library', - 'pews', - 'armpits', - 'sand', - 'spite', - 'smears', - 'vehicle', - 'segment', - 'sandbar', - 'flop', - 'manual', - 'geese', - 'learner', - 'lab', - 'knives', - 'lining', - 'sites', - 'squirts', - 'referee', - 'teepee', - 'league', - 'stir', - 'road', - 'bane', - 'stray', - 'tiling', - 'crops', - 'artist', - 'whiz', - 'sauce', - 'sorts', - 'blush', - 'outcast', - 'gander', - 'traps', - 'peaks', - 'shortcut', - 'cable', - 'unions', - 'prisons', - 'margins', - 'monarch', - 'fall', - 'pools', - 'menus', - 'port', - 'marbles', - 'martyr', - 'barbers', - 'lily', - 'outing', - 'cashews', - 'chops', - 'seam', - 'rust', - 'lager', - 'styles', - 'love', - 'varnish', - 'tide', - 'lions', - 'boil', - 'vaults', - 'booth', - 'hackers', - 'lime', - 'hat', - 'sinew', - 'zombie', - 'dogs', - 'attics', - 'ripples', - 'laurel', - 'judge', - 'looters', - 'curl', - 'clerks', - 'spire', - 'dart', - 'bumps', - 'sultan', - 'cynic', - 'steer', - 'stores', - 'lady', - 'ales', - 'noun', - 'fib', - 'sacrifice', - 'sumo', - 'posse', - 'doe', - 'reboot', - 'rotunda', - 'anklet', - 'airline', - 'ale', - 'fang', - 'promo', - 'handrail', - 'landmass', - 'tent', - 'gloater', - 'priority', - 'rerun', - 'trance', - 'time', - 'fly', - 'lungs', - 'greed', - 'poppy', - 'pans', - 'nerve', - 'eon', - 'monoxide', - 'range', - 'dividers', - 'rigging', - 'clothes', - 'storm', - 'bung', - 'decades', - 'dibs', - 'reflex', - 'shrink', - 'tones', - 'pong', - 'hulls', - 'kick', - 'gateway', - 'gallows', - 'newspaper', - 'reptile', - 'deer', - 'grandpa', - 'eyelids', - 'clicks', - 'madam', - 'badges', - 'mob', - 'shield', - 'brawl', - 'livers', - 'jazz', - 'flotilla', - 'turtles', - 'notch', - 'goop', - 'king', - 'yarn', - 'punctuation', - 'chaplain', - 'broom', - 'larva', - 'process', - 'nylon', - 'shifter', - 'cacti', - 'berries', - 'polish', - 'furnace', - 'farmer', - 'soy', - 'factory', - 'landlord', - 'miss', - 'fleet', - 'snitch', - 'soils', - 'suds', - 'reel', - 'valley', - 'ghouls', - 'vitamins', - 'ranges', - 'walls', - 'pencil', - 'jest', - 'booty', - 'symbols', - 'earplugs', - 'contour', - 'catnip', - 'guide', - 'tendon', - 'daydream', - 'vagrancy', - 'lobster', - 'knife', - 'perjurer', - 'movie', - 'dividend', - 'bakers', - 'eggroll', - 'drums', - 'fawn', - 'shawl', - 'sidewalk', - 'shawls', - 'captions', - 'crepes', - 'splatter', - 'cottage', - 'cadet', - 'photo', - 'tory', - 'strength', - 'spectacle', - 'gymnast', - 'mange', - 'ties', - 'tiger', - 'vines', - 'shout', - 'buns', - 'reformer', - 'icon', - 'book', - 'cords', - 'shovel', - 'awls', - 'zebra', - 'chair', - 'vets', - 'prawn', - 'stance', - 'permit', - 'clown', - 'sow', - 'folds', - 'host', - 'bonfire', - 'twirls', - 'stilts', - 'suits', - 'claps', - 'dole', - 'vector', - 'ripcord', - 'mask', - 'hacks', - 'tray', - 'potion', - 'kiosks', - 'cynics', - 'titanium', - 'shadows', - 'organ', - 'grin', - 'page', - 'cell', - 'source', - 'footnote', - 'mites', - 'gunsmith', - 'endings', - 'fanatic', - 'flamingo', - 'refusal', - 'adherent', - 'visitor', - 'tap', - 'yokes', - 'tendency', - 'consumer', - 'robin', - 'competitor', - 'survivor', - 'government', - 'ace', - 'base', - 'silkworm', - 'spike', - 'synopses', - 'mama', - 'clip', - 'stay', - 'eve', - 'jawline', - 'scouts', - 'detour', - 'guns', - 'credit', - 'creels', - 'chaps', - 'month', - 'appendix', - 'stilt', - 'nobody', - 'sweats', - 'craze', - 'emerald', - 'peacock', - 'dragons', - 'pointer', - 'upgrade', - 'emotion', - 'scoops', - 'line', - 'morning', - 'bedpans', - 'feat', - 'clay', - 'blouse', - 'bait', - 'overflow', - 'specimen', - 'criticism', - 'cocaine', - 'jape', - 'moth', - 'victory', - 'pomp', - 'drill', - 'diamond', - 'talk', - 'rings', - 'tubes', - 'fedora', - 'episodes', - 'state', - 'skittles', - 'theme', - 'thrusts', - 'rule', - 'editors', - 'embolism', - 'coils', - 'hemlock', - 'omen', - 'camisole', - 'jackal', - 'hornets', - 'dynasty', - 'kings', - 'things', - 'divorcee', - 'dresses', - 'hazard', - 'arbor', - 'pound', - 'flute', - 'countries', - 'couriers', - 'glass', - 'spiders', - 'overture', - 'jaunt', - 'shoal', - 'thrift', - 'elbow', - 'replay', - 'shrinks', - 'matron', - 'tomb', - 'onlooker', - 'anvils', - 'repose', - 'troops', - 'garden', - 'aisles', - 'anxiety', - 'roses', - 'orcs', - 'cud', - 'knock', - 'fail', - 'bench', - 'period', - 'rodents', - 'coconut', - 'hazelnut', - 'pug', - 'stubble', - 'poems', - 'skater', - 'winery', - 'laser', - 'girls', - 'mahogany', - 'distaste', - 'flight', - 'snags', - 'stocks', - 'awards', - 'lever', - 'function', - 'picks', - 'year', - 'corks', - 'shamrock', - 'ditch', - 'smells', - 'landmine', - 'jabs', - 'beams', - 'dolly', - 'pokers', - 'equity', - 'delegates', - 'brandy', - 'crumbs', - 'arborist', - 'vertigo', - 'pundit', - 'scimitar', - 'doves', - 'encampment', - 'curio', - 'jeers', - 'fathers', - 'archives', - 'duffel', - 'glue', - 'haiku', - 'holes', - 'watches', - 'vision', - 'buffet', - 'kibble', - 'petri', - 'tans', - 'coves', - 'index', - 'oppressor', - 'pitch', - 'cheer', - 'taco', - 'negotiator', - 'packet', - 'volumes', - 'troupe', - 'cur', - 'throws', - 'dogma', - 'vise', - 'railway', - 'flights', - 'search', - 'scrutiny', - 'paladin', - 'circlet', - 'virtue', - 'interest', - 'pot', - 'animator', - 'stature', - 'trifle', - 'rails', - 'medium', - 'aisle', - 'vista', - 'stamps', - 'winners', - 'stalls', - 'dishes', - 'ligament', - 'bassoon', - 'contests', - 'squab', - 'brat', - 'statue', - 'store', - 'jigsaw', - 'knobs', - 'bagels', - 'fuss', - 'security', - 'chairs', - 'glimmer', - 'aunt', - 'demand', - 'stunts', - 'spores', - 'baton', - 'deed', - 'life', - 'spits', - 'access', - 'queens', - 'pirate', - 'vein', - 'picnic', - 'knapsack', - 'recount', - 'bids', - 'stitch', - 'study', - 'melodies', - 'smelt', - 'sherry', - 'senior', - 'placemat', - 'cruncher', - 'mover', - 'footer', - 'watt', - 'sailor', - 'plots', - 'patio', - 'upswing', - 'stimuli', - 'vortex', - 'ethics', - 'bogs', - 'pretense', - 'feuds', - 'macaw', - 'click', - 'vest', - 'back', - 'treats', - 'eggnog', - 'finger', - 'orzo', - 'kiosk', - 'quills', - 'cruise', - 'deviancy', - 'romp', - 'planner', - 'evidence', - 'odor', - 'coral', - 'snowbird', - 'blasts', - 'yogis', - 'pack', - 'overseer', - 'list', - 'aviator', - 'barn', - 'centaur', - 'cashew', - 'roar', - 'forum', - 'growl', - 'snorts', - 'spaces', - 'charms', - 'module', - 'perm', - 'ravens', - 'ads', - 'hatchery', - 'hoaxes', - 'bro', - 'mural', - 'footing', - 'winks', - 'pursuit', - 'teargas', - 'blare', - 'racing', - 'inns', - 'whisky', - 'judges', - 'hook', - 'surface', - 'tourism', - 'jeans', - 'lipstick', - 'cluster', - 'lover', - 'nymph', - 'importer', - 'droplet', - 'goddess', - 'sneeze', - 'uniform', - 'answers', - 'eclair', - 'rags', - 'swirl', - 'weapon', - 'hitch', - 'seaweed', - 'whales', - 'ladder', - 'gourds', - 'phase', - 'machete', - 'seagull', - 'corporal', - 'machine', - 'member', - 'mulch', - 'monsieur', - 'fools', - 'vowel', - 'control', - 'beak', - 'people', - 'shrew', - 'elk', - 'scarves', - 'subfloor', - 'flatfoot', - 'remark', - 'tracer', - 'snag', - 'bowling', - 'plates', - 'parent', - 'clover', - 'sources', - 'crowd', - 'unrest', - 'clump', - 'angles', - 'embassy', - 'joggers', - 'pacifism', - 'turbines', - 'codex', - 'mesh', - 'silt', - 'excuses', - 'ranks', - 'designs', - 'filter', - 'crabmeat', - 'earlobe', - 'rind', - 'twinge', - 'parabola', - 'tails', - 'verse', - 'fossil', - 'vibes', - 'email', - 'explorer', - 'bow', - 'buck', - 'matcher', - 'quarrel', - 'caulk', - 'quiz', - 'payment', - 'figurine', - 'kicker', - 'crate', - 'outlet', - 'hash', - 'sludge', - 'den', - 'clink', - 'pew', - 'tactic', - 'bricks', - 'beards', - 'joyride', - 'radiator', - 'nose', - 'liter', - 'snack', - 'parades', - 'oxymoron', - 'aspirin', - 'pit', - 'eclairs', - 'swarm', - 'runt', - 'hassles', - 'snarl', - 'acorn', - 'mail', - 'huts', - 'knowledge', - 'gala', - 'champagne', - 'defiance', - 'screw', - 'malware', - 'metals', - 'geology', - 'drum', - 'fences', - 'tinsel', - 'growth', - 'turbans', - 'feminist', - 'landing', - 'armrest', - 'palms', - 'addicts', - 'proton', - 'helper', - 'brands', - 'vanes', - 'teamwork', - 'horn', - 'giggle', - 'houses', - 'laps', - 'odes', - 'piglet', - 'essay', - 'buckle', - 'throng', - 'erasure', - 'bonbons', - 'molars', - 'swings', - 'consumers', - 'rise', - 'barbecue', - 'ancestor', - 'vogue', - 'supplier', - 'moons', - 'footwork', - 'ground', - 'overhang', - 'harness', - 'papers', - 'serfs', - 'liberty', - 'markers', - 'pretzel', - 'memo', - 'greeting', - 'sweater', - 'clod', - 'win', - 'jogger', - 'war', - 'molecule', - 'vantage', - 'hugs', - 'spatula', - 'joker', - 'division', - 'mint', - 'sector', - 'mind', - 'welder', - 'pancake', - 'trader', - 'kisser', - 'hatred', - 'toll', - 'client', - 'flip', - 'raft', - 'cogs', - 'muskets', - 'soda', - 'driveway', - 'veneer', - 'hart', - 'employment', - 'axiom', - 'barber', - 'twist', - 'loss', - 'mead', - 'faculty', - 'ruble', - 'paranoia', - 'snowshoe', - 'census', - 'gloom', - 'dodo', - 'tank', - 'plywood', - 'creak', - 'spoils', - 'outs', - 'bodies', - 'motivation', - 'pollen', - 'lights', - 'jug', - 'taboo', - 'smith', - 'poncho', - 'jobs', - 'rancher', - 'cast', - 'fungi', - 'awning', - 'trick', - 'soot', - 'lawn', - 'heron', - 'spinster', - 'charity', - 'tact', - 'foothill', - 'oars', - 'turbofan', - 'piles', - 'blinker', - 'mist', - 'padding', - 'preface', - 'limits', - 'hamlets', - 'oysters', - 'enforcer', - 'chocolates', - 'sedan', - 'yodels', - 'wink', - 'retrial', - 'trot', - 'reliance', - 'archers', - 'shortage', - 'jeer', - 'choice', - 'winner', - 'jerk', - 'dens', - 'birthday', - 'meats', - 'buses', - 'weaver', - 'article', - 'chores', - 'shirt', - 'smash', - 'dog', - 'peril', - 'author', - 'town', - 'nudes', - 'concrete', - 'fumble', - 'cherry', - 'cyclist', - 'showman', - 'harem', - 'bribe', - 'dances', - 'yowl', - 'agates', - 'hybrid', - 'ruler', - 'dancer', - 'nap', - 'kids', - 'rope', - 'silk', - 'silencer', - 'cells', - 'motives', - 'lace', - 'mumps', - 'prompter', - 'lagoons', - 'newbie', - 'cores', - 'loaves', - 'entity', - 'valet', - 'ploy', - 'parakeet', - 'weeds', - 'monarchy', - 'sheaths', - 'scorer', - 'nags', - 'apron', - 'squib', - 'follicle', - 'headlamp', - 'puddle', - 'bugs', - 'mantra', - 'slop', - 'liars', - 'fur', - 'wielder', - 'serves', - 'yogi', - 'clavicle', - 'budget', - 'monorail', - 'will', - 'sandbox', - 'riddle', - 'frog', - 'masses', - 'wand', - 'creases', - 'lances', - 'motors', - 'mule', - 'matrix', - 'bills', - 'drapery', - 'ravioli', - 'bays', - 'thought', - 'bolo', - 'hinges', - 'brads', - 'hug', - 'debates', - 'rubs', - 'percent', - 'sinks', - 'cannon', - 'tramps', - 'shame', - 'refunds', - 'fudge', - 'launcher', - 'maturity', - 'humus', - 'gluten', - 'stairs', - 'drips', - 'sausage', - 'grime', - 'wren', - 'circus', - 'density', - 'outrage', - 'rudders', - 'guy', - 'lemon', - 'taxes', - 'oxen', - 'bands', - 'license', - 'guitars', - 'till', - 'trainer', - 'doll', - 'fair', - 'orphans', - 'parish', - 'harps', - 'sardines', - 'parade', - 'samurai', - 'bass', - 'overtime', - 'antacid', - 'fissure', - 'cleft', - 'marrow', - 'gene', - 'vulture', - 'chest', - 'pulp', - 'graduate', - 'nutmeg', - 'mimic', - 'systems', - 'vase', - 'wins', - 'crayon', - 'patience', - 'bike', - 'burgers', - 'gem', - 'prowess', - 'crutches', - 'hole', - 'squeegee', - 'parrot', - 'founder', - 'bulletin', - 'igloo', - 'anchovy', - 'perk', - 'eternity', - 'tugboat', - 'chive', - 'trial', - 'latte', - 'rinses', - 'doorbell', - 'undertow', - 'nerves', - 'thrill', - 'suntan', - 'voodoo', - 'deities', - 'beaches', - 'stork', - 'scroll', - 'symphony', - 'lagoon', - 'duvet', - 'bikers', - 'critter', - 'bleep', - 'exes', - 'imbecile', - 'folk', - 'reins', - 'koala', - 'majesty', - 'scowl', - 'pixels', - 'sole', - 'museum', - 'lapse', - 'fastball', - 'spires', - 'planks', - 'nukes', - 'set', - 'attire', - 'dosage', - 'waste', - 'graphics', - 'angels', - 'counting', - 'gardener', - 'sap', - 'fiend', - 'parlor', - 'prices', - 'umpire', - 'sage', - 'grower', - 'offices', - 'jackets', - 'calendars', - 'tiers', - 'eraser', - 'outlook', - 'zipper', - 'mamba', - 'care', - 'expert', - 'bucket', - 'rips', - 'tampons', - 'cheeses', - 'girdles', - 'guff', - 'ear', - 'hobbit', - 'latches', - 'scuff', - 'timer', - 'carp', - 'arcade', - 'shop', - 'pins', - 'vole', - 'puck', - 'sculptor', - 'jumble', - 'barrier', - 'sister', - 'bladders', - 'upstroke', - 'task', - 'price', - 'harpist', - 'lark', - 'pyramid', - 'tampon', - 'truth', - 'boils', - 'savage', - 'wares', - 'purveyor', - 'moon', - 'fleets', - 'flagman', - 'tribunal', - 'preplan', - 'flea', - 'strudel', - 'tape', - 'pair', - 'bards', - 'jokester', - 'hours', - 'bonbon', - 'cleavers', - 'spider', - 'pun', - 'case', - 'polo', - 'dales', - 'roles', - 'cannons', - 'default', - 'boasts', - 'puzzles', - 'seniors', - 'headway', - 'tarot', - 'smell', - 'grits', - 'warden', - 'vests', - 'mischief', - 'issue', - 'shindig', - 'prep', - 'mic', - 'orca', - 'gender', - 'stranger', - 'poets', - 'film', - 'type', - 'clack', - 'abyss', - 'jumps', - 'segments', - 'fate', - 'senses', - 'utensil', - 'weeks', - 'maid', - 'marigold', - 'molasses', - 'research', - 'chapters', - 'cleric', - 'table', - 'caramel', - 'outfit', - 'knee', - 'deck', - 'denim', - 'giraffe', - 'daycare', - 'sprig', - 'czar', - 'letter', - 'caravan', - 'junkyard', - 'tribune', - 'organs', - 'knoll', - 'duo', - 'sermon', - 'windshield', - 'nodes', - 'cribs', - 'sycamore', - 'paints', - 'freewill', - 'vises', - 'sons', - 'relays', - 'bun', - 'erosion', - 'latch', - 'sprints', - 'hippie', - 'rockstar', - 'moped', - 'subtype', - 'wardrobe', - 'leases', - 'cart', - 'lunchbox', - 'calzone', - 'hangars', - 'courts', - 'adult', - 'kilobyte', - 'bible', - 'land', - 'deviant', - 'banshee', - 'fern', - 'story', - 'death', - 'angle', - 'villa', - 'outlaw', - 'liver', - 'aorta', - 'cowls', - 'assistance', - 'beans', - 'moose', - 'invites', - 'chemicals', - 'mesas', - 'palm', - 'abdomen', - 'sigh', - 'volts', - 'bed', - 'canisters', - 'boon', - 'moonbeam', - 'culprits', - 'combs', - 'everyone', - 'flocks', - 'gesture', - 'footage', - 'stingray', - 'lamp', - 'press', - 'scarf', - 'mammary', - 'janitor', - 'demands', - 'robber', - 'stove', - 'tannery', - 'caddie', - 'pies', - 'swords', - 'snares', - 'chives', - 'grid', - 'course', - 'football', - 'nails', - 'talcum', - 'loot', - 'haste', - 'dawn', - 'heater', - 'teapots', - 'afterlife', - 'glance', - 'crates', - 'demons', - 'migrant', - 'discounts', - 'audiences', - 'beepers', - 'eardrum', - 'lumberjack', - 'spouts', - 'whip', - 'pounds', - 'concerts', - 'dunce', - 'cavern', - 'coins', - 'jerky', - 'mold', - 'sweat', - 'curtain', - 'halo', - 'lizards', - 'popcorn', - 'dispute', - 'cup', - 'wife', - 'eclipse', - 'ecology', - 'elms', - 'swab', - 'calories', - 'gifts', - 'flounder', - 'crayons', - 'mount', - 'tallow', - 'canoe', - 'voucher', - 'phobias', - 'ores', - 'optics', - 'bums', - 'arks', - 'sitter', - 'glitter', - 'blips', - 'helm', - 'diners', - 'propane', - 'teapot', - 'warning', - 'rampage', - 'plastic', - 'shrine', - 'venom', - 'turmeric', - 'servo', - 'epilepsy', - 'landside', - 'diagrams', - 'estate', - 'jacket', - 'scallion', - 'slip', - 'mile', - 'cracker', - 'mayhem', - 'talons', - 'bistro', - 'nights', - 'sheet', - 'earache', - 'revision', - 'washout', - 'yacht', - 'inputs', - 'arms', - 'carnage', - 'regret', - 'quotes', - 'roughage', - 'buyers', - 'citation', - 'trays', - 'boards', - 'ebook', - 'velvet', - 'soups', - 'breach', - 'butler', - 'semester', - 'bipod', - 'herbs', - 'skincare', - 'clock', - 'heft', - 'carton', - 'exorcist', - 'firm', - 'rabbit', - 'mutts', - 'dust', - 'defense', - 'essence', - 'runts', - 'broiler', - 'target', - 'jade', - 'storms', - 'pleasure', - 'blades', - 'wards', - 'cubes', - 'pickles', - 'beggar', - 'alarm', - 'bedroom', - 'delusion', - 'yogurt', - 'foothold', - 'gopher', - 'kilt', - 'hint', - 'tier', - 'strand', - 'eye', - 'dowel', - 'brokers', - 'fanfare', - 'luxury', - 'hedges', - 'alien', - 'dorm', - 'culture', - 'chalk', - 'army', - 'bloke', - 'tops', - 'rooms', - 'rubdown', - 'jams', - 'verdict', - 'mine', - 'spade', - 'lotus', - 'tax', - 'freckles', - 'apple', - 'revolts', - 'clutter', - 'glop', - 'desktop', - 'pictures', - 'rays', - 'tickle', - 'nerd', - 'header', - 'dose', - 'boom', - 'county', - 'nemesis', - 'tune', - 'sects', - 'lovers', - 'navies', - 'sleeve', - 'style', - 'patrol', - 'antennae', - 'pizza', - 'comrades', - 'brook', - 'lobe', - 'wildland', - 'trainee', - 'cricket', - 'covers', - 'scans', - 'meter', - 'skates', - 'bales', - 'whips', - 'sorcerer', - 'settler', - 'tear', - 'assembly', - 'repairs', - 'loaf', - 'piers', - 'pets', - 'foot', - 'finals', - 'curtains', - 'stinger', - 'cowl', - 'tack', - 'maids', - 'fruit', - 'armor', - 'trumpet', - 'annoyance', - 'age', - 'plans', - 'flame', - 'ware', - 'leaks', - 'opera', - 'sundae', - 'lives', - 'skins', - 'homeowner', - 'rumps', - 'hiker', - 'payphone', - 'weekend', - 'dean', - 'date', - 'licks', - 'herds', - 'nature', - 'critics', - 'canary', - 'stashes', - 'polka', - 'stoop', - 'streets', - 'lords', - 'holidays', - 'width', - 'pill', - 'spine', - 'pusher', - 'fragment', - 'layer', - 'dynamite', - 'liqueurs', - 'root', - 'thump', - 'envelope', - 'zoology', - 'sirens', - 'smocks', - 'tramp', - 'guys', - 'awl', - 'goals', - 'serpent', - 'pox', - 'skills', - 'chargers', - 'olives', - 'massager', - 'clots', - 'despair', - 'throttle', - 'gears', - 'hunch', - 'cowbird', - 'biker', - 'key', - 'imp', - 'gigabyte', - 'rivers', - 'trucker', - 'knights', - 'henchman', - 'pipe', - 'stipend', - 'rival', - 'tricks', - 'hamper', - 'clank', - 'violins', - 'lease', - 'bronco', - 'supermom', - 'continent', - 'blimps', - 'tennis', - 'shrub', - 'hare', - 'bonanza', - 'jackals', - 'eagles', - 'hula', - 'leads', - 'traitor', - 'doorman', - 'colonist', - 'aid', - 'train', - 'reporter', - 'patriot', - 'venue', - 'traffic', - 'isotope', - 'activities', - 'score', - 'coach', - 'wool', - 'turnip', - 'cologne', - 'bros', - 'headache', - 'raps', - 'suet', - 'slit', - 'nursery', - 'dislike', - 'defender', - 'stash', - 'payroll', - 'spoons', - 'cupid', - 'doctors', - 'muscles', - 'obituary', - 'binder', - 'mutt', - 'absentee', - 'clan', - 'spades', - 'outback', - 'crowds', - 'uprising', - 'trousers', - 'places', - 'winch', - 'doors', - 'handcuff', - 'seed', - 'barb', - 'crouch', - 'utility', - 'mush', - 'proxy', - 'track', - 'tooth', - 'strains', - 'dollar', - 'actress', - 'ozone', - 'chump', - 'smiles', - 'autumn', - 'burrow', - 'baskets', - 'fugitive', - 'yeast', - 'vale', - 'shingle', - 'hope', - 'avocado', - 'flap', - 'aircraft', - 'hornet', - 'foods', - 'facts', - 'sprouts', - 'forts', - 'beer', - 'clipart', - 'atriums', - 'coot', - 'paths', - 'driver', - 'smuggler', - 'dope', - 'font', - 'carnival', - 'volt', - 'cycles', - 'glazing', - 'news', - 'revolt', - 'star', - 'gradient', - 'cowards', - 'headset', - 'hits', - 'release', - 'moms', - 'keno', - 'quip', - 'sunset', - 'trees', - 'copiers', - 'cliques', - 'tuft', - 'sexes', - 'iota', - 'poser', - 'traction', - 'shallot', - 'rhythm', - 'housing', - 'goggles', - 'devils', - 'daylight', - 'squares', - 'sesame', - 'pager', - 'wads', - 'policy', - 'deal', - 'inks', - 'juice', - 'coaster', - 'resin', - 'deli', - 'muskrat', - 'flavor', - 'cyst', - 'startup', - 'pacemaker', - 'arcades', - 'foam', - 'trinity', - 'wheels', - 'wash', - 'knickers', - 'juicer', - 'overhaul', - 'claw', - 'auctions', - 'bar', - 'berry', - 'thicket', - 'swill', - 'applause', - 'foe', - 'rose', - 'nicks', - 'nieces', - 'disks', - 'linen', - 'orbs', - 'pouches', - 'licorice', - 'wildcard', - 'mankind', - 'ruins', - 'nest', - 'pecans', - 'diffuser', - 'poll', - 'burger', - 'streaks', - 'moves', - 'lies', - 'sorceress', - 'dwarf', - 'trapdoor', - 'unicorns', - 'dump', - 'sauces', - 'pats', - 'outsider', - 'drunkard', - 'sob', - 'barge', - 'sores', - 'shrines', - 'few', - 'marker', - 'cupcake', - 'robins', - 'totems', - 'flam', - 'eyebrow', - 'replies', - 'vineyard', - 'revenge', - 'rifling', - 'elephant', - 'purpose', - 'dice', - 'thorns', - 'prank', - 'quilts', - 'mess', - 'motorway', - 'yawn', - 'goldmine', - 'platinum', - 'colt', - 'gown', - 'banks', - 'probe', - 'dream', - 'equator', - 'skill', - 'consultant', - 'idiocy', - 'onward', - 'waffle', - 'bobcats', - 'griffon', - 'greeter', - 'margin', - 'mage', - 'celery', - 'octane', - 'mime', - 'faces', - 'bistros', - 'phrases', - 'palaces', - 'ibex', - 'tales', - 'map', - 'jetpack', - 'actions', - 'nests', - 'baritones', - 'swat', - 'makeover', - 'smut', - 'run', - 'students', - 'wine', - 'wonk', - 'debtor', - 'oxidant', - 'sled', - 'gauze', - 'brunt', - 'ashes', - 'warlock', - 'wigs', - 'vampire', - 'subtitle', - 'gongs', - 'pipeline', - 'trouble', - 'groan', - 'swamps', - 'weather', - 'heirloom', - 'valve', - 'hero', - 'fiber', - 'stunner', - 'lemur', - 'cuffs', - 'talisman', - 'cures', - 'cork', - 'touch', - 'jail', - 'shift', - 'phones', - 'nachos', - 'gravity', - 'juggler', - 'spinout', - 'manhunt', - 'spears', - 'seats', - 'choir', - 'chamber', - 'cultures', - 'years', - 'handyman', - 'idealist', - 'tassel', - 'pilgrim', - 'oar', - 'android', - 'mop', - 'lift', - 'height', - 'rail', - 'rouge', - 'tux', - 'pavement', - 'prudes', - 'pesos', - 'animal', - 'radios', - 'moonrise', - 'hump', - 'riveter', - 'uranium', - 'okra', - 'geek', - 'decibel', - 'turret', - 'guitar', - 'weasel', - 'myth', - 'boudoir', - 'subtotal', - 'borders', - 'chore', - 'tents', - 'crew', - 'bus', - 'inn', - 'files', - 'ivy', - 'grape', - 'parties', - 'grace', - 'grounds', - 'swipe', - 'tutor', - 'peanut', - 'pages', - 'decor', - 'litters', - 'waltz', - 'desks', - 'slaw', - 'spat', - 'question', - 'crests', - 'lot', - 'inches', - 'leverage', - 'motor', - 'friend', - 'raccoon', - 'jay', - 'stencil', - 'kin', - 'crag', - 'canals', - 'voltage', - 'thesis', - 'help', - 'keel', - 'coconuts', - 'spices', - 'sheds', - 'trip', - 'knolls', - 'reverend', - 'gripe', - 'refrain', - 'logic', - 'illness', - 'mass', - 'claims', - 'strides', - 'dunes', - 'wands', - 'flaw', - 'reunion', - 'topics', - 'gizmo', - 'shriek', - 'island', - 'denizen', - 'gruel', - 'overrun', - 'donator', - 'strike', - 'junkie', - 'rascal', - 'homes', - 'dials', - 'entryway', - 'curses', - 'alley', - 'robot', - 'perms', - 'ovum', - 'spoon', - 'remarks', - 'crypt', - 'oats', - 'pint', - 'repair', - 'vapors', - 'outhouse', - 'lice', - 'shape', - 'joy', - 'riot', - 'beau', - 'log', - 'limes', - 'bile', - 'pest', - 'visitors', - 'saga', - 'lapdog', - 'chimps', - 'cots', - 'plants', - 'login', - 'poultry', - 'moats', - 'valium', - 'composer', - 'tigers', - 'agent', - 'shrimp', - 'pegboard', - 'raisin', - 'saints', - 'options', - 'posts', - 'exchange', - 'tapes', - 'asp', - 'doorstep', - 'shove', - 'buffoon', - 'ideology', - 'sickle', - 'protons', - 'honks', - 'split', - 'throat', - 'wisp', - 'theory', - 'drams', - 'pores', - 'commando', - 'surname', - 'website', - 'husk', - 'loft', - 'tycoon', - 'albums', - 'bath', - 'juvenile', - 'kangaroo', - 'stabs', - 'shells', - 'artery', - 'areas', - 'resident', - 'seminar', - 'silicon', - 'analyzer', - 'napkin', - 'elf', - 'fool', - 'splints', - 'walrus', - 'digest', - 'harems', - 'wraith', - 'legume', - 'skewer', - 'outcome', - 'operator', - 'carol', - 'fondling', - 'trapper', - 'airport', - 'moaner', - 'concert', - 'inchworm', - 'quarry', - 'clout', - 'mutiny', - 'peeks', - 'handsaw', - 'authors', - 'fowl', - 'wiper', - 'hunk', - 'break', - 'slaps', - 'tinker', - 'traces', - 'ramrod', - 'jowl', - 'capsule', - 'bunny', - 'sack', - 'cabs', - 'carrot', - 'saber', - 'silos', - 'manager', - 'spelling', - 'spread', - 'ferret', - 'ramen', - 'captain', - 'shale', - 'bang', - 'god', - 'duke', - 'wrench', - 'hogs', - 'covenant', - 'contents', - 'synapse', - 'calf', - 'captive', - 'nit', - 'world', - 'monks', - 'bikinis', - 'geeks', - 'genitals', - 'printer', - 'poker', - 'mayor', - 'nuptials', - 'tube', - 'thorn', - 'spinner', - 'marinas', - 'dew', - 'mice', - 'comment', - 'stock', - 'lethargy', - 'screws', - 'tunes', - 'hikes', - 'lunch', - 'lard', - 'cereals', - 'flan', - 'rasp', - 'mockup', - 'wiretap', - 'yearling', - 'gimmick', - 'spirit', - 'bicycle', - 'huddle', - 'chipmunk', - 'astrology', - 'mongrel', - 'effect', - 'charisma', - 'democrat', - 'top', - 'heaps', - 'thug', - 'cliff', - 'castles', - 'wages', - 'holiday', - 'aqueduct', - 'athlete', - 'beagle', - 'coroner', - 'arrays', - 'element', - 'laptops', - 'plaster', - 'kegs', - 'teat', - 'sleet', - 'orcas', - 'embargo', - 'horns', - 'stems', - 'emporium', - 'cloth', - 'mammals', - 'objects', - 'fetish', - 'rescuer', - 'commute', - 'calipers', - 'animals', - 'canyon', - 'hops', - 'broker', - 'sham', - 'bale', - 'panorama', - 'drinks', - 'rocket', - 'sweets', - 'cars', - 'lag', - 'hunks', - 'ritual', - 'cure', - 'fumes', - 'jinx', - 'bonnet', - 'knob', - 'taproot', - 'cows', - 'headgear', - 'rebuttal', - 'squid', - 'mutant', - 'pail', - 'ogres', - 'welt', - 'bulbs', - 'brushes', - 'ploys', - 'nacho', - 'risks', - 'plenty', - 'gas', - 'cabins', - 'photons', - 'scones', - 'symbol', - 'tyrants', - 'degrees', - 'rifts', - 'acrobats', - 'halogen', - 'wharf', - 'goats', - 'stylus', - 'bushes', - 'trampoline', - 'shave', - 'lentils', - 'quid', - 'sticks', - 'scalps', - 'suburb', - 'dentist', - 'strainer', - 'macaroni', - 'occupier', - 'proverb', - 'hoods', - 'hotels', - 'specks', - 'virgins', - 'shaft', - 'column', - 'jive', - 'aunts', - 'rods', - 'egos', - 'quail', - 'console', - 'mum', - 'jumper', - 'slogan', - 'movies', - 'dent', - 'sapling', - 'brochure', - 'quest', - 'tenure', - 'bakeries', - 'era', - 'stucco', - 'poet', - 'trucks', - 'opposite', - 'biology', - 'champ', - 'turns', - 'anthem', - 'expenses', - 'diameter', - 'labor', - 'cranium', - 'baking', - 'hymn', - 'hyena', - 'tubas', - 'bets', - 'plat', - 'twitter', - 'casinos', - 'salads', - 'owner', - 'chimes', - 'brew', - 'pang', - 'congress', - 'ropes', - 'pleat', - 'implant', - 'druid', - 'counties', - 'snips', - 'teriyaki', - 'crooks', - 'bottle', - 'playroom', - 'decal', - 'neighbor', - 'kidnaper', - 'stardom', - 'orange', - 'herd', - 'shrubs', - 'craft', - 'orgies', - 'arrow', - 'family', - 'meteors', - 'method', - 'perfume', - 'egotism', - 'steroid', - 'flaps', - 'request', - 'rush', - 'starter', - 'refresh', - 'murmur', - 'discount', - 'chicken', - 'murals', - 'tots', - 'cherub', - 'dropout', - 'thrall', - 'pups', - 'router', - 'block', - 'employee', - 'dial', - 'dodos', - 'insect', - 'color', - 'strokes', - 'monk', - 'brood', - 'comic', - 'gowns', - 'unloader', - 'hell', - 'balms', - 'token', - 'narrator', - 'armband', - 'starship', - 'islands', - 'voyage', - 'libraries', - 'ginseng', - 'muses', - 'termite', - 'remover', - 'cartoon', - 'ribcage', - 'credits', - 'ingots', - 'labels', - 'lie', - 'oregano', - 'teens', - 'darkroom', - 'byway', - 'jailer', - 'stream', - 'poise', - 'pentagon', - 'pipes', - 'sanctum', - 'vats', - 'nugget', - 'nativity', - 'reburial', - 'loom', - 'hybrids', - 'fins', - 'crumpet', - 'troughs', - 'blossom', - 'blog', - 'item', - 'language', - 'breath', - 'ash', - 'campers', - 'gavel', - 'bumpers', - 'skipper', - 'corners', - 'dram', - 'fin', - 'grating', - 'guts', - 'clouds', - 'panes', - 'garb', - 'gains', - 'vagabond', - 'plume', - 'critters', - 'kite', - 'gauntlet', - 'counter', - 'drawl', - 'weirdo', - 'lounge', - 'snow', - 'app', - 'townhome', - 'bagpipes', - 'cats', - 'admirer', - 'guru', - 'tart', - 'cuff', - 'kimono', - 'elastic', - 'anglers', - 'thespian', - 'trout', - 'guzzler', - 'generator', - 'vocalist', - 'agents', - 'smithy', - 'zip', - 'text', - 'foyer', - 'peak', - 'rusk', - 'theology', - 'lapels', - 'nectar', - 'mobs', - 'query', - 'blaze', - 'avatars', - 'vial', - 'paycheck', - 'property', - 'food', - 'romance', - 'weld', - 'usher', - 'stacks', - 'raider', - 'bail', - 'conduit', - 'penknife', - 'archer', - 'bark', - 'headroom', - 'delegate', - 'slant', - 'slits', - 'berm', - 'swim', - 'pillbox', - 'plea', - 'kilts', - 'beat', - 'vat', - 'infant', - 'shrug', - 'alarms', - 'formula', - 'riddance', - 'eggs', - 'sense', - 'oligarch', - 'barrels', - 'skeleton', - 'booze', - 'grange', - 'evasion', - 'galaxy', - 'gaff', - 'ranches', - 'espresso', - 'mulberry', - 'wants', - 'bluffs', - 'vacancy', - 'fleas', - 'rocker', - 'slacker', - 'camel', - 'yell', - 'worry', - 'farmhouse', - 'meshes', - 'odds', - 'tongs', - 'urchin', - 'punt', - 'bomb', - 'noodles', - 'inside', - 'lecture', - 'nudity', - 'planes', - 'squat', - 'goods', - 'gumdrop', - 'jasmine', - 'oranges', - 'parsnip', - 'drug', - 'bites', - 'awnings', - 'swagger', - 'snouts', - 'supper', - 'lemurs', - 'pines', - 'charts', - 'prize', - 'footlocker', - 'jab', - 'sprigs', - 'grain', - 'eater', - 'denture', - 'bison', - 'details', - 'climates', - 'ladies', - 'arenas', - 'channel', - 'truce', - 'mustard', - 'crumb', - 'nomad', - 'reaction', - 'rift', - 'untruth', - 'coin', - 'damage', - 'gumbo', - 'faith', - 'fortress', - 'lemons', - 'roots', - 'whey', - 'streak', - 'glaucoma', - 'kiwi', - 'mimes', - 'nudist', - 'broth', - 'scalpel', - 'oases', - 'slats', - 'mutes', - 'troop', - 'slicer', - 'obscenity', - 'twit', - 'stoves', - 'tingle', - 'suitor', - 'sundress', - 'marble', - 'cactus', - 'wiring', - 'tad', - 'noel', - 'hairs', - 'stamp', - 'needle', - 'survival', - 'endnote', - 'funnel', - 'organism', - 'spans', - 'meeting', - 'test', - 'clog', - 'adults', - 'sash', - 'economy', - 'screens', - 'occupant', - 'seals', - 'juniper', - 'omission', - 'limbs', - 'hashes', - 'cement', - 'royalty', - 'marathon', - 'goblin', - 'spruce', - 'tags', - 'fife', - 'scorn', - 'globes', - 'heir', - 'gnats', - 'octagon', - 'redo', - 'miracle', - 'trident', - 'bust', - 'laborer', - 'cove', - 'flannels', - 'stage', - 'scallop', - 'cigar', - 'stroll', - 'creator', - 'facelift', - 'photos', - 'shoe', - 'nation', - 'grader', - 'trauma', - 'grins', - 'watermelon', - 'trustee', - 'freight', - 'genetics', - 'sinkers', - 'widow', - 'chicks', - 'tote', - 'granddad', - 'shorty', - 'antenna', - 'farce', - 'treasury', - 'coca', - 'kimonos', - 'hermit', - 'wind', - 'prayer', - 'heads', - 'rut', - 'strays', - 'battles', - 'hoody', - 'lodging', - 'mansion', - 'password', - 'demotion', - 'monster', - 'pelvis', - 'suite', - 'python', - 'filler', - 'trillion', - 'rioter', - 'glucose', - 'race', - 'goblins', - 'scars', - 'wonder', - 'epidural', - 'exam', - 'leashes', - 'pacifist', - 'relish', - 'parcel', - 'setback', - 'ducts', - 'producer', - 'staff', - 'garter', - 'gamble', - 'norms', - 'goof', - 'title', - 'cards', - 'bows', - 'bloat', - 'workload', - 'slider', - 'secrecy', - 'park', - 'demise', - 'church', - 'rear', - 'exec', - 'mayors', - 'muzzle', - 'tomcat', - 'teaspoon', - 'calamity', - 'onion', - 'costs', - 'medics', - 'crevices', - 'pane', - 'oops', - 'snaps', - 'rigor', - 'beasts', - 'graphs', - 'states', - 'remix', - 'cornea', - 'wafers', - 'goatee', - 'doc', - 'services', - 'legumes', - 'apes', - 'bandits', - 'sentry', - 'quips', - 'coating', - 'cabana', - 'spring', - 'haul', - 'seafood', - 'muck', - 'saves', - 'anthrax', - 'globe', - 'treasure', - 'cafe', - 'domain', - 'clerk', - 'climber', - 'pixie', - 'prodigy', - 'caddy', - 'apostles', - 'mumbling', - 'leech', - 'implants', - 'princes', - 'tacos', - 'conflict', - 'whale', - 'minimum', - 'boas', - 'mandate', - 'shack', - 'goat', - 'frame', - 'halves', - 'barriers', - 'opus', - 'sty', - 'dates', - 'finance', - 'embers', - 'code', - 'diagram', - 'poem', - 'harbor', - 'playoff', - 'mermaid', - 'desire', - 'nocks', - 'mounds', - 'ushers', - 'poplar', - 'sport', - 'rumors', - 'aphid', - 'husks', - 'animation', - 'riddles', - 'wanted', - 'deadbolt', - 'tiara', - 'bowl', - 'dyslexia', - 'basin', - 'brats', - 'dazzler', - 'tunic', - 'preview', - 'guest', - 'utopia', - 'side', - 'trunks', - 'duel', - 'rates', - 'bay', - 'tempo', - 'swigs', - 'cubicles', - 'taps', - 'branches', - 'zinc', - 'rock', - 'detail', - 'snooper', - 'temper', - 'stem', - 'drainer', - 'speech', - 'hills', - 'fort', - 'spender', - 'negligee', - 'lass', - 'seer', - 'exiles', - 'lyre', - 'tome', - 'vanity', - 'meters', - 'toffee', - 'ogre', - 'errors', - 'sports', - 'copier', - 'scholar', - 'joules', - 'material', - 'hotdog', - 'widows', - 'tale', - 'wizard', - 'duds', - 'crayfish', - 'humanist', - 'swine', - 'pore', - 'dimples', - 'chant', - 'video', - 'spectrum', - 'pots', - 'bunches', - 'keep', - 'action', - 'maker', - 'ice', - 'stone', - 'giggles', - 'wealth', - 'brow', - 'hoop', - 'son', - 'tentacle', - 'loons', - 'spins', - 'nemo', - 'quarts', - 'poster', - 'recipe', - 'hemp', - 'exponent', - 'platter', - 'stump', - 'lures', - 'safes', - 'zones', - 'collars', - 'coots', - 'crabs', - 'fetus', - 'hen', - 'varmint', - 'botanist', - 'meat', - 'brains', - 'pirates', - 'wig', - 'use', - 'glands', - 'acorns', - 'strap', - 'tweezers', - 'baseballs', - 'mommy', - 'agendas', - 'sass', - 'replica', - 'pests', - 'tilde', - 'milk', - 'sunlight', - 'crunch', - 'vastness', - 'relapse', - 'jackpot', - 'fund', - 'call', - 'nut', - 'cargo', - 'stylist', - 'status', - 'checks', - 'scout', - 'blister', - 'lanterns', - 'typist', - 'object', - 'sponge', - 'children', - 'truffle', - 'topic', - 'gecko', - 'epilogue', - 'lump', - 'flaws', - 'divots', - 'funds', - 'mixture', - 'impurity', - 'attendees', - 'plot', - 'slurs', - 'excerpt', - 'cults', - 'showroom', - 'yoyo', - 'hyphens', - 'showoff', - 'acids', - 'roost', - 'slide', - 'doorstop', - 'antidote', - 'skin', - 'fury', - 'qualms', - 'gunk', - 'nemeses', - 'fluid', - 'cowboy', - 'corridor', - 'twists', - 'goo', - 'laundry', - 'swirls', - 'glutton', - 'binders', - 'brain', - 'savages', - 'viola', - 'stumps', - 'sub', - 'pagoda', - 'microbe', - 'sneer', - 'morsel', - 'drainage', - 'seal', - 'argument', - 'butcher', - 'seams', - 'avenues', - 'mixes', - 'lure', - 'pliers', - 'arsenal', - 'disputes', - 'ape', - 'drunks', - 'tailor', - 'deployment', - 'railing', - 'tinfoil', - 'diner', - 'voices', - 'pedicure', - 'feud', - 'mascot', - 'brothers', - 'cap', - 'hunger', - 'distrust', - 'ferocity', - 'parsley', - 'machines', - 'mark', - 'spinach', - 'cod', - 'nucleus', - 'work', - 'message', - 'quart', - 'art', - 'racks', - 'safari', - 'osmosis', - 'geranium', - 'sprain', - 'grams', - 'toxin', - 'coal', - 'bridge', - 'might', - 'taxi', - 'steroids', - 'frond', - 'maul', - 'peas', - 'variety', - 'poses', - 'vine', - 'drip', - 'clumps', - 'rivulet', - 'hints', - 'update', - 'choices', - 'creation', - 'creature', - 'earwigs', - 'melon', - 'panel', - 'troll', - 'waters', - 'bouts', - 'prop', - 'outfield', - 'hacksaw', - 'irons', - 'sailors', - 'colander', - 'cub', - 'sandal', - 'fad', - 'skis', - 'peppers', - 'sobs', - 'calls', - 'banner', - 'bongs', - 'armories', - 'cents', - 'favor', - 'capitol', - 'share', - 'liftoff', - 'pesto', - 'earmuff', - 'canon', - 'shampoo', - 'casualty', - 'apostate', - 'tissues', - 'strain', - 'miner', - 'futon', - 'casino', - 'unicorn', - 'upstart', - 'spy', - 'showdown', - 'gap', - 'marshes', - 'flak', - 'crest', - 'iron', - 'shot', - 'optimist', - 'pajamas', - 'feather', - 'knuckles', - 'renter', - 'raptor', - 'revenue', - 'nana', - 'service', - 'pocket', - 'spook', - 'pantry', - 'boundary', - 'putty', - 'spree', - 'armoire', - 'moisture', - 'donkey', - 'skunk', - 'rant', - 'dinner', - 'poacher', - 'cupcakes', - 'sponsor', - 'exercise', - 'darts', - 'teas', - 'quests', - 'mace', - 'bribes', - 'defeat', - 'squeeze', - 'doorpost', - 'predator', - 'combat', - 'barns', - 'cabbage', - 'benches', - 'herald', - 'blizzards', - 'prism', - 'mill', - 'obstacle', - 'grass', - 'answer', - 'hoes', - 'siren', - 'treat', - 'traverse', - 'pockets', - 'vane', - 'snorkel', - 'elites', - 'lack', - 'crud', - 'fishbowl', - 'mollusk', - 'screen', - 'syndrome', - 'diary', - 'grades', - 'nick', - 'forest', - 'germs', - 'helmet', - 'tweets', - 'sulfate', - 'feline', - 'ban', - 'jet', - 'spikes', - 'draft', - 'cavity', - 'clowns', - 'buckets', - 'guidance', - 'navy', - 'amulets', - 'hubs', - 'corridors', - 'setup', - 'database', - 'getaway', - 'folks', - 'expanse', - 'grant', - 'detergent', - 'zoo', - 'pick', - 'months', - 'miners', - 'morality', - 'truck', - 'mote', - 'raise', - 'lullaby', - 'slime', - 'giveaway', - 'heists', - 'breeze', - 'toy', - 'trace', - 'goofball', - 'gait', - 'phone', - 'fray', - 'marches', - 'jam', - 'site', - 'knees', - 'find', - 'sales', - 'values', - 'painter', - 'overlap', - 'bard', - 'roasts', - 'strings', - 'odometer', - 'tiles', - 'candles', - 'stars', - 'badgers', - 'series', - 'duck', - 'huff', - 'axe', - 'git', - 'quill', - 'harbors', - 'eagle', - 'garters', - 'inlet', - 'cleaver', - 'coder', - 'fraud', - 'pearl', - 'sandbag', - 'fountain', - 'guides', - 'blip', - 'demo', - 'jacks', - 'retreat', - 'stripper', - 'depot', - 'vials', - 'mite', - 'device', - 'flashes', - 'cilantro', - 'canopy', - 'cherubs', - 'hasp', - 'curds', - 'tomboy', - 'pilot', - 'phoenix', - 'mouths', - 'hologram', - 'lecturer', - 'citizen', - 'student', - 'cloaks', - 'factor', - 'opossum', - 'clap', - 'sign', - 'anvil', - 'honk', - 'verb', - 'signal', - 'bruin', - 'clef', - 'queue', - 'bats', - 'screams', - 'hall', - 'vapor', - 'marina', - 'stimulus', - 'jesters', - 'rover', - 'brewery', - 'otters', - 'flask', - 'wire', - 'smasher', - 'dame', - 'joints', - 'muse', - 'palace', - 'steeple', - 'enquirer', - 'fiat', - 'maggot', - 'outburst', - 'plateau', - 'dowels', - 'stands', - 'titans', - 'wheat', - 'taste', - 'uses', - 'audit', - 'iodine', - 'garment', - 'ducks', - 'linseed', - 'latrine', - 'groove', - 'confetti', - 'rebate', - 'stones', - 'smile', - 'yard', - 'gristle', - 'corncob', - 'whoop', - 'veteran', - 'duty', - 'tomato', - 'patient', - 'manors', - 'reversal', - 'graph', - 'latex', - 'hamster', - 'optic', - 'crews', - 'lye', - 'ponds', - 'input', - 'germ', - 'boardroom', - 'swinger', - 'unicycle', - 'jerks', - 'point', - 'fight', - 'brick', - 'dory', - 'convents', - 'shirts', - 'debut', - 'finch', - 'peels', - 'zoos', - 'feeling', - 'prince', - 'pods', - 'stanzas', - 'vocation', - 'polenta', - 'updates', - 'lap', - 'weed', - 'swaps', - 'tarn', - 'elm', - 'hexagram', - 'chips', - 'otter', - 'value', - 'femur', - 'canal', - 'bib', - 'breeds', - 'heap', - 'ramp', - 'veil', - 'pan', - 'rubies', - 'havens', - 'fructose', - 'patch', - 'fiction', - 'ruckus', - 'drives', - 'spot', - 'witches', - 'joist', - 'saloon', - 'bruise', - 'stride', - 'datebook', - 'creep', - 'axon', - 'parking', - 'insects', - 'gadgets', - 'doormat', - 'snowfall', - 'backups', - 'parkway', - 'disorder', - 'cheeks', - 'cruiser', - 'shelf', - 'nephews', - 'cloves', - 'cartload', - 'java', - 'shoptalk', - 'mana', - 'familiar', - 'boast', - 'spill', - 'burrito', - 'sitcom', - 'soccer', - 'humans', - 'rinds', - 'hypnosis', - 'wires', - 'mowing', - 'ribbons', - 'creatures', - 'bauble', - 'refuge', - 'gremlin', - 'tackle', - 'peach', - 'karaoke', - 'cream', - 'groom', - 'subgroup', - 'splint', - 'dingo', - 'pleats', - 'monsoon', - 'woes', - 'putdown', - 'medic', - 'debt', - 'leeks', - 'husband', - 'igloos', - 'hype', - 'lord', - 'chords', - 'shapes', - 'display', - 'sun', - 'trophy', - 'police', - 'arches', - 'naps', - 'fibs', - 'squad', - 'alcoves', - 'troy', - 'turf', - 'bikini', - 'calendar', - 'ways', - 'body', - 'parks', - 'sin', - 'bat', - 'election', - 'fillet', - 'autos', - 'comb', - 'pita', - 'smock', - 'stings', - 'deputy', - 'puffs', - 'games', - 'habits', - 'premises', - 'banker', - 'opium', - 'prelude', - 'guard', - 'skit', - 'ratio', - 'shire', - 'bobcat', - 'subtext', - 'pelts', - 'sampling', - 'babies', - 'jockey', - 'ham', - 'laws', - 'jewelry', - 'slum', - 'fables', - 'ranger', - 'doornail', - 'gavels', - 'grave', - 'glare', - 'spawn', - 'chants', - 'modem', - 'daybreak', - 'street', - 'rage', - 'leggings', - 'biopsy', - 'note', - 'boiler', - 'negation', - 'jailbird', - 'earthquake', - 'choirs', - 'kisses', - 'bunks', - 'suit', - 'pike', - 'dime', - 'crook', - 'noses', - 'songs', - 'earthworm', - 'salsas', - 'plating', - 'rig', - 'cartel', - 'hexagon', - 'border', - 'stress', - 'buzzword', - 'sprint', - 'catacomb', - 'signs', - 'elders', - 'dojo', - 'props', - 'nail', - 'suffix', - 'fleece', - 'media', - 'burglary', - 'box', - 'diets', - 'lads', - 'warmth', - 'cuckoo', - 'cradle', - 'ocelot', - 'beds', - 'walker', - 'flies', - 'skulls', - 'onset', - 'wane', - 'snoop', - 'cones', - 'bulb', - 'hankie', - 'tars', - 'evacuee', - 'routine', - 'eatery', - 'heart', - 'helium', - 'portal', - 'mud', - 'perjury', - 'stink', - 'rag', - 'glitch', - 'junkman', - 'nurses', - 'copy', - 'warlord', - 'outcomes', - 'recluse', - 'peons', - 'mantis', - 'visor', - 'diver', - 'yams', - 'drones', - 'enamel', - 'flogging', - 'lifter', - 'gals', - 'duff', - 'glamour', - 'levies', - 'dipper', - 'rebar', - 'fest', - 'theater', - 'patrols', - 'delays', - 'yoga', - 'wager', - 'jack', - 'network', - 'emphasis', - 'clinic', - 'canyons', - 'buffers', - 'virgin', - 'quartet', - 'lots', - 'skeptic', - 'invite', - 'sulk', - 'pole', - 'harvest', - 'pacts', - 'newts', - 'cane', - 'being', - 'maggots', - 'girl', - 'warp', - 'society', - 'gobs', - 'orb', - 'registry', - 'crewman', - 'faxes', - 'bugle', - 'postage', - 'bandit', - 'freaks', - 'wildcat', - 'perimeter', - 'wishes', - 'radish', - 'suffrage', - 'brad', - 'stand', - 'mother', - 'melody', - 'slice', - 'toil', - 'watts', - 'trios', - 'itch', - 'batons', - 'subject', - 'hazing', - 'tyrant', - 'pub', - 'wildfire', - 'tremor', - 'recess', - 'bungee', - 'dabs', - 'lists', - 'cufflinks', - 'ocean', - 'dashes', - 'trowel', - 'talks', - 'fads', - 'meteor', - 'baguette', - 'saws', - 'beret', - 'heading', - 'liquids', - 'axel', - 'witch', - 'pony', - 'pay', - 'motto', - 'image', - 'dud', - 'actor', - 'proposal', - 'kennel', - 'orbit', - 'gangs', - 'tongue', - 'director', - 'address', - 'quirk', - 'bishop', - 'tow', - 'lurch', - 'shafts', - 'units', - 'cutlass', - 'horses', - 'latrines', - 'trump', - 'maniac', - 'energies', - 'diabetes', - 'teams', - 'vipers', - 'scurvy', - 'dad', - 'fencing', - 'needles', - 'cascade', - 'zippers', - 'surfer', - 'dumpster', - 'meals', - 'haze', - 'snuff', - 'baker', - 'sphere', - 'lulls', - 'gnu', - 'buffalos', - 'pagans', - 'graves', - 'squires', - 'births', - 'aphids', - 'cookie', - 'orgasm', - 'claws', - 'scents', - 'pin', - 'baths', - 'gliders', - 'aluminum', - 'field', - 'brutes', - 'tundra', - 'vestibule', - 'spouse', - 'nude', - 'ante', - 'universe', - 'tubs', - 'monopoly', - 'thumb', - 'travel', - 'almonds', - 'frosting', - 'relation', - 'races', - 'lather', - 'bully', - 'strife', - 'howls', - 'scheme', - 'mages', - 'proofs', - 'gong', - 'engraver', - 'noodle', - 'lyricism', - 'arts', - 'disaster', - 'thirst', - 'hubcaps', - 'sugars', - 'admin', - 'grading', - 'pod', - 'program', - 'errand', - 'spice', - 'crystal', - 'shake', - 'tire', - 'stardust', - 'future', - 'hardhead', - 'uncles', - 'fright', - 'fluff', - 'sea', - 'dilation', - 'sedative', - 'books', - 'haircut', - 'abacus', - 'kettle', - 'captains', - 'wall', - 'mugshot', - 'district', - 'specialist', - 'umpires', - 'web', - 'milkmaid', - 'litmus', - 'jewel', - 'playset', - 'maneuver', - 'lapel', - 'spheres', - 'dignity', - 'sod', - 'orc', - 'gerbils', - 'rigs', - 'entry', - 'sphinx', - 'dimes', - 'handler', - 'takes', - 'toads', - 'guards', - 'receiver', - 'hawk', - 'buds', - 'ovens', - 'pianos', - 'hoof', - 'boss', - 'shards', - 'mantle', - 'froth', - 'appetizer', - 'hyphen', - 'yearbook', - 'drains', - 'slash', - 'deflator', - 'wars', - 'cobweb', - 'nutrient', - 'law', - 'overlay', - 'clutch', - 'sacks', - 'showbiz', - 'sangria', - 'prizes', - 'overpass', - 'cities', - 'pho', - 'load', - 'tv', - 'physician', - 'surveyor', - 'uproar', - 'riverbed', - 'achievement', - 'lotion', - 'fare', - 'mare', - 'genders', - 'basement', - 'extras', - 'pains', - 'headband', - 'sediment', - 'vigil', - 'sock', - 'catalog', - 'closets', - 'bazooka', - 'pedals', - 'gully', - 'beet', - 'feathers', - 'recital', - 'tuba', - 'sharks', - 'footprint', - 'offers', - 'fakes', - 'barons', - 'court', - 'spec', - 'illusion', - 'spa', - 'zit', - 'throw', - 'antipasto', - 'parts', - 'natives', - 'buyer', - 'anthill', - 'grog', - 'bucks', - 'salami', - 'burps', - 'fault', - 'suspense', - 'blinkers', - 'bathtub', - 'wiki', - 'memento', - 'crank', - 'primer', - 'haunts', - 'facilities', - 'backs', - 'pigs', - 'cave', - 'hurray', - 'roulette', - 'reggae', - 'knot', - 'effects', - 'hackle', - 'stroke', - 'snacks', - 'flatworm', - 'surge', - 'gamers', - 'possum', - 'slap', - 'stops', - 'curve', - 'groves', - 'patron', - 'furs', - 'manor', - 'purchase', - 'totals', - 'helpers', - 'gossip', - 'ration', - 'rites', - 'pawn', - 'basis', - 'wino', - 'mucus', - 'orator', - 'yards', - 'fox', - 'rogues', - 'buckles', - 'pardon', - 'cairn', - 'grudges', - 'wipes', - 'content', - 'oat', - 'bulk', - 'matches', - 'legs', - 'seabird', - 'rafts', - 'arbors', - 'charities', - 'socks', - 'nips', - 'snails', - 'hearth', - 'grooves', - 'attendant', - 'mission', - 'tern', - 'medallion', - 'paper', - 'hooks', - 'notice', - 'max', - 'wisdom', - 'thighs', - 'flagpole', - 'drool', - 'fevers', - 'wimps', - 'lefty', - 'foil', - 'chambers', - 'plane', - 'wood', - 'eddy', - 'savanna', - 'starts', - 'hams', - 'posture', - 'event', - 'beef', - 'ohms', - 'floss', - 'outages', - 'mounts', - 'epidemic', - 'bola', - 'leek', - 'colony', - 'majority', - 'wraps', - 'maw', - 'aviators', - 'thanks', - 'today', - 'silo', - 'burr', - 'doctor', - 'cassette', - 'flu', - 'clarinet', - 'stopper', - 'exams', - 'platoon', - 'stake', - 'pangs', - 'centaurs', - 'mouth', - 'reminder', - 'jugular', - 'quote', - 'tadpole', - 'buzz', - 'juror', - 'nettle', - 'crescent', - 'ideas', - 'heckler', - 'batch', - 'parasite', - 'partner', - 'batches', - 'bandana', - 'hand', - 'lotions', - 'brand', - 'pumpkin', - 'magnolia', - 'pal', - 'developer', - 'handles', - 'jingle', - 'meet', - 'landline', - 'nuts', - 'parole', - 'stowaway', - 'gin', - 'cavities', - 'banking', - 'chard', - 'clips', - 'bookcase', - 'gates', - 'convict', - 'scamp', - 'huntress', - 'cases', - 'sets', - 'crafts', - 'grease', - 'bourbon', - 'guests', - 'alfalfa', - 'shuffle', - 'mobility', - 'forager', - 'guilds', - 'catapult', - 'exploit', - 'gaps', - 'avenue', - 'raffle', - 'graffiti', - 'parasail', - 'historian', - 'frat', - 'hens', - 'cleat', - 'habitant', - 'gator', - 'railroad', - 'headrest', - 'stool', - 'passion', - 'hill', - 'nub', - 'analyst', - 'inlets', - 'quirks', - 'frocks', - 'rickshaw', - 'brine', - 'perp', - 'cubicle', - 'crux', - 'wave', - 'warps', - 'wombats', - 'burn', - 'rodeos', - 'aria', - 'acrobat', - 'curator', - 'excuse', - 'frost', - 'drapes', - 'rink', - 'stages', - 'bell', - 'octets', - 'imposter', - 'yurt', - 'ruck', - 'curd', - 'syntax', - 'sinner', - 'dolls', - 'flames', - 'pinky', - 'wannabe', - 'yawns', - 'sprees', - 'bolts', - 'fencer', - 'canoes', - 'puzzle', - 'smear', - 'worlds', - 'package', - 'controls', - 'tyke', - 'hoot', - 'spills', - 'hike', - 'beeper', - 'pulses', - 'fiends', - 'canteens', - 'crib', - 'raven', - 'pup', - 'pens', - 'trivia', - 'pen', - 'tons', - 'marimba', - 'stunt', - 'aliens', - 'pine', - 'mastiff', - 'dingbat', - 'firewall', - 'walks', - 'shiv', - 'cylinder', - 'emus', - 'magma', - 'pain', - 'polkas', - 'maximum', - 'slump', - 'schoolboy', - 'banjo', - 'ranch', - 'comedy', - 'wreckage', - 'heritage', - 'legacy', - 'satchel', - 'silica', - 'sponges', - 'tipoff', - 'rack', - 'brothel', - 'buddy', - 'citizens', - 'playmate', - 'shares', - 'capes', - 'tattoo', - 'outline', - 'lull', - 'house', - 'clickers', - 'tang', - 'prowler', - 'music', - 'drone', - 'ref', - 'witchcraft', - 'pier', - 'attendee', - 'campus', - 'tine', - 'afro', - 'grouch', - 'pose', - 'armchair', - 'blazes', - 'cuticle', - 'rhyme', - 'trinket', - 'info', - 'steward', - 'rearview', - 'grunt', - 'rinse', - 'lint', - 'woods', - 'upload', - 'musical', - 'silks', - 'senorita', - 'souvenir', - 'sonar', - 'grandma', - 'sucker', - 'simile', - 'emoticon', - 'squealer', - 'trials', - 'bakery', - 'spoiler', - 'seminars', - 'google', - 'seashell', - 'checkbook', - 'arrows', - 'eyes', - 'jester', - 'pacific', - 'cheers', - 'baristas', - 'flab', - 'throngs', - 'cheek', - 'species', - 'episode', - 'carrots', - 'pips', - 'diploma', - 'dents', - 'yelp', - 'clash', - 'marines', - 'idealism', - 'disdain', - 'soul', - 'emblem', - 'ferns', - 'blouses', - 'ruin', - 'dispatch', - 'backpack', - 'savings', - 'blight', - 'delusions', - 'weapons', - 'outreach', - 'turbojet', - 'mango', - 'rap', - 'baboons', - 'boat', - 'rinks', - 'meal', - 'points', - 'soil', - 'hitches', - 'hockey', - 'meow', - 'wildlife', - 'clang', - 'handful', - 'martini', - 'masts', - 'modules', - 'forearm', - 'ralph', - 'batteries', - 'punisher', - 'tile', - 'braids', - 'ease', - 'dirt', - 'cheddar', - 'winds', - 'nettles', - 'shell', - 'travesty', - 'fuse', - 'match', - 'democracy', - 'craw', - 'bars', - 'stratus', - 'mats', - 'manuals', - 'protester', - 'lofts', - 'gaze', - 'hummus', - 'tea', - 'cusp', - 'pucks', - 'coupon', - 'towel', - 'panama', - 'flecks', - 'exorcism', - 'rat', - 'sashes', - 'nibs', - 'figment', - 'wait', - 'flint', - 'phobia', - 'dealer', - 'companies', - 'wrath', - 'morons', - 'pectin', - 'ants', - 'instalment', - 'pampers', - 'blend', - 'proxies', - 'leaves', - 'surf', - 'pet', - 'sinker', - 'egg', - 'monogamy', - 'locker', - 'clams', - 'inventory', - 'sliver', - 'karate', - 'italics', - 'miso', - 'dangers', - 'mode', - 'oasis', - 'frenzy', - 'kiss', - 'edition', - 'traits', - 'freedom', - 'cages', - 'flavors', - 'decade', - 'mustang', - 'rookie', - 'cowboys', - 'mate', - 'tower', - 'devotee', - 'days', - 'alcove', - 'bookstore', - 'lyricist', - 'waitress', - 'pellets', - 'icepack', - 'handbook', - 'wits', - 'sables', - 'musket', - 'chime', - 'cafes', - 'peso', - 'oaks', - 'clans', - 'pond', - 'mills', - 'elite', - 'sneak', - 'avocados', - 'wedge', - 'tirade', - 'doorway', - 'stupor', - 'bears', - 'denials', - 'crybaby', - 'coil', - 'reps', - 'slur', - 'cubs', - 'pairs', - 'idea', - 'bump', - 'guardian', - 'croc', - 'studios', - 'mops', - 'dairy', - 'rune', - 'sound', - 'decimal', - 'elbows', - 'spray', - 'gum', - 'copilot', - 'kayak', - 'dropper', - 'grove', - 'technician', - 'rifles', - 'jujitsu', - 'winters', - 'caravans', - 'scent', - 'upkeep', - 'potato', - 'flag', - 'tabloid', - 'divers', - 'districts', - 'oddity', - 'lasso', - 'moment', - 'smirks', - 'opals', - 'glow', - 'cheetah', - 'devil', - 'roaches', - 'sandfish', - 'sling', - 'dominoes', - 'cherries', - 'thumbs', - 'draw', - 'triceps', - 'sessions', - 'gal', - 'mistake', - 'rupture', - 'recoil', - 'gat', - 'flares', - 'patios', - 'humility', - 'users', - 'overview', - 'victim', - 'static', - 'build', - 'flour', - 'lout', - 'tofu', - 'priest', - 'feds', - 'nape', - 'customer', - 'deletion', - 'sequels', - 'trips', - 'clone', - 'payback', - 'coat', - 'footrest', - 'trap', - 'remedy', - 'bibs', - 'turn', - 'founding', - 'joystick', - 'celebrity', - 'saint', - 'slots', - 'crusher', - 'skier', - 'crash', - 'visits', - 'exit', - 'markets', - 'airplane', - 'boar', - 'sodium', - 'reverb', - 'loops', - 'print', - 'lobsters', - 'nook', - 'quotas', - 'design', - 'fist', - 'gizmos', - 'prom', - 'comrade', - 'dwarves', - 'denial', - 'healers', - 'widget', - 'ex', - 'nods', - 'interns', - 'hues', - 'song', - 'wombat', - 'napalm', - 'ellipse', - 'emu', - 'torches', - 'sample', - 'commuter', - 'duct', - 'misses', - 'rainstorm', - 'lantern', - 'cornmeal', - 'plum', - 'glaze', - 'androids', - 'clubs', - 'pandemic', - 'contact', - 'burials', - 'ballet', - 'crows', - 'endpoint', - 'numbers', - 'petition', - 'slack', - 'hippo', - 'pranker', - 'adages', - 'wolf', - 'hack', - 'drama', - 'treatment', - 'gasp', - 'trek', - 'product', - 'tabs', - 'ketchup', - 'glues', - 'hairpin', - 'armory', - 'need', - 'goatskin', - 'capitols', - 'pop', - 'hoses', - 'coleslaw', - 'yolk', - 'rants', - 'detector', - 'mouse', - 'busts', - 'jawbone', - 'beads', - 'ninja', - 'notepad', - 'wreath', - 'spurs', - 'cattle', - 'baron', - 'ghosts', - 'dustpan', - 'schemes', - 'matador', - 'survey', - 'trapeze', - 'nickname', - 'prayers', - 'hips', - 'maps', - 'snip', - 'thing', - 'strands', - 'sundial', - 'hydrogen', - 'skimmer', - 'raids', - 'heels', - 'caboose', - 'sleigh', - 'chaff', - 'supply', - 'jump', - 'howl', - 'mix', - 'smudge', - 'trades', - 'flesh', - 'corset', - 'slaves', - 'dawdler', - 'fax', - 'owls', - 'titan', - 'purebred', - 'earflap', - 'canvas', - 'hicks', - 'ruby', - 'musician', - 'staples', - 'champion', - 'grad', - 'elixir', - 'statute', - 'magnet', - 'hoard', - 'beeswax', - 'gadget', - 'fonts', - 'acid', - 'washroom', - 'sarong', - 'carb', - 'pause', - 'scrolls', - 'floods', - 'gran', - 'rally', - 'bombs', - 'drink', - 'snippet', - 'editor', - 'manatee', - 'finisher', - 'kid', - 'barrel', - 'glacier', - 'waiver', - 'kinks', - 'danger', - 'runes', - 'lumps', - 'fares', - 'mothers', - 'infants', - 'conch', - 'hydrants', - 'vermin', - 'tunnels', - 'gyro', - 'handcart', - 'bacteria', - 'octopus', - 'butter', - 'padlock', - 'clamps', - 'headwear', - 'duress', - 'blemish', - 'playpen', - 'timing', - 'engines', - 'idioms', - 'baubles', - 'viper', - 'handgrip', - 'tweet', - 'octave', - 'wick', - 'bumper', - 'sniff', - 'skillet', - 'tusks', - 'washtub', - 'riders', - 'birch', - 'skydiver', - 'texts', - 'patches', - 'clue', - 'saw', - 'cost', - 'cucumber', - 'clerics', - 'anime', - 'loins', - 'fondue', - 'activity', - 'coop', - 'videos', - 'gnomes', - 'regions', - 'stoner', - 'lad', - 'skate', - 'legend', - 'gravel', - 'moles', - 'havoc', - 'blurb', - 'premium', - 'belches', - 'lip', - 'landmark', - 'remorse', - 'depth', - 'scone', - 'scotch', - 'voles', - 'minute', - 'stack', - 'warts', - 'singers', - 'lunatic', - 'drudge', - 'hijacker', - 'pavilion', - 'forehead', - 'dryad', - 'cravings', - 'webcam', - 'ebooks', - 'masks', - 'cliffs', - 'orphan', - 'pool', - 'glowworm', - 'intern', - 'chariots', - 'menu', - 'shadow', - 'wagon', - 'download', - 'tusk', - 'numeral', - 'braces', - 'napkins', - 'dive', - 'toilet', - 'bones', - 'tibia', - 'pancakes', - 'gutter', - 'marinade', - 'farm', - 'potions', - 'cracks', - 'animators', - 'ragweed', - 'linguist', - 'thread', - 'footgear', - 'plug', - 'creeds', - 'asteroid', - 'humorist', - 'slope', - 'apples', - 'apricots', - 'oxygen', - 'handling', - 'jewels', - 'vendor', - 'scene', - 'scads', - 'buffalo', - 'radiance', - 'trust', - 'willow', - 'camper', - 'swivel', - 'hop', - 'final', - 'wound', - 'core', - 'charlatan', - 'podcast', - 'reef', - 'tips', - 'glove', - 'magnets', - 'footpath', - 'bladder', - 'bot', - 'plant', - 'jurors', - 'circle', - 'faucet', - 'fog', - 'burg', - 'violator', - 'dove', - 'dolphin', - 'rungs', - 'penny', - 'hog', - 'tulips', - 'perch', - 'hangout', - 'size', - 'clocks', - 'gulf', - 'lunches', - 'shops', - 'stag', - 'cramps', - 'window', - 'data', - 'decoys', - 'day', - 'stadium', - 'deviator', - 'cinema', - 'gnome', - 'items', - 'kit', - 'ton', - 'wipe', - 'shanty', - 'plasma', - 'fears', - 'noon', - 'struggle', - 'truism', - 'jolt', - 'pastor', - 'deferral', - 'cause', - 'slants', - 'skyline', - 'spies', - 'papaya', - 'bum', - 'onions', - 'juncture', - 'pops', - 'mom', - 'marsh', - 'tells', - 'finalist', - 'tissue', - 'fold', - 'sands', - 'snowball', - 'soak', - 'garnish', - 'vault', - 'glances', - 'jets', - 'bevy', - 'armies', - 'end', - 'grandkid', - 'storks', - 'arc', - 'fender', - 'gob', - 'clashes', - 'tights', - 'slowpoke', - 'progress', - 'exposure', - 'cheater', - 'crowbar', - 'information', - 'coasters', - 'teenager', - 'biplane', - 'north', - 'square', - 'health', - 'tuna', - 'chasm', - 'violets', - 'charters', - 'exterior', - 'cloak', - 'talker', - 'rip', - 'fabric', - 'curler', - 'compound', - 'dairies', - 'powder', - 'sauna', - 'blob', - 'slums', - 'sisters', - 'backup', - 'rent', - 'moor', - 'wrinkle', - 'risotto', - 'stuff', - 'wrists', - 'pledge', - 'windows', - 'cartels', - 'pints', - 'garlic', - 'sky', - 'antiques', - 'tort', - 'pecan', - 'curse', - 'malls', - 'kilns', - 'gasps', - 'shade', - 'manpower', - 'filing', - 'rattle', - 'typo', - 'bush', - 'actors', - 'fable', - 'coffee', - 'scabs', - 'comedies', - 'trains', - 'drills', - 'collage', - 'fiasco', - 'vent', - 'errands', - 'alpacas', - 'flax', - 'salmon', - 'vigor', - 'cinemas', - 'mammal', - 'swimmer', - 'mandarin', - 'munchkin', - 'boost', - 'roux', - 'phrase', - 'option', - 'gentleman', - 'child', - 'ant', - 'contracts', - 'devotion', - 'oxford', - 'phrasing', - 'pulse', - 'relay', - 'dough', - 'drought', - 'jaws', - 'writ', - 'glade', - 'cabin', - 'cop', - 'chaw', - 'tag', - 'vendetta', - 'balm', - 'classes', - 'canopies', - 'motes', - 'rents', - 'button', - 'circles', - 'arm', - 'head', - 'pleas', - 'steamboat', - 'biz', - 'primate', - 'prude', - 'hanky', - 'granite', - 'tugs', - 'etching', - 'ream', - 'cleats', - 'geometry', - 'emission', - 'purity', - 'hick', - 'shoes', - 'usage', - 'gel', - 'pass', - 'kilogram', - 'binoculars', - 'mullets', - 'snooze', - 'doughboy', - 'polymer', - 'genes', - 'term', - 'lines', - 'rib', - 'oldie', - 'chalice', - 'nubs', - 'memes', - 'degree', - 'empathy', - 'trade', - 'zodiac', - 'altars', - 'spells', - 'scoop', - 'canes', - 'umbrella', - 'spiral', - 'anchor', - 'pearls', - 'snowman', - 'swan', - 'pupa', - 'puppy', - 'logo', - 'cringe', - 'axis', - 'fever', - 'plank', - 'wizards', - 'hunters', - 'banana', - 'bunt', - 'woman', - 'peroxide', - 'oven', - 'sofa', - 'broncos', - 'reasons', - 'crimp', - 'residue', - 'sink', - 'decals', - 'feta', - 'wimp', - 'limb', - 'minds', - 'soaks', - 'chute', - 'fir', - 'pillar', - 'gram', - 'spines', - 'salt', - 'hex', - 'mania', - 'chit', - 'ewe', - 'tie', - 'gauge', - 'compost', - 'talon', - 'hutch', - 'charm', - 'fauna', - 'graders', - 'dollop', - 'company', - 'roosts', - 'praise', - 'scammer', - 'yetis', - 'pace', - 'delivery', - 'cameo', - 'chunk', - 'donors', - 'ditches', - 'strategy', - 'keg', - 'tartar', - 'locusts', - 'liqueur', - 'brace', - 'rug', - 'beings', - 'looks', - 'blubber', - 'gif', - 'turbine', - 'pumps', - 'pyre', - 'blobs', - 'gill', - 'tiff', - 'thuds', - 'hides', - 'stable', - 'domes', - 'spacebar', - 'gull', - 'tango', - 'finish', - 'mongoose', - 'system', - 'citadel', - 'scandal', - 'astronaut', - 'drop', - 'veins', -] + while (normalized.endsWith('-')) { + normalized = normalized.slice(0, -1) + } -function randomElement(arr: T[]): T { - return arr[Math.floor(Math.random() * arr.length)]! -} - -export function generateHostname(): string { - return `${randomElement(ADJECTIVES)}-${randomElement(NOUNS)}` + return normalized || 'start9' } diff --git a/web/projects/ui/src/app/routes/portal/portal.component.ts b/web/projects/ui/src/app/routes/portal/portal.component.ts index e0ad431ec..2f1aabd34 100644 --- a/web/projects/ui/src/app/routes/portal/portal.component.ts +++ b/web/projects/ui/src/app/routes/portal/portal.component.ts @@ -101,7 +101,7 @@ export class PortalComponent { private readonly patch = inject>(PatchDB) private readonly api = inject(ApiService) - readonly name = toSignal(this.patch.watch$('ui', 'name')) + readonly name = toSignal(this.patch.watch$('serverInfo', 'name')) readonly update = toSignal(inject(OSService).updating$) readonly bar = signal(true) diff --git a/web/projects/ui/src/app/routes/portal/routes/system/routes/general/general.component.ts b/web/projects/ui/src/app/routes/portal/routes/system/routes/general/general.component.ts index ea2c0d76d..6dc7a0fb4 100644 --- a/web/projects/ui/src/app/routes/portal/routes/system/routes/general/general.component.ts +++ b/web/projects/ui/src/app/routes/portal/routes/system/routes/general/general.component.ts @@ -7,7 +7,6 @@ import { } from '@angular/core' import { toSignal } from '@angular/core/rxjs-interop' import { FormsModule } from '@angular/forms' -import { Title } from '@angular/platform-browser' import { RouterLink } from '@angular/router' import { DialogService, @@ -30,9 +29,7 @@ import { TuiAnimated } from '@taiga-ui/cdk' import { TuiAppearance, TuiButton, - tuiFadeIn, TuiIcon, - tuiScaleIn, TuiTextfield, TuiTitle, } from '@taiga-ui/core' @@ -46,7 +43,7 @@ import { import { TuiCell, tuiCellOptionsProvider } from '@taiga-ui/layout' import { PolymorpheusComponent } from '@taiga-ui/polymorpheus' import { PatchDB } from 'patch-db-client' -import { filter, Subscription } from 'rxjs' +import { filter } from 'rxjs' import { ApiService } from 'src/app/services/api/embassy-api.service' import { OSService } from 'src/app/services/os.service' import { DataModel } from 'src/app/services/patch-db/data-model' @@ -54,6 +51,7 @@ import { TitleDirective } from 'src/app/services/title.service' import { SnekDirective } from './snek.directive' import { UPDATE } from './update.component' import { KeyboardSelectComponent } from './keyboard-select.component' +import { ServerNameDialog } from './server-name.dialog' @Component({ template: ` @@ -98,25 +96,16 @@ import { KeyboardSelectComponent } from './keyboard-select.component'
- {{ 'Server Hostname' | i18n }} + {{ 'Server Name' | i18n }} - {{ server.hostname }} + {{ server.name }} + {{ server.hostname }}.local -
-
- - - {{ 'Browser tab title' | i18n }} - - {{ 'Customize the name appearing in your browser tab' | i18n }} - - - -
@@ -276,7 +265,6 @@ import { KeyboardSelectComponent } from './keyboard-select.component' ], }) export default class SystemGeneralComponent { - private readonly title = inject(Title) private readonly dialogs = inject(TuiResponsiveDialogService) private readonly loader = inject(LoadingService) private readonly errorService = inject(ErrorService) @@ -290,7 +278,6 @@ export default class SystemGeneralComponent { count = 0 readonly server = toSignal(this.patch.watch$('serverInfo')) - readonly name = toSignal(this.patch.watch$('ui', 'name')) readonly score = toSignal(this.patch.watch$('ui', 'snakeHighScore')) readonly os = inject(OSService) readonly i18nService = inject(i18nService) @@ -360,33 +347,35 @@ export default class SystemGeneralComponent { } } - onHostname() { - const sub = this.dialog - .openPrompt({ - label: 'Server Hostname', - data: { - label: 'Hostname' as i18nKey, - message: - 'This value will be used as your server hostname and mDNS address on the LAN. Only lowercase letters, numbers, and hyphens are allowed.', - placeholder: 'start9' as i18nKey, - required: true, - buttonText: 'Save', - initialValue: this.server()?.hostname || '', - pattern: '^[a-z0-9][a-z0-9-]*$', - patternError: - 'Hostname must contain only lowercase letters, numbers, and hyphens, and cannot start with a hyphen.', + onName() { + const server = this.server() + if (!server) return + + this.dialog + .openComponent<{ name: string; hostname: string } | null>( + new PolymorpheusComponent(ServerNameDialog, this.injector), + { + label: 'Server Name', + size: 's', + data: { initialName: server.name }, }, - }) - .subscribe(hostname => { + ) + .pipe( + filter( + (result): result is { name: string; hostname: string } => + result !== null, + ), + ) + .subscribe(result => { if (this.win.location.hostname.endsWith('.local')) { - this.confirmHostnameChange(hostname, sub) + this.confirmNameChange(result) } else { - this.saveHostname(hostname, sub) + this.saveName(result) } }) } - private confirmHostnameChange(hostname: string, promptSub: Subscription) { + private confirmNameChange(result: { name: string; hostname: string }) { this.dialog .openConfirm({ label: 'Warning', @@ -398,18 +387,17 @@ export default class SystemGeneralComponent { }, }) .pipe(filter(Boolean)) - .subscribe(() => this.saveHostname(hostname, promptSub, true)) + .subscribe(() => this.saveName(result, true)) } - private async saveHostname( - hostname: string, - promptSub: Subscription, + private async saveName( + { name, hostname }: { name: string; hostname: string }, wasLocal = false, ) { const loader = this.loader.open('Saving').subscribe() try { - await this.api.setHostname({ hostname }) + await this.api.setHostname({ name, hostname }) if (wasLocal) { const { protocol, port } = this.win.location @@ -432,40 +420,9 @@ export default class SystemGeneralComponent { this.errorService.handleError(e) } finally { loader.unsubscribe() - promptSub.unsubscribe() } } - onTitle() { - const sub = this.dialog - .openPrompt({ - label: 'Browser tab title', - data: { - label: 'Device Name', - message: - 'This value will be displayed as the title of your browser tab.', - placeholder: 'StartOS' as i18nKey, - required: false, - buttonText: 'Save', - initialValue: this.name(), - }, - }) - .subscribe(async name => { - const loader = this.loader.open('Saving').subscribe() - const title = `${name || 'StartOS'} — ${this.i18n.transform('System')}` - - try { - await this.api.setDbValue(['name'], name || null) - this.title.setTitle(title) - } catch (e: any) { - this.errorService.handleError(e) - } finally { - loader.unsubscribe() - sub.unsubscribe() - } - }) - } - async onRepair() { this.dialog .openConfirm({ diff --git a/web/projects/ui/src/app/routes/portal/routes/system/routes/general/server-name.dialog.ts b/web/projects/ui/src/app/routes/portal/routes/system/routes/general/server-name.dialog.ts new file mode 100644 index 000000000..a2f11f1a5 --- /dev/null +++ b/web/projects/ui/src/app/routes/portal/routes/system/routes/general/server-name.dialog.ts @@ -0,0 +1,63 @@ +import { Component } from '@angular/core' +import { FormsModule } from '@angular/forms' +import { i18nPipe, normalizeHostname } from '@start9labs/shared' +import { TuiButton, TuiDialogContext, TuiTextfield } from '@taiga-ui/core' +import { injectContext } from '@taiga-ui/polymorpheus' + +@Component({ + template: ` + + + + + @if (name.trim()) { +

{{ normalizeHostname(name) }}.local

+ } +
+ + +
+ `, + styles: ` + .hostname-preview { + color: var(--tui-text-secondary); + font: var(--tui-font-text-s); + margin-top: 0.25rem; + } + + footer { + display: flex; + gap: 1rem; + margin-top: 1.5rem; + } + `, + imports: [FormsModule, TuiButton, TuiTextfield, i18nPipe], +}) +export class ServerNameDialog { + private readonly context = + injectContext< + TuiDialogContext< + { name: string; hostname: string } | null, + { initialName: string } + > + >() + + name = this.context.data.initialName + readonly normalizeHostname = normalizeHostname + + cancel() { + this.context.completeWith(null) + } + + confirm() { + const name = this.name.trim() + this.context.completeWith({ + name, + hostname: normalizeHostname(name), + }) + } +} diff --git a/web/projects/ui/src/app/routes/portal/routes/updates/item.component.ts b/web/projects/ui/src/app/routes/portal/routes/updates/item.component.ts index 0a87d2faf..09c82580b 100644 --- a/web/projects/ui/src/app/routes/portal/routes/updates/item.component.ts +++ b/web/projects/ui/src/app/routes/portal/routes/updates/item.component.ts @@ -183,6 +183,7 @@ import UpdatesComponent from './updates.component' &:last-child { white-space: nowrap; + text-align: right; } &[colspan]:only-child { diff --git a/web/projects/ui/src/app/services/api/embassy-api.service.ts b/web/projects/ui/src/app/services/api/embassy-api.service.ts index 7f72662dd..cf660b87b 100644 --- a/web/projects/ui/src/app/services/api/embassy-api.service.ts +++ b/web/projects/ui/src/app/services/api/embassy-api.service.ts @@ -121,7 +121,7 @@ export abstract class ApiService { abstract toggleKiosk(enable: boolean): Promise - abstract setHostname(params: { hostname: string }): Promise + abstract setHostname(params: T.SetServerHostnameParams): Promise abstract setKeyboard(params: FullKeyboard): Promise diff --git a/web/projects/ui/src/app/services/api/embassy-live-api.service.ts b/web/projects/ui/src/app/services/api/embassy-live-api.service.ts index 886b58583..200792a89 100644 --- a/web/projects/ui/src/app/services/api/embassy-live-api.service.ts +++ b/web/projects/ui/src/app/services/api/embassy-live-api.service.ts @@ -255,7 +255,7 @@ export class LiveApiService extends ApiService { }) } - async setHostname(params: { hostname: string }): Promise { + async setHostname(params: T.SetServerHostnameParams): Promise { return this.rpcRequest({ method: 'server.set-hostname', params }) } diff --git a/web/projects/ui/src/app/services/api/embassy-mock-api.service.ts b/web/projects/ui/src/app/services/api/embassy-mock-api.service.ts index c7f8b8c13..816932203 100644 --- a/web/projects/ui/src/app/services/api/embassy-mock-api.service.ts +++ b/web/projects/ui/src/app/services/api/embassy-mock-api.service.ts @@ -447,10 +447,15 @@ export class MockApiService extends ApiService { return null } - async setHostname(params: { hostname: string }): Promise { + async setHostname(params: T.SetServerHostnameParams): Promise { await pauseFor(1000) const patch = [ + { + op: PatchOp.REPLACE, + path: '/serverInfo/name', + value: params.name, + }, { op: PatchOp.REPLACE, path: '/serverInfo/hostname', diff --git a/web/projects/ui/src/app/services/api/mock-patch.ts b/web/projects/ui/src/app/services/api/mock-patch.ts index 3cc3393e8..cff1c4ddf 100644 --- a/web/projects/ui/src/app/services/api/mock-patch.ts +++ b/web/projects/ui/src/app/services/api/mock-patch.ts @@ -232,6 +232,7 @@ export const mockPatchData: DataModel = { shuttingDown: false, backupProgress: null, }, + name: 'Random Words', hostname: 'random-words', pubkey: 'npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237lmu63q0uf63m', caFingerprint: '63:2B:11:99:44:40:17:DF:37:FC:C3:DF:0F:3D:15', diff --git a/web/projects/ui/src/app/utils/title-resolver.ts b/web/projects/ui/src/app/utils/title-resolver.ts index a4bed3349..21565679b 100644 --- a/web/projects/ui/src/app/utils/title-resolver.ts +++ b/web/projects/ui/src/app/utils/title-resolver.ts @@ -13,7 +13,7 @@ export async function titleResolver({ let route = inject(i18nPipe).transform(data['title']) const patch = inject>(PatchDB) - const title = await firstValueFrom(patch.watch$('ui', 'name')) + const title = await firstValueFrom(patch.watch$('serverInfo', 'name')) const id = params['pkgId'] if (id) {