sliftutils 1.4.68 → 1.4.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -903,10 +903,7 @@ declare module "sliftutils/storage/BulkDatabase2/BulkDatabase2" {
903
903
  * whether it bailed because another tab/process holds the merge lock — so a scheduler can call this
904
904
  * (e.g. every 30 minutes) and tell "nothing to do" from "someone else is already merging".
905
905
  */
906
- tryMergeNow(): Promise<{
907
- merged: boolean;
908
- lockFailed: boolean;
909
- }>;
906
+ tryMergeNow(): Promise<void>;
910
907
  /** Rewrite everything written in [timeLo, timeHi] into fresh key-sorted bulk file(s). Low-level;
911
908
  * most callers want compact() or tryMergeNow(). */
912
909
  merge(timeLo: number, timeHi: number): Promise<void>;
@@ -1028,10 +1025,7 @@ declare module "sliftutils/storage/BulkDatabase2/BulkDatabaseBase" {
1028
1025
  private listFiles;
1029
1026
  private writeBulkFile;
1030
1027
  private maybeMerge;
1031
- tryMergeNow(): Promise<{
1032
- merged: boolean;
1033
- lockFailed: boolean;
1034
- }>;
1028
+ tryMergeNow: () => Promise<void>;
1035
1029
  compact(): Promise<void>;
1036
1030
  merge(timeLo: number, timeHi: number): Promise<void>;
1037
1031
  private readBulkHeader;
@@ -1041,7 +1035,7 @@ declare module "sliftutils/storage/BulkDatabase2/BulkDatabaseBase" {
1041
1035
  private mergeFileSetInner;
1042
1036
  private canDeleteStream;
1043
1037
  private mergeSpacingDelay;
1044
- private testMerge;
1038
+ private testMergeINTERNAL_DO_NOT_CALL;
1045
1039
  private findDuplicateGroups;
1046
1040
  getSingleField<C extends keyof T>(key: string, column: C): Promise<T[C] | undefined>;
1047
1041
  getSingleFieldObj<C extends keyof T>(key: string, column: C): Promise<{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sliftutils",
3
- "version": "1.4.68",
3
+ "version": "1.4.70",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -138,10 +138,7 @@ export interface IBulkDatabase2<T extends {
138
138
  * whether it bailed because another tab/process holds the merge lock — so a scheduler can call this
139
139
  * (e.g. every 30 minutes) and tell "nothing to do" from "someone else is already merging".
140
140
  */
141
- tryMergeNow(): Promise<{
142
- merged: boolean;
143
- lockFailed: boolean;
144
- }>;
141
+ tryMergeNow(): Promise<void>;
145
142
  /** Rewrite everything written in [timeLo, timeHi] into fresh key-sorted bulk file(s). Low-level;
146
143
  * most callers want compact() or tryMergeNow(). */
147
144
  merge(timeLo: number, timeHi: number): Promise<void>;
@@ -131,7 +131,7 @@ export interface IBulkDatabase2<T extends { key: string }> {
131
131
  * whether it bailed because another tab/process holds the merge lock — so a scheduler can call this
132
132
  * (e.g. every 30 minutes) and tell "nothing to do" from "someone else is already merging".
133
133
  */
134
- tryMergeNow(): Promise<{ merged: boolean; lockFailed: boolean }>;
134
+ tryMergeNow(): Promise<void>;
135
135
 
136
136
  /** Rewrite everything written in [timeLo, timeHi] into fresh key-sorted bulk file(s). Low-level;
137
137
  * most callers want compact() or tryMergeNow(). */
@@ -97,10 +97,7 @@ export declare class BulkDatabaseBase<T extends {
97
97
  private listFiles;
98
98
  private writeBulkFile;
99
99
  private maybeMerge;
100
- tryMergeNow(): Promise<{
101
- merged: boolean;
102
- lockFailed: boolean;
103
- }>;
100
+ tryMergeNow: () => Promise<void>;
104
101
  compact(): Promise<void>;
105
102
  merge(timeLo: number, timeHi: number): Promise<void>;
106
103
  private readBulkHeader;
@@ -110,7 +107,7 @@ export declare class BulkDatabaseBase<T extends {
110
107
  private mergeFileSetInner;
111
108
  private canDeleteStream;
112
109
  private mergeSpacingDelay;
113
- private testMerge;
110
+ private testMergeINTERNAL_DO_NOT_CALL;
114
111
  private findDuplicateGroups;
115
112
  getSingleField<C extends keyof T>(key: string, column: C): Promise<T[C] | undefined>;
116
113
  getSingleFieldObj<C extends keyof T>(key: string, column: C): Promise<{
@@ -1,4 +1,4 @@
1
- import { sort } from "socket-function/src/misc";
1
+ import { sort, throttleFunction } from "socket-function/src/misc";
2
2
  import { runInSerial } from "socket-function/src/batching";
3
3
  import { getTimeUnique } from "socket-function/src/bits";
4
4
  import { lazy } from "socket-function/src/caching";
@@ -42,11 +42,11 @@ const MAX_INDEX_RELOAD_ATTEMPTS = 3;
42
42
  const FIRST_MERGE_BYTES = TARGET_FILE_BYTES / 2;
43
43
  const KEY_GROUP_BYTES = 800 * 1024 * 1024;
44
44
  const DUP_THRESHOLD = 0.4;
45
- // Emergency Pass 2 short-circuit: once Pass 1 has had a chance to fold streams, if the bulk tier is
46
- // big enough AND the overall key duplication fraction is high, do ONE merge across every bulk file
47
- // instead of the per-key-group walk (which spaces merges 5 min apart — 16 hours for 200 groups).
48
- const EMERGENCY_DEDUP_BYTES = 512 * 1024 * 1024;
49
- const EMERGENCY_DEDUP_FRACTION = 0.5;
45
+ // Whole-tier dedup short-circuit (after Pass 1): when the bulk tier is over this size AND the overall
46
+ // key duplication fraction is over this threshold, fold every bulk file in one merge instead of the
47
+ // per-key-group walk (which spaces merges 5 min apart — 16 h for 200 groups).
48
+ const DEDUP_TRIGGER_BYTES = 512 * 1024 * 1024;
49
+ const DEDUP_TRIGGER_FRACTION = 0.5;
50
50
  const WRITE_FLUSH_FIRST_STEP_MS = 250;
51
51
 
52
52
  export const bulkDatabase2Timing = {
@@ -594,26 +594,28 @@ export class BulkDatabaseBase<T extends { key: string }> {
594
594
  // Returns immediately with { lockFailed: true } if another call is already in flight (same
595
595
  // instance), if the localStorage lock is held by another tab, or if the cross-process file lock
596
596
  // says another process owns it. Otherwise: acquires both locks, runs testMerge, releases.
597
- public async tryMergeNow(): Promise<{ merged: boolean; lockFailed: boolean }> {
598
- if (this.mergeInFlight) return { merged: false, lockFailed: true };
599
- if (!tryAcquireMergeLock(this.name, writerId)) return { merged: false, lockFailed: true };
597
+ public tryMergeNow = throttleFunction(1000, async () => {
598
+ if (this.mergeInFlight) return;
599
+ if (!tryAcquireMergeLock(this.name, writerId)) return;
600
600
  const storage = await this.storage();
601
601
  const haveFileLock = await tryAcquireMergeFileLock(storage, writerId);
602
602
  if (!haveFileLock) {
603
603
  releaseMergeLock(this.name, writerId);
604
- return { merged: false, lockFailed: true };
604
+ return;
605
605
  }
606
606
  this.mergeInFlight = true;
607
607
  const stopHeartbeat = startMergeFileLockHeartbeat(storage, writerId);
608
608
  try {
609
- return { merged: await this.testMerge(), lockFailed: false };
609
+ let t = Date.now();
610
+ await this.testMergeINTERNAL_DO_NOT_CALL();
611
+ console.log(` [autocompact] ${this.name}: merged (${Date.now() - t}ms)`);
610
612
  } finally {
611
613
  stopHeartbeat();
612
614
  await releaseMergeFileLock(storage, writerId);
613
615
  releaseMergeLock(this.name, writerId);
614
616
  this.mergeInFlight = false;
615
617
  }
616
- }
618
+ });
617
619
 
618
620
  public async compact(): Promise<void> {
619
621
  if (this.mergeInFlight) return;
@@ -872,7 +874,8 @@ export class BulkDatabaseBase<T extends { key: string }> {
872
874
  // into one when they fragment or span too wide a time range.
873
875
  // 2) Key-stratify: walk all keys in ~KEY_GROUP_BYTES groups; rewrite groups whose duplicate-key
874
876
  // fraction passes DUP_THRESHOLD, highest first.
875
- private async testMerge(): Promise<boolean> {
877
+ // Use tryMerge instead
878
+ private async testMergeINTERNAL_DO_NOT_CALL(): Promise<boolean> {
876
879
  let merged = false;
877
880
  await this.flushPending();
878
881
  const runMerge = async (bulk: BulkFileInfo[], stream: StreamFileInfo[]): Promise<boolean> => {
@@ -938,9 +941,9 @@ export class BulkDatabaseBase<T extends { key: string }> {
938
941
  }
939
942
  }
940
943
 
941
- // Pass 1.5 (emergency dedup): Pass 1 has had its chance. If the bulk tier is fat AND mostly
942
- // duplicates, the per-group walk below (5 min spacing per group) takes hours for an extreme
943
- // state (1000+ files, 99% dup) — fold every bulk file in one merge and skip the walk.
944
+ // Whole-tier dedup short-circuit (between Pass 1 and the per-group Pass 2): when the bulk tier
945
+ // is big enough AND mostly duplicates, fold every bulk file in one merge. Avoids the per-group
946
+ // walk's 5-min spacing × N-groups latency.
944
947
  {
945
948
  const { bulkFiles } = await this.listFiles();
946
949
  if (bulkFiles.length >= 2) {
@@ -957,8 +960,8 @@ export class BulkDatabaseBase<T extends { key: string }> {
957
960
  } catch { /* skip unreadable */ }
958
961
  }
959
962
  const dupFraction = totalSlots ? (totalSlots - uniqueKeys.size) / totalSlots : 0;
960
- if (totalBytes > EMERGENCY_DEDUP_BYTES && dupFraction > EMERGENCY_DEDUP_FRACTION) {
961
- console.log(`${blue(this.name)} ${magenta("emergency-dedup")}: ${fmtBytes(totalBytes)} across ${bulkFiles.length} bulk file(s), ${Math.round(dupFraction * 100)}% duplicate key-slots — folding all at once`);
963
+ if (totalBytes > DEDUP_TRIGGER_BYTES && dupFraction > DEDUP_TRIGGER_FRACTION) {
964
+ console.log(`${blue(this.name)} ${magenta("dedup")}: ${fmtBytes(totalBytes)} across ${bulkFiles.length} bulk file(s), ${Math.round(dupFraction * 100)}% duplicate key-slots — folding all at once`);
962
965
  if (!await runMerge(bulkFiles, [])) return merged;
963
966
  return merged;
964
967
  }
@@ -22,176 +22,176 @@ import { wrapHandle, NodeJSDirectoryHandleWrapper, DirectoryWrapper } from "./Fi
22
22
 
23
23
  // Common, memorable words (frequency-ordered subset) for passphrase generation.
24
24
  const WORDS: string[] = [
25
- "that","with","which","this","from","have","they","were","their","there","when","them","said","been",
26
- "would","will","what","more","then","into","some","could","time","very","than","your","other","upon",
27
- "about","only","little","like","these","great","after","well","made","before","such","over","should",
28
- "first","good","must","much","down","where","know","most","here","come","those","never","life","long",
29
- "came","being","many","through","even","himself","back","every","shall","again","make","without","might",
30
- "while","same","under","just","still","people","place","think","house","take","last","found","away",
31
- "hand","went","thought","also","though","three","another","eyes","years","work","right","once","night",
32
- "young","nothing","against","small","head","left","part","ever","world","each","father","give","between",
33
- "face","king","things","love","because","took","always","tell","called","water","both","side","look",
34
- "having","room","mind","half","heart","name","home","country","whole","however","find","among","going",
35
- "thing","lord","looked","seen","mother","general","done","seemed","told","whom","days","soon","better",
36
- "letter","woman","heard","asked","course","thus","moment","knew","light","enough","white","almost",
37
- "until","quite","hands","words","death","large","taken","since","gave","given","best","state","brought",
38
- "does","whose","door","others","power","perhaps","present","next","morning","poor","lady","four","high",
39
- "year","turned","less","word","full","during","rather","want","order","near","feet","true","miss",
40
- "matter","began","cannot","used","known","felt","above","round","thou","voice","till","case","nature",
41
- "indeed","church","kind","certain","fire","often","stood","fact","friend","girl","five","land","says",
42
- "john","myself","along","point","dear","wife","city","within","sent","times","keep","passed","form",
43
- "second","body","money","believe","hundred","open","several","means","child","english","herself","sure",
44
- "looking","women","already","black","alone","least","gone","held","itself","whether","hope","river",
45
- "ground","either","number","chapter","england","leave","rest","town","hear","greek","friends","book",
46
- "hour","short","cried","read","behind","became","making","family","earth","captain","around","dead",
47
- "reason","call","become","lost","line","replied","help","coming","speak","manner","french","twenty",
48
- "spirit","really","early","story","hard","close","human","public","truth","strong","master","care",
49
- "towards","history","kept","later","states","dark","able","mean","return","brother","person","subject",
50
- "soul","party","arms","thee","seems","common","fell","fine","feel","show","table","turn","wish","evening",
51
- "free","cause","south","ready","north","across","rose","live","account","doubt","company","miles","road",
52
- "bring","london","sense","horse","carried","hold","sight","fear","answer","idea","force","need","deep",
53
- "further","nearly","past","army","blood","street","court","reached","view","school","sort","taking",
54
- "else","chief","hours","beyond","cold","none","longer","strange","fellow","clear","service","natural",
55
- "suppose","late","talk","front","stand","purpose","seem","neither","ought","west","real","except","sound",
56
- "gold","forward","feeling","added","boys","self","peace","happy","living","husband","toward","spoke",
57
- "fair","france","trees","effect","latter","length","change","died","green","united","fall","pretty",
58
- "placed","meet","forth","office","comes","pass","written","ship","enemy","saying","tree","foot","blue",
59
- "note","prince","hair","heaven","wild","play","entered","society","laid","wind","doing","paper","opened",
60
- "bear","third","queen","mine","greater","various","faith","wanted","boat","stone","lived","george",
61
- "window","doctor","action","books","tried","letters","makes","minutes","parts","wood","period","duty",
62
- "york","instead","heavy","persons","battle","field","british","object","century","island","beauty",
63
- "christ","sister","glad","below","east","opinion","save","places","months","food","sweet","trouble",
64
- "system","born","desire","works","mary","chance","william","seven","single","hardly","sleep","mouth",
65
- "horses","silence","ancient","broken","hall","send","rich","girls","besides","lips","henry","figure",
66
- "slowly","hill","wall","future","lines","follow","german","march","filled","brown","deal","eight",
67
- "covered","smile","former","week","drew","easy","paris","camp","stay","cross","seeing","result","started",
68
- "caught","houses","appear","wrote","giving","simple","arrived","formed","bright","wide","uncle","piece",
69
- "walked","knows","carry","middle","village","holy","merely","getting","raised","afraid","struck",
70
- "charles","board","visit","royal","spring","dinner","evil","outside","wrong","summer","moved","danger",
71
- "mark","fresh","plain","thirty","scene","quickly","wonder","jack","indian","walk","learned","class",
72
- "secret","wait","command","easily","garden","loved","married","fight","leaving","music","usual","cases",
73
- "winter","respect","value","quiet","please","stopped","write","laughed","america","chair","paid","duke",
74
- "leaves","lower","colonel","perfect","james","worth","author","finally","youth","regard","glass",
75
- "picture","built","modern","success","race","showed","tears","unless","mere","lives","grew","charge",
76
- "beside","remain","waiting","study","hath","shot","unto","tone","iron","watch","grace","flowers","killed",
77
- "allowed","news","step","proper","sitting","floor","justice","noble","goes","walls","laws","meant",
78
- "bound","forms","fifty","drawn","private","fast","indians","judge","meeting","usually","sudden","gives",
79
- "reach","bank","attempt","shore","stop","plan","silent","special","spot","officer","silver","passing",
80
- "broke","lake","soft","journey","beneath","shown","turning","members","enter","lead","trade","names",
81
- "escape","troops","bill","corner","rule","ladies","species","rock","similar","running","rate","cast",
82
- "nation","post","likely","simply","orders","dress","fish","minute","birds","europe","passage","surface",
83
- "snow","attack","higher","rise","grand","reply","honour","notice","speech","trying","game","writing",
84
- "closed","rome","example","aunt","learn","morrow","offered","peter","equal","space","page","wished",
85
- "changed","animal","social","twelve","appears","receive","valley","degree","train","steps","fixed",
86
- "count","forest","matters","foreign","native","broad","moral","animals","safe","roman","break","pale",
87
- "memory","warm","trust","yellow","sides","main","bird","reading","coast","pain","grave","forget","move",
88
- "fortune","madame","proved","forty","lying","quick","wise","jesus","working","surely","looks","seat",
89
- "divine","touch","loss","paul","heads","spent","ordered","report","caused","thomas","ones","drawing",
90
- "talking","breath","meaning","month","union","pleased","powers","emperor","laugh","affairs","narrow",
91
- "square","science","begin","promise","takes","conduct","serious","thank","curious","pieces","health",
92
- "exactly","ways","upper","decided","nine","stream","wine","engaged","points","amount","named","song",
93
- "worse","size","castle","crown","mass","liberty","stage","guard","servant","greatly","price","weeks",
94
- "neck","ears","drink","crowd","thick","fallen","hills","spoken","golden","capital","sign","spite","terms",
95
- "sake","council","threw","ships","portion","support","clothes","effort","fully","holding","majesty",
96
- "glory","pure","facts","sword","sorry","fate","bread","prove","station","sharp","dream","vain","major",
97
- "smiled","instant","spread","serve","sick","june","ideas","thrown","start","weather","gray","courage",
98
- "anxious","woods","path","rising","grass","moon","gate","forced","fancy","bottom","expect","remains",
99
- "shook","bishop","watched","settled","events","rain","quarter","heat","palace","glance","kingdom",
100
- "papers","aside","worthy","taste","pride","july","opening","daily","leading","wounded","famous","offer",
101
- "group","distant","weight","highest","vast","popular","passion","knowing","allow","sought","lies",
102
- "marked","series","growing","measure","hearts","robert","obliged","western","hence","style","dropped",
103
- "nations","grown","honor","edge","pray","tall","frank","poet","streets","season","pointed","mighty",
104
- "temple","extent","thin","blow","freedom","entire","keeping","prevent","shut","storm","lose","college",
105
- "cost","marry","spirits","worked","colour","ring","listen","fruit","waters","fashion","share","hung",
106
- "proud","fingers","method","served","grow","fort","draw","dollars","quietly","yours","vessel","direct",
107
- "refused","bridge","gods","inside","title","advance","priest","becomes","dick","double","seek","guess",
108
- "spanish","larger","ball","finding","edward","removed","brave","tired","agreed","sacred","sons","guns",
109
- "played","richard","devil","pounds","honest","false","cloth","soldier","tongue","smith","wealth","failed",
110
- "height","faces","equally","legs","pocket","twice","volume","prayer","county","notes","louis","unknown",
111
- "delight","rights","nice","taught","coat","dare","slight","rocks","enemies","control","forces","germany",
112
- "kill","process","david","rapidly","comfort","islands","centre","salt","april","windows","noticed",
113
- "truly","color","fields","date","august","desired","breast","skin","gentle","smoke","search","joined",
114
- "nobody","results","needed","weak","type","stones","follows","theory","shape","waited","telling","relief",
115
- "bearing","bent","mile","dressed","birth","spain","female","clearly","moving","drive","crossed","member",
116
- "saved","teeth","flesh","cover","shows","farther","stands","figures","numbers","bodies","supply","motion",
117
- "grey","bell","alive","seized","shadow","produce","touched","driven","talked","empire","sunday","pair",
118
- "fourth","slave","regular","dozen","beat","cousin","sand","soil","rough","claim","angry","pity","walking",
119
- "acts","pope","rooms","task","stock","tender","throw","reader","india","hotel","fifteen","arrival",
120
- "plate","stars","willing","stories","saint","amongst","virtue","chamber","civil","yards","habit","writer",
121
- "putting","origin","italy","hearing","genius","milk","busy","fool","burning","duties","brain","slow",
122
- "belief","bore","mention","grant","library","inches","press","calm","total","ride","lands","labor",
123
- "parties","clean","catch","treated","rode","whilst","level","efforts","minds","welcome","wisdom","supper",
124
- "final","mercy","aware","lovely","empty","wants","midst","central","rank","proof","burst","term","farm",
125
- "applied","loud","nearer","harry","closely","kings","explain","deck","noise","hurt","advice","absence",
126
- "circle","objects","secure","plants","parents","falling","base","fellows","sorrow","flat","flower",
127
- "calling","imagine","range","sold","favour","happen","showing","earl","hole","careful","dust","prison",
128
- "useful","accept","firm","sing","port","seated","custom","wore","doors","lifted","edition","tale",
129
- "affair","policy","roof","express","ahead","worship","partly","address","highly","victory","ocean",
130
- "begun","buried","content","smiling","liked","active","quality","philip","current","divided","growth",
131
- "huge","moments","article","speed","poetry","machine","join","nose","unable","ceased","gained","worn",
132
- "eastern","safety","ages","vessels","hopes","corn","slaves","drop","plant","evident","local","police",
133
- "october","obtain","italian","deeply","dying","wholly","dogs","playing","plenty","apart","suffer","maid",
134
- "record","fairly","kindly","terror","drove","ends","sugar","capable","irish","message","chosen","flight",
135
- "reasons","couple","meat","printed","blind","energy","bitter","baby","mistake","tower","ireland","trial",
136
- "wear","brief","market","band","causes","clouds","goods","admit","cities","earlier","tells","stated",
137
- "pressed","crime","fought","guide","hoped","list","banks","knight","fleet","pulled","tail","patient",
138
- "mental","boats","kinds","stairs","star","cattle","rare","wings","disease","section","actual","bare",
139
- "extreme","cruel","worst","escaped","dance","strike","views","eggs","needs","store","choice","fond",
140
- "adopted","suit","singing","fail","souls","thanks","hidden","shame","faint","shop","older","joseph",
141
- "knees","gently","blessed","yard","cent","grief","male","sooner","january","excited","region","praise",
142
- "throne","classes","effects","demand","gain","fault","labour","variety","loose","cook","devoted","ended",
143
- "changes","witness","bought","lover","visited","club","sheep","cloud","enjoy","asleep","cool","dull",
144
- "painted","arose","armed","dignity","chiefly","voices","sail","event","signs","hero","schools","branch",
145
- "hurried","arthur","kitchen","stick","coffee","thinks","eager","natives","flying","boston","eternal",
146
- "source","fill","anger","vision","murder","viii","park","avoid","awful","raise","desert","plans","pardon",
147
- "assured","wound","finger","bible","rear","details","cabin","whence","reign","weary","slavery","visible",
148
- "shouted","seldom","skill","hast","throat","reality","leader","egypt","credit","smaller","severe","calls",
149
- "younger","shell","sprang","anybody","handed","despair","asking","inch","mystery","manners","knife",
150
- "design","sounds","wishes","stepped","towns","sixty","immense","china","favor","latin","hate","setting",
151
- "excuse","chinese","behold","rushed","choose","ease","lights","paused","mission","voyage","gift","bold",
152
- "meal","britain","smooth","mounted","utterly","lest","helped","picked","falls","pipe","bones","earnest",
153
- "granted","swept","anxiety","teach","waves","softly","savage","hunting","defence","rapid","artist",
154
- "recent","supreme","russian","created","habits","exist","guilty","pages","crew","hell","remark","request",
155
- "harm","solemn","observe","trail","copy","violent","dreams","proceed","luck","steel","sell","temper",
156
- "appeal","hide","fled","belong","triumph","abroad","waste","consent","writers","possess","jews","require",
157
- "priests","railway","founded","pushed","host","solid","maybe","degrees","cheeks","mount","ruin","owing",
158
- "fierce","reduced","mankind","text","swift","riding","silk","shade","career","wicked","afford","alas",
159
- "rules","treaty","correct","spend","foolish","methods","remarks","horror","shining","enjoyed","tribes",
160
- "lack","frame","gets","eagerly","russia","alike","somehow","nodded","problem","fever","sees","stern",
161
- "dawn","forgive","flag","managed","fame","travel","estate","cotton","hurry","agree","feared","kiss",
162
- "million","martin","mixed","risk","butter","jane","assumed","pause","benefit","unhappy","lighted",
163
- "scheme","slept","plainly","forgot","delay","merry","rush","wooden","secured","poem","rolled","angel",
164
- "guests","farmer","humble","glanced","shortly","rope","image","lately","africa","fired","retired","bull",
165
- "steam","keen","loving","borne","readily","beloved","average","teacher","attend","flame","area","burned",
166
- "thrust","negro","nurse","spare","fifth","thence","roads","refuse","tent","kissed","gates","gaze","fatal",
167
- "israel","verse","scenes","confess","uttered","build","acted","hanging","reward","issue","utmost",
168
- "fathers","noted","widow","related","urged","mode","failure","nervous","render","masters","tribe",
169
- "colored","turns","alarm","rivers","using","eleven","rage","hers","lamp","retreat","amid","gospel",
170
- "exposed","johnson","marks","tide","emotion","destroy","inner","sisters","lion","helen","tied","grounds",
171
- "acid","wheel","issued","invited","gazed","senate","finds","seed","regret","clay","chain","crowded",
172
- "bosom","limited","steady","chap","anne","francis","cavalry","freely","charm","faced","ideal","useless",
173
- "warning","shelter","vote","xpage","cottage","beast","outer","folks","misery","anyone","expense","firmly",
174
- "eating","lonely","owner","trace","coal","hastily","elder","utter","begins","chapel","nights","dared",
175
- "signal","stared","track","lords","speaks","bottle","blame","claims","shoes","sigh","ghost","folk",
176
- "dutch","flung","flew","cheek","staff","walter","clever","acting","hungry","poems","cutting","forever",
177
- "exact","haste","dancing","trip","lincoln","pull","vice","slipped","thine","loves","permit","mill",
178
- "engine","hollow","seeking","bowed","largely","charged","painful","madam","roll","leaf","prayers",
179
- "element","agent","cries","songs","theatre","creek","match","ashamed","runs","aspect","canada","treat",
180
- "legal","arts","corps","noon","nearest","scale","hunt","shadows","winds","landed","beings","tiny",
181
- "gardens","bless","clerk","doth","derived","hang","heavens","cape","ours","brow","test","senses",
182
- "opposed","error","driving","nest","headed","groups","princes","feast","admiral","poured","brings",
183
- "pursued","germans","bears","lesson","journal","unusual","marched","wing","remove","studied","passes",
184
- "actions","burden","colony","scott","bride","yield","crying","forming","rifle","powder","rested","shake",
185
- "guest","begged","occur","altar","sorts","beaten","wave","papa","sang","depth","aloud","contact",
186
- "intense","marble","poverty","detail","writes","root","metal","jean","existed","ability","purple",
187
- "counsel","lane","wives","sending","heavily","leaders","queer","tales","sins","mexico","protect","clock",
188
- "stuff","jones","pine","records","cave","baron","medical","pick","stayed","magic","seventy","pour",
189
- "saddle","sank","dread","deny","wire","rude","holds","strain","autumn","shed","shoot","settle","basis",
190
- "readers","route","beach","safely","oxford","notion","thunder","sale","saints","pound","shock","elected",
191
- "signed","whereas","maiden","courts","rarely","wolf","mamma","billy","student","charity","impulse",
192
- "tones","mortal","raising","wedding","belongs","chest","sharply","sounded","poets","lawyer","hugh",
193
- "plays","awake","landing","debt","alice","venture","idle","uniform","contain","tobacco","boots","fears",
194
- "leaned","studies","customs","prize","stir","obey","oath","badly","pursuit","resting",
25
+ "that", "with", "which", "this", "from", "have", "they", "were", "their", "there", "when", "them", "said", "been",
26
+ "would", "will", "what", "more", "then", "into", "some", "could", "time", "very", "than", "your", "other", "upon",
27
+ "about", "only", "little", "like", "these", "great", "after", "well", "made", "before", "such", "over", "should",
28
+ "first", "good", "must", "much", "down", "where", "know", "most", "here", "come", "those", "never", "life", "long",
29
+ "came", "being", "many", "through", "even", "himself", "back", "every", "shall", "again", "make", "without", "might",
30
+ "while", "same", "under", "just", "still", "people", "place", "think", "house", "take", "last", "found", "away",
31
+ "hand", "went", "thought", "also", "though", "three", "another", "eyes", "years", "work", "right", "once", "night",
32
+ "young", "nothing", "against", "small", "head", "left", "part", "ever", "world", "each", "father", "give", "between",
33
+ "face", "king", "things", "love", "because", "took", "always", "tell", "called", "water", "both", "side", "look",
34
+ "having", "room", "mind", "half", "heart", "name", "home", "country", "whole", "however", "find", "among", "going",
35
+ "thing", "lord", "looked", "seen", "mother", "general", "done", "seemed", "told", "whom", "days", "soon", "better",
36
+ "letter", "woman", "heard", "asked", "course", "thus", "moment", "knew", "light", "enough", "white", "almost",
37
+ "until", "quite", "hands", "words", "death", "large", "taken", "since", "gave", "given", "best", "state", "brought",
38
+ "does", "whose", "door", "others", "power", "perhaps", "present", "next", "morning", "poor", "lady", "four", "high",
39
+ "year", "turned", "less", "word", "full", "during", "rather", "want", "order", "near", "feet", "true", "miss",
40
+ "matter", "began", "cannot", "used", "known", "felt", "above", "round", "thou", "voice", "till", "case", "nature",
41
+ "indeed", "church", "kind", "certain", "fire", "often", "stood", "fact", "friend", "girl", "five", "land", "says",
42
+ "john", "myself", "along", "point", "dear", "wife", "city", "within", "sent", "times", "keep", "passed", "form",
43
+ "second", "body", "money", "believe", "hundred", "open", "several", "means", "child", "english", "herself", "sure",
44
+ "looking", "women", "already", "black", "alone", "least", "gone", "held", "itself", "whether", "hope", "river",
45
+ "ground", "either", "number", "chapter", "england", "leave", "rest", "town", "hear", "greek", "friends", "book",
46
+ "hour", "short", "cried", "read", "behind", "became", "making", "family", "earth", "captain", "around", "dead",
47
+ "reason", "call", "become", "lost", "line", "replied", "help", "coming", "speak", "manner", "french", "twenty",
48
+ "spirit", "really", "early", "story", "hard", "close", "human", "public", "truth", "strong", "master", "care",
49
+ "towards", "history", "kept", "later", "states", "dark", "able", "mean", "return", "brother", "person", "subject",
50
+ "soul", "party", "arms", "thee", "seems", "common", "fell", "fine", "feel", "show", "table", "turn", "wish", "evening",
51
+ "free", "cause", "south", "ready", "north", "across", "rose", "live", "account", "doubt", "company", "miles", "road",
52
+ "bring", "london", "sense", "horse", "carried", "hold", "sight", "fear", "answer", "idea", "force", "need", "deep",
53
+ "further", "nearly", "past", "army", "blood", "street", "court", "reached", "view", "school", "sort", "taking",
54
+ "else", "chief", "hours", "beyond", "cold", "none", "longer", "strange", "fellow", "clear", "service", "natural",
55
+ "suppose", "late", "talk", "front", "stand", "purpose", "seem", "neither", "ought", "west", "real", "except", "sound",
56
+ "gold", "forward", "feeling", "added", "boys", "self", "peace", "happy", "living", "husband", "toward", "spoke",
57
+ "fair", "france", "trees", "effect", "latter", "length", "change", "died", "green", "united", "fall", "pretty",
58
+ "placed", "meet", "forth", "office", "comes", "pass", "written", "ship", "enemy", "saying", "tree", "foot", "blue",
59
+ "note", "prince", "hair", "heaven", "wild", "play", "entered", "society", "laid", "wind", "doing", "paper", "opened",
60
+ "bear", "third", "queen", "mine", "greater", "various", "faith", "wanted", "boat", "stone", "lived", "george",
61
+ "window", "doctor", "action", "books", "tried", "letters", "makes", "minutes", "parts", "wood", "period", "duty",
62
+ "york", "instead", "heavy", "persons", "battle", "field", "british", "object", "century", "island", "beauty",
63
+ "christ", "sister", "glad", "below", "east", "opinion", "save", "places", "months", "food", "sweet", "trouble",
64
+ "system", "born", "desire", "works", "mary", "chance", "william", "seven", "single", "hardly", "sleep", "mouth",
65
+ "horses", "silence", "ancient", "broken", "hall", "send", "rich", "girls", "besides", "lips", "henry", "figure",
66
+ "slowly", "hill", "wall", "future", "lines", "follow", "german", "march", "filled", "brown", "deal", "eight",
67
+ "covered", "smile", "former", "week", "drew", "easy", "paris", "camp", "stay", "cross", "seeing", "result", "started",
68
+ "caught", "houses", "appear", "wrote", "giving", "simple", "arrived", "formed", "bright", "wide", "uncle", "piece",
69
+ "walked", "knows", "carry", "middle", "village", "holy", "merely", "getting", "raised", "afraid", "struck",
70
+ "charles", "board", "visit", "royal", "spring", "dinner", "evil", "outside", "wrong", "summer", "moved", "danger",
71
+ "mark", "fresh", "plain", "thirty", "scene", "quickly", "wonder", "jack", "indian", "walk", "learned", "class",
72
+ "secret", "wait", "command", "easily", "garden", "loved", "married", "fight", "leaving", "music", "usual", "cases",
73
+ "winter", "respect", "value", "quiet", "please", "stopped", "write", "laughed", "america", "chair", "paid", "duke",
74
+ "leaves", "lower", "colonel", "perfect", "james", "worth", "author", "finally", "youth", "regard", "glass",
75
+ "picture", "built", "modern", "success", "race", "showed", "tears", "unless", "mere", "lives", "grew", "charge",
76
+ "beside", "remain", "waiting", "study", "hath", "shot", "unto", "tone", "iron", "watch", "grace", "flowers", "killed",
77
+ "allowed", "news", "step", "proper", "sitting", "floor", "justice", "noble", "goes", "walls", "laws", "meant",
78
+ "bound", "forms", "fifty", "drawn", "private", "fast", "indians", "judge", "meeting", "usually", "sudden", "gives",
79
+ "reach", "bank", "attempt", "shore", "stop", "plan", "silent", "special", "spot", "officer", "silver", "passing",
80
+ "broke", "lake", "soft", "journey", "beneath", "shown", "turning", "members", "enter", "lead", "trade", "names",
81
+ "escape", "troops", "bill", "corner", "rule", "ladies", "species", "rock", "similar", "running", "rate", "cast",
82
+ "nation", "post", "likely", "simply", "orders", "dress", "fish", "minute", "birds", "europe", "passage", "surface",
83
+ "snow", "attack", "higher", "rise", "grand", "reply", "honour", "notice", "speech", "trying", "game", "writing",
84
+ "closed", "rome", "example", "aunt", "learn", "morrow", "offered", "peter", "equal", "space", "page", "wished",
85
+ "changed", "animal", "social", "twelve", "appears", "receive", "valley", "degree", "train", "steps", "fixed",
86
+ "count", "forest", "matters", "foreign", "native", "broad", "moral", "animals", "safe", "roman", "break", "pale",
87
+ "memory", "warm", "trust", "yellow", "sides", "main", "bird", "reading", "coast", "pain", "grave", "forget", "move",
88
+ "fortune", "madame", "proved", "forty", "lying", "quick", "wise", "jesus", "working", "surely", "looks", "seat",
89
+ "divine", "touch", "loss", "paul", "heads", "spent", "ordered", "report", "caused", "thomas", "ones", "drawing",
90
+ "talking", "breath", "meaning", "month", "union", "pleased", "powers", "emperor", "laugh", "affairs", "narrow",
91
+ "square", "science", "begin", "promise", "takes", "conduct", "serious", "thank", "curious", "pieces", "health",
92
+ "exactly", "ways", "upper", "decided", "nine", "stream", "wine", "engaged", "points", "amount", "named", "song",
93
+ "worse", "size", "castle", "crown", "mass", "liberty", "stage", "guard", "servant", "greatly", "price", "weeks",
94
+ "neck", "ears", "drink", "crowd", "thick", "fallen", "hills", "spoken", "golden", "capital", "sign", "spite", "terms",
95
+ "sake", "council", "threw", "ships", "portion", "support", "clothes", "effort", "fully", "holding", "majesty",
96
+ "glory", "pure", "facts", "sword", "sorry", "fate", "bread", "prove", "station", "sharp", "dream", "vain", "major",
97
+ "smiled", "instant", "spread", "serve", "sick", "june", "ideas", "thrown", "start", "weather", "gray", "courage",
98
+ "anxious", "woods", "path", "rising", "grass", "moon", "gate", "forced", "fancy", "bottom", "expect", "remains",
99
+ "shook", "bishop", "watched", "settled", "events", "rain", "quarter", "heat", "palace", "glance", "kingdom",
100
+ "papers", "aside", "worthy", "taste", "pride", "july", "opening", "daily", "leading", "wounded", "famous", "offer",
101
+ "group", "distant", "weight", "highest", "vast", "popular", "passion", "knowing", "allow", "sought", "lies",
102
+ "marked", "series", "growing", "measure", "hearts", "robert", "obliged", "western", "hence", "style", "dropped",
103
+ "nations", "grown", "honor", "edge", "pray", "tall", "frank", "poet", "streets", "season", "pointed", "mighty",
104
+ "temple", "extent", "thin", "blow", "freedom", "entire", "keeping", "prevent", "shut", "storm", "lose", "college",
105
+ "cost", "marry", "spirits", "worked", "colour", "ring", "listen", "fruit", "waters", "fashion", "share", "hung",
106
+ "proud", "fingers", "method", "served", "grow", "fort", "draw", "dollars", "quietly", "yours", "vessel", "direct",
107
+ "refused", "bridge", "gods", "inside", "title", "advance", "priest", "becomes", "dick", "double", "seek", "guess",
108
+ "spanish", "larger", "ball", "finding", "edward", "removed", "brave", "tired", "agreed", "sacred", "sons", "guns",
109
+ "played", "richard", "devil", "pounds", "honest", "false", "cloth", "soldier", "tongue", "smith", "wealth", "failed",
110
+ "height", "faces", "equally", "legs", "pocket", "twice", "volume", "prayer", "county", "notes", "louis", "unknown",
111
+ "delight", "rights", "nice", "taught", "coat", "dare", "slight", "rocks", "enemies", "control", "forces", "germany",
112
+ "kill", "process", "david", "rapidly", "comfort", "islands", "centre", "salt", "april", "windows", "noticed",
113
+ "truly", "color", "fields", "date", "august", "desired", "breast", "skin", "gentle", "smoke", "search", "joined",
114
+ "nobody", "results", "needed", "weak", "type", "stones", "follows", "theory", "shape", "waited", "telling", "relief",
115
+ "bearing", "bent", "mile", "dressed", "birth", "spain", "female", "clearly", "moving", "drive", "crossed", "member",
116
+ "saved", "teeth", "flesh", "cover", "shows", "farther", "stands", "figures", "numbers", "bodies", "supply", "motion",
117
+ "grey", "bell", "alive", "seized", "shadow", "produce", "touched", "driven", "talked", "empire", "sunday", "pair",
118
+ "fourth", "slave", "regular", "dozen", "beat", "cousin", "sand", "soil", "rough", "claim", "angry", "pity", "walking",
119
+ "acts", "pope", "rooms", "task", "stock", "tender", "throw", "reader", "india", "hotel", "fifteen", "arrival",
120
+ "plate", "stars", "willing", "stories", "saint", "amongst", "virtue", "chamber", "civil", "yards", "habit", "writer",
121
+ "putting", "origin", "italy", "hearing", "genius", "milk", "busy", "fool", "burning", "duties", "brain", "slow",
122
+ "belief", "bore", "mention", "grant", "library", "inches", "press", "calm", "total", "ride", "lands", "labor",
123
+ "parties", "clean", "catch", "treated", "rode", "whilst", "level", "efforts", "minds", "welcome", "wisdom", "supper",
124
+ "final", "mercy", "aware", "lovely", "empty", "wants", "midst", "central", "rank", "proof", "burst", "term", "farm",
125
+ "applied", "loud", "nearer", "harry", "closely", "kings", "explain", "deck", "noise", "hurt", "advice", "absence",
126
+ "circle", "objects", "secure", "plants", "parents", "falling", "base", "fellows", "sorrow", "flat", "flower",
127
+ "calling", "imagine", "range", "sold", "favour", "happen", "showing", "earl", "hole", "careful", "dust", "prison",
128
+ "useful", "accept", "firm", "sing", "port", "seated", "custom", "wore", "doors", "lifted", "edition", "tale",
129
+ "affair", "policy", "roof", "express", "ahead", "worship", "partly", "address", "highly", "victory", "ocean",
130
+ "begun", "buried", "content", "smiling", "liked", "active", "quality", "philip", "current", "divided", "growth",
131
+ "huge", "moments", "article", "speed", "poetry", "machine", "join", "nose", "unable", "ceased", "gained", "worn",
132
+ "eastern", "safety", "ages", "vessels", "hopes", "corn", "slaves", "drop", "plant", "evident", "local", "police",
133
+ "october", "obtain", "italian", "deeply", "dying", "wholly", "dogs", "playing", "plenty", "apart", "suffer", "maid",
134
+ "record", "fairly", "kindly", "terror", "drove", "ends", "sugar", "capable", "irish", "message", "chosen", "flight",
135
+ "reasons", "couple", "meat", "printed", "blind", "energy", "bitter", "baby", "mistake", "tower", "ireland", "trial",
136
+ "wear", "brief", "market", "band", "causes", "clouds", "goods", "admit", "cities", "earlier", "tells", "stated",
137
+ "pressed", "crime", "fought", "guide", "hoped", "list", "banks", "knight", "fleet", "pulled", "tail", "patient",
138
+ "mental", "boats", "kinds", "stairs", "star", "cattle", "rare", "wings", "disease", "section", "actual", "bare",
139
+ "extreme", "cruel", "worst", "escaped", "dance", "strike", "views", "eggs", "needs", "store", "choice", "fond",
140
+ "adopted", "suit", "singing", "fail", "souls", "thanks", "hidden", "shame", "faint", "shop", "older", "joseph",
141
+ "knees", "gently", "blessed", "yard", "cent", "grief", "male", "sooner", "january", "excited", "region", "praise",
142
+ "throne", "classes", "effects", "demand", "gain", "fault", "labour", "variety", "loose", "cook", "devoted", "ended",
143
+ "changes", "witness", "bought", "lover", "visited", "club", "sheep", "cloud", "enjoy", "asleep", "cool", "dull",
144
+ "painted", "arose", "armed", "dignity", "chiefly", "voices", "sail", "event", "signs", "hero", "schools", "branch",
145
+ "hurried", "arthur", "kitchen", "stick", "coffee", "thinks", "eager", "natives", "flying", "boston", "eternal",
146
+ "source", "fill", "anger", "vision", "murder", "viii", "park", "avoid", "awful", "raise", "desert", "plans", "pardon",
147
+ "assured", "wound", "finger", "bible", "rear", "details", "cabin", "whence", "reign", "weary", "slavery", "visible",
148
+ "shouted", "seldom", "skill", "hast", "throat", "reality", "leader", "egypt", "credit", "smaller", "severe", "calls",
149
+ "younger", "shell", "sprang", "anybody", "handed", "despair", "asking", "inch", "mystery", "manners", "knife",
150
+ "design", "sounds", "wishes", "stepped", "towns", "sixty", "immense", "china", "favor", "latin", "hate", "setting",
151
+ "excuse", "chinese", "behold", "rushed", "choose", "ease", "lights", "paused", "mission", "voyage", "gift", "bold",
152
+ "meal", "britain", "smooth", "mounted", "utterly", "lest", "helped", "picked", "falls", "pipe", "bones", "earnest",
153
+ "granted", "swept", "anxiety", "teach", "waves", "softly", "savage", "hunting", "defence", "rapid", "artist",
154
+ "recent", "supreme", "russian", "created", "habits", "exist", "guilty", "pages", "crew", "hell", "remark", "request",
155
+ "harm", "solemn", "observe", "trail", "copy", "violent", "dreams", "proceed", "luck", "steel", "sell", "temper",
156
+ "appeal", "hide", "fled", "belong", "triumph", "abroad", "waste", "consent", "writers", "possess", "jews", "require",
157
+ "priests", "railway", "founded", "pushed", "host", "solid", "maybe", "degrees", "cheeks", "mount", "ruin", "owing",
158
+ "fierce", "reduced", "mankind", "text", "swift", "riding", "silk", "shade", "career", "wicked", "afford", "alas",
159
+ "rules", "treaty", "correct", "spend", "foolish", "methods", "remarks", "horror", "shining", "enjoyed", "tribes",
160
+ "lack", "frame", "gets", "eagerly", "russia", "alike", "somehow", "nodded", "problem", "fever", "sees", "stern",
161
+ "dawn", "forgive", "flag", "managed", "fame", "travel", "estate", "cotton", "hurry", "agree", "feared", "kiss",
162
+ "million", "martin", "mixed", "risk", "butter", "jane", "assumed", "pause", "benefit", "unhappy", "lighted",
163
+ "scheme", "slept", "plainly", "forgot", "delay", "merry", "rush", "wooden", "secured", "poem", "rolled", "angel",
164
+ "guests", "farmer", "humble", "glanced", "shortly", "rope", "image", "lately", "africa", "fired", "retired", "bull",
165
+ "steam", "keen", "loving", "borne", "readily", "beloved", "average", "teacher", "attend", "flame", "area", "burned",
166
+ "thrust", "negro", "nurse", "spare", "fifth", "thence", "roads", "refuse", "tent", "kissed", "gates", "gaze", "fatal",
167
+ "israel", "verse", "scenes", "confess", "uttered", "build", "acted", "hanging", "reward", "issue", "utmost",
168
+ "fathers", "noted", "widow", "related", "urged", "mode", "failure", "nervous", "render", "masters", "tribe",
169
+ "colored", "turns", "alarm", "rivers", "using", "eleven", "rage", "hers", "lamp", "retreat", "amid", "gospel",
170
+ "exposed", "johnson", "marks", "tide", "emotion", "destroy", "inner", "sisters", "lion", "helen", "tied", "grounds",
171
+ "acid", "wheel", "issued", "invited", "gazed", "senate", "finds", "seed", "regret", "clay", "chain", "crowded",
172
+ "bosom", "limited", "steady", "chap", "anne", "francis", "cavalry", "freely", "charm", "faced", "ideal", "useless",
173
+ "warning", "shelter", "vote", "xpage", "cottage", "beast", "outer", "folks", "misery", "anyone", "expense", "firmly",
174
+ "eating", "lonely", "owner", "trace", "coal", "hastily", "elder", "utter", "begins", "chapel", "nights", "dared",
175
+ "signal", "stared", "track", "lords", "speaks", "bottle", "blame", "claims", "shoes", "sigh", "ghost", "folk",
176
+ "dutch", "flung", "flew", "cheek", "staff", "walter", "clever", "acting", "hungry", "poems", "cutting", "forever",
177
+ "exact", "haste", "dancing", "trip", "lincoln", "pull", "vice", "slipped", "thine", "loves", "permit", "mill",
178
+ "engine", "hollow", "seeking", "bowed", "largely", "charged", "painful", "madam", "roll", "leaf", "prayers",
179
+ "element", "agent", "cries", "songs", "theatre", "creek", "match", "ashamed", "runs", "aspect", "canada", "treat",
180
+ "legal", "arts", "corps", "noon", "nearest", "scale", "hunt", "shadows", "winds", "landed", "beings", "tiny",
181
+ "gardens", "bless", "clerk", "doth", "derived", "hang", "heavens", "cape", "ours", "brow", "test", "senses",
182
+ "opposed", "error", "driving", "nest", "headed", "groups", "princes", "feast", "admiral", "poured", "brings",
183
+ "pursued", "germans", "bears", "lesson", "journal", "unusual", "marched", "wing", "remove", "studied", "passes",
184
+ "actions", "burden", "colony", "scott", "bride", "yield", "crying", "forming", "rifle", "powder", "rested", "shake",
185
+ "guest", "begged", "occur", "altar", "sorts", "beaten", "wave", "papa", "sang", "depth", "aloud", "contact",
186
+ "intense", "marble", "poverty", "detail", "writes", "root", "metal", "jean", "existed", "ability", "purple",
187
+ "counsel", "lane", "wives", "sending", "heavily", "leaders", "queer", "tales", "sins", "mexico", "protect", "clock",
188
+ "stuff", "jones", "pine", "records", "cave", "baron", "medical", "pick", "stayed", "magic", "seventy", "pour",
189
+ "saddle", "sank", "dread", "deny", "wire", "rude", "holds", "strain", "autumn", "shed", "shoot", "settle", "basis",
190
+ "readers", "route", "beach", "safely", "oxford", "notion", "thunder", "sale", "saints", "pound", "shock", "elected",
191
+ "signed", "whereas", "maiden", "courts", "rarely", "wolf", "mamma", "billy", "student", "charity", "impulse",
192
+ "tones", "mortal", "raising", "wedding", "belongs", "chest", "sharply", "sounded", "poets", "lawyer", "hugh",
193
+ "plays", "awake", "landing", "debt", "alice", "venture", "idle", "uniform", "contain", "tobacco", "boots", "fears",
194
+ "leaned", "studies", "customs", "prize", "stir", "obey", "oath", "badly", "pursuit", "resting",
195
195
  ];
196
196
 
197
197
  export function generatePassword(wordCount: number): string {
@@ -493,6 +493,7 @@ export function startRemoteFileServer(options: RemoteFileServerOptions): Promise
493
493
  ws.send(Buffer.concat([len, h, body || EMPTY]));
494
494
  };
495
495
  void (async () => {
496
+ // TODO: Fix this code. It's some of the worst code I've ever seen. All the try-catches are bad. There should just be a single try-catch. The comparisons are bad. They're pretending like null can exist in places when it can't. We're using the any type for no reason.
496
497
  let header: any;
497
498
  let body: Buffer;
498
499
  try {
@@ -608,9 +609,7 @@ export async function autocompactBulkDatabases(root: string): Promise<void> {
608
609
  } catch { continue; } // no bulkDatabases2 here
609
610
  for (const name of names) {
610
611
  try {
611
- const t = Date.now();
612
- const res = await getCompactor(baseDir, name).tryMergeNow();
613
- if (res.merged) console.log(` [autocompact] ${name}: merged (${Date.now() - t}ms)`);
612
+ await getCompactor(baseDir, name).tryMergeNow();
614
613
  } catch (e) {
615
614
  console.warn(` [autocompact] ${name}: failed — ${(e as Error).message}`);
616
615
  }