@factoidal/core 0.7.1 → 0.11.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/CHANGELOG.md +616 -1
- package/NOTICE +2 -21
- package/README.md +123 -993
- package/api.d.ts +53 -0
- package/api.js +5 -0
- package/api.mjs +56 -0
- package/bin/engine.mjs +38 -19
- package/bin/ext.mjs +16 -20
- package/bin/factoidal.mjs +667 -118
- package/bin/pack.mjs +37 -0
- package/bin/serve-worker.mjs +32 -0
- package/bin/serve.mjs +423 -0
- package/bin/store-worker-host.mjs +1 -1
- package/bin/store.mjs +1 -1
- package/browser.d.ts +114 -507
- package/browser.js +155 -2257
- package/docs/fuseki-replacement.md +108 -0
- package/fn.d.ts +25 -96
- package/fn.js +131 -240
- package/index.d.ts +620 -260
- package/index.js +4 -234
- package/index.mjs +180 -84
- package/l4-assets/l4factoidal.js +47 -7
- package/l4-assets/l4factoidal.mjs +1 -1
- package/l4-assets/l4factoidal.wasm +0 -0
- package/l4-assets/version.json +11 -7
- package/lib/api.mjs +2337 -0
- package/lib/browser-engine.mjs +69 -0
- package/lib/dataset.mjs +471 -0
- package/lib/delta-log-hosts.mjs +191 -0
- package/lib/lean-entry.mjs +213 -0
- package/lib/pure.mjs +98 -0
- package/lib/store.mjs +115 -0
- package/lib/version.mjs +5 -0
- package/lws/README.md +137 -0
- package/lws/persist.mjs +78 -0
- package/lws/server.mjs +416 -0
- package/package.json +59 -61
- package/rdfjs.js +5 -536
- package/rdfjs.mjs +517 -0
- package/sample-store.d.ts +8 -16
- package/sample-store.mjs +39 -29
- package/solid/client/README.md +100 -0
- package/solid/client/index.mjs +293 -0
- package/solid/server/README.md +96 -0
- package/solid/server/index.mjs +395 -0
- package/store-host/deno.mjs +8 -0
- package/store-host/index.mjs +12 -0
- package/store-host/node.mjs +8 -0
- package/xmpp/README.md +107 -0
- package/xmpp/index.mjs +229 -0
- package/browser-wasm.js +0 -872
- package/factoidal-npm-entry.js +0 -15477
- package/factoidal-npm-entry.wasm.assets/code-5a7fc68f2ab1323718b8.wasm +0 -0
- package/factoidal-npm-entry.wasm.js +0 -455
- package/factoidal.js +0 -13118
- package/factoidal.wasm.assets/code-bbe6099bfb5b10c4c3ab.wasm +0 -0
- package/factoidal.wasm.js +0 -457
- package/hacl-init.js +0 -92
- package/hacl-wasm/FStar.wasm +0 -0
- package/hacl-wasm/Hacl_Bignum.wasm +0 -0
- package/hacl-wasm/Hacl_Bignum25519_51.wasm +0 -0
- package/hacl-wasm/Hacl_Bignum_Base.wasm +0 -0
- package/hacl-wasm/Hacl_Curve25519_51.wasm +0 -0
- package/hacl-wasm/Hacl_Ed25519.wasm +0 -0
- package/hacl-wasm/Hacl_Ed25519_PrecompTable.wasm +0 -0
- package/hacl-wasm/Hacl_Hash_Base.wasm +0 -0
- package/hacl-wasm/Hacl_Hash_SHA2.wasm +0 -0
- package/hacl-wasm/Hacl_IntTypes_Intrinsics.wasm +0 -0
- package/hacl-wasm/LowStar_Endianness.wasm +0 -0
- package/hacl-wasm/WasmSupport.wasm +0 -0
- package/hacl-wasm/api.js +0 -775
- package/hacl-wasm/api.json +0 -3787
- package/hacl-wasm/layouts.json +0 -1
- package/hacl-wasm/loader.js +0 -568
- package/hacl-wasm/shell.js +0 -12
- package/l4-core.d.ts +0 -159
- package/l4-core.js +0 -188
- package/l4.d.ts +0 -50
- package/l4.js +0 -104
- package/lib/api.js +0 -2300
- package/lib/engine-js.js +0 -165
- package/lib/engine-wasm.js +0 -300
- package/sample-store/CURRENT +0 -1
- package/sample-store/gen-1/manifest.sbm2 +0 -0
- package/sample-store/gen-1/manifest.tsv +0 -14
- package/sample-store/gen-1/predicate-0.ibk3 +0 -0
- package/sample-store/gen-1/predicate-0.ibk3.merkle +0 -1
- package/sample-store/gen-1/predicate-0.ibk3.oli2 +0 -0
- package/sample-store/gen-1/predicate-0.ibk3.oli2.merkle +0 -1
- package/sample-store/gen-1/predicate-0.ibk3.sri2 +0 -0
- package/sample-store/gen-1/predicate-0.ibk3.sri2.merkle +0 -1
- package/sample-store/gen-1/predicate-0.ibk3.tli1 +0 -0
- package/sample-store/gen-1/predicate-0.ibk3.tli1.merkle +0 -0
- package/sample-store/gen-1/predicate-1.ibk3 +0 -0
- package/sample-store/gen-1/predicate-1.ibk3.merkle +0 -0
- package/sample-store/gen-1/predicate-1.ibk3.oli2 +0 -0
- package/sample-store/gen-1/predicate-1.ibk3.oli2.merkle +0 -0
- package/sample-store/gen-1/predicate-1.ibk3.sri2 +0 -0
- package/sample-store/gen-1/predicate-1.ibk3.sri2.merkle +0 -1
- package/sample-store/gen-1/predicate-1.ibk3.tli1 +0 -0
- package/sample-store/gen-1/predicate-1.ibk3.tli1.merkle +0 -1
- package/sample-store/gen-1/predicate-10.ibk3 +0 -0
- package/sample-store/gen-1/predicate-10.ibk3.merkle +0 -1
- package/sample-store/gen-1/predicate-10.ibk3.oli2 +0 -0
- package/sample-store/gen-1/predicate-10.ibk3.oli2.merkle +0 -0
- package/sample-store/gen-1/predicate-10.ibk3.sri2 +0 -0
- package/sample-store/gen-1/predicate-10.ibk3.sri2.merkle +0 -1
- package/sample-store/gen-1/predicate-10.ibk3.tli1 +0 -0
- package/sample-store/gen-1/predicate-10.ibk3.tli1.merkle +0 -1
- package/sample-store/gen-1/predicate-11.ibk3 +0 -0
- package/sample-store/gen-1/predicate-11.ibk3.merkle +0 -0
- package/sample-store/gen-1/predicate-11.ibk3.oli2 +0 -0
- package/sample-store/gen-1/predicate-11.ibk3.oli2.merkle +0 -1
- package/sample-store/gen-1/predicate-11.ibk3.sri2 +0 -0
- package/sample-store/gen-1/predicate-11.ibk3.sri2.merkle +0 -1
- package/sample-store/gen-1/predicate-11.ibk3.tli1 +0 -0
- package/sample-store/gen-1/predicate-11.ibk3.tli1.merkle +0 -1
- package/sample-store/gen-1/predicate-12.ibk3 +0 -0
- package/sample-store/gen-1/predicate-12.ibk3.merkle +0 -1
- package/sample-store/gen-1/predicate-12.ibk3.oli2 +0 -0
- package/sample-store/gen-1/predicate-12.ibk3.oli2.merkle +0 -1
- package/sample-store/gen-1/predicate-12.ibk3.sri2 +0 -0
- package/sample-store/gen-1/predicate-12.ibk3.sri2.merkle +0 -1
- package/sample-store/gen-1/predicate-12.ibk3.tli1 +0 -0
- package/sample-store/gen-1/predicate-12.ibk3.tli1.merkle +0 -1
- package/sample-store/gen-1/predicate-2.ibk3 +0 -0
- package/sample-store/gen-1/predicate-2.ibk3.merkle +0 -1
- package/sample-store/gen-1/predicate-2.ibk3.oli2 +0 -0
- package/sample-store/gen-1/predicate-2.ibk3.oli2.merkle +0 -1
- package/sample-store/gen-1/predicate-2.ibk3.sri2 +0 -0
- package/sample-store/gen-1/predicate-2.ibk3.sri2.merkle +0 -0
- package/sample-store/gen-1/predicate-2.ibk3.tli1 +0 -0
- package/sample-store/gen-1/predicate-2.ibk3.tli1.merkle +0 -0
- package/sample-store/gen-1/predicate-3.ibk3 +0 -0
- package/sample-store/gen-1/predicate-3.ibk3.merkle +0 -1
- package/sample-store/gen-1/predicate-3.ibk3.oli2 +0 -0
- package/sample-store/gen-1/predicate-3.ibk3.oli2.merkle +0 -1
- package/sample-store/gen-1/predicate-3.ibk3.sri2 +0 -0
- package/sample-store/gen-1/predicate-3.ibk3.sri2.merkle +0 -1
- package/sample-store/gen-1/predicate-3.ibk3.tli1 +0 -0
- package/sample-store/gen-1/predicate-3.ibk3.tli1.merkle +0 -1
- package/sample-store/gen-1/predicate-4.ibk3 +0 -0
- package/sample-store/gen-1/predicate-4.ibk3.merkle +0 -0
- package/sample-store/gen-1/predicate-4.ibk3.oli2 +0 -0
- package/sample-store/gen-1/predicate-4.ibk3.oli2.merkle +0 -1
- package/sample-store/gen-1/predicate-4.ibk3.sri2 +0 -0
- package/sample-store/gen-1/predicate-4.ibk3.sri2.merkle +0 -1
- package/sample-store/gen-1/predicate-4.ibk3.tli1 +0 -0
- package/sample-store/gen-1/predicate-4.ibk3.tli1.merkle +0 -2
- package/sample-store/gen-1/predicate-5.ibk3 +0 -0
- package/sample-store/gen-1/predicate-5.ibk3.merkle +0 -1
- package/sample-store/gen-1/predicate-5.ibk3.oli2 +0 -0
- package/sample-store/gen-1/predicate-5.ibk3.oli2.merkle +0 -1
- package/sample-store/gen-1/predicate-5.ibk3.sri2 +0 -0
- package/sample-store/gen-1/predicate-5.ibk3.sri2.merkle +0 -1
- package/sample-store/gen-1/predicate-5.ibk3.tli1 +0 -0
- package/sample-store/gen-1/predicate-5.ibk3.tli1.merkle +0 -1
- package/sample-store/gen-1/predicate-6.ibk3 +0 -0
- package/sample-store/gen-1/predicate-6.ibk3.merkle +0 -1
- package/sample-store/gen-1/predicate-6.ibk3.oli2 +0 -0
- package/sample-store/gen-1/predicate-6.ibk3.oli2.merkle +0 -1
- package/sample-store/gen-1/predicate-6.ibk3.sri2 +0 -0
- package/sample-store/gen-1/predicate-6.ibk3.sri2.merkle +0 -1
- package/sample-store/gen-1/predicate-6.ibk3.tli1 +0 -0
- package/sample-store/gen-1/predicate-6.ibk3.tli1.merkle +0 -0
- package/sample-store/gen-1/predicate-7.ibk3 +0 -0
- package/sample-store/gen-1/predicate-7.ibk3.merkle +0 -0
- package/sample-store/gen-1/predicate-7.ibk3.oli2 +0 -0
- package/sample-store/gen-1/predicate-7.ibk3.oli2.merkle +0 -2
- package/sample-store/gen-1/predicate-7.ibk3.sri2 +0 -0
- package/sample-store/gen-1/predicate-7.ibk3.sri2.merkle +0 -1
- package/sample-store/gen-1/predicate-7.ibk3.tli1 +0 -0
- package/sample-store/gen-1/predicate-7.ibk3.tli1.merkle +0 -1
- package/sample-store/gen-1/predicate-8.ibk3 +0 -0
- package/sample-store/gen-1/predicate-8.ibk3.merkle +0 -1
- package/sample-store/gen-1/predicate-8.ibk3.oli2 +0 -0
- package/sample-store/gen-1/predicate-8.ibk3.oli2.merkle +0 -1
- package/sample-store/gen-1/predicate-8.ibk3.sri2 +0 -0
- package/sample-store/gen-1/predicate-8.ibk3.sri2.merkle +0 -1
- package/sample-store/gen-1/predicate-8.ibk3.tli1 +0 -0
- package/sample-store/gen-1/predicate-8.ibk3.tli1.merkle +0 -1
- package/sample-store/gen-1/predicate-9.ibk3 +0 -0
- package/sample-store/gen-1/predicate-9.ibk3.merkle +0 -1
- package/sample-store/gen-1/predicate-9.ibk3.oli2 +0 -0
- package/sample-store/gen-1/predicate-9.ibk3.oli2.merkle +0 -1
- package/sample-store/gen-1/predicate-9.ibk3.sri2 +0 -0
- package/sample-store/gen-1/predicate-9.ibk3.sri2.merkle +0 -3
- package/sample-store/gen-1/predicate-9.ibk3.tli1 +0 -0
- package/sample-store/gen-1/predicate-9.ibk3.tli1.merkle +0 -2
- package/select.d.ts +0 -116
- package/select.js +0 -492
- package/version.json +0 -102
- package/wasm.d.ts +0 -130
- package/wasm.js +0 -158
package/lib/engine-js.js
DELETED
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
// factoidal — Node driver for the js_of_ocaml CLI bundle.
|
|
2
|
-
//
|
|
3
|
-
// The engine bundle (factoidal.js) is a single-shot CLI: argv in,
|
|
4
|
-
// stdout out. runCli() drives one invocation in-process:
|
|
5
|
-
// 1. input documents are registered in js_of_ocaml's fake filesystem
|
|
6
|
-
// (globalThis.jsoo_fs_tmp, drained at engine startup — `/static/`
|
|
7
|
-
// is always the MlFakeDevice mount, in Node and browsers alike);
|
|
8
|
-
// 2. globalThis.process.argv carries the flags;
|
|
9
|
-
// 3. stdout/stderr are captured on BOTH channels the bundle may use:
|
|
10
|
-
// console.log/.error (the fstar_utf8_output_stubs.js path in
|
|
11
|
-
// current bundles) and require('fs').writeSync on fds 1/2 (the
|
|
12
|
-
// classic js_of_ocaml path), the latter via a proxied require;
|
|
13
|
-
// 4. process.exit is replaced by a sentinel throw.
|
|
14
|
-
//
|
|
15
|
-
// This file also resolves WHICH bundle to load: an explicit override,
|
|
16
|
-
// then the package-local copy (what npm ships), then the repo build
|
|
17
|
-
// output (developer tree). The resolution is exported so tests can pin
|
|
18
|
-
// the freshest artifact.
|
|
19
|
-
|
|
20
|
-
'use strict';
|
|
21
|
-
|
|
22
|
-
const fs = require('node:fs');
|
|
23
|
-
const path = require('node:path');
|
|
24
|
-
|
|
25
|
-
const PKG_ROOT = path.resolve(__dirname, '..');
|
|
26
|
-
|
|
27
|
-
/** Candidate bundle paths, in resolution order. */
|
|
28
|
-
function bundleCandidates() {
|
|
29
|
-
const c = [];
|
|
30
|
-
if (process.env.FACTOIDAL_JS_BUNDLE) c.push(process.env.FACTOIDAL_JS_BUNDLE);
|
|
31
|
-
c.push(path.join(PKG_ROOT, 'factoidal.js'));
|
|
32
|
-
// Developer tree fallback: repo build output.
|
|
33
|
-
c.push(path.resolve(PKG_ROOT, '..', '..', 'docs', 'fstar-extracted', 'factoidal.js'));
|
|
34
|
-
return c;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// A bundle is usable for the typed API when its CLI knows --dump-nq
|
|
38
|
-
// (the argv strings survive into the generated JavaScript, so a
|
|
39
|
-
// substring check is a reliable capability sniff). Prefer the first
|
|
40
|
-
// candidate that qualifies; fall back to the first that merely exists
|
|
41
|
-
// so queryRaw() keeps working against very old bundles.
|
|
42
|
-
function resolveBundlePath() {
|
|
43
|
-
let firstExisting = null;
|
|
44
|
-
for (const p of bundleCandidates()) {
|
|
45
|
-
if (!p || !fs.existsSync(p)) continue;
|
|
46
|
-
if (firstExisting === null) firstExisting = p;
|
|
47
|
-
try {
|
|
48
|
-
if (fs.readFileSync(p, 'utf8').includes('--dump-nq')) return p;
|
|
49
|
-
} catch (_) { /* unreadable candidate — keep looking */ }
|
|
50
|
-
}
|
|
51
|
-
if (firstExisting) return firstExisting;
|
|
52
|
-
throw new Error(
|
|
53
|
-
'factoidal.js engine bundle not found. Run ' +
|
|
54
|
-
"'formal/fstar/build-ocaml.sh js && formal/fstar/build-ocaml.sh npm' " +
|
|
55
|
-
'in the repo, or set FACTOIDAL_JS_BUNDLE.'
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
let _src = null;
|
|
60
|
-
let _srcPath = null;
|
|
61
|
-
|
|
62
|
-
function loadSource() {
|
|
63
|
-
const p = resolveBundlePath();
|
|
64
|
-
if (_src !== null && _srcPath === p) return _src;
|
|
65
|
-
_src = fs.readFileSync(p, 'utf8');
|
|
66
|
-
_srcPath = p;
|
|
67
|
-
return _src;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Run one CLI invocation of the js_of_ocaml engine bundle.
|
|
72
|
-
*
|
|
73
|
-
* @param {string[]} args CLI arguments (after argv[0]/argv[1]).
|
|
74
|
-
* @param {Array<{name: string, content: string}>} files
|
|
75
|
-
* Documents for the fake filesystem. Names must start
|
|
76
|
-
* with '/static/'.
|
|
77
|
-
* @returns {{stdout: string, stderr: string, exitCode: number}}
|
|
78
|
-
*/
|
|
79
|
-
function runCli(args, files) {
|
|
80
|
-
const orig = {
|
|
81
|
-
argv: globalThis.process ? globalThis.process.argv : undefined,
|
|
82
|
-
exit: globalThis.process ? globalThis.process.exit : undefined,
|
|
83
|
-
jsooFs: globalThis.jsoo_fs_tmp,
|
|
84
|
-
consoleLog: console.log,
|
|
85
|
-
consoleError: console.error,
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
const stdoutChunks = [];
|
|
89
|
-
const stderrChunks = [];
|
|
90
|
-
function asUtf8(data) {
|
|
91
|
-
if (typeof data === 'string') return data;
|
|
92
|
-
if (data && typeof data.toString === 'function') {
|
|
93
|
-
try { return Buffer.from(data).toString('utf8'); }
|
|
94
|
-
catch (_) { return String(data); }
|
|
95
|
-
}
|
|
96
|
-
return String(data);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// js_of_ocaml's Node runtime opens fds 1/2 via require('fs') and
|
|
100
|
-
// writes with fs.writeSync — bypassing console.log and
|
|
101
|
-
// process.stdout. Proxy the fs module we hand the bundle.
|
|
102
|
-
const patchedFs = new Proxy(fs, {
|
|
103
|
-
get(target, prop, receiver) {
|
|
104
|
-
if (prop === 'writeSync') {
|
|
105
|
-
return function proxyWriteSync(fd, chunk, ...rest) {
|
|
106
|
-
if (fd === 1) { stdoutChunks.push(asUtf8(chunk)); return asUtf8(chunk).length; }
|
|
107
|
-
if (fd === 2) { stderrChunks.push(asUtf8(chunk)); return asUtf8(chunk).length; }
|
|
108
|
-
return target.writeSync(fd, chunk, ...rest);
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
return Reflect.get(target, prop, receiver);
|
|
112
|
-
},
|
|
113
|
-
});
|
|
114
|
-
function wrappedRequire(name) {
|
|
115
|
-
if (name === 'fs' || name === 'node:fs') return patchedFs;
|
|
116
|
-
return require(name);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
globalThis.process = globalThis.process || {};
|
|
120
|
-
globalThis.process.argv = ['node', 'factoidal', ...args];
|
|
121
|
-
globalThis.jsoo_fs_tmp = (files || []).map((f) => ({
|
|
122
|
-
name: f.name,
|
|
123
|
-
content: f.content,
|
|
124
|
-
}));
|
|
125
|
-
|
|
126
|
-
// Current bundles emit stdout/stderr line-wise via console.log /
|
|
127
|
-
// console.error (fstar_utf8_output_stubs.js); console adds the
|
|
128
|
-
// trailing newline, so re-append it when capturing.
|
|
129
|
-
console.log = (...a) => { stdoutChunks.push(a.map(asUtf8).join(' ') + '\n'); };
|
|
130
|
-
console.error = (...a) => { stderrChunks.push(a.map(asUtf8).join(' ') + '\n'); };
|
|
131
|
-
|
|
132
|
-
let exitCode = 0;
|
|
133
|
-
const EXIT_SENTINEL = new Error('__factoidal_exit__');
|
|
134
|
-
globalThis.process.exit = (n) => { exitCode = n | 0; throw EXIT_SENTINEL; };
|
|
135
|
-
|
|
136
|
-
function restore() {
|
|
137
|
-
if (globalThis.process) {
|
|
138
|
-
globalThis.process.argv = orig.argv;
|
|
139
|
-
globalThis.process.exit = orig.exit;
|
|
140
|
-
}
|
|
141
|
-
globalThis.jsoo_fs_tmp = orig.jsooFs;
|
|
142
|
-
console.log = orig.consoleLog;
|
|
143
|
-
console.error = orig.consoleError;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
try {
|
|
147
|
-
const src = loadSource();
|
|
148
|
-
(new Function('require', src))(wrappedRequire);
|
|
149
|
-
} catch (e) {
|
|
150
|
-
if (e !== EXIT_SENTINEL) {
|
|
151
|
-
restore();
|
|
152
|
-
throw e;
|
|
153
|
-
}
|
|
154
|
-
} finally {
|
|
155
|
-
restore();
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
return {
|
|
159
|
-
stdout: stdoutChunks.join(''),
|
|
160
|
-
stderr: stderrChunks.join(''),
|
|
161
|
-
exitCode,
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
module.exports = { runCli, resolveBundlePath };
|
package/lib/engine-wasm.js
DELETED
|
@@ -1,300 +0,0 @@
|
|
|
1
|
-
// factoidal — Node driver for the wasm_of_ocaml CLI bundle.
|
|
2
|
-
//
|
|
3
|
-
// Same runCli(args, files) contract as ./engine-js.js, but backed by
|
|
4
|
-
// factoidal.wasm.js + factoidal.wasm.assets/*.wasm. The technique is
|
|
5
|
-
// the one proven by browser-wasm.js / test/smoke-wasm.mjs:
|
|
6
|
-
//
|
|
7
|
-
// - the wasm loader is an async IIFE whose Promise is discarded at
|
|
8
|
-
// source level; a one-marker rewrite captures it so we can await
|
|
9
|
-
// completion;
|
|
10
|
-
// - we force the loader down its Node branch (versions.node truthy)
|
|
11
|
-
// and hand it a fake require() whose 'node:fs' serves our
|
|
12
|
-
// in-memory input documents (the wasm build has no MlFakeDevice /
|
|
13
|
-
// jsoo_fs_tmp) and routes fds 1/2 into capture buffers;
|
|
14
|
-
// - 'node:fs/promises'.readFile serves the .wasm asset bytes from
|
|
15
|
-
// the real filesystem.
|
|
16
|
-
//
|
|
17
|
-
// Unlike engine-js.js this driver is async (wasm instantiation).
|
|
18
|
-
|
|
19
|
-
'use strict';
|
|
20
|
-
|
|
21
|
-
const fs = require('node:fs');
|
|
22
|
-
const path = require('node:path');
|
|
23
|
-
|
|
24
|
-
const PKG_ROOT = path.resolve(__dirname, '..');
|
|
25
|
-
|
|
26
|
-
// The bundle's entry is an immediately-invoked async factory:
|
|
27
|
-
// ;(<param>=>async <arg>=>{...})(...)
|
|
28
|
-
// wasm_of_ocaml minifies <param> differently across versions ('$' in
|
|
29
|
-
// 6.x releases before mid-2026, 'ag' in 6.4.1), so match the shape,
|
|
30
|
-
// not a fixed name, and splice in the __fwPromise capture after the
|
|
31
|
-
// leading ';'.
|
|
32
|
-
const IIFE_RE = /;\((\$|[A-Za-z_$][\w$]*)=>async /;
|
|
33
|
-
const IIFE_CAPTURE = ';globalThis.__fwPromise=';
|
|
34
|
-
|
|
35
|
-
function bundleCandidates() {
|
|
36
|
-
const c = [];
|
|
37
|
-
if (process.env.FACTOIDAL_WASM_BUNDLE) c.push(process.env.FACTOIDAL_WASM_BUNDLE);
|
|
38
|
-
c.push(path.join(PKG_ROOT, 'factoidal.wasm.js'));
|
|
39
|
-
c.push(path.resolve(PKG_ROOT, '..', '..', 'docs', 'fstar-extracted', 'factoidal.wasm.js'));
|
|
40
|
-
return c;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function resolveBundlePath() {
|
|
44
|
-
for (const p of bundleCandidates()) {
|
|
45
|
-
if (p && fs.existsSync(p)) return p;
|
|
46
|
-
}
|
|
47
|
-
throw new Error(
|
|
48
|
-
'factoidal.wasm.js engine bundle not found. Run ' +
|
|
49
|
-
"'formal/fstar/build-ocaml.sh wasm-factoidal' in the repo, or set " +
|
|
50
|
-
'FACTOIDAL_WASM_BUNDLE.'
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/** True if the wasm bundle (loader + .wasm asset) is present. */
|
|
55
|
-
function wasmAvailable() {
|
|
56
|
-
try {
|
|
57
|
-
const loader = resolveBundlePath();
|
|
58
|
-
const assets = path.join(path.dirname(loader), 'factoidal.wasm.assets');
|
|
59
|
-
return fs.existsSync(assets) &&
|
|
60
|
-
fs.readdirSync(assets).some((f) => f.endsWith('.wasm'));
|
|
61
|
-
} catch (_) {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
let _src = null;
|
|
67
|
-
let _srcPath = null;
|
|
68
|
-
let _assetsDir = null;
|
|
69
|
-
|
|
70
|
-
function loadSource() {
|
|
71
|
-
const p = resolveBundlePath();
|
|
72
|
-
if (_src !== null && _srcPath === p) return _src;
|
|
73
|
-
const raw = fs.readFileSync(p, 'utf8');
|
|
74
|
-
const m = IIFE_RE.exec(raw);
|
|
75
|
-
if (!m) {
|
|
76
|
-
throw new Error(
|
|
77
|
-
'engine-wasm: could not locate the async IIFE marker in ' +
|
|
78
|
-
'factoidal.wasm.js — the bundle shape may have changed.'
|
|
79
|
-
);
|
|
80
|
-
}
|
|
81
|
-
// Keep everything, but capture the invoked IIFE's promise:
|
|
82
|
-
// ';(' → ';globalThis.__fwPromise=('
|
|
83
|
-
_src = raw.slice(0, m.index) + IIFE_CAPTURE + raw.slice(m.index + 1);
|
|
84
|
-
_srcPath = p;
|
|
85
|
-
_assetsDir = path.join(path.dirname(p), 'factoidal.wasm.assets');
|
|
86
|
-
return _src;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
function makeStat(size, isFile, opts) {
|
|
90
|
-
const bigint = !!(opts && opts.bigint);
|
|
91
|
-
const toN = (v) => (bigint ? BigInt(v) : v);
|
|
92
|
-
return {
|
|
93
|
-
isFile: () => isFile,
|
|
94
|
-
isDirectory: () => false,
|
|
95
|
-
isCharacterDevice: () => !isFile,
|
|
96
|
-
isBlockDevice: () => false,
|
|
97
|
-
isSymbolicLink: () => false,
|
|
98
|
-
isFIFO: () => false,
|
|
99
|
-
isSocket: () => false,
|
|
100
|
-
dev: toN(0), ino: toN(0), mode: toN(0o100644),
|
|
101
|
-
nlink: toN(1), uid: toN(0), gid: toN(0), rdev: toN(0),
|
|
102
|
-
size: toN(size),
|
|
103
|
-
atimeMs: bigint ? 0n : 0,
|
|
104
|
-
mtimeMs: bigint ? 0n : 0,
|
|
105
|
-
ctimeMs: bigint ? 0n : 0,
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Run one CLI invocation of the wasm engine bundle.
|
|
111
|
-
* Same contract as engine-js.runCli, but async.
|
|
112
|
-
*
|
|
113
|
-
* @param {string[]} args
|
|
114
|
-
* @param {Array<{name: string, content: string}>} files
|
|
115
|
-
* @returns {Promise<{stdout: string, stderr: string, exitCode: number}>}
|
|
116
|
-
*/
|
|
117
|
-
async function runCli(args, files) {
|
|
118
|
-
const src = loadSource();
|
|
119
|
-
|
|
120
|
-
const TE = new TextEncoder();
|
|
121
|
-
const TD = new TextDecoder('utf-8');
|
|
122
|
-
const fileMap = new Map(
|
|
123
|
-
(files || []).map((f) => [f.name, TE.encode(f.content)])
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
const stdoutBuf = [];
|
|
127
|
-
const stderrBuf = [];
|
|
128
|
-
|
|
129
|
-
let exitCode = 0;
|
|
130
|
-
const EXIT_SENTINEL = new Error('__factoidal_exit__');
|
|
131
|
-
EXIT_SENTINEL.__factoidalExit = true;
|
|
132
|
-
|
|
133
|
-
const fakeOpenFds = Object.create(null);
|
|
134
|
-
let nextFd = 100;
|
|
135
|
-
|
|
136
|
-
function writeSync(fd, buf, offset, length /*, position */) {
|
|
137
|
-
let s;
|
|
138
|
-
if (typeof buf === 'string') {
|
|
139
|
-
s = buf;
|
|
140
|
-
} else {
|
|
141
|
-
const u8 = buf instanceof Uint8Array
|
|
142
|
-
? buf
|
|
143
|
-
: new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
144
|
-
const start = offset || 0;
|
|
145
|
-
const end = start + (length === undefined ? u8.length - start : length);
|
|
146
|
-
s = TD.decode(u8.subarray(start, end));
|
|
147
|
-
}
|
|
148
|
-
(fd === 2 ? stderrBuf : stdoutBuf).push(s);
|
|
149
|
-
return length === undefined ? s.length : length;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const fileForPath = (p) => fileMap.get(String(p)) || null;
|
|
153
|
-
|
|
154
|
-
const fakeFs = {
|
|
155
|
-
constants: {
|
|
156
|
-
R_OK: 4, W_OK: 2, X_OK: 1, F_OK: 0,
|
|
157
|
-
O_RDONLY: 0, O_WRONLY: 1, O_RDWR: 2, O_APPEND: 8, O_CREAT: 512,
|
|
158
|
-
O_TRUNC: 1024, O_EXCL: 2048, O_NONBLOCK: 4096, O_NOCTTY: 8192,
|
|
159
|
-
O_DSYNC: 4194304, O_SYNC: 128,
|
|
160
|
-
},
|
|
161
|
-
writeSync,
|
|
162
|
-
openSync: (p /*, flags, mode */) => {
|
|
163
|
-
const f = fileForPath(p);
|
|
164
|
-
if (!f) {
|
|
165
|
-
throw Object.assign(
|
|
166
|
-
new Error(`ENOENT: no such file or directory, open '${p}'`),
|
|
167
|
-
{ code: 'ENOENT', errno: -2, syscall: 'open', path: p });
|
|
168
|
-
}
|
|
169
|
-
const fd = nextFd++;
|
|
170
|
-
fakeOpenFds[fd] = { path: String(p), buf: f, offset: 0 };
|
|
171
|
-
return fd;
|
|
172
|
-
},
|
|
173
|
-
closeSync: (fd) => { delete fakeOpenFds[fd]; },
|
|
174
|
-
readSync: (fd, buf, offset, length, position) => {
|
|
175
|
-
const f = fakeOpenFds[fd];
|
|
176
|
-
if (!f) throw Object.assign(new Error('EBADF'), { code: 'EBADF', errno: -9 });
|
|
177
|
-
const pos = (position === null || position === undefined)
|
|
178
|
-
? f.offset : Number(position);
|
|
179
|
-
const remaining = Math.max(0, f.buf.length - pos);
|
|
180
|
-
const n = Math.min(length, remaining);
|
|
181
|
-
for (let i = 0; i < n; i++) buf[offset + i] = f.buf[pos + i];
|
|
182
|
-
if (position === null || position === undefined) f.offset = pos + n;
|
|
183
|
-
return n;
|
|
184
|
-
},
|
|
185
|
-
fsyncSync: () => {},
|
|
186
|
-
existsSync: (p) => fileForPath(p) !== null,
|
|
187
|
-
accessSync: (p) => {
|
|
188
|
-
if (!fileForPath(p)) {
|
|
189
|
-
throw Object.assign(new Error('ENOENT'), { code: 'ENOENT', errno: -2 });
|
|
190
|
-
}
|
|
191
|
-
},
|
|
192
|
-
statSync: (p, o) => {
|
|
193
|
-
const f = fileForPath(p);
|
|
194
|
-
if (!f) {
|
|
195
|
-
if (o && o.throwIfNoEntry === false) return undefined;
|
|
196
|
-
throw Object.assign(new Error('ENOENT'), { code: 'ENOENT', errno: -2 });
|
|
197
|
-
}
|
|
198
|
-
return makeStat(f.length, true, o);
|
|
199
|
-
},
|
|
200
|
-
lstatSync: (p, o) => fakeFs.statSync(p, o),
|
|
201
|
-
fstatSync: (fd, o) => {
|
|
202
|
-
const f = fakeOpenFds[fd];
|
|
203
|
-
return makeStat(f ? f.buf.length : 0, !!f, o);
|
|
204
|
-
},
|
|
205
|
-
};
|
|
206
|
-
|
|
207
|
-
// Serve the .wasm asset from the real filesystem next to the loader.
|
|
208
|
-
async function readWasmAsset(requestedPath) {
|
|
209
|
-
const s = String(requestedPath);
|
|
210
|
-
const marker = 'factoidal.wasm.assets/';
|
|
211
|
-
const ix = s.lastIndexOf(marker);
|
|
212
|
-
const sub = ix < 0 ? s : s.slice(ix + marker.length);
|
|
213
|
-
const abs = path.join(_assetsDir, path.basename(sub));
|
|
214
|
-
return fs.readFileSync(abs);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
const fakeRequire = (name) => {
|
|
218
|
-
if (name === 'node:fs') return fakeFs;
|
|
219
|
-
if (name === 'node:fs/promises') return { readFile: readWasmAsset };
|
|
220
|
-
if (name === 'node:path') return {
|
|
221
|
-
join: (...parts) => parts.filter(Boolean).join('/').replace(/\/+/g, '/'),
|
|
222
|
-
dirname: (p) => String(p).replace(/\/[^/]*$/, '') || '.',
|
|
223
|
-
};
|
|
224
|
-
if (name === 'node:os') return { tmpdir: () => '/tmp' };
|
|
225
|
-
if (name === 'node:tty') return { isatty: () => false };
|
|
226
|
-
if (name === 'node:child_process') return { spawnSync: () => ({ status: 0, signal: null }) };
|
|
227
|
-
throw new Error(`engine-wasm shim: unexpected require('${name}')`);
|
|
228
|
-
};
|
|
229
|
-
fakeRequire.main = { filename: '/factoidal/main.js' };
|
|
230
|
-
|
|
231
|
-
const fakeProc = {
|
|
232
|
-
argv: ['node', 'factoidal', ...args],
|
|
233
|
-
exit: (n) => { exitCode = n | 0; throw EXIT_SENTINEL; },
|
|
234
|
-
stdout: { write: (s) => stdoutBuf.push(String(s)) },
|
|
235
|
-
stderr: { write: (s) => stderrBuf.push(String(s)) },
|
|
236
|
-
platform: 'linux',
|
|
237
|
-
versions: { node: process.versions.node || '22.0.0' },
|
|
238
|
-
env: {},
|
|
239
|
-
cpuUsage: () => ({ user: 0, system: 0 }),
|
|
240
|
-
on: () => {},
|
|
241
|
-
cwd: () => '/static',
|
|
242
|
-
chdir: () => {},
|
|
243
|
-
};
|
|
244
|
-
|
|
245
|
-
const orig = {
|
|
246
|
-
proc: globalThis.process,
|
|
247
|
-
jsooFs: globalThis.jsoo_fs_tmp,
|
|
248
|
-
require: globalThis.require,
|
|
249
|
-
fwPromise: globalThis.__fwPromise,
|
|
250
|
-
consoleLog: console.log,
|
|
251
|
-
consoleError: console.error,
|
|
252
|
-
};
|
|
253
|
-
|
|
254
|
-
globalThis.process = fakeProc;
|
|
255
|
-
globalThis.require = fakeRequire;
|
|
256
|
-
globalThis.jsoo_fs_tmp = undefined;
|
|
257
|
-
delete globalThis.__fwPromise;
|
|
258
|
-
// Belt and braces: some bundle variants route output through
|
|
259
|
-
// console.log/.error (line-wise, newline re-appended on capture).
|
|
260
|
-
console.log = (...a) => { stdoutBuf.push(a.map(String).join(' ') + '\n'); };
|
|
261
|
-
console.error = (...a) => { stderrBuf.push(a.map(String).join(' ') + '\n'); };
|
|
262
|
-
|
|
263
|
-
function restoreGlobals() {
|
|
264
|
-
globalThis.process = orig.proc;
|
|
265
|
-
globalThis.jsoo_fs_tmp = orig.jsooFs;
|
|
266
|
-
if (orig.require === undefined) delete globalThis.require;
|
|
267
|
-
else globalThis.require = orig.require;
|
|
268
|
-
if (orig.fwPromise === undefined) delete globalThis.__fwPromise;
|
|
269
|
-
else globalThis.__fwPromise = orig.fwPromise;
|
|
270
|
-
console.log = orig.consoleLog;
|
|
271
|
-
console.error = orig.consoleError;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
try {
|
|
275
|
-
(new Function(src))();
|
|
276
|
-
const p = globalThis.__fwPromise;
|
|
277
|
-
if (!p || typeof p.then !== 'function') {
|
|
278
|
-
throw new Error(
|
|
279
|
-
'engine-wasm: __fwPromise was not captured — the bundle shape ' +
|
|
280
|
-
'may have changed.');
|
|
281
|
-
}
|
|
282
|
-
try {
|
|
283
|
-
await p;
|
|
284
|
-
} catch (e) {
|
|
285
|
-
// process.exit throws the sentinel through the async IIFE; that
|
|
286
|
-
// is the normal completion path.
|
|
287
|
-
if (e !== EXIT_SENTINEL && !(e && e.__factoidalExit)) throw e;
|
|
288
|
-
}
|
|
289
|
-
} finally {
|
|
290
|
-
restoreGlobals();
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
return {
|
|
294
|
-
stdout: stdoutBuf.join(''),
|
|
295
|
-
stderr: stderrBuf.join(''),
|
|
296
|
-
exitCode,
|
|
297
|
-
};
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
module.exports = { runCli, resolveBundlePath, wasmAvailable };
|
package/sample-store/CURRENT
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
gen-1
|
|
Binary file
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# index predicate file rows bytes sha256 merkle-leaves subject-index term-index object-index
|
|
2
|
-
0 http://www.w3.org/1999/02/22-rdf-syntax-ns#type predicate-0.ibk3 662 48565 4f71147d70b03813900fac8614ede5ba5af09b499f9594162843281d000b513d predicate-0.ibk3.merkle predicate-0.ibk3.sri2 predicate-0.ibk3.tli1 predicate-0.ibk3.oli2
|
|
3
|
-
1 http://www.w3.org/2004/02/skos/core#hasTopConcept predicate-1.ibk3 657 48385 6aa13b38bca39fb47856132b2d66f3ba95ce8ceb64f1d0bb8c467df6e1c45b1a predicate-1.ibk3.merkle predicate-1.ibk3.sri2 predicate-1.ibk3.tli1 predicate-1.ibk3.oli2
|
|
4
|
-
2 http://www.w3.org/2004/02/skos/core#prefLabel predicate-2.ibk3 954 143503 26c27e2b10152314f1ef098598a23a803ef75a2e65083e11f7c6125f0112d402 predicate-2.ibk3.merkle predicate-2.ibk3.sri2 predicate-2.ibk3.tli1 predicate-2.ibk3.oli2
|
|
5
|
-
3 http://www.w3.org/2004/02/skos/core#definition predicate-3.ibk3 655 99238 1844449946c5a9cc8f278368a55ec86076aad00fd448860f242eaa4224e48ffb predicate-3.ibk3.merkle predicate-3.ibk3.sri2 predicate-3.ibk3.tli1 predicate-3.ibk3.oli2
|
|
6
|
-
4 http://www.w3.org/2004/02/skos/core#inScheme predicate-4.ibk3 657 48380 dbf18455489e85771f92138a6a55c938a6b4d06dbfbe4220f99b9ffe65502917 predicate-4.ibk3.merkle predicate-4.ibk3.sri2 predicate-4.ibk3.tli1 predicate-4.ibk3.oli2
|
|
7
|
-
5 http://cv.iptc.org/newscodes/ikos/prefSchemeAlias predicate-5.ibk3 4 559 231bd6648d5b314c1d5fb5229bb51508d5146daf964e93c82d32f5dca0f1d0aa predicate-5.ibk3.merkle predicate-5.ibk3.sri2 predicate-5.ibk3.tli1 predicate-5.ibk3.oli2
|
|
8
|
-
6 http://cv.iptc.org/newscodes/ikos/authority predicate-6.ibk3 4 410 3112c0b4c989c6bc7bb0c383d7f2609c21e8cd345f9fdeb39ed76a6548558489 predicate-6.ibk3.merkle predicate-6.ibk3.sri2 predicate-6.ibk3.tli1 predicate-6.ibk3.oli2
|
|
9
|
-
7 http://purl.org/dc/terms/rightsHolder predicate-7.ibk3 4 456 91c722da0b4ab0c65ba689ecc4b70817eb373be6a9e68f9a9b4ced5b05488dc9 predicate-7.ibk3.merkle predicate-7.ibk3.sri2 predicate-7.ibk3.tli1 predicate-7.ibk3.oli2
|
|
10
|
-
8 http://cv.iptc.org/newscodes/ikos/licenceLink predicate-8.ibk3 4 436 d57f29ce75044fb24399c327ca8806f6c51bda30ffacda2c25c4d37f879adfed predicate-8.ibk3.merkle predicate-8.ibk3.sri2 predicate-8.ibk3.tli1 predicate-8.ibk3.oli2
|
|
11
|
-
9 http://cv.iptc.org/newscodes/ikos/dateReleased predicate-9.ibk3 4 641 6ed8bfeb5025f5d31c88cf3e2026f617fc570bf29730433fe66a7131ef503c7e predicate-9.ibk3.merkle predicate-9.ibk3.sri2 predicate-9.ibk3.tli1 predicate-9.ibk3.oli2
|
|
12
|
-
10 http://www.w3.org/2004/02/skos/core#note predicate-10.ibk3 57 11597 57a4afb56e8fdcd873633a29ad1c2a9c1942d0cf25bc6a182b08dc6e03100c95 predicate-10.ibk3.merkle predicate-10.ibk3.sri2 predicate-10.ibk3.tli1 predicate-10.ibk3.oli2
|
|
13
|
-
11 http://cv.iptc.org/newscodes/ikos/created predicate-11.ibk3 407 28371 4785469be090e311f541b26fa27da114613136366e84cb5e9efb60ac6e6da72e predicate-11.ibk3.merkle predicate-11.ibk3.sri2 predicate-11.ibk3.tli1 predicate-11.ibk3.oli2
|
|
14
|
-
12 http://cv.iptc.org/newscodes/ikos/modified predicate-12.ibk3 365 25277 265094c8a35cd0482d043f300444af82429f31dd2fa0595e026be700d7d362f4 predicate-12.ibk3.merkle predicate-12.ibk3.sri2 predicate-12.ibk3.tli1 predicate-12.ibk3.oli2
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
� ��:ToBvI�ff��h�u"�_���w�
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
�3+�T�z'/\������-{��%�U��0�/
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
\4���m���8 haɤ[�x�`�gA��@z��j
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
��۳Q��,g����_�B�T��������1
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
�Hak���>[]V��|��!�$�v"�U��
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
�0�s*�HW����d��xG�j�Ӊ�|��n
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
��@�M9����/ZΥ����8�a��չ
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
�@��_�Ay�U�x%h�U�i�U/�_�PJ�i
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
��DFv��G��4LD��o����w�I6
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
����m�/S[S���xRx}� 7a�FP�
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
�$ϥ���tRK
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
�4����E/��U�d$z��Z�J�>*�g
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
�U�(3�������$B��Wa7~�:k��wKb�G
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
+��&
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
���f.:g���1X���rF�Nb����
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
�z�I-G��3�����yR����[��:$lY���+ �/���:��v3����W' ��������#�g���U��oj�9�B�"=���A�BN��l*6���
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
?�Pa��&@?ThJ���y)���4��^�%����
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
�R�2 ���mcY(]HI��
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
��Q�+_�`*YN� ;B��E�<Ls�+d���
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
�c����E���EҮ���J�x?ݣ67���
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
5�z�@d���Z�����Kg���U,�"�{�l��q֪נ�c�,��@$�zo���Q���
|
|
Binary file
|
|
Binary file
|
|
Binary file
|