cake_wallet/cw_wownero/lib/mywownero.dart

1690 lines
21 KiB
Dart
Raw Normal View History

Wownero (#1485) * fix: scanning issues * fix: sync, storing silent unspents * chore: deps * fix: label issues, clear spent utxo * chore: deps * fix: build * fix: missing types * feat: new electrs API & changes, fixes for last block scanning * feat: Scan Silent Payments homepage toggle * chore: build configure * feat: generic fixes, testnet UI improvements, useSSL on bitcoin nodes * fix: invalid Object in sendData * feat: improve addresses page & address book displays * feat: silent payments labeled addresses disclaimer * fix: missing i18n * chore: print * feat: single block scan, rescan by date working for btc mainnet * feat: new cake features page replace market page, move sp scan toggle, auto switch node pop up alert * feat: delete silent addresses * fix: red dot in non ssl nodes * fix: inconsistent connection states, fix tx history * fix: tx & balance displays, cpfp sending * feat: new rust lib * chore: node path * fix: check node based on network * fix: missing txcount from addresses * style: padding in feature page cards * fix: restore not getting all wallet addresses by type * fix: auto switch node broken * fix: silent payment txs not being restored * feat: change scanning to subscription model, sync improvements * fix: scan re-subscription * fix: default nodes * fix: improve scanning by date, fix single block scan * refactor: common function for input tx selection * various fixes for build issues * initial monero.dart implementation * ... * multiple wallets new lib minor fixes * other fixes from monero.dart and monero_c * fix: nodes & build * update build scripts fix polyseed * remove unnecessary code * Add windows app, build scripts and build guide for it. * Minor fix in generated monero configs * fix: send all with multiple outs * add missing monero_c command * add android build script * Merge and fix main * undo android ndk removal * Fix modified exception_handler.dart * Temporarily remove haven * fix build issues * fix pr script * Fixes for build monero.dart (monero_c) for windows. * monero build script * wip: ios build script * refactor: unchanged file * Added build guides for iOS and macOS. Replaced nproc call on macOS. Added macOS configuration for configure_cake_wallet.sh script. * Update monero.dart and monero_c versions. * Add missed windows build scripts * Update the application configuration for windows build script. * Update cw_monero pubspec lock file for monero.dart * Update pr_test_build.yml * chore: upgrade * chore: merge changes * refactor: unchanged files [skip ci] * Fix conflicts with main * fix for multiple wallets * Add tron to windows application configuration. * Add macOS option for description message in configure_cake_wallet.sh * Include missed monero dll for windows. * fix conflicts with main * Disable haven configuration for iOS as default. Add ability to configure cakewallet for iOS with for configuration script. Remove cw_shared configuration for cw_monero. * fix: scan fixes, add date, allow sending while scanning * add missing nano secrets file [skip ci] * ios library * don't pull prebuilds android * Add auto generation of manifest file for android project even for iOS, macOS, Windows. * feat: sync fixes, sp settings * feat: fix resyncing * store crash fix * make init async so it won't lag disable print starts * fix monero_c build issues * libstdc++ * Fix MacOS saving wallet file issue Fix Secure Storage issue (somehow) * update pubspec.lock * fix build script * Use dylib as iOS framework. Use custom path for loading of iOS framework for monero.dart. Add script for generate iOS framework for monero wallet. * fix: date from height logic, status disconnected & chain tip get * fix: params * feat: electrum migration if using cake electrum * fix nodes update versions * re-enable tron * update sp_scanner to work on iOS [skip ci] * bump monero_c hash * bump monero_c commit * bump moneroc version * bump monero_c commit * Add ability to build monero wallet lib as universal lib. Update macOS build guide. Change default arch for macOS project to . * fix: wrong socket for old electrum nodes * Fix unchecked wallet type call * get App Dir correctly in default_settings_migration.dart * handle previous issue with fetching linux documents directory [skip ci] * backup fix * fix NTFS issues * Close the wallet when the wallet gets changed * fix: double balance * feat: node domain * fix: menu name * bump monero_c commit * fix: update tip on set scanning * fix: connection switching back and forth * feat: check if node is electrs, and supports sp * chore: fix build * minor enhancements * fixes and enhancements * solve conflicts with main * Only stop wallet on rename and delete * fix: status toggle * minor enhancement * Monero.com fixes * bump monero_c commit * update sp_scanner to include windows and linux * Update macOS build guide. Change brew dependencies for build unbound locally. * fix conflicts and update macos build guide * remove build cache when on gh actions * update secure storage * free up even more storage * free up more storage * Add initial wownero * fix conflicts * fix workflow issue * build wownero * ios and windows changes * macos * complete wownero flow (app side) * add keychain group entitlement and update script for RunnerBase on macos * update secure_storage version to 8.1.0 in configure.dart * add wownero framework * update ios builds * proper path for wownero and monero * finalizing wownero * finalizing wownero * free up even more storage * revert commenting of build gradle configs * revert commenting of secrets [skip ci] * free more storage * minor fixes * link android wownero libraries * bump monero_c commit * wownero fixes * rename target * build_single.sh using clean env * bump monero_c commit * minor fix * Add wownero polyseed * fix conflicts with main * fix: wallet seed display fix: wownero not refreshing * fix: wallet seed display fix: wownero not refreshing * bump monero_c commit * minor fixes * fix: incorrectly displaying XMR instead of WOW * fix: incorrect restore height in wownero * bump monero_c commit * Add Inno Setup Script for windows exe installer * drop libc++_shared.so * fixes from comments * Fix CMake for windows * Merge latest monero dart changes [skip ci] * bump monero_c commit * add wownero to build scripts for macos [skip ci] * add 14 word seed support to wownero * UI fixes for wownero seed restore * minor fixes * reformat code to pass lints * wownero: fixes haven: removal popup * minor iOS fix [skip ci] * fix: wownero confirmation count (it is spendable after 3 confirms) fix: transaction history not displaying in WOW and XMR when tx has 0 confirms, This is more of a workaround, because I have no idea why would the cpp code not return pending transaction. * Update preferences_key.dart [skip ci] * minor fixes --------- Co-authored-by: Rafael Saes <git@rafael.saes.dev> Co-authored-by: Czarek Nakamoto <cyjan@mrcyjanek.net> Co-authored-by: M <m@cakewallet.com> Co-authored-by: Konstantin Ullrich <konstantinullrich12@gmail.com> Co-authored-by: Matthew Fosse <matt@fosse.co>
2024-07-04 19:43:17 +00:00
const prefixLength = 3;
String swapEndianBytes(String original) {
if (original.length != 8) {
return '';
}
return original[6] +
original[7] +
original[4] +
original[5] +
original[2] +
original[3] +
original[0] +
original[1];
}
List<String> tructWords(List<String> wordSet) {
final start = 0;
final end = prefixLength;
return wordSet.map((word) => word.substring(start, end)).toList();
}
String mnemonicDecode(String seed) {
final n = englistWordSet.length;
var out = '';
var wlist = seed.split(' ');
wlist.removeLast();
for (var i = 0; i < wlist.length; i += 3) {
final w1 =
tructWords(englistWordSet).indexOf(wlist[i].substring(0, prefixLength));
final w2 = tructWords(englistWordSet)
.indexOf(wlist[i + 1].substring(0, prefixLength));
final w3 = tructWords(englistWordSet)
.indexOf(wlist[i + 2].substring(0, prefixLength));
if (w1 == -1 || w2 == -1 || w3 == -1) {
print("invalid word in mnemonic");
return '';
}
final x = w1 + n * (((n - w1) + w2) % n) + n * n * (((n - w2) + w3) % n);
if (x % n != w1) {
print("Something went wrong when decoding your private key, please try again");
return '';
}
final _res = '0000000' + x.toRadixString(16);
final start = _res.length - 8;
final end = _res.length;
final res = _res.substring(start, end);
out += swapEndianBytes(res);
}
return out;
}
final englistWordSet = [
"abbey",
"abducts",
"ability",
"ablaze",
"abnormal",
"abort",
"abrasive",
"absorb",
"abyss",
"academy",
"aces",
"aching",
"acidic",
"acoustic",
"acquire",
"across",
"actress",
"acumen",
"adapt",
"addicted",
"adept",
"adhesive",
"adjust",
"adopt",
"adrenalin",
"adult",
"adventure",
"aerial",
"afar",
"affair",
"afield",
"afloat",
"afoot",
"afraid",
"after",
"against",
"agenda",
"aggravate",
"agile",
"aglow",
"agnostic",
"agony",
"agreed",
"ahead",
"aided",
"ailments",
"aimless",
"airport",
"aisle",
"ajar",
"akin",
"alarms",
"album",
"alchemy",
"alerts",
"algebra",
"alkaline",
"alley",
"almost",
"aloof",
"alpine",
"already",
"also",
"altitude",
"alumni",
"always",
"amaze",
"ambush",
"amended",
"amidst",
"ammo",
"amnesty",
"among",
"amply",
"amused",
"anchor",
"android",
"anecdote",
"angled",
"ankle",
"annoyed",
"answers",
"antics",
"anvil",
"anxiety",
"anybody",
"apart",
"apex",
"aphid",
"aplomb",
"apology",
"apply",
"apricot",
"aptitude",
"aquarium",
"arbitrary",
"archer",
"ardent",
"arena",
"argue",
"arises",
"army",
"around",
"arrow",
"arsenic",
"artistic",
"ascend",
"ashtray",
"aside",
"asked",
"asleep",
"aspire",
"assorted",
"asylum",
"athlete",
"atlas",
"atom",
"atrium",
"attire",
"auburn",
"auctions",
"audio",
"august",
"aunt",
"austere",
"autumn",
"avatar",
"avidly",
"avoid",
"awakened",
"awesome",
"awful",
"awkward",
"awning",
"awoken",
"axes",
"axis",
"axle",
"aztec",
"azure",
"baby",
"bacon",
"badge",
"baffles",
"bagpipe",
"bailed",
"bakery",
"balding",
"bamboo",
"banjo",
"baptism",
"basin",
"batch",
"bawled",
"bays",
"because",
"beer",
"befit",
"begun",
"behind",
"being",
"below",
"bemused",
"benches",
"berries",
"bested",
"betting",
"bevel",
"beware",
"beyond",
"bias",
"bicycle",
"bids",
"bifocals",
"biggest",
"bikini",
"bimonthly",
"binocular",
"biology",
"biplane",
"birth",
"biscuit",
"bite",
"biweekly",
"blender",
"blip",
"bluntly",
"boat",
"bobsled",
"bodies",
"bogeys",
"boil",
"boldly",
"bomb",
"border",
"boss",
"both",
"bounced",
"bovine",
"bowling",
"boxes",
"boyfriend",
"broken",
"brunt",
"bubble",
"buckets",
"budget",
"buffet",
"bugs",
"building",
"bulb",
"bumper",
"bunch",
"business",
"butter",
"buying",
"buzzer",
"bygones",
"byline",
"bypass",
"cabin",
"cactus",
"cadets",
"cafe",
"cage",
"cajun",
"cake",
"calamity",
"camp",
"candy",
"casket",
"catch",
"cause",
"cavernous",
"cease",
"cedar",
"ceiling",
"cell",
"cement",
"cent",
"certain",
"chlorine",
"chrome",
"cider",
"cigar",
"cinema",
"circle",
"cistern",
"citadel",
"civilian",
"claim",
"click",
"clue",
"coal",
"cobra",
"cocoa",
"code",
"coexist",
"coffee",
"cogs",
"cohesive",
"coils",
"colony",
"comb",
"cool",
"copy",
"corrode",
"costume",
"cottage",
"cousin",
"cowl",
"criminal",
"cube",
"cucumber",
"cuddled",
"cuffs",
"cuisine",
"cunning",
"cupcake",
"custom",
"cycling",
"cylinder",
"cynical",
"dabbing",
"dads",
"daft",
"dagger",
"daily",
"damp",
"dangerous",
"dapper",
"darted",
"dash",
"dating",
"dauntless",
"dawn",
"daytime",
"dazed",
"debut",
"decay",
"dedicated",
"deepest",
"deftly",
"degrees",
"dehydrate",
"deity",
"dejected",
"delayed",
"demonstrate",
"dented",
"deodorant",
"depth",
"desk",
"devoid",
"dewdrop",
"dexterity",
"dialect",
"dice",
"diet",
"different",
"digit",
"dilute",
"dime",
"dinner",
"diode",
"diplomat",
"directed",
"distance",
"ditch",
"divers",
"dizzy",
"doctor",
"dodge",
"does",
"dogs",
"doing",
"dolphin",
"domestic",
"donuts",
"doorway",
"dormant",
"dosage",
"dotted",
"double",
"dove",
"down",
"dozen",
"dreams",
"drinks",
"drowning",
"drunk",
"drying",
"dual",
"dubbed",
"duckling",
"dude",
"duets",
"duke",
"dullness",
"dummy",
"dunes",
"duplex",
"duration",
"dusted",
"duties",
"dwarf",
"dwelt",
"dwindling",
"dying",
"dynamite",
"dyslexic",
"each",
"eagle",
"earth",
"easy",
"eating",
"eavesdrop",
"eccentric",
"echo",
"eclipse",
"economics",
"ecstatic",
"eden",
"edgy",
"edited",
"educated",
"eels",
"efficient",
"eggs",
"egotistic",
"eight",
"either",
"eject",
"elapse",
"elbow",
"eldest",
"eleven",
"elite",
"elope",
"else",
"eluded",
"emails",
"ember",
"emerge",
"emit",
"emotion",
"empty",
"emulate",
"energy",
"enforce",
"enhanced",
"enigma",
"enjoy",
"enlist",
"enmity",
"enough",
"enraged",
"ensign",
"entrance",
"envy",
"epoxy",
"equip",
"erase",
"erected",
"erosion",
"error",
"eskimos",
"espionage",
"essential",
"estate",
"etched",
"eternal",
"ethics",
"etiquette",
"evaluate",
"evenings",
"evicted",
"evolved",
"examine",
"excess",
"exhale",
"exit",
"exotic",
"exquisite",
"extra",
"exult",
"fabrics",
"factual",
"fading",
"fainted",
"faked",
"fall",
"family",
"fancy",
"farming",
"fatal",
"faulty",
"fawns",
"faxed",
"fazed",
"feast",
"february",
"federal",
"feel",
"feline",
"females",
"fences",
"ferry",
"festival",
"fetches",
"fever",
"fewest",
"fiat",
"fibula",
"fictional",
"fidget",
"fierce",
"fifteen",
"fight",
"films",
"firm",
"fishing",
"fitting",
"five",
"fixate",
"fizzle",
"fleet",
"flippant",
"flying",
"foamy",
"focus",
"foes",
"foggy",
"foiled",
"folding",
"fonts",
"foolish",
"fossil",
"fountain",
"fowls",
"foxes",
"foyer",
"framed",
"friendly",
"frown",
"fruit",
"frying",
"fudge",
"fuel",
"fugitive",
"fully",
"fuming",
"fungal",
"furnished",
"fuselage",
"future",
"fuzzy",
"gables",
"gadget",
"gags",
"gained",
"galaxy",
"gambit",
"gang",
"gasp",
"gather",
"gauze",
"gave",
"gawk",
"gaze",
"gearbox",
"gecko",
"geek",
"gels",
"gemstone",
"general",
"geometry",
"germs",
"gesture",
"getting",
"geyser",
"ghetto",
"ghost",
"giant",
"giddy",
"gifts",
"gigantic",
"gills",
"gimmick",
"ginger",
"girth",
"giving",
"glass",
"gleeful",
"glide",
"gnaw",
"gnome",
"goat",
"goblet",
"godfather",
"goes",
"goggles",
"going",
"goldfish",
"gone",
"goodbye",
"gopher",
"gorilla",
"gossip",
"gotten",
"gourmet",
"governing",
"gown",
"greater",
"grunt",
"guarded",
"guest",
"guide",
"gulp",
"gumball",
"guru",
"gusts",
"gutter",
"guys",
"gymnast",
"gypsy",
"gyrate",
"habitat",
"hacksaw",
"haggled",
"hairy",
"hamburger",
"happens",
"hashing",
"hatchet",
"haunted",
"having",
"hawk",
"haystack",
"hazard",
"hectare",
"hedgehog",
"heels",
"hefty",
"height",
"hemlock",
"hence",
"heron",
"hesitate",
"hexagon",
"hickory",
"hiding",
"highway",
"hijack",
"hiker",
"hills",
"himself",
"hinder",
"hippo",
"hire",
"history",
"hitched",
"hive",
"hoax",
"hobby",
"hockey",
"hoisting",
"hold",
"honked",
"hookup",
"hope",
"hornet",
"hospital",
"hotel",
"hounded",
"hover",
"howls",
"hubcaps",
"huddle",
"huge",
"hull",
"humid",
"hunter",
"hurried",
"husband",
"huts",
"hybrid",
"hydrogen",
"hyper",
"iceberg",
"icing",
"icon",
"identity",
"idiom",
"idled",
"idols",
"igloo",
"ignore",
"iguana",
"illness",
"imagine",
"imbalance",
"imitate",
"impel",
"inactive",
"inbound",
"incur",
"industrial",
"inexact",
"inflamed",
"ingested",
"initiate",
"injury",
"inkling",
"inline",
"inmate",
"innocent",
"inorganic",
"input",
"inquest",
"inroads",
"insult",
"intended",
"inundate",
"invoke",
"inwardly",
"ionic",
"irate",
"iris",
"irony",
"irritate",
"island",
"isolated",
"issued",
"italics",
"itches",
"items",
"itinerary",
"itself",
"ivory",
"jabbed",
"jackets",
"jaded",
"jagged",
"jailed",
"jamming",
"january",
"jargon",
"jaunt",
"javelin",
"jaws",
"jazz",
"jeans",
"jeers",
"jellyfish",
"jeopardy",
"jerseys",
"jester",
"jetting",
"jewels",
"jigsaw",
"jingle",
"jittery",
"jive",
"jobs",
"jockey",
"jogger",
"joining",
"joking",
"jolted",
"jostle",
"journal",
"joyous",
"jubilee",
"judge",
"juggled",
"juicy",
"jukebox",
"july",
"jump",
"junk",
"jury",
"justice",
"juvenile",
"kangaroo",
"karate",
"keep",
"kennel",
"kept",
"kernels",
"kettle",
"keyboard",
"kickoff",
"kidneys",
"king",
"kiosk",
"kisses",
"kitchens",
"kiwi",
"knapsack",
"knee",
"knife",
"knowledge",
"knuckle",
"koala",
"laboratory",
"ladder",
"lagoon",
"lair",
"lakes",
"lamb",
"language",
"laptop",
"large",
"last",
"later",
"launching",
"lava",
"lawsuit",
"layout",
"lazy",
"lectures",
"ledge",
"leech",
"left",
"legion",
"leisure",
"lemon",
"lending",
"leopard",
"lesson",
"lettuce",
"lexicon",
"liar",
"library",
"licks",
"lids",
"lied",
"lifestyle",
"light",
"likewise",
"lilac",
"limits",
"linen",
"lion",
"lipstick",
"liquid",
"listen",
"lively",
"loaded",
"lobster",
"locker",
"lodge",
"lofty",
"logic",
"loincloth",
"long",
"looking",
"lopped",
"lordship",
"losing",
"lottery",
"loudly",
"love",
"lower",
"loyal",
"lucky",
"luggage",
"lukewarm",
"lullaby",
"lumber",
"lunar",
"lurk",
"lush",
"luxury",
"lymph",
"lynx",
"lyrics",
"macro",
"madness",
"magically",
"mailed",
"major",
"makeup",
"malady",
"mammal",
"maps",
"masterful",
"match",
"maul",
"maverick",
"maximum",
"mayor",
"maze",
"meant",
"mechanic",
"medicate",
"meeting",
"megabyte",
"melting",
"memoir",
"menu",
"merger",
"mesh",
"metro",
"mews",
"mice",
"midst",
"mighty",
"mime",
"mirror",
"misery",
"mittens",
"mixture",
"moat",
"mobile",
"mocked",
"mohawk",
"moisture",
"molten",
"moment",
"money",
"moon",
"mops",
"morsel",
"mostly",
"motherly",
"mouth",
"movement",
"mowing",
"much",
"muddy",
"muffin",
"mugged",
"mullet",
"mumble",
"mundane",
"muppet",
"mural",
"musical",
"muzzle",
"myriad",
"mystery",
"myth",
"nabbing",
"nagged",
"nail",
"names",
"nanny",
"napkin",
"narrate",
"nasty",
"natural",
"nautical",
"navy",
"nearby",
"necklace",
"needed",
"negative",
"neither",
"neon",
"nephew",
"nerves",
"nestle",
"network",
"neutral",
"never",
"newt",
"nexus",
"nibs",
"niche",
"niece",
"nifty",
"nightly",
"nimbly",
"nineteen",
"nirvana",
"nitrogen",
"nobody",
"nocturnal",
"nodes",
"noises",
"nomad",
"noodles",
"northern",
"nostril",
"noted",
"nouns",
"novelty",
"nowhere",
"nozzle",
"nuance",
"nucleus",
"nudged",
"nugget",
"nuisance",
"null",
"number",
"nuns",
"nurse",
"nutshell",
"nylon",
"oaks",
"oars",
"oasis",
"oatmeal",
"obedient",
"object",
"obliged",
"obnoxious",
"observant",
"obtains",
"obvious",
"occur",
"ocean",
"october",
"odds",
"odometer",
"offend",
"often",
"oilfield",
"ointment",
"okay",
"older",
"olive",
"olympics",
"omega",
"omission",
"omnibus",
"onboard",
"oncoming",
"oneself",
"ongoing",
"onion",
"online",
"onslaught",
"onto",
"onward",
"oozed",
"opacity",
"opened",
"opposite",
"optical",
"opus",
"orange",
"orbit",
"orchid",
"orders",
"organs",
"origin",
"ornament",
"orphans",
"oscar",
"ostrich",
"otherwise",
"otter",
"ouch",
"ought",
"ounce",
"ourselves",
"oust",
"outbreak",
"oval",
"oven",
"owed",
"owls",
"owner",
"oxidant",
"oxygen",
"oyster",
"ozone",
"pact",
"paddles",
"pager",
"pairing",
"palace",
"pamphlet",
"pancakes",
"paper",
"paradise",
"pastry",
"patio",
"pause",
"pavements",
"pawnshop",
"payment",
"peaches",
"pebbles",
"peculiar",
"pedantic",
"peeled",
"pegs",
"pelican",
"pencil",
"people",
"pepper",
"perfect",
"pests",
"petals",
"phase",
"pheasants",
"phone",
"phrases",
"physics",
"piano",
"picked",
"pierce",
"pigment",
"piloted",
"pimple",
"pinched",
"pioneer",
"pipeline",
"pirate",
"pistons",
"pitched",
"pivot",
"pixels",
"pizza",
"playful",
"pledge",
"pliers",
"plotting",
"plus",
"plywood",
"poaching",
"pockets",
"podcast",
"poetry",
"point",
"poker",
"polar",
"ponies",
"pool",
"popular",
"portents",
"possible",
"potato",
"pouch",
"poverty",
"powder",
"pram",
"present",
"pride",
"problems",
"pruned",
"prying",
"psychic",
"public",
"puck",
"puddle",
"puffin",
"pulp",
"pumpkins",
"punch",
"puppy",
"purged",
"push",
"putty",
"puzzled",
"pylons",
"pyramid",
"python",
"queen",
"quick",
"quote",
"rabbits",
"racetrack",
"radar",
"rafts",
"rage",
"railway",
"raking",
"rally",
"ramped",
"randomly",
"rapid",
"rarest",
"rash",
"rated",
"ravine",
"rays",
"razor",
"react",
"rebel",
"recipe",
"reduce",
"reef",
"refer",
"regular",
"reheat",
"reinvest",
"rejoices",
"rekindle",
"relic",
"remedy",
"renting",
"reorder",
"repent",
"request",
"reruns",
"rest",
"return",
"reunion",
"revamp",
"rewind",
"rhino",
"rhythm",
"ribbon",
"richly",
"ridges",
"rift",
"rigid",
"rims",
"ringing",
"riots",
"ripped",
"rising",
"ritual",
"river",
"roared",
"robot",
"rockets",
"rodent",
"rogue",
"roles",
"romance",
"roomy",
"roped",
"roster",
"rotate",
"rounded",
"rover",
"rowboat",
"royal",
"ruby",
"rudely",
"ruffled",
"rugged",
"ruined",
"ruling",
"rumble",
"runway",
"rural",
"rustled",
"ruthless",
"sabotage",
"sack",
"sadness",
"safety",
"saga",
"sailor",
"sake",
"salads",
"sample",
"sanity",
"sapling",
"sarcasm",
"sash",
"satin",
"saucepan",
"saved",
"sawmill",
"saxophone",
"sayings",
"scamper",
"scenic",
"school",
"science",
"scoop",
"scrub",
"scuba",
"seasons",
"second",
"sedan",
"seeded",
"segments",
"seismic",
"selfish",
"semifinal",
"sensible",
"september",
"sequence",
"serving",
"session",
"setup",
"seventh",
"sewage",
"shackles",
"shelter",
"shipped",
"shocking",
"shrugged",
"shuffled",
"shyness",
"siblings",
"sickness",
"sidekick",
"sieve",
"sifting",
"sighting",
"silk",
"simplest",
"sincerely",
"sipped",
"siren",
"situated",
"sixteen",
"sizes",
"skater",
"skew",
"skirting",
"skulls",
"skydive",
"slackens",
"sleepless",
"slid",
"slower",
"slug",
"smash",
"smelting",
"smidgen",
"smog",
"smuggled",
"snake",
"sneeze",
"sniff",
"snout",
"snug",
"soapy",
"sober",
"soccer",
"soda",
"software",
"soggy",
"soil",
"solved",
"somewhere",
"sonic",
"soothe",
"soprano",
"sorry",
"southern",
"sovereign",
"sowed",
"soya",
"space",
"speedy",
"sphere",
"spiders",
"splendid",
"spout",
"sprig",
"spud",
"spying",
"square",
"stacking",
"stellar",
"stick",
"stockpile",
"strained",
"stunning",
"stylishly",
"subtly",
"succeed",
"suddenly",
"suede",
"suffice",
"sugar",
"suitcase",
"sulking",
"summon",
"sunken",
"superior",
"surfer",
"sushi",
"suture",
"swagger",
"swept",
"swiftly",
"sword",
"swung",
"syllabus",
"symptoms",
"syndrome",
"syringe",
"system",
"taboo",
"tacit",
"tadpoles",
"tagged",
"tail",
"taken",
"talent",
"tamper",
"tanks",
"tapestry",
"tarnished",
"tasked",
"tattoo",
"taunts",
"tavern",
"tawny",
"taxi",
"teardrop",
"technical",
"tedious",
"teeming",
"tell",
"template",
"tender",
"tepid",
"tequila",
"terminal",
"testing",
"tether",
"textbook",
"thaw",
"theatrics",
"thirsty",
"thorn",
"threaten",
"thumbs",
"thwart",
"ticket",
"tidy",
"tiers",
"tiger",
"tilt",
"timber",
"tinted",
"tipsy",
"tirade",
"tissue",
"titans",
"toaster",
"tobacco",
"today",
"toenail",
"toffee",
"together",
"toilet",
"token",
"tolerant",
"tomorrow",
"tonic",
"toolbox",
"topic",
"torch",
"tossed",
"total",
"touchy",
"towel",
"toxic",
"toyed",
"trash",
"trendy",
"tribal",
"trolling",
"truth",
"trying",
"tsunami",
"tubes",
"tucks",
"tudor",
"tuesday",
"tufts",
"tugs",
"tuition",
"tulips",
"tumbling",
"tunnel",
"turnip",
"tusks",
"tutor",
"tuxedo",
"twang",
"tweezers",
"twice",
"twofold",
"tycoon",
"typist",
"tyrant",
"ugly",
"ulcers",
"ultimate",
"umbrella",
"umpire",
"unafraid",
"unbending",
"uncle",
"under",
"uneven",
"unfit",
"ungainly",
"unhappy",
"union",
"unjustly",
"unknown",
"unlikely",
"unmask",
"unnoticed",
"unopened",
"unplugs",
"unquoted",
"unrest",
"unsafe",
"until",
"unusual",
"unveil",
"unwind",
"unzip",
"upbeat",
"upcoming",
"update",
"upgrade",
"uphill",
"upkeep",
"upload",
"upon",
"upper",
"upright",
"upstairs",
"uptight",
"upwards",
"urban",
"urchins",
"urgent",
"usage",
"useful",
"usher",
"using",
"usual",
"utensils",
"utility",
"utmost",
"utopia",
"uttered",
"vacation",
"vague",
"vain",
"value",
"vampire",
"vane",
"vapidly",
"vary",
"vastness",
"vats",
"vaults",
"vector",
"veered",
"vegan",
"vehicle",
"vein",
"velvet",
"venomous",
"verification",
"vessel",
"veteran",
"vexed",
"vials",
"vibrate",
"victim",
"video",
"viewpoint",
"vigilant",
"viking",
"village",
"vinegar",
"violin",
"vipers",
"virtual",
"visited",
"vitals",
"vivid",
"vixen",
"vocal",
"vogue",
"voice",
"volcano",
"vortex",
"voted",
"voucher",
"vowels",
"voyage",
"vulture",
"wade",
"waffle",
"wagtail",
"waist",
"waking",
"wallets",
"wanted",
"warped",
"washing",
"water",
"waveform",
"waxing",
"wayside",
"weavers",
"website",
"wedge",
"weekday",
"weird",
"welders",
"went",
"wept",
"were",
"western",
"wetsuit",
"whale",
"when",
"whipped",
"whole",
"wickets",
"width",
"wield",
"wife",
"wiggle",
"wildly",
"winter",
"wipeout",
"wiring",
"wise",
"withdrawn",
"wives",
"wizard",
"wobbly",
"woes",
"woken",
"wolf",
"womanly",
"wonders",
"woozy",
"worry",
"wounded",
"woven",
"wrap",
"wrist",
"wrong",
"yacht",
"yahoo",
"yanks",
"yard",
"yawning",
"yearbook",
"yellow",
"yesterday",
"yeti",
"yields",
"yodel",
"yoga",
"younger",
"yoyo",
"zapped",
"zeal",
"zebra",
"zero",
"zesty",
"zigzags",
"zinger",
"zippers",
"zodiac",
"zombie",
"zones",
"zoom"
];