@onlyworlds/sdk 4.70.0 → 4.72.0
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/AGENTS.md +9 -2
- package/CHANGELOG.md +28 -0
- package/README.md +5 -1
- package/SCHEMA.md +1 -1
- package/dist/index.d.ts +70 -10
- package/dist/index.js +161 -5
- package/package.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# For AI agents using @onlyworlds/sdk
|
|
2
2
|
|
|
3
|
-
**Current as of**: SDK **4.x** · schema-dist **v0.33.0-dist.
|
|
3
|
+
**Current as of**: SDK **4.x** · schema-dist **v0.33.0-dist.57** (canonical 00.33.00).
|
|
4
4
|
This line is asserted by `codegen:check` in CI — if the pin moves and this file is not
|
|
5
5
|
re-read against it, the check fails rather than letting this document rot quietly.
|
|
6
6
|
|
|
@@ -56,6 +56,11 @@ against live data). The v1 surface (`OnlyWorldsClient`, the `ElementType` enum)
|
|
|
56
56
|
account's daily token rating (`tokens_remaining`, `token_rating`; `remaining` counts answers of
|
|
57
57
|
this size still in it); used up → `err.isQuotaExceeded`. `isAskUnavailable`, `isAskFailed`
|
|
58
58
|
count nothing. Custom fields (`x_*`) are in the lookup and the context; `atlas_*` is not.
|
|
59
|
+
Since 4.72.0 `buildAskContext` leaves proposed (`x_review_proposed` not absent or null), hidden
|
|
60
|
+
(`hidden` not absent, null or false) and room elements out unless asked
|
|
61
|
+
(`{ includeProposed, includeHidden, includeRoom }`), lists their ids in `leftOut.proposed`,
|
|
62
|
+
`.hidden`, `.room` (hidden and proposed: under `hidden` only), and labels a proposed element it
|
|
63
|
+
sends `[proposed, not yet reviewed]` on its first line; say how many were held back.
|
|
59
64
|
- Sort (since 4.18.0, account token): `account.sort({ worldId, notes, slice })` turns unsorted
|
|
60
65
|
notes (text, or a picture already uploaded into the world) into rows to review: `make`,
|
|
61
66
|
`add_to`, `link`, `ask`, plus `not_proposed` with reasons. Ids come only from your `slice`
|
|
@@ -96,7 +101,9 @@ against live data). The v1 surface (`OnlyWorldsClient`, the `ElementType` enum)
|
|
|
96
101
|
`writeWorldFile(files, topDir, { includePrivateRecords: true })` (since 4.63.0; OW-8).
|
|
97
102
|
Element files marked `hidden: true` travel by default (a copy); a share passes
|
|
98
103
|
`{ includeHidden: false, report: r => r.hiddenLeftOut }` to leave them out whole and count
|
|
99
|
-
them (since 4.70.0; §4.8).
|
|
104
|
+
them (since 4.70.0; §4.8). Two names are one after OW-18's fold: NFC, then simple case
|
|
105
|
+
folding, both Unicode 15.1's from its own files (`nfc` since 4.71.0, `simpleCaseFold`), never
|
|
106
|
+
the runtime's `normalize`, whose Unicode is its ICU's (Node 22: 16.0).
|
|
100
107
|
- World calendars (since 4.20.0): `worldCalendars(elements)` finds the elements carrying
|
|
101
108
|
`atlas_calendar` (Atlas owns the field: read it, never write it); `resolveCalendarLens` picks
|
|
102
109
|
one; `formatStep(config, step)` names a point on the world's integer time line, `parseDate`
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,34 @@ earlier history lives in git log only.
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [4.72.0] - 2026-10-24
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **`buildAskContext` now leaves proposed, hidden and room elements out of the context unless asked.** A caller that passes such elements gets fewer items in `context` and `kept` than before: an element whose `x_review_proposed` is anything but absent or null (the review profile, rules 1 and 4: a value that is not a proper mark is a doubt and counts as proposed), one whose `hidden` is anything but absent, null or false (folder format §4.8, the same test as `writeWorldFile`'s `includeHidden`), and a room element (`isRoomElement`, the room profile, rules 1 and 4) are not sent. Their ids come back in the new `leftOut: { proposed, hidden, room }`, in the order given, so a tool can say how many it held back. An element carrying more than one mark is listed once, in the first of hidden, proposed, room whose option is off: a hidden proposed element is under `hidden`, so `includeProposed` alone never sends it. A sent element's link to an element a mark leaves out, anywhere in the index, reads as "not present in the world data", never by its name. `dropped` keeps its meaning (the 8 items and the 12,000 characters), counted over what remains. Until now the SDK relied on the caller (Lantern) to filter first; the rules bind the exported function itself.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- **`buildAskContext(items, index, { includeProposed, includeHidden, includeRoom })`**, each default false: true sends that kind again. A proposed element sent carries the review profile's label on its first line, `[proposed, not yet reviewed] Name (type)`, where the AI reading the text sees it. An option that is not a boolean is a TypeError, and an unknown key is refused by name (the options fence, `test/options.test.mjs`). Types `OwAskContextOptions` and `OwAskLeftOut`.
|
|
17
|
+
- **`REVIEW_PROPOSED_LABEL`** (`'proposed, not yet reviewed'`), generated into `types.generated.ts` from rule 1's own sentence in the vendored `profiles/review.md` ("labels each one it keeps **"…"**"); codegen exits 1 if the sentence is missing or occurs twice.
|
|
18
|
+
- **`minted_by: string | null` on `OwWorldLink` and `OwCreatedWorldLink`** (keel PR 215): the membership (its id in GET /api/v2/members) of the co-builder who minted the link over POST /api/v2/links; null for a link the owner made. Served by `createWorldLink` and `listWorldLinks`. No client for `/api/v2/links` itself yet.
|
|
19
|
+
- Tests: each mark left out by default and listed; `hidden` as §4.8 reads it (`"true"` and 1 out, false and null in); a doubt (`"yes"`, `{}`) treated as proposed and labelled when asked, a cleared `null` settled; each `include*` bringing back its own kind only; the label on the first line; a hidden proposed element counted once, under hidden; a kept element's links to a hidden element and from a room element read without their names; the limits over what remains; the fence and the boolean check. Ten mutants, each red on its own test: no proposed filter, no hidden filter, no room filter, no label, a doubt not proposed, proposed checked before hidden, left-out elements counted toward the total, no link view, no option fence, no boolean check.
|
|
20
|
+
|
|
21
|
+
## [4.71.0] - 2026-10-24
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- **`nfc(text)`**: Normalization Form C as Unicode 15.1 defines it, built from Unicode's own `UnicodeData-15.1.0.txt` and `CompositionExclusions-15.1.0.txt` (schema-dist serial 57, OW Council #656), never the runtime's. It is the NFC half of OW-18's fold, beside `simpleCaseFold`, exported so a tool that compares names the way a world file does gets the same answer. This export is why the release is a minor, not 4.70.1.
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- **The world file's name check uses Unicode 15.1's NFC, not the runtime's** (folder spec §4.7, OW-18, ruled at serial 57). `readWorldFile` and `writeWorldFile` folded names with `String.prototype.normalize('NFC')`, which follows the runtime's ICU: Node 22's is Unicode 16.0, which composes 20 code points 15.1 leaves unassigned (Todhri, Tulu-Tigalari, Gurung Khema, Kirat Rai), so a name with U+11383 and one with U+11382 U+113C9 were refused as one name where the spec keeps two, and an older runtime could miss what 15.1 added. Both now fold with `nfc`. Where 15.1 and the runtime both assign a code point, nothing changes (Unicode's normalization stability): the set's 93 cases read the same either way. The tables are `src/nfc-tables.generated.ts`, made by `codegen/nfc_tables.mjs` from the vendored files.
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
|
|
33
|
+
- **Schema repinned to schema-dist `v0.33.0-dist.57`** (commit e21b867; same canonical 00.33.00; no schema file moved, `schema.json` and `presentation.json` unchanged, no generated type changed, `ONLYWORLDS_VERSION` still `'00.33.00'`; generated output moves only its source header and SCHEMA.md's line). Serials 50 to 57: the export fixture's world block is the World whole, with `origin` and `x_names` (50, 51); the review profile's reader rule, a reader that hands a world on leaves proposed elements out unless asked (52, 53); the folder lint takes `hidden` as a folder key (53); the checks profile's list case and reader rules 6 to 8 (54); the spine profile and its fixture (55, 56); the `.owworld` set at 93 zips, eight OW-18 NFC pairs with `UnicodeData-15.1.0.txt` and `CompositionExclusions-15.1.0.txt` beside `CaseFolding-15.1.0.txt` (57). None of the earlier 85 zips moved.
|
|
34
|
+
- Tests: the NFC against the two files for every code point (each composite composed back unless excluded, its mapping to the same NFC, each Hangul syllable from its jamo, each combining class by where ordering puts the mark), against the runtime wherever both assign a code point, and every code point 15.1 leaves unassigned left alone; U+11383 against U+11382 U+113C9 and U+16D68 against U+16D67 U+16D67 accepted as two names. The fixture count is the published 93. Four mutants (the runtime's `normalize` back in the fold, one exclusion dropped from the table, an unstable ordering, no Hangul LV+T), each red on its own line. Checked outside the repo against Unicode's `NormalizationTest-15.1.0.txt`: 19,074 lines, 0 disagreements.
|
|
35
|
+
|
|
8
36
|
## [4.70.0] - 2026-10-23
|
|
9
37
|
|
|
10
38
|
### Added
|
package/README.md
CHANGED
|
@@ -247,11 +247,13 @@ To have an answer written from what you found, OnlyWorlds runs a small AI proxy
|
|
|
247
247
|
|
|
248
248
|
```typescript
|
|
249
249
|
const shown = hits.slice(0, 8); // what your screen lists
|
|
250
|
-
const { context, kept } = buildAskContext(shown, index); // within the proxy's limits; kept = what was sent
|
|
250
|
+
const { context, kept, leftOut } = buildAskContext(shown, index); // within the proxy's limits; kept = what was sent
|
|
251
251
|
const reply = await account.ask({ worldId, question, context }); // account: a client with an ow_a_ token
|
|
252
252
|
reply.answer; // from those elements only, or "The world doesn't say."
|
|
253
253
|
```
|
|
254
254
|
|
|
255
|
+
`buildAskContext` hands world elements to an AI, so it leaves three kinds out unless you ask (since 4.72.0): elements marked proposed (`x_review_proposed` anything but absent or null), elements marked hidden (`hidden` anything but absent, null or false) and room elements (`isRoomElement`). Their ids come back in `leftOut.proposed`, `leftOut.hidden` and `leftOut.room`, so you can say how many were held back; an element both hidden and proposed is listed under `hidden` only. Pass `{ includeProposed: true }`, `{ includeHidden: true }` or `{ includeRoom: true }` to send them; a proposed element sent carries `[proposed, not yet reviewed]` (`REVIEW_PROPOSED_LABEL`) on its first line. A sent element's link to one left out reads as not present, never by its name. `dropped` stays the proxy's limits: past the 8th, or past the 12,000 characters, counted over what remains.
|
|
256
|
+
|
|
255
257
|
The same proxy sorts loose notes into changes for the user to review. Send the elements your own lookup found for them as the `slice`; every id in a row comes from it, and nothing is written until your app applies what the user accepts.
|
|
256
258
|
|
|
257
259
|
```typescript
|
|
@@ -293,6 +295,8 @@ The reader checks every entry before it inflates anything, and refuses the file
|
|
|
293
295
|
| `marker` | a `mimetype` entry with other bytes than `WORLD_FILE_MEDIA_TYPE` (a marker is never required) |
|
|
294
296
|
| `not_a_world`, `more_than_one` | no `world.json` with an `id`, two worlds, or a second `world.json` inside the world (one under `records/` is data) |
|
|
295
297
|
|
|
298
|
+
Two names are one when they match after NFC and then simple case folding, both as Unicode 15.1 defines them, from Unicode's own files built into the package (`nfc`, `simpleCaseFold`), never the runtime's Unicode: every reader, in any browser or Node version, joins the same names.
|
|
299
|
+
|
|
296
300
|
Files beside the world's folder and archive junk (`__MACOSX`, `.DS_Store`) are ignored. The world's OnlyWorlds link and key (`world.json`'s `api`) never travel: both functions remove them. A tool's own folder (`.atlas/` and the like) comes back like any other file; pass `skip: path => …` to leave files out.
|
|
297
301
|
|
|
298
302
|
The writer gives the same bytes for the same files: the `mimetype` marker first, then every entry in the UTF-8 order of its name, stamped 1980-01-01 00:00. It writes `world.json`, `elements/`, `spatial/`, `media/` and `records/`, and leaves any other file out. A tool's dot-folder you hand it travels too, which makes the file a private copy rather than a portable `.owworld`.
|
package/SCHEMA.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# OnlyWorlds Schema Reference
|
|
2
2
|
|
|
3
|
-
**Source**: https://github.com/OnlyWorlds/schema-dist @ **v0.33.0-dist.
|
|
3
|
+
**Source**: https://github.com/OnlyWorlds/schema-dist @ **v0.33.0-dist.57** — canonical schema **00.33.00**, published 2026-10-24.
|
|
4
4
|
|
|
5
5
|
GENERATED from the canonical schema YAML — do not hand-edit (regenerate: `python codegen/generate_types.py`).
|
|
6
6
|
Written for both humans and AI agents reading this package locally.
|
package/dist/index.d.ts
CHANGED
|
@@ -102,6 +102,12 @@ declare const ROOM_PAIRS: ReadonlyArray<{
|
|
|
102
102
|
readonly type: ElementType;
|
|
103
103
|
readonly supertype: string;
|
|
104
104
|
}>;
|
|
105
|
+
/** The review profile's label (schema-dist `profiles/review.md`, rule 1): the words a reader that
|
|
106
|
+
* hands a world on (a context for an AI, a pack, a share) puts on each proposed element it keeps,
|
|
107
|
+
* one whose `x_review_proposed` is anything but absent or null (a doubt, rule 4, included).
|
|
108
|
+
* buildAskContext writes it on the element's first line. Source: rule 1's own sentence, read at
|
|
109
|
+
* codegen. */
|
|
110
|
+
declare const REVIEW_PROPOSED_LABEL: "proposed, not yet reviewed";
|
|
105
111
|
/** Field type definitions for OnlyWorlds elements. */
|
|
106
112
|
type FieldType = 'text' | 'integer'
|
|
107
113
|
/**
|
|
@@ -2635,6 +2641,8 @@ interface OwWorldLink {
|
|
|
2635
2641
|
uses: number;
|
|
2636
2642
|
/** A table is `pending` while `uses < max_uses` (and neither revoked nor expired), `used` once full. */
|
|
2637
2643
|
status: 'pending' | 'used' | 'revoked' | 'expired';
|
|
2644
|
+
/** The membership (its id in GET /api/v2/members) of the co-builder who minted the link over POST /api/v2/links; null for a link the owner made (keel PR 215). */
|
|
2645
|
+
minted_by: string | null;
|
|
2638
2646
|
/** Whether the link shows the world's name and picture when it is pasted into a chat (keel #422): then the link is `/join/<world_id>#<code>`, else `/join#<code>`. Never on an agent link. */
|
|
2639
2647
|
preview?: boolean;
|
|
2640
2648
|
/** A player link only: the Character the player reads as; null while a link for a fresh Character is unused, and always null on a table. `name` is null if that Character was deleted (the redeem then makes a fresh one). */
|
|
@@ -4285,7 +4293,7 @@ declare class OwV2Client {
|
|
|
4285
4293
|
/**
|
|
4286
4294
|
* POST /account/ask -- a question about a world the account owns or is in, answered by
|
|
4287
4295
|
* keel's AI proxy from `context` only (build it with buildAskContext from the elements
|
|
4288
|
-
* the user sees). The answer is "The world doesn't say." when the context does not hold
|
|
4296
|
+
* the user sees; it leaves proposed, hidden and room elements out unless asked). The answer is "The world doesn't say." when the context does not hold
|
|
4289
4297
|
* it. Needs the client's `ow_a_` token (a world key is a TypeError before sending).
|
|
4290
4298
|
* Refusals: 429 `quota_exceeded` (`err.isQuotaExceeded`, the account's token rating used up for the day;
|
|
4291
4299
|
* Retry-After runs to midnight UTC), 503 `ask_unavailable` (`err.isAskUnavailable`:
|
|
@@ -4536,7 +4544,8 @@ declare function typeWord(world: object | null | undefined, type: string, opts?:
|
|
|
4536
4544
|
* - `method` (OW-21): encrypted, or a method other than stored or deflate.
|
|
4537
4545
|
* - `name` (OW-22): a Windows device name, a trailing dot or space, one of
|
|
4538
4546
|
* `<>:"|?*` or a control character, a non-ASCII name without the UTF-8 flag.
|
|
4539
|
-
* - `duplicate` (OW-17), `collision` (OW-18: NFC, then simple case folding
|
|
4547
|
+
* - `duplicate` (OW-17), `collision` (OW-18: NFC, then simple case folding,
|
|
4548
|
+
* both Unicode 15.1's from its own files, never the runtime's).
|
|
4540
4549
|
* - `too_many`, `too_big` (OW-14, OW-15): past the budget by count or declared
|
|
4541
4550
|
* size, or an entry that inflates past the size it declares.
|
|
4542
4551
|
* - `marker` (OW-6): a root `mimetype` entry with other bytes than the media
|
|
@@ -4663,6 +4672,15 @@ interface OwWriteWorldFileReport {
|
|
|
4663
4672
|
*/
|
|
4664
4673
|
declare function writeWorldFile(files: OwWorldFileEntry[], topDir: string, opts?: OwWriteWorldFileOptions): Uint8Array;
|
|
4665
4674
|
|
|
4675
|
+
/**
|
|
4676
|
+
* Normalization Form C as Unicode 15.1's files define it (UAX #15:
|
|
4677
|
+
* canonical decomposition, canonical ordering, canonical composition), the
|
|
4678
|
+
* NFC OW-18 folds names with before simple case folding. A code point 15.1
|
|
4679
|
+
* leaves unassigned is left as it is, whatever the runtime's Unicode knows.
|
|
4680
|
+
* Lone surrogates pass through.
|
|
4681
|
+
*/
|
|
4682
|
+
declare function nfc(text: string): string;
|
|
4683
|
+
|
|
4666
4684
|
/**
|
|
4667
4685
|
* World lookup: find the elements a plain-language question is about, in a
|
|
4668
4686
|
* world held in memory, with no model and no network. Ported from Assembly's
|
|
@@ -4804,11 +4822,20 @@ declare function renderElement<T extends OwLookupElement>(element: T, index: OwW
|
|
|
4804
4822
|
* the answer's sources are what the user saw, never a second lookup's.
|
|
4805
4823
|
*
|
|
4806
4824
|
* const hits = lookupWorld(index, question).slice(0, 8); // what the screen lists
|
|
4807
|
-
* const { context, kept } = buildAskContext(hits, index);
|
|
4825
|
+
* const { context, kept, leftOut } = buildAskContext(hits, index);
|
|
4808
4826
|
* const reply = await account.ask({ worldId, question, context });
|
|
4809
4827
|
*
|
|
4828
|
+
* It is a reader that hands a world on, so three published rules hold here, not only in
|
|
4829
|
+
* the caller: an element marked proposed (the review profile, rules 1 and 4: any
|
|
4830
|
+
* `x_review_proposed` but absent or null, a doubt included), one marked hidden (folder
|
|
4831
|
+
* format §4.8: a `hidden` but absent, null or false) and a room element (the room
|
|
4832
|
+
* profile, rules 1 and 4: `isRoomElement`) are left out unless asked for, and listed in
|
|
4833
|
+
* `leftOut`. A kept proposed element carries REVIEW_PROPOSED_LABEL on its first line. A
|
|
4834
|
+
* kept element's link to one left out reads as not present, never by its name.
|
|
4835
|
+
*
|
|
4810
4836
|
* The limits are keel's (accounts/ask.py), counted the way keel counts (characters,
|
|
4811
|
-
* not UTF-16 units): at most 8 items, 2,000 characters each, 12,000 in all.
|
|
4837
|
+
* not UTF-16 units): at most 8 items, 2,000 characters each, 12,000 in all. They apply
|
|
4838
|
+
* to what remains after the three rules.
|
|
4812
4839
|
*/
|
|
4813
4840
|
|
|
4814
4841
|
/** keel's limits on one ask. */
|
|
@@ -4818,23 +4845,56 @@ declare const ASK_LIMITS: {
|
|
|
4818
4845
|
readonly itemMax: 2000;
|
|
4819
4846
|
readonly totalMax: 12000;
|
|
4820
4847
|
};
|
|
4848
|
+
interface OwAskContextOptions {
|
|
4849
|
+
/**
|
|
4850
|
+
* Send proposed elements: those whose `x_review_proposed` is anything but absent or null
|
|
4851
|
+
* (the review profile; a value that is not a proper mark is a doubt, rule 4, and counts as
|
|
4852
|
+
* proposed). Each one sent carries REVIEW_PROPOSED_LABEL on its first line. Default false:
|
|
4853
|
+
* left out and listed in `leftOut.proposed`.
|
|
4854
|
+
*/
|
|
4855
|
+
includeProposed?: boolean;
|
|
4856
|
+
/**
|
|
4857
|
+
* Send elements marked hidden: a `hidden` that is anything but absent, null or false (folder
|
|
4858
|
+
* format §4.8, the same test as writeWorldFile's `includeHidden`). Default false: left out and
|
|
4859
|
+
* listed in `leftOut.hidden`.
|
|
4860
|
+
*/
|
|
4861
|
+
includeHidden?: boolean;
|
|
4862
|
+
/** Send room elements (`isRoomElement`, the room profile). Default false: left out and listed in `leftOut.room`. */
|
|
4863
|
+
includeRoom?: boolean;
|
|
4864
|
+
}
|
|
4865
|
+
/** Ids left out by a mark, in the order given. An element carrying several marks is listed once, in the first of hidden, proposed, room whose `include*` is off. */
|
|
4866
|
+
interface OwAskLeftOut {
|
|
4867
|
+
proposed: string[];
|
|
4868
|
+
hidden: string[];
|
|
4869
|
+
room: string[];
|
|
4870
|
+
}
|
|
4821
4871
|
interface OwAskContext {
|
|
4822
4872
|
/** The texts to send as `context`, in the order given. */
|
|
4823
4873
|
context: string[];
|
|
4824
4874
|
/** Ids of the elements sent, in order (one per `context` item). */
|
|
4825
4875
|
kept: string[];
|
|
4826
|
-
/** Ids of the elements left out: past the 8th, or from the first one the 12,000 total could not hold. */
|
|
4876
|
+
/** Ids of the elements the limits left out: past the 8th, or from the first one the 12,000 total could not hold. Never an element `leftOut` holds. */
|
|
4827
4877
|
dropped: string[];
|
|
4828
4878
|
/** Ids among `kept` whose text was cut to 2,000 characters. */
|
|
4829
4879
|
truncated: string[];
|
|
4880
|
+
/** Ids of the elements a mark left out (proposed, hidden, room), before the limits were counted. */
|
|
4881
|
+
leftOut: OwAskLeftOut;
|
|
4830
4882
|
}
|
|
4831
4883
|
/**
|
|
4832
4884
|
* Turn the elements on screen into the proxy's `context`. Takes lookup hits or plain
|
|
4833
|
-
* elements
|
|
4834
|
-
*
|
|
4835
|
-
*
|
|
4885
|
+
* elements and keeps their order. First the three marks: an element marked hidden
|
|
4886
|
+
* (§4.8), proposed (the review profile, a doubt included) or a room element (the room
|
|
4887
|
+
* profile) is left out unless its `include*` option is true, and its id goes to
|
|
4888
|
+
* `leftOut` (one bucket each, in the order hidden, proposed, room: a hidden proposed
|
|
4889
|
+
* element is listed under `hidden` only, since the owner's hide is the stronger
|
|
4890
|
+
* withholding and `includeProposed` alone never sends it). Then each remaining element
|
|
4891
|
+
* is rendered with `renderElement` (a proposed one with REVIEW_PROPOSED_LABEL on its
|
|
4892
|
+
* first line; a link to an element a mark leaves out, anywhere in the index, reads as
|
|
4893
|
+
* not present), a text over 2,000 characters is cut, and the list stops at the 8th or
|
|
4894
|
+
* at the first the 12,000 total cannot hold, so what is sent is always the top of the
|
|
4895
|
+
* list as shown. An unknown option, or one that is not a boolean, is a TypeError.
|
|
4836
4896
|
*/
|
|
4837
|
-
declare function buildAskContext<T extends OwLookupElement>(items: Array<OwLookupHit<T> | T>, index: OwWorldIndex<T
|
|
4897
|
+
declare function buildAskContext<T extends OwLookupElement>(items: Array<OwLookupHit<T> | T>, index: OwWorldIndex<T>, opts?: OwAskContextOptions): OwAskContext;
|
|
4838
4898
|
|
|
4839
4899
|
/**
|
|
4840
4900
|
* Photo preparation: make a picture from a phone's camera or files ready for
|
|
@@ -5473,4 +5533,4 @@ declare class TokenResource {
|
|
|
5473
5533
|
getEncryptionInfo(): Promise<EncryptionInfo>;
|
|
5474
5534
|
}
|
|
5475
5535
|
|
|
5476
|
-
export { AGENT_DOORS, ASK_LIMITS, type AccessKeyResponse, CALENDAR_FIELD, CALENDAR_SUPERTYPE, type CalendarConfig, type CalendarEra, type CalendarIntercalary, type CalendarMonths, type CalendarWeek, ELEMENT_FAMILIES, ELEMENT_ICONS, ELEMENT_LABELS, ELEMENT_SECTIONS, ELEMENT_TYPES, type ElementFamily, type ElementType, type EncryptionInfo, type EraDomain, FAMILY_COLORS, FAMILY_ORDER, FIELD_ACRONYMS, FIELD_SCHEMA, FILE_EXTENSIONS, type FieldInfo, type FieldType, GameTier, type ListParams, ONLYWORLDS_VERSION, type OwAccountWorld, type OwAgentJoined, type OwAllowance, OwApiError, type OwAskAnswer, type OwAskContext, type OwAuthErrorCode, type OwBulkItem, type OwBulkItemResult, type OwBulkResponse, type OwCalendarElement, type OwChange, type OwChangeDelete, type OwChangeUpsert, type OwChangesPage, type OwClientConfig, type OwCreateAccountWorldInput, type OwCreatedAccountWorld, type OwCreatedWorldLink, type OwDeleteReason, type OwDraught, type OwDraughtCompact, type OwDraughtComponent, type OwDraughtItem, type OwDraughtPolicy, type OwElement, type OwElementBase, type OwErrorBody, type OwFileAddedBy, type OwFileDownload, type OwFileKind, type OwFileRow, type OwFileTicket, type OwFrontDoor, type OwHiddenRow, type OwJoinPreview, type OwJoined, type OwJoinedMembership, type OwKeyKind, type OwLinkEdit, type OwLookupElement, type OwLookupHit, type OwLookupLink, type OwLookupOptions, type OwLookupReason, type OwMe, type OwMediaTicket, type OwMember, type OwMemberRole, type OwMintedKey, type OwNamesMap, OwNetworkError, type OwPage, type OwPhotoOptions, type OwPhotoPlan, type OwPlayerJoined, OwPreconditionFailedError, type OwPreparedPhoto, type OwProposal, type OwProposalAccepted, type OwProposalConflict, type OwProposalList, type OwProposalQuery, type OwProposalState, type OwProposeInput, type OwProposed, OwProposedError, type OwProposedNewElement, type OwReadWorldFile, type OwReadWorldFileOptions, type OwRemovalTicket, type OwRemovedImage, type OwRenderOptions, type OwResyncReason, type OwReviewInput, type OwReviewed, type OwSeat, type OwSeatCreated, type OwSignInBegin, type OwSignInBegun, type OwSignInComplete, OwSignInError, type OwSignInReason, type OwSignInResult, type OwSignInStorage, type OwSignedIn, type OwSortAddToRow, type OwSortAnswer, type OwSortAskRow, type OwSortLinkRow, type OwSortMakeRow, type OwSortNote, type OwSortRef, type OwSortRow, OwStaleProposalError, type OwUploadedFile, type OwUploadedImage, OwV2Client, type OwWordPair, type OwWorldFileEntry, OwWorldFileError, type OwWorldFileReason, type OwWorldFileRow, type OwWorldFiles, type OwWorldIndex, type OwWorldLink, type OwWorldMeta, type OwWorldOrigin, type OwWorldProducer, type OwWorldProposalList, type OwWorldProposalQuery, type OwWorldProposalRow, type OwWorldPublicPage, type OwWorldSource, type OwWriteDoor, type OwWriteWorldFileOptions, type OwWriteWorldFileReport, PHOTO_MAX_BYTES, PHOTO_TYPES, PUBLIC_FIELDS, type ParseError, type ParseOptions, type ParseResult, ROOM_PAIRS, type RevokeAllSessionsResponse, type RevokeSessionResponse, SPATIAL_TYPES, type SectionInfo, type StepBreakdown, type TokenConsumeParams, type TokenConsumeResponse, TokenResource, type TokenStatus, type TokenTransport, WORLD_FILE_MAX_BYTES, WORLD_FILE_MAX_ENTRIES, WORLD_FILE_MEDIA_TYPE, type WorldCalendar, absYearForEraYear, absoluteYear, approxYearLength, base64url, breakdownStep, buildAskContext, buildWorldIndex, detectKeyKind, displayYear, elementColor, eraForStep, errorFromResponse, familyOf, fieldLabel, fileKindOf, floorDiv, floorMod, formatDuration, formatMidLabel, formatStep, formatYearLabel, getElementIcon, getElementLabel, isAgentDoor, isDemoKey, isKnownOf, isLeapYear, isParseError, isRoomElement, kindCanWrite, lookupWorld, monthStartSteps, parseDate, parseErrorEnvelope, pinExpectation, pkceChallenge, planPhoto, preparePhoto, readCalendarConfig, readCalendarValue, readWorldFile, renderElement, resolveCalendarLens, resolveEraDomains, simpleCaseFold, typeWord, validateCalendarConfig, weekdayForStep, worldCalendars, writeWorldFile, yearLength, yearStartStep };
|
|
5536
|
+
export { AGENT_DOORS, ASK_LIMITS, type AccessKeyResponse, CALENDAR_FIELD, CALENDAR_SUPERTYPE, type CalendarConfig, type CalendarEra, type CalendarIntercalary, type CalendarMonths, type CalendarWeek, ELEMENT_FAMILIES, ELEMENT_ICONS, ELEMENT_LABELS, ELEMENT_SECTIONS, ELEMENT_TYPES, type ElementFamily, type ElementType, type EncryptionInfo, type EraDomain, FAMILY_COLORS, FAMILY_ORDER, FIELD_ACRONYMS, FIELD_SCHEMA, FILE_EXTENSIONS, type FieldInfo, type FieldType, GameTier, type ListParams, ONLYWORLDS_VERSION, type OwAccountWorld, type OwAgentJoined, type OwAllowance, OwApiError, type OwAskAnswer, type OwAskContext, type OwAskContextOptions, type OwAskLeftOut, type OwAuthErrorCode, type OwBulkItem, type OwBulkItemResult, type OwBulkResponse, type OwCalendarElement, type OwChange, type OwChangeDelete, type OwChangeUpsert, type OwChangesPage, type OwClientConfig, type OwCreateAccountWorldInput, type OwCreatedAccountWorld, type OwCreatedWorldLink, type OwDeleteReason, type OwDraught, type OwDraughtCompact, type OwDraughtComponent, type OwDraughtItem, type OwDraughtPolicy, type OwElement, type OwElementBase, type OwErrorBody, type OwFileAddedBy, type OwFileDownload, type OwFileKind, type OwFileRow, type OwFileTicket, type OwFrontDoor, type OwHiddenRow, type OwJoinPreview, type OwJoined, type OwJoinedMembership, type OwKeyKind, type OwLinkEdit, type OwLookupElement, type OwLookupHit, type OwLookupLink, type OwLookupOptions, type OwLookupReason, type OwMe, type OwMediaTicket, type OwMember, type OwMemberRole, type OwMintedKey, type OwNamesMap, OwNetworkError, type OwPage, type OwPhotoOptions, type OwPhotoPlan, type OwPlayerJoined, OwPreconditionFailedError, type OwPreparedPhoto, type OwProposal, type OwProposalAccepted, type OwProposalConflict, type OwProposalList, type OwProposalQuery, type OwProposalState, type OwProposeInput, type OwProposed, OwProposedError, type OwProposedNewElement, type OwReadWorldFile, type OwReadWorldFileOptions, type OwRemovalTicket, type OwRemovedImage, type OwRenderOptions, type OwResyncReason, type OwReviewInput, type OwReviewed, type OwSeat, type OwSeatCreated, type OwSignInBegin, type OwSignInBegun, type OwSignInComplete, OwSignInError, type OwSignInReason, type OwSignInResult, type OwSignInStorage, type OwSignedIn, type OwSortAddToRow, type OwSortAnswer, type OwSortAskRow, type OwSortLinkRow, type OwSortMakeRow, type OwSortNote, type OwSortRef, type OwSortRow, OwStaleProposalError, type OwUploadedFile, type OwUploadedImage, OwV2Client, type OwWordPair, type OwWorldFileEntry, OwWorldFileError, type OwWorldFileReason, type OwWorldFileRow, type OwWorldFiles, type OwWorldIndex, type OwWorldLink, type OwWorldMeta, type OwWorldOrigin, type OwWorldProducer, type OwWorldProposalList, type OwWorldProposalQuery, type OwWorldProposalRow, type OwWorldPublicPage, type OwWorldSource, type OwWriteDoor, type OwWriteWorldFileOptions, type OwWriteWorldFileReport, PHOTO_MAX_BYTES, PHOTO_TYPES, PUBLIC_FIELDS, type ParseError, type ParseOptions, type ParseResult, REVIEW_PROPOSED_LABEL, ROOM_PAIRS, type RevokeAllSessionsResponse, type RevokeSessionResponse, SPATIAL_TYPES, type SectionInfo, type StepBreakdown, type TokenConsumeParams, type TokenConsumeResponse, TokenResource, type TokenStatus, type TokenTransport, WORLD_FILE_MAX_BYTES, WORLD_FILE_MAX_ENTRIES, WORLD_FILE_MEDIA_TYPE, type WorldCalendar, absYearForEraYear, absoluteYear, approxYearLength, base64url, breakdownStep, buildAskContext, buildWorldIndex, detectKeyKind, displayYear, elementColor, eraForStep, errorFromResponse, familyOf, fieldLabel, fileKindOf, floorDiv, floorMod, formatDuration, formatMidLabel, formatStep, formatYearLabel, getElementIcon, getElementLabel, isAgentDoor, isDemoKey, isKnownOf, isLeapYear, isParseError, isRoomElement, kindCanWrite, lookupWorld, monthStartSteps, nfc, parseDate, parseErrorEnvelope, pinExpectation, pkceChallenge, planPhoto, preparePhoto, readCalendarConfig, readCalendarValue, readWorldFile, renderElement, resolveCalendarLens, resolveEraDomains, simpleCaseFold, typeWord, validateCalendarConfig, weekdayForStep, worldCalendars, writeWorldFile, yearLength, yearStartStep };
|
package/dist/index.js
CHANGED
|
@@ -1746,7 +1746,7 @@ var OwV2Client = class {
|
|
|
1746
1746
|
/**
|
|
1747
1747
|
* POST /account/ask -- a question about a world the account owns or is in, answered by
|
|
1748
1748
|
* keel's AI proxy from `context` only (build it with buildAskContext from the elements
|
|
1749
|
-
* the user sees). The answer is "The world doesn't say." when the context does not hold
|
|
1749
|
+
* the user sees; it leaves proposed, hidden and room elements out unless asked). The answer is "The world doesn't say." when the context does not hold
|
|
1750
1750
|
* it. Needs the client's `ow_a_` token (a world key is a TypeError before sending).
|
|
1751
1751
|
* Refusals: 429 `quota_exceeded` (`err.isQuotaExceeded`, the account's token rating used up for the day;
|
|
1752
1752
|
* Retry-After runs to midnight UTC), 503 `ask_unavailable` (`err.isAskUnavailable`:
|
|
@@ -2244,6 +2244,7 @@ var ROOM_PAIRS = [
|
|
|
2244
2244
|
{ type: "character", supertype: "Member" }
|
|
2245
2245
|
];
|
|
2246
2246
|
var ROOM_MARK = "x_room_of";
|
|
2247
|
+
var REVIEW_PROPOSED_LABEL = "proposed, not yet reviewed";
|
|
2247
2248
|
var FIELD_SCHEMA = {
|
|
2248
2249
|
ability: {
|
|
2249
2250
|
// Base fields (shared by all elements)
|
|
@@ -2957,6 +2958,118 @@ function getElementLabel(elementType) {
|
|
|
2957
2958
|
|
|
2958
2959
|
// src/world-file.ts
|
|
2959
2960
|
import { Inflate, inflateSync, zipSync } from "fflate";
|
|
2961
|
+
|
|
2962
|
+
// src/nfc-tables.generated.ts
|
|
2963
|
+
var NFC_CLASS_RUNS = "lc.l.6e,lx..6g,ly.4.64,m2..6g,m3..60,m4.5.64,m9.2.5m,mb.4.64,mf.2.5m,mh.b.64,ms.5.1,mx.4.64,n1.8.6e,n9..6o,na..6e,nb.3.64,ne.3.6e,nh.2.64,nk.3.6e,nn.4.64,nr..6e,ns..6g,nt.2.64,nv..6e,nw..6h,nx.2.6i,nz..6h,o0.2.6i,o2..6h,o3.d.6e,w3.5.6e,13l..64,13m.4.6e,13q..64,13r.3.6e,13u..66,13v..64,13w.6.6e,142.6.64,148.2.6e,14a..64,14b.2.6e,14d..66,14e..6c,14f..6e,14g..a,14h..b,14i..c,14j..d,14k..e,14l..f,14m..g,14n..h,14o..i,14p.2.j,14r..k,14s..l,14t..m,14v..n,14x..o,14y..p,150..6e,151..64,153..i,174.8.6e,17c..u,17d..v,17e..w,18r..r,18s..s,18t..t,18u..u,18v..v,18w..w,18x..x,18y..y,18z.2.6e,191.2.64,193.5.6e,198..64,199.2.6e,19b..64,19s..z,1cm.7.6e,1cv.4.6e,1cz..64,1d0..6e,1d3.2.6e,1d6..64,1d7.2.6e,1d9..64,1e9..10,1f4..6e,1f5..64,1f6.2.6e,1f8..64,1f9.2.6e,1fb.3.64,1fe..6e,1ff.2.64,1fh..6e,1fi..64,1fj.3.6e,1fm..64,1fn..6e,1fo..64,1fp..6e,1fq..64,1fr..6e,1fs..64,1ft.2.6e,1kb.7.6e,1ki..64,1kj..6e,1kt..64,1li.4.6e,1ln.9.6e,1lx.3.6e,1m1.5.6e,1nd.3.64,1p4..6e,1p5.3.64,1p8.4.6e,1qi.5.6e,1qn.5.64,1qs.e.6e,1r7..64,1r8.2.6e,1ra..64,1rb.2.6e,1rd..64,1re.3.6e,1rh.3.64,1rk..r,1rl..s,1rm..t,1rn.3.6e,1rq..64,1rr.2.6e,1rt.2.64,1rv.5.6e,1to..7,1u5..9,1u9..6e,1ua..64,1ub.2.6e,1x8..7,1xp..9,1z2..6e,20s..7,219..9,24c..7,24t..9,27w..7,28d..9,2bx..9,2f0..7,2fh..9,2fp..2c,2fq..2j,2ik..7,2j1..9,2m3.2.9,2ml..9,2q2..9,2t4.2.2v,2t6..9,2tk.4.2z,2wo.2.3a,2wq..9,2x4.4.3e,2zc.2.64,305..64,307..64,309..60,31t..3l,31u..3m,31w..3o,322.4.3m,328..3m,32a.2.6e,32c..9,32e.2.6e,346..64,37b..7,37d.2.9,39p..64,3tp.3.6e,4k4.2.9,4l0..9,4pe..9,4pp..6e,4vd..6c,4zd..66,4ze..6e,4zf..64,55j..6e,55k..64,57k..9,585.8.6e,58f..64,59s.5.6e,59x.6.64,5a3.2.6e,5a5..64,5a7.2.64,5a9.2.6e,5ab.2.64,5ad.5.6e,5ai..64,5aj.4.6e,5dg..7,5dw..9,5ez..6e,5f0..64,5f1.7.6e,5gq.2.9,5ie..7,5iq.2.9,5kn..7,5ow.3.6e,5p0..1,5p1.5.64,5p6.2.6e,5p8.4.64,5pc..6e,5pe.7.1,5pp..64,5pw..6e,5q0.2.6e,5vk.2.6e,5vm..64,5vn.7.6e,5vu..64,5vv.2.6e,5vx..6i,5vy..5y,5vz..64,5w0..5m,5w1.11.6e,5x2..6g,5x3.2.6c,5x5..64,5x6..62,5x7..6e,5x8..6h,5x9..64,5xa..6e,5xb..64,6hc.2.6e,6he.2.1,6hg.4.6e,6hk.3.1,6hn.2.6e,6ht..6e,6hx.2.1,6hz..6e,6i0..64,6i1..6e,6i2.2.1,6i4.4.64,6i8..6e,8vj.3.6e,8zj..9,928.w.6e,9ii..62,9ij..6c,9ik..6g,9il..66,9im.2.68,9ll.2.8,wvj..6e,wvo.a.6e,wwu.2.6e,wz4.2.6e,x6u..9,x7w..9,xc4..9,xcw.i.6e,xez.3.64,xg3..9,xir..7,xj4..9,xps..6e,xpu.2.6e,xpw..64,xpz.2.6e,xq6.2.6e,xq9..6e,xrq..9,xyl..9,1dlq..q,1e74.7.6e,1e7b.7.64,1e7i.2.6e,1eyl..64,1f4w..64,1f92.5.6e,1gjx..64,1gjz..6e,1gl4..6e,1gl5..1,1gl6..64,1glb..9,1gpx..6e,1gpy..64,1h5w.4.6e,1hgr.2.6e,1hj1.3.64,1hl2.2.64,1hl4.3.6e,1hl7..64,1hl8..6e,1hl9.4.64,1hmq..6e,1hmr..64,1hms..6e,1hmt..64,1hs6..9,1htc..9,1htr..9,1hvd..9,1hve..7,1hxc.3.6e,1hyr.2.9,1i0j..7,1i2o..9,1i2y..7,1i5x..9,1i5y..7,1iax..7,1iay..9,1id7.2.7,1idp..9,1iee.7.6e,1ieo.5.6e,1iki..9,1ikm..7,1ila..6e,1io2..9,1io3..7,1iv3..9,1iv4..7,1iyn..9,1j1y..9,1j1z..7,1j57..9,1jcp..9,1jcq..7,1jjx.2.9,1jk3..7,1jog..9,1jqs..9,1jrb..9,1jtl..9,1k5b..9,1kci..7,1kck.2.9,1kev..9,1kqp.2.9,1zow.5.1,1zqo.7.6e,20og.2.6,2ftq..1,2jxh.2.60,2jxj.3.1,2jxp..6a,2jxq.5.60,2jy3.8.64,2jyd.5.6e,2jyi.2.64,2jze.4.6e,2k3m.3.6e,2mtc.7.6e,2mtk.h.6e,2mu3.7.6e,2mub.2.6e,2mue.5.6e,2mxb..6e,2n1s.7.6e,2nce..6e,2ne4.4.6e,2nsc.2.6g,2nse..64,2nsf..6e,2ok0.7.64,2on8.6.6e,2one..7";
|
|
2964
|
+
var NFC_DECOMP = "5c.1t.lc,1.1t.ld,1.1t.le,1.1t.lf,1.1t.lk,1.1t.lm,2.1v.mf,1.1x.lc,1.1x.ld,1.1x.le,1.1x.lk,1.21.lc,1.21.ld,1.21.le,1.21.lk,2.26.lf,1.27.lc,1.27.ld,1.27.le,1.27.lf,1.27.lk,3.2d.lc,1.2d.ld,1.2d.le,1.2d.lk,1.2h.ld,3.2p.lc,1.2p.ld,1.2p.le,1.2p.lf,1.2p.lk,1.2p.lm,2.2r.mf,1.2t.lc,1.2t.ld,1.2t.le,1.2t.lk,1.2x.lc,1.2x.ld,1.2x.le,1.2x.lk,2.32.lf,1.33.lc,1.33.ld,1.33.le,1.33.lf,1.33.lk,3.39.lc,1.39.ld,1.39.le,1.39.lk,1.3d.ld,2.3d.lk,1.1t.lg,1.2p.lg,1.1t.li,1.2p.li,1.1t.mg,1.2p.mg,1.1v.ld,1.2r.ld,1.1v.le,1.2r.le,1.1v.lj,1.2r.lj,1.1v.lo,1.2r.lo,1.1w.lo,1.2s.lo,3.1x.lg,1.2t.lg,1.1x.li,1.2t.li,1.1x.lj,1.2t.lj,1.1x.mg,1.2t.mg,1.1x.lo,1.2t.lo,1.1z.le,1.2v.le,1.1z.li,1.2v.li,1.1z.lj,1.2v.lj,1.1z.mf,1.2v.mf,1.20.le,1.2w.le,3.21.lf,1.2x.lf,1.21.lg,1.2x.lg,1.21.li,1.2x.li,1.21.mg,1.2x.mg,1.21.lj,4.22.le,1.2y.le,1.23.mf,1.2z.mf,2.24.ld,1.30.ld,1.24.mf,1.30.mf,1.24.lo,1.30.lo,5.26.ld,1.32.ld,1.26.mf,1.32.mf,1.26.lo,1.32.lo,4.27.lg,1.33.lg,1.27.li,1.33.li,1.27.ln,1.33.ln,3.2a.ld,1.36.ld,1.2a.mf,1.36.mf,1.2a.lo,1.36.lo,1.2b.ld,1.37.ld,1.2b.le,1.37.le,1.2b.mf,1.37.mf,1.2b.lo,1.37.lo,1.2c.mf,1.38.mf,1.2c.lo,1.38.lo,3.2d.lf,1.39.lf,1.2d.lg,1.39.lg,1.2d.li,1.39.li,1.2d.lm,1.39.lm,1.2d.ln,1.39.ln,1.2d.mg,1.39.mg,1.2f.le,1.3b.le,1.2h.le,1.3d.le,1.2h.lk,1.2i.ld,1.3e.ld,1.2i.lj,1.3e.lj,1.2i.lo,1.3e.lo,y.27.m3,1.33.m3,e.2d.m3,1.39.m3,t.1t.lo,1.2p.lo,1.21.lo,1.2x.lo,1.27.lo,1.33.lo,1.2d.lo,1.39.lo,1.64.lg,1.70.lg,1.64.ld,1.70.ld,1.64.lo,1.70.lo,1.64.lc,1.70.lc,2.5g.lg,1.6c.lg,1.fa.lg,1.fb.lg,1.5i.lg,1.6e.lg,3.1z.lo,1.2v.lo,1.23.lo,1.2z.lo,1.27.mg,1.33.mg,1.dm.lg,1.dn.lg,1.c7.lo,1.ia.lo,1.2y.lo,4.1z.ld,1.2v.ld,3.26.lc,1.32.lc,1.5h.ld,1.6d.ld,1.5i.ld,1.6e.ld,1.60.ld,1.6w.ld,1.1t.lr,1.2p.lr,1.1t.lt,1.2p.lt,1.1x.lr,1.2t.lr,1.1x.lt,1.2t.lt,1.21.lr,1.2x.lr,1.21.lt,1.2x.lt,1.27.lr,1.33.lr,1.27.lt,1.33.lt,1.2a.lr,1.36.lr,1.2a.lt,1.36.lt,1.2d.lr,1.39.lr,1.2d.lt,1.39.lt,1.2b.me,1.37.me,1.2c.me,1.38.me,3.20.lo,1.2w.lo,7.1t.lj,1.2p.lj,1.1x.mf,1.2t.mf,1.5y.lg,1.6u.lg,1.5x.lg,1.6t.lg,1.27.lj,1.33.lj,1.fi.lg,1.fj.lg,1.2h.lg,1.3d.lg,7h.lc,1.ld,2.lv,1.lk.ld,1c.jd,a.1n,7.4o.ld,1.pd.ld,1.53,1.ph.ld,1.pj.ld,1.pl.ld,2.pr.ld,2.px.ld,1.q1.ld,1.qy.ld,q.pl.lk,1.px.lk,1.q9.ld,1.qd.ld,1.qf.ld,1.qh.ld,1.qz.ld,q.qh.lk,1.qt.lk,1.qn.ld,1.qt.ld,1.qx.ld,5.r6.ld,1.r6.lk,18.t1.lc,1.t1.lk,2.sz.ld,4.sm.lk,5.t6.ld,1.t4.lc,1.tf.li,b.t4.li,w.u0.li,n.tx.lc,1.tx.lk,2.tv.ld,4.uu.lk,5.u2.ld,1.u0.lc,1.ub.li,o.vo.lr,1.vp.lr,22.t2.li,1.ty.li,e.sw.li,1.ts.li,1.sw.lk,1.ts.lk,3.t1.li,1.tx.li,3.yg.lk,1.yh.lk,1.t2.lk,1.ty.lk,1.t3.lk,1.tz.lk,3.t4.lg,1.u0.lg,1.t4.lk,1.u0.lk,1.ta.lk,1.u6.lk,3.yw.lk,1.yx.lk,1.tp.lk,1.ul.lk,1.tf.lg,1.ub.lg,1.tf.lk,1.ub.lk,1.tf.ln,1.ub.ln,1.tj.lk,1.uf.lk,3.tn.lk,1.uj.lk,89.17r.18z,1.17r.190,1.18o.190,1.17r.191,1.18q.190,4a.1cl.190,2.1c1.190,h.1ci.190,gm.1t4.1to,8.1tc.1to,3.1tf.1to,10.1sl.1to,1.1sm.1to,1.1sn.1to,1.1ss.1to,1.1sx.1to,1.1sy.1to,1.1t7.1to,1.1tb.1to,30.1xj.1xa,1.1xj.1xz,g.1wh.1x8,1.1wi.1x8,2.1wv.1x8,2c.20i.20s,3.20o.20s,z.1zq.20s,1.1zr.20s,1.1zw.20s,3.20b.20s,6i.287.28m,3.287.27y,1.287.28n,g.275.27w,1.276.27w,1j.2aa.2c7,1i.2bq.2bi,1.2br.2bi,1.2bq.2c7,3g.2fa.2fq,3c.2in.2j9,7.2iu.2j9,1.2iu.2ja,2.2iu.2iq,1.2iy.2j9,3j.2me.2m6,1.2mf.2m6,1.2me.2mv,3y.2qh.2q2,2.2qh.2q7,1.2qk.2q2,1.2qh.2qn,9x.30i.33r,a.30s.33r,5.30x.33r,5.312.33r,5.317.33r,d.30g.33p,a.31t.31u,2.31t.31w,1.33m.328,2.33n.328,9.31t.328,i.32q.33r,a.330.33r,5.335.33r,5.33a.33r,5.33f.33r,d.32o.33p,31.36t.372,25c.5c5.5dh,2.5c7.5dh,2.5c9.5dh,2.5cb.5dh,2.5cd.5dh,4.5ch.5dh,15.5dm.5dh,2.5do.5dh,3.5dq.5dh,1.5dr.5dh,2.5du.5dh,jh.1t.md,1.2p.md,1.1u.lj,1.2q.lj,1.1u.mb,1.2q.mb,1.1u.mp,1.2q.mp,1.5j.ld,1.6f.ld,1.1w.lj,1.2s.lj,1.1w.mb,1.2s.mb,1.1w.mp,1.2s.mp,1.1w.mf,1.2s.mf,1.1w.ml,1.2s.ml,1.7m.lc,1.7n.lc,1.7m.ld,1.7n.ld,1.1x.ml,1.2t.ml,1.1x.mo,1.2t.mo,1.fc.li,1.fd.li,1.1y.lj,1.2u.lj,1.1z.lg,1.2v.lg,1.20.lj,1.2w.lj,1.20.mb,1.2w.mb,1.20.lk,1.2w.lk,1.20.mf,1.2w.mf,1.20.mm,1.2w.mm,1.21.mo,1.2x.mo,1.5r.ld,1.6n.ld,1.23.ld,1.2z.ld,1.23.mb,1.2z.mb,1.23.mp,1.2z.mp,1.24.mb,1.30.mb,1.5yu.lg,1.5yv.lg,1.24.mp,1.30.mp,1.24.ml,1.30.ml,1.25.ld,1.31.ld,1.25.lj,1.31.lj,1.25.mb,1.31.mb,1.26.lj,1.32.lj,1.26.mb,1.32.mb,1.26.mp,1.32.mp,1.26.ml,1.32.ml,1.5x.ld,1.6t.ld,1.5x.lk,1.6t.lk,1.98.lc,1.99.lc,1.98.ld,1.99.ld,1.28.ld,1.34.ld,1.28.lj,1.34.lj,1.2a.lj,1.36.lj,1.2a.mb,1.36.mb,1.5zu.lg,1.5zv.lg,1.2a.mp,1.36.mp,1.2b.lj,1.37.lj,1.2b.mb,1.37.mb,1.9m.lj,1.9n.lj,1.9s.lj,1.9t.lj,1.602.lj,1.603.lj,1.2c.lj,1.38.lj,1.2c.mb,1.38.mb,1.2c.mp,1.38.mp,1.2c.ml,1.38.ml,1.2d.mc,1.39.mc,1.2d.mo,1.39.mo,1.2d.ml,1.39.ml,1.a0.ld,1.a1.ld,1.a2.lk,1.a3.lk,1.2e.lf,1.3a.lf,1.2e.mb,1.3a.mb,1.2f.lc,1.3b.lc,1.2f.ld,1.3b.ld,1.2f.lk,1.3b.lk,1.2f.lj,1.3b.lj,1.2f.mb,1.3b.mb,1.2g.lj,1.3c.lj,1.2g.lk,1.3c.lk,1.2h.lj,1.3d.lj,1.2i.le,1.3e.le,1.2i.mb,1.3e.mb,1.2i.mp,1.3e.mp,1.2w.mp,1.38.lk,1.3b.lm,1.3d.lm,2.an.lj,5.1t.mb,1.2p.mb,1.1t.ll,1.2p.ll,1.5e.ld,1.6a.ld,1.5e.lc,1.6a.lc,1.5e.ll,1.6a.ll,1.5e.lf,1.6a.lf,1.61s.le,1.61t.le,1.76.ld,1.77.ld,1.76.lc,1.77.lc,1.76.ll,1.77.ll,1.76.lf,1.77.lf,1.61s.li,1.61t.li,1.1x.mb,1.2t.mb,1.1x.ll,1.2t.ll,1.1x.lf,1.2t.lf,1.5m.ld,1.6i.ld,1.5m.lc,1.6i.lc,1.5m.ll,1.6i.ll,1.5m.lf,1.6i.lf,1.62g.le,1.62h.le,1.21.ll,1.2x.ll,1.21.mb,1.2x.mb,1.27.mb,1.33.mb,1.27.ll,1.33.ll,1.5w.ld,1.6s.ld,1.5w.lc,1.6s.lc,1.5w.ll,1.6s.ll,1.5w.lf,1.6s.lf,1.630.le,1.631.le,1.bk.ld,1.bl.ld,1.bk.lc,1.bl.lc,1.bk.ll,1.bl.ll,1.bk.lf,1.bl.lf,1.bk.mb,1.bl.mb,1.2d.mb,1.39.mb,1.2d.ll,1.39.ll,1.bz.ld,1.c0.ld,1.bz.lc,1.c0.lc,1.bz.ll,1.c0.ll,1.bz.lf,1.c0.lf,1.bz.mb,1.c0.mb,1.2h.lc,1.3d.lc,1.2h.mb,1.3d.mb,1.2h.ll,1.3d.ll,1.2h.lf,1.3d.lf,7.q9.lv,1.q9.lw,1.64g.lc,1.64h.lc,1.64g.ld,1.64h.ld,1.64g.n6,1.64h.n6,1.pd.lv,1.pd.lw,1.64o.lc,1.64p.lc,1.64o.ld,1.64p.ld,1.64o.n6,1.64p.n6,1.qd.lv,1.qd.lw,1.64w.lc,1.64x.lc,1.64w.ld,1.64x.ld,3.ph.lv,1.ph.lw,1.654.lc,1.655.lc,1.654.ld,1.655.ld,3.qf.lv,1.qf.lw,1.65c.lc,1.65d.lc,1.65c.ld,1.65d.ld,1.65c.n6,1.65d.n6,1.pj.lv,1.pj.lw,1.65k.lc,1.65l.lc,1.65k.ld,1.65l.ld,1.65k.n6,1.65l.n6,1.qh.lv,1.qh.lw,1.65s.lc,1.65t.lc,1.65s.ld,1.65t.ld,1.65s.n6,1.65t.n6,1.pl.lv,1.pl.lw,1.660.lc,1.661.lc,1.660.ld,1.661.ld,1.660.n6,1.661.n6,1.qn.lv,1.qn.lw,1.668.lc,1.669.lc,1.668.ld,1.669.ld,3.pr.lv,1.pr.lw,1.66g.lc,1.66h.lc,1.66g.ld,1.66h.ld,3.qt.lv,1.qt.lw,1.66o.lc,1.66p.lc,1.66o.ld,1.66p.ld,1.66o.n6,1.66p.n6,2.px.lw,2.66x.lc,2.66x.ld,2.66x.n6,1.qx.lv,1.qx.lw,1.674.lc,1.675.lc,1.674.ld,1.675.ld,1.674.n6,1.675.n6,1.q1.lv,1.q1.lw,1.67c.lc,1.67d.lc,1.67c.ld,1.67d.ld,1.67c.n6,1.67d.n6,1.q9.lc,1.q4,1.qd.lc,1.q5,1.qf.lc,1.q6,1.qh.lc,1.q7,1.qn.lc,1.r0,1.qt.lc,1.r1,1.qx.lc,1.r2,3.64g.n9,1.64h.n9,1.64i.n9,1.64j.n9,1.64k.n9,1.64l.n9,1.64m.n9,1.64n.n9,1.64o.n9,1.64p.n9,1.64q.n9,1.64r.n9,1.64s.n9,1.64t.n9,1.64u.n9,1.64v.n9,1.65c.n9,1.65d.n9,1.65e.n9,1.65f.n9,1.65g.n9,1.65h.n9,1.65i.n9,1.65j.n9,1.65k.n9,1.65l.n9,1.65m.n9,1.65n.n9,1.65o.n9,1.65p.n9,1.65q.n9,1.65r.n9,1.674.n9,1.675.n9,1.676.n9,1.677.n9,1.678.n9,1.679.n9,1.67a.n9,1.67b.n9,1.67c.n9,1.67d.n9,1.67e.n9,1.67f.n9,1.67g.n9,1.67h.n9,1.67i.n9,1.67j.n9,1.q9.li,1.q9.lg,1.67k.n9,1.q9.n9,1.q4.n9,2.q9.n6,1.69i.n9,1.pd.li,1.pd.lg,1.pd.lc,1.p2,1.pd.n9,2.qh,3.4o.n6,1.67o.n9,1.qf.n9,1.q6.n9,2.qf.n6,1.69y.n9,1.ph.lc,1.p4,1.pj.lc,1.p5,1.pj.n9,1.69r.lc,1.69r.ld,1.69r.n6,1.qh.li,1.qh.lg,1.qy.lc,1.pc,3.qh.n6,1.qy.n6,1.pl.li,1.pl.lg,1.pl.lc,1.p6,2.6bi.lc,1.6bi.ld,1.6bi.n6,1.qt.li,1.qt.lg,1.qz.lc,1.q8,1.qp.lv,1.qp.lw,1.qt.n6,1.qz.n6,1.px.li,1.px.lg,1.px.lc,1.pa,1.pt.lw,1.4o.lc,1.p1,1.2o,3.67w.n9,1.qx.n9,1.r2.n9,2.qx.n6,1.6ba.n9,1.pr.lc,1.p8,1.q1.lc,1.pb,1.q1.n9,1.50,3.6bm,1.6bn,85.q1,4.23,1.5h,33.6mo.mw,1.6mq.mw,j.6ms.mw,v.6og.mw,1.6ok.mw,1.6oi.mw,1h.6pv.mw,5.6q0.mw,3.6q3.mw,o.6qr.mw,2.6qt.mw,r.6rg.mw,3.6rn.mw,3.6rp.mw,2.6rs.mw,n.1p.mw,2.6sh.mw,b.6rx.mw,1.1o.mw,1.1q.mw,1.6sk.mw,1.6sl.mw,3.6sy.mw,1.6sz.mw,3.6t2.mw,1.6t3.mw,7.6t6.mw,1.6t7.mw,3.6te.mw,1.6tf.mw,3.6ti.mw,1.6tj.mw,z.6ua.mw,1.6ug.mw,1.6uh.mw,1.6uj.mw,1d.6t8.mw,1.6t9.mw,1.6tt.mw,1.6tu.mw,7.6uq.mw,1.6ur.mw,1.6us.mw,1.6ut.mw,1o.9hk,1.9hl,1iq.8gt.mw,12o.9jf.9ll,2.9jh.9ll,2.9jj.9ll,2.9jl.9ll,2.9jn.9ll,2.9jp.9ll,2.9jr.9ll,2.9jt.9ll,2.9jv.9ll,2.9jx.9ll,2.9jz.9ll,2.9k1.9ll,3.9k4.9ll,2.9k6.9ll,2.9k8.9ll,7.9kf.9ll,1.9kf.9lm,2.9ki.9ll,1.9ki.9lm,2.9kl.9ll,1.9kl.9lm,2.9ko.9ll,1.9ko.9lm,2.9kr.9ll,1.9kr.9lm,n.9ja.9ll,a.9lp.9ll,e.9m3.9ll,2.9m5.9ll,2.9m7.9ll,2.9m9.9ll,2.9mb.9ll,2.9md.9ll,2.9mf.9ll,2.9mh.9ll,2.9mj.9ll,2.9ml.9ll,2.9mn.9ll,2.9mp.9ll,3.9ms.9ll,2.9mu.9ll,2.9mw.9ll,7.9n3.9ll,1.9n3.9lm,2.9n6.9ll,1.9n6.9lm,2.9n9.9ll,1.9n9.9lm,2.9nc.9ll,1.9nc.9lm,2.9nf.9ll,1.9nf.9lm,n.9ly.9ll,3.9nz.9ll,1.9o0.9ll,1.9o1.9ll,1.9o2.9ll,4.9od.9ll,13ia.rpk,1.kc4,1.s7e,1.rt4,1.lw1,1.fg2,1.gkl,1.vj0,1.vj0,1.hn5,1.ssx,1.gw7,1.hmw,1.jcm,1.ne1,1.p6t,1.qin,1.qt6,1.r20,1.sjz,1.kxu,1.ljv,1.mah,1.mvy,1.q4d,1.sq2,1.uep,1.fia,1.ghh,1.l50,1.mjf,1.qi5,1.v8e,1.ifk,1.m3v,1.qfh,1.r50,1.jih,1.pnc,1.qvz,1.iq2,1.kd3,1.lm2,1.mpo,1.slq,1.fpi,1.g53,1.gda,1.jwk,1.l3n,1.mj4,1.nhj,1.pa9,1.qh2,1.qjg,1.s1b,1.tv6,1.upb,1.v7e,1.nt8,1.nzz,1.otc,1.q15,1.t1g,1.vb3,1.rfa,1.hjz,1.iro,1.okg,1.pdq,1.mle,1.nuy,1.rsy,1.ttj,1.hjs,1.i8y,1.kyb,1.lp6,1.lxr,1.oq7,1.oxj,1.tor,1.gcy,1.pe3,1.g64,1.g5o,1.o4c,1.ou6,1.q29,1.tpx,1.rk0,1.jin,1.kxu,1.rge,1.fg9,1.i5j,1.iz6,1.mtj,1.n74,1.gev,1.nwb,1.fr3,1.iw9,1.ff1,1.lho,1.k1k,1.opu,1.gjn,1.hge,1.ni9,1.q4p,1.re2,1.la2,1.sds,1.lfs,1.jjy,1.put,1.jog,1.n6t,1.fji,1.g2x,1.g5l,1.kn5,1.oo7,1.prj,1.rf6,1.ssv,1.gdx,1.gn6,1.ho3,1.ir0,1.k3p,1.m4e,1.nxm,1.tkd,1.ui2,1.vbr,1.vda,1.gbf,1.kau,1.l87,1.sbm,1.ino,1.j9s,1.jcw,1.jve,1.lyb,1.mdl,1.n0p,1.o22,1.ovo,1.pdb,1.s9y,1.q9a,1.sgz,1.t3e,1.g7r,1.gbn,1.gql,1.ma0,1.r0i,1.re2,1.iq1,1.iyd,1.jnf,1.l9q,1.oji,1.mt1,1.fl0,1.h6h,1.i5j,1.iii,1.izg,1.muq,1.mzt,1.p7e,1.pc6,1.svo,1.tti,1.tvs,1.u1k,1.fpn,1.o1a,1.ss4,1.trs,1.j4x,1.fie,1.fyy,1.i5q,1.i7z,1.k2h,1.kxu,1.mha,1.ncy,1.q9o,1.sjg,1.vil,1.k94,1.tny,1.gax,1.kfv,1.kj7,1.lkx,1.luk,1.mx5,1.n6h,1.nsb,1.opc,1.u3i,1.g31,1.je6,1.tq0,1.fu3,1.ie1,1.lpm,1.sa2,1.ivf,1.j7o,1.kk7,1.mtj,1.tqe,1.g89,1.glr,1.i91,1.k5v,1.kem,1.ko8,1.lid,1.mx2,1.naa,1.p6h,1.r0v,1.r1d,1.sss,1.tsy,1.gfz,1.lve,1.gm5,1.mhc,1.n14,1.qgq,1.tr7,1.uvr,1.vbz,1.kgn,1.lor,1.pns,1.o97,1.obk,1.olu,1.mo0,1.m8p,1.riw,1.fk0,1.px2,1.g8q,1.g7b,1.ip2,1.jir,1.onq,1.i2t,1.ljy,1.kac,1.saj,1.qx8,1.tot,1.r63,1.iqb,1.g1s,1.gxs,3.hga,2.k8k,3.g66,1.mqy,1.ngq,1.ny4,1.nz2,1.nz9,1.o0f,1.tw6,1.on2,1.p8d,2.qhe,2.rg8,3.shk,1.sn1,4.u7j,1.u7w,1.u94,1.v5g,1.sm6,1.trr,1.fqm,1.fzb,1.g25,1.gcp,1.gdg,1.ggh,1.gwt,1.gzq,1.h2g,1.hfk,1.hig,1.i90,1.i9a,1.j2s,1.j8o,1.j9q,1.jci,1.k0f,1.k4i,1.k9d,1.kn9,1.lmf,1.lqy,1.lya,1.mem,1.mjv,1.mxu,1.ntd,1.ny6,1.nyh,1.nyg,1.nyo,1.nyu,1.nz1,1.o0d,1.o0e,1.o5c,1.o75,1.og0,1.ovo,1.ow9,1.oxt,1.p6a,1.pad,1.pnx,1.prt,1.prt,1.q53,1.r2o,1.r6e,1.rgh,1.ri1,1.rtf,1.ruw,1.sdy,1.shk,1.tsz,1.u0v,1.u2j,1.j1x,1.36cu,1.pp4,3.ffq,1.g51,1.g2w,1.fpc,1.g1x,1.g3k,1.gcn,1.ge2,1.gwt,1.gut,1.gwp,1.gyq,1.hga,1.hir,1.hms,1.hn8,1.huq,1.i08,1.iqa,1.iqh,1.iuh,1.iwd,1.j4o,1.j7y,1.j60,1.j9q,1.j8g,1.jci,1.jec,1.jpg,1.jrw,1.jte,1.k0m,1.k8k,1.kd3,1.kd7,1.keu,1.l89,1.la2,1.lkx,1.lwb,1.lvv,1.lya,1.m5a,1.mem,1.nmv,1.mk5,1.mnj,1.mqy,1.n01,1.n46,1.n5n,1.nbx,1.nbz,1.ngq,1.nh7,1.nhw,1.nka,1.nk0,1.nv0,1.o8h,1.og0,1.ol7,1.orf,1.ovo,1.p4u,1.pad,1.pxu,1.q27,1.qrd,1.r41,1.r5y,1.r6e,1.ren,1.rg8,1.rez,1.rgh,1.rge,1.rfx,1.ri1,1.rka,1.ruw,1.sag,1.sj6,1.srd,1.sxi,1.tq4,1.tsz,1.tw6,1.tzv,1.u0v,1.u17,1.u2j,1.umq,1.vj0,1.313e,1.3138,1.33dh,1.brx,1.cns,1.cop,1.39e1,1.3bgw,1.3i6r,1.vgj,1.vim,1w.15l.14k,2.16a.14n,b.161.14x,1.161.14y,1.1dmx.14x,1.1dmx.14y,1.15c.14n,1.15c.14o,1.15c.14s,1.15d.14s,1.15e.14s,1.15f.14s,1.15g.14s,1.15h.14s,1.15i.14s,2.15k.14s,1.15l.14s,1.15m.14s,1.15n.14s,1.15o.14s,2.15q.14s,2.15s.14s,1.15t.14s,2.15v.14s,1.15w.14s,2.15y.14s,1.15z.14s,1.160.14s,1.161.14s,1.162.14s,1.15h.14p,1.15d.14v,1.15n.14v,1.15w.14v,47g.1huh.1hve,2.1huj.1hve,f.1hut.1hve,3n.1hyp.1hyf,1.1hyq.1hyf,f0.1idj.1ida,1.1idj.1idz,a7.1int.1inu,1.1int.1ink,2.1int.1inx,70.1iuw.1iun,1.1iux.1iun,ot.1jjp.1jjk,10di.2jx3.2jxh,1.2jx4.2jxh,1.2jxb.2jxq,1.2jxb.2jxr,1.2jxb.2jxs,1.2jxb.2jxt,1.2jxb.2jxu,2f.2jzt.2jxh,1.2jzu.2jxh,1.2jzv.2jxq,1.2jzw.2jxq,1.2jzv.2jxr,1.2jzw.2jxr,1m4g.fgd,1.fg8,1.fgh,1.2tcy,1.fog,1.fqm,1.fqz,1.fsy,1.fwa,1.fx5,1.fzb,1.fyn,1.ae6,1.2ud6,1.g25,1.g2c,1.g2s,1.g3b,1.2u58,1.aex,1.g2v,1.g3x,1.2u6j,1.g47,1.g4k,1.fkc,1.g4s,1.g51,1.3ly7,1.g6t,1.g77,1.afz,1.g8r,1.g92,1.gaa,1.gaf,1.ahh,1.gcn,1.gcp,1.gdg,1.ge2,1.ged,1.gee,1.gev,1.gg9,1.ggh,1.ggq,1.ghf,1.ghp,1.ghr,1.ghr,1.ghr,1.2v58,1.m7k,1.gju,1.gkf,1.2vdv,1.gkr,1.gkx,1.gli,1.gpq,1.gmw,1.gnc,1.go8,1.gpu,1.gs6,1.gsw,1.gur,1.gv7,1.gw4,1.gw4,1.gwp,1.gx7,1.gxf,1.gxu,1.h7a,1.gzq,1.h7b,1.h1t,1.h2s,1.g7b,1.hke,1.hce,1.hdg,1.he5,1.haj,1.hf6,1.hf5,1.hik,1.2x9g,1.hki,1.hkn,1.hl2,1.hlm,1.hlu,1.hnm,1.2xm0,1.2xnu,1.hrg,1.hsr,1.ht3,1.hqw,1.huu,1.aum,1.av0,1.hzc,1.i0u,1.i0u,1.2y88,1.i4j,1.i54,1.i5j,1.i5v,1.2yhk,1.i67,1.i6e,1.itv,1.i76,1.ayp,1.i8w,1.i9a,1.ibk,1.ia5,1.2z1g,1.if7,1.2z1i,1.ige,1.igb,1.igs,1.ijl,1.ijm,1.b3j,1.ikd,1.ilk,1.im5,1.ind,1.b4y,1.2zr7,1.b5o,1.ipc,1.ipf,1.ipi,1.iq2,1.3pg2,1.iri,1.3035,1.3035,1.poh,1.isi,1.isi,1.b7r,1.335k,1.3cgq,1.iua,1.iuj,1.b8j,1.ivu,1.ix9,1.ixj,1.iyh,1.j29,1.bay,1.ba4,1.j2s,1.30t0,1.j47,1.j7s,1.j7w,1.j7y,1.j7w,1.j96,1.j9q,1.jaq,1.jac,1.jan,1.jby,1.jci,1.jcm,1.jdc,1.jdn,1.jfh,1.jht,1.jis,1.jm8,1.31n0,1.jlp,1.jjw,1.jmw,1.jnn,1.jqc,1.31td,1.js2,1.jph,1.jop,1.bhq,1.ju1,1.jum,1.jvh,1.juf,1.bjg,1.k0f,1.k18,1.32mi,1.k4j,1.kc8,1.k7d,1.bo9,1.k9d,1.bns,1.bms,1.g42,1.g45,1.kcg,1.k9o,1.pf1,1.deh,1.kd3,1.kd7,1.kdd,1.kf2,1.ker,1.33cz,1.bpl,1.kje,1.kg5,1.klu,1.kn9,1.33hp,1.kni,1.kkf,1.kr8,1.brx,1.ksi,1.kv7,1.kx6,1.l2g,1.33xf,1.l3v,1.bvc,1.l5t,1.34br,1.l78,1.bwu,1.l82,1.l9b,1.la2,1.la3,1.34p9,1.2yvf,1.34sa,1.le6,1.354s,1.lhb,1.lhp,1.lev,1.ljq,1.lku,1.lmf,1.lkx,1.lm1,1.lmg,1.lmt,1.357i,1.lkk,1.lrj,1.lta,1.c37,1.lvv,1.lvr,1.35jl,1.lq1,1.m0e,1.35ni,1.35ou,1.m2u,1.m61,1.m5a,1.m57,1.c5y,1.m6i,1.m7x,1.m7r,1.m99,1.2u5h,1.mdh,1.368z,1.mfw,1.36i3,1.mjs,1.mk5,1.mkw,1.36yw,1.mm8,1.mmt,1.3779,1.37dg,1.mt6,1.mtn,1.cdo,1.mud,1.ce0,1.ce0,1.myv,1.mzg,1.n01,1.n0l,1.n2i,1.cgr,1.n50,1.386u,1.n5q,1.389e,1.n74,1.2zrz,1.nbk,1.38v5,1.38vs,1.38zo,1.cn0,1.cnc,1.nhw,1.394j,1.394i,1.395l,1.396b,1.nj2,1.nj3,1.nj3,1.nka,1.cop,1.nm3,1.cp2,1.cra,1.39r1,1.nri,1.nt8,1.nv0,1.ctf,1.3a5i,1.nyu,1.3a8q,1.3a9x,1.o0f,1.o2z,1.cvj,1.o5c,1.o5m,1.o5r,1.3at8,1.3b1j,1.3b1j,1.oa6,1.d1e,1.3b8r,1.og6,1.og9,1.d2f,1.3beo,1.onm,1.d5s,1.oo8,1.oo3,1.oow,1.3c06,1.orn,1.d8h,1.ouf,1.ow2,1.oxx,1.d9w,1.3ciw,1.3cjr,1.dax,1.3cnt,1.p6i,1.3cqm,1.p79,1.pa2,1.pad,1.3d22,1.3d43,1.pcw,1.3d7s,1.pdc,1.33a7,1.ded,1.pf6,1.phf,1.dfv,1.pj2,1.hx1,1.3dlz,1.3dmd,1.33bn,1.33bw,1.poh,1.pok,1.sda,1.dij,1.psh,1.psb,1.pst,1.gc3,1.ptd,1.ptf,1.ptp,1.puu,1.3ebg,1.put,1.pwd,1.pyb,1.q0d,1.pwj,1.q0t,1.q1z,1.q53,1.pxv,1.q16,1.q18,1.q1o,1.3eie,1.3eqz,1.3emt,1.dnv,1.q9d,1.q9f,1.qae,1.3g0a,1.qck,1.3f3g,1.dp9,1.dpd,1.3f75,1.3ff6,1.dpn,1.qj4,1.qjg,1.qjr,1.qjt,1.qll,1.qko,1.qoe,1.qn6,1.qrd,1.qp4,1.qqz,1.qrq,1.dsn,1.qu9,1.qv5,1.dtl,1.qxs,1.qxv,1.3giv,1.r13,1.r1a,1.dv9,1.r22,1.aez,1.3gz2,1.3h46,1.dz2,1.dzb,1.rds,1.rfx,1.rka,1.rpx,1.3hrc,1.rsb,1.rsx,1.rvf,1.rxz,1.3i9b,1.2upw,1.s0b,1.rzw,1.s1c,1.2uvy,1.s7o,1.sag,1.3jki,1.3jl9,1.sk4,1.smp,1.snl,1.3ju6,1.snv,1.svs,1.t07,1.t08,1.sxo,1.t89,1.t91,1.3ksa,1.tjf,1.ej9,1.tkn,1.3l2v,1.eli,1.ts3,1.iia,1.tur,1.3ltx,1.3lzu,1.epa,1.epi,1.u00,1.3mdm,1.er6,1.3mhi,1.u17,1.u17,1.u21,1.3mpi,1.u76,1.eur,1.u95,1.ucn,1.ude,1.uf2,1.ez2,1.3nsg,1.umq,1.uv4,1.v0d,1.f66,1.f71,1.v3b,1.3owe,1.f7c,1.3oxx,1.3p5a,1.3p8x,1.vcr,1.f9y,1.veh,1.vem,1.vet,1.vf3,1.vfa,1.vgb,1.3pxc";
|
|
2965
|
+
var NFC_EXCLUDED = "1ug,1uh,1ui,1uj,1uk,1ul,1um,1un,1y4,1y5,1y7,20j,20m,21l,21m,21n,21q,28s,28t,30j,30t,30y,313,318,31l,31y,320,32r,331,336,33b,33g,33t,1dlp,1dlr,1dm2,1dm3,1dm4,1dm5,1dm6,1dm7,1dm8,1dm9,1dma,1dmb,1dmc,1dmd,1dme,1dmg,1dmh,1dmi,1dmj,1dmk,1dmm,1dmo,1dmp,1dmr,1dms,1dmu,1dmv,1dmw,1dmx,1dmy,1dmz,1dn0,1dn1,1dn2,8gs,2jxa,2jxb,2jxc,2jxd,2jxe,2jxf,2jxg,2jzv,2jzw,2jzx,2jzy,2jzz,2k00";
|
|
2966
|
+
|
|
2967
|
+
// src/nfc.ts
|
|
2968
|
+
var S_BASE = 44032;
|
|
2969
|
+
var L_BASE = 4352;
|
|
2970
|
+
var V_BASE = 4449;
|
|
2971
|
+
var T_BASE = 4519;
|
|
2972
|
+
var L_COUNT = 19;
|
|
2973
|
+
var V_COUNT = 21;
|
|
2974
|
+
var T_COUNT = 28;
|
|
2975
|
+
var N_COUNT = V_COUNT * T_COUNT;
|
|
2976
|
+
var S_COUNT = L_COUNT * N_COUNT;
|
|
2977
|
+
var tables = null;
|
|
2978
|
+
function load() {
|
|
2979
|
+
const ccc = /* @__PURE__ */ new Map();
|
|
2980
|
+
for (const run of NFC_CLASS_RUNS.split(",")) {
|
|
2981
|
+
const [start, count, cls] = run.split(".");
|
|
2982
|
+
const s = parseInt(start, 36);
|
|
2983
|
+
const n = count ? parseInt(count, 36) : 1;
|
|
2984
|
+
const c = parseInt(cls, 36);
|
|
2985
|
+
for (let k = 0; k < n; k++) ccc.set(s + k, c);
|
|
2986
|
+
}
|
|
2987
|
+
const raw = /* @__PURE__ */ new Map();
|
|
2988
|
+
let cp = 0;
|
|
2989
|
+
for (const entry of NFC_DECOMP.split(",")) {
|
|
2990
|
+
const [gap, ...to] = entry.split(".");
|
|
2991
|
+
cp += parseInt(gap, 36);
|
|
2992
|
+
raw.set(cp, to.map((t) => parseInt(t, 36)));
|
|
2993
|
+
}
|
|
2994
|
+
const excluded = new Set(NFC_EXCLUDED.split(",").map((t) => parseInt(t, 36)));
|
|
2995
|
+
const compose = /* @__PURE__ */ new Map();
|
|
2996
|
+
for (const [c, to] of raw) {
|
|
2997
|
+
if (to.length !== 2 || excluded.has(c) || ccc.has(c) || ccc.has(to[0])) continue;
|
|
2998
|
+
compose.set(to[0] * 1114112 + to[1], c);
|
|
2999
|
+
}
|
|
3000
|
+
const decomp = /* @__PURE__ */ new Map();
|
|
3001
|
+
const full = (c) => {
|
|
3002
|
+
const done = decomp.get(c);
|
|
3003
|
+
if (done) return done;
|
|
3004
|
+
const to = raw.get(c);
|
|
3005
|
+
if (!to) return [c];
|
|
3006
|
+
const out = to.flatMap(full);
|
|
3007
|
+
decomp.set(c, out);
|
|
3008
|
+
return out;
|
|
3009
|
+
};
|
|
3010
|
+
for (const c of raw.keys()) full(c);
|
|
3011
|
+
return { ccc, decomp, compose };
|
|
3012
|
+
}
|
|
3013
|
+
function nfc(text) {
|
|
3014
|
+
let plain = true;
|
|
3015
|
+
for (let i = 0; i < text.length; i++) if (text.charCodeAt(i) >= 192) {
|
|
3016
|
+
plain = false;
|
|
3017
|
+
break;
|
|
3018
|
+
}
|
|
3019
|
+
if (plain) return text;
|
|
3020
|
+
const t = tables ?? (tables = load());
|
|
3021
|
+
const cls = (c) => t.ccc.get(c) ?? 0;
|
|
3022
|
+
const cps = [];
|
|
3023
|
+
for (const ch of text) {
|
|
3024
|
+
const c = ch.codePointAt(0);
|
|
3025
|
+
const s = c - S_BASE;
|
|
3026
|
+
if (s >= 0 && s < S_COUNT) {
|
|
3027
|
+
cps.push(L_BASE + Math.floor(s / N_COUNT), V_BASE + Math.floor(s % N_COUNT / T_COUNT));
|
|
3028
|
+
if (s % T_COUNT) cps.push(T_BASE + s % T_COUNT);
|
|
3029
|
+
} else {
|
|
3030
|
+
const d = t.decomp.get(c);
|
|
3031
|
+
if (d) cps.push(...d);
|
|
3032
|
+
else cps.push(c);
|
|
3033
|
+
}
|
|
3034
|
+
}
|
|
3035
|
+
for (let i = 1; i < cps.length; i++) {
|
|
3036
|
+
const c = cps[i];
|
|
3037
|
+
const k = cls(c);
|
|
3038
|
+
if (!k) continue;
|
|
3039
|
+
let j = i;
|
|
3040
|
+
while (j > 0 && cls(cps[j - 1]) > k) {
|
|
3041
|
+
cps[j] = cps[j - 1];
|
|
3042
|
+
j--;
|
|
3043
|
+
}
|
|
3044
|
+
cps[j] = c;
|
|
3045
|
+
}
|
|
3046
|
+
const out = [];
|
|
3047
|
+
let starter = -1;
|
|
3048
|
+
let last = 0;
|
|
3049
|
+
for (const c of cps) {
|
|
3050
|
+
const k = cls(c);
|
|
3051
|
+
if (starter >= 0 && (out.length - 1 === starter || last !== 0 && last < k)) {
|
|
3052
|
+
const a = out[starter];
|
|
3053
|
+
let composed;
|
|
3054
|
+
const l = a - L_BASE, v = c - V_BASE, s = a - S_BASE, tt = c - T_BASE;
|
|
3055
|
+
if (l >= 0 && l < L_COUNT && v >= 0 && v < V_COUNT) composed = S_BASE + (l * V_COUNT + v) * T_COUNT;
|
|
3056
|
+
else if (s >= 0 && s < S_COUNT && s % T_COUNT === 0 && tt > 0 && tt < T_COUNT) composed = a + tt;
|
|
3057
|
+
else composed = t.compose.get(a * 1114112 + c);
|
|
3058
|
+
if (composed !== void 0) {
|
|
3059
|
+
out[starter] = composed;
|
|
3060
|
+
continue;
|
|
3061
|
+
}
|
|
3062
|
+
}
|
|
3063
|
+
if (k === 0) starter = out.length;
|
|
3064
|
+
last = k;
|
|
3065
|
+
out.push(c);
|
|
3066
|
+
}
|
|
3067
|
+
let r = "";
|
|
3068
|
+
for (const c of out) r += String.fromCodePoint(c);
|
|
3069
|
+
return r;
|
|
3070
|
+
}
|
|
3071
|
+
|
|
3072
|
+
// src/world-file.ts
|
|
2960
3073
|
var WORLD_FILE = "world.json";
|
|
2961
3074
|
var MARKER_NAME = "mimetype";
|
|
2962
3075
|
var WORLD_FILE_MEDIA_TYPE = "application/vnd.onlyworlds.world+zip";
|
|
@@ -3035,7 +3148,7 @@ function simpleCaseFold(text) {
|
|
|
3035
3148
|
return out;
|
|
3036
3149
|
}
|
|
3037
3150
|
function foldName(name) {
|
|
3038
|
-
return simpleCaseFold(name
|
|
3151
|
+
return simpleCaseFold(nfc(name));
|
|
3039
3152
|
}
|
|
3040
3153
|
function byCodePoint(a, b) {
|
|
3041
3154
|
const n = Math.min(a.length, b.length);
|
|
@@ -4006,19 +4119,60 @@ function renderElement(element, index, opts = {}) {
|
|
|
4006
4119
|
|
|
4007
4120
|
// src/ask.ts
|
|
4008
4121
|
var ASK_LIMITS = { questionMax: 500, itemsMax: 8, itemMax: 2e3, totalMax: 12e3 };
|
|
4122
|
+
var ASK_OPTION_KEYS = ["includeProposed", "includeHidden", "includeRoom"];
|
|
4009
4123
|
var chars = (s) => [...s].length;
|
|
4010
4124
|
var cut = (s, n) => [...s].slice(0, n).join("");
|
|
4011
|
-
|
|
4012
|
-
|
|
4125
|
+
var isHidden = (el) => el.hidden !== void 0 && el.hidden !== null && el.hidden !== false;
|
|
4126
|
+
var isProposed = (el) => el.x_review_proposed !== void 0 && el.x_review_proposed !== null;
|
|
4127
|
+
function readOptions(opts) {
|
|
4128
|
+
refuseUnknownOptions("buildAskContext", opts, ASK_OPTION_KEYS);
|
|
4129
|
+
const o = opts ?? {};
|
|
4130
|
+
for (const k of ASK_OPTION_KEYS) {
|
|
4131
|
+
if (o[k] !== void 0 && typeof o[k] !== "boolean") {
|
|
4132
|
+
throw new TypeError(`buildAskContext: ${k} must be a boolean; got ${JSON.stringify(o[k]) ?? String(o[k])}.`);
|
|
4133
|
+
}
|
|
4134
|
+
}
|
|
4135
|
+
return { includeProposed: o.includeProposed === true, includeHidden: o.includeHidden === true, includeRoom: o.includeRoom === true };
|
|
4136
|
+
}
|
|
4137
|
+
function buildAskContext(items, index, opts = {}) {
|
|
4138
|
+
const o = readOptions(opts);
|
|
4139
|
+
const markOf = (el) => {
|
|
4140
|
+
if (!o.includeHidden && isHidden(el)) return "hidden";
|
|
4141
|
+
if (!o.includeProposed && isProposed(el)) return "proposed";
|
|
4142
|
+
if (!o.includeRoom && isRoomElement(el)) return "room";
|
|
4143
|
+
return null;
|
|
4144
|
+
};
|
|
4145
|
+
const withheld = (id) => {
|
|
4146
|
+
const el = index.byId.get(id);
|
|
4147
|
+
return el !== void 0 && markOf(el) !== null;
|
|
4148
|
+
};
|
|
4149
|
+
const viewFor = (el) => {
|
|
4150
|
+
const out2 = index.out.get(el.id) ?? [];
|
|
4151
|
+
const gone = out2.filter((l) => withheld(l.id));
|
|
4152
|
+
if (!gone.length && !(index.inn.get(el.id) ?? []).some((l) => withheld(l.id))) return index;
|
|
4153
|
+
return {
|
|
4154
|
+
...index,
|
|
4155
|
+
out: /* @__PURE__ */ new Map([[el.id, out2.filter((l) => !withheld(l.id))]]),
|
|
4156
|
+
inn: /* @__PURE__ */ new Map([[el.id, (index.inn.get(el.id) ?? []).filter((l) => !withheld(l.id))]]),
|
|
4157
|
+
unresolved: /* @__PURE__ */ new Map([[el.id, [...index.unresolved.get(el.id) ?? [], ...gone]]])
|
|
4158
|
+
};
|
|
4159
|
+
};
|
|
4160
|
+
const out = { context: [], kept: [], dropped: [], truncated: [], leftOut: { proposed: [], hidden: [], room: [] } };
|
|
4013
4161
|
let total = 0;
|
|
4014
4162
|
let full = false;
|
|
4015
4163
|
for (const item of items) {
|
|
4016
4164
|
const el = item && typeof item === "object" && "element" in item ? item.element : item;
|
|
4165
|
+
const mark = markOf(el);
|
|
4166
|
+
if (mark) {
|
|
4167
|
+
out.leftOut[mark].push(el.id);
|
|
4168
|
+
continue;
|
|
4169
|
+
}
|
|
4017
4170
|
if (full || out.context.length >= ASK_LIMITS.itemsMax) {
|
|
4018
4171
|
out.dropped.push(el.id);
|
|
4019
4172
|
continue;
|
|
4020
4173
|
}
|
|
4021
|
-
let text = renderElement(el,
|
|
4174
|
+
let text = renderElement(el, viewFor(el));
|
|
4175
|
+
if (isProposed(el)) text = `[${REVIEW_PROPOSED_LABEL}] ${text}`;
|
|
4022
4176
|
if (chars(text) > ASK_LIMITS.itemMax) {
|
|
4023
4177
|
text = cut(text, ASK_LIMITS.itemMax);
|
|
4024
4178
|
out.truncated.push(el.id);
|
|
@@ -4777,6 +4931,7 @@ export {
|
|
|
4777
4931
|
PHOTO_MAX_BYTES,
|
|
4778
4932
|
PHOTO_TYPES,
|
|
4779
4933
|
PUBLIC_FIELDS,
|
|
4934
|
+
REVIEW_PROPOSED_LABEL,
|
|
4780
4935
|
ROOM_PAIRS,
|
|
4781
4936
|
SPATIAL_TYPES,
|
|
4782
4937
|
TokenResource,
|
|
@@ -4815,6 +4970,7 @@ export {
|
|
|
4815
4970
|
kindCanWrite,
|
|
4816
4971
|
lookupWorld,
|
|
4817
4972
|
monthStartSteps,
|
|
4973
|
+
nfc,
|
|
4818
4974
|
parseDate,
|
|
4819
4975
|
parseErrorEnvelope,
|
|
4820
4976
|
pinExpectation,
|