Skip to content

Instantly share code, notes, and snippets.

@arik-so
Last active September 20, 2022 06:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arik-so/09b7d3567562b60fff43974020c33eb5 to your computer and use it in GitHub Desktop.
Save arik-so/09b7d3567562b60fff43974020c33eb5 to your computer and use it in GitHub Desktop.
#[cfg(test)]
mod tests {
use std::cmp::min;
use bitcoin::hashes::Hash;
use bitcoin::hashes::hex::ToHex;
use secp256k1::rand;
use secp256k1::rand::Rng;
#[test]
///
/// Entropy bits to word count:
/// 128 bits => 12 words
/// 160 bits => 15 words
/// 192 bits => 18 words
/// 224 bits => 21 words
/// 256 bits => 24 words // technically max supported
/// 288 bits => 27 words
/// 320 bits => 30 words
fn generate_sorted_mnemonic() {
let entropy_bits = 128;
assert!(entropy_bits >= 128, "Entropy must be at least 128 bits");
assert_eq!(entropy_bits % 32, 0, "Entropy must be a multiple of 32 bits");
let final_word_count = (entropy_bits * 3) / 32;
let entropy_bytes = entropy_bits / 8;
let mut rng = rand::thread_rng();
loop {
let mut random_bytes = vec![0u8; entropy_bytes];
for current_byte in random_bytes.iter_mut() {
*current_byte = rng.gen()
}
let undenals = octets_to_undenals(&random_bytes);
println!("undenals:");
print_undenals(&undenals);
let mut sorted_undenals = sort_undenals_preserving_last(&undenals.clone());
println!("sorted undenals:");
print_undenals(&sorted_undenals);
let sorted_bytes = undenals_to_octets(&sorted_undenals);
let sorted_bytes = sorted_bytes[0..random_bytes.len()].to_vec();
println!("sorted bytes:");
print_bytes(&sorted_bytes);
// this condition may not necessarily be met
// assert_eq!(random_bytes.last(), sorted_bytes.last());
// now, let's calculate the checksum
let hash = bitcoin::hashes::sha256::Hash::hash(&sorted_bytes).to_vec();
// println!("hash: {}", hash.to_hex());
let mut checksummed_bytes = sorted_bytes.clone();
let bits_to_append = entropy_bits / 32;
let bytes_to_append = (bits_to_append + 7) / 8;
checksummed_bytes.extend_from_slice(&hash[0..bytes_to_append]);
// println!("raw checksummed bytes:");
// print_bytes(&checksummed_bytes);
let last_byte_bits_to_preserve = (bits_to_append % 8) as u32;
if last_byte_bits_to_preserve != 0 {
let last_byte_mask = 255 - 2u8.pow(8 - last_byte_bits_to_preserve) + 1;
// println!("last byte mask: {:b}", last_byte_mask);
let last_index = checksummed_bytes.len() - 1;
let last_byte = checksummed_bytes[last_index];
checksummed_bytes[last_index] = (last_byte & last_byte_mask);
}
println!("checksummed bytes:");
print_bytes(&checksummed_bytes);
let untrimmed_checksummed_undenals = octets_to_undenals(&checksummed_bytes);
let checksummed_undenals = untrimmed_checksummed_undenals[0..final_word_count].to_vec();
println!("checksummed undenals:");
print_undenals(&checksummed_undenals);
let mut resorted_undenals = checksummed_undenals.clone();
resorted_undenals.sort();
if checksummed_undenals == resorted_undenals {
println!("finalized mnemonic: {}", checksummed_bytes.to_hex());
let dictionary = get_mnemonic_words();
let mut words = Vec::with_capacity(checksummed_undenals.len());
for current_value in checksummed_undenals {
let current_word = &dictionary[current_value as usize];
words.push(current_word.to_owned());
}
println!("mnemonic phrase: {}", words.join(" "));
break;
}
}
}
fn sort_undenals_preserving_last(undenals: &[u16]) -> Vec<u16> {
let mut sorted_undenals = undenals.to_vec();
sorted_undenals.sort();
sorted_undenals
// let count = undenals.len();
// let mut sortable_undenals = (&undenals[0..count-1]).to_vec();
// sortable_undenals.sort();
// sortable_undenals.push(undenals[count-1]);
// sortable_undenals
}
fn octets_to_undenals(octets: &[u8]) -> Vec<u16> {
let bits = octets.len() * 8;
let undenal_length = (bits + 10) / 11;
let mut current_byte_index = 0;
let mut remaining_byte_bits = 8;
let mut undenals = vec![0u16; undenal_length];
let mut current_undenal_index = 0;
let max_undenal = 2u16.pow(11) - 1;
for current_undenal in undenals.iter_mut() {
let mut remaining_undenal_bits = 11;
current_undenal_index += 1;
while remaining_undenal_bits > 0 {
if current_byte_index >= octets.len() {
break;
}
let current_byte = octets[current_byte_index] as u16;
let bits_to_consume = min(remaining_byte_bits, remaining_undenal_bits);
let offset = remaining_undenal_bits-remaining_byte_bits;
// println!("offset: {}", offset);
let delta = if offset >= 0 {
current_byte << offset
} else {
// print!("O{}>>{} + ", current_byte_index+1, -offset);
current_byte >> (-offset)
};
let restricted_delta = delta & max_undenal;
*current_undenal += restricted_delta;
remaining_undenal_bits -= bits_to_consume;
remaining_byte_bits -= bits_to_consume;
if remaining_byte_bits == 0 {
current_byte_index += 1;
remaining_byte_bits = 8;
}
}
}
undenals
}
fn undenals_to_octets(undenals: &[u16]) -> Vec<u8> {
let bits = undenals.len() * 11;
let octet_length = (bits + 7) / 8;
let mut current_undenal_index = 0;
let mut remaining_undenal_bits = 11;
let mut octets = vec![0u8; octet_length];
let mut current_byte_index = 0;
let max_bit = 255;
for current_byte in octets.iter_mut() {
let mut remaining_bits = 8;
while remaining_bits > 0 {
if current_undenal_index >= undenals.len() {
break;
}
let current_undenal = undenals[current_undenal_index] as u16;
let bits_to_consume = min(remaining_undenal_bits, remaining_bits);
let offset = remaining_bits - remaining_undenal_bits;
let delta = if offset >= 0 {
current_undenal << offset
} else {
current_undenal >> (-offset)
};
let restricted_delta = (delta & max_bit) as u8;
*current_byte += restricted_delta;
remaining_bits -= bits_to_consume;
remaining_undenal_bits -= bits_to_consume;
if remaining_undenal_bits == 0 {
current_undenal_index += 1;
remaining_undenal_bits = 11;
}
}
}
octets
}
fn print_undenals(undenals: &[u16]){
println!("{:?}", undenals);
for current_undenal in undenals {
print!("{:011b} ", current_undenal)
}
print!("\n");
}
fn print_bytes(bytes: &[u8]){
println!("{:?}", bytes);
for current_byte in bytes {
print!("{:08b} ", current_byte)
}
print!("\n");
}
fn get_mnemonic_words() -> Vec<String> {
vec![
"abandon".to_string(),
"ability".to_string(),
"able".to_string(),
"about".to_string(),
"above".to_string(),
"absent".to_string(),
"absorb".to_string(),
"abstract".to_string(),
"absurd".to_string(),
"abuse".to_string(),
"access".to_string(),
"accident".to_string(),
"account".to_string(),
"accuse".to_string(),
"achieve".to_string(),
"acid".to_string(),
"acoustic".to_string(),
"acquire".to_string(),
"across".to_string(),
"act".to_string(),
"action".to_string(),
"actor".to_string(),
"actress".to_string(),
"actual".to_string(),
"adapt".to_string(),
"add".to_string(),
"addict".to_string(),
"address".to_string(),
"adjust".to_string(),
"admit".to_string(),
"adult".to_string(),
"advance".to_string(),
"advice".to_string(),
"aerobic".to_string(),
"affair".to_string(),
"afford".to_string(),
"afraid".to_string(),
"again".to_string(),
"age".to_string(),
"agent".to_string(),
"agree".to_string(),
"ahead".to_string(),
"aim".to_string(),
"air".to_string(),
"airport".to_string(),
"aisle".to_string(),
"alarm".to_string(),
"album".to_string(),
"alcohol".to_string(),
"alert".to_string(),
"alien".to_string(),
"all".to_string(),
"alley".to_string(),
"allow".to_string(),
"almost".to_string(),
"alone".to_string(),
"alpha".to_string(),
"already".to_string(),
"also".to_string(),
"alter".to_string(),
"always".to_string(),
"amateur".to_string(),
"amazing".to_string(),
"among".to_string(),
"amount".to_string(),
"amused".to_string(),
"analyst".to_string(),
"anchor".to_string(),
"ancient".to_string(),
"anger".to_string(),
"angle".to_string(),
"angry".to_string(),
"animal".to_string(),
"ankle".to_string(),
"announce".to_string(),
"annual".to_string(),
"another".to_string(),
"answer".to_string(),
"antenna".to_string(),
"antique".to_string(),
"anxiety".to_string(),
"any".to_string(),
"apart".to_string(),
"apology".to_string(),
"appear".to_string(),
"apple".to_string(),
"approve".to_string(),
"april".to_string(),
"arch".to_string(),
"arctic".to_string(),
"area".to_string(),
"arena".to_string(),
"argue".to_string(),
"arm".to_string(),
"armed".to_string(),
"armor".to_string(),
"army".to_string(),
"around".to_string(),
"arrange".to_string(),
"arrest".to_string(),
"arrive".to_string(),
"arrow".to_string(),
"art".to_string(),
"artefact".to_string(),
"artist".to_string(),
"artwork".to_string(),
"ask".to_string(),
"aspect".to_string(),
"assault".to_string(),
"asset".to_string(),
"assist".to_string(),
"assume".to_string(),
"asthma".to_string(),
"athlete".to_string(),
"atom".to_string(),
"attack".to_string(),
"attend".to_string(),
"attitude".to_string(),
"attract".to_string(),
"auction".to_string(),
"audit".to_string(),
"august".to_string(),
"aunt".to_string(),
"author".to_string(),
"auto".to_string(),
"autumn".to_string(),
"average".to_string(),
"avocado".to_string(),
"avoid".to_string(),
"awake".to_string(),
"aware".to_string(),
"away".to_string(),
"awesome".to_string(),
"awful".to_string(),
"awkward".to_string(),
"axis".to_string(),
"baby".to_string(),
"bachelor".to_string(),
"bacon".to_string(),
"badge".to_string(),
"bag".to_string(),
"balance".to_string(),
"balcony".to_string(),
"ball".to_string(),
"bamboo".to_string(),
"banana".to_string(),
"banner".to_string(),
"bar".to_string(),
"barely".to_string(),
"bargain".to_string(),
"barrel".to_string(),
"base".to_string(),
"basic".to_string(),
"basket".to_string(),
"battle".to_string(),
"beach".to_string(),
"bean".to_string(),
"beauty".to_string(),
"because".to_string(),
"become".to_string(),
"beef".to_string(),
"before".to_string(),
"begin".to_string(),
"behave".to_string(),
"behind".to_string(),
"believe".to_string(),
"below".to_string(),
"belt".to_string(),
"bench".to_string(),
"benefit".to_string(),
"best".to_string(),
"betray".to_string(),
"better".to_string(),
"between".to_string(),
"beyond".to_string(),
"bicycle".to_string(),
"bid".to_string(),
"bike".to_string(),
"bind".to_string(),
"biology".to_string(),
"bird".to_string(),
"birth".to_string(),
"bitter".to_string(),
"black".to_string(),
"blade".to_string(),
"blame".to_string(),
"blanket".to_string(),
"blast".to_string(),
"bleak".to_string(),
"bless".to_string(),
"blind".to_string(),
"blood".to_string(),
"blossom".to_string(),
"blouse".to_string(),
"blue".to_string(),
"blur".to_string(),
"blush".to_string(),
"board".to_string(),
"boat".to_string(),
"body".to_string(),
"boil".to_string(),
"bomb".to_string(),
"bone".to_string(),
"bonus".to_string(),
"book".to_string(),
"boost".to_string(),
"border".to_string(),
"boring".to_string(),
"borrow".to_string(),
"boss".to_string(),
"bottom".to_string(),
"bounce".to_string(),
"box".to_string(),
"boy".to_string(),
"bracket".to_string(),
"brain".to_string(),
"brand".to_string(),
"brass".to_string(),
"brave".to_string(),
"bread".to_string(),
"breeze".to_string(),
"brick".to_string(),
"bridge".to_string(),
"brief".to_string(),
"bright".to_string(),
"bring".to_string(),
"brisk".to_string(),
"broccoli".to_string(),
"broken".to_string(),
"bronze".to_string(),
"broom".to_string(),
"brother".to_string(),
"brown".to_string(),
"brush".to_string(),
"bubble".to_string(),
"buddy".to_string(),
"budget".to_string(),
"buffalo".to_string(),
"build".to_string(),
"bulb".to_string(),
"bulk".to_string(),
"bullet".to_string(),
"bundle".to_string(),
"bunker".to_string(),
"burden".to_string(),
"burger".to_string(),
"burst".to_string(),
"bus".to_string(),
"business".to_string(),
"busy".to_string(),
"butter".to_string(),
"buyer".to_string(),
"buzz".to_string(),
"cabbage".to_string(),
"cabin".to_string(),
"cable".to_string(),
"cactus".to_string(),
"cage".to_string(),
"cake".to_string(),
"call".to_string(),
"calm".to_string(),
"camera".to_string(),
"camp".to_string(),
"can".to_string(),
"canal".to_string(),
"cancel".to_string(),
"candy".to_string(),
"cannon".to_string(),
"canoe".to_string(),
"canvas".to_string(),
"canyon".to_string(),
"capable".to_string(),
"capital".to_string(),
"captain".to_string(),
"car".to_string(),
"carbon".to_string(),
"card".to_string(),
"cargo".to_string(),
"carpet".to_string(),
"carry".to_string(),
"cart".to_string(),
"case".to_string(),
"cash".to_string(),
"casino".to_string(),
"castle".to_string(),
"casual".to_string(),
"cat".to_string(),
"catalog".to_string(),
"catch".to_string(),
"category".to_string(),
"cattle".to_string(),
"caught".to_string(),
"cause".to_string(),
"caution".to_string(),
"cave".to_string(),
"ceiling".to_string(),
"celery".to_string(),
"cement".to_string(),
"census".to_string(),
"century".to_string(),
"cereal".to_string(),
"certain".to_string(),
"chair".to_string(),
"chalk".to_string(),
"champion".to_string(),
"change".to_string(),
"chaos".to_string(),
"chapter".to_string(),
"charge".to_string(),
"chase".to_string(),
"chat".to_string(),
"cheap".to_string(),
"check".to_string(),
"cheese".to_string(),
"chef".to_string(),
"cherry".to_string(),
"chest".to_string(),
"chicken".to_string(),
"chief".to_string(),
"child".to_string(),
"chimney".to_string(),
"choice".to_string(),
"choose".to_string(),
"chronic".to_string(),
"chuckle".to_string(),
"chunk".to_string(),
"churn".to_string(),
"cigar".to_string(),
"cinnamon".to_string(),
"circle".to_string(),
"citizen".to_string(),
"city".to_string(),
"civil".to_string(),
"claim".to_string(),
"clap".to_string(),
"clarify".to_string(),
"claw".to_string(),
"clay".to_string(),
"clean".to_string(),
"clerk".to_string(),
"clever".to_string(),
"click".to_string(),
"client".to_string(),
"cliff".to_string(),
"climb".to_string(),
"clinic".to_string(),
"clip".to_string(),
"clock".to_string(),
"clog".to_string(),
"close".to_string(),
"cloth".to_string(),
"cloud".to_string(),
"clown".to_string(),
"club".to_string(),
"clump".to_string(),
"cluster".to_string(),
"clutch".to_string(),
"coach".to_string(),
"coast".to_string(),
"coconut".to_string(),
"code".to_string(),
"coffee".to_string(),
"coil".to_string(),
"coin".to_string(),
"collect".to_string(),
"color".to_string(),
"column".to_string(),
"combine".to_string(),
"come".to_string(),
"comfort".to_string(),
"comic".to_string(),
"common".to_string(),
"company".to_string(),
"concert".to_string(),
"conduct".to_string(),
"confirm".to_string(),
"congress".to_string(),
"connect".to_string(),
"consider".to_string(),
"control".to_string(),
"convince".to_string(),
"cook".to_string(),
"cool".to_string(),
"copper".to_string(),
"copy".to_string(),
"coral".to_string(),
"core".to_string(),
"corn".to_string(),
"correct".to_string(),
"cost".to_string(),
"cotton".to_string(),
"couch".to_string(),
"country".to_string(),
"couple".to_string(),
"course".to_string(),
"cousin".to_string(),
"cover".to_string(),
"coyote".to_string(),
"crack".to_string(),
"cradle".to_string(),
"craft".to_string(),
"cram".to_string(),
"crane".to_string(),
"crash".to_string(),
"crater".to_string(),
"crawl".to_string(),
"crazy".to_string(),
"cream".to_string(),
"credit".to_string(),
"creek".to_string(),
"crew".to_string(),
"cricket".to_string(),
"crime".to_string(),
"crisp".to_string(),
"critic".to_string(),
"crop".to_string(),
"cross".to_string(),
"crouch".to_string(),
"crowd".to_string(),
"crucial".to_string(),
"cruel".to_string(),
"cruise".to_string(),
"crumble".to_string(),
"crunch".to_string(),
"crush".to_string(),
"cry".to_string(),
"crystal".to_string(),
"cube".to_string(),
"culture".to_string(),
"cup".to_string(),
"cupboard".to_string(),
"curious".to_string(),
"current".to_string(),
"curtain".to_string(),
"curve".to_string(),
"cushion".to_string(),
"custom".to_string(),
"cute".to_string(),
"cycle".to_string(),
"dad".to_string(),
"damage".to_string(),
"damp".to_string(),
"dance".to_string(),
"danger".to_string(),
"daring".to_string(),
"dash".to_string(),
"daughter".to_string(),
"dawn".to_string(),
"day".to_string(),
"deal".to_string(),
"debate".to_string(),
"debris".to_string(),
"decade".to_string(),
"december".to_string(),
"decide".to_string(),
"decline".to_string(),
"decorate".to_string(),
"decrease".to_string(),
"deer".to_string(),
"defense".to_string(),
"define".to_string(),
"defy".to_string(),
"degree".to_string(),
"delay".to_string(),
"deliver".to_string(),
"demand".to_string(),
"demise".to_string(),
"denial".to_string(),
"dentist".to_string(),
"deny".to_string(),
"depart".to_string(),
"depend".to_string(),
"deposit".to_string(),
"depth".to_string(),
"deputy".to_string(),
"derive".to_string(),
"describe".to_string(),
"desert".to_string(),
"design".to_string(),
"desk".to_string(),
"despair".to_string(),
"destroy".to_string(),
"detail".to_string(),
"detect".to_string(),
"develop".to_string(),
"device".to_string(),
"devote".to_string(),
"diagram".to_string(),
"dial".to_string(),
"diamond".to_string(),
"diary".to_string(),
"dice".to_string(),
"diesel".to_string(),
"diet".to_string(),
"differ".to_string(),
"digital".to_string(),
"dignity".to_string(),
"dilemma".to_string(),
"dinner".to_string(),
"dinosaur".to_string(),
"direct".to_string(),
"dirt".to_string(),
"disagree".to_string(),
"discover".to_string(),
"disease".to_string(),
"dish".to_string(),
"dismiss".to_string(),
"disorder".to_string(),
"display".to_string(),
"distance".to_string(),
"divert".to_string(),
"divide".to_string(),
"divorce".to_string(),
"dizzy".to_string(),
"doctor".to_string(),
"document".to_string(),
"dog".to_string(),
"doll".to_string(),
"dolphin".to_string(),
"domain".to_string(),
"donate".to_string(),
"donkey".to_string(),
"donor".to_string(),
"door".to_string(),
"dose".to_string(),
"double".to_string(),
"dove".to_string(),
"draft".to_string(),
"dragon".to_string(),
"drama".to_string(),
"drastic".to_string(),
"draw".to_string(),
"dream".to_string(),
"dress".to_string(),
"drift".to_string(),
"drill".to_string(),
"drink".to_string(),
"drip".to_string(),
"drive".to_string(),
"drop".to_string(),
"drum".to_string(),
"dry".to_string(),
"duck".to_string(),
"dumb".to_string(),
"dune".to_string(),
"during".to_string(),
"dust".to_string(),
"dutch".to_string(),
"duty".to_string(),
"dwarf".to_string(),
"dynamic".to_string(),
"eager".to_string(),
"eagle".to_string(),
"early".to_string(),
"earn".to_string(),
"earth".to_string(),
"easily".to_string(),
"east".to_string(),
"easy".to_string(),
"echo".to_string(),
"ecology".to_string(),
"economy".to_string(),
"edge".to_string(),
"edit".to_string(),
"educate".to_string(),
"effort".to_string(),
"egg".to_string(),
"eight".to_string(),
"either".to_string(),
"elbow".to_string(),
"elder".to_string(),
"electric".to_string(),
"elegant".to_string(),
"element".to_string(),
"elephant".to_string(),
"elevator".to_string(),
"elite".to_string(),
"else".to_string(),
"embark".to_string(),
"embody".to_string(),
"embrace".to_string(),
"emerge".to_string(),
"emotion".to_string(),
"employ".to_string(),
"empower".to_string(),
"empty".to_string(),
"enable".to_string(),
"enact".to_string(),
"end".to_string(),
"endless".to_string(),
"endorse".to_string(),
"enemy".to_string(),
"energy".to_string(),
"enforce".to_string(),
"engage".to_string(),
"engine".to_string(),
"enhance".to_string(),
"enjoy".to_string(),
"enlist".to_string(),
"enough".to_string(),
"enrich".to_string(),
"enroll".to_string(),
"ensure".to_string(),
"enter".to_string(),
"entire".to_string(),
"entry".to_string(),
"envelope".to_string(),
"episode".to_string(),
"equal".to_string(),
"equip".to_string(),
"era".to_string(),
"erase".to_string(),
"erode".to_string(),
"erosion".to_string(),
"error".to_string(),
"erupt".to_string(),
"escape".to_string(),
"essay".to_string(),
"essence".to_string(),
"estate".to_string(),
"eternal".to_string(),
"ethics".to_string(),
"evidence".to_string(),
"evil".to_string(),
"evoke".to_string(),
"evolve".to_string(),
"exact".to_string(),
"example".to_string(),
"excess".to_string(),
"exchange".to_string(),
"excite".to_string(),
"exclude".to_string(),
"excuse".to_string(),
"execute".to_string(),
"exercise".to_string(),
"exhaust".to_string(),
"exhibit".to_string(),
"exile".to_string(),
"exist".to_string(),
"exit".to_string(),
"exotic".to_string(),
"expand".to_string(),
"expect".to_string(),
"expire".to_string(),
"explain".to_string(),
"expose".to_string(),
"express".to_string(),
"extend".to_string(),
"extra".to_string(),
"eye".to_string(),
"eyebrow".to_string(),
"fabric".to_string(),
"face".to_string(),
"faculty".to_string(),
"fade".to_string(),
"faint".to_string(),
"faith".to_string(),
"fall".to_string(),
"false".to_string(),
"fame".to_string(),
"family".to_string(),
"famous".to_string(),
"fan".to_string(),
"fancy".to_string(),
"fantasy".to_string(),
"farm".to_string(),
"fashion".to_string(),
"fat".to_string(),
"fatal".to_string(),
"father".to_string(),
"fatigue".to_string(),
"fault".to_string(),
"favorite".to_string(),
"feature".to_string(),
"february".to_string(),
"federal".to_string(),
"fee".to_string(),
"feed".to_string(),
"feel".to_string(),
"female".to_string(),
"fence".to_string(),
"festival".to_string(),
"fetch".to_string(),
"fever".to_string(),
"few".to_string(),
"fiber".to_string(),
"fiction".to_string(),
"field".to_string(),
"figure".to_string(),
"file".to_string(),
"film".to_string(),
"filter".to_string(),
"final".to_string(),
"find".to_string(),
"fine".to_string(),
"finger".to_string(),
"finish".to_string(),
"fire".to_string(),
"firm".to_string(),
"first".to_string(),
"fiscal".to_string(),
"fish".to_string(),
"fit".to_string(),
"fitness".to_string(),
"fix".to_string(),
"flag".to_string(),
"flame".to_string(),
"flash".to_string(),
"flat".to_string(),
"flavor".to_string(),
"flee".to_string(),
"flight".to_string(),
"flip".to_string(),
"float".to_string(),
"flock".to_string(),
"floor".to_string(),
"flower".to_string(),
"fluid".to_string(),
"flush".to_string(),
"fly".to_string(),
"foam".to_string(),
"focus".to_string(),
"fog".to_string(),
"foil".to_string(),
"fold".to_string(),
"follow".to_string(),
"food".to_string(),
"foot".to_string(),
"force".to_string(),
"forest".to_string(),
"forget".to_string(),
"fork".to_string(),
"fortune".to_string(),
"forum".to_string(),
"forward".to_string(),
"fossil".to_string(),
"foster".to_string(),
"found".to_string(),
"fox".to_string(),
"fragile".to_string(),
"frame".to_string(),
"frequent".to_string(),
"fresh".to_string(),
"friend".to_string(),
"fringe".to_string(),
"frog".to_string(),
"front".to_string(),
"frost".to_string(),
"frown".to_string(),
"frozen".to_string(),
"fruit".to_string(),
"fuel".to_string(),
"fun".to_string(),
"funny".to_string(),
"furnace".to_string(),
"fury".to_string(),
"future".to_string(),
"gadget".to_string(),
"gain".to_string(),
"galaxy".to_string(),
"gallery".to_string(),
"game".to_string(),
"gap".to_string(),
"garage".to_string(),
"garbage".to_string(),
"garden".to_string(),
"garlic".to_string(),
"garment".to_string(),
"gas".to_string(),
"gasp".to_string(),
"gate".to_string(),
"gather".to_string(),
"gauge".to_string(),
"gaze".to_string(),
"general".to_string(),
"genius".to_string(),
"genre".to_string(),
"gentle".to_string(),
"genuine".to_string(),
"gesture".to_string(),
"ghost".to_string(),
"giant".to_string(),
"gift".to_string(),
"giggle".to_string(),
"ginger".to_string(),
"giraffe".to_string(),
"girl".to_string(),
"give".to_string(),
"glad".to_string(),
"glance".to_string(),
"glare".to_string(),
"glass".to_string(),
"glide".to_string(),
"glimpse".to_string(),
"globe".to_string(),
"gloom".to_string(),
"glory".to_string(),
"glove".to_string(),
"glow".to_string(),
"glue".to_string(),
"goat".to_string(),
"goddess".to_string(),
"gold".to_string(),
"good".to_string(),
"goose".to_string(),
"gorilla".to_string(),
"gospel".to_string(),
"gossip".to_string(),
"govern".to_string(),
"gown".to_string(),
"grab".to_string(),
"grace".to_string(),
"grain".to_string(),
"grant".to_string(),
"grape".to_string(),
"grass".to_string(),
"gravity".to_string(),
"great".to_string(),
"green".to_string(),
"grid".to_string(),
"grief".to_string(),
"grit".to_string(),
"grocery".to_string(),
"group".to_string(),
"grow".to_string(),
"grunt".to_string(),
"guard".to_string(),
"guess".to_string(),
"guide".to_string(),
"guilt".to_string(),
"guitar".to_string(),
"gun".to_string(),
"gym".to_string(),
"habit".to_string(),
"hair".to_string(),
"half".to_string(),
"hammer".to_string(),
"hamster".to_string(),
"hand".to_string(),
"happy".to_string(),
"harbor".to_string(),
"hard".to_string(),
"harsh".to_string(),
"harvest".to_string(),
"hat".to_string(),
"have".to_string(),
"hawk".to_string(),
"hazard".to_string(),
"head".to_string(),
"health".to_string(),
"heart".to_string(),
"heavy".to_string(),
"hedgehog".to_string(),
"height".to_string(),
"hello".to_string(),
"helmet".to_string(),
"help".to_string(),
"hen".to_string(),
"hero".to_string(),
"hidden".to_string(),
"high".to_string(),
"hill".to_string(),
"hint".to_string(),
"hip".to_string(),
"hire".to_string(),
"history".to_string(),
"hobby".to_string(),
"hockey".to_string(),
"hold".to_string(),
"hole".to_string(),
"holiday".to_string(),
"hollow".to_string(),
"home".to_string(),
"honey".to_string(),
"hood".to_string(),
"hope".to_string(),
"horn".to_string(),
"horror".to_string(),
"horse".to_string(),
"hospital".to_string(),
"host".to_string(),
"hotel".to_string(),
"hour".to_string(),
"hover".to_string(),
"hub".to_string(),
"huge".to_string(),
"human".to_string(),
"humble".to_string(),
"humor".to_string(),
"hundred".to_string(),
"hungry".to_string(),
"hunt".to_string(),
"hurdle".to_string(),
"hurry".to_string(),
"hurt".to_string(),
"husband".to_string(),
"hybrid".to_string(),
"ice".to_string(),
"icon".to_string(),
"idea".to_string(),
"identify".to_string(),
"idle".to_string(),
"ignore".to_string(),
"ill".to_string(),
"illegal".to_string(),
"illness".to_string(),
"image".to_string(),
"imitate".to_string(),
"immense".to_string(),
"immune".to_string(),
"impact".to_string(),
"impose".to_string(),
"improve".to_string(),
"impulse".to_string(),
"inch".to_string(),
"include".to_string(),
"income".to_string(),
"increase".to_string(),
"index".to_string(),
"indicate".to_string(),
"indoor".to_string(),
"industry".to_string(),
"infant".to_string(),
"inflict".to_string(),
"inform".to_string(),
"inhale".to_string(),
"inherit".to_string(),
"initial".to_string(),
"inject".to_string(),
"injury".to_string(),
"inmate".to_string(),
"inner".to_string(),
"innocent".to_string(),
"input".to_string(),
"inquiry".to_string(),
"insane".to_string(),
"insect".to_string(),
"inside".to_string(),
"inspire".to_string(),
"install".to_string(),
"intact".to_string(),
"interest".to_string(),
"into".to_string(),
"invest".to_string(),
"invite".to_string(),
"involve".to_string(),
"iron".to_string(),
"island".to_string(),
"isolate".to_string(),
"issue".to_string(),
"item".to_string(),
"ivory".to_string(),
"jacket".to_string(),
"jaguar".to_string(),
"jar".to_string(),
"jazz".to_string(),
"jealous".to_string(),
"jeans".to_string(),
"jelly".to_string(),
"jewel".to_string(),
"job".to_string(),
"join".to_string(),
"joke".to_string(),
"journey".to_string(),
"joy".to_string(),
"judge".to_string(),
"juice".to_string(),
"jump".to_string(),
"jungle".to_string(),
"junior".to_string(),
"junk".to_string(),
"just".to_string(),
"kangaroo".to_string(),
"keen".to_string(),
"keep".to_string(),
"ketchup".to_string(),
"key".to_string(),
"kick".to_string(),
"kid".to_string(),
"kidney".to_string(),
"kind".to_string(),
"kingdom".to_string(),
"kiss".to_string(),
"kit".to_string(),
"kitchen".to_string(),
"kite".to_string(),
"kitten".to_string(),
"kiwi".to_string(),
"knee".to_string(),
"knife".to_string(),
"knock".to_string(),
"know".to_string(),
"lab".to_string(),
"label".to_string(),
"labor".to_string(),
"ladder".to_string(),
"lady".to_string(),
"lake".to_string(),
"lamp".to_string(),
"language".to_string(),
"laptop".to_string(),
"large".to_string(),
"later".to_string(),
"latin".to_string(),
"laugh".to_string(),
"laundry".to_string(),
"lava".to_string(),
"law".to_string(),
"lawn".to_string(),
"lawsuit".to_string(),
"layer".to_string(),
"lazy".to_string(),
"leader".to_string(),
"leaf".to_string(),
"learn".to_string(),
"leave".to_string(),
"lecture".to_string(),
"left".to_string(),
"leg".to_string(),
"legal".to_string(),
"legend".to_string(),
"leisure".to_string(),
"lemon".to_string(),
"lend".to_string(),
"length".to_string(),
"lens".to_string(),
"leopard".to_string(),
"lesson".to_string(),
"letter".to_string(),
"level".to_string(),
"liar".to_string(),
"liberty".to_string(),
"library".to_string(),
"license".to_string(),
"life".to_string(),
"lift".to_string(),
"light".to_string(),
"like".to_string(),
"limb".to_string(),
"limit".to_string(),
"link".to_string(),
"lion".to_string(),
"liquid".to_string(),
"list".to_string(),
"little".to_string(),
"live".to_string(),
"lizard".to_string(),
"load".to_string(),
"loan".to_string(),
"lobster".to_string(),
"local".to_string(),
"lock".to_string(),
"logic".to_string(),
"lonely".to_string(),
"long".to_string(),
"loop".to_string(),
"lottery".to_string(),
"loud".to_string(),
"lounge".to_string(),
"love".to_string(),
"loyal".to_string(),
"lucky".to_string(),
"luggage".to_string(),
"lumber".to_string(),
"lunar".to_string(),
"lunch".to_string(),
"luxury".to_string(),
"lyrics".to_string(),
"machine".to_string(),
"mad".to_string(),
"magic".to_string(),
"magnet".to_string(),
"maid".to_string(),
"mail".to_string(),
"main".to_string(),
"major".to_string(),
"make".to_string(),
"mammal".to_string(),
"man".to_string(),
"manage".to_string(),
"mandate".to_string(),
"mango".to_string(),
"mansion".to_string(),
"manual".to_string(),
"maple".to_string(),
"marble".to_string(),
"march".to_string(),
"margin".to_string(),
"marine".to_string(),
"market".to_string(),
"marriage".to_string(),
"mask".to_string(),
"mass".to_string(),
"master".to_string(),
"match".to_string(),
"material".to_string(),
"math".to_string(),
"matrix".to_string(),
"matter".to_string(),
"maximum".to_string(),
"maze".to_string(),
"meadow".to_string(),
"mean".to_string(),
"measure".to_string(),
"meat".to_string(),
"mechanic".to_string(),
"medal".to_string(),
"media".to_string(),
"melody".to_string(),
"melt".to_string(),
"member".to_string(),
"memory".to_string(),
"mention".to_string(),
"menu".to_string(),
"mercy".to_string(),
"merge".to_string(),
"merit".to_string(),
"merry".to_string(),
"mesh".to_string(),
"message".to_string(),
"metal".to_string(),
"method".to_string(),
"middle".to_string(),
"midnight".to_string(),
"milk".to_string(),
"million".to_string(),
"mimic".to_string(),
"mind".to_string(),
"minimum".to_string(),
"minor".to_string(),
"minute".to_string(),
"miracle".to_string(),
"mirror".to_string(),
"misery".to_string(),
"miss".to_string(),
"mistake".to_string(),
"mix".to_string(),
"mixed".to_string(),
"mixture".to_string(),
"mobile".to_string(),
"model".to_string(),
"modify".to_string(),
"mom".to_string(),
"moment".to_string(),
"monitor".to_string(),
"monkey".to_string(),
"monster".to_string(),
"month".to_string(),
"moon".to_string(),
"moral".to_string(),
"more".to_string(),
"morning".to_string(),
"mosquito".to_string(),
"mother".to_string(),
"motion".to_string(),
"motor".to_string(),
"mountain".to_string(),
"mouse".to_string(),
"move".to_string(),
"movie".to_string(),
"much".to_string(),
"muffin".to_string(),
"mule".to_string(),
"multiply".to_string(),
"muscle".to_string(),
"museum".to_string(),
"mushroom".to_string(),
"music".to_string(),
"must".to_string(),
"mutual".to_string(),
"myself".to_string(),
"mystery".to_string(),
"myth".to_string(),
"naive".to_string(),
"name".to_string(),
"napkin".to_string(),
"narrow".to_string(),
"nasty".to_string(),
"nation".to_string(),
"nature".to_string(),
"near".to_string(),
"neck".to_string(),
"need".to_string(),
"negative".to_string(),
"neglect".to_string(),
"neither".to_string(),
"nephew".to_string(),
"nerve".to_string(),
"nest".to_string(),
"net".to_string(),
"network".to_string(),
"neutral".to_string(),
"never".to_string(),
"news".to_string(),
"next".to_string(),
"nice".to_string(),
"night".to_string(),
"noble".to_string(),
"noise".to_string(),
"nominee".to_string(),
"noodle".to_string(),
"normal".to_string(),
"north".to_string(),
"nose".to_string(),
"notable".to_string(),
"note".to_string(),
"nothing".to_string(),
"notice".to_string(),
"novel".to_string(),
"now".to_string(),
"nuclear".to_string(),
"number".to_string(),
"nurse".to_string(),
"nut".to_string(),
"oak".to_string(),
"obey".to_string(),
"object".to_string(),
"oblige".to_string(),
"obscure".to_string(),
"observe".to_string(),
"obtain".to_string(),
"obvious".to_string(),
"occur".to_string(),
"ocean".to_string(),
"october".to_string(),
"odor".to_string(),
"off".to_string(),
"offer".to_string(),
"office".to_string(),
"often".to_string(),
"oil".to_string(),
"okay".to_string(),
"old".to_string(),
"olive".to_string(),
"olympic".to_string(),
"omit".to_string(),
"once".to_string(),
"one".to_string(),
"onion".to_string(),
"online".to_string(),
"only".to_string(),
"open".to_string(),
"opera".to_string(),
"opinion".to_string(),
"oppose".to_string(),
"option".to_string(),
"orange".to_string(),
"orbit".to_string(),
"orchard".to_string(),
"order".to_string(),
"ordinary".to_string(),
"organ".to_string(),
"orient".to_string(),
"original".to_string(),
"orphan".to_string(),
"ostrich".to_string(),
"other".to_string(),
"outdoor".to_string(),
"outer".to_string(),
"output".to_string(),
"outside".to_string(),
"oval".to_string(),
"oven".to_string(),
"over".to_string(),
"own".to_string(),
"owner".to_string(),
"oxygen".to_string(),
"oyster".to_string(),
"ozone".to_string(),
"pact".to_string(),
"paddle".to_string(),
"page".to_string(),
"pair".to_string(),
"palace".to_string(),
"palm".to_string(),
"panda".to_string(),
"panel".to_string(),
"panic".to_string(),
"panther".to_string(),
"paper".to_string(),
"parade".to_string(),
"parent".to_string(),
"park".to_string(),
"parrot".to_string(),
"party".to_string(),
"pass".to_string(),
"patch".to_string(),
"path".to_string(),
"patient".to_string(),
"patrol".to_string(),
"pattern".to_string(),
"pause".to_string(),
"pave".to_string(),
"payment".to_string(),
"peace".to_string(),
"peanut".to_string(),
"pear".to_string(),
"peasant".to_string(),
"pelican".to_string(),
"pen".to_string(),
"penalty".to_string(),
"pencil".to_string(),
"people".to_string(),
"pepper".to_string(),
"perfect".to_string(),
"permit".to_string(),
"person".to_string(),
"pet".to_string(),
"phone".to_string(),
"photo".to_string(),
"phrase".to_string(),
"physical".to_string(),
"piano".to_string(),
"picnic".to_string(),
"picture".to_string(),
"piece".to_string(),
"pig".to_string(),
"pigeon".to_string(),
"pill".to_string(),
"pilot".to_string(),
"pink".to_string(),
"pioneer".to_string(),
"pipe".to_string(),
"pistol".to_string(),
"pitch".to_string(),
"pizza".to_string(),
"place".to_string(),
"planet".to_string(),
"plastic".to_string(),
"plate".to_string(),
"play".to_string(),
"please".to_string(),
"pledge".to_string(),
"pluck".to_string(),
"plug".to_string(),
"plunge".to_string(),
"poem".to_string(),
"poet".to_string(),
"point".to_string(),
"polar".to_string(),
"pole".to_string(),
"police".to_string(),
"pond".to_string(),
"pony".to_string(),
"pool".to_string(),
"popular".to_string(),
"portion".to_string(),
"position".to_string(),
"possible".to_string(),
"post".to_string(),
"potato".to_string(),
"pottery".to_string(),
"poverty".to_string(),
"powder".to_string(),
"power".to_string(),
"practice".to_string(),
"praise".to_string(),
"predict".to_string(),
"prefer".to_string(),
"prepare".to_string(),
"present".to_string(),
"pretty".to_string(),
"prevent".to_string(),
"price".to_string(),
"pride".to_string(),
"primary".to_string(),
"print".to_string(),
"priority".to_string(),
"prison".to_string(),
"private".to_string(),
"prize".to_string(),
"problem".to_string(),
"process".to_string(),
"produce".to_string(),
"profit".to_string(),
"program".to_string(),
"project".to_string(),
"promote".to_string(),
"proof".to_string(),
"property".to_string(),
"prosper".to_string(),
"protect".to_string(),
"proud".to_string(),
"provide".to_string(),
"public".to_string(),
"pudding".to_string(),
"pull".to_string(),
"pulp".to_string(),
"pulse".to_string(),
"pumpkin".to_string(),
"punch".to_string(),
"pupil".to_string(),
"puppy".to_string(),
"purchase".to_string(),
"purity".to_string(),
"purpose".to_string(),
"purse".to_string(),
"push".to_string(),
"put".to_string(),
"puzzle".to_string(),
"pyramid".to_string(),
"quality".to_string(),
"quantum".to_string(),
"quarter".to_string(),
"question".to_string(),
"quick".to_string(),
"quit".to_string(),
"quiz".to_string(),
"quote".to_string(),
"rabbit".to_string(),
"raccoon".to_string(),
"race".to_string(),
"rack".to_string(),
"radar".to_string(),
"radio".to_string(),
"rail".to_string(),
"rain".to_string(),
"raise".to_string(),
"rally".to_string(),
"ramp".to_string(),
"ranch".to_string(),
"random".to_string(),
"range".to_string(),
"rapid".to_string(),
"rare".to_string(),
"rate".to_string(),
"rather".to_string(),
"raven".to_string(),
"raw".to_string(),
"razor".to_string(),
"ready".to_string(),
"real".to_string(),
"reason".to_string(),
"rebel".to_string(),
"rebuild".to_string(),
"recall".to_string(),
"receive".to_string(),
"recipe".to_string(),
"record".to_string(),
"recycle".to_string(),
"reduce".to_string(),
"reflect".to_string(),
"reform".to_string(),
"refuse".to_string(),
"region".to_string(),
"regret".to_string(),
"regular".to_string(),
"reject".to_string(),
"relax".to_string(),
"release".to_string(),
"relief".to_string(),
"rely".to_string(),
"remain".to_string(),
"remember".to_string(),
"remind".to_string(),
"remove".to_string(),
"render".to_string(),
"renew".to_string(),
"rent".to_string(),
"reopen".to_string(),
"repair".to_string(),
"repeat".to_string(),
"replace".to_string(),
"report".to_string(),
"require".to_string(),
"rescue".to_string(),
"resemble".to_string(),
"resist".to_string(),
"resource".to_string(),
"response".to_string(),
"result".to_string(),
"retire".to_string(),
"retreat".to_string(),
"return".to_string(),
"reunion".to_string(),
"reveal".to_string(),
"review".to_string(),
"reward".to_string(),
"rhythm".to_string(),
"rib".to_string(),
"ribbon".to_string(),
"rice".to_string(),
"rich".to_string(),
"ride".to_string(),
"ridge".to_string(),
"rifle".to_string(),
"right".to_string(),
"rigid".to_string(),
"ring".to_string(),
"riot".to_string(),
"ripple".to_string(),
"risk".to_string(),
"ritual".to_string(),
"rival".to_string(),
"river".to_string(),
"road".to_string(),
"roast".to_string(),
"robot".to_string(),
"robust".to_string(),
"rocket".to_string(),
"romance".to_string(),
"roof".to_string(),
"rookie".to_string(),
"room".to_string(),
"rose".to_string(),
"rotate".to_string(),
"rough".to_string(),
"round".to_string(),
"route".to_string(),
"royal".to_string(),
"rubber".to_string(),
"rude".to_string(),
"rug".to_string(),
"rule".to_string(),
"run".to_string(),
"runway".to_string(),
"rural".to_string(),
"sad".to_string(),
"saddle".to_string(),
"sadness".to_string(),
"safe".to_string(),
"sail".to_string(),
"salad".to_string(),
"salmon".to_string(),
"salon".to_string(),
"salt".to_string(),
"salute".to_string(),
"same".to_string(),
"sample".to_string(),
"sand".to_string(),
"satisfy".to_string(),
"satoshi".to_string(),
"sauce".to_string(),
"sausage".to_string(),
"save".to_string(),
"say".to_string(),
"scale".to_string(),
"scan".to_string(),
"scare".to_string(),
"scatter".to_string(),
"scene".to_string(),
"scheme".to_string(),
"school".to_string(),
"science".to_string(),
"scissors".to_string(),
"scorpion".to_string(),
"scout".to_string(),
"scrap".to_string(),
"screen".to_string(),
"script".to_string(),
"scrub".to_string(),
"sea".to_string(),
"search".to_string(),
"season".to_string(),
"seat".to_string(),
"second".to_string(),
"secret".to_string(),
"section".to_string(),
"security".to_string(),
"seed".to_string(),
"seek".to_string(),
"segment".to_string(),
"select".to_string(),
"sell".to_string(),
"seminar".to_string(),
"senior".to_string(),
"sense".to_string(),
"sentence".to_string(),
"series".to_string(),
"service".to_string(),
"session".to_string(),
"settle".to_string(),
"setup".to_string(),
"seven".to_string(),
"shadow".to_string(),
"shaft".to_string(),
"shallow".to_string(),
"share".to_string(),
"shed".to_string(),
"shell".to_string(),
"sheriff".to_string(),
"shield".to_string(),
"shift".to_string(),
"shine".to_string(),
"ship".to_string(),
"shiver".to_string(),
"shock".to_string(),
"shoe".to_string(),
"shoot".to_string(),
"shop".to_string(),
"short".to_string(),
"shoulder".to_string(),
"shove".to_string(),
"shrimp".to_string(),
"shrug".to_string(),
"shuffle".to_string(),
"shy".to_string(),
"sibling".to_string(),
"sick".to_string(),
"side".to_string(),
"siege".to_string(),
"sight".to_string(),
"sign".to_string(),
"silent".to_string(),
"silk".to_string(),
"silly".to_string(),
"silver".to_string(),
"similar".to_string(),
"simple".to_string(),
"since".to_string(),
"sing".to_string(),
"siren".to_string(),
"sister".to_string(),
"situate".to_string(),
"six".to_string(),
"size".to_string(),
"skate".to_string(),
"sketch".to_string(),
"ski".to_string(),
"skill".to_string(),
"skin".to_string(),
"skirt".to_string(),
"skull".to_string(),
"slab".to_string(),
"slam".to_string(),
"sleep".to_string(),
"slender".to_string(),
"slice".to_string(),
"slide".to_string(),
"slight".to_string(),
"slim".to_string(),
"slogan".to_string(),
"slot".to_string(),
"slow".to_string(),
"slush".to_string(),
"small".to_string(),
"smart".to_string(),
"smile".to_string(),
"smoke".to_string(),
"smooth".to_string(),
"snack".to_string(),
"snake".to_string(),
"snap".to_string(),
"sniff".to_string(),
"snow".to_string(),
"soap".to_string(),
"soccer".to_string(),
"social".to_string(),
"sock".to_string(),
"soda".to_string(),
"soft".to_string(),
"solar".to_string(),
"soldier".to_string(),
"solid".to_string(),
"solution".to_string(),
"solve".to_string(),
"someone".to_string(),
"song".to_string(),
"soon".to_string(),
"sorry".to_string(),
"sort".to_string(),
"soul".to_string(),
"sound".to_string(),
"soup".to_string(),
"source".to_string(),
"south".to_string(),
"space".to_string(),
"spare".to_string(),
"spatial".to_string(),
"spawn".to_string(),
"speak".to_string(),
"special".to_string(),
"speed".to_string(),
"spell".to_string(),
"spend".to_string(),
"sphere".to_string(),
"spice".to_string(),
"spider".to_string(),
"spike".to_string(),
"spin".to_string(),
"spirit".to_string(),
"split".to_string(),
"spoil".to_string(),
"sponsor".to_string(),
"spoon".to_string(),
"sport".to_string(),
"spot".to_string(),
"spray".to_string(),
"spread".to_string(),
"spring".to_string(),
"spy".to_string(),
"square".to_string(),
"squeeze".to_string(),
"squirrel".to_string(),
"stable".to_string(),
"stadium".to_string(),
"staff".to_string(),
"stage".to_string(),
"stairs".to_string(),
"stamp".to_string(),
"stand".to_string(),
"start".to_string(),
"state".to_string(),
"stay".to_string(),
"steak".to_string(),
"steel".to_string(),
"stem".to_string(),
"step".to_string(),
"stereo".to_string(),
"stick".to_string(),
"still".to_string(),
"sting".to_string(),
"stock".to_string(),
"stomach".to_string(),
"stone".to_string(),
"stool".to_string(),
"story".to_string(),
"stove".to_string(),
"strategy".to_string(),
"street".to_string(),
"strike".to_string(),
"strong".to_string(),
"struggle".to_string(),
"student".to_string(),
"stuff".to_string(),
"stumble".to_string(),
"style".to_string(),
"subject".to_string(),
"submit".to_string(),
"subway".to_string(),
"success".to_string(),
"such".to_string(),
"sudden".to_string(),
"suffer".to_string(),
"sugar".to_string(),
"suggest".to_string(),
"suit".to_string(),
"summer".to_string(),
"sun".to_string(),
"sunny".to_string(),
"sunset".to_string(),
"super".to_string(),
"supply".to_string(),
"supreme".to_string(),
"sure".to_string(),
"surface".to_string(),
"surge".to_string(),
"surprise".to_string(),
"surround".to_string(),
"survey".to_string(),
"suspect".to_string(),
"sustain".to_string(),
"swallow".to_string(),
"swamp".to_string(),
"swap".to_string(),
"swarm".to_string(),
"swear".to_string(),
"sweet".to_string(),
"swift".to_string(),
"swim".to_string(),
"swing".to_string(),
"switch".to_string(),
"sword".to_string(),
"symbol".to_string(),
"symptom".to_string(),
"syrup".to_string(),
"system".to_string(),
"table".to_string(),
"tackle".to_string(),
"tag".to_string(),
"tail".to_string(),
"talent".to_string(),
"talk".to_string(),
"tank".to_string(),
"tape".to_string(),
"target".to_string(),
"task".to_string(),
"taste".to_string(),
"tattoo".to_string(),
"taxi".to_string(),
"teach".to_string(),
"team".to_string(),
"tell".to_string(),
"ten".to_string(),
"tenant".to_string(),
"tennis".to_string(),
"tent".to_string(),
"term".to_string(),
"test".to_string(),
"text".to_string(),
"thank".to_string(),
"that".to_string(),
"theme".to_string(),
"then".to_string(),
"theory".to_string(),
"there".to_string(),
"they".to_string(),
"thing".to_string(),
"this".to_string(),
"thought".to_string(),
"three".to_string(),
"thrive".to_string(),
"throw".to_string(),
"thumb".to_string(),
"thunder".to_string(),
"ticket".to_string(),
"tide".to_string(),
"tiger".to_string(),
"tilt".to_string(),
"timber".to_string(),
"time".to_string(),
"tiny".to_string(),
"tip".to_string(),
"tired".to_string(),
"tissue".to_string(),
"title".to_string(),
"toast".to_string(),
"tobacco".to_string(),
"today".to_string(),
"toddler".to_string(),
"toe".to_string(),
"together".to_string(),
"toilet".to_string(),
"token".to_string(),
"tomato".to_string(),
"tomorrow".to_string(),
"tone".to_string(),
"tongue".to_string(),
"tonight".to_string(),
"tool".to_string(),
"tooth".to_string(),
"top".to_string(),
"topic".to_string(),
"topple".to_string(),
"torch".to_string(),
"tornado".to_string(),
"tortoise".to_string(),
"toss".to_string(),
"total".to_string(),
"tourist".to_string(),
"toward".to_string(),
"tower".to_string(),
"town".to_string(),
"toy".to_string(),
"track".to_string(),
"trade".to_string(),
"traffic".to_string(),
"tragic".to_string(),
"train".to_string(),
"transfer".to_string(),
"trap".to_string(),
"trash".to_string(),
"travel".to_string(),
"tray".to_string(),
"treat".to_string(),
"tree".to_string(),
"trend".to_string(),
"trial".to_string(),
"tribe".to_string(),
"trick".to_string(),
"trigger".to_string(),
"trim".to_string(),
"trip".to_string(),
"trophy".to_string(),
"trouble".to_string(),
"truck".to_string(),
"true".to_string(),
"truly".to_string(),
"trumpet".to_string(),
"trust".to_string(),
"truth".to_string(),
"try".to_string(),
"tube".to_string(),
"tuition".to_string(),
"tumble".to_string(),
"tuna".to_string(),
"tunnel".to_string(),
"turkey".to_string(),
"turn".to_string(),
"turtle".to_string(),
"twelve".to_string(),
"twenty".to_string(),
"twice".to_string(),
"twin".to_string(),
"twist".to_string(),
"two".to_string(),
"type".to_string(),
"typical".to_string(),
"ugly".to_string(),
"umbrella".to_string(),
"unable".to_string(),
"unaware".to_string(),
"uncle".to_string(),
"uncover".to_string(),
"under".to_string(),
"undo".to_string(),
"unfair".to_string(),
"unfold".to_string(),
"unhappy".to_string(),
"uniform".to_string(),
"unique".to_string(),
"unit".to_string(),
"universe".to_string(),
"unknown".to_string(),
"unlock".to_string(),
"until".to_string(),
"unusual".to_string(),
"unveil".to_string(),
"update".to_string(),
"upgrade".to_string(),
"uphold".to_string(),
"upon".to_string(),
"upper".to_string(),
"upset".to_string(),
"urban".to_string(),
"urge".to_string(),
"usage".to_string(),
"use".to_string(),
"used".to_string(),
"useful".to_string(),
"useless".to_string(),
"usual".to_string(),
"utility".to_string(),
"vacant".to_string(),
"vacuum".to_string(),
"vague".to_string(),
"valid".to_string(),
"valley".to_string(),
"valve".to_string(),
"van".to_string(),
"vanish".to_string(),
"vapor".to_string(),
"various".to_string(),
"vast".to_string(),
"vault".to_string(),
"vehicle".to_string(),
"velvet".to_string(),
"vendor".to_string(),
"venture".to_string(),
"venue".to_string(),
"verb".to_string(),
"verify".to_string(),
"version".to_string(),
"very".to_string(),
"vessel".to_string(),
"veteran".to_string(),
"viable".to_string(),
"vibrant".to_string(),
"vicious".to_string(),
"victory".to_string(),
"video".to_string(),
"view".to_string(),
"village".to_string(),
"vintage".to_string(),
"violin".to_string(),
"virtual".to_string(),
"virus".to_string(),
"visa".to_string(),
"visit".to_string(),
"visual".to_string(),
"vital".to_string(),
"vivid".to_string(),
"vocal".to_string(),
"voice".to_string(),
"void".to_string(),
"volcano".to_string(),
"volume".to_string(),
"vote".to_string(),
"voyage".to_string(),
"wage".to_string(),
"wagon".to_string(),
"wait".to_string(),
"walk".to_string(),
"wall".to_string(),
"walnut".to_string(),
"want".to_string(),
"warfare".to_string(),
"warm".to_string(),
"warrior".to_string(),
"wash".to_string(),
"wasp".to_string(),
"waste".to_string(),
"water".to_string(),
"wave".to_string(),
"way".to_string(),
"wealth".to_string(),
"weapon".to_string(),
"wear".to_string(),
"weasel".to_string(),
"weather".to_string(),
"web".to_string(),
"wedding".to_string(),
"weekend".to_string(),
"weird".to_string(),
"welcome".to_string(),
"west".to_string(),
"wet".to_string(),
"whale".to_string(),
"what".to_string(),
"wheat".to_string(),
"wheel".to_string(),
"when".to_string(),
"where".to_string(),
"whip".to_string(),
"whisper".to_string(),
"wide".to_string(),
"width".to_string(),
"wife".to_string(),
"wild".to_string(),
"will".to_string(),
"win".to_string(),
"window".to_string(),
"wine".to_string(),
"wing".to_string(),
"wink".to_string(),
"winner".to_string(),
"winter".to_string(),
"wire".to_string(),
"wisdom".to_string(),
"wise".to_string(),
"wish".to_string(),
"witness".to_string(),
"wolf".to_string(),
"woman".to_string(),
"wonder".to_string(),
"wood".to_string(),
"wool".to_string(),
"word".to_string(),
"work".to_string(),
"world".to_string(),
"worry".to_string(),
"worth".to_string(),
"wrap".to_string(),
"wreck".to_string(),
"wrestle".to_string(),
"wrist".to_string(),
"write".to_string(),
"wrong".to_string(),
"yard".to_string(),
"year".to_string(),
"yellow".to_string(),
"you".to_string(),
"young".to_string(),
"youth".to_string(),
"zebra".to_string(),
"zero".to_string(),
"zone".to_string(),
"zoo".to_string(),
]
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment