diff --git a/blog/templeos-2-god-the-rng-2019-05-30.markdown b/blog/templeos-2-god-the-rng-2019-05-30.markdown new file mode 100644 index 0000000..38e6cbf --- /dev/null +++ b/blog/templeos-2-god-the-rng-2019-05-30.markdown @@ -0,0 +1,287 @@ +--- +title: "TempleOS: 2 - god, the Random Number Generator" +date: 2019-05-30 +series: templeos +--- + +# TempleOS: 2 - `god`, the Random Number Generator + +The [last post](https://christine.website/blog/templeos-1-installation-and-basic-use-2019-05-20) covered a lot of the basic usage of TempleOS. This post is going to be significantly different, as I'm going to be porting part of the TempleOS kernel to WebAssembly as a live demo. + +This post may contain words used in ways and places that look blasphemous at first glance. No blasphemy is intended, though it is an unfortunate requirement for covering this part of TempleOS' kernel. It's worth noting that Terry Davis [legitimately believed that TempleOS is a temple of the Lord Yahweh](https://templeos.holyc.xyz/Wb/Doc/Charter.html): + +``` +* TempleOS is God's official temple. Just like Solomon's temple, this is a +community focal point where offerings are made and God's oracle is consulted. +``` + +As such, a lot of the "weird" naming conventions with core parts of this and other subsystems make a lot more sense when grounded in American conservative-leaning Evangelistic Judeo-Christian tradition. Evangelical Christians are, on average, more comfortable or okay with the idea of direct conversation with God. To other denominations of Christianity, this is enough to get you sent to a mental institution. I am not focusing on the philosophical aspects of this, more on the result that exists in code. + +Normally, people with Judeo-Christian views see God as a trinity. This trinity is usually said to be made up of the following equally infinite parts: + +- God the Father (Yahweh/"God") +- God the Son (Jesus) +- God the Holy Spirit (the entity responsible for divination among other things) + +In TempleOS however, there are 4 of these parts: + +- God the Father +- God the Son +- God the Holy Spirit +- `god` the random number generator + +`god` is really simple at its heart; however this is one of the sad cases where the [actual documentation is incredibly useless](https://templeos.holyc.xyz/Wb/Adam/God/HSNotes.html) (warning: incoherent link). `god`'s really just a [FIFO](https://en.wikipedia.org/wiki/FIFO_(computing_and_electronics)) of entropy bits. Here is the [snipped] definition of [`god`'s datatype](https://github.com/Xe/TempleOS/blob/1dd8859b7803355f41d75222d01ed42d5dda057f/Adam/God/GodExt.HC#L6): + +``` +// C:/Adam/God/GodExt.HC.Z +public class CGodGlbls +{ + U8 **words, + *word_file_mask; + I64 word_fuf_flags, + num_words; + CFifoU8 *fifo; + // ... snipped +} god; +``` + +This is about equivalent to the following Zig code (I would just be embedding TempleOS directly in a webpage but I can't figure out how to do that yet, please help if you can): + +``` +const Stack = @import("std").atomic.Stack; + +// []const u8 is == to a string in zig +const God = struct { + words: [][]const u8, + bits: *Stack(u8), +} +``` + +Most of the fields in our snipped `CGodGlbls` are related to internals of TempleOS (specifically it uses a glob-mask to match filenames because of the [transparent compression that RedSea offers](https://templeos.holyc.xyz/Wb/Doc/RedSea.html)), so we can ignore these in the Zig port. What's curious though is the `words` list of strings. This actually points to [every word in the King James Bible](/static/blog/tos_2/Vocab.DD). The original intent of this code was to have the computer assist in divination. The above kind of ranting link to templeos.holyc.xyz tries to explain this: + +``` +The technique I use to consult the Holy Spirit is reading a microsecond-range +stop-watch each button press for random numbers. Then, I pick words with +or passages with . + +Since seeking the word of the Holy Spirit, I have come to know God much better +than I've heard others explain. For example, God said to me in an oracle that +war was, "servicemen competing." That sounds more like the immutable God of our +planet than what you hear from most religious people. God is not Venus (god of +love) and not Mars (god of war), He's our dearly beloved God of Earth. If +Mammon is a false god of money, Mars or Venus might be useful words to describe +other false gods. I figure the greatest challenge for the Creator is boredom, +ours and His. What would teen-age male video games be like if war had never +happened? Christ said live by the sword, die by the sword, which is loving +neighbor as self. + +> Then said Jesus unto him, “Put up again thy sword into his place, for all +> they that take the sword shall perish with the sword. +- MATTHEW 26:52 + +I asked God if the World was perfectly just. God asked if I was calling Him +lazy. God could make A.I., right? God could make bots as smart as Himself, or, +in fact, part of Himself. What if God made a bot to manipulate every person's +life so that perfect justice happened? +``` + +Terry Davis legitimately believed that this code was being directly influenced by the Holy Spirit; and that therefore Terry could ask God questions and get responses by hammering `F7`. One of the sources of entropy for the random number generator is keyboard input, so in a way Terry was the voice of `god` through everything he wrote. + +> Terry: Is the World perfectly just? +> `god`: Are you calling me lazy? + +Once the system boots, `god` gets initialized with the contents of every word in the King James Bible. It loads the words something like [this](https://github.com/Xe/TempleOS/blob/1dd8859b7803355f41d75222d01ed42d5dda057f/Adam/God/HolySpirit.HC#L76-L136): + +1. Loop through the vocabulary list and count the number of words in it (by the number of word boundaries). +2. Allocate an integer array big enough for all of the words. +3. Loop through the vocabulary list again and add each of these words to the words array. + +Since the vocabulary list is pretty safely not going to change at this point, we can omit the first step: + +``` +const words = @embedFile("./Vocab.DD"); +const numWordsInFile = 7570; + +var alloc = @import("std").heap.wasm_allocator; + +const God = struct { + words: [][]const u8, + bits: *Stack(u8), + + fn init() !*God { + var result: *God = undefined; + + var stack = Stack(u8).init(); + result = try alloc.create(God); + result.words = try splitWords(words[0..words.len], numWordsInFile); + result.bits = &stack; + + return result; + } + + // ... snipped ... +} + +fn splitWords(data: []const u8, numWords: u32) ![][]const u8 { + // make a bucket big enough for all of god's words + var result: [][]const u8 = try alloc.alloc([]const u8, numWords); + var ctr: usize = 0; + + // iterate over the wordlist (one word per line) + var itr = mem.separate(data, "\n"); + var done = false; + while (!done) { + var val = itr.next(); + // val is of type ?u8, so resolve that + if (val) |str| { + // for some reason the last line in the file is a zero-length string + if (str.len == 0) { + done = true; + continue; + } + result[ctr] = str; + ctr += 1; + } else { + done = true; + break; + } + } + + return result; +} +``` + +Now that all of the words are loaded, let's look more closely at how things are added to and removed from the stack/FIFO. Usage is intended to be simple. When you try to grab bytes from `god` and there aren't any, it prompts: + +``` +public I64 GodBits(I64 num_bits,U8 *msg=NULL) +{//Return N bits. If low on entropy pop-up okay. + U8 b; + I64 res=0; + while (num_bits) { + if (FifoU8Rem(god.fifo,&b)) { // if we can remove a bit from the fifo + res=res<<1+b; // then add this bit to the result and left-shift by 1 bit + num_bits--; // and care about one less bit + } else { + // or insert more bits from the picker + GodBitsIns(GOD_GOOD_BITS,GodPick(msg)); + } + } + return res; +} +``` + +Usage is simple: + +``` +I64 bits; +bits = GodBits(64, "a demo for the blog"); +``` + + + +![the result as an i64](/static/blog/tos_2/resp.png) + +This is actually also a generic userspace function that applications can call. [Here's an example of `god` drawing tarot cards](https://github.com/Xe/TempleOS-tools/blob/master/Programs/Tarot.HC). + +So let's translate this to Zig: + +``` +// inside the `const God` definition: + + fn add_bits(self: *God, num_bits: i64, n: i64) void { + var i: i64 = 0; + var nn = n; + // loop over each bit in n, up to num_bits + while (i < num_bits) : (i += 1) { + // create the new stack node (== to pushing to the fifo) + var node = alloc.create(Stack(u8).Node) catch unreachable; + node.* = Stack(u8).Node { + .next = undefined, + .data = @intCast(u8, nn & 1), + }; + self.bits.push(node); + nn = nn >> 1; + } + } + + fn get_word(self: *God) []const u8 { + const gotten = @mod(self.get_bits(14), numWordsInFile); + const word = self.words[@intCast(usize, gotten)]; + return word; + } + + fn get_bits(self: *God, num_bits: i64) i64 { + var i: i64 = 0; + var result: i64 = 0; + while (i < num_bits) : (i += 1) { + const n = self.bits.pop(); + + // n is an optional (type: ?*Stack(u8).Node), so resolve it + // TODO(Xe): automatically refill data if stack is empty + if (n) |nn| { + result = result + @intCast(i64, nn.data); + result = result << 1; + } else { + break; + } + } + + return result; + } +``` + +We don't have the best sources of entropy for WebAssembly code, so let's use [Olin's random_i32 function](https://github.com/Xe/olin/blob/master/docs/cwa-spec/ns/random.md#i32): + +``` +const olin = @import("./olin/olin.zig"); +const Resource = olin.resource.Resource; + +fn main() !void { + var god = try God.init(); + // open standard output for writing + const stdout = try Resource.stdout(); + const nl = "\n"; + + god.add_bits(32, olin.random.int32()); + // I copypasted this a few times (16) in the original code + // to ensure sufficient entropy + + const w = god.get_word(); + var ignored = try stdout.write(w.ptr, w.len); + ignored = try stdout.write(&nl, nl.len); +} +``` + +And when we run this manually with [`cwa`](https://github.com/Xe/olin/tree/master/cmd/cwa): + +``` +$ cwa -vm-stats god.wasm +uncultivated +2019/05/29 20:43:43 reading file time: 314.372µs +2019/05/29 20:43:43 vm init time: 10.728915ms +2019/05/29 20:43:43 vm gas limit: 4194304 +2019/05/29 20:43:43 vm gas used: 2010576 +2019/05/29 20:43:43 vm gas percentage: 47.93586730957031 +2019/05/29 20:43:43 vm syscalls: 20 +2019/05/29 20:43:43 execution time: 48.865856ms +2019/05/29 20:43:43 memory pages: 3 +``` + +Yikes! Loading the wordlist is expensive (alternatively: my arbitrary gas limit is set way too low), so it's a good thing it's only done once and at boot. Still, regardless of this TempleOS boots in [only a few seconds anyways](https://i.imgur.com/O3FFsqA.png). + +The final product is runnable via [this link](/static/blog/tos_2/wasm_exec.html). Please note that this is not currently supported on big-endian CPU's in browsers because Mozilla and Google have totally dropped the ball in this court, and trying to load that link will probably crash your browser. + +Hit `Run` in order to run the [final code](https://github.com/Xe/TempleOS-tools/blob/master/god/god.zig). You should get output that looks something like this after pressing it a few times: + +![](/static/blog/tos_2/browser.png) + +--- + +Special thanks to the following people whose code, expertise and the like helped make this happen: + +- [Artemis](https://mst3k.interlinked.me/@artemis) +- [Ayke van Laethem](https://twitter.com/aykevl) +- `spets` +- [Richard Musiol](https://github.com/neelance) +- Terry Davis (RIP) diff --git a/static/blog/tos_2/Vocab.DD b/static/blog/tos_2/Vocab.DD new file mode 100644 index 0000000..4d4d42b --- /dev/null +++ b/static/blog/tos_2/Vocab.DD @@ -0,0 +1,7569 @@ +a +abandon +abandoned +abandonedly +abase +abased +abashed +abated +abhor +abhorred +abhorring +abide +abided +abidest +abideth +abiding +abilities +ability +abject +able +abler +abode +abolished +abominable +abound +abounded +about +above +abraham +abridged +abroad +absence +absent +absolute +absolutely +absorb +abstemious +abstinence +abstract +abstruser +absurd +absurdity +absurdly +abundance +abundant +abundantly +abuse +abyss +academicians +academics +accents +accept +acceptable +acceptably +accepted +accepts +access +accompany +accomplices +accomplish +accomplished +accord +according +account +accounted +accursed +accuse +accused +accuser +accusing +accustomed +aches +achieve +acknowledge +acknowledged +acquaintance +acquainted +acquiesce +acquire +acquired +act +acted +acting +action +actions +actor +actors +acts +actual +actually +acute +acuteness +ad +adam +adapt +adapted +add +added +adding +addition +additional +additions +adeodatus +admirable +admiration +admire +admired +admiring +admission +admit +admitted +admittest +admonish +admonished +admonition +adomed +adopted +adoption +adored +adorned +adorning +adulterer +adulteress +adulterous +adultery +advance +advantage +adversary +adversities +adversity +advice +advices +advised +advising +aeneas +afar +affairs +affect +affected +affecting +affection +affections +affects +affianced +affirm +affirmed +affirming +affliction +afford +affright +affrighted +aforesaid +aforetime +afraid +afric +africa +african +after +afternoon +afterward +afterwards +again +against +age +aged +agents +ages +aghast +agito +ago +agonised +agonistic +agony +agree +agreeable +agreed +agreement +ahead +aid +aided +ails +aim +air +alarmed +alas +alexandria +alike +alive +all +allay +allaying +allege +alleging +allegorically +allegory +allotted +allow +allowances +allowed +allowing +alloy +allurements +alluring +almighty +almost +alms +almsdeeds +aloft +alone +along +aloud +already +also +altar +alter +alteration +alterations +altered +alternately +alternates +alternatively +although +altogether +always +alypius +am +amazed +amazement +amazing +ambition +ambitions +ambitious +ambrose +ambrosian +amen +amend +amendment +amiable +amid +amidst +amiss +among +amongst +amphitheatre +ample +an +analyzed +anaximenes +ancient +and +angel +angels +anger +angered +angers +angry +anguish +animal +animals +animate +anniversary +announce +announced +announcement +announcing +annoyance +annual +anointings +anon +anonymous +another +answer +answerably +answered +answerest +answereth +answering +answers +antecedent +anticipate +anticipated +anticipating +antidote +antony +anubis +anxieties +anxiety +anxious +anxiously +any +anyone +anything +apart +apollinarian +apostle +apostles +apostolic +apparel +apparent +apparently +appeal +appear +appearance +appeared +appeareth +appearing +appears +appetite +applauded +applauds +applauses +applicable +application +applied +apply +appointed +appointing +appointment +appointments +apportioned +apprehend +apprehended +apprehending +apprehension +approach +approached +approaching +approbation +appropriated +approve +approved +approveth +approving +apt +aptly +aquatic +architect +architects +archive +ardent +ardently +are +argument +arguments +arians +aright +arise +arisen +ariseth +arising +aristotle +arithmetic +armed +armory +arms +army +arose +around +arrange +arranged +array +arrival +arrive +arrived +arriving +arrogancy +arrogant +arrows +art +artifice +artificer +artifices +arts +as +ascend +ascended +ascending +ascension +ascertained +ascii +ascribe +ascribed +ashamed +ashes +aside +ask +asked +asketh +asking +asks +asleep +aspirate +assail +assailed +assaying +assembly +assent +assented +assenting +assessor +assiduously +assign +assigned +assistance +associate +associated +association +assuaged +assume +assurance +assure +assured +assuredly +assuring +asterisk +astonished +astonishment +astray +astrologer +astrologers +asunder +at +athanasius +athenians +athirst +atrociously +attack +attacked +attain +attained +attaining +attempered +attempt +attempted +attendant +attended +attention +attentive +attentively +attested +attracted +attractiveness +attracts +attributed +attributing +attuned +audacious +audaciously +audience +auditor +auditors +aught +augmented +augmenting +augustine +author +authority +authors +avail +availed +ave +avenged +avengest +avenue +avenues +averred +averse +avert +avoid +avoided +avoiding +awaited +awaiting +awake +awakest +aware +away +awe +awful +awfulness +awhile +awoke +babe +babes +baby +babylon +babylonian +back +backs +backward +bad +bade +badge +baggage +bait +balancings +balaneion +ball +balls +balm +balneum +bands +banished +banner +banquetings +banter +baptise +baptised +baptism +barbarian +barbarism +bare +bared +bargain +bark +barked +barking +barred +barren +base +based +baseness +basest +bashfulness +basilica +basket +bath +bathe +bathed +bathing +baths +battle +bawler +be +beams +bear +bearer +beareth +bearing +bears +beast +beasts +beat +beaten +beatific +beating +beatings +beauteous +beauties +beautified +beautiful +beauty +became +because +beck +beclouded +become +becomes +becometh +becoming +bed +bedewed +bedimmed +been +befalls +befell +befitting +before +beforehand +beg +began +begannest +begat +beget +beggar +beggary +begged +begging +begin +beginneth +beginning +begins +begotten +beguile +beguiled +beguiling +begun +behalf +beheld +behind +behold +beholder +beholdest +beholdeth +beholding +beholds +being +beings +belief +believe +believed +believer +believes +believeth +believing +belly +belong +belongeth +belonging +belongs +beloved +below +bemoaned +bemoaning +bend +bends +beneath +benediction +benefit +benefits +bent +bepraised +bereaved +beseech +beset +besets +beside +besides +bespoken +bespotted +besprinkle +besprinkling +best +bestow +bestowed +bestowedst +betake +bethink +betook +betrothed +better +betters +between +betwixt +bewail +bewailed +bewailing +beware +bewitched +beyond +bibber +bibbing +bible +bid +bidden +bier +billion +billows +bin +binary +bind +bird +birdlime +birds +birth +birthright +births +bishop +biting +bitter +bitterly +bitterness +black +blade +blame +blamed +blameless +blamest +blameworthy +blasphemies +blasphemous +blasphemy +blasts +bleeding +blending +bless +blessed +blessedly +blessedness +blesses +blessest +blesseth +blessing +blessings +blest +blew +blind +blinded +blindness +blissful +blood +bloody +bloom +blotted +blottedst +blow +blowing +blunt +blunted +blush +blushed +boast +boastfulness +boasting +bodies +bodily +body +boil +boiled +boiling +boils +bold +boldly +boldness +bond +bondage +bonds +bones +book +books +bore +born +borne +borrow +bosom +bosses +both +bottom +bottomless +boughs +bought +bounces +bound +boundary +bounded +boundless +bounds +bouverie +bowed +bowels +bowers +bowing +bows +boy +boyhood +boyish +boys +brackishness +brain +breach +bread +breadth +break +breakers +breaking +breast +breasts +breath +breathe +breathed +breathedst +breathing +bred +brethren +briars +bribe +bridal +bride +bridegroom +brides +bridle +briefly +briers +bright +brighter +brightness +brim +bring +bringeth +bringing +brings +brittle +broad +broke +broken +brooks +brother +brotherly +brought +broughtest +brow +brows +brute +bubbling +bubblings +buckler +bud +builded +builder +building +buildings +built +bulk +bulky +burden +burial +buried +burn +burned +burnest +burning +burnt +burst +burstest +bursting +burthen +burthened +bury +bushel +busied +business +bustle +busy +but +butler +buy +buyers +buzz +buzzed +buzzing +by +cabinets +caesar +cakes +calamities +calamity +calculate +calculated +calculation +calculations +calf +call +called +calledst +callest +calleth +calling +calls +calm +calmed +calmly +calumnies +came +camp +can +candid +candle +cane +cannot +canst +canticles +canvassing +capable +capacities +capacity +capital +captain +captious +captive +captivity +carcase +care +cared +caredst +careful +carefully +careless +carelessly +cares +caresses +carest +careth +carnal +carolina +carried +carry +carrying +carthage +carthaginian +case +cases +cassiacum +cast +casters +castest +casting +casts +cataloguers +catch +catching +catechumen +catholic +catholics +catiline +cattle +caught +cauldron +cause +causes +causing +caverns +caves +cd +cease +ceased +ceases +ceasest +ceaseth +ceasing +cedars +celebrated +celebration +celestial +celibacy +cellar +cellars +cementest +censers +censured +central +centre +certain +certainly +certainties +certainty +chain +chains +chair +challenged +challenges +chamber +chambering +chambers +chance +change +changeable +changeableness +changed +changes +changest +changing +chant +chanting +chapter +character +characters +charge +charges +charioteer +chariots +charity +charmed +chaste +chastely +chastened +chastenedst +chastenest +chastity +chatto +cheap +check +checked +checking +cheeks +cheer +cheered +cheerful +cheerfulness +cherish +cherished +cherubim +chest +chewing +chief +chiefest +chiefly +child +childbearing +childhood +childish +children +chill +chilled +choice +choked +choler +choleric +choose +chooses +choosing +chose +chosen +christ +christian +christians +church +churches +cicero +circensian +circles +circuit +circuits +circumcise +circumlocutions +circumstance +circus +cities +citizen +citizens +city +claim +clanking +clasp +clasped +class +classics +clave +clay +clean +cleanse +cleansed +cleansest +cleansing +clear +cleared +clearest +clearly +clearness +cleave +cleaved +cleaveth +cleaving +climb +clingeth +cloak +cloaked +clog +close +closed +closes +closing +clothe +clothed +clothing +cloud +cloudiness +clouds +cloudy +cloven +cloyed +cloyedness +co +coals +coats +codes +coeternal +cogitated +cogitation +cogito +cogo +cold +collect +collected +collectively +collects +colorado +colour +coloured +colouring +colours +com +combinations +combine +combined +come +comely +comes +cometh +comfort +comforted +comfortedst +comforter +comfortest +comforting +comforts +coming +command +commanded +commander +commandest +commandeth +commanding +commandment +commandments +commands +commemorated +commencement +commencing +commend +commendable +commended +commender +commenders +commendeth +comment +commercial +commiserate +commiserates +commiserating +commission +commit +commits +committed +committing +common +commonly +communicate +communicated +communication +community +compact +compactedst +compacting +companion +companions +company +compare +compared +comparing +comparison +compass +compassing +compassion +compassionate +compassionates +compelled +compendiously +complain +complaints +complete +completed +compliance +compose +composed +composing +compound +comprehend +comprehended +comprehendeth +comprehending +compressed +comprise +comprised +computer +computers +conceal +concealed +conceit +conceits +conceive +conceived +conceives +conceiving +concentrated +conception +conceptions +concern +concerned +concerning +concernment +concerns +conclude +concluded +concludeth +concord +concreated +concubinage +concubine +concupiscence +concupiscences +condemnation +condemned +condemnest +condemning +condemns +condensed +condition +condole +confer +conference +conferring +confess +confessed +confesses +confesseth +confessing +confession +confessions +confidence +confidentially +confidently +confiding +confine +confined +confirm +confirmed +conflict +conflicting +conform +conformably +conformed +conformity +confound +confounded +confused +confusedly +confusedness +confusions +confute +confuted +congratulated +congratulating +congratulation +congregations +conjecture +conjectures +conjecturing +conjoined +conjugal +connecticut +connects +conquer +conquered +conquering +conquests +conscience +conscious +consciousness +consecrate +consecrated +consecrateth +consecrating +consecration +consent +consented +consenting +consentings +consequences +consequential +conservative +consider +considerable +consideration +considered +considereth +considering +considers +consigned +consist +consistent +consistently +consisteth +consisting +consists +consolation +consolations +conspiracy +conspirators +constant +constantly +constellations +constitute +constituted +constituteth +constrain +constrained +constraint +consult +consulted +consulter +consulters +consulting +consume +consumed +consumest +consuming +consumption +contact +contacting +contagion +contain +contained +containest +containeth +containing +contains +contemn +contemplate +contemplateth +contemplating +contemplation +contemporary +contempt +contemptible +contend +content +contented +contention +contentions +contentious +contentiousness +contentment +contents +contests +continence +continency +continent +continently +continual +continually +continuance +continue +continued +continueth +contract +contracted +contradict +contradicting +contradiction +contradictions +contradictory +contrary +contributing +contributions +contrite +contrition +contritions +controversy +convenient +conventicle +conventionally +conversation +conversations +converse +conversing +conversion +convert +converted +convertedst +converting +convey +conveyed +conveyedst +conveying +conveys +convict +convicted +convinced +copied +copies +copious +copy +copyright +corn +corner +corners +corporeal +corporeally +corpse +correct +corrected +correction +corresponded +correspondence +corresponding +corrigible +corrupt +corrupted +corruptible +corrupting +corruption +corruptions +corruptly +cost +costs +cottage +couch +could +couldest +councillor +counsel +counselled +counsels +count +counted +countenance +counterfeit +countermanding +country +countryman +counts +courage +course +courses +coursing +court +courteously +courtesy +courtly +courts +covenant +covenanted +cover +covered +covetous +covetousness +cower +craftier +crafty +create +created +createdst +createst +createth +creating +creation +creator +creature +creatures +credence +credibility +credit +credulity +creep +creepeth +creeping +crept +creusa +cried +criedst +cries +crime +crimes +crisis +criticised +criticising +crooked +crookedly +crookedness +cross +crossed +crosses +crown +crowned +crucifixion +crudities +cruel +cruelty +cry +crying +cubit +cubits +cud +cultivated +cultivating +culture +cunning +cup +cupboards +cupidity +curb +cure +cured +curest +curing +curiosities +curiosity +curious +curiously +current +currents +curtailment +custom +customs +cut +cutting +cyprian +daemon +daemons +daily +dakota +damage +damaged +damages +damnable +danae +danger +dangerous +dangers +dare +dared +dares +dark +darkened +darkenings +darkest +darkly +darkness +darksome +darksomely +dashed +data +date +dates +daughter +daughters +david +dawn +dawned +day +daybreak +days +dead +deadly +deaf +deafen +deafness +deal +dealt +dear +dearer +dearest +death +deaths +debasing +debated +debtor +debtors +debts +decay +decayeth +decays +deceased +deceit +deceitful +deceits +deceivableness +deceive +deceived +deceivers +deceiving +deceivingness +december +deception +decide +decided +decked +declaiming +declamation +declare +declared +decline +decree +decrepit +dedicate +dedicated +deductible +deed +deeds +deem +deemed +deep +deeper +deepest +deeply +deepness +deeps +defect +defection +defective +defects +defence +defended +defender +defending +defends +deferred +deferring +defers +defile +defiled +defilements +define +defined +defining +definite +definitely +deformed +deformities +deformity +degraded +degree +degrees +deity +dejectedness +delay +delayed +delete +deliberate +deliberates +deliberating +deliberation +delight +delighted +delightful +delightfulness +delighting +delights +delightsome +deliver +delivered +deliveredst +deliverest +delivering +delivers +deluded +deluding +delusions +demanded +demander +demandest +demanding +demands +demonstrate +demonstrated +denied +denies +denieth +denoted +denotes +dens +deny +depart +departed +departest +departing +departure +depend +depending +depends +depraved +deprived +depth +depths +deride +derided +deridedst +deriders +derides +deriding +derision +derive +derived +descend +descendants +descending +descent +described +deserted +deserters +deserts +deserve +deserved +deservedly +deserving +deservings +designs +desire +desired +desiredst +desires +desireth +desiring +desirous +despair +despaired +despairing +desperate +despise +despised +despisedst +despisest +despiseth +despising +despite +destined +destroy +destroyers +destroying +destruction +detached +detail +details +detain +detected +determined +detest +detested +detesting +detriment +deus +devil +devilish +devils +devised +devoted +devotion +devotions +devour +devoured +devout +devoutly +devoutness +dew +dialogue +did +diddest +dido +didst +die +died +dies +dieth +differ +difference +different +differently +difficult +difficulties +difficulty +diffused +digest +digested +digits +dignities +dignity +diligence +diligent +diligently +diluted +dimensions +diminish +diminished +diminisheth +diminishing +diminution +din +dining +dinner +dir +direct +directed +directeth +directing +direction +directions +directly +director +disagreeing +disagreements +disalloweth +disallowing +disappear +disapproved +disapproveth +discern +discerned +discerneth +discerning +discharge +disciple +disciples +discipline +disclaimer +disclaimers +disclaims +disclose +disclosed +discomfort +discommended +discontent +discord +discordant +discourage +discourse +discoursed +discourses +discoursing +discover +discoverable +discovered +discoverest +discovereth +discovering +discovers +discovery +discreet +discreetly +discretion +discuss +discussed +discussion +disdained +disease +diseased +diseases +disembowelled +disengage +disentangle +disentangled +disgraced +disgraceful +disguise +disguised +disguising +disgust +disgusted +dishes +dishonour +disk +disliked +dismiss +disobeyed +disorder +disordered +disorders +dispel +dispense +dispensed +dispenser +dispensers +dispensest +dispensing +dispersed +disperseth +dispersion +displace +displacing +displayed +displays +displease +displeased +displeaseth +displeasing +dispose +disposed +disposer +disposition +dispraise +dispraised +dispraisest +disprove +dispute +disputed +disputer +disputes +disputing +disquiet +disquieted +disregard +dissent +dissentings +dissipated +dissipation +dissoluteness +dissolution +dissolved +dissolvest +distance +distances +distant +distempered +distended +distill +distilled +distinct +distinction +distinctly +distinguish +distinguished +distinguishing +distract +distracted +distractedly +distracting +distraction +distractions +distress +distribute +distributed +distributest +distributing +distribution +distrusted +disturb +disturbed +dive +divers +diverse +diversely +diversifiedst +diversity +diversly +divide +divided +dividest +dividing +divination +divinations +divine +diving +divinity +division +divisions +divorceth +do +docile +docs +doctrine +doer +does +doest +dog +doing +doings +doleful +dollar +dollars +domain +domestic +domine +dominion +dominions +don +donation +donations +done +door +doors +dormant +dost +dotages +dotards +doted +doth +doting +double +doubled +doubt +doubted +doubteth +doubtful +doubtfulness +doubting +doubtless +doubts +down +downfall +download +downward +downwards +dragging +dragon +dragons +drank +draught +draw +drawest +drawing +drawn +draws +dread +dreaded +dreadful +dreading +dream +dreams +drenched +drew +drewest +dried +drink +drinketh +drinking +drive +driven +drives +drop +drops +drove +drowsiness +drowsy +drudgery +drunk +drunkard +drunkards +drunken +drunkenness +dry +dryness +duad +duck +dudley +due +dug +dull +duller +dully +dumb +during +durst +dust +duties +dutiful +duty +dwell +dwellers +dwellest +dwelleth +dwelling +dwelt +dying +each +eager +eagerly +eagerness +eagle +ear +earliest +early +earnest +earnestly +earnestness +ears +earth +earthly +ease +eased +easeful +easier +easily +east +eastern +easy +eat +eaten +eateth +eating +ebb +ebbing +ebbs +ebcdic +ecclesiastical +echo +echoed +echoes +eclipsed +eclipses +edged +edification +edify +edit +edited +editing +edition +editions +educate +educated +education +edward +effaced +effaces +effect +effected +effectedst +effort +efforts +egypt +egyptian +eight +eighth +ein +either +elder +elders +elect +electronic +electronically +element +elements +elephant +elevated +elevation +eligible +elijah +eloquence +eloquent +eloquently +else +elsewhere +eluding +email +embalmed +embarrassments +embittered +emblem +embrace +embraced +embracement +embracements +embraces +embryo +emerge +emerging +eminence +eminent +eminently +emotion +emotions +emperor +empire +employ +employed +employee +employest +empress +emptied +emptiness +emptinesses +empty +enabled +enact +enacted +enacteth +enamoured +enchantment +encompass +encompasseth +encourage +encouraged +encouraging +encumbered +encumbrances +end +endangers +endeared +endearments +endeavour +endeavoured +endeavouring +endeavours +ended +ending +endlessly +ends +endued +endurance +endure +endured +endures +endureth +enduring +enemies +enemy +energy +enervated +enforced +enforcement +engage +engaged +engages +engine +english +engraff +enigma +enjoin +enjoined +enjoinest +enjoy +enjoyed +enjoying +enlarge +enlarged +enlargedst +enlarging +enlighten +enlightened +enlightener +enlighteneth +enlightening +enlightens +enlisted +enmities +enmity +enough +enounce +enquire +enquired +enquirers +enquiries +enquiring +enquiringly +enquiry +enricher +ensample +enslaved +ensnared +ensnaring +ensues +ensuing +entangle +entangled +entangling +enter +entered +enteredst +entering +enters +enthralled +enticed +enticements +enticing +entire +entirely +entireness +entitled +entrails +entrance +entreat +entreated +entreaties +entrust +entrusted +entwine +enumeration +envenomed +envious +environeth +environing +envy +envying +epaphroditus +epicurus +episcopal +epistles +equably +equal +equalled +equally +equals +equinoxes +equipment +equity +equivalent +ere +ergo +err +erred +error +errors +erst +esau +escape +escaped +especially +espoused +essay +essayed +essence +establish +established +estate +esteem +esteemed +esteeming +estimate +estimated +estimation +estranged +etc +eternal +eternally +eternity +etext +etext00 +etext01 +etext02 +etext90 +etext99 +etexts +eunuchs +euodius +evangelists +evaporates +eve +even +evened +evening +evenly +events +ever +everfixed +everlasting +everlastingly +evermore +every +everything +everywhere +evidence +evident +evidently +evil +evils +evincing +exact +exacted +exacting +exalted +exaltedness +examine +examined +examiner +examining +example +examples +exceeded +exceedeth +exceeding +exceedingly +excel +excelled +excellence +excellencies +excellency +excellent +excellently +excelling +excels +except +excepted +exceptions +excess +excessive +exchanged +excited +excitement +excites +exclaim +exclude +excluded +exclusion +exclusions +excursive +excuse +excused +excuses +execrable +execrate +execute +exercise +exercised +exhalation +exhausted +exhibit +exhibited +exhort +exhortation +exhortations +exhorted +exhorting +exigency +exiled +exist +existence +existeth +existing +exists +exodus +expansive +expect +expectation +expected +expecteth +expects +expends +expense +expenses +experience +experienced +experiments +explain +explained +explaining +explanatory +expose +exposed +expound +expounded +expounding +express +expressed +expression +expressions +exquisitely +extended +extension +extent +exterior +external +extinguish +extinguished +extol +extolled +extollers +extracted +extreme +extremely +extremest +extricate +extricated +exuberance +exuberant +exude +exult +exultation +eye +eyes +eyesight +fable +fables +fabric +fabulous +face +faced +faces +facio +factito +facts +faculties +faculty +fail +faileth +failing +failure +fain +faint +fainting +faintly +fair +fairer +fairest +fairly +fairness +faith +faithful +faithfully +faithfulness +fall +fallacies +fallen +falling +falls +false +falsehood +falsehoods +falsely +falsified +fame +familiar +familiarised +familiarly +family +famine +famished +famous +fancies +fancy +fanned +fantasies +fantastic +far +fared +farness +farther +fashion +fashioned +fast +faster +fastidiousness +fasting +fastings +fat +father +fatherless +fatherly +fathers +fatigues +fatness +fault +faultfinders +faults +faulty +faustus +favour +favoured +favourites +favours +fear +feared +feareth +fearful +fearfully +fearing +fearlessly +fears +feast +fed +fee +feed +feedest +feedeth +feeding +feeds +feel +feeling +feelings +feels +fees +feet +feigned +felicity +fell +fellow +fellows +felt +female +females +fence +fervent +fervently +fervid +festival +fetched +fettered +fetters +fever +feverishness +few +fiction +fictions +field +fields +fiercely +fiercest +fifteen +fifth +fifty +fig +fight +fighter +fighting +figurative +figuratively +figure +figured +figures +file +filename +files +fill +filled +fillest +filleth +filling +filth +filths +filthy +final +finally +find +findest +findeth +finding +finds +fine +finest +finger +fingers +finish +finished +finite +fire +fired +fires +firm +firmament +firminus +firmly +firmness +first +fish +fishes +fit +fitness +fitted +fitter +fittest +fitting +five +fix +fixed +fixedly +fixing +flagitiousness +flagitiousnesses +flagon +flame +flash +flashedst +flashes +flashing +flattering +fled +fledged +flee +fleeing +fleeting +flesh +fleshly +fleshy +flew +flies +flights +fling +floating +flock +flocks +flood +floods +flour +flourished +flow +flowed +flower +flowers +flowing +flown +flows +fluctuate +fluctuates +fluctuating +fluctuations +fluently +fluidness +flung +fluttereth +flux +fly +flying +foamed +fog +folded +folk +folks +follies +follow +followed +followers +followest +followeth +following +follows +folly +food +fool +foolish +foolishly +foolishness +fools +foot +footed +footsteps +for +forasmuch +forbade +forbadest +forbare +forbear +forbid +forbidden +force +forced +forceth +forcibly +fore +foreconceived +forefathers +forego +foregoing +forehead +foreign +foreigner +foreknowledge +forementioned +forenamed +forenoon +forenoons +forepassed +foresaw +foresee +foreshow +foreshowed +foreshower +foresignified +foresignify +forests +foretell +foretelling +forethink +forethinking +forethought +foretold +forgave +forge +forget +forgetful +forgetfulness +forgetteth +forgetting +forging +forgive +forgiven +forgivest +forgiving +forgot +forgotten +forgottest +form +formation +formed +formedst +former +formerly +formest +forming +formless +formlessness +forms +fornicating +fornication +fornications +forsake +forsaken +forsakest +forsaketh +forsaking +forsook +forsooth +forth +forthcoming +forthwith +fortunate +fortunes +forum +forward +forwards +foster +fostering +fought +foul +foully +foulness +fouls +found +foundation +foundations +founded +fountain +four +fourth +fourthly +fowl +fowls +fragment +fragments +fragrance +fragrant +frailness +frame +framed +framers +frantic +fraud +fraught +freaks +free +freed +freedom +freely +freeman +frenzied +frenzies +frenzy +frequent +frequently +fresh +freshness +fretted +friend +friends +friendship +frightful +fro +from +front +frozen +fruit +fruitful +fruitfully +fruitfulness +fruitless +fruitlessly +fruits +ftp +fuel +fugitives +fulfil +fulfilled +fulfils +full +fuller +fully +fulness +fumed +fumes +functions +fund +funding +funeral +furious +furnace +furnish +furnished +furnishing +further +furtherance +furthermore +fury +future +gain +gained +gainful +gaining +gains +gainsay +gainsayer +gainsayers +gainst +galatians +gales +gall +gallantry +game +games +garb +garden +gardens +garland +garlands +garment +garner +gasped +gate +gates +gather +gathered +gatheredst +gatherest +gathering +gathers +gave +gavest +gay +gaze +gazers +gazing +general +generally +generate +generation +generations +genesis +genius +gentiles +gentle +gentleness +gently +genuinely +geometry +gervasius +gestures +get +getting +ghastly +ghost +ghosts +giant +gift +gifted +gifts +gilded +girded +girl +girls +give +given +giver +givers +gives +givest +giveth +giving +glad +gladdened +gladdens +gladiators +gladly +gladness +gladsome +glance +glances +glass +gleam +gleameth +gleams +glide +glided +gliding +glittering +gloried +glories +glorieth +glorified +glorifies +glorify +glorious +glory +glorying +glow +glowed +gloweth +glowing +glows +glue +gnashed +gnawed +gnawing +go +goad +goaded +goading +goads +goal +god +godhead +godless +godly +gods +goes +goest +goeth +going +gold +golden +gone +good +goodliness +goodly +goodness +goods +gorgeous +gospel +got +gotten +govemed +government +governor +governors +gowned +grace +graceful +gracefulness +gracious +gradation +gradually +grammar +grammarian +grammarians +grandchildren +grant +granted +grantest +grasp +grasps +grass +grassy +gratefully +gratias +gratification +gratings +gratuitous +gratuitously +grave +gravity +great +greater +greatest +greatly +greatness +greaves +grecian +greedily +greediness +greedy +greek +greeks +green +greet +greeted +grew +grief +griefs +grieve +grieved +grieves +grievest +grieving +grievous +grievously +groan +groaned +groaneth +groaning +groanings +groans +groat +gross +grossness +ground +grounded +grounds +groves +grow +growing +grown +growth +guarded +guardian +guardianship +guess +guessed +guidance +guidances +guide +guidest +guilt +guiltless +guilty +gulf +gushed +gutenberg +gutindex +habit +habitation +habits +had +hadst +hail +hair +hairs +hale +haled +half +hallow +hallowed +hallowing +halved +hand +handkerchief +handle +handled +handling +handmaid +hands +handwriting +hang +hanging +hap +haphazard +hapless +haply +happen +happened +happeneth +happens +happier +happily +happiness +happy +harass +harbour +harbouring +hard +harder +hardheartedness +hardship +hare +hark +harlotries +harm +harmed +harmless +harmonious +harmoniously +harmonise +harmoniseth +harmonising +harmonized +harmonizing +harmony +harsh +hart +harts +harvest +has +hast +haste +hasten +hastened +hastening +hasting +hatchet +hate +hated +hateful +hath +hatred +haughtiness +haunt +have +having +hay +he +head +header +headlong +heads +heal +healed +healedst +healeth +healing +health +healthful +healthfully +healthy +heaped +heaps +hear +heard +heardest +hearer +hearers +hearest +heareth +hearing +hearken +hears +hearsay +heart +hearted +heartedness +hearts +heat +heated +heathen +heaven +heavenly +heavens +heavier +heavily +heavy +hebrew +hedged +heed +heeded +height +heightening +heights +heinous +held +heldest +hell +hellish +helmet +help +helped +helper +helpful +helpidius +helping +hence +henceforth +her +herb +herbs +here +hereafter +hereat +hereby +hereditary +herein +hereof +hereon +heresies +heresy +heretics +heretofore +hereunto +hereupon +hers +herself +hesitate +hesitated +hesitating +hesitation +hid +hidden +hiddest +hide +hideous +hidest +hierius +high +higher +highest +highly +highness +hills +him +himself +hinder +hindered +hindereth +hindrance +hint +hippocrates +his +history +hither +hitherto +hoar +hogs +hogshed +hold +holden +holdest +holding +holds +holies +holily +holiness +holy +home +homer +honest +honestly +honesty +honey +honied +honor +honour +honourable +honoured +honouring +honours +hook +hooks +hope +hoped +hopeful +hopes +hoping +horns +horrible +horror +horse +horses +hortensius +host +hosts +hot +hotly +hour +hours +house +household +houseless +houses +hovered +how +however +howsoever +html +http +huge +hugging +human +humane +humanity +humans +humble +humbled +humbledst +humility +hundred +hundreds +hung +hunger +hungered +hungering +hungry +hunting +hurried +hurriedly +hurrying +hurt +hurtful +hurting +husband +husbands +hushed +husks +hymn +hymns +hypertext +i +ibiblio +ice +idaho +ideas +identification +identify +idle +idleness +idly +idol +idols +if +ignoble +ignorance +ignorant +ii +iii +ill +ills +illuminate +illuminating +illumined +illusion +image +images +imaginary +imagination +imaginations +imagine +imagined +imagining +imbibe +imbibed +imbue +imitate +imitated +imitating +imitation +immediately +immense +immersed +immoderate +immortal +immortality +immortally +immovably +immutable +impair +impaired +impart +imparted +imparts +impatience +impatient +impatiently +imperfect +imperfection +imperfections +imperishable +imperturbable +impiety +impious +implanted +implanting +implied +imply +important +importunity +imposed +impostors +impostumes +impotent +impregnable +impress +impressed +impressing +impression +impressions +imprinted +improperly +impudently +impulses +impunity +impure +impurity +impute +in +inaccessible +inaccurate +inactive +inanimate +inappropriately +inasmuch +incarnation +incense +incensed +inchoate +incidental +inclination +incline +inclined +included +including +incommutable +incomparably +incomplete +incomprehensible +incongruously +incorporeal +incorrect +incorruptible +incorruptibly +incorruption +increase +increased +increasing +incredible +incredibly +incumbrances +incurable +incurred +indebted +indeed +indefinitely +indemnify +indemnity +indentures +indexes +indiana +indicate +indicated +indicating +indications +indigent +indigested +indignant +indirect +indirectly +indite +indited +indued +indulgent +inebriate +inebriated +inebriation +inevitable +inevitably +inexperienced +inexpressible +infancy +infant +infantine +infants +infected +infection +infer +inferior +infidelity +infidels +infinite +infinitely +infinitude +infirmities +infirmity +inflame +inflamed +inflammation +inflection +inflicted +influence +influenced +influences +information +informed +informing +infringement +infuse +infused +ingrated +inhabitant +inhabitants +inhabited +inharmonious +inheritance +iniquities +iniquity +initiated +initiating +initiation +initiatory +injurable +injure +injured +injures +injurious +injury +injustice +inmost +innate +inner +innocence +innocency +innocent +innumerable +innumerably +inordinate +insatiable +insatiate +insensibly +inseparable +inserted +insight +insolently +insomuch +inspect +inspecting +inspiration +inspire +inspired +inspirest +inspiring +instability +instance +instances +instant +instantly +instead +instillest +instinct +instinctive +instituted +institution +instruct +instructed +instructest +instruction +instructor +insult +insultingly +intellectual +intelligence +intelligences +intelligent +intelligible +intemperance +intend +intended +intense +intensely +intenseness +intensest +intent +intention +intently +intercede +intercedeth +intercepting +intercession +intercourse +interest +interested +interior +intermission +intermit +intermitted +intermitting +internal +international +interpose +interposed +interposing +interpret +interpretation +interpreted +interpreter +interpreting +interrupt +interrupted +interruption +interval +intervals +intimacy +intimate +intimated +intimately +into +intolerable +intoxicated +intricate +introduced +intrude +inured +inveigler +invest +invests +invisible +invite +invited +inviting +involved +inward +inwardly +iowa +iron +irons +irrational +irresoluteness +irrevocable +irritate +is +isaac +isaiah +israel +issue +issued +it +italian +italy +itch +itching +items +its +itself +jacob +jarring +jealous +jealousy +jeer +jeering +jerusalem +jest +jests +jesus +jew +jews +join +joined +joineth +joining +joint +jointly +joking +jordan +joseph +journey +journeyed +jove +joy +joyed +joyful +joyfulness +joying +joyous +joyously +joyousness +joys +judge +judged +judgements +judges +judgest +judgeth +judging +judgment +judgments +julian +juncture +june +juno +jupiter +just +justice +justification +justifieth +justify +justina +justly +keen +keep +keeper +keepest +keeping +keeps +ken +kentucky +kept +kicking +kill +killed +killest +killeth +kind +kindle +kindled +kindly +kindness +kindred +kinds +king +kingdom +kingdoms +kings +knee +knees +knew +knewest +knit +knitting +knock +knocked +knocketh +knocking +knocks +knots +knottiness +knotty +know +knowest +knoweth +knowing +knowingly +knowledge +known +knows +labour +laboured +labourers +labours +lack +lacketh +lacking +laden +laid +lament +lamentable +lamented +lancet +land +lands +language +languages +languishing +lanthorn +lap +large +largely +largeness +larger +lashed +lashes +lashest +last +lastly +late +later +lathe +latin +latins +latinum +latter +lattice +laugh +laughed +laughter +launched +law +lawful +lawfully +lawless +laws +lawyer +lawyers +laxly +lay +layeth +laying +lays +lead +leaden +leadeth +leading +leads +leaning +leaps +learn +learned +learner +learning +learnt +leasing +least +leave +leaven +leaves +leaveth +leaving +lecture +lectured +led +left +legal +legally +leisure +lends +length +lengthened +lentiles +less +lessen +lesser +lesson +lessons +lest +let +lethargy +letter +letters +lettest +lewd +liability +liar +libanus +liberal +liberality +liberty +licence +license +licensed +licenses +lick +lie +lied +lies +lieth +life +lift +lifted +liftedst +lifter +liftest +lifts +light +lighted +lighten +lightened +lighteth +lightly +lights +lightsome +like +liked +likedst +likely +likeness +likenesses +liker +likes +likest +likewise +lilies +limbs +limed +limitation +limited +limits +line +lineage +lineaments +lined +lines +linger +lingered +lingering +links +lion +lip +lips +list +listened +listening +listing +lists +literally +literary +literature +litigation +little +littles +live +lived +livelihood +lively +lives +livest +liveth +living +lizard +lo +load +loads +loathed +loathing +loathsome +locking +locusts +lodging +lofty +logic +login +long +longed +longer +longing +longings +longs +look +looked +looker +looketh +looking +looks +loose +loosed +loosen +loosest +loquacity +lord +lords +lose +loses +loseth +losing +loss +lost +lot +loth +lottery +loud +loudly +louisiana +love +loved +loveliness +lovely +lover +lovers +loves +lovest +loveth +loving +lovingly +low +lower +lowering +lowest +lowlily +lowliness +lowly +lucid +lucre +ludicrous +lulled +luminaries +lump +lungs +lure +lures +lust +lusted +lusteth +lustful +lustfulness +lusting +lusts +luxuriousness +luxury +lying +macedonia +machine +mad +madaura +made +madest +madly +madness +magical +magistrates +magnified +magnify +magnitudes +maid +maiden +maidens +mail +maimed +main +mainly +maintain +maintained +maintainers +maintaining +majesty +make +maker +makers +makes +makest +maketh +making +male +malice +malicious +maliciously +malignant +mammon +man +manage +manfully +mangled +manhood +manichaean +manichaeus +manichee +manichees +manifest +manifestation +manifested +manifestly +manifold +manifoldly +manifoldness +mankind +manna +manner +manners +manors +mansion +mantles +manufactures +many +mariners +mark +marked +market +marketplace +marking +marks +marriage +marriageable +married +marrow +marry +marrying +mars +marts +martyr +martyrs +marvel +marvelled +mary +masculine +mass +massachusetts +masses +master +mastered +masters +mastery +material +materials +mathematicians +matrons +matter +matters +maturing +may +mayest +mazes +me +mean +meanest +meaning +meanings +meanly +means +meant +meantime +meanwhile +measurable +measure +measured +measures +measuring +meat +meats +meddle +meddling +medea +mediator +medicine +medicines +medicining +meditate +meditated +meditating +meditations +medium +meek +meekness +meet +meeting +meets +melodies +melodious +melody +melt +melted +member +members +memory +men +mentally +mention +mentioned +mentioning +merchantability +mercies +merciful +mercifully +mercy +mere +merely +merged +merits +merrily +merry +message +messages +messengers +met +method +metre +metres +mget +michael +mid +middle +midnight +might +mightest +mightier +mightily +mightiness +mighty +milan +milanese +milder +mildly +milk +milky +millennium +million +mimic +mind +minded +mindful +minds +mine +minerva +mingle +mingled +mingling +minister +ministers +ministry +minute +minutest +miracles +mire +mirth +mirthful +mischief +misdeeds +miserable +miserably +miseries +misery +mislike +misliked +miss +missed +missing +mist +mistaken +mistress +mistresses +mists +mixture +moan +mock +mocked +mockeries +mockers +mockery +mocking +mode +models +moderate +moderation +modes +modestly +modesty +modification +modify +modulation +moist +molest +molten +moment +momentary +momentous +moments +monad +monasteries +monastery +money +monk +monnica +monster +monstrous +monstrousness +montana +month +months +monument +moon +moral +more +moreover +morning +morrow +morsel +mortal +mortality +mortals +mortified +moses +most +mostly +mother +motherly +mothers +motion +motions +motive +mould +moulded +mount +mountain +mountains +mounting +mourn +mourned +mourners +mournful +mourning +mouth +mouthed +mouths +move +moved +moveth +moving +much +muddy +mule +multiple +multiplicity +multiplied +multipliedst +multiply +multiplying +multitude +multitudes +munday +murder +murdered +murdering +murmur +murmured +museth +music +musical +musing +must +mutability +mutable +mute +muttering +mutual +mutually +my +myself +mysteries +mysterious +mysteriously +mystery +mystic +mystically +nails +naked +name +named +namely +names +narrow +narrower +narrowly +narrowness +nation +nations +native +nativity +natural +naturally +nature +natures +nay +near +nearer +neatly +neatness +nebridius +necessaries +necessarily +necessary +necessities +necessity +neck +need +needed +needeth +needful +needing +needs +needy +neglect +neglected +neglecteth +neglecting +negligence +negligent +neighbour +neighbouring +neighbours +neither +neptune +nest +nests +net +nets +nevada +never +nevertheless +new +newsletter +newsletters +next +nigh +night +nights +nill +nilled +nimble +nine +nineteenth +ninety +ninth +no +noah +nobility +noble +nod +noise +nominally +none +noon +nor +north +nostrils +not +note +noted +notes +nothing +notice +notices +notion +notions +notorious +notwithstanding +nought +nourish +nourished +nourishing +nourishment +nourishments +novelty +novice +now +nowhere +null +number +numbered +numberest +numbering +numberless +numbers +numerous +nurse +nursery +nurses +nuts +obedience +obedient +obediently +obey +obeyed +obeying +obeys +object +objected +objections +objects +oblation +obscure +obscurely +observance +observation +observe +observed +observes +observeth +observing +obstinacy +obtain +obtained +obtaining +obtains +obviously +occasion +occasioned +occupy +occupying +occur +occurred +occurs +ocean +odour +odours +of +off +offence +offences +offend +offended +offensive +offer +offered +offerings +office +officer +officers +offices +official +offspring +oft +often +oftentimes +ofthe +ofttimes +oh +oil +ointments +oklahoma +old +omened +omit +omitted +omnipotency +omnipotent +omnium +on +once +one +ones +onesiphorus +only +open +opened +openest +openeth +opening +openly +opens +operations +opinion +opinionative +opinions +opportunity +oppose +opposed +opposing +oppressed +oppresseth +oppression +or +oracle +oracles +orally +orations +orator +oratory +orbs +ordained +ordainer +order +ordered +orderer +orderest +ordering +ordinance +ordinarily +ordinary +orestes +org +organization +organs +origin +original +ornamentedst +ornamenting +ostentation +ostia +other +others +otherwhere +otherwhiles +otherwise +ought +oughtest +our +ours +ourself +ourselves +out +outer +outrages +outset +outward +outwardly +over +overboldness +overcame +overcast +overcharged +overclouded +overcome +overcoming +overflow +overflowed +overflowing +overhastily +overjoyed +overpass +overpast +overspread +overspreading +overtake +overthrew +overthrow +overturned +overwhelmed +owe +owed +owes +owing +own +owns +oxford +page +pages +paid +pain +painful +pains +pair +pairs +palace +palaces +palate +pale +palm +pamperedness +pander +panegyric +pangs +pant +panted +panting +paper +par +paraclete +paradise +parched +pardoned +pared +parent +parental +parents +parity +parley +part +partake +partaker +partaketh +parted +participation +particle +particles +particular +parties +parting +partly +partners +parts +party +pass +passage +passages +passed +passengers +passes +passeth +passible +passing +passion +passionately +passions +password +past +pastime +pastimes +patched +path +paths +patience +patiently +patricius +pattern +patterns +paul +paulus +pause +pauses +pay +payable +payest +paying +payments +peace +peaceful +peacefully +peacemaker +pear +pearl +pears +peculiar +peculiarly +pen +penal +penally +penalties +penalty +pence +penetrating +penitent +people +per +peradventure +perceivable +perceive +perceived +perceivedst +perceives +perceiveth +perceiving +perchance +perdition +perfect +perfected +perfecting +perfection +perfectly +performed +performing +perhaps +peril +perilous +perils +period +periodic +periods +perish +perishable +perished +perisheth +permission +permit +permitted +pernicious +perpetual +perplexed +perplexities +persecuted +persecutes +persecuting +persevering +person +personages +personally +personated +persons +perspicuous +persuade +persuaded +persuasions +persuasive +pertain +pertained +pertaining +perturbations +perused +perverse +perverseness +perversion +perversity +pervert +perverted +pervertedly +perverting +pervious +pestilent +petitions +petty +petulantly +pg +phantasm +phantasms +phantom +phantoms +philippians +philosophers +philosophy +photinus +phrase +phrases +physic +physical +physician +physicians +picture +pictures +piece +piecemeal +pieces +pierce +pierced +piercing +piety +pile +piled +pilgrim +pilgrimage +pilgrims +pinching +pines +pious +piously +pit +pitch +pitiable +pitied +pitiest +pitiful +pity +pitying +place +placed +placedst +places +placest +placing +plague +plain +plainer +plainly +plainness +plains +plan +planets +plans +plant +plants +platonists +plausibility +play +playing +plays +plea +plead +pleasant +pleasanter +pleasantly +pleasantness +please +pleased +pleasest +pleasing +pleasurable +pleasure +pleasureableness +pleasures +plenary +plenteous +plenteousness +plentiful +plentifully +plenty +pliant +plot +plots +plotting +pluck +plucked +pluckest +plucking +plunged +plunging +plural +pmb +poems +poesy +poet +poetic +poets +point +pointed +points +poise +poison +pole +polished +polluted +pollution +pontitianus +poor +popular +popularity +population +portion +portions +position +possess +possessed +possesses +possessest +possesseth +possession +possessor +possibility +possible +posted +potent +potter +pour +poured +pourest +poverty +power +powerful +powers +practice +practise +practised +praetorian +prairienet +praise +praised +praises +praiseth +prated +praters +prating +pray +prayed +prayer +prayers +praying +preach +preached +preacher +preachers +preaching +preachings +precede +preceded +precedes +precedest +precedeth +precepts +precious +precipice +precipitated +precisely +predestinated +predestination +predicament +predicaments +predicated +predict +predicted +preeminence +preeminent +prefect +prefer +preferable +preference +preferred +preferring +prejudice +prelate +preliminary +prepare +prepared +preparedst +prepares +preparest +preparing +prerogative +presbyters +prescribed +prescribes +prescripts +presence +present +presented +presently +presents +preserve +preserved +preserving +presidentship +presides +presidest +presideth +presiding +press +pressed +pressedst +presseth +pressure +presume +presumed +presuming +presumption +pretend +prevail +prevailed +prevailing +prevails +prevented +preventedst +preventing +previous +prey +price +prices +pricked +pricks +pride +priest +primary +primitive +prince +princes +principalities +principally +principles +print +prior +prison +prisoner +privacy +private +privately +privation +privily +prize +prizes +probable +problem +proceed +proceeded +proceedeth +proceeding +processing +processors +proclaim +proclaiming +proconsul +proconsular +procure +procured +procuredst +prodigality +produce +produced +production +products +prof +profane +profess +professed +professing +profession +professor +professorship +proffer +proffering +proficiency +profit +profitable +profited +profits +profligate +profound +profounder +profoundly +program +progress +prohibition +project +projected +prolix +prolonged +promise +promised +promises +promiseth +promising +promo +pronounce +pronounced +pronounces +pronouncing +pronunciation +proof +proofread +prop +proper +properly +property +prophecy +prophet +prophets +proportion +proportions +proposed +propound +propoundest +proprietary +prose +prosper +prosperities +prosperity +protasius +protect +protection +protest +protesting +protracted +protraction +proud +prouder +proudly +prove +proved +provest +proveth +provide +provided +providedst +providence +province +provincial +provision +provisions +provoke +prudent +prunes +pryers +psalm +psalmody +psalms +psalter +psaltery +pub +public +publication +publicly +puffed +pulse +punctuation +punish +punishable +punished +punishment +punishments +punitive +pupils +puppies +purchase +purchased +purchasing +pure +purely +purer +purest +purged +purified +purity +purpose +purposed +purposes +purposing +pursue +pursued +pursues +pursuing +pursuits +pusey +put +putrefied +putting +pylades +qualified +qualities +quarrel +quarrels +quarter +queen +quench +quest +question +questioned +questioning +questionings +questions +quick +quicken +quickened +quickenest +quicker +quickly +quickness +quiet +quieter +quit +quite +quitting +quoth +race +races +racked +racks +rage +raged +raging +rais +raise +raised +raisedst +raises +raisest +raising +ran +random +range +ranged +rank +ranked +ransom +rapture +rare +rash +rashly +rashness +rates +rather +rational +raven +ravish +reach +reached +reacheth +reaching +read +readable +reader +readers +readest +readier +readily +readiness +reading +reads +ready +real +realised +realisest +realities +reality +really +reap +reason +reasonable +reasoning +reasonings +reasons +reawakened +rebel +rebelled +rebellious +rebuke +rebuked +recall +recalled +recallest +recalling +recalls +receive +received +receives +receivest +receiveth +receiving +recent +recently +receptacle +recess +recesses +recite +recited +reckon +reckoned +reckoning +reckons +reclaim +reclaiming +recognise +recognised +recognises +recognising +recollect +recollected +recollecting +recollection +recommend +recommended +recommending +reconcile +reconciled +reconcilement +reconciliation +recondite +record +recorded +recount +recounts +recourse +recover +recovered +recoveredst +recovering +recovery +recruiting +rectify +recur +recurring +redeem +redeemed +redeemer +redemption +redistributing +redoubling +refer +reference +references +referred +reflect +reform +reformed +refrain +refrained +refraining +refresh +refreshed +refreshing +refreshment +refuge +refund +refuse +refused +refusing +refute +regard +regarded +regardest +regarding +regardless +regenerated +regeneratedst +regeneration +region +regions +regular +regulate +rehearse +reigning +reigns +rein +reins +reinvolved +reject +rejected +rejection +rejects +rejoice +rejoiced +rejoices +rejoicest +rejoiceth +rejoicing +relapse +relapseth +relate +related +relater +relating +relation +relations +relationship +relative +relators +relaxation +relaxedly +relaxing +release +released +relics +relied +relief +relieve +religion +religious +religiously +remain +remainder +remained +remainest +remaineth +remaining +remains +remarkable +remedies +remember +remembered +remembereth +remembering +remembers +remembrance +remembrances +reminded +remindeth +remission +remitted +remittest +remnants +remorse +removal +remove +removed +rend +render +renderest +renew +renewed +reneweth +renewing +renounce +renowned +rent +repair +repay +repeat +repeated +repeating +repel +repelled +repent +repentance +repentest +replace +replacement +replacing +replenish +replenished +replenishing +replied +replies +reply +report +reported +reporters +reports +repose +reposed +reposes +reposeth +reposing +represent +repress +reproach +reproachful +reproof +reproved +reproves +reptiles +reputation +repute +reputed +request +require +required +requirements +requires +requiring +requital +requited +requitest +rescue +rescued +rescuing +resemble +resembling +resend +resent +reserved +reside +residest +resigned +resist +resistance +resisted +resistedst +resistest +resisteth +resisting +resolute +resolutely +resolution +resolved +respect +respected +respective +respects +respite +rest +rested +restest +resting +restless +restlessly +restlessness +restoration +restore +restored +restoring +restrain +restrained +restrainest +restraining +restrains +restraint +restricted +result +resulting +results +resumed +resumes +resurrection +retain +retained +retaineth +retard +retire +retired +retiring +retreat +return +returned +returning +returns +reveal +revealed +revealedst +revealing +revelation +revelations +revenge +revenged +revenges +revenue +reverence +reverential +reverently +review +reviewing +reviled +revised +revive +revolt +revolting +revolved +revolving +reward +rewards +rhetoric +rich +richer +riches +riddle +ridiculous +right +righteous +righteousness +rightful +rightly +rights +rigidly +rigorous +rioting +riotous +ripened +riper +rise +risen +riseth +rising +risk +rites +rivers +riveted +roared +roarest +rob +robber +robbery +robert +robing +rocks +rods +roll +rolled +rolling +roman +romanianus +rome +rood +room +root +rose +rottenness +rough +round +rounds +rouse +roused +rove +roving +rovings +royalties +royalty +rude +rudely +rudiments +rugged +ruggedness +ruinous +rule +ruled +ruler +rules +rulest +ruleth +ruminate +ruminating +run +running +runs +rush +rushing +s +sabbath +sacrament +sacraments +sacrifice +sacrificed +sacrifices +sacrificing +sacrilegious +sad +saddeneth +sadness +safe +safer +safety +said +saidst +sail +sailors +sails +saint +saints +saith +sake +sakes +salary +sale +salt +salted +salvation +same +sanctification +sanctified +sanctity +sanctuary +sand +sang +sangest +sank +sat +sate +sated +satiate +satiated +satiety +satisfaction +satisfactorily +satisfied +satisfy +satisfying +saturn +saul +savage +savageness +save +saved +saving +saviour +savour +savoured +savoury +saw +sawest +say +sayest +saying +sayings +says +scanning +scantling +scarce +scarcely +scatter +scattered +scatteredst +scenical +sceptre +schedule +scholar +scholars +school +schools +science +sciences +scoffed +scoffing +scorn +scorned +scornful +scornfully +scourge +scourged +scourgedst +scourges +scraped +scratch +scratching +scripture +scriptures +scroll +scruple +sea +seal +sealed +search +searched +searcher +searches +searching +seas +season +seasonably +seasoned +seasoneth +seasons +seat +seated +seats +second +secondary +secrecies +secret +secretly +secrets +sect +section +secular +secure +securely +seduce +seduced +seducers +seducing +seduction +seductions +seductive +see +seed +seeing +seek +seekest +seeketh +seeking +seeks +seem +seemed +seemeth +seemly +seems +seen +sees +seest +seeth +seize +seized +seizes +seldomness +selected +self +sell +sellers +selling +selves +semblance +senator +senators +send +sending +seneca +sensation +sensations +sense +senseless +senses +sensible +sensibly +sensitive +sent +sentence +sentences +sentest +sentiment +separate +separated +separateth +separating +seraphim +serene +serenity +sermons +serpent +serpents +servant +servants +serve +served +serves +service +serviceable +services +serving +servitude +session +set +sets +settest +setting +settle +settled +settling +seven +seventh +sever +several +severally +severe +severed +severely +severer +severing +severity +sex +shade +shadow +shadowed +shadows +shadowy +shady +shaggy +shake +shaken +shakes +shall +shalt +shame +shameful +shamefulness +shameless +shamelessness +shape +shapen +shapes +share +shared +sharers +shares +sharp +sharpen +sharper +sharply +sharpness +sharpsighted +shatter +shattered +she +shed +sheep +shelter +shepherd +shield +shifted +shifting +shine +shines +shinest +shineth +shining +ship +ships +shipwreck +shod +shoe +shoes +shone +shonest +shook +shoot +shop +shops +shore +short +shortened +shorter +shortly +should +shoulder +shoulders +shouldest +shouted +shoutedst +show +showed +showedst +shower +showeth +showing +shown +shows +shrink +shrinking +shrunk +shudder +shunning +shuns +shut +sick +sickly +sickness +sicknesses +side +sides +siege +sigh +sighed +sigheth +sighing +sighs +sight +sights +sign +significations +signified +signifies +signify +signs +silence +silenced +silent +silently +silly +silver +silversmiths +similitude +simple +simplicianus +simplicity +simply +sin +since +sincerely +sinful +sing +singeth +singing +single +singly +sings +singsong +singular +singularly +sink +sinking +sinks +sinned +sinner +sinners +sins +sipped +sips +sit +sites +sits +sittest +sitteth +sitting +six +sixteenth +sixth +size +skies +skilful +skill +skilled +skin +skins +skirmishes +skirts +sky +slackened +slackness +slain +slave +slavery +slaves +slavish +slay +slaying +sleep +sleeper +sleepest +sleeping +slept +slew +slight +slighting +slightly +slipped +slippery +sloth +slothful +slow +slower +slowly +sluggish +slumber +slumbers +small +smaller +smallest +smarting +smell +smelleth +smelling +smells +smile +smiled +smiling +smiting +smoke +smooth +smoothed +smoothing +snare +snares +snow +so +soaring +sober +soberly +sobriety +socalled +society +sodom +soever +soft +softened +softening +softly +software +soil +solaces +sold +soldier +sole +solecism +solemn +solemnise +solemnities +solemnity +solicited +solicits +solid +solidity +solitude +solomon +solstices +solve +solving +some +someone +something +sometime +sometimes +somewhat +somewhere +son +song +songs +sons +soon +sooner +soothed +soothes +sore +sorely +sores +sorrow +sorrowed +sorrowful +sorrowfulness +sorrows +sorry +sort +sorts +sought +soughtest +soul +souls +sound +sounded +soundedst +sounder +soundeth +sounding +soundly +soundness +sounds +sour +source +sources +south +sovereign +sovereignly +sowing +space +spaces +spacious +spake +spare +sparedst +sparks +sparrow +sparrows +speak +speakers +speakest +speaketh +speaking +speaks +special +species +specimens +spectacle +spectacles +spectator +spectators +speech +speeches +speechless +speed +speedily +spend +spent +spices +spider +spirit +spirits +spiritual +spiritually +spoil +spoke +spoken +spokest +sponge +sport +sportively +sports +spot +spots +spouts +sprang +spread +spreadest +spreading +spreads +spring +springeth +springs +sprung +spurn +stable +stablished +staff +stage +stages +staggered +stand +standest +standeth +standing +stands +stank +stanza +stanzas +star +starry +stars +start +starting +startled +startles +state +stated +stateliness +statement +states +station +statue +stature +status +stay +stayed +stays +stead +steadfast +steal +stealing +steals +stealth +steep +steeping +steer +steered +step +steps +stick +sticking +stiff +stiffly +stiffneckedness +stiffness +still +stilled +stimulus +stipend +stir +stirred +stirrest +stirring +stole +stolen +stolidity +stomach +stomachs +stone +stones +stood +stoop +stooping +stop +stopped +store +stored +stores +stories +storing +storm +stormed +stormy +story +stowed +straightening +strained +strait +straitly +straitness +strange +strangely +stranger +strangers +strayed +straying +stream +streaming +streams +streets +strength +strengthen +strengthened +strengthenedst +strengthenest +strengtheneth +strengthless +stretch +stretched +stretching +stricken +strict +strictness +strife +strifes +strike +strikes +striking +strings +stripes +stripped +strive +strives +striving +stroke +strong +strongholds +strongly +struck +structure +struggle +struggled +struggles +struggling +stuck +student +students +studied +studies +studious +studiously +study +studying +stuff +stumble +stumbled +stumbling +stung +stupidity +style +styled +subdu +subdued +subduedst +subduing +subject +subjected +subjection +subjects +subjoined +subjoinedst +subjoins +sublime +sublimely +sublimer +sublimities +sublimity +submit +submitted +submitting +subordinate +subsequently +subsist +subsists +substance +substances +substantial +subtile +subtilty +subtle +subversion +subverted +subverters +subvertings +succeed +succeeded +succeeding +succession +successive +successively +succour +succouredst +such +suck +sucking +sucklings +sudden +suddenly +sue +suffer +suffered +sufferedst +sufferest +suffering +suffers +suffice +sufficed +sufficest +sufficeth +sufficient +sufficiently +suffocated +suffrages +suggest +suggested +suggestion +suggestions +suggests +suitable +suitably +summer +summing +summit +sumptuously +sun +sunder +sung +sunk +supercelestial +supereminence +supereminent +superfluously +superior +superstition +superstitious +suppliant +supplied +supplies +support +supported +supporting +suppose +supposed +supposing +suppress +suppressed +supreme +supremely +sure +surely +surf +surface +surfeiting +surmount +surmounted +surpassed +surpasses +surpassest +surpassingly +surprises +surrounded +surveyed +suspect +suspected +suspense +suspicions +suspicious +sustenance +swallowed +swaying +sweat +sweet +sweeten +sweetened +sweeter +sweetly +sweetlyvain +sweetness +sweetnesses +swelled +swelling +swept +swerving +swift +swiftness +swine +swollen +swoon +sword +syllable +syllables +symmachus +sympathy +syrian +tabernacle +table +take +taken +takes +taketh +taking +tale +talent +talented +talents +tales +talk +talked +talkers +talketh +talking +tame +tamed +tamedst +tamer +taming +tardy +task +taste +tasted +tastes +tasteth +tasting +tattlings +taught +taughtest +taunt +taunted +tax +taxes +tcosa10 +tcosa10a +tcosa11 +teach +teacher +teachers +teaches +teachest +teacheth +teaching +teachings +tear +tearful +tears +tediousness +teeming +teeth +tell +tellest +telleth +telling +tells +temper +temperament +temperance +tempered +tempers +tempestuously +temple +temples +temporal +temporary +temporately +tempt +temptation +temptations +tempted +tempting +tempts +ten +tend +tender +tenderly +tenderness +tendernesses +tending +tends +tenet +tenets +tenor +terence +termed +terms +terrestrial +terrible +terribly +terrors +testament +testified +testimonies +testimony +texas +text +texts +thagaste +than +thank +thankful +thanks +thanksgiving +thanksgivings +that +the +theatre +theatres +theatrical +thee +theft +thefts +their +theirs +them +themselves +then +thence +thenceforth +there +thereby +therefore +therefrom +therein +thereof +thereon +thereto +thereupon +therewith +these +thessalonica +they +thick +thickeneth +thickets +thief +thieve +thin +thine +thing +things +think +thinkest +thinketh +thinking +thinks +third +thirdly +thirst +thirsted +thirsteth +thirsts +thirtieth +this +thither +thorns +thoroughly +those +thou +though +thought +thoughts +thousand +thraldom +thread +threatenest +threatens +threats +three +threefold +thrice +thriven +throat +throne +thrones +throng +throngs +through +throughout +thrown +thrust +thrustedst +thunder +thundered +thunderer +thunderest +thundering +thus +thwart +thy +thyself +tibi +tickled +tide +tides +tie +tilde +till +time +times +tip +tire +tired +title +titles +tm +to +tobias +together +toil +toiled +toiling +toilsome +token +told +tolerated +tolerating +toment +tomenting +tomorrow +tone +tones +tongue +tongues +too +took +tookest +top +tore +torment +tormented +torments +torn +torpor +torrent +torture +toss +tossed +tosses +total +touch +touched +touchedst +touching +toward +towardliness +towards +tower +town +townsman +toys +trace +traced +tracedst +traces +track +trade +trademark +tradition +tragical +trailed +trample +trampled +tranquil +tranquillity +transcribe +transcription +transferred +transferring +transformed +transforming +transgressing +transgression +transgressions +transgressors +transition +transitory +translated +transmitted +transparent +transported +travail +travailed +travailing +travails +traveller +treacherous +treachery +tread +treasure +treasured +treasures +treasury +treat +treble +tree +trees +tremble +trembled +trembling +trial +trials +tribulation +tribute +tried +triers +trifles +trifling +trillion +trine +trinity +triple +triumph +triumphed +triumpheth +trod +trojan +troop +troops +trouble +troubled +troubles +troublesome +troy +true +truer +truly +trust +trustees +trusting +truth +truths +try +trying +tully +tumbling +tumult +tumults +tumultuous +tumultuously +tumultuousness +tune +turbulence +turbulent +turmoiling +turmoils +turn +turned +turnest +turning +turns +tutor +tutors +twelve +twentieth +twenty +twice +twinkling +twins +twisted +two +txt +ulcerous +uman +unabiding +unable +unacquainted +unadorned +unaided +unallowed +unalterable +unanxious +unarranged +unassuming +unawares +unbecoming +unbelievers +unbelieving +unbending +unbeseemingly +unbounded +unbroken +uncase +unceasing +uncertain +uncertainties +uncertainty +unchain +unchangeable +unchangeableness +unchangeably +unchanged +unclean +uncleanness +unconscious +unconsciously +uncorrupted +uncorruptible +uncorruptness +uncultivated +undefilable +under +undergo +underline +understand +understandeth +understanding +understands +understood +undertake +undertook +underwent +undid +undistracted +undisturbed +undo +unemployed +unexpected +unexpectedly +unexplained +unfailing +unfailingly +unfair +unfeigned +unfledged +unforgotten +unformed +unfriendly +ungodlily +ungodliness +ungodly +ungoverned +unhappily +unhappiness +unhappy +unharmonising +unhealthiness +unhesitatingly +unholy +uninjurable +uninjuriousness +unintelligible +unintermitting +union +united +unity +universal +universally +universe +university +unjust +unjustly +unkindled +unkindness +unknowing +unknowingly +unknown +unlawful +unlearned +unless +unlicensed +unlike +unlikeliness +unlikeness +unliker +unlimited +unlocked +unlooked +unmarried +unmeasurable +unmeasured +unnatural +unpassable +unperceived +unpermitted +unpleasantly +unpraised +unpunished +unquiet +unravelied +unravelled +unreal +unreasoning +unresolved +unrighteous +unrulily +unruly +unsating +unsearchable +unseemly +unseen +unsettled +unshaken +unshakenly +unskilful +unskilfulness +unsought +unsound +unspeakable +unstable +unstayed +unsuitably +unsure +untainted +unteach +unteachable +unthankful +unthought +until +unto +untruly +untruth +unused +unusual +unutterable +unutterably +unveiled +unwarmed +unwearied +unwholesome +unwilling +unwonted +unworthy +unyielding +up +upborne +upbraid +upbraided +upheld +upheldest +uphold +upliftest +upon +upper +upright +uprightness +uproar +upward +upwards +urge +urged +urgedst +urgently +us +usa +usage +use +used +useful +usefully +users +uses +useth +ushered +using +usual +usually +usury +utensils +utmost +utter +utterance +uttered +uttereth +utterly +vacation +vagrant +vail +vain +vainglorious +vainly +valentinian +valiant +valley +valuable +value +valued +vanilla +vanished +vanities +vanity +vanquished +vapours +variable +variableness +variance +variation +variations +varied +varies +varieties +variety +various +variously +vary +varying +vast +vaster +vaunt +vehemence +vehement +vehemently +veil +veiled +vein +venerable +vengeance +vent +venture +ventures +venturing +venus +ver +verecundus +verily +verity +vermont +verse +verses +version +versions +very +vessel +vessels +vestige +vex +vexed +vi +vice +vices +viciousness +vicissitude +vicissitudes +victim +victor +victorinus +victorious +victory +view +viewing +vigorous +vigour +vii +viii +vile +vileness +villa +villainies +vindicating +vindicianus +vineyard +vintage +violated +violence +violent +violets +viper +virgil +virgin +virginity +virgins +virtue +virtuous +virus +visible +vision +visions +vital +vivid +vocal +vocally +voice +voices +void +volume +volumes +voluntarily +volunteers +voluptuous +voluptuousness +vomited +vouchsafe +vouchsafed +vouchsafedst +vouchsafest +vow +vowed +vowing +vows +voyage +vulgar +waft +waged +wages +wail +wait +waited +waiting +waking +walk +walked +walking +walks +wallow +wallowed +walls +wander +wandered +wanderer +wandering +wanderings +want +wanted +wanting +wanton +wantonly +wantonness +wants +war +warfare +warmth +warned +warning +warped +warranted +warranties +warranty +warreth +warring +wars +was +wash +washing +wast +waste +wasted +wasting +watch +watched +watchfully +watchings +water +watered +waterest +waters +watery +waver +wavered +wavering +waves +wavy +wax +way +wayfaring +ways +wayward +we +weak +weaken +weakened +weaker +weakest +weakly +weakness +weaknesses +weal +wealth +wealthy +weapon +wear +wearied +weariness +wearing +wearisome +weary +weaving +wedlock +weep +weeping +weeps +weigh +weighed +weigheth +weighing +weight +weights +weighty +welcome +well +weltering +went +wept +were +wert +whales +what +whatever +whatsoever +wheat +wheel +when +whence +whencesoever +whenever +where +whereas +whereat +whereby +wherefore +wherefrom +wherein +whereof +whereon +wheresoever +whereto +whereupon +wherever +wherewith +whether +which +whichsoever +while +whilst +whirling +whirlings +whirlpool +whirlpools +whispered +whisperings +whispers +whit +white +whither +whithersoever +whitherto +whitherward +who +whoever +whole +wholesome +wholesomely +wholesomeness +wholly +whom +whomever +whoring +whose +whoso +whosoever +why +wicked +wickedly +wickedness +wide +widow +widows +wife +wild +wilderness +wildness +wilfully +wilfulness +will +willed +willedst +willest +willeth +willing +willingly +wills +wilt +win +wind +winding +windings +window +winds +windus +windy +wine +wings +winked +winning +wins +wipe +wisdom +wise +wisely +wiser +wish +wished +wishes +wishing +wit +with +withal +withdraw +withdrawing +withdrawn +withdrew +wither +withered +withering +within +without +withstood +witness +witnesses +witting +wittingly +wives +wizard +woe +woes +woke +woman +womanish +womb +women +won +wonder +wondered +wonderful +wonderfully +wonderfulness +wondering +wonders +wondrous +wondrously +wont +wonted +wood +wooden +wooed +word +wordly +words +wordy +work +workest +worketh +workhouse +working +workings +workmanship +workmaster +works +world +worldly +worlds +worm +worn +worse +worship +worshipped +worshipper +worshippers +worshipping +worsted +worthless +worthy +would +wouldest +wound +wounded +woundest +wounds +wove +wrap +wrath +wrench +wrested +wretch +wretched +wretchedness +wring +wrinkle +writ +write +writer +writing +writings +written +wrong +wronged +wronging +wrote +wroth +wrought +wyoming +ye +yea +year +years +yes +yesterday +yet +yield +yielded +yieldeth +yielding +yields +yoke +you +young +younger +your +yourselves +youth +youthful +youthfulness +youths +zeal +zealous +zealously +zip diff --git a/static/blog/tos_2/browser.png b/static/blog/tos_2/browser.png new file mode 100644 index 0000000..6c4bef9 Binary files /dev/null and b/static/blog/tos_2/browser.png differ diff --git a/static/blog/tos_2/god.wasm b/static/blog/tos_2/god.wasm new file mode 100755 index 0000000..068b58d Binary files /dev/null and b/static/blog/tos_2/god.wasm differ diff --git a/static/blog/tos_2/resp.png b/static/blog/tos_2/resp.png new file mode 100644 index 0000000..d61674d Binary files /dev/null and b/static/blog/tos_2/resp.png differ diff --git a/static/blog/tos_2/wasm_exec.html b/static/blog/tos_2/wasm_exec.html new file mode 100644 index 0000000..38d5b6f --- /dev/null +++ b/static/blog/tos_2/wasm_exec.html @@ -0,0 +1,53 @@ + + + + + + + The voice of god + + + + + + +

The voice of god

+ + + + + +
+ + + diff --git a/static/blog/tos_2/wasm_exec.js b/static/blog/tos_2/wasm_exec.js new file mode 100644 index 0000000..c88c42d --- /dev/null +++ b/static/blog/tos_2/wasm_exec.js @@ -0,0 +1,425 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// +// This file has been modified for use by the TinyGo compiler. + +var term = new Terminal({ + cols: 80, + rows: 20, + disableStdin: true, +}); +term.open(document.getElementById('terminal')); + +(() => { + // Map web browser API and Node.js API to a single common API (preferring web standards over Node.js API). + const isNodeJS = typeof process !== "undefined"; + if (isNodeJS) { + global.require = require; + global.fs = require("fs"); + + const nodeCrypto = require("crypto"); + global.crypto = { + getRandomValues(b) { + nodeCrypto.randomFillSync(b); + }, + }; + + global.performance = { + now() { + const [sec, nsec] = process.hrtime(); + return sec * 1000 + nsec / 1000000; + }, + }; + + const util = require("util"); + global.TextEncoder = util.TextEncoder; + global.TextDecoder = util.TextDecoder; + } else { + if (typeof window !== "undefined") { + window.global = window; + } else if (typeof self !== "undefined") { + self.global = self; + } else { + throw new Error("cannot export Go (neither window nor self is defined)"); + } + + let outputBuf = ""; + global.fs = { + constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 }, // unused + writeSync(fd, buf) { + outputBuf += decoder.decode(buf); + const nl = outputBuf.lastIndexOf("\n"); + if (nl != -1) { + console.log(outputBuf.substr(0, nl)); + outputBuf = outputBuf.substr(nl + 1); + } + return buf.length; + }, + write(fd, buf, offset, length, position, callback) { + if (offset !== 0 || length !== buf.length || position !== null) { + throw new Error("not implemented"); + } + const n = this.writeSync(fd, buf); + callback(null, n); + }, + open(path, flags, mode, callback) { + const err = new Error("not implemented"); + err.code = "ENOSYS"; + callback(err); + }, + fsync(fd, callback) { + callback(null); + }, + }; + } + + const encoder = new TextEncoder("utf-8"); + const decoder = new TextDecoder("utf-8"); + var logLine = []; + + global.Go = class { + constructor() { + this._callbackTimeouts = new Map(); + this._nextCallbackTimeoutID = 1; + + const mem = () => { + // The buffer may change when requesting more memory. + return new DataView(this._inst.exports.memory.buffer); + } + + const setInt64 = (addr, v) => { + mem().setUint32(addr + 0, v, true); + mem().setUint32(addr + 4, Math.floor(v / 4294967296), true); + } + + const getInt64 = (addr) => { + const low = mem().getUint32(addr + 0, true); + const high = mem().getInt32(addr + 4, true); + return low + high * 4294967296; + } + + const loadValue = (addr) => { + const f = mem().getFloat64(addr, true); + if (f === 0) { + return undefined; + } + if (!isNaN(f)) { + return f; + } + + const id = mem().getUint32(addr, true); + return this._values[id]; + } + + const storeValue = (addr, v) => { + const nanHead = 0x7FF80000; + + if (typeof v === "number") { + if (isNaN(v)) { + mem().setUint32(addr + 4, nanHead, true); + mem().setUint32(addr, 0, true); + return; + } + if (v === 0) { + mem().setUint32(addr + 4, nanHead, true); + mem().setUint32(addr, 1, true); + return; + } + mem().setFloat64(addr, v, true); + return; + } + + switch (v) { + case undefined: + mem().setFloat64(addr, 0, true); + return; + case null: + mem().setUint32(addr + 4, nanHead, true); + mem().setUint32(addr, 2, true); + return; + case true: + mem().setUint32(addr + 4, nanHead, true); + mem().setUint32(addr, 3, true); + return; + case false: + mem().setUint32(addr + 4, nanHead, true); + mem().setUint32(addr, 4, true); + return; + } + + let ref = this._refs.get(v); + if (ref === undefined) { + ref = this._values.length; + this._values.push(v); + this._refs.set(v, ref); + } + let typeFlag = 0; + switch (typeof v) { + case "string": + typeFlag = 1; + break; + case "symbol": + typeFlag = 2; + break; + case "function": + typeFlag = 3; + break; + } + mem().setUint32(addr + 4, nanHead | typeFlag, true); + mem().setUint32(addr, ref, true); + } + + const loadSlice = (array, len, cap) => { + return new Uint8Array(this._inst.exports.memory.buffer, array, len); + } + + const loadSliceOfValues = (array, len, cap) => { + const a = new Array(len); + for (let i = 0; i < len; i++) { + a[i] = loadValue(array + i * 8); + } + return a; + } + + const loadString = (ptr, len) => { + return decoder.decode(new DataView(this._inst.exports.memory.buffer, ptr, len)); + } + + const timeOrigin = Date.now() - performance.now(); + this.importObject = { + env: { + io_get_stdout: function() { + return 1; + }, + + random_i32: function() { + return Math.floor(Math.random()*4294967295); + }, + + log_write: function(level, ptr, len) { + for (let i=0; i { + return timeOrigin + performance.now(); + }, + + // func sleepTicks(timeout float64) + "runtime.sleepTicks": (timeout) => { + // Do not sleep, only reactivate scheduler after the given timeout. + setTimeout(this._inst.exports.go_scheduler, timeout); + }, + + // func stringVal(value string) ref + "syscall/js.stringVal": (ret_ptr, value_ptr, value_len) => { + const s = loadString(value_ptr, value_len); + storeValue(ret_ptr, s); + }, + + // func valueGet(v ref, p string) ref + "syscall/js.valueGet": (retval, v_addr, p_ptr, p_len) => { + let prop = loadString(p_ptr, p_len); + let value = loadValue(v_addr); + let result = Reflect.get(value, prop); + storeValue(retval, result); + }, + + // func valueSet(v ref, p string, x ref) + "syscall/js.valueSet": (v_addr, p_ptr, p_len, x_addr) => { + const v = loadValue(v_addr); + const p = loadString(p_ptr, p_len); + const x = loadValue(x_addr); + Reflect.set(v, p, x); + }, + + // func valueIndex(v ref, i int) ref + //"syscall/js.valueIndex": (sp) => { + // storeValue(sp + 24, Reflect.get(loadValue(sp + 8), getInt64(sp + 16))); + //}, + + // valueSetIndex(v ref, i int, x ref) + //"syscall/js.valueSetIndex": (sp) => { + // Reflect.set(loadValue(sp + 8), getInt64(sp + 16), loadValue(sp + 24)); + //}, + + // func valueCall(v ref, m string, args []ref) (ref, bool) + "syscall/js.valueCall": (ret_addr, v_addr, m_ptr, m_len, args_ptr, args_len, args_cap) => { + const v = loadValue(v_addr); + const name = loadString(m_ptr, m_len); + const args = loadSliceOfValues(args_ptr, args_len, args_cap); + try { + const m = Reflect.get(v, name); + storeValue(ret_addr, Reflect.apply(m, v, args)); + mem().setUint8(ret_addr + 8, 1); + } catch (err) { + storeValue(ret_addr, err); + mem().setUint8(ret_addr + 8, 0); + } + }, + + // func valueInvoke(v ref, args []ref) (ref, bool) + //"syscall/js.valueInvoke": (sp) => { + // try { + // const v = loadValue(sp + 8); + // const args = loadSliceOfValues(sp + 16); + // storeValue(sp + 40, Reflect.apply(v, undefined, args)); + // mem().setUint8(sp + 48, 1); + // } catch (err) { + // storeValue(sp + 40, err); + // mem().setUint8(sp + 48, 0); + // } + //}, + + // func valueNew(v ref, args []ref) (ref, bool) + "syscall/js.valueNew": (ret_addr, v_addr, args_ptr, args_len, args_cap) => { + const v = loadValue(v_addr); + const args = loadSliceOfValues(args_ptr, args_len, args_cap); + try { + storeValue(ret_addr, Reflect.construct(v, args)); + mem().setUint8(ret_addr + 8, 1); + } catch (err) { + storeValue(ret_addr, err); + mem().setUint8(ret_addr+ 8, 0); + } + }, + + // func valueLength(v ref) int + //"syscall/js.valueLength": (sp) => { + // setInt64(sp + 16, parseInt(loadValue(sp + 8).length)); + //}, + + // valuePrepareString(v ref) (ref, int) + "syscall/js.valuePrepareString": (ret_addr, v_addr) => { + const s = String(loadValue(v_addr)); + const str = encoder.encode(s); + storeValue(ret_addr, str); + setInt64(ret_addr + 8, str.length); + }, + + // valueLoadString(v ref, b []byte) + "syscall/js.valueLoadString": (v_addr, slice_ptr, slice_len, slice_cap) => { + const str = loadValue(v_addr); + loadSlice(slice_ptr, slice_len, slice_cap).set(str); + }, + + // func valueInstanceOf(v ref, t ref) bool + //"syscall/js.valueInstanceOf": (sp) => { + // mem().setUint8(sp + 24, loadValue(sp + 8) instanceof loadValue(sp + 16)); + //}, + } + }; + } + + async run(instance) { + this._inst = instance; + this._values = [ // TODO: garbage collection + NaN, + 0, + null, + true, + false, + global, + this._inst.exports.memory, + this, + ]; + this._refs = new Map(); + this._callbackShutdown = false; + this.exited = false; + + const mem = new DataView(this._inst.exports.memory.buffer) + + while (true) { + const callbackPromise = new Promise((resolve) => { + this._resolveCallbackPromise = () => { + if (this.exited) { + throw new Error("bad callback: Go program has already exited"); + } + setTimeout(resolve, 0); // make sure it is asynchronous + }; + }); + this._inst.exports.cwa_main(); + if (this.exited) { + break; + } + await callbackPromise; + } + } + + static _makeCallbackHelper(id, pendingCallbacks, go) { + return function () { + pendingCallbacks.push({ id: id, args: arguments }); + go._resolveCallbackPromise(); + }; + } + + static _makeEventCallbackHelper(preventDefault, stopPropagation, stopImmediatePropagation, fn) { + return function (event) { + if (preventDefault) { + event.preventDefault(); + } + if (stopPropagation) { + event.stopPropagation(); + } + if (stopImmediatePropagation) { + event.stopImmediatePropagation(); + } + fn(event); + }; + } + } + + if (isNodeJS) { + if (process.argv.length != 3) { + process.stderr.write("usage: go_js_wasm_exec [wasm binary] [arguments]\n"); + process.exit(1); + } + + const go = new Go(); + WebAssembly.instantiate(fs.readFileSync(process.argv[2]), go.importObject).then((result) => { + process.on("exit", (code) => { // Node.js exits if no callback is pending + if (code === 0 && !go.exited) { + // deadlock, make Go print error and stack traces + go._callbackShutdown = true; + } + }); + return go.run(result.instance); + }).catch((err) => { + throw err; + }); + } +})();