@openclaw/whatsapp 2026.5.28 → 2026.5.31-beta.1
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/dist/{access-control-Z0fYaWrx.js → access-control-C53zKYSN.js} +1 -1
- package/dist/{accounts-BMGM1RtF.js → accounts-DgViSyJx.js} +1 -0
- package/dist/{action-runtime-BdhkGtaP.js → action-runtime-Cyp5GNIT.js} +2 -2
- package/dist/action-runtime-api.js +1 -1
- package/dist/action-runtime.runtime.js +1 -1
- package/dist/api.js +9 -9
- package/dist/{approval-handler.runtime-C25wPeBf.js → approval-handler.runtime-BVmOu6x1.js} +1 -2
- package/dist/{auth-store-BrKb0mwT.js → auth-store-CZ22aNcV.js} +4 -2
- package/dist/{channel-D3y4A5Dd.js → channel-DA2BAIo5.js} +17 -64
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/{channel-react-action-Cd2qkLqp.js → channel-react-action-zvbaCnGe.js} +3 -3
- package/dist/{channel.runtime-C228XUjs.js → channel.runtime-Q1LZDB5s.js} +4 -4
- package/dist/{channel.setup-BJQyTUUP.js → channel.setup-DHXOo4h5.js} +2 -3
- package/dist/{config-schema-CsNDlDpL.js → config-schema-CROZuhT-.js} +16 -0
- package/dist/{connection-controller-mpPGmqGq.js → connection-controller-Bnm4INld.js} +2 -2
- package/dist/contract-api.js +1 -1
- package/dist/light-runtime-api.js +1 -1
- package/dist/{login-CE4UYnyO.js → login-2fuBM7Je.js} +4 -4
- package/dist/{login-qr-LBvhEes5.js → login-qr-B1o7GFy8.js} +10 -6
- package/dist/login-qr-runtime.js +1 -1
- package/dist/{monitor-Ccph7Y8M.js → monitor-BVRq04Dt.js} +36 -18
- package/dist/runtime-api.js +7 -7
- package/dist/{send-C4LG-Cl6.js → send-DSlVXKL_.js} +53 -41
- package/dist/{send-api-C66vkRl9.js → send-api-Bjn-h80j.js} +3 -2
- package/dist/{session-D8UW2Vbn.js → session-DyGWNClj.js} +1 -1
- package/dist/{setup-core-DpfT4K-2.js → setup-core-OvPMaAsx.js} +4 -4
- package/dist/{setup-finalize-CFnxX7la.js → setup-finalize-Dk23pfKc.js} +3 -3
- package/dist/setup-plugin-api.js +1 -1
- package/dist/{setup-surface-DRsmp0ZS.js → setup-surface-F-jVrH8u.js} +3 -3
- package/node_modules/@audio/decode-aac/LICENSE +9 -0
- package/node_modules/@audio/decode-aac/README.md +60 -0
- package/node_modules/@audio/decode-aac/decode-aac.d.ts +16 -0
- package/node_modules/@audio/decode-aac/decode-aac.js +391 -0
- package/node_modules/@audio/decode-aac/package.json +47 -0
- package/node_modules/@audio/decode-aac/src/aac.wasm.cjs +0 -0
- package/node_modules/@audio/decode-aiff/LICENSE +21 -0
- package/node_modules/@audio/decode-aiff/README.md +53 -0
- package/node_modules/@audio/decode-aiff/decode-aiff.d.ts +16 -0
- package/node_modules/@audio/decode-aiff/decode-aiff.js +583 -0
- package/node_modules/@audio/decode-aiff/package.json +42 -0
- package/node_modules/@audio/decode-amr/LICENSE +191 -0
- package/node_modules/@audio/decode-amr/README.md +65 -0
- package/node_modules/@audio/decode-amr/decode-amr.d.ts +16 -0
- package/node_modules/@audio/decode-amr/decode-amr.js +159 -0
- package/node_modules/@audio/decode-amr/package.json +48 -0
- package/node_modules/@audio/decode-amr/src/amr.wasm.cjs +0 -0
- package/node_modules/@audio/decode-caf/LICENSE +21 -0
- package/node_modules/@audio/decode-caf/README.md +55 -0
- package/node_modules/@audio/decode-caf/decode-caf.d.ts +16 -0
- package/node_modules/@audio/decode-caf/decode-caf.js +190 -0
- package/node_modules/@audio/decode-caf/package.json +43 -0
- package/node_modules/{audio-buffer → @audio/decode-flac}/LICENSE +5 -2
- package/node_modules/@audio/decode-flac/README.md +23 -0
- package/node_modules/@audio/decode-flac/decode-flac.d.ts +16 -0
- package/node_modules/@audio/decode-flac/decode-flac.js +2994 -0
- package/node_modules/@audio/decode-flac/meta.js +115 -0
- package/node_modules/@audio/decode-flac/package.json +49 -0
- package/node_modules/@audio/decode-mp3/LICENSE +25 -0
- package/node_modules/@audio/decode-mp3/README.md +23 -0
- package/node_modules/@audio/decode-mp3/decode-mp3.d.ts +16 -0
- package/node_modules/@audio/decode-mp3/decode-mp3.js +868 -0
- package/node_modules/@audio/decode-mp3/meta.js +143 -0
- package/node_modules/@audio/decode-mp3/package.json +50 -0
- package/node_modules/@audio/decode-opus/LICENSE +25 -0
- package/node_modules/@audio/decode-opus/README.md +23 -0
- package/node_modules/@audio/decode-opus/decode-opus.d.ts +16 -0
- package/node_modules/@audio/decode-opus/decode-opus.js +3179 -0
- package/node_modules/@audio/decode-opus/package.json +47 -0
- package/node_modules/@audio/decode-qoa/LICENSE +25 -0
- package/node_modules/@audio/decode-qoa/README.md +21 -0
- package/node_modules/@audio/decode-qoa/decode-qoa.d.ts +16 -0
- package/node_modules/@audio/decode-qoa/decode-qoa.js +278 -0
- package/node_modules/@audio/decode-qoa/package.json +46 -0
- package/node_modules/@audio/decode-vorbis/LICENSE +25 -0
- package/node_modules/@audio/decode-vorbis/README.md +23 -0
- package/node_modules/@audio/decode-vorbis/decode-vorbis.d.ts +16 -0
- package/node_modules/@audio/decode-vorbis/decode-vorbis.js +2984 -0
- package/node_modules/@audio/decode-vorbis/package.json +47 -0
- package/node_modules/@audio/decode-wav/decode-wav.js +104 -0
- package/node_modules/@audio/decode-wav/meta.js +114 -0
- package/node_modules/@audio/decode-wav/package.json +27 -0
- package/node_modules/@audio/decode-webm/LICENSE +21 -0
- package/node_modules/@audio/decode-webm/README.md +57 -0
- package/node_modules/@audio/decode-webm/decode-webm.d.ts +16 -0
- package/node_modules/@audio/decode-webm/decode-webm.js +3964 -0
- package/node_modules/@audio/decode-webm/package.json +51 -0
- package/node_modules/@audio/decode-wma/LICENSE +12 -0
- package/node_modules/@audio/decode-wma/README.md +76 -0
- package/node_modules/@audio/decode-wma/decode-wma.d.ts +33 -0
- package/node_modules/@audio/decode-wma/decode-wma.js +525 -0
- package/node_modules/@audio/decode-wma/package.json +47 -0
- package/node_modules/@audio/decode-wma/src/wma.wasm.cjs +0 -0
- package/node_modules/audio-decode/.claude/settings.json +204 -0
- package/node_modules/audio-decode/.github/workflows/test.js.yml +11 -20
- package/node_modules/audio-decode/.gitmodules +9 -0
- package/node_modules/audio-decode/audio-decode.d.ts +48 -10
- package/node_modules/audio-decode/audio-decode.js +193 -77
- package/node_modules/audio-decode/meta.js +11 -0
- package/node_modules/audio-decode/package.json +49 -21
- package/node_modules/audio-decode/readme.md +129 -29
- package/node_modules/audio-decode/stream.d.ts +15 -0
- package/node_modules/audio-decode/stream.js +1 -0
- package/node_modules/audio-decode/test.html +29 -10
- package/node_modules/lru-cache/dist/commonjs/browser/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/commonjs/browser/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/browser/index.js.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/browser/index.min.js.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/commonjs/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/index.js.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/index.min.js.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/node/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/commonjs/node/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/node/index.js.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/node/index.min.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/browser/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/esm/browser/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/esm/browser/index.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/browser/index.min.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/esm/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/esm/index.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/index.min.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/node/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/esm/node/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/esm/node/index.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/node/index.min.js.map +1 -1
- package/node_modules/lru-cache/package.json +1 -1
- package/node_modules/typebox/build/type/script/mapping.d.mts +5 -2
- package/node_modules/typebox/build/type/script/mapping.mjs +15 -8
- package/node_modules/typebox/build/type/script/parser.d.mts +3 -1
- package/node_modules/typebox/build/type/script/parser.mjs +2 -1
- package/node_modules/typebox/package.json +29 -29
- package/npm-shrinkwrap.json +156 -39
- package/openclaw.plugin.json +76 -0
- package/package.json +6 -6
- package/node_modules/audio-buffer/.eslintrc.json +0 -44
- package/node_modules/audio-buffer/.github/workflows/node.js.yml +0 -31
- package/node_modules/audio-buffer/.travis.yml +0 -7
- package/node_modules/audio-buffer/index.js +0 -76
- package/node_modules/audio-buffer/package.json +0 -37
- package/node_modules/audio-buffer/readme.md +0 -56
- package/node_modules/audio-decode/.eslintrc.json +0 -43
- package/node_modules/audio-decode/.travis.yml +0 -13
- package/node_modules/audio-decode/tea.yaml +0 -6
- package/node_modules/audio-decode/test-case.js +0 -11
- package/node_modules/audio-decode/test.js +0 -107
- package/node_modules/node-wav/README.md +0 -35
- package/node_modules/node-wav/file.wav +0 -0
- package/node_modules/node-wav/index.js +0 -291
- package/node_modules/node-wav/package.json +0 -29
- package/node_modules/node-wav/tests/file1.wav +0 -0
- package/node_modules/node-wav/tests/test.js +0 -66
- package/node_modules/node-wav/x.js +0 -12
- package/node_modules/node-wav/x.json +0 -86702
- package/node_modules/node-wav/x.js~ +0 -13
|
@@ -0,0 +1,2984 @@
|
|
|
1
|
+
// ../../node_modules/simple-yenc/dist/esm.js
|
|
2
|
+
var t = (t2, n = 4294967295, e2 = 79764919) => {
|
|
3
|
+
const r = new Int32Array(256);
|
|
4
|
+
let o, s, i, c = n;
|
|
5
|
+
for (o = 0; o < 256; o++) {
|
|
6
|
+
for (i = o << 24, s = 8; s > 0; --s) i = 2147483648 & i ? i << 1 ^ e2 : i << 1;
|
|
7
|
+
r[o] = i;
|
|
8
|
+
}
|
|
9
|
+
for (o = 0; o < t2.length; o++) c = c << 8 ^ r[255 & (c >> 24 ^ t2[o])];
|
|
10
|
+
return c;
|
|
11
|
+
};
|
|
12
|
+
var e = (n, e2 = t) => {
|
|
13
|
+
const r = (t2) => new Uint8Array(t2.length / 2).map(((n2, e3) => parseInt(t2.substring(2 * e3, 2 * (e3 + 1)), 16))), o = (t2) => r(t2)[0], s = /* @__PURE__ */ new Map();
|
|
14
|
+
[, 8364, , 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, , 381, , , 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250, 339, , 382, 376].forEach(((t2, n2) => s.set(t2, n2)));
|
|
15
|
+
const i = new Uint8Array(n.length);
|
|
16
|
+
let c, a, l, f = false, g = 0, h = 42, p = n.length > 13 && "dynEncode" === n.substring(0, 9), u = 0;
|
|
17
|
+
p && (u = 11, a = o(n.substring(9, u)), a <= 1 && (u += 2, h = o(n.substring(11, u))), 1 === a && (u += 8, l = ((t2) => new DataView(r(t2).buffer).getInt32(0, true))(n.substring(13, u))));
|
|
18
|
+
const d = 256 - h;
|
|
19
|
+
for (let t2 = u; t2 < n.length; t2++) if (c = n.charCodeAt(t2), 61 !== c || f) {
|
|
20
|
+
if (92 === c && t2 < n.length - 5 && p) {
|
|
21
|
+
const e3 = n.charCodeAt(t2 + 1);
|
|
22
|
+
117 !== e3 && 85 !== e3 || (c = parseInt(n.substring(t2 + 2, t2 + 6), 16), t2 += 5);
|
|
23
|
+
}
|
|
24
|
+
if (c > 255) {
|
|
25
|
+
const t3 = s.get(c);
|
|
26
|
+
t3 && (c = t3 + 127);
|
|
27
|
+
}
|
|
28
|
+
f && (f = false, c -= 64), i[g++] = c < h && c > 0 ? c + d : c - h;
|
|
29
|
+
} else f = true;
|
|
30
|
+
const m = i.subarray(0, g);
|
|
31
|
+
if (p && 1 === a) {
|
|
32
|
+
const t2 = e2(m);
|
|
33
|
+
if (t2 !== l) {
|
|
34
|
+
const n2 = "Decode failed crc32 validation";
|
|
35
|
+
throw console.error("`simple-yenc`\n", n2 + "\n", "Expected: " + l + "; Got: " + t2 + "\n", "Visit https://github.com/eshaz/simple-yenc for more information"), Error(n2);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return m;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// ../../node_modules/@wasm-audio-decoders/common/src/WASMAudioDecoderCommon.js
|
|
42
|
+
function WASMAudioDecoderCommon() {
|
|
43
|
+
const uint8Array2 = Uint8Array;
|
|
44
|
+
const float32Array = Float32Array;
|
|
45
|
+
if (!WASMAudioDecoderCommon.modules) {
|
|
46
|
+
Object.defineProperties(WASMAudioDecoderCommon, {
|
|
47
|
+
modules: {
|
|
48
|
+
value: /* @__PURE__ */ new WeakMap()
|
|
49
|
+
},
|
|
50
|
+
setModule: {
|
|
51
|
+
value(Ref, module) {
|
|
52
|
+
WASMAudioDecoderCommon.modules.set(Ref, Promise.resolve(module));
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
getModule: {
|
|
56
|
+
value(Ref, wasmString) {
|
|
57
|
+
let module = WASMAudioDecoderCommon.modules.get(Ref);
|
|
58
|
+
if (!module) {
|
|
59
|
+
if (!wasmString) {
|
|
60
|
+
wasmString = Ref.wasm;
|
|
61
|
+
module = WASMAudioDecoderCommon.inflateDynEncodeString(
|
|
62
|
+
wasmString
|
|
63
|
+
).then((data3) => WebAssembly.compile(data3));
|
|
64
|
+
} else {
|
|
65
|
+
module = WebAssembly.compile(e(wasmString));
|
|
66
|
+
}
|
|
67
|
+
WASMAudioDecoderCommon.modules.set(Ref, module);
|
|
68
|
+
}
|
|
69
|
+
return module;
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
concatFloat32: {
|
|
73
|
+
value(buffers, length2) {
|
|
74
|
+
let ret = new float32Array(length2), i = 0, offset = 0;
|
|
75
|
+
while (i < buffers.length) {
|
|
76
|
+
ret.set(buffers[i], offset);
|
|
77
|
+
offset += buffers[i++].length;
|
|
78
|
+
}
|
|
79
|
+
return ret;
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
getDecodedAudio: {
|
|
83
|
+
value: (errors, channelData, samplesDecoded, sampleRate2, bitDepth2) => ({
|
|
84
|
+
errors,
|
|
85
|
+
channelData,
|
|
86
|
+
samplesDecoded,
|
|
87
|
+
sampleRate: sampleRate2,
|
|
88
|
+
bitDepth: bitDepth2
|
|
89
|
+
})
|
|
90
|
+
},
|
|
91
|
+
getDecodedAudioMultiChannel: {
|
|
92
|
+
value(errors, input, channelsDecoded, samplesDecoded, sampleRate2, bitDepth2) {
|
|
93
|
+
let channelData = [], i, j;
|
|
94
|
+
for (i = 0; i < channelsDecoded; i++) {
|
|
95
|
+
const channel2 = [];
|
|
96
|
+
for (j = 0; j < input.length; ) channel2.push(input[j++][i] || []);
|
|
97
|
+
channelData.push(
|
|
98
|
+
WASMAudioDecoderCommon.concatFloat32(channel2, samplesDecoded)
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
return WASMAudioDecoderCommon.getDecodedAudio(
|
|
102
|
+
errors,
|
|
103
|
+
channelData,
|
|
104
|
+
samplesDecoded,
|
|
105
|
+
sampleRate2,
|
|
106
|
+
bitDepth2
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
/*
|
|
111
|
+
******************
|
|
112
|
+
* Compression Code
|
|
113
|
+
******************
|
|
114
|
+
*/
|
|
115
|
+
inflateDynEncodeString: {
|
|
116
|
+
value(source) {
|
|
117
|
+
source = e(source);
|
|
118
|
+
return new Promise((resolve) => {
|
|
119
|
+
const puffString = String.raw`dynEncode012804c7886d()((()>+*§§)§,§§§§)§+§§§)§+.-()(*)-+)(.7*§)i¸¸,3§(i¸¸,3/G+.¡*(,(,3+)2å:-),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)^*<H,H(P*4U((I-H(H*i0J,^*DH+H-H*I+H,I*4)33H(H*H)^*DH(H+H)^*@H+i§H)i§3æ*).§K(iHI/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)J.H.W)(i)c)(H,i)I,H-i*I-4)33i(I.*hH(V)(H+n5(H(i*I-i(I,i)I.+hH,i*J+iHn,hi(I-i*I,+hH,H/H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)J(H(V)(J(i)c)(H)H(i)H,c)(3H*i*I*H,i)I,4(3(-H(H,W)(H-I-H,i*I,4)3(3(3H,H-I1H+I,H.i)H1V)(J.i(v5(33H.-H(H,i(c)(H,i*I,4)333)-§i*I*+§H*iHn,hi73H,H(i)8(H+J+H)P*(H*V)(J-r,§H)P*,H.i)H+H,i)V)(-H*i*I*H+i)I+H-H.I.H,H-i)I,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7H,c)(i)H+i´8W)(H,I,H+i*I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,H-b((3H(P*0i)I.4)3H-i¨*n5*H-iÅ*s,hi73H-i)J+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)J+i¸7V)(H(H+iø7V)(8(J/H(P*0J+s,hi73H+H,H.J,I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+H.H+H/U((b((H(H(P*0i)J+^*0H,i)I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)c)(H,i*I,H+i)I+4)33i)I-3H-3!2)0§K(i2J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,J(H,P*8J/s50H,H.i+J0^*<i¦I*H.H,P*4J1J.U(*H.U((J2i')o5/H.U()I.H,H(^*<H0H1U((H.i0J.i§i0i')o5/H/H.H2J*H(J.q50H,P*0J/H*I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0H(H1U((b((H/i)I/H(i)I(H*i)I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-H(i0c)(H(i*I(4)33iè1i1H,i-iÈ*8)Bi(I(+hH(ido,hH,i-H(i-c)(H(i*I(4)33iÈ6iè6H,i-iF8)BiØ1i)b((41-H,i-H(i/c)(H(i*I(4)3(3(-H,i-H(i1c)(H(i*I(4)3(3(-H,i-H(i0c)(H(i*I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)^*TH,H,iø-^*PH,H,iX^*LH,H,i(^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iEr5)H(i©*I1H-i)I0i(i;H.i,J(i(H(i(rCJ(J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-H-V)(i)H,i+8(c)(H/i)I/H-i*I-H*i)I*4)-H(i)i¨1I/+hH(H*o,hH,i-H/V)(i)i(c)(H/i*I/H(i)I(4)33i¤I*H,iø-H,i¸)H,i-i;8)5+H0H1I2i(I-+hH-H2p,hH,H,iP8*J*i(p5-H*i7u,hH,i-H-i)H*c)(H-i)I-4*3i(I/i+I.i+I(*h*h*hH*i86*(*)3H-m,hi£I*403H-i)H,W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.J(H-J.p,hi¢I*4.3H,i-H-i)I*+hH(,hH*H/c)(H*i*I*H(i)I(4)-H.I-4+3(3(33H,W)1m,hiI*4,3H,iø-H,i¸)H,i-H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-o5,3H,i(H,iXH,i-H1i)H08)J(,hi I*H(i(p5,H0H,V)H,V)o5,3H,H,iPH,iH8+I*4+3(3(3H,i$6i¬78+I*3H*H3m5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(((«(Ë(ë((*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7*S7US0U `;
|
|
120
|
+
WASMAudioDecoderCommon.getModule(WASMAudioDecoderCommon, puffString).then((wasm) => WebAssembly.instantiate(wasm, {})).then(({ exports }) => {
|
|
121
|
+
const instanceExports = new Map(Object.entries(exports));
|
|
122
|
+
const puff = instanceExports.get("puff");
|
|
123
|
+
const memory = instanceExports.get("memory")["buffer"];
|
|
124
|
+
const dataArray = new uint8Array2(memory);
|
|
125
|
+
const heapView = new DataView(memory);
|
|
126
|
+
let heapPos = instanceExports.get("__heap_base");
|
|
127
|
+
const sourceLength = source.length;
|
|
128
|
+
const sourceLengthPtr = heapPos;
|
|
129
|
+
heapPos += 4;
|
|
130
|
+
heapView.setInt32(sourceLengthPtr, sourceLength, true);
|
|
131
|
+
const sourcePtr = heapPos;
|
|
132
|
+
heapPos += sourceLength;
|
|
133
|
+
dataArray.set(source, sourcePtr);
|
|
134
|
+
const destLengthPtr = heapPos;
|
|
135
|
+
heapPos += 4;
|
|
136
|
+
heapView.setInt32(
|
|
137
|
+
destLengthPtr,
|
|
138
|
+
dataArray.byteLength - heapPos,
|
|
139
|
+
true
|
|
140
|
+
);
|
|
141
|
+
puff(heapPos, destLengthPtr, sourcePtr, sourceLengthPtr);
|
|
142
|
+
resolve(
|
|
143
|
+
dataArray.slice(
|
|
144
|
+
heapPos,
|
|
145
|
+
heapPos + heapView.getInt32(destLengthPtr, true)
|
|
146
|
+
)
|
|
147
|
+
);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
Object.defineProperty(this, "wasm", {
|
|
155
|
+
enumerable: true,
|
|
156
|
+
get: () => this._wasm
|
|
157
|
+
});
|
|
158
|
+
this.getOutputChannels = (outputData, channelsDecoded, samplesDecoded) => {
|
|
159
|
+
let output = [], i = 0;
|
|
160
|
+
while (i < channelsDecoded)
|
|
161
|
+
output.push(
|
|
162
|
+
outputData.slice(
|
|
163
|
+
i * samplesDecoded,
|
|
164
|
+
i++ * samplesDecoded + samplesDecoded
|
|
165
|
+
)
|
|
166
|
+
);
|
|
167
|
+
return output;
|
|
168
|
+
};
|
|
169
|
+
this.allocateTypedArray = (len, TypedArray, setPointer = true) => {
|
|
170
|
+
const ptr = this._wasm.malloc(TypedArray.BYTES_PER_ELEMENT * len);
|
|
171
|
+
if (setPointer) this._pointers.add(ptr);
|
|
172
|
+
return {
|
|
173
|
+
ptr,
|
|
174
|
+
len,
|
|
175
|
+
buf: new TypedArray(this._wasm.HEAP, ptr, len)
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
this.free = () => {
|
|
179
|
+
this._pointers.forEach((ptr) => {
|
|
180
|
+
this._wasm.free(ptr);
|
|
181
|
+
});
|
|
182
|
+
this._pointers.clear();
|
|
183
|
+
};
|
|
184
|
+
this.codeToString = (ptr) => {
|
|
185
|
+
const characters = [], heap = new Uint8Array(this._wasm.HEAP);
|
|
186
|
+
for (let character = heap[ptr]; character !== 0; character = heap[++ptr])
|
|
187
|
+
characters.push(character);
|
|
188
|
+
return String.fromCharCode.apply(null, characters);
|
|
189
|
+
};
|
|
190
|
+
this.addError = (errors, message, frameLength2, frameNumber2, inputBytes, outputSamples) => {
|
|
191
|
+
errors.push({
|
|
192
|
+
message,
|
|
193
|
+
frameLength: frameLength2,
|
|
194
|
+
frameNumber: frameNumber2,
|
|
195
|
+
inputBytes,
|
|
196
|
+
outputSamples
|
|
197
|
+
});
|
|
198
|
+
};
|
|
199
|
+
this.instantiate = (_EmscriptenWASM, _module) => {
|
|
200
|
+
if (_module) WASMAudioDecoderCommon.setModule(_EmscriptenWASM, _module);
|
|
201
|
+
this._wasm = new _EmscriptenWASM(WASMAudioDecoderCommon).instantiate();
|
|
202
|
+
this._pointers = /* @__PURE__ */ new Set();
|
|
203
|
+
return this._wasm.ready.then(() => this);
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// ../_build/empty-worker.js
|
|
208
|
+
var empty_worker_default = null;
|
|
209
|
+
|
|
210
|
+
// ../../node_modules/@wasm-audio-decoders/common/src/WASMAudioDecoderWorker.js
|
|
211
|
+
var getWorker = () => globalThis.Worker || empty_worker_default;
|
|
212
|
+
var WASMAudioDecoderWorker = class extends getWorker() {
|
|
213
|
+
constructor(options, name, Decoder2, EmscriptenWASM2) {
|
|
214
|
+
if (!WASMAudioDecoderCommon.modules) new WASMAudioDecoderCommon();
|
|
215
|
+
let source = WASMAudioDecoderCommon.modules.get(Decoder2);
|
|
216
|
+
if (!source) {
|
|
217
|
+
let type = "text/javascript", isNode, webworkerSourceCode = `'use strict';(${((_Decoder, _WASMAudioDecoderCommon, _EmscriptenWASM) => {
|
|
218
|
+
let decoder2, moduleResolve, modulePromise = new Promise((resolve) => {
|
|
219
|
+
moduleResolve = resolve;
|
|
220
|
+
});
|
|
221
|
+
self.onmessage = ({ data: { id, command, data: data3 } }) => {
|
|
222
|
+
let messagePromise = modulePromise, messagePayload = { id }, transferList;
|
|
223
|
+
if (command === "init") {
|
|
224
|
+
Object.defineProperties(_Decoder, {
|
|
225
|
+
WASMAudioDecoderCommon: { value: _WASMAudioDecoderCommon },
|
|
226
|
+
EmscriptenWASM: { value: _EmscriptenWASM },
|
|
227
|
+
module: { value: data3.module },
|
|
228
|
+
isWebWorker: { value: true }
|
|
229
|
+
});
|
|
230
|
+
decoder2 = new _Decoder(data3.options);
|
|
231
|
+
moduleResolve();
|
|
232
|
+
} else if (command === "free") {
|
|
233
|
+
decoder2.free();
|
|
234
|
+
} else if (command === "ready") {
|
|
235
|
+
messagePromise = messagePromise.then(() => decoder2.ready);
|
|
236
|
+
} else if (command === "reset") {
|
|
237
|
+
messagePromise = messagePromise.then(() => decoder2.reset());
|
|
238
|
+
} else {
|
|
239
|
+
Object.assign(
|
|
240
|
+
messagePayload,
|
|
241
|
+
decoder2[command](
|
|
242
|
+
// detach buffers
|
|
243
|
+
Array.isArray(data3) ? data3.map((data4) => new Uint8Array(data4)) : new Uint8Array(data3)
|
|
244
|
+
)
|
|
245
|
+
);
|
|
246
|
+
transferList = messagePayload.channelData ? messagePayload.channelData.map((channel2) => channel2.buffer) : [];
|
|
247
|
+
}
|
|
248
|
+
messagePromise.then(
|
|
249
|
+
() => self.postMessage(messagePayload, transferList)
|
|
250
|
+
);
|
|
251
|
+
};
|
|
252
|
+
}).toString()})(${Decoder2}, ${WASMAudioDecoderCommon}, ${EmscriptenWASM2})`;
|
|
253
|
+
try {
|
|
254
|
+
isNode = typeof process.versions.node !== "undefined";
|
|
255
|
+
} catch {
|
|
256
|
+
}
|
|
257
|
+
source = isNode ? `data:${type};base64,${Buffer.from(webworkerSourceCode).toString(
|
|
258
|
+
"base64"
|
|
259
|
+
)}` : URL.createObjectURL(new Blob([webworkerSourceCode], { type }));
|
|
260
|
+
WASMAudioDecoderCommon.modules.set(Decoder2, source);
|
|
261
|
+
}
|
|
262
|
+
super(source, { name });
|
|
263
|
+
this._id = Number.MIN_SAFE_INTEGER;
|
|
264
|
+
this._enqueuedOperations = /* @__PURE__ */ new Map();
|
|
265
|
+
this.onmessage = ({ data: data3 }) => {
|
|
266
|
+
const { id, ...rest } = data3;
|
|
267
|
+
this._enqueuedOperations.get(id)(rest);
|
|
268
|
+
this._enqueuedOperations.delete(id);
|
|
269
|
+
};
|
|
270
|
+
new EmscriptenWASM2(WASMAudioDecoderCommon).getModule().then((module) => {
|
|
271
|
+
this.postToDecoder("init", { module, options });
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
async postToDecoder(command, data3) {
|
|
275
|
+
return new Promise((resolve) => {
|
|
276
|
+
this.postMessage({
|
|
277
|
+
command,
|
|
278
|
+
id: this._id,
|
|
279
|
+
data: data3
|
|
280
|
+
});
|
|
281
|
+
this._enqueuedOperations.set(this._id++, resolve);
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
get ready() {
|
|
285
|
+
return this.postToDecoder("ready");
|
|
286
|
+
}
|
|
287
|
+
async free() {
|
|
288
|
+
await this.postToDecoder("free").finally(() => {
|
|
289
|
+
this.terminate();
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
async reset() {
|
|
293
|
+
await this.postToDecoder("reset");
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
// ../../node_modules/@wasm-audio-decoders/common/src/utilities.js
|
|
298
|
+
var assignNames = (Class, name) => {
|
|
299
|
+
Object.defineProperty(Class, "name", { value: name });
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
// ../../node_modules/codec-parser/src/constants.js
|
|
303
|
+
var symbol = Symbol;
|
|
304
|
+
var mappingJoin = ", ";
|
|
305
|
+
var channelMappings = (() => {
|
|
306
|
+
const front = "front";
|
|
307
|
+
const side = "side";
|
|
308
|
+
const rear = "rear";
|
|
309
|
+
const left = "left";
|
|
310
|
+
const center = "center";
|
|
311
|
+
const right = "right";
|
|
312
|
+
return ["", front + " ", side + " ", rear + " "].map(
|
|
313
|
+
(x) => [
|
|
314
|
+
[left, right],
|
|
315
|
+
[left, right, center],
|
|
316
|
+
[left, center, right],
|
|
317
|
+
[center, left, right],
|
|
318
|
+
[center]
|
|
319
|
+
].flatMap((y) => y.map((z) => x + z).join(mappingJoin))
|
|
320
|
+
);
|
|
321
|
+
})();
|
|
322
|
+
var lfe = "LFE";
|
|
323
|
+
var monophonic = "monophonic (mono)";
|
|
324
|
+
var stereo = "stereo";
|
|
325
|
+
var surround = "surround";
|
|
326
|
+
var getChannelMapping = (channelCount, ...mappings) => `${[
|
|
327
|
+
monophonic,
|
|
328
|
+
stereo,
|
|
329
|
+
`linear ${surround}`,
|
|
330
|
+
"quadraphonic",
|
|
331
|
+
`5.0 ${surround}`,
|
|
332
|
+
`5.1 ${surround}`,
|
|
333
|
+
`6.1 ${surround}`,
|
|
334
|
+
`7.1 ${surround}`
|
|
335
|
+
][channelCount - 1]} (${mappings.join(mappingJoin)})`;
|
|
336
|
+
var vorbisOpusChannelMapping = [
|
|
337
|
+
monophonic,
|
|
338
|
+
getChannelMapping(2, channelMappings[0][0]),
|
|
339
|
+
getChannelMapping(3, channelMappings[0][2]),
|
|
340
|
+
getChannelMapping(4, channelMappings[1][0], channelMappings[3][0]),
|
|
341
|
+
getChannelMapping(5, channelMappings[1][2], channelMappings[3][0]),
|
|
342
|
+
getChannelMapping(6, channelMappings[1][2], channelMappings[3][0], lfe),
|
|
343
|
+
getChannelMapping(7, channelMappings[1][2], channelMappings[2][0], channelMappings[3][4], lfe),
|
|
344
|
+
getChannelMapping(8, channelMappings[1][2], channelMappings[2][0], channelMappings[3][0], lfe)
|
|
345
|
+
];
|
|
346
|
+
var rate192000 = 192e3;
|
|
347
|
+
var rate176400 = 176400;
|
|
348
|
+
var rate96000 = 96e3;
|
|
349
|
+
var rate88200 = 88200;
|
|
350
|
+
var rate64000 = 64e3;
|
|
351
|
+
var rate48000 = 48e3;
|
|
352
|
+
var rate44100 = 44100;
|
|
353
|
+
var rate32000 = 32e3;
|
|
354
|
+
var rate24000 = 24e3;
|
|
355
|
+
var rate22050 = 22050;
|
|
356
|
+
var rate16000 = 16e3;
|
|
357
|
+
var rate12000 = 12e3;
|
|
358
|
+
var rate11025 = 11025;
|
|
359
|
+
var rate8000 = 8e3;
|
|
360
|
+
var rate7350 = 7350;
|
|
361
|
+
var absoluteGranulePosition = "absoluteGranulePosition";
|
|
362
|
+
var bandwidth = "bandwidth";
|
|
363
|
+
var bitDepth = "bitDepth";
|
|
364
|
+
var bitrate = "bitrate";
|
|
365
|
+
var bitrateMaximum = bitrate + "Maximum";
|
|
366
|
+
var bitrateMinimum = bitrate + "Minimum";
|
|
367
|
+
var bitrateNominal = bitrate + "Nominal";
|
|
368
|
+
var buffer = "buffer";
|
|
369
|
+
var bufferFullness = buffer + "Fullness";
|
|
370
|
+
var codec = "codec";
|
|
371
|
+
var codecFrames = codec + "Frames";
|
|
372
|
+
var coupledStreamCount = "coupledStreamCount";
|
|
373
|
+
var crc = "crc";
|
|
374
|
+
var crc16 = crc + "16";
|
|
375
|
+
var crc32 = crc + "32";
|
|
376
|
+
var data = "data";
|
|
377
|
+
var description = "description";
|
|
378
|
+
var duration = "duration";
|
|
379
|
+
var emphasis = "emphasis";
|
|
380
|
+
var hasOpusPadding = "hasOpusPadding";
|
|
381
|
+
var header = "header";
|
|
382
|
+
var isContinuedPacket = "isContinuedPacket";
|
|
383
|
+
var isCopyrighted = "isCopyrighted";
|
|
384
|
+
var isFirstPage = "isFirstPage";
|
|
385
|
+
var isHome = "isHome";
|
|
386
|
+
var isLastPage = "isLastPage";
|
|
387
|
+
var isOriginal = "isOriginal";
|
|
388
|
+
var isPrivate = "isPrivate";
|
|
389
|
+
var isVbr = "isVbr";
|
|
390
|
+
var layer = "layer";
|
|
391
|
+
var length = "length";
|
|
392
|
+
var mode = "mode";
|
|
393
|
+
var modeExtension = mode + "Extension";
|
|
394
|
+
var mpeg = "mpeg";
|
|
395
|
+
var mpegVersion = mpeg + "Version";
|
|
396
|
+
var numberAACFrames = "numberAACFrames";
|
|
397
|
+
var outputGain = "outputGain";
|
|
398
|
+
var preSkip = "preSkip";
|
|
399
|
+
var profile = "profile";
|
|
400
|
+
var profileBits = symbol();
|
|
401
|
+
var protection = "protection";
|
|
402
|
+
var rawData = "rawData";
|
|
403
|
+
var segments = "segments";
|
|
404
|
+
var subarray = "subarray";
|
|
405
|
+
var version = "version";
|
|
406
|
+
var vorbis = "vorbis";
|
|
407
|
+
var vorbisComments = vorbis + "Comments";
|
|
408
|
+
var vorbisSetup = vorbis + "Setup";
|
|
409
|
+
var block = "block";
|
|
410
|
+
var blockingStrategy = block + "ingStrategy";
|
|
411
|
+
var blockingStrategyBits = symbol();
|
|
412
|
+
var blockSize = block + "Size";
|
|
413
|
+
var blocksize0 = block + "size0";
|
|
414
|
+
var blocksize1 = block + "size1";
|
|
415
|
+
var blockSizeBits = symbol();
|
|
416
|
+
var channel = "channel";
|
|
417
|
+
var channelMappingFamily = channel + "MappingFamily";
|
|
418
|
+
var channelMappingTable = channel + "MappingTable";
|
|
419
|
+
var channelMode = channel + "Mode";
|
|
420
|
+
var channelModeBits = symbol();
|
|
421
|
+
var channels = channel + "s";
|
|
422
|
+
var copyright = "copyright";
|
|
423
|
+
var copyrightId = copyright + "Id";
|
|
424
|
+
var copyrightIdStart = copyright + "IdStart";
|
|
425
|
+
var frame = "frame";
|
|
426
|
+
var frameCount = frame + "Count";
|
|
427
|
+
var frameLength = frame + "Length";
|
|
428
|
+
var Number2 = "Number";
|
|
429
|
+
var frameNumber = frame + Number2;
|
|
430
|
+
var framePadding = frame + "Padding";
|
|
431
|
+
var frameSize = frame + "Size";
|
|
432
|
+
var Rate = "Rate";
|
|
433
|
+
var inputSampleRate = "inputSample" + Rate;
|
|
434
|
+
var page = "page";
|
|
435
|
+
var pageChecksum = page + "Checksum";
|
|
436
|
+
var pageSegmentBytes = symbol();
|
|
437
|
+
var pageSegmentTable = page + "SegmentTable";
|
|
438
|
+
var pageSequenceNumber = page + "Sequence" + Number2;
|
|
439
|
+
var sample = "sample";
|
|
440
|
+
var sampleNumber = sample + Number2;
|
|
441
|
+
var sampleRate = sample + Rate;
|
|
442
|
+
var sampleRateBits = symbol();
|
|
443
|
+
var samples = sample + "s";
|
|
444
|
+
var stream = "stream";
|
|
445
|
+
var streamCount = stream + "Count";
|
|
446
|
+
var streamInfo = stream + "Info";
|
|
447
|
+
var streamSerialNumber = stream + "Serial" + Number2;
|
|
448
|
+
var streamStructureVersion = stream + "StructureVersion";
|
|
449
|
+
var total = "total";
|
|
450
|
+
var totalBytesOut = total + "BytesOut";
|
|
451
|
+
var totalDuration = total + "Duration";
|
|
452
|
+
var totalSamples = total + "Samples";
|
|
453
|
+
var readRawData = symbol();
|
|
454
|
+
var incrementRawData = symbol();
|
|
455
|
+
var mapCodecFrameStats = symbol();
|
|
456
|
+
var mapFrameStats = symbol();
|
|
457
|
+
var logWarning = symbol();
|
|
458
|
+
var logError2 = symbol();
|
|
459
|
+
var syncFrame = symbol();
|
|
460
|
+
var fixedLengthFrameSync = symbol();
|
|
461
|
+
var getHeader = symbol();
|
|
462
|
+
var setHeader = symbol();
|
|
463
|
+
var getFrame = symbol();
|
|
464
|
+
var parseFrame = symbol();
|
|
465
|
+
var parseOggPage = symbol();
|
|
466
|
+
var checkCodecUpdate = symbol();
|
|
467
|
+
var reset = symbol();
|
|
468
|
+
var enable = symbol();
|
|
469
|
+
var getHeaderFromUint8Array = symbol();
|
|
470
|
+
var checkFrameFooterCrc16 = symbol();
|
|
471
|
+
var uint8Array = Uint8Array;
|
|
472
|
+
var dataView = DataView;
|
|
473
|
+
var reserved = "reserved";
|
|
474
|
+
var bad = "bad";
|
|
475
|
+
var free = "free";
|
|
476
|
+
var none = "none";
|
|
477
|
+
var sixteenBitCRC = "16bit CRC";
|
|
478
|
+
|
|
479
|
+
// ../../node_modules/codec-parser/src/utilities.js
|
|
480
|
+
var getCrcTable = (crcTable, crcInitialValueFunction, crcFunction) => {
|
|
481
|
+
for (let byte = 0; byte < crcTable[length]; byte++) {
|
|
482
|
+
let crc2 = crcInitialValueFunction(byte);
|
|
483
|
+
for (let bit = 8; bit > 0; bit--) crc2 = crcFunction(crc2);
|
|
484
|
+
crcTable[byte] = crc2;
|
|
485
|
+
}
|
|
486
|
+
return crcTable;
|
|
487
|
+
};
|
|
488
|
+
var crc8Table = getCrcTable(
|
|
489
|
+
new uint8Array(256),
|
|
490
|
+
(b) => b,
|
|
491
|
+
(crc2) => crc2 & 128 ? 7 ^ crc2 << 1 : crc2 << 1
|
|
492
|
+
);
|
|
493
|
+
var flacCrc16Table = [
|
|
494
|
+
getCrcTable(
|
|
495
|
+
new Uint16Array(256),
|
|
496
|
+
(b) => b << 8,
|
|
497
|
+
(crc2) => crc2 << 1 ^ (crc2 & 1 << 15 ? 32773 : 0)
|
|
498
|
+
)
|
|
499
|
+
];
|
|
500
|
+
var crc32Table = [
|
|
501
|
+
getCrcTable(
|
|
502
|
+
new Uint32Array(256),
|
|
503
|
+
(b) => b,
|
|
504
|
+
(crc2) => crc2 >>> 1 ^ (crc2 & 1) * 3988292384
|
|
505
|
+
)
|
|
506
|
+
];
|
|
507
|
+
for (let i = 0; i < 15; i++) {
|
|
508
|
+
flacCrc16Table.push(new Uint16Array(256));
|
|
509
|
+
crc32Table.push(new Uint32Array(256));
|
|
510
|
+
for (let j = 0; j <= 255; j++) {
|
|
511
|
+
flacCrc16Table[i + 1][j] = flacCrc16Table[0][flacCrc16Table[i][j] >>> 8] ^ flacCrc16Table[i][j] << 8;
|
|
512
|
+
crc32Table[i + 1][j] = crc32Table[i][j] >>> 8 ^ crc32Table[0][crc32Table[i][j] & 255];
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
var crc8 = (data3) => {
|
|
516
|
+
let crc2 = 0;
|
|
517
|
+
const dataLength = data3[length];
|
|
518
|
+
for (let i = 0; i !== dataLength; i++) crc2 = crc8Table[crc2 ^ data3[i]];
|
|
519
|
+
return crc2;
|
|
520
|
+
};
|
|
521
|
+
var flacCrc16 = (data3) => {
|
|
522
|
+
const dataLength = data3[length];
|
|
523
|
+
const crcChunkSize = dataLength - 16;
|
|
524
|
+
let crc2 = 0;
|
|
525
|
+
let i = 0;
|
|
526
|
+
while (i <= crcChunkSize) {
|
|
527
|
+
crc2 ^= data3[i++] << 8 | data3[i++];
|
|
528
|
+
crc2 = flacCrc16Table[15][crc2 >> 8] ^ flacCrc16Table[14][crc2 & 255] ^ flacCrc16Table[13][data3[i++]] ^ flacCrc16Table[12][data3[i++]] ^ flacCrc16Table[11][data3[i++]] ^ flacCrc16Table[10][data3[i++]] ^ flacCrc16Table[9][data3[i++]] ^ flacCrc16Table[8][data3[i++]] ^ flacCrc16Table[7][data3[i++]] ^ flacCrc16Table[6][data3[i++]] ^ flacCrc16Table[5][data3[i++]] ^ flacCrc16Table[4][data3[i++]] ^ flacCrc16Table[3][data3[i++]] ^ flacCrc16Table[2][data3[i++]] ^ flacCrc16Table[1][data3[i++]] ^ flacCrc16Table[0][data3[i++]];
|
|
529
|
+
}
|
|
530
|
+
while (i !== dataLength)
|
|
531
|
+
crc2 = (crc2 & 255) << 8 ^ flacCrc16Table[0][crc2 >> 8 ^ data3[i++]];
|
|
532
|
+
return crc2;
|
|
533
|
+
};
|
|
534
|
+
var crc32Function = (data3) => {
|
|
535
|
+
const dataLength = data3[length];
|
|
536
|
+
const crcChunkSize = dataLength - 16;
|
|
537
|
+
let crc2 = 0;
|
|
538
|
+
let i = 0;
|
|
539
|
+
while (i <= crcChunkSize)
|
|
540
|
+
crc2 = crc32Table[15][(data3[i++] ^ crc2) & 255] ^ crc32Table[14][(data3[i++] ^ crc2 >>> 8) & 255] ^ crc32Table[13][(data3[i++] ^ crc2 >>> 16) & 255] ^ crc32Table[12][data3[i++] ^ crc2 >>> 24] ^ crc32Table[11][data3[i++]] ^ crc32Table[10][data3[i++]] ^ crc32Table[9][data3[i++]] ^ crc32Table[8][data3[i++]] ^ crc32Table[7][data3[i++]] ^ crc32Table[6][data3[i++]] ^ crc32Table[5][data3[i++]] ^ crc32Table[4][data3[i++]] ^ crc32Table[3][data3[i++]] ^ crc32Table[2][data3[i++]] ^ crc32Table[1][data3[i++]] ^ crc32Table[0][data3[i++]];
|
|
541
|
+
while (i !== dataLength)
|
|
542
|
+
crc2 = crc32Table[0][(crc2 ^ data3[i++]) & 255] ^ crc2 >>> 8;
|
|
543
|
+
return crc2 ^ -1;
|
|
544
|
+
};
|
|
545
|
+
var concatBuffers = (...buffers) => {
|
|
546
|
+
const buffer2 = new uint8Array(
|
|
547
|
+
buffers.reduce((acc, buf) => acc + buf[length], 0)
|
|
548
|
+
);
|
|
549
|
+
buffers.reduce((offset, buf) => {
|
|
550
|
+
buffer2.set(buf, offset);
|
|
551
|
+
return offset + buf[length];
|
|
552
|
+
}, 0);
|
|
553
|
+
return buffer2;
|
|
554
|
+
};
|
|
555
|
+
var bytesToString = (bytes) => String.fromCharCode(...bytes);
|
|
556
|
+
var reverseTable = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15];
|
|
557
|
+
var reverse = (val) => reverseTable[val & 15] << 4 | reverseTable[val >> 4];
|
|
558
|
+
var BitReader = class {
|
|
559
|
+
constructor(data3) {
|
|
560
|
+
this._data = data3;
|
|
561
|
+
this._pos = data3[length] * 8;
|
|
562
|
+
}
|
|
563
|
+
set position(position) {
|
|
564
|
+
this._pos = position;
|
|
565
|
+
}
|
|
566
|
+
get position() {
|
|
567
|
+
return this._pos;
|
|
568
|
+
}
|
|
569
|
+
read(bits) {
|
|
570
|
+
const byte = Math.floor(this._pos / 8);
|
|
571
|
+
const bit = this._pos % 8;
|
|
572
|
+
this._pos -= bits;
|
|
573
|
+
const window = (reverse(this._data[byte - 1]) << 8) + reverse(this._data[byte]);
|
|
574
|
+
return window >> 7 - bit & 255;
|
|
575
|
+
}
|
|
576
|
+
};
|
|
577
|
+
var readInt64le = (view, offset) => {
|
|
578
|
+
try {
|
|
579
|
+
return view.getBigInt64(offset, true);
|
|
580
|
+
} catch {
|
|
581
|
+
const sign = view.getUint8(offset + 7) & 128 ? -1 : 1;
|
|
582
|
+
let firstPart = view.getUint32(offset, true);
|
|
583
|
+
let secondPart = view.getUint32(offset + 4, true);
|
|
584
|
+
if (sign === -1) {
|
|
585
|
+
firstPart = ~firstPart + 1;
|
|
586
|
+
secondPart = ~secondPart + 1;
|
|
587
|
+
}
|
|
588
|
+
if (secondPart > 1048575) {
|
|
589
|
+
console.warn("This platform does not support BigInt");
|
|
590
|
+
}
|
|
591
|
+
return sign * (firstPart + secondPart * 2 ** 32);
|
|
592
|
+
}
|
|
593
|
+
};
|
|
594
|
+
|
|
595
|
+
// ../../node_modules/codec-parser/src/codecs/HeaderCache.js
|
|
596
|
+
var HeaderCache = class {
|
|
597
|
+
constructor(onCodecHeader, onCodecUpdate) {
|
|
598
|
+
this._onCodecHeader = onCodecHeader;
|
|
599
|
+
this._onCodecUpdate = onCodecUpdate;
|
|
600
|
+
this[reset]();
|
|
601
|
+
}
|
|
602
|
+
[enable]() {
|
|
603
|
+
this._isEnabled = true;
|
|
604
|
+
}
|
|
605
|
+
[reset]() {
|
|
606
|
+
this._headerCache = /* @__PURE__ */ new Map();
|
|
607
|
+
this._codecUpdateData = /* @__PURE__ */ new WeakMap();
|
|
608
|
+
this._codecHeaderSent = false;
|
|
609
|
+
this._codecShouldUpdate = false;
|
|
610
|
+
this._bitrate = null;
|
|
611
|
+
this._isEnabled = false;
|
|
612
|
+
}
|
|
613
|
+
[checkCodecUpdate](bitrate2, totalDuration2) {
|
|
614
|
+
if (this._onCodecUpdate) {
|
|
615
|
+
if (this._bitrate !== bitrate2) {
|
|
616
|
+
this._bitrate = bitrate2;
|
|
617
|
+
this._codecShouldUpdate = true;
|
|
618
|
+
}
|
|
619
|
+
const codecData = this._codecUpdateData.get(
|
|
620
|
+
this._headerCache.get(this._currentHeader)
|
|
621
|
+
);
|
|
622
|
+
if (this._codecShouldUpdate && codecData) {
|
|
623
|
+
this._onCodecUpdate(
|
|
624
|
+
{
|
|
625
|
+
bitrate: bitrate2,
|
|
626
|
+
...codecData
|
|
627
|
+
},
|
|
628
|
+
totalDuration2
|
|
629
|
+
);
|
|
630
|
+
}
|
|
631
|
+
this._codecShouldUpdate = false;
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
[getHeader](key) {
|
|
635
|
+
const header3 = this._headerCache.get(key);
|
|
636
|
+
if (header3) {
|
|
637
|
+
this._updateCurrentHeader(key);
|
|
638
|
+
}
|
|
639
|
+
return header3;
|
|
640
|
+
}
|
|
641
|
+
[setHeader](key, header3, codecUpdateFields) {
|
|
642
|
+
if (this._isEnabled) {
|
|
643
|
+
if (!this._codecHeaderSent) {
|
|
644
|
+
this._onCodecHeader({ ...header3 });
|
|
645
|
+
this._codecHeaderSent = true;
|
|
646
|
+
}
|
|
647
|
+
this._updateCurrentHeader(key);
|
|
648
|
+
this._headerCache.set(key, header3);
|
|
649
|
+
this._codecUpdateData.set(header3, codecUpdateFields);
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
_updateCurrentHeader(key) {
|
|
653
|
+
if (this._onCodecUpdate && key !== this._currentHeader) {
|
|
654
|
+
this._codecShouldUpdate = true;
|
|
655
|
+
this._currentHeader = key;
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
};
|
|
659
|
+
|
|
660
|
+
// ../../node_modules/codec-parser/src/globals.js
|
|
661
|
+
var headerStore = /* @__PURE__ */ new WeakMap();
|
|
662
|
+
var frameStore = /* @__PURE__ */ new WeakMap();
|
|
663
|
+
|
|
664
|
+
// ../../node_modules/codec-parser/src/codecs/Parser.js
|
|
665
|
+
var Parser = class {
|
|
666
|
+
constructor(codecParser, headerCache) {
|
|
667
|
+
this._codecParser = codecParser;
|
|
668
|
+
this._headerCache = headerCache;
|
|
669
|
+
}
|
|
670
|
+
*[syncFrame]() {
|
|
671
|
+
let frameData;
|
|
672
|
+
do {
|
|
673
|
+
frameData = yield* this.Frame[getFrame](
|
|
674
|
+
this._codecParser,
|
|
675
|
+
this._headerCache,
|
|
676
|
+
0
|
|
677
|
+
);
|
|
678
|
+
if (frameData) return frameData;
|
|
679
|
+
this._codecParser[incrementRawData](1);
|
|
680
|
+
} while (true);
|
|
681
|
+
}
|
|
682
|
+
/**
|
|
683
|
+
* @description Searches for Frames within bytes containing a sequence of known codec frames.
|
|
684
|
+
* @param {boolean} ignoreNextFrame Set to true to return frames even if the next frame may not exist at the expected location
|
|
685
|
+
* @returns {Frame}
|
|
686
|
+
*/
|
|
687
|
+
*[fixedLengthFrameSync](ignoreNextFrame) {
|
|
688
|
+
let frameData = yield* this[syncFrame]();
|
|
689
|
+
const frameLength2 = frameStore.get(frameData)[length];
|
|
690
|
+
if (ignoreNextFrame || this._codecParser._flushing || // check if there is a frame right after this one
|
|
691
|
+
(yield* this.Header[getHeader](
|
|
692
|
+
this._codecParser,
|
|
693
|
+
this._headerCache,
|
|
694
|
+
frameLength2
|
|
695
|
+
))) {
|
|
696
|
+
this._headerCache[enable]();
|
|
697
|
+
this._codecParser[incrementRawData](frameLength2);
|
|
698
|
+
this._codecParser[mapFrameStats](frameData);
|
|
699
|
+
return frameData;
|
|
700
|
+
}
|
|
701
|
+
this._codecParser[logWarning](
|
|
702
|
+
`Missing ${frame} at ${frameLength2} bytes from current position.`,
|
|
703
|
+
`Dropping current ${frame} and trying again.`
|
|
704
|
+
);
|
|
705
|
+
this._headerCache[reset]();
|
|
706
|
+
this._codecParser[incrementRawData](1);
|
|
707
|
+
}
|
|
708
|
+
};
|
|
709
|
+
|
|
710
|
+
// ../../node_modules/codec-parser/src/containers/Frame.js
|
|
711
|
+
var Frame = class {
|
|
712
|
+
constructor(headerValue, dataValue) {
|
|
713
|
+
frameStore.set(this, { [header]: headerValue });
|
|
714
|
+
this[data] = dataValue;
|
|
715
|
+
}
|
|
716
|
+
};
|
|
717
|
+
|
|
718
|
+
// ../../node_modules/codec-parser/src/codecs/CodecFrame.js
|
|
719
|
+
var CodecFrame = class extends Frame {
|
|
720
|
+
static *[getFrame](Header, Frame2, codecParser, headerCache, readOffset) {
|
|
721
|
+
const headerValue = yield* Header[getHeader](
|
|
722
|
+
codecParser,
|
|
723
|
+
headerCache,
|
|
724
|
+
readOffset
|
|
725
|
+
);
|
|
726
|
+
if (headerValue) {
|
|
727
|
+
const frameLengthValue = headerStore.get(headerValue)[frameLength];
|
|
728
|
+
const samplesValue = headerStore.get(headerValue)[samples];
|
|
729
|
+
const frame2 = (yield* codecParser[readRawData](
|
|
730
|
+
frameLengthValue,
|
|
731
|
+
readOffset
|
|
732
|
+
))[subarray](0, frameLengthValue);
|
|
733
|
+
return new Frame2(headerValue, frame2, samplesValue);
|
|
734
|
+
} else {
|
|
735
|
+
return null;
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
constructor(headerValue, dataValue, samplesValue) {
|
|
739
|
+
super(headerValue, dataValue);
|
|
740
|
+
this[header] = headerValue;
|
|
741
|
+
this[samples] = samplesValue;
|
|
742
|
+
this[duration] = samplesValue / headerValue[sampleRate] * 1e3;
|
|
743
|
+
this[frameNumber] = null;
|
|
744
|
+
this[totalBytesOut] = null;
|
|
745
|
+
this[totalSamples] = null;
|
|
746
|
+
this[totalDuration] = null;
|
|
747
|
+
frameStore.get(this)[length] = dataValue[length];
|
|
748
|
+
}
|
|
749
|
+
};
|
|
750
|
+
|
|
751
|
+
// ../../node_modules/codec-parser/src/metadata/ID3v2.js
|
|
752
|
+
var unsynchronizationFlag = "unsynchronizationFlag";
|
|
753
|
+
var extendedHeaderFlag = "extendedHeaderFlag";
|
|
754
|
+
var experimentalFlag = "experimentalFlag";
|
|
755
|
+
var footerPresent = "footerPresent";
|
|
756
|
+
var ID3v2 = class _ID3v2 {
|
|
757
|
+
static *getID3v2Header(codecParser, headerCache, readOffset) {
|
|
758
|
+
const headerLength = 10;
|
|
759
|
+
const header3 = {};
|
|
760
|
+
let data3 = yield* codecParser[readRawData](3, readOffset);
|
|
761
|
+
if (data3[0] !== 73 || data3[1] !== 68 || data3[2] !== 51) return null;
|
|
762
|
+
data3 = yield* codecParser[readRawData](headerLength, readOffset);
|
|
763
|
+
header3[version] = `id3v2.${data3[3]}.${data3[4]}`;
|
|
764
|
+
if (data3[5] & 15) return null;
|
|
765
|
+
header3[unsynchronizationFlag] = !!(data3[5] & 128);
|
|
766
|
+
header3[extendedHeaderFlag] = !!(data3[5] & 64);
|
|
767
|
+
header3[experimentalFlag] = !!(data3[5] & 32);
|
|
768
|
+
header3[footerPresent] = !!(data3[5] & 16);
|
|
769
|
+
if (data3[6] & 128 || data3[7] & 128 || data3[8] & 128 || data3[9] & 128)
|
|
770
|
+
return null;
|
|
771
|
+
const dataLength = data3[6] << 21 | data3[7] << 14 | data3[8] << 7 | data3[9];
|
|
772
|
+
header3[length] = headerLength + dataLength;
|
|
773
|
+
return new _ID3v2(header3);
|
|
774
|
+
}
|
|
775
|
+
constructor(header3) {
|
|
776
|
+
this[version] = header3[version];
|
|
777
|
+
this[unsynchronizationFlag] = header3[unsynchronizationFlag];
|
|
778
|
+
this[extendedHeaderFlag] = header3[extendedHeaderFlag];
|
|
779
|
+
this[experimentalFlag] = header3[experimentalFlag];
|
|
780
|
+
this[footerPresent] = header3[footerPresent];
|
|
781
|
+
this[length] = header3[length];
|
|
782
|
+
}
|
|
783
|
+
};
|
|
784
|
+
|
|
785
|
+
// ../../node_modules/codec-parser/src/codecs/CodecHeader.js
|
|
786
|
+
var CodecHeader = class {
|
|
787
|
+
/**
|
|
788
|
+
* @private
|
|
789
|
+
*/
|
|
790
|
+
constructor(header3) {
|
|
791
|
+
headerStore.set(this, header3);
|
|
792
|
+
this[bitDepth] = header3[bitDepth];
|
|
793
|
+
this[bitrate] = null;
|
|
794
|
+
this[channels] = header3[channels];
|
|
795
|
+
this[channelMode] = header3[channelMode];
|
|
796
|
+
this[sampleRate] = header3[sampleRate];
|
|
797
|
+
}
|
|
798
|
+
};
|
|
799
|
+
|
|
800
|
+
// ../../node_modules/codec-parser/src/codecs/mpeg/MPEGHeader.js
|
|
801
|
+
var bitrateMatrix = {
|
|
802
|
+
// bits | V1,L1 | V1,L2 | V1,L3 | V2,L1 | V2,L2 & L3
|
|
803
|
+
0: [free, free, free, free, free],
|
|
804
|
+
16: [32, 32, 32, 32, 8],
|
|
805
|
+
// 0b00100000: [64, 48, 40, 48, 16,],
|
|
806
|
+
// 0b00110000: [96, 56, 48, 56, 24,],
|
|
807
|
+
// 0b01000000: [128, 64, 56, 64, 32,],
|
|
808
|
+
// 0b01010000: [160, 80, 64, 80, 40,],
|
|
809
|
+
// 0b01100000: [192, 96, 80, 96, 48,],
|
|
810
|
+
// 0b01110000: [224, 112, 96, 112, 56,],
|
|
811
|
+
// 0b10000000: [256, 128, 112, 128, 64,],
|
|
812
|
+
// 0b10010000: [288, 160, 128, 144, 80,],
|
|
813
|
+
// 0b10100000: [320, 192, 160, 160, 96,],
|
|
814
|
+
// 0b10110000: [352, 224, 192, 176, 112,],
|
|
815
|
+
// 0b11000000: [384, 256, 224, 192, 128,],
|
|
816
|
+
// 0b11010000: [416, 320, 256, 224, 144,],
|
|
817
|
+
// 0b11100000: [448, 384, 320, 256, 160,],
|
|
818
|
+
240: [bad, bad, bad, bad, bad]
|
|
819
|
+
};
|
|
820
|
+
var calcBitrate = (idx, interval, intervalOffset) => 8 * ((idx + intervalOffset) % interval + interval) * (1 << (idx + intervalOffset) / interval) - 8 * interval * (interval / 8 | 0);
|
|
821
|
+
for (let i = 2; i < 15; i++)
|
|
822
|
+
bitrateMatrix[i << 4] = [
|
|
823
|
+
i * 32,
|
|
824
|
+
// V1,L1
|
|
825
|
+
calcBitrate(i, 4, 0),
|
|
826
|
+
// V1,L2
|
|
827
|
+
calcBitrate(i, 4, -1),
|
|
828
|
+
// V1,L3
|
|
829
|
+
calcBitrate(i, 8, 4),
|
|
830
|
+
// V2,L1
|
|
831
|
+
calcBitrate(i, 8, 0)
|
|
832
|
+
// V2,L2 & L3
|
|
833
|
+
];
|
|
834
|
+
var v1Layer1 = 0;
|
|
835
|
+
var v1Layer2 = 1;
|
|
836
|
+
var v1Layer3 = 2;
|
|
837
|
+
var v2Layer1 = 3;
|
|
838
|
+
var v2Layer23 = 4;
|
|
839
|
+
var bands = "bands ";
|
|
840
|
+
var to31 = " to 31";
|
|
841
|
+
var layer12ModeExtensions = {
|
|
842
|
+
0: bands + 4 + to31,
|
|
843
|
+
16: bands + 8 + to31,
|
|
844
|
+
32: bands + 12 + to31,
|
|
845
|
+
48: bands + 16 + to31
|
|
846
|
+
};
|
|
847
|
+
var bitrateIndex = "bitrateIndex";
|
|
848
|
+
var v2 = "v2";
|
|
849
|
+
var v1 = "v1";
|
|
850
|
+
var intensityStereo = "Intensity stereo ";
|
|
851
|
+
var msStereo = ", MS stereo ";
|
|
852
|
+
var on = "on";
|
|
853
|
+
var off = "off";
|
|
854
|
+
var layer3ModeExtensions = {
|
|
855
|
+
0: intensityStereo + off + msStereo + off,
|
|
856
|
+
16: intensityStereo + on + msStereo + off,
|
|
857
|
+
32: intensityStereo + off + msStereo + on,
|
|
858
|
+
48: intensityStereo + on + msStereo + on
|
|
859
|
+
};
|
|
860
|
+
var layersValues = {
|
|
861
|
+
0: { [description]: reserved },
|
|
862
|
+
2: {
|
|
863
|
+
[description]: "Layer III",
|
|
864
|
+
[framePadding]: 1,
|
|
865
|
+
[modeExtension]: layer3ModeExtensions,
|
|
866
|
+
[v1]: {
|
|
867
|
+
[bitrateIndex]: v1Layer3,
|
|
868
|
+
[samples]: 1152
|
|
869
|
+
},
|
|
870
|
+
[v2]: {
|
|
871
|
+
[bitrateIndex]: v2Layer23,
|
|
872
|
+
[samples]: 576
|
|
873
|
+
}
|
|
874
|
+
},
|
|
875
|
+
4: {
|
|
876
|
+
[description]: "Layer II",
|
|
877
|
+
[framePadding]: 1,
|
|
878
|
+
[modeExtension]: layer12ModeExtensions,
|
|
879
|
+
[samples]: 1152,
|
|
880
|
+
[v1]: {
|
|
881
|
+
[bitrateIndex]: v1Layer2
|
|
882
|
+
},
|
|
883
|
+
[v2]: {
|
|
884
|
+
[bitrateIndex]: v2Layer23
|
|
885
|
+
}
|
|
886
|
+
},
|
|
887
|
+
6: {
|
|
888
|
+
[description]: "Layer I",
|
|
889
|
+
[framePadding]: 4,
|
|
890
|
+
[modeExtension]: layer12ModeExtensions,
|
|
891
|
+
[samples]: 384,
|
|
892
|
+
[v1]: {
|
|
893
|
+
[bitrateIndex]: v1Layer1
|
|
894
|
+
},
|
|
895
|
+
[v2]: {
|
|
896
|
+
[bitrateIndex]: v2Layer1
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
};
|
|
900
|
+
var mpegVersionDescription = "MPEG Version ";
|
|
901
|
+
var isoIec = "ISO/IEC ";
|
|
902
|
+
var mpegVersions = {
|
|
903
|
+
0: {
|
|
904
|
+
[description]: `${mpegVersionDescription}2.5 (later extension of MPEG 2)`,
|
|
905
|
+
[layer]: v2,
|
|
906
|
+
[sampleRate]: {
|
|
907
|
+
0: rate11025,
|
|
908
|
+
4: rate12000,
|
|
909
|
+
8: rate8000,
|
|
910
|
+
12: reserved
|
|
911
|
+
}
|
|
912
|
+
},
|
|
913
|
+
8: { [description]: reserved },
|
|
914
|
+
16: {
|
|
915
|
+
[description]: `${mpegVersionDescription}2 (${isoIec}13818-3)`,
|
|
916
|
+
[layer]: v2,
|
|
917
|
+
[sampleRate]: {
|
|
918
|
+
0: rate22050,
|
|
919
|
+
4: rate24000,
|
|
920
|
+
8: rate16000,
|
|
921
|
+
12: reserved
|
|
922
|
+
}
|
|
923
|
+
},
|
|
924
|
+
24: {
|
|
925
|
+
[description]: `${mpegVersionDescription}1 (${isoIec}11172-3)`,
|
|
926
|
+
[layer]: v1,
|
|
927
|
+
[sampleRate]: {
|
|
928
|
+
0: rate44100,
|
|
929
|
+
4: rate48000,
|
|
930
|
+
8: rate32000,
|
|
931
|
+
12: reserved
|
|
932
|
+
}
|
|
933
|
+
},
|
|
934
|
+
length
|
|
935
|
+
};
|
|
936
|
+
var protectionValues = {
|
|
937
|
+
0: sixteenBitCRC,
|
|
938
|
+
1: none
|
|
939
|
+
};
|
|
940
|
+
var emphasisValues = {
|
|
941
|
+
0: none,
|
|
942
|
+
1: "50/15 ms",
|
|
943
|
+
2: reserved,
|
|
944
|
+
3: "CCIT J.17"
|
|
945
|
+
};
|
|
946
|
+
var channelModes = {
|
|
947
|
+
0: { [channels]: 2, [description]: stereo },
|
|
948
|
+
64: { [channels]: 2, [description]: "joint " + stereo },
|
|
949
|
+
128: { [channels]: 2, [description]: "dual channel" },
|
|
950
|
+
192: { [channels]: 1, [description]: monophonic }
|
|
951
|
+
};
|
|
952
|
+
var MPEGHeader = class _MPEGHeader extends CodecHeader {
|
|
953
|
+
static *[getHeader](codecParser, headerCache, readOffset) {
|
|
954
|
+
const header3 = {};
|
|
955
|
+
const id3v2Header = yield* ID3v2.getID3v2Header(
|
|
956
|
+
codecParser,
|
|
957
|
+
headerCache,
|
|
958
|
+
readOffset
|
|
959
|
+
);
|
|
960
|
+
if (id3v2Header) {
|
|
961
|
+
yield* codecParser[readRawData](id3v2Header[length], readOffset);
|
|
962
|
+
codecParser[incrementRawData](id3v2Header[length]);
|
|
963
|
+
}
|
|
964
|
+
const data3 = yield* codecParser[readRawData](4, readOffset);
|
|
965
|
+
const key = bytesToString(data3[subarray](0, 4));
|
|
966
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
967
|
+
if (cachedHeader) return new _MPEGHeader(cachedHeader);
|
|
968
|
+
if (data3[0] !== 255 || data3[1] < 224) return null;
|
|
969
|
+
const mpegVersionValues2 = mpegVersions[data3[1] & 24];
|
|
970
|
+
if (mpegVersionValues2[description] === reserved) return null;
|
|
971
|
+
const layerBits = data3[1] & 6;
|
|
972
|
+
if (layersValues[layerBits][description] === reserved) return null;
|
|
973
|
+
const layerValues2 = {
|
|
974
|
+
...layersValues[layerBits],
|
|
975
|
+
...layersValues[layerBits][mpegVersionValues2[layer]]
|
|
976
|
+
};
|
|
977
|
+
header3[mpegVersion] = mpegVersionValues2[description];
|
|
978
|
+
header3[layer] = layerValues2[description];
|
|
979
|
+
header3[samples] = layerValues2[samples];
|
|
980
|
+
header3[protection] = protectionValues[data3[1] & 1];
|
|
981
|
+
header3[length] = 4;
|
|
982
|
+
header3[bitrate] = bitrateMatrix[data3[2] & 240][layerValues2[bitrateIndex]];
|
|
983
|
+
if (header3[bitrate] === bad) return null;
|
|
984
|
+
header3[sampleRate] = mpegVersionValues2[sampleRate][data3[2] & 12];
|
|
985
|
+
if (header3[sampleRate] === reserved) return null;
|
|
986
|
+
header3[framePadding] = data3[2] & 2 && layerValues2[framePadding];
|
|
987
|
+
header3[isPrivate] = !!(data3[2] & 1);
|
|
988
|
+
header3[frameLength] = Math.floor(
|
|
989
|
+
125 * header3[bitrate] * header3[samples] / header3[sampleRate] + header3[framePadding]
|
|
990
|
+
);
|
|
991
|
+
if (!header3[frameLength]) return null;
|
|
992
|
+
const channelModeBits2 = data3[3] & 192;
|
|
993
|
+
header3[channelMode] = channelModes[channelModeBits2][description];
|
|
994
|
+
header3[channels] = channelModes[channelModeBits2][channels];
|
|
995
|
+
header3[modeExtension] = layerValues2[modeExtension][data3[3] & 48];
|
|
996
|
+
header3[isCopyrighted] = !!(data3[3] & 8);
|
|
997
|
+
header3[isOriginal] = !!(data3[3] & 4);
|
|
998
|
+
header3[emphasis] = emphasisValues[data3[3] & 3];
|
|
999
|
+
if (header3[emphasis] === reserved) return null;
|
|
1000
|
+
header3[bitDepth] = 16;
|
|
1001
|
+
{
|
|
1002
|
+
const { length: length2, frameLength: frameLength2, samples: samples2, ...codecUpdateFields } = header3;
|
|
1003
|
+
headerCache[setHeader](key, header3, codecUpdateFields);
|
|
1004
|
+
}
|
|
1005
|
+
return new _MPEGHeader(header3);
|
|
1006
|
+
}
|
|
1007
|
+
/**
|
|
1008
|
+
* @private
|
|
1009
|
+
* Call MPEGHeader.getHeader(Array<Uint8>) to get instance
|
|
1010
|
+
*/
|
|
1011
|
+
constructor(header3) {
|
|
1012
|
+
super(header3);
|
|
1013
|
+
this[bitrate] = header3[bitrate];
|
|
1014
|
+
this[emphasis] = header3[emphasis];
|
|
1015
|
+
this[framePadding] = header3[framePadding];
|
|
1016
|
+
this[isCopyrighted] = header3[isCopyrighted];
|
|
1017
|
+
this[isOriginal] = header3[isOriginal];
|
|
1018
|
+
this[isPrivate] = header3[isPrivate];
|
|
1019
|
+
this[layer] = header3[layer];
|
|
1020
|
+
this[modeExtension] = header3[modeExtension];
|
|
1021
|
+
this[mpegVersion] = header3[mpegVersion];
|
|
1022
|
+
this[protection] = header3[protection];
|
|
1023
|
+
}
|
|
1024
|
+
};
|
|
1025
|
+
|
|
1026
|
+
// ../../node_modules/codec-parser/src/codecs/mpeg/MPEGFrame.js
|
|
1027
|
+
var MPEGFrame = class _MPEGFrame extends CodecFrame {
|
|
1028
|
+
static *[getFrame](codecParser, headerCache, readOffset) {
|
|
1029
|
+
return yield* super[getFrame](
|
|
1030
|
+
MPEGHeader,
|
|
1031
|
+
_MPEGFrame,
|
|
1032
|
+
codecParser,
|
|
1033
|
+
headerCache,
|
|
1034
|
+
readOffset
|
|
1035
|
+
);
|
|
1036
|
+
}
|
|
1037
|
+
constructor(header3, frame2, samples2) {
|
|
1038
|
+
super(header3, frame2, samples2);
|
|
1039
|
+
}
|
|
1040
|
+
};
|
|
1041
|
+
|
|
1042
|
+
// ../../node_modules/codec-parser/src/codecs/mpeg/MPEGParser.js
|
|
1043
|
+
var MPEGParser = class extends Parser {
|
|
1044
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
1045
|
+
super(codecParser, headerCache);
|
|
1046
|
+
this.Frame = MPEGFrame;
|
|
1047
|
+
this.Header = MPEGHeader;
|
|
1048
|
+
onCodec(this[codec]);
|
|
1049
|
+
}
|
|
1050
|
+
get [codec]() {
|
|
1051
|
+
return mpeg;
|
|
1052
|
+
}
|
|
1053
|
+
*[parseFrame]() {
|
|
1054
|
+
return yield* this[fixedLengthFrameSync]();
|
|
1055
|
+
}
|
|
1056
|
+
};
|
|
1057
|
+
|
|
1058
|
+
// ../../node_modules/codec-parser/src/codecs/aac/AACHeader.js
|
|
1059
|
+
var mpegVersionValues = {
|
|
1060
|
+
0: "MPEG-4",
|
|
1061
|
+
8: "MPEG-2"
|
|
1062
|
+
};
|
|
1063
|
+
var layerValues = {
|
|
1064
|
+
0: "valid",
|
|
1065
|
+
2: bad,
|
|
1066
|
+
4: bad,
|
|
1067
|
+
6: bad
|
|
1068
|
+
};
|
|
1069
|
+
var protectionValues2 = {
|
|
1070
|
+
0: sixteenBitCRC,
|
|
1071
|
+
1: none
|
|
1072
|
+
};
|
|
1073
|
+
var profileValues = {
|
|
1074
|
+
0: "AAC Main",
|
|
1075
|
+
64: "AAC LC (Low Complexity)",
|
|
1076
|
+
128: "AAC SSR (Scalable Sample Rate)",
|
|
1077
|
+
192: "AAC LTP (Long Term Prediction)"
|
|
1078
|
+
};
|
|
1079
|
+
var sampleRates = {
|
|
1080
|
+
0: rate96000,
|
|
1081
|
+
4: rate88200,
|
|
1082
|
+
8: rate64000,
|
|
1083
|
+
12: rate48000,
|
|
1084
|
+
16: rate44100,
|
|
1085
|
+
20: rate32000,
|
|
1086
|
+
24: rate24000,
|
|
1087
|
+
28: rate22050,
|
|
1088
|
+
32: rate16000,
|
|
1089
|
+
36: rate12000,
|
|
1090
|
+
40: rate11025,
|
|
1091
|
+
44: rate8000,
|
|
1092
|
+
48: rate7350,
|
|
1093
|
+
52: reserved,
|
|
1094
|
+
56: reserved,
|
|
1095
|
+
60: "frequency is written explicitly"
|
|
1096
|
+
};
|
|
1097
|
+
var channelModeValues = {
|
|
1098
|
+
0: { [channels]: 0, [description]: "Defined in AOT Specific Config" },
|
|
1099
|
+
/*
|
|
1100
|
+
'monophonic (mono)'
|
|
1101
|
+
'stereo (left, right)'
|
|
1102
|
+
'linear surround (front center, front left, front right)'
|
|
1103
|
+
'quadraphonic (front center, front left, front right, rear center)'
|
|
1104
|
+
'5.0 surround (front center, front left, front right, rear left, rear right)'
|
|
1105
|
+
'5.1 surround (front center, front left, front right, rear left, rear right, LFE)'
|
|
1106
|
+
'7.1 surround (front center, front left, front right, side left, side right, rear left, rear right, LFE)'
|
|
1107
|
+
*/
|
|
1108
|
+
64: { [channels]: 1, [description]: monophonic },
|
|
1109
|
+
128: { [channels]: 2, [description]: getChannelMapping(2, channelMappings[0][0]) },
|
|
1110
|
+
192: { [channels]: 3, [description]: getChannelMapping(3, channelMappings[1][3]) },
|
|
1111
|
+
256: { [channels]: 4, [description]: getChannelMapping(4, channelMappings[1][3], channelMappings[3][4]) },
|
|
1112
|
+
320: { [channels]: 5, [description]: getChannelMapping(5, channelMappings[1][3], channelMappings[3][0]) },
|
|
1113
|
+
384: { [channels]: 6, [description]: getChannelMapping(6, channelMappings[1][3], channelMappings[3][0], lfe) },
|
|
1114
|
+
448: { [channels]: 8, [description]: getChannelMapping(8, channelMappings[1][3], channelMappings[2][0], channelMappings[3][0], lfe) }
|
|
1115
|
+
};
|
|
1116
|
+
var AACHeader = class _AACHeader extends CodecHeader {
|
|
1117
|
+
static *[getHeader](codecParser, headerCache, readOffset) {
|
|
1118
|
+
const header3 = {};
|
|
1119
|
+
const data3 = yield* codecParser[readRawData](7, readOffset);
|
|
1120
|
+
const key = bytesToString([
|
|
1121
|
+
data3[0],
|
|
1122
|
+
data3[1],
|
|
1123
|
+
data3[2],
|
|
1124
|
+
data3[3] & 252 | data3[6] & 3
|
|
1125
|
+
// frame length, buffer fullness varies so don't cache it
|
|
1126
|
+
]);
|
|
1127
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
1128
|
+
if (!cachedHeader) {
|
|
1129
|
+
if (data3[0] !== 255 || data3[1] < 240) return null;
|
|
1130
|
+
header3[mpegVersion] = mpegVersionValues[data3[1] & 8];
|
|
1131
|
+
header3[layer] = layerValues[data3[1] & 6];
|
|
1132
|
+
if (header3[layer] === bad) return null;
|
|
1133
|
+
const protectionBit = data3[1] & 1;
|
|
1134
|
+
header3[protection] = protectionValues2[protectionBit];
|
|
1135
|
+
header3[length] = protectionBit ? 7 : 9;
|
|
1136
|
+
header3[profileBits] = data3[2] & 192;
|
|
1137
|
+
header3[sampleRateBits] = data3[2] & 60;
|
|
1138
|
+
const privateBit = data3[2] & 2;
|
|
1139
|
+
header3[profile] = profileValues[header3[profileBits]];
|
|
1140
|
+
header3[sampleRate] = sampleRates[header3[sampleRateBits]];
|
|
1141
|
+
if (header3[sampleRate] === reserved) return null;
|
|
1142
|
+
header3[isPrivate] = !!privateBit;
|
|
1143
|
+
header3[channelModeBits] = (data3[2] << 8 | data3[3]) & 448;
|
|
1144
|
+
header3[channelMode] = channelModeValues[header3[channelModeBits]][description];
|
|
1145
|
+
header3[channels] = channelModeValues[header3[channelModeBits]][channels];
|
|
1146
|
+
header3[isOriginal] = !!(data3[3] & 32);
|
|
1147
|
+
header3[isHome] = !!(data3[3] & 8);
|
|
1148
|
+
header3[copyrightId] = !!(data3[3] & 8);
|
|
1149
|
+
header3[copyrightIdStart] = !!(data3[3] & 4);
|
|
1150
|
+
header3[bitDepth] = 16;
|
|
1151
|
+
header3[samples] = 1024;
|
|
1152
|
+
header3[numberAACFrames] = data3[6] & 3;
|
|
1153
|
+
{
|
|
1154
|
+
const {
|
|
1155
|
+
length: length2,
|
|
1156
|
+
channelModeBits: channelModeBits2,
|
|
1157
|
+
profileBits: profileBits2,
|
|
1158
|
+
sampleRateBits: sampleRateBits2,
|
|
1159
|
+
frameLength: frameLength2,
|
|
1160
|
+
samples: samples2,
|
|
1161
|
+
numberAACFrames: numberAACFrames2,
|
|
1162
|
+
...codecUpdateFields
|
|
1163
|
+
} = header3;
|
|
1164
|
+
headerCache[setHeader](key, header3, codecUpdateFields);
|
|
1165
|
+
}
|
|
1166
|
+
} else {
|
|
1167
|
+
Object.assign(header3, cachedHeader);
|
|
1168
|
+
}
|
|
1169
|
+
header3[frameLength] = (data3[3] << 11 | data3[4] << 3 | data3[5] >> 5) & 8191;
|
|
1170
|
+
if (!header3[frameLength]) return null;
|
|
1171
|
+
const bufferFullnessBits = (data3[5] << 6 | data3[6] >> 2) & 2047;
|
|
1172
|
+
header3[bufferFullness] = bufferFullnessBits === 2047 ? "VBR" : bufferFullnessBits;
|
|
1173
|
+
return new _AACHeader(header3);
|
|
1174
|
+
}
|
|
1175
|
+
/**
|
|
1176
|
+
* @private
|
|
1177
|
+
* Call AACHeader.getHeader(Array<Uint8>) to get instance
|
|
1178
|
+
*/
|
|
1179
|
+
constructor(header3) {
|
|
1180
|
+
super(header3);
|
|
1181
|
+
this[copyrightId] = header3[copyrightId];
|
|
1182
|
+
this[copyrightIdStart] = header3[copyrightIdStart];
|
|
1183
|
+
this[bufferFullness] = header3[bufferFullness];
|
|
1184
|
+
this[isHome] = header3[isHome];
|
|
1185
|
+
this[isOriginal] = header3[isOriginal];
|
|
1186
|
+
this[isPrivate] = header3[isPrivate];
|
|
1187
|
+
this[layer] = header3[layer];
|
|
1188
|
+
this[length] = header3[length];
|
|
1189
|
+
this[mpegVersion] = header3[mpegVersion];
|
|
1190
|
+
this[numberAACFrames] = header3[numberAACFrames];
|
|
1191
|
+
this[profile] = header3[profile];
|
|
1192
|
+
this[protection] = header3[protection];
|
|
1193
|
+
}
|
|
1194
|
+
get audioSpecificConfig() {
|
|
1195
|
+
const header3 = headerStore.get(this);
|
|
1196
|
+
const audioSpecificConfig = header3[profileBits] + 64 << 5 | header3[sampleRateBits] << 5 | header3[channelModeBits] >> 3;
|
|
1197
|
+
const bytes = new uint8Array(2);
|
|
1198
|
+
new dataView(bytes[buffer]).setUint16(0, audioSpecificConfig, false);
|
|
1199
|
+
return bytes;
|
|
1200
|
+
}
|
|
1201
|
+
};
|
|
1202
|
+
|
|
1203
|
+
// ../../node_modules/codec-parser/src/codecs/aac/AACFrame.js
|
|
1204
|
+
var AACFrame = class _AACFrame extends CodecFrame {
|
|
1205
|
+
static *[getFrame](codecParser, headerCache, readOffset) {
|
|
1206
|
+
return yield* super[getFrame](
|
|
1207
|
+
AACHeader,
|
|
1208
|
+
_AACFrame,
|
|
1209
|
+
codecParser,
|
|
1210
|
+
headerCache,
|
|
1211
|
+
readOffset
|
|
1212
|
+
);
|
|
1213
|
+
}
|
|
1214
|
+
constructor(header3, frame2, samples2) {
|
|
1215
|
+
super(header3, frame2, samples2);
|
|
1216
|
+
}
|
|
1217
|
+
};
|
|
1218
|
+
|
|
1219
|
+
// ../../node_modules/codec-parser/src/codecs/aac/AACParser.js
|
|
1220
|
+
var AACParser = class extends Parser {
|
|
1221
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
1222
|
+
super(codecParser, headerCache);
|
|
1223
|
+
this.Frame = AACFrame;
|
|
1224
|
+
this.Header = AACHeader;
|
|
1225
|
+
onCodec(this[codec]);
|
|
1226
|
+
}
|
|
1227
|
+
get [codec]() {
|
|
1228
|
+
return "aac";
|
|
1229
|
+
}
|
|
1230
|
+
*[parseFrame]() {
|
|
1231
|
+
return yield* this[fixedLengthFrameSync]();
|
|
1232
|
+
}
|
|
1233
|
+
};
|
|
1234
|
+
|
|
1235
|
+
// ../../node_modules/codec-parser/src/codecs/flac/FLACFrame.js
|
|
1236
|
+
var FLACFrame = class _FLACFrame extends CodecFrame {
|
|
1237
|
+
static _getFrameFooterCrc16(data3) {
|
|
1238
|
+
return (data3[data3[length] - 2] << 8) + data3[data3[length] - 1];
|
|
1239
|
+
}
|
|
1240
|
+
// check frame footer crc
|
|
1241
|
+
// https://xiph.org/flac/format.html#frame_footer
|
|
1242
|
+
static [checkFrameFooterCrc16](data3) {
|
|
1243
|
+
const expectedCrc16 = _FLACFrame._getFrameFooterCrc16(data3);
|
|
1244
|
+
const actualCrc16 = flacCrc16(data3[subarray](0, -2));
|
|
1245
|
+
return expectedCrc16 === actualCrc16;
|
|
1246
|
+
}
|
|
1247
|
+
constructor(data3, header3, streamInfoValue) {
|
|
1248
|
+
header3[streamInfo] = streamInfoValue;
|
|
1249
|
+
header3[crc16] = _FLACFrame._getFrameFooterCrc16(data3);
|
|
1250
|
+
super(header3, data3, headerStore.get(header3)[samples]);
|
|
1251
|
+
}
|
|
1252
|
+
};
|
|
1253
|
+
|
|
1254
|
+
// ../../node_modules/codec-parser/src/codecs/flac/FLACHeader.js
|
|
1255
|
+
var getFromStreamInfo = "get from STREAMINFO metadata block";
|
|
1256
|
+
var blockingStrategyValues = {
|
|
1257
|
+
0: "Fixed",
|
|
1258
|
+
1: "Variable"
|
|
1259
|
+
};
|
|
1260
|
+
var blockSizeValues = {
|
|
1261
|
+
0: reserved,
|
|
1262
|
+
16: 192
|
|
1263
|
+
// 0b00100000: 576,
|
|
1264
|
+
// 0b00110000: 1152,
|
|
1265
|
+
// 0b01000000: 2304,
|
|
1266
|
+
// 0b01010000: 4608,
|
|
1267
|
+
// 0b01100000: "8-bit (blocksize-1) from end of header",
|
|
1268
|
+
// 0b01110000: "16-bit (blocksize-1) from end of header",
|
|
1269
|
+
// 0b10000000: 256,
|
|
1270
|
+
// 0b10010000: 512,
|
|
1271
|
+
// 0b10100000: 1024,
|
|
1272
|
+
// 0b10110000: 2048,
|
|
1273
|
+
// 0b11000000: 4096,
|
|
1274
|
+
// 0b11010000: 8192,
|
|
1275
|
+
// 0b11100000: 16384,
|
|
1276
|
+
// 0b11110000: 32768,
|
|
1277
|
+
};
|
|
1278
|
+
for (let i = 2; i < 16; i++)
|
|
1279
|
+
blockSizeValues[i << 4] = i < 6 ? 576 * 2 ** (i - 2) : 2 ** i;
|
|
1280
|
+
var sampleRateValues = {
|
|
1281
|
+
0: getFromStreamInfo,
|
|
1282
|
+
1: rate88200,
|
|
1283
|
+
2: rate176400,
|
|
1284
|
+
3: rate192000,
|
|
1285
|
+
4: rate8000,
|
|
1286
|
+
5: rate16000,
|
|
1287
|
+
6: rate22050,
|
|
1288
|
+
7: rate24000,
|
|
1289
|
+
8: rate32000,
|
|
1290
|
+
9: rate44100,
|
|
1291
|
+
10: rate48000,
|
|
1292
|
+
11: rate96000,
|
|
1293
|
+
// 0b00001100: "8-bit sample rate (in kHz) from end of header",
|
|
1294
|
+
// 0b00001101: "16-bit sample rate (in Hz) from end of header",
|
|
1295
|
+
// 0b00001110: "16-bit sample rate (in tens of Hz) from end of header",
|
|
1296
|
+
15: bad
|
|
1297
|
+
};
|
|
1298
|
+
var channelAssignments = {
|
|
1299
|
+
/*'
|
|
1300
|
+
'monophonic (mono)'
|
|
1301
|
+
'stereo (left, right)'
|
|
1302
|
+
'linear surround (left, right, center)'
|
|
1303
|
+
'quadraphonic (front left, front right, rear left, rear right)'
|
|
1304
|
+
'5.0 surround (front left, front right, front center, rear left, rear right)'
|
|
1305
|
+
'5.1 surround (front left, front right, front center, LFE, rear left, rear right)'
|
|
1306
|
+
'6.1 surround (front left, front right, front center, LFE, rear center, side left, side right)'
|
|
1307
|
+
'7.1 surround (front left, front right, front center, LFE, rear left, rear right, side left, side right)'
|
|
1308
|
+
*/
|
|
1309
|
+
0: { [channels]: 1, [description]: monophonic },
|
|
1310
|
+
16: { [channels]: 2, [description]: getChannelMapping(2, channelMappings[0][0]) },
|
|
1311
|
+
32: { [channels]: 3, [description]: getChannelMapping(3, channelMappings[0][1]) },
|
|
1312
|
+
48: { [channels]: 4, [description]: getChannelMapping(4, channelMappings[1][0], channelMappings[3][0]) },
|
|
1313
|
+
64: { [channels]: 5, [description]: getChannelMapping(5, channelMappings[1][1], channelMappings[3][0]) },
|
|
1314
|
+
80: { [channels]: 6, [description]: getChannelMapping(6, channelMappings[1][1], lfe, channelMappings[3][0]) },
|
|
1315
|
+
96: { [channels]: 7, [description]: getChannelMapping(7, channelMappings[1][1], lfe, channelMappings[3][4], channelMappings[2][0]) },
|
|
1316
|
+
112: { [channels]: 8, [description]: getChannelMapping(8, channelMappings[1][1], lfe, channelMappings[3][0], channelMappings[2][0]) },
|
|
1317
|
+
128: { [channels]: 2, [description]: `${stereo} (left, diff)` },
|
|
1318
|
+
144: { [channels]: 2, [description]: `${stereo} (diff, right)` },
|
|
1319
|
+
160: { [channels]: 2, [description]: `${stereo} (avg, diff)` },
|
|
1320
|
+
176: reserved,
|
|
1321
|
+
192: reserved,
|
|
1322
|
+
208: reserved,
|
|
1323
|
+
224: reserved,
|
|
1324
|
+
240: reserved
|
|
1325
|
+
};
|
|
1326
|
+
var bitDepthValues = {
|
|
1327
|
+
0: getFromStreamInfo,
|
|
1328
|
+
2: 8,
|
|
1329
|
+
4: 12,
|
|
1330
|
+
6: reserved,
|
|
1331
|
+
8: 16,
|
|
1332
|
+
10: 20,
|
|
1333
|
+
12: 24,
|
|
1334
|
+
14: reserved
|
|
1335
|
+
};
|
|
1336
|
+
var FLACHeader = class _FLACHeader extends CodecHeader {
|
|
1337
|
+
// https://datatracker.ietf.org/doc/html/rfc3629#section-3
|
|
1338
|
+
// Char. number range | UTF-8 octet sequence
|
|
1339
|
+
// (hexadecimal) | (binary)
|
|
1340
|
+
// --------------------+---------------------------------------------
|
|
1341
|
+
// 0000 0000-0000 007F | 0xxxxxxx
|
|
1342
|
+
// 0000 0080-0000 07FF | 110xxxxx 10xxxxxx
|
|
1343
|
+
// 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
|
|
1344
|
+
// 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
|
|
1345
|
+
static _decodeUTF8Int(data3) {
|
|
1346
|
+
if (data3[0] > 254) {
|
|
1347
|
+
return null;
|
|
1348
|
+
}
|
|
1349
|
+
if (data3[0] < 128) return { value: data3[0], length: 1 };
|
|
1350
|
+
let length2 = 1;
|
|
1351
|
+
for (let zeroMask = 64; zeroMask & data3[0]; zeroMask >>= 1) length2++;
|
|
1352
|
+
let idx = length2 - 1, value = 0, shift = 0;
|
|
1353
|
+
for (; idx > 0; shift += 6, idx--) {
|
|
1354
|
+
if ((data3[idx] & 192) !== 128) {
|
|
1355
|
+
return null;
|
|
1356
|
+
}
|
|
1357
|
+
value |= (data3[idx] & 63) << shift;
|
|
1358
|
+
}
|
|
1359
|
+
value |= (data3[idx] & 127 >> length2) << shift;
|
|
1360
|
+
return { value, length: length2 };
|
|
1361
|
+
}
|
|
1362
|
+
static [getHeaderFromUint8Array](data3, headerCache) {
|
|
1363
|
+
const codecParserStub = {
|
|
1364
|
+
[readRawData]: function* () {
|
|
1365
|
+
return data3;
|
|
1366
|
+
}
|
|
1367
|
+
};
|
|
1368
|
+
return _FLACHeader[getHeader](codecParserStub, headerCache, 0).next().value;
|
|
1369
|
+
}
|
|
1370
|
+
static *[getHeader](codecParser, headerCache, readOffset) {
|
|
1371
|
+
let data3 = yield* codecParser[readRawData](6, readOffset);
|
|
1372
|
+
if (data3[0] !== 255 || !(data3[1] === 248 || data3[1] === 249)) {
|
|
1373
|
+
return null;
|
|
1374
|
+
}
|
|
1375
|
+
const header3 = {};
|
|
1376
|
+
const key = bytesToString(data3[subarray](0, 4));
|
|
1377
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
1378
|
+
if (!cachedHeader) {
|
|
1379
|
+
header3[blockingStrategyBits] = data3[1] & 1;
|
|
1380
|
+
header3[blockingStrategy] = blockingStrategyValues[header3[blockingStrategyBits]];
|
|
1381
|
+
header3[blockSizeBits] = data3[2] & 240;
|
|
1382
|
+
header3[sampleRateBits] = data3[2] & 15;
|
|
1383
|
+
header3[blockSize] = blockSizeValues[header3[blockSizeBits]];
|
|
1384
|
+
if (header3[blockSize] === reserved) {
|
|
1385
|
+
return null;
|
|
1386
|
+
}
|
|
1387
|
+
header3[sampleRate] = sampleRateValues[header3[sampleRateBits]];
|
|
1388
|
+
if (header3[sampleRate] === bad) {
|
|
1389
|
+
return null;
|
|
1390
|
+
}
|
|
1391
|
+
if (data3[3] & 1) {
|
|
1392
|
+
return null;
|
|
1393
|
+
}
|
|
1394
|
+
const channelAssignment = channelAssignments[data3[3] & 240];
|
|
1395
|
+
if (channelAssignment === reserved) {
|
|
1396
|
+
return null;
|
|
1397
|
+
}
|
|
1398
|
+
header3[channels] = channelAssignment[channels];
|
|
1399
|
+
header3[channelMode] = channelAssignment[description];
|
|
1400
|
+
header3[bitDepth] = bitDepthValues[data3[3] & 14];
|
|
1401
|
+
if (header3[bitDepth] === reserved) {
|
|
1402
|
+
return null;
|
|
1403
|
+
}
|
|
1404
|
+
} else {
|
|
1405
|
+
Object.assign(header3, cachedHeader);
|
|
1406
|
+
}
|
|
1407
|
+
header3[length] = 5;
|
|
1408
|
+
data3 = yield* codecParser[readRawData](header3[length] + 8, readOffset);
|
|
1409
|
+
const decodedUtf8 = _FLACHeader._decodeUTF8Int(data3[subarray](4));
|
|
1410
|
+
if (!decodedUtf8) {
|
|
1411
|
+
return null;
|
|
1412
|
+
}
|
|
1413
|
+
if (header3[blockingStrategyBits]) {
|
|
1414
|
+
header3[sampleNumber] = decodedUtf8.value;
|
|
1415
|
+
} else {
|
|
1416
|
+
header3[frameNumber] = decodedUtf8.value;
|
|
1417
|
+
}
|
|
1418
|
+
header3[length] += decodedUtf8[length];
|
|
1419
|
+
if (header3[blockSizeBits] === 96) {
|
|
1420
|
+
if (data3[length] < header3[length])
|
|
1421
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1422
|
+
header3[blockSize] = data3[header3[length] - 1] + 1;
|
|
1423
|
+
header3[length] += 1;
|
|
1424
|
+
} else if (header3[blockSizeBits] === 112) {
|
|
1425
|
+
if (data3[length] < header3[length])
|
|
1426
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1427
|
+
header3[blockSize] = (data3[header3[length] - 1] << 8) + data3[header3[length]] + 1;
|
|
1428
|
+
header3[length] += 2;
|
|
1429
|
+
}
|
|
1430
|
+
header3[samples] = header3[blockSize];
|
|
1431
|
+
if (header3[sampleRateBits] === 12) {
|
|
1432
|
+
if (data3[length] < header3[length])
|
|
1433
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1434
|
+
header3[sampleRate] = data3[header3[length] - 1] * 1e3;
|
|
1435
|
+
header3[length] += 1;
|
|
1436
|
+
} else if (header3[sampleRateBits] === 13) {
|
|
1437
|
+
if (data3[length] < header3[length])
|
|
1438
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1439
|
+
header3[sampleRate] = (data3[header3[length] - 1] << 8) + data3[header3[length]];
|
|
1440
|
+
header3[length] += 2;
|
|
1441
|
+
} else if (header3[sampleRateBits] === 14) {
|
|
1442
|
+
if (data3[length] < header3[length])
|
|
1443
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1444
|
+
header3[sampleRate] = ((data3[header3[length] - 1] << 8) + data3[header3[length]]) * 10;
|
|
1445
|
+
header3[length] += 2;
|
|
1446
|
+
}
|
|
1447
|
+
if (data3[length] < header3[length])
|
|
1448
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1449
|
+
header3[crc] = data3[header3[length] - 1];
|
|
1450
|
+
if (header3[crc] !== crc8(data3[subarray](0, header3[length] - 1))) {
|
|
1451
|
+
return null;
|
|
1452
|
+
}
|
|
1453
|
+
{
|
|
1454
|
+
if (!cachedHeader) {
|
|
1455
|
+
const {
|
|
1456
|
+
blockingStrategyBits: blockingStrategyBits2,
|
|
1457
|
+
frameNumber: frameNumber2,
|
|
1458
|
+
sampleNumber: sampleNumber2,
|
|
1459
|
+
samples: samples2,
|
|
1460
|
+
sampleRateBits: sampleRateBits2,
|
|
1461
|
+
blockSizeBits: blockSizeBits2,
|
|
1462
|
+
crc: crc2,
|
|
1463
|
+
length: length2,
|
|
1464
|
+
...codecUpdateFields
|
|
1465
|
+
} = header3;
|
|
1466
|
+
headerCache[setHeader](key, header3, codecUpdateFields);
|
|
1467
|
+
}
|
|
1468
|
+
}
|
|
1469
|
+
return new _FLACHeader(header3);
|
|
1470
|
+
}
|
|
1471
|
+
/**
|
|
1472
|
+
* @private
|
|
1473
|
+
* Call FLACHeader.getHeader(Array<Uint8>) to get instance
|
|
1474
|
+
*/
|
|
1475
|
+
constructor(header3) {
|
|
1476
|
+
super(header3);
|
|
1477
|
+
this[crc16] = null;
|
|
1478
|
+
this[blockingStrategy] = header3[blockingStrategy];
|
|
1479
|
+
this[blockSize] = header3[blockSize];
|
|
1480
|
+
this[frameNumber] = header3[frameNumber];
|
|
1481
|
+
this[sampleNumber] = header3[sampleNumber];
|
|
1482
|
+
this[streamInfo] = null;
|
|
1483
|
+
}
|
|
1484
|
+
};
|
|
1485
|
+
|
|
1486
|
+
// ../../node_modules/codec-parser/src/codecs/flac/FLACParser.js
|
|
1487
|
+
var MIN_FLAC_FRAME_SIZE = 2;
|
|
1488
|
+
var MAX_FLAC_FRAME_SIZE = 512 * 1024;
|
|
1489
|
+
var FLACParser = class extends Parser {
|
|
1490
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
1491
|
+
super(codecParser, headerCache);
|
|
1492
|
+
this.Frame = FLACFrame;
|
|
1493
|
+
this.Header = FLACHeader;
|
|
1494
|
+
onCodec(this[codec]);
|
|
1495
|
+
}
|
|
1496
|
+
get [codec]() {
|
|
1497
|
+
return "flac";
|
|
1498
|
+
}
|
|
1499
|
+
*_getNextFrameSyncOffset(offset) {
|
|
1500
|
+
const data3 = yield* this._codecParser[readRawData](2, 0);
|
|
1501
|
+
const dataLength = data3[length] - 2;
|
|
1502
|
+
while (offset < dataLength) {
|
|
1503
|
+
const firstByte = data3[offset];
|
|
1504
|
+
if (firstByte === 255) {
|
|
1505
|
+
const secondByte = data3[offset + 1];
|
|
1506
|
+
if (secondByte === 248 || secondByte === 249) break;
|
|
1507
|
+
if (secondByte !== 255) offset++;
|
|
1508
|
+
}
|
|
1509
|
+
offset++;
|
|
1510
|
+
}
|
|
1511
|
+
return offset;
|
|
1512
|
+
}
|
|
1513
|
+
*[parseFrame]() {
|
|
1514
|
+
do {
|
|
1515
|
+
const header3 = yield* FLACHeader[getHeader](
|
|
1516
|
+
this._codecParser,
|
|
1517
|
+
this._headerCache,
|
|
1518
|
+
0
|
|
1519
|
+
);
|
|
1520
|
+
if (header3) {
|
|
1521
|
+
let nextHeaderOffset = headerStore.get(header3)[length] + MIN_FLAC_FRAME_SIZE;
|
|
1522
|
+
while (nextHeaderOffset <= MAX_FLAC_FRAME_SIZE) {
|
|
1523
|
+
if (this._codecParser._flushing || (yield* FLACHeader[getHeader](
|
|
1524
|
+
this._codecParser,
|
|
1525
|
+
this._headerCache,
|
|
1526
|
+
nextHeaderOffset
|
|
1527
|
+
))) {
|
|
1528
|
+
let frameData = yield* this._codecParser[readRawData](nextHeaderOffset);
|
|
1529
|
+
if (!this._codecParser._flushing)
|
|
1530
|
+
frameData = frameData[subarray](0, nextHeaderOffset);
|
|
1531
|
+
if (FLACFrame[checkFrameFooterCrc16](frameData)) {
|
|
1532
|
+
const frame2 = new FLACFrame(frameData, header3);
|
|
1533
|
+
this._headerCache[enable]();
|
|
1534
|
+
this._codecParser[incrementRawData](nextHeaderOffset);
|
|
1535
|
+
this._codecParser[mapFrameStats](frame2);
|
|
1536
|
+
return frame2;
|
|
1537
|
+
}
|
|
1538
|
+
}
|
|
1539
|
+
nextHeaderOffset = yield* this._getNextFrameSyncOffset(
|
|
1540
|
+
nextHeaderOffset + 1
|
|
1541
|
+
);
|
|
1542
|
+
}
|
|
1543
|
+
this._codecParser[logWarning](
|
|
1544
|
+
`Unable to sync FLAC frame after searching ${nextHeaderOffset} bytes.`
|
|
1545
|
+
);
|
|
1546
|
+
this._codecParser[incrementRawData](nextHeaderOffset);
|
|
1547
|
+
} else {
|
|
1548
|
+
this._codecParser[incrementRawData](
|
|
1549
|
+
yield* this._getNextFrameSyncOffset(1)
|
|
1550
|
+
);
|
|
1551
|
+
}
|
|
1552
|
+
} while (true);
|
|
1553
|
+
}
|
|
1554
|
+
[parseOggPage](oggPage) {
|
|
1555
|
+
if (oggPage[pageSequenceNumber] === 0) {
|
|
1556
|
+
this._headerCache[enable]();
|
|
1557
|
+
this._streamInfo = oggPage[data][subarray](13);
|
|
1558
|
+
} else if (oggPage[pageSequenceNumber] === 1) {
|
|
1559
|
+
} else {
|
|
1560
|
+
oggPage[codecFrames] = frameStore.get(oggPage)[segments].map((segment) => {
|
|
1561
|
+
const header3 = FLACHeader[getHeaderFromUint8Array](
|
|
1562
|
+
segment,
|
|
1563
|
+
this._headerCache
|
|
1564
|
+
);
|
|
1565
|
+
if (header3) {
|
|
1566
|
+
return new FLACFrame(segment, header3, this._streamInfo);
|
|
1567
|
+
} else {
|
|
1568
|
+
this._codecParser[logWarning](
|
|
1569
|
+
"Failed to parse Ogg FLAC frame",
|
|
1570
|
+
"Skipping invalid FLAC frame"
|
|
1571
|
+
);
|
|
1572
|
+
}
|
|
1573
|
+
}).filter((frame2) => !!frame2);
|
|
1574
|
+
}
|
|
1575
|
+
return oggPage;
|
|
1576
|
+
}
|
|
1577
|
+
};
|
|
1578
|
+
|
|
1579
|
+
// ../../node_modules/codec-parser/src/containers/ogg/OggPageHeader.js
|
|
1580
|
+
var OggPageHeader = class _OggPageHeader {
|
|
1581
|
+
static *[getHeader](codecParser, headerCache, readOffset) {
|
|
1582
|
+
const header3 = {};
|
|
1583
|
+
let data3 = yield* codecParser[readRawData](28, readOffset);
|
|
1584
|
+
if (data3[0] !== 79 || // O
|
|
1585
|
+
data3[1] !== 103 || // g
|
|
1586
|
+
data3[2] !== 103 || // g
|
|
1587
|
+
data3[3] !== 83) {
|
|
1588
|
+
return null;
|
|
1589
|
+
}
|
|
1590
|
+
header3[streamStructureVersion] = data3[4];
|
|
1591
|
+
const zeros = data3[5] & 248;
|
|
1592
|
+
if (zeros) return null;
|
|
1593
|
+
header3[isLastPage] = !!(data3[5] & 4);
|
|
1594
|
+
header3[isFirstPage] = !!(data3[5] & 2);
|
|
1595
|
+
header3[isContinuedPacket] = !!(data3[5] & 1);
|
|
1596
|
+
const view = new dataView(uint8Array.from(data3[subarray](0, 28))[buffer]);
|
|
1597
|
+
header3[absoluteGranulePosition] = readInt64le(view, 6);
|
|
1598
|
+
header3[streamSerialNumber] = view.getInt32(14, true);
|
|
1599
|
+
header3[pageSequenceNumber] = view.getInt32(18, true);
|
|
1600
|
+
header3[pageChecksum] = view.getInt32(22, true);
|
|
1601
|
+
const pageSegmentTableLength = data3[26];
|
|
1602
|
+
header3[length] = pageSegmentTableLength + 27;
|
|
1603
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1604
|
+
header3[frameLength] = 0;
|
|
1605
|
+
header3[pageSegmentTable] = [];
|
|
1606
|
+
header3[pageSegmentBytes] = uint8Array.from(
|
|
1607
|
+
data3[subarray](27, header3[length])
|
|
1608
|
+
);
|
|
1609
|
+
for (let i = 0, segmentLength = 0; i < pageSegmentTableLength; i++) {
|
|
1610
|
+
const segmentByte = header3[pageSegmentBytes][i];
|
|
1611
|
+
header3[frameLength] += segmentByte;
|
|
1612
|
+
segmentLength += segmentByte;
|
|
1613
|
+
if (segmentByte !== 255 || i === pageSegmentTableLength - 1) {
|
|
1614
|
+
header3[pageSegmentTable].push(segmentLength);
|
|
1615
|
+
segmentLength = 0;
|
|
1616
|
+
}
|
|
1617
|
+
}
|
|
1618
|
+
return new _OggPageHeader(header3);
|
|
1619
|
+
}
|
|
1620
|
+
/**
|
|
1621
|
+
* @private
|
|
1622
|
+
* Call OggPageHeader.getHeader(Array<Uint8>) to get instance
|
|
1623
|
+
*/
|
|
1624
|
+
constructor(header3) {
|
|
1625
|
+
headerStore.set(this, header3);
|
|
1626
|
+
this[absoluteGranulePosition] = header3[absoluteGranulePosition];
|
|
1627
|
+
this[isContinuedPacket] = header3[isContinuedPacket];
|
|
1628
|
+
this[isFirstPage] = header3[isFirstPage];
|
|
1629
|
+
this[isLastPage] = header3[isLastPage];
|
|
1630
|
+
this[pageSegmentTable] = header3[pageSegmentTable];
|
|
1631
|
+
this[pageSequenceNumber] = header3[pageSequenceNumber];
|
|
1632
|
+
this[pageChecksum] = header3[pageChecksum];
|
|
1633
|
+
this[streamSerialNumber] = header3[streamSerialNumber];
|
|
1634
|
+
}
|
|
1635
|
+
};
|
|
1636
|
+
|
|
1637
|
+
// ../../node_modules/codec-parser/src/containers/ogg/OggPage.js
|
|
1638
|
+
var OggPage = class _OggPage extends Frame {
|
|
1639
|
+
static *[getFrame](codecParser, headerCache, readOffset) {
|
|
1640
|
+
const header3 = yield* OggPageHeader[getHeader](
|
|
1641
|
+
codecParser,
|
|
1642
|
+
headerCache,
|
|
1643
|
+
readOffset
|
|
1644
|
+
);
|
|
1645
|
+
if (header3) {
|
|
1646
|
+
const frameLengthValue = headerStore.get(header3)[frameLength];
|
|
1647
|
+
const headerLength = headerStore.get(header3)[length];
|
|
1648
|
+
const totalLength = headerLength + frameLengthValue;
|
|
1649
|
+
const rawDataValue = (yield* codecParser[readRawData](totalLength, 0))[subarray](0, totalLength);
|
|
1650
|
+
const frame2 = rawDataValue[subarray](headerLength, totalLength);
|
|
1651
|
+
return new _OggPage(header3, frame2, rawDataValue);
|
|
1652
|
+
} else {
|
|
1653
|
+
return null;
|
|
1654
|
+
}
|
|
1655
|
+
}
|
|
1656
|
+
constructor(header3, frame2, rawDataValue) {
|
|
1657
|
+
super(header3, frame2);
|
|
1658
|
+
frameStore.get(this)[length] = rawDataValue[length];
|
|
1659
|
+
this[codecFrames] = [];
|
|
1660
|
+
this[rawData] = rawDataValue;
|
|
1661
|
+
this[absoluteGranulePosition] = header3[absoluteGranulePosition];
|
|
1662
|
+
this[crc32] = header3[pageChecksum];
|
|
1663
|
+
this[duration] = 0;
|
|
1664
|
+
this[isContinuedPacket] = header3[isContinuedPacket];
|
|
1665
|
+
this[isFirstPage] = header3[isFirstPage];
|
|
1666
|
+
this[isLastPage] = header3[isLastPage];
|
|
1667
|
+
this[pageSequenceNumber] = header3[pageSequenceNumber];
|
|
1668
|
+
this[samples] = 0;
|
|
1669
|
+
this[streamSerialNumber] = header3[streamSerialNumber];
|
|
1670
|
+
}
|
|
1671
|
+
};
|
|
1672
|
+
|
|
1673
|
+
// ../../node_modules/codec-parser/src/codecs/opus/OpusFrame.js
|
|
1674
|
+
var OpusFrame = class extends CodecFrame {
|
|
1675
|
+
constructor(data3, header3, samples2) {
|
|
1676
|
+
super(header3, data3, samples2);
|
|
1677
|
+
}
|
|
1678
|
+
};
|
|
1679
|
+
|
|
1680
|
+
// ../../node_modules/codec-parser/src/codecs/opus/OpusHeader.js
|
|
1681
|
+
var channelMappingFamilies = {
|
|
1682
|
+
0: vorbisOpusChannelMapping.slice(0, 2),
|
|
1683
|
+
/*
|
|
1684
|
+
0: "monophonic (mono)"
|
|
1685
|
+
1: "stereo (left, right)"
|
|
1686
|
+
*/
|
|
1687
|
+
1: vorbisOpusChannelMapping
|
|
1688
|
+
/*
|
|
1689
|
+
0: "monophonic (mono)"
|
|
1690
|
+
1: "stereo (left, right)"
|
|
1691
|
+
2: "linear surround (left, center, right)"
|
|
1692
|
+
3: "quadraphonic (front left, front right, rear left, rear right)"
|
|
1693
|
+
4: "5.0 surround (front left, front center, front right, rear left, rear right)"
|
|
1694
|
+
5: "5.1 surround (front left, front center, front right, rear left, rear right, LFE)"
|
|
1695
|
+
6: "6.1 surround (front left, front center, front right, side left, side right, rear center, LFE)"
|
|
1696
|
+
7: "7.1 surround (front left, front center, front right, side left, side right, rear left, rear right, LFE)"
|
|
1697
|
+
*/
|
|
1698
|
+
// additional channel mappings are user defined
|
|
1699
|
+
};
|
|
1700
|
+
var silkOnly = "SILK-only";
|
|
1701
|
+
var celtOnly = "CELT-only";
|
|
1702
|
+
var hybrid = "Hybrid";
|
|
1703
|
+
var narrowBand = "narrowband";
|
|
1704
|
+
var mediumBand = "medium-band";
|
|
1705
|
+
var wideBand = "wideband";
|
|
1706
|
+
var superWideBand = "super-wideband";
|
|
1707
|
+
var fullBand = "fullband";
|
|
1708
|
+
var configTable = {
|
|
1709
|
+
0: { [mode]: silkOnly, [bandwidth]: narrowBand, [frameSize]: 10 },
|
|
1710
|
+
8: { [mode]: silkOnly, [bandwidth]: narrowBand, [frameSize]: 20 },
|
|
1711
|
+
16: { [mode]: silkOnly, [bandwidth]: narrowBand, [frameSize]: 40 },
|
|
1712
|
+
24: { [mode]: silkOnly, [bandwidth]: narrowBand, [frameSize]: 60 },
|
|
1713
|
+
32: { [mode]: silkOnly, [bandwidth]: mediumBand, [frameSize]: 10 },
|
|
1714
|
+
40: { [mode]: silkOnly, [bandwidth]: mediumBand, [frameSize]: 20 },
|
|
1715
|
+
48: { [mode]: silkOnly, [bandwidth]: mediumBand, [frameSize]: 40 },
|
|
1716
|
+
56: { [mode]: silkOnly, [bandwidth]: mediumBand, [frameSize]: 60 },
|
|
1717
|
+
64: { [mode]: silkOnly, [bandwidth]: wideBand, [frameSize]: 10 },
|
|
1718
|
+
72: { [mode]: silkOnly, [bandwidth]: wideBand, [frameSize]: 20 },
|
|
1719
|
+
80: { [mode]: silkOnly, [bandwidth]: wideBand, [frameSize]: 40 },
|
|
1720
|
+
88: { [mode]: silkOnly, [bandwidth]: wideBand, [frameSize]: 60 },
|
|
1721
|
+
96: { [mode]: hybrid, [bandwidth]: superWideBand, [frameSize]: 10 },
|
|
1722
|
+
104: { [mode]: hybrid, [bandwidth]: superWideBand, [frameSize]: 20 },
|
|
1723
|
+
112: { [mode]: hybrid, [bandwidth]: fullBand, [frameSize]: 10 },
|
|
1724
|
+
120: { [mode]: hybrid, [bandwidth]: fullBand, [frameSize]: 20 },
|
|
1725
|
+
128: { [mode]: celtOnly, [bandwidth]: narrowBand, [frameSize]: 2.5 },
|
|
1726
|
+
136: { [mode]: celtOnly, [bandwidth]: narrowBand, [frameSize]: 5 },
|
|
1727
|
+
144: { [mode]: celtOnly, [bandwidth]: narrowBand, [frameSize]: 10 },
|
|
1728
|
+
152: { [mode]: celtOnly, [bandwidth]: narrowBand, [frameSize]: 20 },
|
|
1729
|
+
160: { [mode]: celtOnly, [bandwidth]: wideBand, [frameSize]: 2.5 },
|
|
1730
|
+
168: { [mode]: celtOnly, [bandwidth]: wideBand, [frameSize]: 5 },
|
|
1731
|
+
176: { [mode]: celtOnly, [bandwidth]: wideBand, [frameSize]: 10 },
|
|
1732
|
+
184: { [mode]: celtOnly, [bandwidth]: wideBand, [frameSize]: 20 },
|
|
1733
|
+
192: { [mode]: celtOnly, [bandwidth]: superWideBand, [frameSize]: 2.5 },
|
|
1734
|
+
200: { [mode]: celtOnly, [bandwidth]: superWideBand, [frameSize]: 5 },
|
|
1735
|
+
208: { [mode]: celtOnly, [bandwidth]: superWideBand, [frameSize]: 10 },
|
|
1736
|
+
216: { [mode]: celtOnly, [bandwidth]: superWideBand, [frameSize]: 20 },
|
|
1737
|
+
224: { [mode]: celtOnly, [bandwidth]: fullBand, [frameSize]: 2.5 },
|
|
1738
|
+
232: { [mode]: celtOnly, [bandwidth]: fullBand, [frameSize]: 5 },
|
|
1739
|
+
240: { [mode]: celtOnly, [bandwidth]: fullBand, [frameSize]: 10 },
|
|
1740
|
+
248: { [mode]: celtOnly, [bandwidth]: fullBand, [frameSize]: 20 }
|
|
1741
|
+
};
|
|
1742
|
+
var OpusHeader = class _OpusHeader extends CodecHeader {
|
|
1743
|
+
static [getHeaderFromUint8Array](dataValue, packetData, headerCache) {
|
|
1744
|
+
const header3 = {};
|
|
1745
|
+
header3[channels] = dataValue[9];
|
|
1746
|
+
header3[channelMappingFamily] = dataValue[18];
|
|
1747
|
+
header3[length] = header3[channelMappingFamily] !== 0 ? 21 + header3[channels] : 19;
|
|
1748
|
+
if (dataValue[length] < header3[length])
|
|
1749
|
+
throw new Error("Out of data while inside an Ogg Page");
|
|
1750
|
+
const packetMode = packetData[0] & 3;
|
|
1751
|
+
const packetLength = packetMode === 3 ? 2 : 1;
|
|
1752
|
+
const key = bytesToString(dataValue[subarray](0, header3[length])) + bytesToString(packetData[subarray](0, packetLength));
|
|
1753
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
1754
|
+
if (cachedHeader) return new _OpusHeader(cachedHeader);
|
|
1755
|
+
if (key.substr(0, 8) !== "OpusHead") {
|
|
1756
|
+
return null;
|
|
1757
|
+
}
|
|
1758
|
+
if (dataValue[8] !== 1) return null;
|
|
1759
|
+
header3[data] = uint8Array.from(dataValue[subarray](0, header3[length]));
|
|
1760
|
+
const view = new dataView(header3[data][buffer]);
|
|
1761
|
+
header3[bitDepth] = 16;
|
|
1762
|
+
header3[preSkip] = view.getUint16(10, true);
|
|
1763
|
+
header3[inputSampleRate] = view.getUint32(12, true);
|
|
1764
|
+
header3[sampleRate] = rate48000;
|
|
1765
|
+
header3[outputGain] = view.getInt16(16, true);
|
|
1766
|
+
if (header3[channelMappingFamily] in channelMappingFamilies) {
|
|
1767
|
+
header3[channelMode] = channelMappingFamilies[header3[channelMappingFamily]][header3[channels] - 1];
|
|
1768
|
+
if (!header3[channelMode]) return null;
|
|
1769
|
+
}
|
|
1770
|
+
if (header3[channelMappingFamily] !== 0) {
|
|
1771
|
+
header3[streamCount] = dataValue[19];
|
|
1772
|
+
header3[coupledStreamCount] = dataValue[20];
|
|
1773
|
+
header3[channelMappingTable] = [
|
|
1774
|
+
...dataValue[subarray](21, header3[channels] + 21)
|
|
1775
|
+
];
|
|
1776
|
+
}
|
|
1777
|
+
const packetConfig = configTable[248 & packetData[0]];
|
|
1778
|
+
header3[mode] = packetConfig[mode];
|
|
1779
|
+
header3[bandwidth] = packetConfig[bandwidth];
|
|
1780
|
+
header3[frameSize] = packetConfig[frameSize];
|
|
1781
|
+
switch (packetMode) {
|
|
1782
|
+
case 0:
|
|
1783
|
+
header3[frameCount] = 1;
|
|
1784
|
+
break;
|
|
1785
|
+
case 1:
|
|
1786
|
+
// 1: 2 frames in the packet, each with equal compressed size
|
|
1787
|
+
case 2:
|
|
1788
|
+
header3[frameCount] = 2;
|
|
1789
|
+
break;
|
|
1790
|
+
case 3:
|
|
1791
|
+
header3[isVbr] = !!(128 & packetData[1]);
|
|
1792
|
+
header3[hasOpusPadding] = !!(64 & packetData[1]);
|
|
1793
|
+
header3[frameCount] = 63 & packetData[1];
|
|
1794
|
+
break;
|
|
1795
|
+
default:
|
|
1796
|
+
return null;
|
|
1797
|
+
}
|
|
1798
|
+
{
|
|
1799
|
+
const {
|
|
1800
|
+
length: length2,
|
|
1801
|
+
data: headerData,
|
|
1802
|
+
channelMappingFamily: channelMappingFamily2,
|
|
1803
|
+
...codecUpdateFields
|
|
1804
|
+
} = header3;
|
|
1805
|
+
headerCache[setHeader](key, header3, codecUpdateFields);
|
|
1806
|
+
}
|
|
1807
|
+
return new _OpusHeader(header3);
|
|
1808
|
+
}
|
|
1809
|
+
/**
|
|
1810
|
+
* @private
|
|
1811
|
+
* Call OpusHeader.getHeader(Array<Uint8>) to get instance
|
|
1812
|
+
*/
|
|
1813
|
+
constructor(header3) {
|
|
1814
|
+
super(header3);
|
|
1815
|
+
this[data] = header3[data];
|
|
1816
|
+
this[bandwidth] = header3[bandwidth];
|
|
1817
|
+
this[channelMappingFamily] = header3[channelMappingFamily];
|
|
1818
|
+
this[channelMappingTable] = header3[channelMappingTable];
|
|
1819
|
+
this[coupledStreamCount] = header3[coupledStreamCount];
|
|
1820
|
+
this[frameCount] = header3[frameCount];
|
|
1821
|
+
this[frameSize] = header3[frameSize];
|
|
1822
|
+
this[hasOpusPadding] = header3[hasOpusPadding];
|
|
1823
|
+
this[inputSampleRate] = header3[inputSampleRate];
|
|
1824
|
+
this[isVbr] = header3[isVbr];
|
|
1825
|
+
this[mode] = header3[mode];
|
|
1826
|
+
this[outputGain] = header3[outputGain];
|
|
1827
|
+
this[preSkip] = header3[preSkip];
|
|
1828
|
+
this[streamCount] = header3[streamCount];
|
|
1829
|
+
}
|
|
1830
|
+
};
|
|
1831
|
+
|
|
1832
|
+
// ../../node_modules/codec-parser/src/codecs/opus/OpusParser.js
|
|
1833
|
+
var OpusParser = class extends Parser {
|
|
1834
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
1835
|
+
super(codecParser, headerCache);
|
|
1836
|
+
this.Frame = OpusFrame;
|
|
1837
|
+
this.Header = OpusHeader;
|
|
1838
|
+
onCodec(this[codec]);
|
|
1839
|
+
this._identificationHeader = null;
|
|
1840
|
+
this._preSkipRemaining = null;
|
|
1841
|
+
}
|
|
1842
|
+
get [codec]() {
|
|
1843
|
+
return "opus";
|
|
1844
|
+
}
|
|
1845
|
+
/**
|
|
1846
|
+
* @todo implement continued page support
|
|
1847
|
+
*/
|
|
1848
|
+
[parseOggPage](oggPage) {
|
|
1849
|
+
if (oggPage[pageSequenceNumber] === 0) {
|
|
1850
|
+
this._headerCache[enable]();
|
|
1851
|
+
this._identificationHeader = oggPage[data];
|
|
1852
|
+
} else if (oggPage[pageSequenceNumber] === 1) {
|
|
1853
|
+
} else {
|
|
1854
|
+
oggPage[codecFrames] = frameStore.get(oggPage)[segments].map((segment) => {
|
|
1855
|
+
const header3 = OpusHeader[getHeaderFromUint8Array](
|
|
1856
|
+
this._identificationHeader,
|
|
1857
|
+
segment,
|
|
1858
|
+
this._headerCache
|
|
1859
|
+
);
|
|
1860
|
+
if (header3) {
|
|
1861
|
+
if (this._preSkipRemaining === null)
|
|
1862
|
+
this._preSkipRemaining = header3[preSkip];
|
|
1863
|
+
let samples2 = header3[frameSize] * header3[frameCount] / 1e3 * header3[sampleRate];
|
|
1864
|
+
if (this._preSkipRemaining > 0) {
|
|
1865
|
+
this._preSkipRemaining -= samples2;
|
|
1866
|
+
samples2 = this._preSkipRemaining < 0 ? -this._preSkipRemaining : 0;
|
|
1867
|
+
}
|
|
1868
|
+
return new OpusFrame(segment, header3, samples2);
|
|
1869
|
+
}
|
|
1870
|
+
this._codecParser[logError2](
|
|
1871
|
+
"Failed to parse Ogg Opus Header",
|
|
1872
|
+
"Not a valid Ogg Opus file"
|
|
1873
|
+
);
|
|
1874
|
+
});
|
|
1875
|
+
}
|
|
1876
|
+
return oggPage;
|
|
1877
|
+
}
|
|
1878
|
+
};
|
|
1879
|
+
|
|
1880
|
+
// ../../node_modules/codec-parser/src/codecs/vorbis/VorbisFrame.js
|
|
1881
|
+
var VorbisFrame = class extends CodecFrame {
|
|
1882
|
+
constructor(data3, header3, samples2) {
|
|
1883
|
+
super(header3, data3, samples2);
|
|
1884
|
+
}
|
|
1885
|
+
};
|
|
1886
|
+
|
|
1887
|
+
// ../../node_modules/codec-parser/src/codecs/vorbis/VorbisHeader.js
|
|
1888
|
+
var blockSizes = {
|
|
1889
|
+
// 0b0110: 64,
|
|
1890
|
+
// 0b0111: 128,
|
|
1891
|
+
// 0b1000: 256,
|
|
1892
|
+
// 0b1001: 512,
|
|
1893
|
+
// 0b1010: 1024,
|
|
1894
|
+
// 0b1011: 2048,
|
|
1895
|
+
// 0b1100: 4096,
|
|
1896
|
+
// 0b1101: 8192
|
|
1897
|
+
};
|
|
1898
|
+
for (let i = 0; i < 8; i++) blockSizes[i + 6] = 2 ** (6 + i);
|
|
1899
|
+
var VorbisHeader = class _VorbisHeader extends CodecHeader {
|
|
1900
|
+
static [getHeaderFromUint8Array](dataValue, headerCache, vorbisCommentsData, vorbisSetupData) {
|
|
1901
|
+
if (dataValue[length] < 30)
|
|
1902
|
+
throw new Error("Out of data while inside an Ogg Page");
|
|
1903
|
+
const key = bytesToString(dataValue[subarray](0, 30));
|
|
1904
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
1905
|
+
if (cachedHeader) return new _VorbisHeader(cachedHeader);
|
|
1906
|
+
const header3 = { [length]: 30 };
|
|
1907
|
+
if (key.substr(0, 7) !== "vorbis") {
|
|
1908
|
+
return null;
|
|
1909
|
+
}
|
|
1910
|
+
header3[data] = uint8Array.from(dataValue[subarray](0, 30));
|
|
1911
|
+
const view = new dataView(header3[data][buffer]);
|
|
1912
|
+
header3[version] = view.getUint32(7, true);
|
|
1913
|
+
if (header3[version] !== 0) return null;
|
|
1914
|
+
header3[channels] = dataValue[11];
|
|
1915
|
+
header3[channelMode] = vorbisOpusChannelMapping[header3[channels] - 1] || "application defined";
|
|
1916
|
+
header3[sampleRate] = view.getUint32(12, true);
|
|
1917
|
+
header3[bitrateMaximum] = view.getInt32(16, true);
|
|
1918
|
+
header3[bitrateNominal] = view.getInt32(20, true);
|
|
1919
|
+
header3[bitrateMinimum] = view.getInt32(24, true);
|
|
1920
|
+
header3[blocksize1] = blockSizes[(dataValue[28] & 240) >> 4];
|
|
1921
|
+
header3[blocksize0] = blockSizes[dataValue[28] & 15];
|
|
1922
|
+
if (header3[blocksize0] > header3[blocksize1]) return null;
|
|
1923
|
+
if (dataValue[29] !== 1) return null;
|
|
1924
|
+
header3[bitDepth] = 32;
|
|
1925
|
+
header3[vorbisSetup] = vorbisSetupData;
|
|
1926
|
+
header3[vorbisComments] = vorbisCommentsData;
|
|
1927
|
+
{
|
|
1928
|
+
const {
|
|
1929
|
+
length: length2,
|
|
1930
|
+
data: data3,
|
|
1931
|
+
version: version2,
|
|
1932
|
+
vorbisSetup: vorbisSetup3,
|
|
1933
|
+
vorbisComments: vorbisComments3,
|
|
1934
|
+
...codecUpdateFields
|
|
1935
|
+
} = header3;
|
|
1936
|
+
headerCache[setHeader](key, header3, codecUpdateFields);
|
|
1937
|
+
}
|
|
1938
|
+
return new _VorbisHeader(header3);
|
|
1939
|
+
}
|
|
1940
|
+
/**
|
|
1941
|
+
* @private
|
|
1942
|
+
* Call VorbisHeader.getHeader(Array<Uint8>) to get instance
|
|
1943
|
+
*/
|
|
1944
|
+
constructor(header3) {
|
|
1945
|
+
super(header3);
|
|
1946
|
+
this[bitrateMaximum] = header3[bitrateMaximum];
|
|
1947
|
+
this[bitrateMinimum] = header3[bitrateMinimum];
|
|
1948
|
+
this[bitrateNominal] = header3[bitrateNominal];
|
|
1949
|
+
this[blocksize0] = header3[blocksize0];
|
|
1950
|
+
this[blocksize1] = header3[blocksize1];
|
|
1951
|
+
this[data] = header3[data];
|
|
1952
|
+
this[vorbisComments] = header3[vorbisComments];
|
|
1953
|
+
this[vorbisSetup] = header3[vorbisSetup];
|
|
1954
|
+
}
|
|
1955
|
+
};
|
|
1956
|
+
|
|
1957
|
+
// ../../node_modules/codec-parser/src/codecs/vorbis/VorbisParser.js
|
|
1958
|
+
var VorbisParser = class extends Parser {
|
|
1959
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
1960
|
+
super(codecParser, headerCache);
|
|
1961
|
+
this.Frame = VorbisFrame;
|
|
1962
|
+
onCodec(this[codec]);
|
|
1963
|
+
this._identificationHeader = null;
|
|
1964
|
+
this._setupComplete = false;
|
|
1965
|
+
this._prevBlockSize = null;
|
|
1966
|
+
}
|
|
1967
|
+
get [codec]() {
|
|
1968
|
+
return vorbis;
|
|
1969
|
+
}
|
|
1970
|
+
[parseOggPage](oggPage) {
|
|
1971
|
+
oggPage[codecFrames] = [];
|
|
1972
|
+
for (const oggPageSegment of frameStore.get(oggPage)[segments]) {
|
|
1973
|
+
if (oggPageSegment[0] === 1) {
|
|
1974
|
+
this._headerCache[enable]();
|
|
1975
|
+
this._identificationHeader = oggPage[data];
|
|
1976
|
+
this._setupComplete = false;
|
|
1977
|
+
} else if (oggPageSegment[0] === 3) {
|
|
1978
|
+
this._vorbisComments = oggPageSegment;
|
|
1979
|
+
} else if (oggPageSegment[0] === 5) {
|
|
1980
|
+
this._vorbisSetup = oggPageSegment;
|
|
1981
|
+
this._mode = this._parseSetupHeader(oggPageSegment);
|
|
1982
|
+
this._setupComplete = true;
|
|
1983
|
+
} else if (this._setupComplete) {
|
|
1984
|
+
const header3 = VorbisHeader[getHeaderFromUint8Array](
|
|
1985
|
+
this._identificationHeader,
|
|
1986
|
+
this._headerCache,
|
|
1987
|
+
this._vorbisComments,
|
|
1988
|
+
this._vorbisSetup
|
|
1989
|
+
);
|
|
1990
|
+
if (header3) {
|
|
1991
|
+
oggPage[codecFrames].push(
|
|
1992
|
+
new VorbisFrame(
|
|
1993
|
+
oggPageSegment,
|
|
1994
|
+
header3,
|
|
1995
|
+
this._getSamples(oggPageSegment, header3)
|
|
1996
|
+
)
|
|
1997
|
+
);
|
|
1998
|
+
} else {
|
|
1999
|
+
this._codecParser[logError](
|
|
2000
|
+
"Failed to parse Ogg Vorbis Header",
|
|
2001
|
+
"Not a valid Ogg Vorbis file"
|
|
2002
|
+
);
|
|
2003
|
+
}
|
|
2004
|
+
}
|
|
2005
|
+
}
|
|
2006
|
+
return oggPage;
|
|
2007
|
+
}
|
|
2008
|
+
_getSamples(segment, header3) {
|
|
2009
|
+
const blockFlag = this._mode.blockFlags[segment[0] >> 1 & this._mode.mask];
|
|
2010
|
+
const currentBlockSize = blockFlag ? header3[blocksize1] : header3[blocksize0];
|
|
2011
|
+
const samplesValue = this._prevBlockSize === null ? 0 : (this._prevBlockSize + currentBlockSize) / 4;
|
|
2012
|
+
this._prevBlockSize = currentBlockSize;
|
|
2013
|
+
return samplesValue;
|
|
2014
|
+
}
|
|
2015
|
+
// https://gitlab.xiph.org/xiph/liboggz/-/blob/master/src/liboggz/oggz_auto.c#L911
|
|
2016
|
+
// https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/vorbis_parser.c
|
|
2017
|
+
/*
|
|
2018
|
+
* This is the format of the mode data at the end of the packet for all
|
|
2019
|
+
* Vorbis Version 1 :
|
|
2020
|
+
*
|
|
2021
|
+
* [ 6:number_of_modes ]
|
|
2022
|
+
* [ 1:size | 16:window_type(0) | 16:transform_type(0) | 8:mapping ]
|
|
2023
|
+
* [ 1:size | 16:window_type(0) | 16:transform_type(0) | 8:mapping ]
|
|
2024
|
+
* [ 1:size | 16:window_type(0) | 16:transform_type(0) | 8:mapping ]
|
|
2025
|
+
* [ 1:framing(1) ]
|
|
2026
|
+
*
|
|
2027
|
+
* e.g.:
|
|
2028
|
+
*
|
|
2029
|
+
* MsB LsB
|
|
2030
|
+
* <-
|
|
2031
|
+
* 0 0 0 0 0 1 0 0
|
|
2032
|
+
* 0 0 1 0 0 0 0 0
|
|
2033
|
+
* 0 0 1 0 0 0 0 0
|
|
2034
|
+
* 0 0 1|0 0 0 0 0
|
|
2035
|
+
* 0 0 0 0|0|0 0 0
|
|
2036
|
+
* 0 0 0 0 0 0 0 0
|
|
2037
|
+
* 0 0 0 0|0 0 0 0
|
|
2038
|
+
* 0 0 0 0 0 0 0 0
|
|
2039
|
+
* 0 0 0 0|0 0 0 0
|
|
2040
|
+
* 0 0 0|1|0 0 0 0 |
|
|
2041
|
+
* 0 0 0 0 0 0 0 0 V
|
|
2042
|
+
* 0 0 0|0 0 0 0 0
|
|
2043
|
+
* 0 0 0 0 0 0 0 0
|
|
2044
|
+
* 0 0|1 0 0 0 0 0
|
|
2045
|
+
*
|
|
2046
|
+
* The simplest way to approach this is to start at the end
|
|
2047
|
+
* and read backwards to determine the mode configuration.
|
|
2048
|
+
*
|
|
2049
|
+
* liboggz and ffmpeg both use this method.
|
|
2050
|
+
*/
|
|
2051
|
+
_parseSetupHeader(setup) {
|
|
2052
|
+
const bitReader = new BitReader(setup);
|
|
2053
|
+
const mode2 = {
|
|
2054
|
+
count: 0,
|
|
2055
|
+
blockFlags: []
|
|
2056
|
+
};
|
|
2057
|
+
while ((bitReader.read(1) & 1) !== 1) {
|
|
2058
|
+
}
|
|
2059
|
+
let modeBits;
|
|
2060
|
+
while (mode2.count < 64 && bitReader.position > 0) {
|
|
2061
|
+
reverse(bitReader.read(8));
|
|
2062
|
+
let currentByte = 0;
|
|
2063
|
+
while (bitReader.read(8) === 0 && currentByte++ < 3) {
|
|
2064
|
+
}
|
|
2065
|
+
if (currentByte === 4) {
|
|
2066
|
+
modeBits = bitReader.read(7);
|
|
2067
|
+
mode2.blockFlags.unshift(modeBits & 1);
|
|
2068
|
+
bitReader.position += 6;
|
|
2069
|
+
mode2.count++;
|
|
2070
|
+
} else {
|
|
2071
|
+
if (((reverse(modeBits) & 126) >> 1) + 1 !== mode2.count) {
|
|
2072
|
+
this._codecParser[logWarning](
|
|
2073
|
+
"vorbis derived mode count did not match actual mode count"
|
|
2074
|
+
);
|
|
2075
|
+
}
|
|
2076
|
+
break;
|
|
2077
|
+
}
|
|
2078
|
+
}
|
|
2079
|
+
mode2.mask = (1 << Math.log2(mode2.count)) - 1;
|
|
2080
|
+
return mode2;
|
|
2081
|
+
}
|
|
2082
|
+
};
|
|
2083
|
+
|
|
2084
|
+
// ../../node_modules/codec-parser/src/containers/ogg/OggParser.js
|
|
2085
|
+
var OggStream = class {
|
|
2086
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
2087
|
+
this._codecParser = codecParser;
|
|
2088
|
+
this._headerCache = headerCache;
|
|
2089
|
+
this._onCodec = onCodec;
|
|
2090
|
+
this._continuedPacket = new uint8Array();
|
|
2091
|
+
this._codec = null;
|
|
2092
|
+
this._isSupported = null;
|
|
2093
|
+
this._previousAbsoluteGranulePosition = null;
|
|
2094
|
+
}
|
|
2095
|
+
get [codec]() {
|
|
2096
|
+
return this._codec || "";
|
|
2097
|
+
}
|
|
2098
|
+
_updateCodec(codec2, Parser2) {
|
|
2099
|
+
if (this._codec !== codec2) {
|
|
2100
|
+
this._headerCache[reset]();
|
|
2101
|
+
this._parser = new Parser2(
|
|
2102
|
+
this._codecParser,
|
|
2103
|
+
this._headerCache,
|
|
2104
|
+
this._onCodec
|
|
2105
|
+
);
|
|
2106
|
+
this._codec = codec2;
|
|
2107
|
+
}
|
|
2108
|
+
}
|
|
2109
|
+
_checkCodecSupport({ data: data3 }) {
|
|
2110
|
+
const idString = bytesToString(data3[subarray](0, 8));
|
|
2111
|
+
switch (idString) {
|
|
2112
|
+
case "fishead\0":
|
|
2113
|
+
return false;
|
|
2114
|
+
// ignore ogg skeleton packets
|
|
2115
|
+
case "OpusHead":
|
|
2116
|
+
this._updateCodec("opus", OpusParser);
|
|
2117
|
+
return true;
|
|
2118
|
+
case (/^\x7fFLAC/.test(idString) && idString):
|
|
2119
|
+
this._updateCodec("flac", FLACParser);
|
|
2120
|
+
return true;
|
|
2121
|
+
case (/^\x01vorbis/.test(idString) && idString):
|
|
2122
|
+
this._updateCodec(vorbis, VorbisParser);
|
|
2123
|
+
return true;
|
|
2124
|
+
default:
|
|
2125
|
+
return false;
|
|
2126
|
+
}
|
|
2127
|
+
}
|
|
2128
|
+
_checkPageSequenceNumber(oggPage) {
|
|
2129
|
+
if (oggPage[pageSequenceNumber] !== this._pageSequenceNumber + 1 && this._pageSequenceNumber > 1 && oggPage[pageSequenceNumber] > 1) {
|
|
2130
|
+
this._codecParser[logWarning](
|
|
2131
|
+
"Unexpected gap in Ogg Page Sequence Number.",
|
|
2132
|
+
`Expected: ${this._pageSequenceNumber + 1}, Got: ${oggPage[pageSequenceNumber]}`
|
|
2133
|
+
);
|
|
2134
|
+
}
|
|
2135
|
+
this._pageSequenceNumber = oggPage[pageSequenceNumber];
|
|
2136
|
+
}
|
|
2137
|
+
_parsePage(oggPage) {
|
|
2138
|
+
if (this._isSupported === null) {
|
|
2139
|
+
this._pageSequenceNumber = oggPage[pageSequenceNumber];
|
|
2140
|
+
this._isSupported = this._checkCodecSupport(oggPage);
|
|
2141
|
+
}
|
|
2142
|
+
this._checkPageSequenceNumber(oggPage);
|
|
2143
|
+
const oggPageStore = frameStore.get(oggPage);
|
|
2144
|
+
const headerData = headerStore.get(oggPageStore[header]);
|
|
2145
|
+
let offset = 0;
|
|
2146
|
+
oggPageStore[segments] = headerData[pageSegmentTable].map(
|
|
2147
|
+
(segmentLength) => oggPage[data][subarray](offset, offset += segmentLength)
|
|
2148
|
+
);
|
|
2149
|
+
if (this._continuedPacket[length]) {
|
|
2150
|
+
oggPageStore[segments][0] = concatBuffers(
|
|
2151
|
+
this._continuedPacket,
|
|
2152
|
+
oggPageStore[segments][0]
|
|
2153
|
+
);
|
|
2154
|
+
this._continuedPacket = new uint8Array();
|
|
2155
|
+
}
|
|
2156
|
+
if (headerData[pageSegmentBytes][headerData[pageSegmentBytes][length] - 1] === 255) {
|
|
2157
|
+
this._continuedPacket = concatBuffers(
|
|
2158
|
+
this._continuedPacket,
|
|
2159
|
+
oggPageStore[segments].pop()
|
|
2160
|
+
);
|
|
2161
|
+
}
|
|
2162
|
+
if (this._previousAbsoluteGranulePosition !== null) {
|
|
2163
|
+
oggPage[samples] = Number(
|
|
2164
|
+
oggPage[absoluteGranulePosition] - this._previousAbsoluteGranulePosition
|
|
2165
|
+
);
|
|
2166
|
+
}
|
|
2167
|
+
this._previousAbsoluteGranulePosition = oggPage[absoluteGranulePosition];
|
|
2168
|
+
if (this._isSupported) {
|
|
2169
|
+
const frame2 = this._parser[parseOggPage](oggPage);
|
|
2170
|
+
this._codecParser[mapFrameStats](frame2);
|
|
2171
|
+
return frame2;
|
|
2172
|
+
} else {
|
|
2173
|
+
return oggPage;
|
|
2174
|
+
}
|
|
2175
|
+
}
|
|
2176
|
+
};
|
|
2177
|
+
var OggParser = class extends Parser {
|
|
2178
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
2179
|
+
super(codecParser, headerCache);
|
|
2180
|
+
this._onCodec = onCodec;
|
|
2181
|
+
this.Frame = OggPage;
|
|
2182
|
+
this.Header = OggPageHeader;
|
|
2183
|
+
this._streams = /* @__PURE__ */ new Map();
|
|
2184
|
+
this._currentSerialNumber = null;
|
|
2185
|
+
}
|
|
2186
|
+
get [codec]() {
|
|
2187
|
+
const oggStream = this._streams.get(this._currentSerialNumber);
|
|
2188
|
+
return oggStream ? oggStream.codec : "";
|
|
2189
|
+
}
|
|
2190
|
+
*[parseFrame]() {
|
|
2191
|
+
const oggPage = yield* this[fixedLengthFrameSync](true);
|
|
2192
|
+
this._currentSerialNumber = oggPage[streamSerialNumber];
|
|
2193
|
+
let oggStream = this._streams.get(this._currentSerialNumber);
|
|
2194
|
+
if (!oggStream) {
|
|
2195
|
+
oggStream = new OggStream(
|
|
2196
|
+
this._codecParser,
|
|
2197
|
+
this._headerCache,
|
|
2198
|
+
this._onCodec
|
|
2199
|
+
);
|
|
2200
|
+
this._streams.set(this._currentSerialNumber, oggStream);
|
|
2201
|
+
}
|
|
2202
|
+
if (oggPage[isLastPage]) this._streams.delete(this._currentSerialNumber);
|
|
2203
|
+
return oggStream._parsePage(oggPage);
|
|
2204
|
+
}
|
|
2205
|
+
};
|
|
2206
|
+
|
|
2207
|
+
// ../../node_modules/codec-parser/src/CodecParser.js
|
|
2208
|
+
var noOp = () => {
|
|
2209
|
+
};
|
|
2210
|
+
var CodecParser = class {
|
|
2211
|
+
constructor(mimeType2, {
|
|
2212
|
+
onCodec,
|
|
2213
|
+
onCodecHeader,
|
|
2214
|
+
onCodecUpdate,
|
|
2215
|
+
enableLogging = false,
|
|
2216
|
+
enableFrameCRC32 = true
|
|
2217
|
+
} = {}) {
|
|
2218
|
+
this._inputMimeType = mimeType2;
|
|
2219
|
+
this._onCodec = onCodec || noOp;
|
|
2220
|
+
this._onCodecHeader = onCodecHeader || noOp;
|
|
2221
|
+
this._onCodecUpdate = onCodecUpdate;
|
|
2222
|
+
this._enableLogging = enableLogging;
|
|
2223
|
+
this._crc32 = enableFrameCRC32 ? crc32Function : noOp;
|
|
2224
|
+
this[reset]();
|
|
2225
|
+
}
|
|
2226
|
+
/**
|
|
2227
|
+
* @public
|
|
2228
|
+
* @returns The detected codec
|
|
2229
|
+
*/
|
|
2230
|
+
get [codec]() {
|
|
2231
|
+
return this._parser ? this._parser[codec] : "";
|
|
2232
|
+
}
|
|
2233
|
+
[reset]() {
|
|
2234
|
+
this._headerCache = new HeaderCache(
|
|
2235
|
+
this._onCodecHeader,
|
|
2236
|
+
this._onCodecUpdate
|
|
2237
|
+
);
|
|
2238
|
+
this._generator = this._getGenerator();
|
|
2239
|
+
this._generator.next();
|
|
2240
|
+
}
|
|
2241
|
+
/**
|
|
2242
|
+
* @public
|
|
2243
|
+
* @description Generator function that yields any buffered CodecFrames and resets the CodecParser
|
|
2244
|
+
* @returns {Iterable<CodecFrame|OggPage>} Iterator that operates over the codec data.
|
|
2245
|
+
* @yields {CodecFrame|OggPage} Parsed codec or ogg page data
|
|
2246
|
+
*/
|
|
2247
|
+
*flush() {
|
|
2248
|
+
this._flushing = true;
|
|
2249
|
+
for (let i = this._generator.next(); i.value; i = this._generator.next()) {
|
|
2250
|
+
yield i.value;
|
|
2251
|
+
}
|
|
2252
|
+
this._flushing = false;
|
|
2253
|
+
this[reset]();
|
|
2254
|
+
}
|
|
2255
|
+
/**
|
|
2256
|
+
* @public
|
|
2257
|
+
* @description Generator function takes in a Uint8Array of data and returns a CodecFrame from the data for each iteration
|
|
2258
|
+
* @param {Uint8Array} chunk Next chunk of codec data to read
|
|
2259
|
+
* @returns {Iterable<CodecFrame|OggPage>} Iterator that operates over the codec data.
|
|
2260
|
+
* @yields {CodecFrame|OggPage} Parsed codec or ogg page data
|
|
2261
|
+
*/
|
|
2262
|
+
*parseChunk(chunk) {
|
|
2263
|
+
for (let i = this._generator.next(chunk); i.value; i = this._generator.next()) {
|
|
2264
|
+
yield i.value;
|
|
2265
|
+
}
|
|
2266
|
+
}
|
|
2267
|
+
/**
|
|
2268
|
+
* @public
|
|
2269
|
+
* @description Parses an entire file and returns all of the contained frames.
|
|
2270
|
+
* @param {Uint8Array} fileData Coded data to read
|
|
2271
|
+
* @returns {Array<CodecFrame|OggPage>} CodecFrames
|
|
2272
|
+
*/
|
|
2273
|
+
parseAll(fileData) {
|
|
2274
|
+
return [...this.parseChunk(fileData), ...this.flush()];
|
|
2275
|
+
}
|
|
2276
|
+
/**
|
|
2277
|
+
* @private
|
|
2278
|
+
*/
|
|
2279
|
+
*_getGenerator() {
|
|
2280
|
+
if (this._inputMimeType.match(/aac/)) {
|
|
2281
|
+
this._parser = new AACParser(this, this._headerCache, this._onCodec);
|
|
2282
|
+
} else if (this._inputMimeType.match(/mpeg/)) {
|
|
2283
|
+
this._parser = new MPEGParser(this, this._headerCache, this._onCodec);
|
|
2284
|
+
} else if (this._inputMimeType.match(/flac/)) {
|
|
2285
|
+
this._parser = new FLACParser(this, this._headerCache, this._onCodec);
|
|
2286
|
+
} else if (this._inputMimeType.match(/ogg/)) {
|
|
2287
|
+
this._parser = new OggParser(this, this._headerCache, this._onCodec);
|
|
2288
|
+
} else {
|
|
2289
|
+
throw new Error(`Unsupported Codec ${mimeType}`);
|
|
2290
|
+
}
|
|
2291
|
+
this._frameNumber = 0;
|
|
2292
|
+
this._currentReadPosition = 0;
|
|
2293
|
+
this._totalBytesIn = 0;
|
|
2294
|
+
this._totalBytesOut = 0;
|
|
2295
|
+
this._totalSamples = 0;
|
|
2296
|
+
this._sampleRate = void 0;
|
|
2297
|
+
this._rawData = new Uint8Array(0);
|
|
2298
|
+
while (true) {
|
|
2299
|
+
const frame2 = yield* this._parser[parseFrame]();
|
|
2300
|
+
if (frame2) yield frame2;
|
|
2301
|
+
}
|
|
2302
|
+
}
|
|
2303
|
+
/**
|
|
2304
|
+
* @protected
|
|
2305
|
+
* @param {number} minSize Minimum bytes to have present in buffer
|
|
2306
|
+
* @returns {Uint8Array} rawData
|
|
2307
|
+
*/
|
|
2308
|
+
*[readRawData](minSize = 0, readOffset = 0) {
|
|
2309
|
+
let rawData2;
|
|
2310
|
+
while (this._rawData[length] <= minSize + readOffset) {
|
|
2311
|
+
rawData2 = yield;
|
|
2312
|
+
if (this._flushing) return this._rawData[subarray](readOffset);
|
|
2313
|
+
if (rawData2) {
|
|
2314
|
+
this._totalBytesIn += rawData2[length];
|
|
2315
|
+
this._rawData = concatBuffers(this._rawData, rawData2);
|
|
2316
|
+
}
|
|
2317
|
+
}
|
|
2318
|
+
return this._rawData[subarray](readOffset);
|
|
2319
|
+
}
|
|
2320
|
+
/**
|
|
2321
|
+
* @protected
|
|
2322
|
+
* @param {number} increment Bytes to increment codec data
|
|
2323
|
+
*/
|
|
2324
|
+
[incrementRawData](increment) {
|
|
2325
|
+
this._currentReadPosition += increment;
|
|
2326
|
+
this._rawData = this._rawData[subarray](increment);
|
|
2327
|
+
}
|
|
2328
|
+
/**
|
|
2329
|
+
* @protected
|
|
2330
|
+
*/
|
|
2331
|
+
[mapCodecFrameStats](frame2) {
|
|
2332
|
+
this._sampleRate = frame2[header][sampleRate];
|
|
2333
|
+
frame2[header][bitrate] = frame2[duration] > 0 ? Math.round(frame2[data][length] / frame2[duration]) * 8 : 0;
|
|
2334
|
+
frame2[frameNumber] = this._frameNumber++;
|
|
2335
|
+
frame2[totalBytesOut] = this._totalBytesOut;
|
|
2336
|
+
frame2[totalSamples] = this._totalSamples;
|
|
2337
|
+
frame2[totalDuration] = this._totalSamples / this._sampleRate * 1e3;
|
|
2338
|
+
frame2[crc32] = this._crc32(frame2[data]);
|
|
2339
|
+
this._headerCache[checkCodecUpdate](
|
|
2340
|
+
frame2[header][bitrate],
|
|
2341
|
+
frame2[totalDuration]
|
|
2342
|
+
);
|
|
2343
|
+
this._totalBytesOut += frame2[data][length];
|
|
2344
|
+
this._totalSamples += frame2[samples];
|
|
2345
|
+
}
|
|
2346
|
+
/**
|
|
2347
|
+
* @protected
|
|
2348
|
+
*/
|
|
2349
|
+
[mapFrameStats](frame2) {
|
|
2350
|
+
if (frame2[codecFrames]) {
|
|
2351
|
+
if (frame2[isLastPage]) {
|
|
2352
|
+
let absoluteGranulePositionSamples = frame2[samples];
|
|
2353
|
+
frame2[codecFrames].forEach((codecFrame) => {
|
|
2354
|
+
const untrimmedCodecSamples = codecFrame[samples];
|
|
2355
|
+
if (absoluteGranulePositionSamples < untrimmedCodecSamples) {
|
|
2356
|
+
codecFrame[samples] = absoluteGranulePositionSamples > 0 ? absoluteGranulePositionSamples : 0;
|
|
2357
|
+
codecFrame[duration] = codecFrame[samples] / codecFrame[header][sampleRate] * 1e3;
|
|
2358
|
+
}
|
|
2359
|
+
absoluteGranulePositionSamples -= untrimmedCodecSamples;
|
|
2360
|
+
this[mapCodecFrameStats](codecFrame);
|
|
2361
|
+
});
|
|
2362
|
+
} else {
|
|
2363
|
+
frame2[samples] = 0;
|
|
2364
|
+
frame2[codecFrames].forEach((codecFrame) => {
|
|
2365
|
+
frame2[samples] += codecFrame[samples];
|
|
2366
|
+
this[mapCodecFrameStats](codecFrame);
|
|
2367
|
+
});
|
|
2368
|
+
}
|
|
2369
|
+
frame2[duration] = frame2[samples] / this._sampleRate * 1e3 || 0;
|
|
2370
|
+
frame2[totalSamples] = this._totalSamples;
|
|
2371
|
+
frame2[totalDuration] = this._totalSamples / this._sampleRate * 1e3 || 0;
|
|
2372
|
+
frame2[totalBytesOut] = this._totalBytesOut;
|
|
2373
|
+
} else {
|
|
2374
|
+
this[mapCodecFrameStats](frame2);
|
|
2375
|
+
}
|
|
2376
|
+
}
|
|
2377
|
+
/**
|
|
2378
|
+
* @private
|
|
2379
|
+
*/
|
|
2380
|
+
_log(logger, messages) {
|
|
2381
|
+
if (this._enableLogging) {
|
|
2382
|
+
const stats = [
|
|
2383
|
+
`${codec}: ${this[codec]}`,
|
|
2384
|
+
`inputMimeType: ${this._inputMimeType}`,
|
|
2385
|
+
`readPosition: ${this._currentReadPosition}`,
|
|
2386
|
+
`totalBytesIn: ${this._totalBytesIn}`,
|
|
2387
|
+
`${totalBytesOut}: ${this._totalBytesOut}`
|
|
2388
|
+
];
|
|
2389
|
+
const width = Math.max(...stats.map((s) => s[length]));
|
|
2390
|
+
messages.push(
|
|
2391
|
+
`--stats--${"-".repeat(width - 9)}`,
|
|
2392
|
+
...stats,
|
|
2393
|
+
"-".repeat(width)
|
|
2394
|
+
);
|
|
2395
|
+
logger(
|
|
2396
|
+
"codec-parser",
|
|
2397
|
+
messages.reduce((acc, message) => acc + "\n " + message, "")
|
|
2398
|
+
);
|
|
2399
|
+
}
|
|
2400
|
+
}
|
|
2401
|
+
/**
|
|
2402
|
+
* @protected
|
|
2403
|
+
*/
|
|
2404
|
+
[logWarning](...messages) {
|
|
2405
|
+
this._log(console.warn, messages);
|
|
2406
|
+
}
|
|
2407
|
+
/**
|
|
2408
|
+
* @protected
|
|
2409
|
+
*/
|
|
2410
|
+
[logError2](...messages) {
|
|
2411
|
+
this._log(console.error, messages);
|
|
2412
|
+
}
|
|
2413
|
+
};
|
|
2414
|
+
|
|
2415
|
+
// ../../node_modules/codec-parser/index.js
|
|
2416
|
+
var codec_parser_default = CodecParser;
|
|
2417
|
+
var codecFrames2 = codecFrames;
|
|
2418
|
+
var data2 = data;
|
|
2419
|
+
var header2 = header;
|
|
2420
|
+
var isLastPage2 = isLastPage;
|
|
2421
|
+
var vorbisSetup2 = vorbisSetup;
|
|
2422
|
+
var totalSamples2 = totalSamples;
|
|
2423
|
+
|
|
2424
|
+
// ../../node_modules/@wasm-audio-decoders/ogg-vorbis/src/EmscriptenWasm.js
|
|
2425
|
+
function EmscriptenWASM(WASMAudioDecoderCommon2) {
|
|
2426
|
+
var Module = Module;
|
|
2427
|
+
function ready() {
|
|
2428
|
+
}
|
|
2429
|
+
Module = {};
|
|
2430
|
+
function abort(what) {
|
|
2431
|
+
throw what;
|
|
2432
|
+
}
|
|
2433
|
+
var HEAP8, HEAP16, HEAP32, HEAPU8, HEAPU16, HEAPU32, HEAPF32, HEAPF64, HEAP64, HEAPU64, wasmMemory;
|
|
2434
|
+
function updateMemoryViews() {
|
|
2435
|
+
var b = wasmMemory.buffer;
|
|
2436
|
+
HEAP8 = new Int8Array(b);
|
|
2437
|
+
HEAP16 = new Int16Array(b);
|
|
2438
|
+
HEAPU8 = new Uint8Array(b);
|
|
2439
|
+
HEAPU16 = new Uint16Array(b);
|
|
2440
|
+
HEAP32 = new Int32Array(b);
|
|
2441
|
+
HEAPU32 = new Uint32Array(b);
|
|
2442
|
+
HEAPF32 = new Float32Array(b);
|
|
2443
|
+
HEAPF64 = new Float64Array(b);
|
|
2444
|
+
HEAP64 = new BigInt64Array(b);
|
|
2445
|
+
HEAPU64 = new BigUint64Array(b);
|
|
2446
|
+
}
|
|
2447
|
+
var base64Decode = (b64) => {
|
|
2448
|
+
var b1, b2, i2 = 0, j = 0, bLength = b64.length;
|
|
2449
|
+
var output = new Uint8Array((bLength * 3 >> 2) - (b64[bLength - 2] == "=") - (b64[bLength - 1] == "="));
|
|
2450
|
+
for (; i2 < bLength; i2 += 4, j += 3) {
|
|
2451
|
+
b1 = base64ReverseLookup[b64.charCodeAt(i2 + 1)];
|
|
2452
|
+
b2 = base64ReverseLookup[b64.charCodeAt(i2 + 2)];
|
|
2453
|
+
output[j] = base64ReverseLookup[b64.charCodeAt(i2)] << 2 | b1 >> 4;
|
|
2454
|
+
output[j + 1] = b1 << 4 | b2 >> 2;
|
|
2455
|
+
output[j + 2] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i2 + 3)];
|
|
2456
|
+
}
|
|
2457
|
+
return output;
|
|
2458
|
+
};
|
|
2459
|
+
var __abort_js = () => abort("");
|
|
2460
|
+
var __emscripten_runtime_keepalive_clear = () => {
|
|
2461
|
+
};
|
|
2462
|
+
var timers = {};
|
|
2463
|
+
var callUserCallback = (func) => func();
|
|
2464
|
+
var _emscripten_get_now = () => performance.now();
|
|
2465
|
+
var __setitimer_js = (which, timeout_ms) => {
|
|
2466
|
+
if (timers[which]) {
|
|
2467
|
+
clearTimeout(timers[which].id);
|
|
2468
|
+
delete timers[which];
|
|
2469
|
+
}
|
|
2470
|
+
if (!timeout_ms) return 0;
|
|
2471
|
+
var id = setTimeout(() => {
|
|
2472
|
+
delete timers[which];
|
|
2473
|
+
callUserCallback(() => __emscripten_timeout(which, _emscripten_get_now()));
|
|
2474
|
+
}, timeout_ms);
|
|
2475
|
+
timers[which] = {
|
|
2476
|
+
id,
|
|
2477
|
+
timeout_ms
|
|
2478
|
+
};
|
|
2479
|
+
return 0;
|
|
2480
|
+
};
|
|
2481
|
+
var _emscripten_math_atan = Math.atan;
|
|
2482
|
+
var _emscripten_math_cos = Math.cos;
|
|
2483
|
+
var _emscripten_math_exp = Math.exp;
|
|
2484
|
+
var _emscripten_math_log = Math.log;
|
|
2485
|
+
var _emscripten_math_pow = Math.pow;
|
|
2486
|
+
var _emscripten_math_sin = Math.sin;
|
|
2487
|
+
var _emscripten_resize_heap = (requestedSize) => {
|
|
2488
|
+
var oldSize = HEAPU8.length;
|
|
2489
|
+
requestedSize >>>= 0;
|
|
2490
|
+
return false;
|
|
2491
|
+
};
|
|
2492
|
+
var _proc_exit = (code) => {
|
|
2493
|
+
throw `exit(${code})`;
|
|
2494
|
+
};
|
|
2495
|
+
for (var base64ReverseLookup = new Uint8Array(123), i = 25; i >= 0; --i) {
|
|
2496
|
+
base64ReverseLookup[48 + i] = 52 + i;
|
|
2497
|
+
base64ReverseLookup[65 + i] = i;
|
|
2498
|
+
base64ReverseLookup[97 + i] = 26 + i;
|
|
2499
|
+
}
|
|
2500
|
+
base64ReverseLookup[43] = 62;
|
|
2501
|
+
base64ReverseLookup[47] = 63;
|
|
2502
|
+
var wasmImports = {
|
|
2503
|
+
/** @export */
|
|
2504
|
+
"e": __abort_js,
|
|
2505
|
+
/** @export */
|
|
2506
|
+
"d": __emscripten_runtime_keepalive_clear,
|
|
2507
|
+
/** @export */
|
|
2508
|
+
"f": __setitimer_js,
|
|
2509
|
+
/** @export */
|
|
2510
|
+
"b": _emscripten_math_atan,
|
|
2511
|
+
/** @export */
|
|
2512
|
+
"a": _emscripten_math_cos,
|
|
2513
|
+
/** @export */
|
|
2514
|
+
"i": _emscripten_math_exp,
|
|
2515
|
+
/** @export */
|
|
2516
|
+
"h": _emscripten_math_log,
|
|
2517
|
+
/** @export */
|
|
2518
|
+
"g": _emscripten_math_pow,
|
|
2519
|
+
/** @export */
|
|
2520
|
+
"c": _emscripten_math_sin,
|
|
2521
|
+
/** @export */
|
|
2522
|
+
"k": _emscripten_resize_heap,
|
|
2523
|
+
/** @export */
|
|
2524
|
+
"j": _proc_exit
|
|
2525
|
+
};
|
|
2526
|
+
function assignWasmExports(wasmExports) {
|
|
2527
|
+
_create_decoder = wasmExports["n"];
|
|
2528
|
+
_malloc = wasmExports["o"];
|
|
2529
|
+
_send_setup = wasmExports["p"];
|
|
2530
|
+
_init_dsp = wasmExports["q"];
|
|
2531
|
+
_decode_packets = wasmExports["r"];
|
|
2532
|
+
_destroy_decoder = wasmExports["s"];
|
|
2533
|
+
_free = wasmExports["t"];
|
|
2534
|
+
__emscripten_timeout = wasmExports["v"];
|
|
2535
|
+
}
|
|
2536
|
+
var _create_decoder, _malloc, _send_setup, _init_dsp, _decode_packets, _destroy_decoder, _free, __emscripten_timeout;
|
|
2537
|
+
function initRuntime(wasmExports) {
|
|
2538
|
+
wasmExports["m"]();
|
|
2539
|
+
}
|
|
2540
|
+
if (!EmscriptenWASM.wasm) Object.defineProperty(EmscriptenWASM, "wasm", { get: () => String.raw`dynEncode012091253f87dì%nä= 4&¿nÝØäÂLÚªã9ÚØ[äº\ ¼¡³R=}L]Èÿ2 ÿù¶J1jj¡é,zäV|i¸Qk¹=
|
|
2541
|
+
¨¨%ýv²±»oúâLa:ê±ÊäÌÓ.÷Øý×>àW>z¯°8¯ñ\Ñós9\§ôÊ@Ü (tÃø4° ¢7fqÓg²Jè6x[zç®&4=} p.(°tÍÞã¾>÷CõË"*k?¿~7~H2ÛÜâ.ÏQä;6{ÜãFÑá'DD¤±°HQ>MínÎÏÎöʵÑÓ
ÞÌP¼P¨Þ*X²E=M¦qíxMñ=MÌë4/<gNO/¢ ¢>a~Ï®ììììì0ìa笡çëOÓÇM Q9tùµyuéµµÞÏ/±Óõò}E{òÓJ¹Û|·ôfÒ c¬Wêaûÿlʽp¹|)ÖEL¦ }ypÕSϹI]¢ºãæ°ÿo¶7ÛRq¾ÔÅEߨ]æËwÚ{óçVwó1¾EØpàe"Æùû¡Áª Ààð´LõÎxEÓ¢N¦
9ëùi& Ò§Ø!ÇFçS=MbäO?߷縪7ùa}5ðûÕtsUþ£KïgN¾)ø§\V0uSIö:ÌU4ж¯´Õn9ÔèE£ZƼ{hµmÙ¾6ÆÑ+xñ´«þ¸=Mߤ·å®«ïÆGFÝì|H?äE"þ!9«Æïpæ'][¯ù·£W÷O§&#ax$qf=}ø ô bÏ×W÷LôoÝWQÕÓ)u÷½èV|¥Gà¨Ö¸@ê|ÇK5ò A·Â9CS2¸¼¿,äÝÑÝy!ÑR%ÆÝÎ0Âv§ qTcó±hØÉã=}Z=}Ælüën¯ð(-°ÜwVÏï.th¥íS~SÏ»ZZÔZ
|
|
2542
|
+
3BÌÛ¬<éæO)ÎyÚ¯O*®uìÛ$öI¥Ý9ôø³\¤ò³Ù¹ÇP¸J×y@ÔyOÇmô½ü¾|S?2àú¤F?½ûoo3ô;<àáûÜ8ì²7ïë¨RäY¹|ÓºÌF,Ð-¸*\P!FJÒ8= o6HwLrúº¶ÐÛ\Ù¬o¢9IqÝ.ôf¶ÎÈ{Ī×N|Mfs
¤ÉÝàâ§*+ã§ô¯î¬7ç×§ä)!Z¨É,Äp~ý·wsSGóäsE\ýïé§Ö:Ò'Cç(_X$\¦½eÒ8$XF|eíÙÓ¡¤Û<ØÞÛ¸9¿ðÃÎ#b~× 4éîÿÏq
|
|
2543
|
+
ód|0wU&®è·vh6¨{ÚçÚ18Ó(ÓY\0¦= çèíß)Ø=}[xü-v?N(Kkg0}âÚ´ð¬ÕQNÍ¢usѳ=}. ëg
û= ÍMBp'²¨ x4è@9t§eݵ¾âð½ z?Z¹FH'̯¿<K,üµ<{ ¶JãývåàÆeù0Ð"F¥ÃÒÞþÔÉvCzl}ðN£ Í^P%²¸FX»WÎêô¶
äÉJ^g×SÃã.Ät*'ªG«ÒB<ÜÓ
¿ºp\àuV¯£ÅݽáÞ ùß=}ÎÚ^ÿí>¥!¨ â=M·?*/¤"å)â·ÿîÿî*(%*2[½"üríÔ4l½»a}¯CwpCÓèìGc-ã6®=M32k?Êg
!So-x>³G+ã@ò, ÁïáåN0þÙè.~È÷¡vTr¶Ã[üB±º»ávëw¹{pܺû"Aæ±9Æ^¹³òïRIAy5GÂwÉf4@Tù|qý7ðªwBL|Ôqv!ª°|]KiÐJVQ5¸åõ§å"H¼0e¬<óBîÚSÏUìHPÙA+çÉ'seÌNf°@ÈM,ð½egÖ¬x©û½2~«Ò1;Ö«
¯°4&90èE»Ó׺çʧJ<Æ¿&~Nu¼ãÙµ¢.UÇä(qQô^ö·%!É
|
|
2544
|
+
w¬= Îôª«
Ùת
JIS;õa rx×£.6¤°>5²Åà,õ°°h6ûUp©²v#}%é= R¢hõ@ëQiJÙ\Ûp»©[vsiÙLE UG*sGÄ%V¸§;º_]cØp#¡:oZ{ãS5I¥]ÓaÎg+n×ýÿTxy]²ö°k¦kêju¼xÐTá©#h>Ù]u\EA+§
í¤u¦üØlQPdëNòzyÞ¼XÐ]ÝøÝg¸BI¿BÕð_Ël¶Cuyºr|<¾¨Támo5êÿú>Æ[ã±G¨²)ü&áòüåBFou!Íí.jÖìß½8¥YëìáÈÁi)qÀ:ÎüÐÖ¤Gͳô>°ú¯øâ?R£k~&ÑãÞ~A¢;Ð'àÆUÀ»L×)-!ÿkýíÙ
|
|
2545
|
+
§Û\{¤ólW^næzk?G~?_5uÝñ7-ß«6YPðGßÚù\Êê -ûp¥èÓtM×hKȯÒBAê"ïx×HÍ0Ôcè+èçÛÅf (§¢õ®%K£7éÞQ'MxãxÐúÑ
2!8_6̶Ì6ÌrûùS¥ZóAIüå6¿jÿ_°(ÿä9©CCÄ!bq5Öô×x{ÍbÆÚmÒ@«µ××~ÒD;*ü ùeÀÞ·xv¾;¤7¾[W\ýüb@'qãµÙâÉE¾}}tq-g=}Üs¢5Ó=}$ħ£Ó~SFÎgÑnN>1§/¥¸G5àM8#Ò;2¢/K%xVÓ(XH>µ¬ü;_j~Æw<¾ô*»ô= fAËbM¼iÀIIp'c*:oY¡VÖ3ûIdû®4ÚûýÆð}ûN¥ûI
|
|
2546
|
+
¥ÎÛK*]Ø=M>t×ý³MwEè®"Û4]]ÓgØ×EÈ.pN°¡»¤ç/I.ÿ+6r@«Âz@§Bz@¯ÂIê-tíÜ«°·GföjÏÕì:gÕUÖ=}÷¦|§EõÌ$a*¸s¬´«£¯JÞàãËt$ GSÚ³Ë1¯©&|±c!\åvçϷѸãßñ]á¸?ùää%6´= #e¬Â;IÚ¡õckCÀò*\ï0À¿<>ªÈåJA'ï´¾ME.@OüÐ0ex÷#2ÒùúµÇ½>o{«ó= Ôï;ǽ¶óÐ/ÔÍܤ±¢Ê
w>ÃâС¯®Üa£¹6Vý váÂhôàÍ8D!Æ!ÆI;¢áÜ!oÑÙ
OÏKôò=}w<0rT= 5J_±3×Ì;ôYÐ<aÞê¹¾7ßz\˼ÛÛ@>Â{å%K¯º'ÊmÚòÁjRÒ×úw@'( =}QU«ÐÁÑ,/?úYEyºQì¬ {ÇLÕæõNáð#f>_ò#Îv]/øÏ¾TUà/øÀAÔ'w]Ã]Ww]Ã]X÷Þnð·TbAåÉ r¨4?t²>1Ç[áüx $-ÒÂMÄ
§·µwsú>üÂ&³÷.dgA¦h²*G× öcG×µF5¸Êqª$ñ?¦vÿ<ã;ÿsÒiÇXòku®vUòõcuæÊ¦á«þ¸Í
|
|
2547
|
+
ÑÊuãE"þ!6Ø Êæ}}onË:W½¶«ÊFuÃÝUS-1ÀÕHòzµö?ov»®¦
|
|
2548
|
+
CyÈçaÆ
|
|
2549
|
+
pÛ¢&{µ¨«±1EXÆÂu.7÷²ÛJÊÂy[å²µ»bL?·×øèìCp:æÕé§·rUèésÜ[o²ÛòDòDÞ]ªä#çN;Ïð)â´*z80Úèóª1çE¯´Rì,D4H(øË)gp=Mý«û»=Mþt8º-HxH}Æ3Rt?ïɤC
|
|
2550
|
+
§ßìéõmõ,;æðk=M6ЦuSÝ^è´®Ù6=}æóO«>
|
|
2551
|
+
yÒîÐ7a'ûLUöø>ò -6Y(¬ÀMZ¾ZHpu°c«à±[t*Ç*jwÇÍ$Áíqx©SwÑËR¥é®[XJÓ8=}üµnt9ÚÏ3z½¼¢[Q2Þ¸/=MP§Y&y=}ÚÛwëý¡àߥۧÃþòýÁÝÈìûê(±¹4'ïÌ:Ûùk=}eªãä ÒCKA¤Æy×nvȧmÿ;=M]¿ÕÕjÔª sF>úÔ©áÄ:cÀÆ<$|ê'!×Sb¢V¿oÇåGð¢UÊ u¤ZJýæÔÿÿ 2çì¯h£f¾QZãÁ ® ìÇ'ÎÅ[¸¨{?¢ÉhS5oU½c¢ÈÂÜ»JZmUí\áùµV6Bète
~Ãw÷0Õà®ísÆk,{ý¦ûiK+xvÅå
ºñ a[Sé»Û Nõòý¬ßà¨= 7på^ÿÃW,¿*M½áR±Ì³FcË<üiÏ2|ö^vKÏHò¹uYbk¿mZ¡O^ÿç©~ïj°È7 l©¨ç_ó¼'½ßªåÏn\ O,wòi,Ū-¿?ð}òÁá=MÍ®ÿ²EÍñÂ}¨³ô-ýƳúù56MÃ6ÓJz=}p³ûê9õàå«TM×Ve>G~Ù»Vü²öHByf<õ©+QWF+.ßAGÔ¦ÏèÚ½3âÏYÀ¿T¢¸6ÌéÉÐ*¸ÖªÏrÍëá=}6/U´Ã×ZþðóW.½ÞQ¼¾ÆqŽoâäB-ÓUJ¬má8øªK.y±>.Q¡a0Þ#!,¥BÞ¼S?Ìr^¿_Ö.¹ó{=}/äÈAt}Æè̼4¡Ôîgl]ÌUEý{}|DÏä:°-Ñÿ°=}àØéÕ}Êñøðº~¹¯4Yqm¹]!ºÿ=Mõ« :Nl"SÇps¸Gåȧá+'M¿ÓîÁ.î¤=}mÅ8)¶rrHá"ÈøÂìËøÍí4ô72bbߺq¿2ô=}A5.YV¬ÑÚã«Þ[F
|
|
2552
|
+
)ºhXûÇÓ>È?p¤ðoUÊÓ(³FpÊi¡Ð}SÚ~E !|ðí,Ç9½Ãë¸Üì!¤ÓÃX%DBãu&dÔËôg¥á¾l¿AÉ)Á±ÑßÈßý¹ód;|¤Z»#ñscµ|¡
ÝOOe^ãÂxÝÍ]¯òbÏ£÷ð4½ïÖ³;û/ºsñÆðFØIn²q¢©*× kdO+÷åÒiÉݱîBr]LÜ|8~7vts÷9l|aë»EânÓ´GGò$ÍR,<e0i¿ª
|
|
2553
|
+
±¾
àsÓZJ¨?&%Æ~-ǵªö±;ól"=MLgÿt#
|
|
2554
|
+
ü2 <Àn¬ÉäÍôÿ®É1SÄà= ôñZ¥-@z;¯üà¹ìJÍ=}ÊSeBÞ¯´~¢smÿ-¨CozÀ/;Çël&uñZÖPV«¤¼´ÀïYÒ~=}DrâgC §ýçrÆ7âÃ$ÿ¤Ý~ÞÝo@°³Ùs;ozûÀ~R§ú"¶ü/ôcæ<°^Ôã/éow×ër¦_UgûÀøäâkHÈ{&ÏMëqÀYÈLÁÊGbÙé:·q]ä\PÔëÒ¤a£1è]á
^Y[Sw¶å²¹gÒ0ód^ÈT.WÄÜ[ÕÙ*Hi®z¹µu}ýuý}#ú=}ÇÌRSûçMø=}¹¹>±ÿì¨áØ[R?ÿ^¦ñê¾xZRS^PSSSç1ù}ÝZá4fffdf¨ÕËw&eÜ$hä'{»Moöyg8¹ê¶@ìÛª0-ó¯:¹ e{%<ÎÖ}Þ¤vª6¡Àõ÷Gh8= FºKVñ.ºHÅ)<Ñ= xs¥BE;;áF¡·!¡-ÀYÔå^Ö'l̯ßûç¥køÞ?[ë>" -9±/ÊÛGÇ 6OY4VÕ»º[öBÿ:B¡WÍ&½ÇÎç»Î= 0yæ§§5àÁFiAͲ®Ê\¿<î!xÞ³E =M¬U/þssæ¶µ·OÌ0§Gûúñò¯{^/~ä׫ÊB= ;4¤þû^Öï÷L÷ï_ñíx<õ;ó5ËÇ~¾V+ä
l¼Ñ°«Ôí¾)Âfżo¼ÖùWa1køìFvûëûRQø]q| ï0g
ºúîy["FÐþ7^ÒRµÚèæøÔyÚ
|
|
2555
|
+
«ãi Þ@
U¾¸»* è#ò-ì¶HÛé¢ùL;}·O7
7ÅsLæþý8¿Óùñ£}.= <¾=M£ðQKTà^O|¸üggH«0³i£im¼_2ÿöúÕ¨LaO+&]L¤Þ+,k Þ¶Ñ~T¤ÂHì ÊèèÕÀíÒ³MÜô~J<¤0Yð¢´."»âèÄxqe%oÝyåæâ¹25UÐ/Þe.×´Øì_æ¯_zRÏíÑ@ÿôLc¥Íðy@YΦ}µZ:ÑÂgZÒÒ(©¢9ß Y«¦:vÙëÎZJâÀVsOtUÖ Ò¬¹1ûÚG´OÃóG©)niÇí
|
|
2556
|
+
Ô}½3:.k]ý²ÂB=M~ ùÚYp95½qýãë ÐÞ/¡(ä'§úºE/ê«Ì9ý%Ú!<ÏJP&|[,gzű¡\o0Ôhûóþ¶[KêÍð= TjÃVñ¸D¼Ð_Ò
|
|
2557
|
+
0Ø_1dPðt ýtZ¾rù àJf^;Ô2éÐ=}è¤B~Dñ7ûÓÁ9³ýbA6ZØ´èÃg½ñóø.:~ï ]bªZì¿Ö²2QÄßo¥-¼Öá5uu/u³òD;gjÀêÃÇ|eÁ9¬u$*ÐÁ'ÓDelÀëäì¥Ò¤Zí6OÂ@âF0-J÷¤=}_Õ߬ÒlÚM½Çôó~ð76DEÖ'ds´ÙïÝßøaÊbÑ «^Í}&àØå?¾ÍF\2HD5òèÁÆdËdÈ·6ÙPÑ|¬Ôq*Ê>0¸Cì(ÛXYV
²ýIpÑíM kÖů}Íóôc7ÅbrñÐeQXæ©Æ¯ü_Û»ÂÝMþ©.ckg fq ôo@qRL°ÅYÎÈ»d'<±+±î,Z-GG»ø$âGvÇû µA~YF5"§)ðfßÐé¸oJRRÅ¿ôXÝaú.QMw1 1þøiSo¾®È²¸hÌ/Î })fBr.G1£º×cÎ𥰹&WÈüAno#g ÃàLi²¥8ó=}dä¥$Å(³0h¢0OjfÀr¡6*#àæ"ãûQ?ñ±«²Xóä*hïx=}ÎÞ¬výÞV÷{u²cöê¡h¯QÏYaêL$¦ûÈçIGßþEýWöºýëÛßý×Ïði G´ì=M¦ßÁý'þºeâNÖ7Ï/Ñu·6rÛF¾¾aUÌÓiÜúÒ]¶éUY*= g[ 2-_ c:ðY)
|
|
2558
|
+
¼9îK¨£8oSå¶K4U>+¯Ãî[H\wâRVê/÷~Ðnm¨s8CÏö©Ø%ÀaªS]ý¼§ r_¸k
|
|
2559
|
+
ªµfÄéÒQæ2¹Ão¹&3Ç¢u c5ë6}Í:B£´1uièÑfa&]ävCOx·"³LTè.I.ÊÍzB!:FÏëxS´Q{ÊõZ7Uh8yÝfDÎ dÔX3Q± ½=MnØnÅc"@;f?ª¬nû0Lp´h,¸#Mà->+C= Ê¡±^Ù= ®Â¬QôÅùî
|
|
2560
|
+
öqòbß=}±ÕAË/8RzT³
ÃÌ/_îMvÛ«;7S ìN4
|
|
2561
|
+
ìo7è_¤ÀÜñÜ©è^U±A{ÉöìXtnÝÇvz
|
|
2562
|
+
½½Ùo¨çaúâ?EHÄ»ë"±cÀÁEB]acgdck
|
|
2563
|
+
ËÁEvÇÚM:¸2¼"ûc³Ï1mA]ø[à= Ý|«oÒ&¡® ¡K$ÚiPÚÛaº!ÊI#?3ÄLoxJò¹<$$»¢¸h.ÕY¡g Û30× ¶~ÃtéR0 ni6ôeìaz(¸9°Ù=}ocî#üR{¶ù*×<Ç\Èsa>#¿]¤(R F×X#¢¯mVRòºÃ 0ã51ïíDÅVst°YÎ=}ø´·ÇF ØÕÓ¡ð(B
|
|
2564
|
+
YS= '0#×KB<rÔôþMz8ï³tíYS\¿©æ s¢3~ÏcÉÜ[öÝ-y£îu(´{©ueØÝª g×»c*5죡Ð>¢9®ïîêzr{½¢j|W¯Cú²"Ƽ¦Xçt,òYCIVµX#¥_æ)3è "9ûã)e
0߸Ûͤ³.¥>å*ÁpepQkîtÎÚ Å¶ïoÔ¸>³55Î= Á¿rà3S\ÌÒªs0 iæméQúR|ë²FAè Áç-ÚýFå3$qÏ3+wØ<üªUþvü£b)Ný¯j;0õ}áª[6k WÇíH® ¨{2Jþ!y+(-òÉýÎl SÆ_¼òu8¼z¸Rîùq_fGHî?{vTgeÒU<S^£(îl=MéáDÛ¶ùM·Ä7^õÿ
|
|
2565
|
+
Ø£ $\ öv=M¦px6+ã*àÀìî{ølÊEy9² hϳ!ÕÑjú¸ò5pG£¸fëp N_::û\RQ[⣮M¿L#8¢ÑPk5]ý«¢zg»güåÐÒöí<ôâ~ÂÔîtýXÙñµE®:¼VBͼçtnHç|Ï0[óoûM>h}ìAö
":Vk=M©l\äÓröQR}8qeV<J"ÈFäíûI_Óã«DûëôzïåJNHeÛpµ
×8æÆPI¦û-t£sp£i¼äsç)ç%0eq#ôFør\ÃÁs×CP÷ú½ÿqH²}EéÏtjTi.Òþ¡=M%ä¸ÕÙe½_ëÝ;+ÏÁ9ó+ä·9:×´irxb@åÄä*Ý
|
|
2566
|
+
²íCKÝ»@;ö4Päü
|
|
2567
|
+
cãJ1«õãLPµêYàn12ȯÙI
r+= ¶/gýZ³#³}~å0´ú¾dÈwû{èÒYuvëNôºô[í&öõ¼[9Ø6
|
|
2568
|
+
>ßNçRÆÛeíu?ìýhWõM^8<ã*lkê@uú.FzFë=M-ûhêlT±ÏÌÚ®Eã¾d¹P±¨à<ÛÉÊ6åÉìÎ7Qv¬ÎÊýì$ºÑzØ'¨mÐØÒº´ZM°o9=}óÃQ·»¾LW·:+¯©p §àÕ<Ïí2gþá1é9|RówàutHý8ºï@¬^¢W¶©ê ]ð½6ÏOô¼<±GãQ~V§xâü1éUM&CÞÍ|A<^ES¸34
|
|
2569
|
+
Z!¡ÚÜa7Î0¤q1çÖ'©~É ÙWüã)¼ðÁê1
¡é)&n¬'eÚ!6¹¾P;<dm-T©ÂñPÿoà¿§Úì4¢Î³¬¬iTÑ9ËÀêIqþdiÉNì=MWH&¨rÅ«q,ì9C6/¤t«ô= ªK5Â#f¿%Î)¦k Aù4jFv7üÃ*-Ð\éÌ:IJ21 .¨½ü,= åÔ3VI¯¾¸þ¼¥ÂÆÏç^g°(QÿiÕ¬ª|ï
|
|
2570
|
+
Êáu¹ÎÖ¥UUÁYE¸ã²öÌÐm®~wø%þzêÑ5\5oFn$»9³mi6zj1séGd¯ÉØå2(0¬>nE¥âVÇú°ÜéÕî£]þ´Ýs×7ãû<Þë§¶§V"íÙC'aÓXK£¯üYüúl^~¦¡Rû!=MÜPa´
_Cë.0£\}À±QP9woÙæQù§jKõ û@É+gI4
wÖü.Û_é4GÆ·#ÛxEh6;L]¥2¥á5üP4õuÅ >çò-ç»ëé;]÷ÑÑY¶ v
Pö%!̧8÷PÛ'rö§ÙßÏËí»kæ@æ{¨ËC4¬P¶ óÚÈsåÍý£Îx)ÜØNóÐ3õÜMüB¡Åø×½»#»Ã-á;Ì'Æz{ãMòÆ0в>v©Ø¯³û#iàBé]á¹F{srPZá:óöCܱÀÃÊõp^kñþv1_Lç9νdض+u¥æÌ·ól~«ÙîûµÕÔebyÞ«880L²5ìæôvZÉQ¦HV/ïF{8M*Áý¶ºÂØO~ü3|Øx¨>¹
çûÖú;ê$hÌz~ç1Hún41eÆOXØ&É¡:h'¢yÓSvðxåÊ:µÆ-Ð)ì_ä;k@%"w¨s
|
|
2571
|
+
ËØJÂV+á~àé4È'QØÇÝøÄ|^ Ç)"¥0ǤÐñ kÂe\0¤|>ÿI÷äÒÝýÔ]¶;L qìÅR¥-bE]ÂrÊý#8n°»ØÑGø,RmâAê_Ãpá%/BU#tÎq>ò*öú(Â$âeò|=M)!Ð'¼¹¼R
ÐzsÑx
|
|
2572
|
+
ß+.¼¢7â%²0ÿPàiÝPñ¸MÏå:Lå
-ügß=MÅ#MÚ+üfmi®= µ¬³ñ}$¨9<og"Ø[x«Æ¯+_Ð N׿jV¦¥#Dw$¢ø"ÂK**¨N]EB®°ËßSâ^í%Í(æé¸ÞögÝ¢´Q{Ý»b§Õ×±±hÙ^6«GàýQÃe]tÉ¡Q¯¡ñ⸸a·12À I¼Æ÷nZQ:bùh<c£5yÞ§è~xWÀÛý$õAXÁÓ4KóÝ×¼µ@ߺøz¶Ñ1s7=MÇ5ö¹k±R%×¶Hâð/
|
|
2573
|
+
+Å»ºDó(=Mj$×JD ò¡Æÿ¼"@ºqJº&ÏþIÑKÍPçüzDjIö
|
|
2574
|
+
¼ììoìì¯íì÷;#¶º8l¾k#:âõØ÷¢ ü_WNì¹tjÏuÐÆ>I¿y Hø@u¬BÄÃ5Ûy:LU&ùð£Rn̵5ZGù<§h¿ËhÙâ²zí¾¸?JàçªIx6ìÚËìV£áø¡h²'ºéÞXQÍÐSÝdÖ8ÙßM9S}À4To0ömeΦ\ܳtQÖç'Ñ"Á©là¿ö&.ÓÚçï±í¥£ds¿ý= ìZÔOäþr;Z©êÜÔÐó>B:½î-t®«d¶LÓ¨$QèÔDÏ:!ì Ûq*sª4xã´®X&(\À¾ÊØXA¸¨Åe2PB
*S{éÔce YÆBº©¦lÍX;O²:Àd¿fQCnMË-ÂÂðǣﶡSÚÁdC,KÂÍõÞ=}=}ß 2y3R¤Ö3=}cÐ'Z®¦}±)\(YàP8?ÈÚÂԺǶïiXEßÊè= êèÅDÐ&sÙ¦R÷_{Ù±4Ë2 ÆzãT!gU¯CÀ@¼û7"ÌfÆúX«à-öRÄêP$#¹oü³ãq¿«í³= sü§{ÿ«·=}ßÍ q?¡ÏÙ¨½Ãç×å?gÆôÝi,×¾Ö³G¾»= ÙM9jA¿¬R¶Æ'sÖæe4æ+6ªÀUùxGÂ+YbçÅÉM"äéÁZ]&ý¡9å(¡nn¶1Í^¡<ÞÍeæ:WæéÓ#4ÒªzBËÿ:°5G¬ÛÂÒ(âÄGÿö*ë¶.ï\¶l^Iì°ÔüZÖKXSý¨' M¾b]±>0lùX(^^¼òçHÂSîÃçàó+!mû¤Âp= w¢·nHµÔHÅ
pÈXw]©5"1ü>
|
|
2575
|
+
±XZ^Î9â¦gþ=}oäíçY÷Wé[~Ñ;=M㪶&$óÅßah
|
|
2576
|
+
ÂãtÛókÿ^Û7z¶#X@ùrÏ8FG"5ÄÐÄ~áUÒ8ÌËÌe3ÎñA´ºÌ=M¸óÆ~2Î,ô®dmÖ=}»u¸Æw:á!@
-¾ *ïr±F¿/Í;öMÅÂ1¨:4>&YÏ= ¬]ÜèÁ/4&øö0aMÞjR»5bãXq=}A%è9= i©¸¡l¥nô@ÃOPz»wÓÝlX
|
|
2577
|
+
:ÎÛÝ(.Tɬ|©Î¾²ð¬ðÉçiå_*&F×[ oô8B¦Brþ=M¼-ò»ËÍF?<@üønÍ|ãxÔr6hÚpÌöç#5íl÷.à@]ð{¹ø÷ì<Î<ÂuwNLO"_u7°Ïa ÿ\ÌrîÔdðó¶§Ô67¤p£"ªCËu@ïfcOò¯x¸3 ²#lf1}U¬q±ýx¾jõ×»ó±ñ ÀR³.ÙýåÐéIcÎÿ;F? ÛÝkØýóÎóø6¸'áû=}t8Ô]&ã°¿|%BÆ<þ·ÎÜ«ëÍ>YUÐgæE¡ã(Á
|
|
2578
|
+
8ÔXÀvÏʨ¿6bnµ¤GÔÁ¹§\)é«®~î¿w"Þñ£à/o¯ëOïr(ÿ
|
|
2579
|
+
õOá4¥àyáz¼}·æÌ²ìB#Ùø }
JÏìN\]=}Înü4VáaÉlIA Í<â:^&q/nõ×n5;=}Ù,ìâ|0Bõ=}l;Á¶®äÓ=}a&¼½ó
ß@ÂU¨¯ÜüHÝØ¯Cþ6ýjÒX_16¿X]~Y~;×*½ÿÊí²2
|
|
2580
|
+
=MQ·ämòjyÂbá]ÜÍl#à(Kð5ÅôIJßqE|sª±×ÿe¼SÐo^[ØÞôXYá4ô@1³¢[#ïQ½,CèoJ 9Û«ÐKvnC&Â0 »¼°SäcÑ07 »4NòÚhr/#ÉReÊø?°Oíÿójà!c³hziÕ§nËGY³ÿòò,8ä¹àø¸¡µ¨X[|.ôóv3<÷£Û1²a<>G¦»
=Mlf*-¨>9C1TQÂñ¬ì(*ø×d²¬p ?n=}ê{ÕÊd\ø\*·×RéÕR_Y>7Û!èc.¢V;$|òè¯+/UcMX?é9ÀÌéZm&
,ôvõÓé¶ZÍ<VÓü° Ti{êC§)ÐCU·RsV$gÖ¦îÁ ÖPö4fÃÑ>פkc1W\åÅ$Çp,%j1âÂ>¦¹Ð¨XþùïäRÜJ¿o{FúйÝÚ³ó£ëî¸QE@mj6¹e¢Ñír»{Sg½ÍRâl¦í"C÷Ö]§@¸±ë:Â(íQó9È«Ëîqw±º{i"ÁjêévVÏ¿KÐ÷±ñ´ìp¦o.è<wÕʾØ/iºdr2S£ú~&Oãè.¹
|
|
2581
|
+
x*qT·gÀúÛx¢/Ã}ÜYñ-XlEìøöt¢Ù6ÀùG
|
|
2582
|
+
;%eU àQ-ðÁÆô+wcq÷æÍ¸S©l¹¾!Û¬O ISüu9=MÊ- !²;ÅUº¿v¶å±ØÆá¾ @ë]Lke1³,#o¸òÄéξ$ê¯3eI Nö+ãsQøÙöá9¬Çì<= !#\
]ôÅvÉplñEÚt^ÍUMAϼÆüÓú}Sú",Ú}Î>P=M¡nOcùÀÑþQ{¹ËÂM{ppÝ5o;Úþ¨Wå7°S'1Ê= Eºg"¦^H m?P¾ æcà à°!£!f fT(Ø#ö%P!»3àc= ic ðü3p £"Øä¨3ðE= "( Íè±Sàçg>W 9μ5'¹ñ3!©Ý¬kD«êíSãEèí«òªý+Lo~EhÿÙ%á¸ÞÓ®©ÆPq²@¨Ø@ù£u/§>®\è¹'ÙÞ'ë>ϰcLX«züèCõNÃöq«OëÞk^ÁÞO}a=}¼eaþ²ï.5pf°²/²Ú±Ë=}lZOÁÐÊSy5xLQSSOwø¹¹Aìì¸;ÔZ$O0\6kÃÎrÉÅÆlØ2²_(z¤&ìL¥âð¼[¬ºIPN¬¸/3ö¸4=}s¦Sgù0ÆíÛàÆ¹(â¬Ôÿ²ÍÒ
ÁOøVSä®PþWì»9wx^Ôx<Ô¥KL¹ihx\ÜpÿÕ;<V³¨Ðòõ«çÛ®6¥ÃXF<ÿCà)Ss¼4n9ÁƤ%çÊe×X&¼1öÜe¯¢«.iXɾHù;%wìØJ|ûCàS-(Wú®{®û®Zñ¢0Zå¤Â,Yðu@lð T*¨%ëXæ¤%tÑM̾¨ÒsH*sHµ= ͨ_T5t|Ìö¯ö"XöNV£mYöÇzÿqovÕÀþ.V *z©æJ:ó4pÝH®qû§ÃE¬\Ú®T±*W¯2¦<Û¸àÄaxâPf<§PªQçhÐù*öÑXªìX»$vÐ
|
|
2583
|
+
X©eL ؤóa³ÝÆõLÕæÔº¬ôô»ÿ4)D=}¯)3Èød;=}ýÐNÀ"=}{Ó¬IC¬¼õâh@±óRF¢òZbs9°ö§¦1³az8ì>+âTªH[Ql|¸ç6¶¥å@i§C˾LêËGdÔð3Ö¤]äp2ºþW¾d¿µ(H&b3Õ;ë°9Ûeôó®jdúQÂÑTÆûd7.uo{Ø<Züºæ:'!î»Ø:iÄ4ÓÂÀ,¬ôQÁ]v=}/·tæ5&06
,ø$ʸt¶ØMõô[ªVÓÆ=}Éæ¨@A¬K¢§«Kä>N¬È]w5øÚ®dC{¼æs ÿÛ3_Æ
OSLMÔkí¦
ú¿
{¦YæÕ»QÿEL$1îì4:6Æ=MrZ¾6Ày{øA<(Ål1 dbm7ÎN !¬Ûlî1_= ©néµÂåÅd¹¬Vk.d,4Þ3~LòôÞ1ú¦·½d=}q©7vzaY6én±Æó¯Ã=Mµ\^F>ÞªëàwÞ»ÏÂËþúækéy¡½ãyÝ÷¥³jp'ò
°;c9¡Zs&×]Ñ]ÝUî«>_<(¬Ov Q×*xuòRN*k;*0ä
«¦øÄ
üЩ{ÖÔYå!1è;å&ÜÃFUfmü&r3ÄèÄQñb)2ãT#À·ÿ¼%TqËZs>cU´zuÏ ¸ÚuQ=}óÐ-G»ªM(e²ZVꬽv¸ ͦOT·S°{@R0MðaÀfȵÌ_Òú|â<ñ¡îйAéÜb+!¡O#*¾ï3¨0âO"ÍxÔûÝ
|
|
2584
|
+
ÃÝ'´Güír-|zþçWæ¯$×[ÙÉJuøAD!>'o0K¸5×=}þ\e8
|
|
2585
|
+
?»þÆüÜ=M3íúPþræ M×Öq&@ýÑWnBÓ>7ÜÉTùÜQ¿^®ñ-,å!'9ìsùÃ4?BTu&éçãÃ,?(&ój /¤£Eà'â£= R(/¤¼=}Íf÷I³HZépôSGÅQ¦+^@]ñïGXg¶ò¤ssÀ /µ¨/6ÊbÏ´%°/³~å¨5|e¦U9¢$BFp´¢cë±²êÒý´f]ð®ÆÆÓÎa.$ªó=}´Y_óìõXó¢Ëï|3;-%ÏS
)÷ iTlWôáµa6m u¢Þ>q9 'I±N}ÞC>hïGÒ*Æ·¸Pب)Åéø¯Ë¡yèZ?1^B\püõôÞç¹Ã Ôð4ÚIsmQÚÆû¡u°|î(®±Ø¬$©+=M°8ggÒòCÆKâåþ6
Ä¬Ú \Yý°-дXÇÌíÁÚË2ñ=MdÑkhhÉÃd6ñ«Qt»|Z³ÜuÖUhϽçØÛ}½SýË}©)ÛÑÛÇwßC ¾ã't¡a.ÍJãpa/ ÁâÿTVÚ´ý·ñ¬?{«<
|
|
2586
|
+
M2I©O}³&ÿ¬øu®:º}ëßGnêtF@1«=MÉØ &Õeî%~ïNõI'Oöz:?*<á°TEŲ{Ï¡xÔ©ä¬É®ò%}Iù$§ = s~;ÀíT/¢¤ö
ìpg ££»¬údl°yçðÖïfʶúÜÃï¸F÷ÌìÊÝ}}yÑ^Ö½Ì~HíÒÈÙ¥¶kmzkk£%&¡ËmsÖ>ÀA}Ô?ºRË%]\:&D¾[,¦Ñ$ÃÐÎìn´cÓ5ÆÑO[}=}áÖ(N¡ñígµâ9c&=}Ä®ÒξQ,öÔ?è³K'VL¡](ÂVÚCê0ø##{ºÿ3¡6®L(¡mÕ"ÕlÆzÉØÌÝ;Aª¸_ÛÕñXã0î|ò IUÂâwļÃú®[,ÊZH«§/nPäõ]eÿõuóuqú´Å³n=}¸@Ö,ñ«À7¸£Å½ïoàõ .®<òò£àzÏq=}þõaé¼ù^Ò\¡Êáä®ù!MGÓ& adePõUáßá=M tï¸
|
|
2587
|
+
¿.Ç_ò$U+å¯
|
|
2588
|
+
w§ÆËp;t'Q$2%$}¬ ^(f%e_0^ Ò¯°j¸kª2{m4c@U4N-LCæª!3gâùã¾Fm¬EÇtîÏ6Þ¤äxN8a©Y(O}=}ÔWñµÖê= W¹5(¹~o»%V´¼ÒJÓ°ú:Îų§0V÷zî!°¦¡øðÃL!¦]èd< ÛN´= C¤(Æý>ñmÇs=}ïû&NK<ë'»é_È!ôâ[õ³"¸ÐNV캪6°Â*v=}7%ÇHßDÌ/2Þ= 5ßK9'ën"?¿lØdmçþ¼S3µ¡BÁÞø|4ìX6!ôE¢z@ù}ï<|à@T¢#\âCËêéÙdUè®8ÂrãÚ·AÙvq¤A4ÌÈAäv¤ Ä,½ÛVq^ºÞéçÐ3'Á69÷[ÎxÈ»áTyþÎÍeúî<=}ÕØq¿ñ²9y×m²càSÀÌëxéc¢b9¤¡1c7ÈHD À!xÚÁáò-[xÚ¡xÚÁ¥Å;úxÚÁ¥Å;zxÚ¦Â:zÚÁ¥ÇëîAÓûäd¢í"äü;ö'¦&Úlvs¥æ~cQ±¡K¤ÐáXÕnIÆÛ!£à¿N;Ý&T,){lH:_}3 Ãø½óÿ{ÎÝxöD= eËjv)j-KtÚF7ÀÍãÃòeS³1Ð{!ëwH«1¬È¸Øýi¸0mOPüéyMmOXÂh
¡º<¡!øÎÀ+ÓÿÀU!4¹nð?4¬²Ôj FØ»ãw;pÃøÐ"ËT'b[[ݹ?°#O·Õ·O%·¹¾É³ä,}èÚöÝvýÝsÁÝÑ*z¼wôõÆãúÛ³~t±üOá±Ë2¸[
|
|
2589
|
+
ÁÔ(û6ùé2oeÅê½úLÁVqR ÔI7ÐHh=M*àCY¬Ñp#¸ÞYvGà¹8 <co[³KiRGj&õÕu6:ÿ¹C;´ÕÝèÂËjÒOõ*W±[Åk¤íknXâ±vRa¢¯IC¶Ñh}£]ÆãZµ*StÂmÔkøòÖ¾Ö¯w<
|
|
2590
|
+
¥ñͪÊw)*èÑ;fy>6z'ÚsFaãì(¶õêÁöcÔ@ni±c'ëA>QоñBù$JCv
b9|U3q³Ø8:Lw(ô¾îMàaSåÁ®bGÎβÖÍÞ=
|
|
2591
|
+
<Ò!¯É."îRUéwºÌÊaq_Ë;e]¼.ã1ØÄ~qØ´¨
|
|
2592
|
+
©pz½¬ÓsÐü¹Ø:2R%3§ü+ f=}?@Õ,zèz%øíaj*Mô
ÈÍ$w§îyfhEáeD¬
|
|
2593
|
+
ÿtáоÁÚãèV¦eÖ>I[Bë+V(mÀ®TBã:ê{AÓà½WWºÎ.®yj{µ¶y/5kÙ×¹wð¾ÒäÄ-¦ pþ*-+i} Ë}}ÈiÅa<ûceÒ¢]ùá¾vÿ¡+øtÂçm=}qI7hyPÄH±ÒlظjuOÔ×ûÊ86
|
|
2594
|
+
%W=MñàÎ{_bØÓçõÓÿ%$|Dì£ZL3F
8VãWu";¼×H°×kyPøÑâëp®=M1¿ëAp:U>2{íØíwK1-<êJÜÌùksöK&êB.3_g§%ÄÅBÆ_®Õ¡o8C@Ao= #±®Pïf|§áÓñØ)¿G4¦ÎïVYÿjMa9)õç[\Ã]= QßÃ\pn,ra7©ô35 õH¬mµ[ÁÏ¿¨îÂëqç¸ñïy>
°ã¨áP4ú¬Pi;Ò_çÂø^büZ°d!j©^/i¼CpÏb0üö¬FE´ôU$iÀâ´v+)ñ×"¢:Ë=M¦.Ur{ å=MÕ
|
|
2595
|
+
IÝFÆFÄÄãç©Tùýl=}<Azào.ûy2£xá3yhUuj½ù¹c-¦&í-tüßùo¹ÊËElßµÕx¬îfFeþ|)¬æ«Ô¬æ=}f[8mí ÝÁ¡Þ¼]"dÃ>PÅß?F^ßÁVä¬Õ¾F ¶»,L±>4"=}8º¦Á
ØØJ:عJ%ãJÙ/WuØ©*ã¥<^|M½©S3
<sd#ÖXæ<@ÍÃNÚÿõú^úÑ]þ¦ÀÿÓ³ÜÃBåç¥ð òS,çT à@ àÖd"r°¦öFUlëü9Æ
[,óÒ=}¦ùîùƪÌ(@zØ[«+ì=}æý
ûÔQ9iÅí)X&7Ø%µ²´Ã_ @´ê>ìÎÝc {À·ÖdzC /zïç %ZzßÔ,NØ/Sw,¥¬$µ²*¬^S=}ÆØ ã:iÈ#eEȬÍþ õ{É;^c÷Ô§ìgÁ°^ºø»´ömìéÆxÿ%3&.·ÉƱl·Ó=}-p,Cóó£l[dNÆT¥R³=M¾¹5Ùýb6Ý
r¸MéWB$Á/í1ðm¿ÁOñÔXLþ4¾kK½É¢PgsáäÜðSö¤ö9ÍKzotõ= ó}O,LàænÐ6®=M^5;{°fÚ['[Ö^Äýª¯Í´M"&¸´¥øM½&}þýç;ÇȬvyÀÆV= mFyÖpc½o(±Òk.Óv%ÌôpÚvÜ¢®Â5?I].íý¹2RúHåÑ':ô¦ T°éåXñë(xj¬3B¦_×'~H>¶ãðy©'+XÅÜËXùêñ·w¹Ï- ¨ rF}tÐrJlxËã¶&¹Ð?Ðî±lqýànïm.^Î\RðÐÄÉ?ÒÔ]hûîqç¯WH÷CJvÞFñîBÙ®Ô|Z@ä}#Püt'-F:¿&
¨8§F"¶Q+à-æU|ÎÍ£ùu+y£¶ý.Ø¢Z\:
|
|
2596
|
+
-ï*°s .ç$áås¦.
|
|
2597
|
+
Á89¦cRY4Uh©Ñj|:èÑô½9®MY<¥<ÝX®W·cm#ôU
»UDaI ²ùlZùqä¨RͳΠ'SA¹g(ò©bÕÿKáFÒm¸\Å?˼â®E7g6ö3«úå6][éæLÁóöó]ct5Ëig×nò¦Ï ¦r·îêÆr= Ö´"6s´×QÙÇøñúõ^mÄDÏ)ûÈåRªÚFÅágéôIQ¨ÃæKÄ_¥Ì®ð¾=}y4äò-I¿= 9Õß»BrºÈùÁ=}ýôQ÷ÃKì|Õ0ó+öËÔq\@ªÕ§brZ"/Ob Xð iðÝQ53ï Ú>Úm¶= Ôpî<S e¨ö}ªJ=MEÖü|£gUáfÙY¤"kï|¯V{ôeøÃ~gøæhKw=}®G>Öâ±þZç7Ûй_õ'@bS(õzáh)f[9廊mH¦a^,Çxs®35ðúÃàí%*J6ÎdÆ2í<e<KìXãX<X©ö#®
|
|
2598
|
+
\.«Ï<ÕÅ<SZ.3ç½6.ÃV®YYrtÊtúOêóð?H}ÿ[³´u>µ8[¶iä7Åï^¸iO¯°nزHõÒè·KÕ8øºB2RF;*gÚ(sW+ÿÒ(×½1ú9ý4W)¯_+g(¯ZÒe]yóÔAL÷XT«eEí±>ËxqÖ5¾Ü±¼Õt
£j¸öììYÒM©õþov
Ð7¹ù^«Pâ·Ò鸬Vó±~ jî]pz0%d¯À!Hù2 ½n2åŲhþ"Ò¬SÄ÷ð¿4sÑyo&Zñå"/ú²oϤòÍ;Hû+-ÊùnÎq1D»2c½þÆÜ H[lc»¯q¿Û²_±ù%¼²=
|
|
2599
|
+
ýNóÈÒÄL¹"³óÈùà#Ú3¤íÁÄ-ï »5I{ºÙ CEj×B+Èo)U<ÉÀÇrb-9üÀKzhÿ~-§¼úg(½@¢n>ýàm3îýÑâÞGæzæhÞðV§ïT FÂaÐ<^$¯U¦AÐX<)íÚØTTµñR>NsFÛé8*F>1¦ý?]3_ÁùÝv?õÅhØL£9aö"H/復!Ì>ï§Ú¥(Ò(kÀI|L¶Á÷Óð
KÑìJLÒ&¦®ÑIí(åz¢aÑÆù,#L0Þì2ÞÁvÐZ5/öãË-DÖð/o'8¤
G=M¬gMî8}
|
|
2600
|
+
¢ï|é-Bü¡×s]1û©ìû~еC¶/·!캧w_àV DG%Àª"Aî,düª@¸_sQ,æÝ¬¼¼E£9dýcðE@$WcÐfHêCcHB¦ÆP8¦áÉÏ<}mP]H§{Þ
|
|
2601
|
+
ýc!éb%æ§J= *äÜs= o})ãIj48IQXd©îg´Ø³Â¤ {EJHÑs«ãT§Ý´CE§â®¶_çí<ÛXfå,ªÈÚîNg3.<fXpá±sÌj{îÑߺuMçî.ïf®ÚF.Ý6®ùÍ<=MúX®ÊëÌjEgÅpÅfÅeÿ¯ÀIóýÆA³¹NH¯
|
|
2602
|
+
'µ wÅj;íDCºCDV3EZE=}ËiÌ O½Ë0iÕ;jÛ<±¶^ùL=MKùK9oÕ .ÃïøOòÀOUò¬ã¨~â[ñpA^ܾ¾PÞ°Áßf¸¹C?6lûÓïAx¬PÁaâ)áG¢ð_ªp÷Em3pÈFûnXºcÖÖjÎýHLú¾}^ó¹ÅÎ÷Ën³&ÒB:îÅÉ3ùÂQóyv¢¸ùÎ!ËÓ°¥~æ~vÎ
_õMxÊ䮨
}º¸õ69ûÂÝ¡Uö»ªÖÓ^%1LÖZ¦-
|
|
2603
|
+
Ú·%«.Ò+®gùÉG¸¶¡Åüoëø5Öá-vºê~Tý
ÝO^'½R¹ÑI3îÂW
|
|
2604
|
+
ç¯lWöppäI:CQýU}lSótC÷!=}È^s½2WÁÍð@ÿ.ýéE×Gù<cKñ¤µ#ÉdT¤#¦óG=}ûPªþ:k_G°ÂRí3±¿ölºÌS»l%)µxPÞ.¨SÀÀ+p¯ÅtØY]þÞªÎÏųm¨û¹3Î{qÞÆMmÀEyîÄIG¯ã~ùõ¯Ò¡´pCÃ^*å
|
|
2605
|
+
fÚãW³åâÍôÑçÚ'¹½-Çú hrN¨ÆÒ[åNz±Ñ§.ÃÏ'êcU (-÷Xf»ê¯3ï]a:·oòÇ ÒLÅX¼ÇÉKNrwÂñ©ÈEúÿ*½µÊÞG§»ô6}ݽjÁwóò«é^ehZQ¯IZ\³Ò×
s|ªü¬z+:àÅR¿fWôâÿ± æ/TGù¥f#C°gAÉNÆ/jÉpY?ÏDdzõ´7ipbrMËGfZ½öl÷Õò'x¡:¾5Ö£üH Å=}Æl=}Ûë[aÓÂSuáªÎèJ¦^:xÆ©#Ezrô=}Û*À{oü+f?»^ÒOÒÕá¾£nf$Æ.à#<_(n-æãcpÑH"×-ãÐ>¡÷CÁTö¡ãB}2¯âËÃR,ô[¯å§ºÑèV.õÙQ
|
|
2606
|
+
ö$¾º¨7±³PGRòLÇ &s¼(KÔÆATÌê»®÷Þ¹(-¸¥UXV*UäzDæÞð[Da¯4+%/{íU£@ú+Zìaà¬Ù¸ý>îca#Õ»¯37%Hj~¨Ãªe½Ó8½[LaEÞIZíUdËAþDOcÜÿ,¹Ø"ÞÏà#KñØ*¹ËPòÓy£ý÷
|
|
2607
|
+
zàù(îݬQHå8÷h3Øæ¹ v¸ÕIQTù<¯ÒìQýé"CõLÑÀEÖmÕb#KVÕ¦ÙUaã&§Ð¬M¶}ÖeÆä.¯SЩ]6]Õgö'\ï ɱC<<qÓê)}½±Sÿ¦Ûø%§3}Ðf÷5ÛâÆ«;²
Xv¦¾æ³®Ó3]°Ý÷#{z\âî3÷>bTñ+ÃÜps ¥YëÝQAî;÷[»½/NǬÖO,\ñMã7äõ/ÉHóç+ݯzõ C"ð²7 #£#q;¨a"ñÅ\0 ³£Ðø[(ÑiaèÊ*bÄ:,ÃSáH2,¡R¼Mã=}RØKcï:9Tæ¥Àþ\$Bc°[$ªê0L92ªÞkc]H4÷o¦H¢
|
|
2608
|
+
c^B,^«ã0=}¦´po-£·PôÖ·äY7éBç¾=}´¾³ã±<Â"YæÔsàÈ"¹%5têV%¤x%ütÝ¿J°|À= d³
|
|
2609
|
+
ýc©Ã´¸DvbÈädE6H±Óq©¬ýj¬_ÅdçËjÌëpb¥ruß2ÓKµøüĤ®Ä^<§¾èñm¯ä<®üÅ<ÛX{t[d\-ØîY,ÖèÃYô?GYäYj3Xö~°E¸ÿix¨{6gàs®OYîôÜðÈê¹
|
|
2610
|
+
Wu%ÊB®â2u¾R®ê*®ÔJ.÷¿<ßX<üÌÈÊðÈùàñÆÚ±h3çÒ®*5«JߪwKg¾êÄV®0µûJJ38ÉètËDÉüwésÊrÆkÅnÅiÅuÅ=MýMΧö =M:Óß
ÆïO
-gåÉÁ
!õìå=MB+ßE
|
|
2611
|
+
»¾ì÷7fÊi&ø·D=M4iD9j~ý±äþL©QþK1]X(¢' Q¢H*ÕûVËûÖÖûÖûÖ[o2ÙÄrNgWÇ[¹)ý¿ï|íNoúáöN^ê4ìïQ[÷öÞ7Cê6ÆèRIÌ~h¯E=MSWWXÐO×]ùª°@s,{KÝàöuÑÛÍÌ 3»= ƱþYÔBÚÐ%MÜÔ®d´×°Nz@½~ìqoöIZ±Z}ð¡äôX YÍ®"RßrìÇßäÍ2ÄÉÜÔÇT±ÇLE
ÁnÕ§!*»ð´R+Zû¶Æ[rKWúY
|
|
2612
|
+
e&nÔ(<ªÄehÛO©6Ödz.ïIÂÛ§êés-ZVrï;ßÁ´ajÖ9'3±êÆ óR3e9;R?¹«âIîÙÌ ÔÌ©{§y
;+êW= ôýý´û§ñ'Ñq<Ýçaâ&¸[T*~½ceüe\5fNW÷=}߯ìßï°5^î§þ?ñKJwdw?ÌQáËÏ"YA"õyØ\L!¥IüÌ·¡nµ<~tJàÖz)ÿ;uúŦUU;W¢¯QÁAöW¦Á®I"íqq)ÙVHX§ß=}ïö)%
NÐx=M®¾3Þ°X0 ax²>¢W»ãQaX2ýÙñXD.©Ú)Ð?jbÛt¼kkçð©LÛø¶¹4ª2ôO£êjìQϦZhW= |SbzÑ{'|FÍyOæ(¢' Ð" ¢ùÖûÝ|ÓûÖûÖ[ûÖ=M(
|
|
2613
|
+
(,ì*<ßc(<ÀMj÷\QÞ©C8hRÅ4®©ò<±
aYI:Ìè¤j¬ösA
³J)
?Âaäm~ùÄ.ªòtÍôGÄâ )fnTÆÃ×I&ìØáÝ7¶Ø{sè&W7[Ò>ùsè7n$ÛÐÓKfÝýQl=MXOÜêÜ ×ü·×]:à5+ð9dn¿0úc¹ÒB<#ÅhìfÑ\ÄWù}ý/½!<Y°^Ã&3úQ¤õ§q7R¢ËÅCYTÜæÂ·W®çFÐî2*GtÄcÆÔ&Ïîâä<ÜQþN¨Û5Oûå
¬9Ó¢ÞzË8¾Øºu§÷ðÚuVT3óæâ+ÓµÖqßµMiû8[×ï=M½DïøåýÛ1ü0ÏÛ73ñ´·=MãI_uÏ/@.ñÔP'F?|ßÃ8<cõXKtnðÏ$§Jn2¶ªÉ_ns,Ewï2<Ê{ï3Ö"¹sO²Q2!±·1Ù¢Ýýu¾;|²êåØ&çKò¼«g©×.?ò>ÊÓò#Bn^¡gû¸¿ÐsÒ_ó¬Lº¢ÛÃ~\5}Ã:¦á±gÍÔ|_ÐáCvV¿pÔ¬Ûé7n8åc;*zÿQráLµ¿´KÂèÖúEÑvB:'8åñ1Ðh\ï¥b¥$ú2iiBÍG9ÁG¥ÞbJϤTÂdR6éË6åÒF¾cªdNÊrl·îGnÆ á¥´ê7hѸêEʶòÌvf¾fY z5trÅw¥ÄUöæU,TÍ
Ý=}¯LIÑàøÎ±q.m<·k+ýÍXÖQêÛ½Þ=}¼~7ï£Ú:òãõP¡ÏB)¢'àX4$ ¢Ñ{«øÑyûÞÊÛûÖû¾Á¹*3]t±ÍpEôkKõøÍnóT%:ì{á§p³eUQ0ÁöÓh»/íúب¨ñAyÌkt«N.]¾WÑ|ÄofÓ^w¤&ÏUÀsèõ¦¨¬hy
dÒ·Q¢5æÜW r3b}myªÆ³9)íÈÓSÇÖYÑv6¸á\skFyòïàªöÌøÏ
íÆy·ª-ãxõ&Ó!ÖÞÓÅʧ=}Iïð²ùÓÎ]fU.4À±CÇ<èçG¼±°+µMN8ÙR±K¯üð»
|
|
2614
|
+
æo]ï½¼?Ì á7><±R¦Gvå~XåÄd¦æ_à§¶µ^Ü0Ê ZbÚ0ݰ*1ת¸tHfиâúgß¹òP¦ßgÕQ ´+!ÄÇ&Â×E°¢@®í-°PC§% eP^UAx½,lH>MÁDú§_V¬ÖOµ¥bXû3C¨ÀêQ2æfsD¢ÆH"ngBJººµñ¬QÁx,ï?å@N¨åLg]¿8gàX~õa=M1810oî®g}¾à£³)/iüd¶ÉD1OküD7°¬fRãÞFSÔF%ÝI¬hÄ2Lµ©ùlkCùD½eÝóyN½Â,zÆ
ð^£ªÂlz÷
ÒæT«¼~yì]µåDVÂÑù¼me.ï6S'µª|ú°k§>ÃÚ = >î¼;´oäÙ2e%Ü!IW*¨-I
|
|
2615
|
+
Øb7CÒ¨mNÂ=Mq1cªQÅ8µçå®Ná)&/jx;~êÑżÚyjq= 9£ç´±Á¬6ïÖ,Hgؼ-ö5L·w0ÚÙ"¥vEñEµÔOËûj¦råÙu<Ýze£wUtówUOðNÉÿÂ:<¿õ3rëÕÜ^tëZòë°LÎãi=}C9ZÀ>»½´ÈW0¼ñ= ä&n¿¢mCOÊ;ÞØ±Ñ/:YýäúNm({»èý¤À¤¾DyOᣤê0I³Ý´7Ä(´øk¦»¬ï
Ø(8ëLzJMYë=M4øµJ(¼Â%zjrµ\:ÌdØ~©é+?&ä!ªÍM¨Â;ÕûæÎû®qûÖûÖûV®¹´Ñ;zøÔ;ÉÞ¸¯¢?¥ØågæwSwÙÚüïæûªE.ðÆ ¼JàÔ!öý,ä/Þ°{°ñ¢\Z7A¦7*Åc¨sb$§xRäìô*÷(zî/¸_âäî1Ã(eøØTbÅ+16Å®H:déý]jÂ%q6½¨c´,Bµ-V&-¶SÈÓõ£yºôéÒÜÞé6÷ä¹·ém®qC·¥ÌñâÐ^îÂàf«·MîÑè»êÆl»_zû¨>Vøÿ³¦mç߸êAei§!í<6Ù.æ[DxðôO^h8ãÅ6·}fÕéMNvÙÔY
|
|
2616
|
+
ÞkÖÿ\RÇØqðÃM¯¡½]ü¾>¹F¬|Ñ °çÌ{>u^L¯KX»eÐÉÔÀmcá¿Oáå)¢^ë$Ï+ò}4DFX»Äbi²ÅEUiN´=McE h.β4üK ~òÁDëéú8ªrIÒväcÑ×ÖÂ;åÀÐo¥:ÉèRsQ¥åûªSw5]¿HÞrtwóJÑÆfí¯º¡õðäÆÇÓÌÁQ-õ¿ÄIWo³µvm£ºGTùj]öÇÙc³=M( b) PûìÖïÖûGûÖûÖûíU<Þëúy/¡ø'Òe-Ä®?R
æ= ü¡Îe"Kê&Öu+ìË?üB= ¡k#¬(ä¸0fü= ¡¿ö'º+Ìþ;ØDÅ= ß»¡/"¾Yï'ÂìWîoü?ÂùBa4Ñ[Æö©åiä§ÉdâB{±Y§¨¶wüIådÒòqo5q˦8g@V1{¨qÍd÷nw±ÒǸùgU= 49L,ýCåºQQ
²[u½A~ì=}SkLxDÂL5½¶«cKådΣÝiøBâVq§hÓkÕgûKz7±.ª5§¼¨øôçå3³sÂø÷f¼\KÞ_O²0eOªº·dóëÂ5qÊHíßÞÿ0þ4[ÌÿM±Ö®x5ª¯©ñ¶ÞxY?¨}¶Áx©>Yþ^LÊûF©=MÛǨ-ÓûS±ïZú2Û_]7ÉͲÑÖõNû§Oä¶ðÒziËMͧ-ÓiV÷vøfû'¸½Ñ«õø=}Û/=M±]ÑÇÏ=MÍ÷ÝD(> ã¦âP îÖûkþíÖûVúÆÖûÖûÖýÛ¸q×y+¼©*üwÙ}Ûîî ?u[÷&L,§|§èGkØótN @þl~pýä_[á-ê¯L1¿ýtl1û]ÊñÓúÎvþCXSÛ_¹)ßÓSöÐñR;ï£g>Z¶¬ã¶´ªSÍe*Ìs£½]èÄ/{QÛîìËê§y¦Ñb"®yL
I[3pïìmÚøËAi4]Û_¡®½½fsíÁ©eP%u]}(ýjFO9
ùgíS¯rüS4ÓRiÝeK*?²ý·ôù¡öÀQhQr¬þÅi²o³LÝ{Àdª÷ô®©6óÃço¬u¡Y½c.´jËqé2:ò1lBY1HA¶L²³yZ½<µkV1]~nBqUôÙÚ©ÂTúÉfOxM:¦°Ö1°l9nï¸^19úshZ
|
|
2617
|
+
ìâ<«ÙÝ «È9,¶Î¢ñÅÕXFß!Ê)»AV[\N¨Ðé>xhgçA(®ÁÌDê_¼¥PBbõÎà-ìëØÂqÑQØx
|
|
2618
|
+
*vÿA
|
|
2619
|
+
G¨Ì¦Ôßç8/ÛWÂ0þ(xa"ÊÿÅ0KF£X5Y¸K½¿2DRtûÆ&ÍyºXÝ{;qoQ~u?Sã,qþ
¬{í°æ"½vèÖ¡DùÃ}äÊTì=M¦ô_>X»%9î7rzX^H(qïbPV],®fBöG:ÇÖçaæQ!²»³èU5Þè= 6êNbÕR?£6¼r¬H§éÕJõÔe]²NVâvèÖÛNÌ|ÿ+ÁÆ?#$á#5 = áûÖ=M·ûÓ=}^ÒÖûÖû±ÒæÍ7zS¾vÅ!$-áÚáÄ9.ääl[¼þÝgC8åÙñ$Ȭ
påXKnråduFÄ*¢]#Ù×SÙ^Vk0Ù>Û¢òbìÊ72ÎïxfÓDîÍdÛ5v÷ZÅÍGáfÆLøì®¸M0ÅáÞD=MÀN¶úã
|
|
2620
|
+
êÝõÿ¯Å£¬9¸ñgØ8K/¿@èIg½áÓ\ß¾«SOò|©;®w:?oþ)ª;Dù1JÄÖLgèóÄBâÅêØ/rEÀdOÁ:LÔð çû8þÞë»bö?0Ø^5?>@A¡/>ñw¸Ùºo¸Ï´¡*ï(·®Êô+
|
|
2621
|
+
E~~5E~C& ×8éÝc~ ]£õ_gjå¿xSÛþ¡9Ã0ó|a¸oFdwqçj¦ézw
|
|
2622
|
+
¯N¢+\rög
|
|
2623
|
+
©!Ó;äPdFºÂWñ<ñz+¶¿Ôämåª ÌÙ£z¤MwK=M¸]â!u®ÌYä¡Sú}9ªÙ;cç«GIr~ÝÆõõ§ðbtfsÒ] J¡|7äñèæ¥×B¬ù2h«D÷Û¸ØV&¥xåÑTM¾E2[²äÏ7é,o¯TN°î&&¥N¹hÔÙQ§aNöhsÒÓ°mï«X?~ìîqÅÔ¼OcÄ}nx%¥KË(7vC.ÌÁ
=}ûÎöìÌ¡eMdë6ô«zqÿðîÆw=}¤ÆRÒ» ,ba Ó{èV¶ëÖ]ûÖ=MºûÖÍÛ§i£¸=}\(£ÙW(.ácøHÛÆ,ãI8/¿.çö(æ¯= ýhÎM9åyÃxÄT:~Q&ãÑù[.ÉÎxØ(¢@Ï$¥/4B=MÉP+eî6ásc4¡=}d¨q?R÷æãÄ)ܪ¿ Ðdf»ä¥¶i(ÛnÖì4ÔÇnr
|
|
2624
|
+
t´õÇAÒZ=M£Ð ,R¾ïD
õL¶öîÂðVmRØXN+Òÿ>ñ_!YI+ØÇÓ°Óç6IÜ8©äåõz¢öñŨ«LR|·ô*þl|i
öj\ív1UÛÎå:ÖÛÎãÍ{oh÷%¡fî?ødÙèBRWSÙ%»{Ü;Î=}ûø:ؽ¹ê@|¼êÉ2ä¶iPük2½Wr\ýÕ#G½Ìîý©ÀóNÖ»©]8)EHOû½Qå¶=M\ Åa«.æ0e?/(S¯Rð4·àX?Çú)ô÷½¨s
¾büT³_¼aøyî³cÇTÚÑÓZ¯+øßhìkHÖ}ì
LÍÏPõuÊ."90k³eðZGpFa;qA»Óu×1+ÙãDÛü¯¡I| ÑÃ>ÁA{">¡ t^éÇÌæláÈô\ô+öYÞÉKZ
~3J¦ÔùyV=}±¥)oÂõ'ÖhûÊo\Ôäxñïd¬së¼
ß0»%Á]K]«ÐQµÎ \G_êÑi>E9%²ó4øÞw±èª\{Τص2kä´yÇÀìÅN
¼É@rÈ¢)uDBt9Ñu:/U:ÈCÈîÑ:ôeË&q×T²Ç©M.g
»VºþúNð×¹.BÚ\vô
m¿Nâo8}ÅçÌë<oóç !¢-ðùèocz;1d°¸QiJæ.Va
|
|
2625
|
+
Õ)ÖFìÜ
ª¡I÷ï¸ÑJá¬ìOà¼;MØ¡ûbkdÍLñ¾åKÒg{å:Å>¾ùtcø-{æ4úsú®ü[?ÔgPü¾'LZÀÜö1ug6Z±=MäôîÜVÆnø¥·ÊNl:jGwl|âmÙ®¥[÷\x²¡ºÔGcò\ñX
|
|
2626
|
+
åªxOª2ÂØ/OÃOÞÞ$ÌÃÿõ¯Ã«×PæÉIÿ9½(Ñ?¸«àoþÊdOÌ1_W"?ÑW~uç?¾
Ê>ãÜ?÷&ÐÁJ IW#1L+ddF¨eaÞ<ìëܼ/(Òcij/àÉPrsâØ\<Äb®d@7?ác±L¯¡HæfgAÐOº ±ñú3ãõ8å²>:ë¼½Ü-©Ã= J¾CádkFLH¡©d^&FÒ= B©ì Dä³Y?°ìR4f&ÄpcJùriF´³nߤäSx?°¡¬FF!¹©QKP«g2ùd$Ó= R'ÕÀ<ÚE4¼kÍt>¯bþ±¯^508v b$C*ÛǨDZeÌøwlctQk8sâ±£Åì«KÅp9Y
[r®}Y:çJ¿|áã3µèÆvt5ò lUSËÙB}ãÍ:¾¼ÏcM
|
|
2627
|
+
7ÐèÏã]Á¥ÀÉØ¡QÒìM¤;mhwTvSúuíØÿAÚÆ¥Í,Í
ãVÖVÖ[¯ºûqú¡'_¾2ÿþiëNz[Û8Æ;ñ¾Üq/K_ÒÀ·-¿xWØ¿uyT #¯@ # @xçÕÍøÓûÖûÖûåûÖWJà¯ßeVì¯ÇçÈ9喝gS¤_¡A!ÔJ9àù±!n%Pj0è£r¡Øf'R@¥aê$ñl0§î$1H.Æù¦®-ù^ªcèN7bÕA,ì-¥dàÉ"¾®3¿G@nJd}~¨Ü0¤4³ªHv~dî1Ö\1ɸè¬3Kw쩤éDT=}Gá¸KËxêÒrÚ¯µÂ]K¶hæèRRÔ¼]MÃÉP´OÅb9RJ4áÉpf¥¤wR¬ÎCâØ\¬aLI6î¯Á´Y:îT(Î4®@$E.eð$Ó*eÒÃDÙBÙS²'H>®ÎHnÓ]ºiýÃÕM:çç¸øÿI¦Î;h3ã)LmûæLc¾å2Ȩ= XþLãXÖÆåC8oÕìØ9oa"F°UC!NEpUB±Úµ2ÉSA±ªÙ©ØeiD´jD?mÀR®¼>k¾rßEÓþ¶¢Ñ*ËVÅ0F¥¾ºt*zŲØBµ/s¹²¶æüº³æÛË«j¾nhGZK$9K¾¡h&Ï.P&VFGÛ
rFG~qQÕe6o·Ø»e»äõìïô+ÒÙB¶Þļ£cL\HÇoYN§¢/}4LøÀàba~Ö²jµ¼¸ÇdméÈh5·JȨ<ÃÂ5MÉqSاºþ»õTÅFgÁaòdãù:~õ°<Á
sYMÖ±zö>ö2kk;ۮͽÜ~ÃCÑ.ʾâÕ4ºÊg»Çg<F&Qp»¡wÏ-w8ûèhYfN~T²MUñÒ¤©ù#mý
BݩչcmíL¾Æë
S¹¥'EL,>A·¥)LrzÉõøêÒùv¾×B4ùèLcóçfæ6;¢7VÅûytûnµé^¾ÒS¿½.'=M[ZXÙâa=}'ŽHèpGãX þiuÅ«ô¦NlQD÷e| »NWÒnúÏÓ¶»ï1>²kÐ,ÿaòcpÚ·Uܬ:eäëÏ~*cPëgå\?9*'àX ¨íÖûÖÖûÖ}íÖûÖh¦Æoy³$²úEÐ"sOG0ë±hu2ÙôM±®Ë3K±XB¥aÙ1Z\ ¡e$u)(/4ðLyà×ç"v47²È5аfÉbF_5ͤ¨üZ1Õ¦¨¶JÂs1%j¨ÙÇ1S°8aÒ¸¯ä«jhujèú¢Ã¤nD,K@
¸djç¾rDËÅÞAEIÇ,e¢¬3=}
T}Lò97Rèûpnñȼ2S[JþwYëÊIPZ5\?ÃÀý.%÷~HÈwriwÕ²¥´ÄÍ»j¶tñÓŪF=Mtü»ËÂ)5?ÞËuwÓáÁHU×ÊIdm©â:¨U¼
|
|
2628
|
+
Ê2-uîhÿÕÕ¬YSfkÚzj]ñrÁ°®B=}OZ xß= §Ä®WÿÔÏÂÒyoµA¢;¬ÜÉzV#;;7Rð²¡Ç[-,@{CݤfîP²Î±g¬^8±·Qqk
g/3ikl8o»Øí¤Æ²¹µSOºIÒòlÍR³ßÊ¥f+{ÑêâÁ6ºÒPÕªµK&K9yIÖâj±ÓvÓÊ¢:;µúxßèf¹VÐÑÃĽç2[ÿZøTóîÕÝv\Óê{'#c.~@nPÆ£U9½Ï Déj_GÎ
n¾Ò£³êE|l2ÚØÿúeééN2×ÚpüñRÓ»BÕü|WÙ9ñçmÑåÆ?=Mµ;ia/Ý»¸P¤§±\ØïHõãr~tBO~jm2jR Ê·5ßÜLMÔì§Í½¯¼³ÌiqÚ¯%ßLÇÞì¯ÃÍ¿ød_¾_MÏiãïÆò!â §B!®.ð} í"¼?jÁ@§»&¹*:0D@³/$éXh\¨õcüv§üAäÇiAE¥xQd¨¬eã¬6ÇS¬Ù¸ãú=}ô½P§¦yyNbg¤Á(û§fÑLâ£1^_¬pWs4sÅH>i4}Djq~M«R´º/ÃÌê0C¥8¬¡8Ë'åøØPæÜýQÚüªq¬Kåd»åÙ
«óÒg¼óÄFX<À ê"@Ú»;'ùöíÖ^ûÖûÖûÖQ¾.¼Zó¡óÏZÐUÆãì.JX\ðÑß¾8ýû7§S©|îù|ý
¨rÈëÝ¥Ná^·[×|ª ³ä
>¯#õ]>ë&»±×çÅ>M_|¬³K»o*^«zÓÊï²-^ýn] ³FnÁ
|
|
2629
|
+
$,-#,)Ø\Oæ® ·"Ý)5]Dæ°Yåbrö/ Gcî--©^_Dû®°b7cÒß*©5eQaaº¢å®@_¡¸FxÛn¸ýÝFØ>ÒJÓäKE©÷hRoir-µ½CYÓy2ÔDëCi¡¿²)5ÒHεt¬ÀèA4{'JÒîp,ÇXd1ÖBge¶8ºô Tÿuñ¸vºØ}T³gÂî÷ÔùÂyr¾ûíÑ,ó9îWlÉÈôâä:ôp㣹¦ò,C/9}Sü
ßaëÁì¶åMµy~×Õ
|
|
2630
|
+
Zâò®
íëëc¶ä÷L¹¦å!pÈH&ãùÖû
ûÖË£
ûÖûÖûö»è=}çZ§%=}ºwþôÁ/§/#<n¸Ùô§¯G=}bÿöH·M|¼NI+ØËrÔ±ëÊîN±ÌkÍQNãÚÌxÒßëÆ+NÓ>Ú²G¼ç>FÝgø">a¯;]R¬>Ѻç²
>sÖ^qºç·Ç>Sß«ÓZÞo²^^¿]
^õiðúGsO¿¬®[ç¿ÎÛ½yýGíS¿~§-H8GÀgÊ ÉY"v6+x{Y~ã =M#ÊY!q&&97pnàÕµ!õ×'^20 r= õ!ÿ$ì9«Èx3oQKÕâïÁHst×¢}e vª³ýbÖvÌ8Ê(Uiq¾âÎrLøÆøhÑ|¨¶âSeûoªl4×ÂFðäjù´}3ÁÐÆsyí:ºUû
|
|
2631
|
+
òÖº>ãTFJîñÄxÎÜqS¯Æíí«Aü=}í½º*?U+þfP´ô0ÄW¬è8yøë8zvSýòÐÉÓÁÉF¦aã,ÁG8îT|xh׿ðË^ãñ¦7,Ï:~^RüøåPÏÁdk¬x¶=}©Ls{¾ÖìÙ}ärƬ
5ëZ¶¬mM-ûzwëDçRçz,Ö¬8 RùrÖEë±u6³EáNë
|
|
2632
|
+
£¶GMOxrýÐ,ÚÙì²½Åõwëä_¶¤q¥[bZÑAµÐCÃPU§ð^߰ŸÈÔPβ°ËÆÄÞpݹÚpÂÓÐÄÇ0ê7ªP°¤¼°Ê°ÖpÁpÙpͰÓ0ǿШð´0¢ÐÊðÖ¡¿)ß~+]_*Wß)e(âGí>"åh£@ Ï5ûÖtûÖ=MåÖûÖGïÖíÚMæÍûì¦Ïß:ÆRÔk6㼦K,¯*;¾µP\LØxéÐÃÚZ,Í:8ÒTUxþîpÝÓáÁÛr?ãO#ȯq&;¹^ýЯ¦ÐÙ¦«,³·9®ÎRx¨ùhßýp×Ác©ã¦ç-o;Bï9þ~R<Ü8ëp¾AÁàscû·Zxá°«È£Á´«ÀÛAÛ×¾¿áKðpOôÐ^â<H8³x#âWÇ´d®Tddl²µH±£èµ»M? |¸øq¬8y²Èt¦¨Lg¼ÌhÏbÄÉn¼ÏiÔ§¾ÍkìÀØæäÆdª6äüvô×/ñÛ]×C±Ï+QÕ;Ô'±ÅWñÃOÑÕ_À¦0µ§1]g0<Ũóô$]_©U¥Ymì@Î;6Ñ.Q
>ñ!q1ã2ryi|Íü¨å¨;(×äÂídñÍäÝd×=}
|
|
2633
|
+
Çúmß·¸×¯ Xh¤>ò¬gtHqXÑ$1²ºX¦¨[kT]oÌÙ= ÜhÝlÜÂùÏʪßnÞiTÞe,ßmLÛc<Ú˨/)Ï'däcB 13÷ÇäOïôçõ± 7¤kíªXºø¦{Â[ÂæB'âwÎtíoºSq+Cçß2Cß1E<(/ùhÔòîä9 ÂÎä)f¤é:ÂÔ'pʹeFi?åjuÊôó~Ê3ÇÅx Ñsò'JnâÄo0lJ%Ë'^¤8H/ÄpHQw<Å8ÑjÜÄfXÑb¼Ä$Qc>i¦hÂÛ5?I5e¬¶ó2L
©1p|D¬³em¢ELñ~ê9¶´ºaê2YC¿Ei*æ3mØL·|"De"qt:j?¹N¤\4g©°´©d^ÉLíÄǬ±YÒnëÙOämbDqrD1yÅÀ´±:òpzkw OC¢ì°Òlöê6ùE'¸¼±«mëBOÕÜ·om¼äeüåsäo"Dh¢EtâDbBEjÂEfEn$Bh0aD'ÍO/PÅbßeIJÛr;¿zµOfË|¦Ra HV4e!Öûÿ]ÓûÖûÖûÖûl $Ïúgýñ|yÙC¹áÝS¢wQ¿¯ñüáï^ç©í_Ì0·^tK2MKî»7ö®Ô4®¢1y«¹¹r¶Ô3[Ô½açùÒËl3öS¸CäêÅøÌêЩVç¤É~Ò
>LËã¿xdÒ
|
|
2634
|
+
éuNûÖÉ¢ÑôFÖÿÛ·M<e¬FðôoóäãYô1ÏÀKïùm÷d©ö¾]bí[n³Þkþmú *gÞ@ÑÔí*Og{jdÈÅh¢VêpezëtI§F-õEçÅf´Bf?g{³Ä¢]Mxb²]èfú·N'ñê-T,)®mÄdzóHeVÉ¿HÀ²_Å9pe
S:h{K¥wñËw#hè¼?#¥UìDdömaôÅì¢f|
Nàªå}& %˰Mªþ ©ñLíÿ¦KÝÈ-Ü2\$ô<eôݳ¸²&³= hé
=}WÇüæ~§¨ß(«æ]ãªà·H4«ËG^bîw\ɡ޸_XL iâ¸0Kªðüª³dªTë¢Ëµ'÷ϨyÓt0Õy-×î@Í6æIͯ>¶u:À
¾Q,ï¹ÍØYD£M1\â& ç=M0B ¹Gü*Óhäê^xǧQí!Ý9¬SAÁù>¡v³Hlz0«^µ¤ooâkµ44íkçnlüýº£¡øÍ0
åG}¦¸-µ8ªÏæ´?~ñ(Û<0£%Zqþù~¯^t>äPa 8$ = PûÖÓûÖýûÖûÖûÛkö;à¢Á£ØP_r¦@Ú8¦îhöê¬ÂÄT¿çRÕ<R¯Fp·S±ýWGQ*j÷ÇÁ»Y=}ÅÛSt\+~ïÁÞ
NR"¹RABÚ«èߤEakÙYO
|
|
2635
|
+
vr5·7Ï¥zjÎgÊ#Ó,WÁ+mõ{ùÃÒ½B}Õ+%-O·ÛQé >¯/î1s®RXïî¾dïÏ.Ë7V2kOµCÎ
|
|
2636
|
+
FCüx=M=}~%þ»#~Þä³o8Ú9V£= ñk<£SîM7þgÄfwîÂE_©º»»ã2ÿ¯=}ùöBàéfaî÷+Ân¸ÍBlÎ7ÅÄa,«ÕkPÂg2aò:I£$y¶î´c±\¥4xÓc±§µpÝÀ¬]5BþÊ2wYÌ-T0örØ63Ô)ôh]z6Ç!-7-Ùæ(g¬mø9êÓSdìq»©KÄ>znä¦ã6Ö¬ªÕCÀé¾7Ó<9ð)É·î,s£ÏKQ5ìºáÕc¾¨âhÿ;§?<&Áßù¿o#XÏ9è¤Ø@"¦¤H?ã5nq$§gÁSºDõ8&GçÒr\;ODÐaA±©ionAJBºìkGiFw
1¸í®Î</±J»ï¸ì"VLKðÇ®$´Ðb9s·s¡ÀJn}ÉÆøÜ¦÷]Õ4~ÌÈe#:#ºèÜþì(ç6¶®ãÓv&Pa7åÚQí*X[ïÞÞ¢!Ð- ûÖ´ÖûVûÖû<rûÖGÃO¶ÿíÙÑ)ã¨/ñ}ö/Ãülqïð£#E8è)¡x\:äY£i;ì#A>8êö^ãX[¬÷ãÉzQ¢§
CØV²¨ÃP¿ZºñâõæPxg®ÃL<Q[T¡ÕcGÒQBnÒ³PZ\¹Cư³X¥µJsZ]u³Æ³·Q½¡fSPÝ]3×åÓørS«-ÓÑT'|j'ïã[>ýúÞÙ ÒÅ+qz¨
BVèLë¹EØîzªqrOC}YoÍÀöjÆöÌDü5¥Ë-·ÍÅÝM5XؾåOVfVoøäÓÒmlÿìMäþùjê6XZ;ûª××½Ê[(س?â}Øm1Éaè»ØýÕ0Ã]ÚØ·û1\_êµ7 Y£\ä¹§Ù×(5ó®rø´9çx¼ÚG0²ïwnÑçä¿ÿÓÄ5¿ìYV[¼g}"×ÿ}äEN*Oñ5Æ®ÜêâËx}cSZ=MWhòØéÄ×V¢óPø7çåxS^«_= Ñ
|
|
2637
|
+
!ó?:¨¯QTânµÇ¼,ñäá3O9AåÕÏ9_-â©é;®îÜÎïÝâ/äÆäX3EA¿Qb´ãwv½¦gW~?îãaÏ ?8é[ï¿hÎe²O®ÏíÿÔO1¾ÕX+E¸Aaý\iZlEùVw*o3I>ì±´©Tè°BãíÙÒLS³
Yyè±Öp¾¿öüzÊà%wJæe±)µ8ÅäÖÍê¸%HC4ÊPYb¥%'u¼ÀjùiUehvçNo½!TðÊôækmÖÂu«áÕ´õf¬.FúZtïò¥µNkw Qík/ѽ¸e Ó¤!#ó-8ë°µ¦ßQÆà8ÁÔQ7æºÁâ²eÆ4Ù¸Bú¦@ú¬ËÇíìQG±%ÁM6ÒéHKæ
|
|
2638
|
+
{qÛøºÞ¾ö<1ÓA^ù¦ÿ÷~
«úG[Ê&ûeë>b'ÖX¯C=}û©ãn¼=M¬X7f¸ÛÓþ5(wüïÙñ×ì-ɯ(§Ðúà£Ë\)9O¦´Q³W»f#99=MëäK¼ÎCrü¿s"X8àÑ= Ìó"yL¨Ôá$$³ÓJ¤õ±A)Hãp¸3nÙX¿ndÐËL"d4iîq\X8íÆ¢Ö®x<Þ_®S|<¯á¤$æXGH1dLDqYM¹Û~é¬[½bkm*ãñd±Ý¯·ýpðoF1W«¸Zµ!ò¸´æ§Ã ÎjçoV#ÛE¹DfÒa6î£ÒµíYh¶°Gµëóą̊éîÃ.,KàìÞ Õç*ÌMÄlŨQ«BJÆc)!ój-LE9;'´3}®±*^÷uÊ~iJÓËX˺=M«Ø=}£ÿëzoÊ= = =}í×
|
|
2639
|
+
¹\Ä¡n-Ô¼äÅË1cÓF"/USÚÁ9-½6.+{ùpþê)µV,ÖÔSÃÀ½Dù.üö2³õé8éNvÓIÝ;ù}¢Ê:¢5¢>¦á!@,%!ÀÙ
ûÖÍ·ûÖÍùÖ=MûÖû#O%¿Iè¢X$(Æ0\7BQp8ÏùßIlrÐ(í51¼ãdyÕ= ´ÀÂÜ©42Q6¼X&åùc<ñ´1L?ái1)òÓDÖv¢r²¬I´Ä
ËD=}jrìÈ´~IôÕÅ ²ëQF¹è= ¯,B7
ØGëqÒ\ÚM«¼·<QóN§È\7ée¾÷©*~Îà°ØB£ªøÊè5E¼
|
|
2640
|
+
´¸d))3
Je¹ÏîJ¼¾Èâ®GJ-vöButÞɲ¿ÊæUéÊÖ|½¾
|
|
2641
|
+
9ÀùÍ¡ô
-´}T¾ÌiõmÖ¦XÀåBA|ÕÙÓu»!=}öÁ ¬.]ÚL<ÇëåçÚ¸¥
|
|
2642
|
+
QÞo/IA6
|
|
2643
|
+
3Õ}?M#¾Ô9¢!¼-1¾¨cfæ:Ù1ÅòæÎPé*ìm?¢ #3L£m)SÅuø¬}%=MQÚ¡Y&ºÓ¶Y]6äNÒàuà2Ç\kâyòÀåú_̰ÚeÛßUÿ7{Skè¦b;ùâø¶[ú¡MR$-ûQyò¾µô<×§Í#kGY°æ!§DgTVXÂÆ¤u§3é÷¼¸¦So6Y³BâÅ7/ÙÀêíÎêÂ;ëVØÑã½}ýfÀ'£>¬·äÂæ³ËÇ]yeïO
|
|
2644
|
+
Þñ¶íþ<Ôa¢/uر"E{axÿ·òø·¬8_B÷±Èo×_«PT !Ìu,äÃM°Ó÷#[P¨ð@,¢±.fP¶AÄ.¦P{F´wÁ~)Ê8Õ£è¦ÑI¼Ël*¨ü$Cùý:é÷;±¤§dÑ4¦JñLªF
|
|
2645
|
+
~T"qQ<z;c¿vLó®
îóxöFæ<¦æÔ«ÛÓ3Ý_¡¹Ö©äïldo@)áD^¾nbàK9ýÞ
r¸þ²â«»I¦ÇmJúÈ·æù·LmoßÝ ùÿì,$SY¹©¥l:ÒØßLÒtÒù»íÔGùdGÀÙK§ï¶Ù\»¾ë;¡\ÄÊÛ¸g= ^g¶Çqàð_%XßJlA<LDüÉ(¥ehi5SÂÕ8Ûåå¶pßÕ¤MÅÈlK¡R¤Ëë¸Ù,°þÏI·~%çuP%³jJ _{éQßJävt±ÀuíÊqõ8ÈÆÏÐ&¯óUüƶYÏÅdÓ®ÀqXÈãÍȾèSôUPÜ¡×úäçfêºXÁ©æì÷UòÐ¥c³{xKðêêúvÖÿ;Òûû¨ÓÇ[²r=}õñ¡³.ò[©[ü©¬çO¦ã!Þ*f¡¿½íÕ
ïÖùÖÖ=MûÖûÖZ^IÔjàXJãÙ;/ßsµ½¹gäÙ Onñ)æ¿°¤Ì$úá2´kÐÕDE96hLw²
|
|
2646
|
+
rü_Le«¤42rì°BÙThSýdºìLæèÀ,;å
¸Gc»,5ëéÙMkÆÑLyÒt¯±À<óDø Oç.Yìvèsw¾%"~ê3S~¡%g5p´vÀWh¡Ç]*ô«I±Bc6ª6IÒÊ2¹Ç´0wtcÄ2cjrfÅR=}´1Ër|5¦OÉðÊÉbÂ*ßËòÝkµ_^ËBÅêÎ6u>LucÖ:éF·Ëæù)
|
|
2647
|
+
(¯ÉóMËî¹PÜ'ô1ýÈ¡+-æZÀ~Åá,1mÏÒgg³Ò4möãM
|
|
2648
|
+
ß=MÏåÃÎ?l»_>sÅmÉVÖSðÛÀ£Ò¦.*©ZÈÁ«á>}<Þ
|
|
2649
|
+
2 Ëk
§NÎöC]~x xÊgëlÖ|ôgis¿ªD
=M^#F©;@?àï]&hÍU¿¦8ú9Bv
h¨1ïÏ9Q}ÿ¨Ø,Cäç:ÓÈQßè9³<¬ø¸/{mØî¤=MFLVæRsFþsÆ7»Ò¦ í7$¼ö4Ry þÿbB/( ±4B6Bå 0Ïmæ¬ÎXUºr~þUÇðì¼3ådíÐe+ÔLX³aß¶XéykâMÙQé¸=Mvdл·5[ûÍÕU¯ÍÑÐÕkµUwdøý¦EæVlëÓßIÖö¶ßô9·ëß=Mxð®£òü-Ócø.´ÐÒ×]G[q5@É#<<v= bgd[BNÄÆè±SS½¨Øäv}GÜS¼øTþ¹3î<qÆ@î¹wØPß+N²N|(Ç7ü×ÙÃK+|ÉåÍ;ØÑÿù9NGÞ[^v¸uØÃVï#é>Rc᯾©äeot\QíäÜ7éGÝrÂ7{áA¬Ýi¯ìO^¼ü=M£?ª£xY£v_Òáç7ýN&÷µ?yÎ<CÅ_û¿3ï¾Z26'~ ¶!hv$P{T°À;¡ü0$@~Ó¢ØU¨9¦a&Á^U¸ó7¢¹Ê3lfPî3b0_=}â%0ärb8SF´öÁK¥2:?ª(/¥ÁK7¦8ÊߥÃÞO<=}É$X4aðÎ(òßgð0<á?ã1Lþ1éñO±Ü*¨äÔ_²ÄMq¬¨£4ïÂü8móûöeÉSºÈQl=}ã8¢ú¸ÒF¶÷Oé©
skLÆËy<¼È¬
|
|
2650
|
+
ªò?çüA¾¤®Mk@=M"·=M2ÈÈm²d°¨ÎmBË2©}´äýi½¤}u2G7FóG9KëîuF¢4"ÇúB¥u5IT¨ÆKµÉHo
~:WóðSkay:ûÅSZ-âjóÑ2é= f&/¥9¼LíÓhFÂWR9GìÔD³Ùyô|ïÂx°ei6¹Óiß¾m¦@»²*p]§Fa.EYI²ë;ÙL7ÒËT·kBÜܱ§ÒP/ò\dرïxÓö·~!ÒW+SKÀÄÌ QÂ¥Úuèbë+I1Mú=MBîz4ÁvqdòÛsìiëÔJ«é}pâ¼ÛEü×JáÍʤÁ¥Å<Ùwª¡IõÅ{|¦úRJêøz{¦²:>´àÎ<Úf·vq%A5ìÈ= EÕ¯KYx©EÓvvAÔª6ÇJÎVw1Ûʺ-ïËÑÉrUÒUÞÈÑ{-EU¼{{kâËzôÿqëÚXÝÉÑw=}6}¨Ìç}]S
|
|
2651
|
+
QÉæ&,_TPóÏ!³Þ&dÖVɱå!X,TBÖÝ)Om/BÈ©C[»iöìµ°JfºÒË¥6äãzvÔRoÊ5ç¨vVúfôÞVnëÔq<õæÿû ]ð®¬|[3ûQÓ£u§[(t'G}j½hGRßN¤çÛxÍúep7gç³Ò»
|
|
2652
|
+
ýÅCYÞ§Pñyf/^3ùηt=M~Î
r[Ù¯W78ñ=McAǯióQÝôï£|ùR ÐK#<V:@Õ «Ó&IÚVèM³aª&\¨¶-jPdé0d¦ ÞQìÓ?}Vì{ñ1úü¤æª1O8ÅîHwÍféÌ:åoÛê÷¿ K! H8ûn~¬Í=MVû{ûÖûÖûÎûÖ=MY<1b1ÕÚ«¸R}äÑ=MBD7e4H»mìúüö0IÆâlQcªùiìÓoÜ.)µj8rkâÖ~2ï²ùMÁ5)}Þhx´B¿´OÕÅdhÉTgj¿$IkÏjYuê·,!9ôµñÒϬÑ
l´º¬/ÿø\7´sþ¼l½G²¼÷\N¯g¡Ë°¢5´ ÏÀñ%]²5¬ÙÁ/%»$E*IY{é½j~íw]y©Æ2ëoE~Ϫx|e&J-pq¡ªst4ÙÉÂo5EÜjäõ4ÀÆè U%ÅÈésm¦¿b~-îØ&}#-_ã£-7øcãFaëÜbzfö÷òÉß¶zÕä³Õ¤±ðäÃa=}
|
|
2653
|
+
8õogÓZ*G ~÷»®C]+* rwoÑÞÌ\hðÓʾ¡´9PWÕÖ¡åÝ-T¿ßý&¾~VÐÓ¡¶.CÜfõTRËDZjSè:iØÄýgC¢íä|FtW1=MT3ÝÖ¹¾Wѽ©6Sª<vvQsÜ«¹[³íýææì
|
|
2654
|
+
÷&+ÇÓx|ñâ.6oÐÀüê)+î766Ì$SzyvöjØÍµåÌ(Ìì\eäê¥OQ;júØúâfÉ1VÖM×A<ÐQÞ[5bV5ÑÃÇý[§6ù)Äù ëî¿~'=}+YhÉ= õïaÕÙ.FXØåa«£6.GëXÙsã©Ç§³ó½¬ùD¼³w½mNêñݲ«=}}»7ª3NÂï}4uÛÉ¿þmòæÔSÄ»KüD>Þ»ó/·¢>ÎfC/÷'ØÒàã/çÏøíãV·àÒ"s)Ið¦= Ù=M"yï+8ÿ)ÜRY¶õëÒª~rÜ·àZOÏ®i
ØâgÙ¸/c)?º¸Tÿ·°±ëgÇ¿^"¢¿s%ÍGüûïñ¹úÃÛý[_Em!
-ðÍ § Sæ%(Í-Ðh ¼¯#²%é?)Ò˰¼m¢Ì;4DØPè@òaÚ-ý1¾0K˧p+ñj¨]»bXo¥BdºZ¬^¸ÚÅâL1 ÐP¹¶¦ßGì
|
|
2655
|
+
{(dH¿_bz1ö¨z¤{BîdHJb´~9ÂlL=}
ëH{§gùÓTêÑ]qîþªg´k8åXySæ¡QoѬ9Ç,1ë X Ð1àpÔÓÛÖîÓûÖûÖûÖûéWsIðtDÈ_];9Òko;*ó\«¡U>#=Mê;Ð×U´¡K,tZ@3#;29Éyàh"¬LÊ
dtCýV;iñè¼fLmѸ¨6WÑÏ©)&¹øYÿ¤Ï©×lxVS?ÜÊwPÓË͹üÃí}üqS¥?» ¼ðâ¡6rçLtÈrw+7GyhÛá¢öb×w6¶ÅÐi·Å= Kr?Kz Öíê¸ëvÐÒZ½v;ªûøÿäæþ¡VìÓÑ×åWlÃ[m}j¶ÑGùP[6ùùÔÿîÀ[êÔ³SÛ£[~'ë[Èõæa¶±.nLð°#'[²óiÖ ³m5½´áHG=}·[ñ=}R¡³Ô½¬éBuðåÀjNÞÕñÔ«Kë}䝨xàeâßN
|
|
2656
|
+
ÓEF
EWUúÙyRêí
¼§ýÔÝåWè@uðʧ)C\z!/Oð°^»·\>OeêQÕïÁbOÙióëO~¾
æ})?ûRàg®¯t[|Ý?-òIkSÁ¾?Å·¿sìø§ÓÞóS ¬%#L®%v/ÐÇs | cK#¨g#0àGàÌ<a²¢ÔN7ë@öÁa&O(0@=}_%ù±NäO¨°6Âc0k¥ØRUd¢A¬b´>ÂP¥¹4.ÓиU=Mâ:9ë²P;§yKìüÏæ¬ðí6ÁnÑ(T¬°Ëo¤¯óB<þ8ò¹(Õ¿gH¸Xê£Üq§ÂtÊ4EiûH;¦gÉÙHê¿]q"¿Â¼j;ÃÖIæSYfûZQþ«ñ¬ÇËô\6£8¾ÿQÆ
«ý5ÇrÉXK»äõOn¹æ® ¼lO´j,âÚ@üÌ ÚöpHäcŽðR+]s(MDð[FðÅÊ= «"Uf*H«%ì%r~7aw±ñ±:¢h¡:B¯Zªì?MrÉhºB[¨TD²\Íär£¤Hj|ÉAñijäñ2}·jûGñ¦ä«¯2Uóè<õëX$¹õ
þ°qgél{L¯¬ºlRsJ\Kİ[ÆpÒªbÇÖ*ó§I»Ï§â³«*~I²ÊDé¿a5}µïíu¾,pY_s
ëFµÉÇuZ\qIwEgçnµåUzUðPôØSqJè'×U&ñè·ÎH{,eIJ4?£ eu0eñûÖ}kîlÖûÖûÖûÖëëõTÔ÷ØU|Ãú"Ó[Tê~ôxrC,½n9î·ðé=MÌØ×nIZî:½gþñeGc£Ù-:ð×ÊáÖ&k¦:Ì¿Ð]ÐÉáÒß&ór»,LòlSñº¬éñEF¸ÈKFIþ¸¼©Q@Ãeñ²6W«^LRÒø\ñb e=M;6þNÑñêøòUÕ õçú»bË>ÒYóFég;_¾ãèÌ.êXܼy§h?§ú³=}ÚÌ8ð
|
|
2657
|
+
-§=}6æ¹·ù
I·®k·fNÕÚdFØÄ}ÏëÞKNC~ÛQ\2ÇX~ôÃ×±ßÎçÅî>}gÄ|ÑÛ'\n^(|lY|öÇu¿ÙÍ,XãZ¿Dg
|
|
2658
|
+
üyñü |y"·*8'0ß{= ôÑ!96'4ù9p Tà=}E/ɰWÄDAùthü¶AO¥<¹2Ruhë#ÝA_~§¯N¿v°ÓÐbea:¢=M=d{'+¼¹¢[$í®(~ÿ4ÔO2kr]£qiAmRÞ¶i¥Á²iÓD÷kÒ?µTÜE¹~V¶eîÂ*ÍÒÂmeª1£5³HÆÏul[ĸ}QçÀX (µ= qWûÖ;ÿÖûÖûÖûª®q%´t"+ÄÊLv0øûj¡Ús$Î4XÜwÀE¡Ìï%n6½xD.±ù
dU0ù
|
|
2659
|
+
ª´ NÒÔhá%B+רDXIòÎ赯±zl©áEN5´hwuâ´D×®EÂm±HØbÂù>©î7Dæ^±xc}¹¹
4·ùrkµNSË£ìðARMèô|C³ ìÇëR¿ë,MsC±b´*ûjJ$42º*;[JT8ʦb×U*q/H,ßÌ0Ùâ *¿3ÈXytn4wé{k
¸ÆÛ½jÞaJ}ÇÊ|Á×jáJCµQuVåöؼnaHuT2):ÉzÄ Í±¼f¥:V\_ÆÆæÊW:£ó1²
|
|
2660
|
+
éÁ´îªZZ¾Á³Ê£îÑaZ=MÇ
|
|
2661
|
+
DyÁÓ·nÓZ÷ø¿¾fWs9üíðÈÜáþ&&ù<£A½-/UH^ãJ£S,2½WÈP²Vø2ãJ³mÒµWIÿàÄÁÂR§¸$ól5FâN³l*üSiá}4«ÃéLÆÐjyÊlÕ¸ÿæÂ_«GxLqÓå³C6]ÏyäQ ÇeªV³óûäMóÇÂífV|»U½,ÕqÆùL{§mÁsVÍûLÏíϤ.9R[´KðÔª£ÿôÁ£ðÍ._ýá{ðÇc¹s. [=M¯ã¼$Nf·Ü¥|~tyðèÅ©ÏÃë²aNõFÛüò«k´ÃNCÏÚäR{FÆgt>WtH=MQǶçwùÃk¯I]]hWëc|Q·çîs>¯ä=M±×g¹^ò(ô±{÷ÇÉsÃÕoþ^ f½µïÚ}^oôÜ3µïé¿^#$4k3_àðò!Y%<°"ºU/ôMÀÐ ×s#zM-ØEÀé± Ý·#Ò^.8Iv´°"ib.YtHDå°ª-bÚ:Akû¤¼=}th²yAv¦´ÿ1rh$£ )5eñûÖ=MZûVÞ±]xûÖûÖû\~5ù°ùÕéN³ßc¢~3|dÐ)áèb¢eaAC?áúf¢=}%ù&(n®3ºKmFÛk0n*ÝAÀñ7DÍþ³üÍD±{ÌÄÄ-餿EoÄDÊ¥jWé}cEGkºL´ì}OÙØwö9iÁ{5eÓ75þw¬vQC×éìvwl«ªq)e¯ª&}4°B÷$å«4çwKFtD®KØÊØÏøóº|S@«FgAí¶:KU·÷D
|
|
2662
|
+
ÔòýcÈÆòí¢%ºö:ö\ÁºF¿ó¦þTì7¦a%,ê:NöR\˳´AgcÑN¦#-5æ9êîV4yèÚõAã-ÓLøò%ëïzêkëâ¶_Jxþ³¶-ßy2ëËMLóÚxj,Ô;©ÓL7¶
»MÇ{¿ÑÌßé ÃS®ûÿ´ôQgçÕÜ®¼Å<-ÊYZçõß=}?V´h:¸VáÑ®ï*çM®S'R榾uoFß Ñß]EþMÙpéScòßhSïÀn¾r\÷flßðÓÇ.ï©ã¾ÿîîÿ:áà¡"
þ(ìXî¡fÙ"ª&ÞÉ8H"Ë)\½(´<õNPϰàk3"ù'ÊN+ÓQðoÀûà k¡Ad&]< |Ä»±Ú¿d±ÂÙB?7üsAÒÅv¬Ë&±ÓÍBãÚfÊ,¨\TZRÄ¢èÅu±ö{C>¨¬Y5RL.p= $!0íÖûοûíÖûÖûÖ=MÚ§p/§34«Iø¶x°Y½.aâ¢
$gÊ)²W4èö¢£}%±ÝÀú@áØQ¢ó$6(ÒÌ6ôûJÕPÄ
áÉÛ¢{ï%o_*~6Ü.G6cG±:éî²%D#kjºv¶ÍK)ÿ|Ù£¶,Ò^²äãD·æk¦î´y<÷h³D_@ùrrÒ=}iû²wE½j¾¦vT®ÊX=}oq@¥~fe¨üªFe4»ëHâusôÎϸýbÏÃBÉrôÃ8UtѼe䥪¬Ë4ÅWK:=Mq^Ê4ÎK&\(ÅârÍ0vsRºF}mØ4º'9T{¦5òôJÅityÛÖf3mÖºPýT»ÌÆmè1º3T¥NLôÔ|Å×i<.lÏzýõ|ÊInÓ»F(cÓ(¦ÍQ,12:
|
|
2663
|
+
ÆTìë´ó°Ê°Áiã䪦cU-::ÕR44ÄÁOãa¦éÃ,G9¶ìRL}xÔêP³Nc¿c¦Ç,µO9ÒþRdØòÐÃÁocåp¶±LzfDÔ4o¸áR_§Å!ë;LÃëyòwÓÍÉöôÛÅm7ë+
ðû°ÅHë ©¶¢SM+7xâÍ(VM×y+gM{ïx}Ö´Þ9èÒÅ'kæ?¶A<#â[¶f<´äSÕCzg²|®%=}y«[ÒµÉ
|
|
2664
|
+
hsç±ÐÑCKç.®{ý=}ͧ9È\ú±²,çÆ.Ûì±Íçª}®æ'=}±oXÖ¼TÚ
|
|
2665
|
+
ûQ±CkçÑ®ÿ<¯XZ§Ü¯ 6óRÞÇeRïÅT¾²¹]Ë5Ⱦ+Å]¹Jõ¼ÏiúôóÆÕ
ç÷ý³îºl8YPâ¼GtoÞù¾Z+]ý·¦ÎìøyÖóÓßqïîó!,&è!+@&ãùÖûûÖ=M{ÖûÖûÖCàª!])Pu ?"ô6@ÿ¿ bXþ§<¸6óñRÞCrçt®M9<ýÒYR\H¸tìa9ç몮õ=}ù
|
|
2666
|
+
ZîUÔûöQÞÓCoç ÏñÿѨÿgYv¬D¹
|
|
2667
|
+
¸XëÞÃrçåu®|;<³×}®ò'<Ó®Z~½Ùõ¶C#gñÇ®àKçÚ®<±YT*E/OìB¨I¼¯G\nLjAkK¤éLdèAdìK¤KD$OFOEÜLO|ÏB<ÌIÌÈG¬LA´KD=MDF< Ml2Áá ApéhXÁAî,ô<áM4òN3NÌ2Ï71Ö0Ê8'%[FdYMì^OÄÚBÌÚAÞK̾))Qÿ+c^+¿Þ+-(§£IbKcãK¯BK%H3"E{rerJ§óJSI
ÓIãI'Iÿ+I9ªIkIãëI;JI÷ÊI_I
|
|
2668
|
+
KÙ:KµºKí{K]ûK£[KÚKóKÓ½R׿ÿ'P^j9TîçmóþL¿_o©×hÙtÙÞrùÔv9ÙqÜuéÚsÛgY= 9dÉb©fÙ~9yI}kyoÉh)lyrÉva¹eéãv:wþ§P§QBfPÆdV2fWåR²äSGTGUæÄP¢ÅQÚÇW>RJSVTU|!CoQi9C%
¾8é9:;8;;yº;=M{9«ûÜ.fÄNfÍ·QÕÏÑw¬g¬p£¬tcÂC¬ÃάÁ3s¬Eó-Ó¬½+¬c«|<x~ÙÍWv×:Ã8;M9/:ù®8Q®;?o:î8Kï;#N9ÕÎ:8ÿ9g:>×çf¢æ½7æ¼÷fÝfì¯æ ï^»±Ç×%Q= n!= Q0ÌûÖýnûÖ=MûÖûÖûÞëçSÒSl_ aGáqÁ¬,ÓÖ±¬pqñ¼Ñ¬³¬Ú·)i¬é¬I¬Ñ ¬(9CdVÃ.NÃe~ÃAC~Qp)IÃy
CEÃ5wUCmÃy{}Ç¡qűQÇ©ÄÔÌÜÄ T=Mì|$<\</ÛC¬Rìö¬Á¬%3¬=}³¼ªÿ¹º$¹d¼ä¹DyÄzÄ{
|
|
2669
|
+
^¶{ w;I÷:©ö;QWZÿ6V.ôNë>ïÛï9/XAÃô1CQïâ¼T¿VF½Uz½W}·[wüãUÃû-ÃMÞýÇ*/î3ìHâòxúöÝWO¿¬ø¬c½Û1 ÇÑ·q¯Ï÷*Bn&5£«?Aä¸pBq8ÑAÌH4~¼©@f2/B«vqåÛÂ,YÆ6{ªCZæ3Ï«Æ)åÍdÂ2XÉè±|LmAÂÅ2jM~Ç1õò©ý e²¬hF\ÓH¹uLëF¢0-ª=MÙdÄ\Â~ÑK¿¨pà+ªÕ¥ä1QÉÈ÷JF²¶0MkªõÅäûòByñÞ¼xu~\Ë@2w2ÕK«)uäñÊU±Î¦Èws¬ÎEö6oÝBñС8úðÿWæîûäWWíeÉ6îørEÆÖ6ú¨£åõîñþ0ÁZ©8½]w7±ÁËèùm4Nª0
ª*ÝdÅþÂ?ýu_qÎßS-0¥mµèRpÄ:D/|cd°ÁÃ×'ãäÙ¤=}Iæ¯2]gÛ»QÂøx±¼(_þS[WaÌ»Hæl2ÍF4±Ê=MüT_}¹ÚÃy³×cÓåäYÿ|½GÞ[P¬|¹7ªx«ä=}+6Û§EBåréROvÙ×KJ1ÕøÍç:ÍØZ%2/PÖ½! &ûÖ×ïÖûÖûÖûÖÑÖQÕ1³éf®ßT ×i3îY»Til»÷FmÁòDS
¡ÿOTwfNÒO«cEöØôÅêRÝüøÄy|:ÍÔ:éÛúÙpóÍ6v³Ü°¬Ú#´÷F§ðÃÙ
|
|
2670
|
+
³ÿ½ÞðJÏBýV§ìûÕÎù_¹
|
|
2671
|
+
ÜiÛk;ì:ÜÕçÏÑÙ¿(ÁÜÎ0¹/s}ÿ\¸{TîYm½B~XÂF¼gýW~_ÆE¬bçý¾^~ªðÃhÀøI=MPûe7ýºCÜöÞª¯ï9«sȳä1þôjW'oÆËÓ¬ûOã9g0|ÆùåZ
|
|
2672
|
+
ÒlE¤ïÎìùà=}º
|
|
2673
|
+
¼@¯Ë«Q¼3\ÃÑNé(®¤öÚP#øãýa¿ÌDºÕ÷u9ëq/VÔ>·ZôÝÂ]«ÙêsbKºâ=MAU9îvÂIâá±è±Qí8ï.BZê}Ç:xä)¨ö¢³zAg¨9´ÁMyçY¨î®rÔH«Y= HäGÄ,í9ä<Ö¡D>«×ÁLm ãv° lfÜcªp³Ö,JKùë%ÂÙCñ·TÃ\-è@FѸí<2±üÌA¨7¿èiQÊð°$syäZ¬«¤²àÚ'¦÷°Ïéd>ªq¾ºTÂU}ëpæQL=}ûøëqî¹@BiÆ4à\êóÜèÜëgá×@KÙèo1jr¶jtÃVlzó¾îÇW8äpfP¦lJS¸í|6иÅÌ5yïfVÓ=}/øïa.´¼DÇóñ¿"·Øì5Î$0h0áßã?Ý¿»¿äDG_©¤ÿhÄ_h;I±vn~>á;ò=Móýå¯7¯Éý#{} ·Zë´ÎÆNÏRǽûV«A¹³ìÖûÖyíû¼9g:&@*!e*$£vËbáª;Vpc,ÈåEUV!4yø Ô#Û%î%i[óX¢î¾Ù@àÀG!þ¨@ÝIÐNZ= Ýóá¤àYá /Vâ ÷6XH\Øü&ð8ûwâ6õ2@ý Êù.=M+ç-n¢ò|øM/<ýNÌSY¬Ý)z¿¥CoáÎã± ÐÁïXÙ£!õÜd?¯xðì
|
|
2674
|
+
Ái;ªäÀ%n= =M+W= ÓÖc[aS
|
|
2675
|
+
FÁð]NôÝ'= qr(¶ù¤nü«òÿ¿d&ÿÈõT4Þ=}z|ö ¿OW×SMtdH.ÏãRX&§o3ØÜXÍ^ÊMí£W´iâ]NüOå£S£Å·ç÷ݧ½GÑUy¹¦ß§/6P0(Cúýb"þ¥°VÙÄá£ÓÙ@¾YýòD{òÃv?EP©=MBé\ĽYäýRò øfâëEEf¼D+gC×úDZGÅÿ±Ç?TzÙ¡±ÏÁÕ¯¦ðvZmT}3xËz×cºrÑM=Mc-É©Ô7½wæc§Î»cû¾yfÙWòÆÝÔc¥³ôØf«Äñ·9ø%g:y^+{U]¤þ
[&fÓÏYë«Gªõ¹¦Öðþ¬moÛø?/ÛS.[S9ÛùC
/û2²Y£ÎÑ%/sy¢×ÌùJW6Oí\g0^JùêßÏ0í[Ü'ÏÔ>À-¿[ÔW?Y]±ØÙÃî<~ÎëR~Ìf¾Z/×¼_á¾Þê+îoÐñ{Þ\e3K%©¹§íB¹§(c=}ËÈ·SzÔnf§èx}o\9öf|%Ýå¥~©IÇüñY8}Ffú@Rú1éþ3÷ËótQøvû|³Îaá,Óé>BG6Òê}ÃJ|¶=}°öf6õk¶ÌºHgNjÒ{æ¾M;9·é§WèO±Ä3ÒËÒyt ;ù´à©a|Ó^!ÝøûÂÄ
|
|
2676
|
+
(VV¸ÇÙcÏ>yoçzÃvòG{3Þ£½c×ôíÅé;°OÛGØ<wÜW> rU]q{û'ùÝír{*øï?t-ígùWÿ
&§]m}×ût¥Ë~ß&>&Õv!b#ÅÌq¢µ|jÍüùÉ^Æ&ôþ~sIµ"]d)uâ´ºvk Å\<Íÿöê½Â
|
|
2677
|
+
ïBçϧmÙIólÜoëVb¦¯éWÇû3` });
|
|
2678
|
+
var imports = {
|
|
2679
|
+
"a": wasmImports
|
|
2680
|
+
};
|
|
2681
|
+
this.setModule = (data3) => {
|
|
2682
|
+
WASMAudioDecoderCommon2.setModule(EmscriptenWASM, data3);
|
|
2683
|
+
};
|
|
2684
|
+
this.getModule = () => WASMAudioDecoderCommon2.getModule(EmscriptenWASM);
|
|
2685
|
+
this.instantiate = () => {
|
|
2686
|
+
this.getModule().then((wasm) => WebAssembly.instantiate(wasm, imports)).then((instance) => {
|
|
2687
|
+
const wasmExports = instance.exports;
|
|
2688
|
+
assignWasmExports(wasmExports);
|
|
2689
|
+
wasmMemory = wasmExports["l"];
|
|
2690
|
+
updateMemoryViews();
|
|
2691
|
+
initRuntime(wasmExports);
|
|
2692
|
+
ready();
|
|
2693
|
+
});
|
|
2694
|
+
this.ready = new Promise((resolve) => {
|
|
2695
|
+
ready = resolve;
|
|
2696
|
+
}).then(() => {
|
|
2697
|
+
this.HEAP = wasmMemory.buffer;
|
|
2698
|
+
this.malloc = _malloc;
|
|
2699
|
+
this.free = _free;
|
|
2700
|
+
this.create_decoder = _create_decoder;
|
|
2701
|
+
this.send_setup = _send_setup;
|
|
2702
|
+
this.init_dsp = _init_dsp;
|
|
2703
|
+
this.decode_packets = _decode_packets;
|
|
2704
|
+
this.destroy_decoder = _destroy_decoder;
|
|
2705
|
+
});
|
|
2706
|
+
return this;
|
|
2707
|
+
};
|
|
2708
|
+
}
|
|
2709
|
+
|
|
2710
|
+
// ../../node_modules/@wasm-audio-decoders/ogg-vorbis/src/OggVorbisDecoder.js
|
|
2711
|
+
function Decoder() {
|
|
2712
|
+
this._init = () => {
|
|
2713
|
+
return new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM, this._module).then((common) => {
|
|
2714
|
+
this._common = common;
|
|
2715
|
+
this._input = this._common.allocateTypedArray(
|
|
2716
|
+
this._inputSize,
|
|
2717
|
+
Uint8Array
|
|
2718
|
+
);
|
|
2719
|
+
this._firstPage = true;
|
|
2720
|
+
this._inputLen = this._common.allocateTypedArray(1, Uint32Array);
|
|
2721
|
+
this._outputBufferPtr = this._common.allocateTypedArray(1, Uint32Array);
|
|
2722
|
+
this._channels = this._common.allocateTypedArray(1, Uint32Array);
|
|
2723
|
+
this._sampleRate = this._common.allocateTypedArray(1, Uint32Array);
|
|
2724
|
+
this._samplesDecoded = this._common.allocateTypedArray(1, Uint32Array);
|
|
2725
|
+
const maxErrors = 128 * 2;
|
|
2726
|
+
this._errors = this._common.allocateTypedArray(maxErrors, Uint32Array);
|
|
2727
|
+
this._errorsLength = this._common.allocateTypedArray(1, Int32Array);
|
|
2728
|
+
this._frameNumber = 0;
|
|
2729
|
+
this._inputBytes = 0;
|
|
2730
|
+
this._outputSamples = 0;
|
|
2731
|
+
this._decoder = this._common.wasm.create_decoder(
|
|
2732
|
+
this._input.ptr,
|
|
2733
|
+
this._inputLen.ptr,
|
|
2734
|
+
this._outputBufferPtr.ptr,
|
|
2735
|
+
this._channels.ptr,
|
|
2736
|
+
this._sampleRate.ptr,
|
|
2737
|
+
this._samplesDecoded.ptr,
|
|
2738
|
+
this._errors.ptr,
|
|
2739
|
+
this._errorsLength.ptr,
|
|
2740
|
+
maxErrors
|
|
2741
|
+
);
|
|
2742
|
+
});
|
|
2743
|
+
};
|
|
2744
|
+
Object.defineProperty(this, "ready", {
|
|
2745
|
+
enumerable: true,
|
|
2746
|
+
get: () => this._ready
|
|
2747
|
+
});
|
|
2748
|
+
this.reset = () => {
|
|
2749
|
+
this.free();
|
|
2750
|
+
return this._init();
|
|
2751
|
+
};
|
|
2752
|
+
this.free = () => {
|
|
2753
|
+
this._common.wasm.destroy_decoder(this._decoder);
|
|
2754
|
+
this._common.free();
|
|
2755
|
+
};
|
|
2756
|
+
this.sendSetupHeader = (data3) => {
|
|
2757
|
+
this._input.buf.set(data3);
|
|
2758
|
+
this._inputLen.buf[0] = data3.length;
|
|
2759
|
+
this._common.wasm.send_setup(this._decoder, this._firstPage);
|
|
2760
|
+
this._firstPage = false;
|
|
2761
|
+
};
|
|
2762
|
+
this.initDsp = () => {
|
|
2763
|
+
this._common.wasm.init_dsp(this._decoder);
|
|
2764
|
+
};
|
|
2765
|
+
this.decodePackets = (packets) => {
|
|
2766
|
+
let outputBuffers = [], outputSamples = 0, errors = [];
|
|
2767
|
+
for (let packetIdx = 0; packetIdx < packets.length; packetIdx++) {
|
|
2768
|
+
const packet = packets[packetIdx];
|
|
2769
|
+
this._input.buf.set(packet);
|
|
2770
|
+
this._inputLen.buf[0] = packet.length;
|
|
2771
|
+
this._common.wasm.decode_packets(this._decoder);
|
|
2772
|
+
const samplesDecoded = this._samplesDecoded.buf[0];
|
|
2773
|
+
const channels2 = [];
|
|
2774
|
+
const outputBufferChannels = new Uint32Array(
|
|
2775
|
+
this._common.wasm.HEAP,
|
|
2776
|
+
this._outputBufferPtr.buf[0],
|
|
2777
|
+
this._channels.buf[0]
|
|
2778
|
+
);
|
|
2779
|
+
for (let channel2 = 0; channel2 < this._channels.buf[0]; channel2++) {
|
|
2780
|
+
const output = new Float32Array(samplesDecoded);
|
|
2781
|
+
if (samplesDecoded) {
|
|
2782
|
+
output.set(
|
|
2783
|
+
new Float32Array(
|
|
2784
|
+
this._common.wasm.HEAP,
|
|
2785
|
+
outputBufferChannels[channel2],
|
|
2786
|
+
samplesDecoded
|
|
2787
|
+
)
|
|
2788
|
+
);
|
|
2789
|
+
}
|
|
2790
|
+
channels2.push(output);
|
|
2791
|
+
}
|
|
2792
|
+
outputBuffers.push(channels2);
|
|
2793
|
+
outputSamples += samplesDecoded;
|
|
2794
|
+
this._frameNumber++;
|
|
2795
|
+
this._inputBytes += packet.length;
|
|
2796
|
+
this._outputSamples += samplesDecoded;
|
|
2797
|
+
for (let i = 0; i < this._errorsLength.buf; i += 2) {
|
|
2798
|
+
const errorDescription = this._common.codeToString(this._errors.buf[i]);
|
|
2799
|
+
const functionName = this._common.codeToString(this._errors.buf[i + 1]);
|
|
2800
|
+
errors.push({
|
|
2801
|
+
message: errorDescription + " vorbis_synthesis" + functionName,
|
|
2802
|
+
frameLength: packet.length,
|
|
2803
|
+
frameNumber: this._frameNumber,
|
|
2804
|
+
inputBytes: this._inputBytes,
|
|
2805
|
+
outputSamples: this._outputSamples
|
|
2806
|
+
});
|
|
2807
|
+
}
|
|
2808
|
+
this._errorsLength.buf[0] = 0;
|
|
2809
|
+
}
|
|
2810
|
+
return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(
|
|
2811
|
+
errors,
|
|
2812
|
+
outputBuffers,
|
|
2813
|
+
this._channels.buf[0],
|
|
2814
|
+
outputSamples,
|
|
2815
|
+
this._sampleRate.buf[0],
|
|
2816
|
+
16
|
|
2817
|
+
);
|
|
2818
|
+
};
|
|
2819
|
+
this._isWebWorker = Decoder.isWebWorker;
|
|
2820
|
+
this._WASMAudioDecoderCommon = Decoder.WASMAudioDecoderCommon || WASMAudioDecoderCommon;
|
|
2821
|
+
this._EmscriptenWASM = Decoder.EmscriptenWASM || EmscriptenWASM;
|
|
2822
|
+
this._module = Decoder.module;
|
|
2823
|
+
this._inputSize = 128 * 1024;
|
|
2824
|
+
this._ready = this._init();
|
|
2825
|
+
return this;
|
|
2826
|
+
}
|
|
2827
|
+
var setDecoderClass = /* @__PURE__ */ Symbol();
|
|
2828
|
+
var OggVorbisDecoder = class {
|
|
2829
|
+
constructor() {
|
|
2830
|
+
this._onCodec = (codec2) => {
|
|
2831
|
+
if (codec2 !== "vorbis")
|
|
2832
|
+
throw new Error(
|
|
2833
|
+
"@wasm-audio-decoders/ogg-vorbis does not support this codec " + codec2
|
|
2834
|
+
);
|
|
2835
|
+
};
|
|
2836
|
+
new WASMAudioDecoderCommon();
|
|
2837
|
+
this._init();
|
|
2838
|
+
this._ready = this[setDecoderClass](Decoder);
|
|
2839
|
+
}
|
|
2840
|
+
_init() {
|
|
2841
|
+
this._vorbisSetupInProgress = true;
|
|
2842
|
+
this._totalSamplesDecoded = 0;
|
|
2843
|
+
this._codecParser = new codec_parser_default("audio/ogg", {
|
|
2844
|
+
onCodec: this._onCodec,
|
|
2845
|
+
enableFrameCRC32: false
|
|
2846
|
+
});
|
|
2847
|
+
}
|
|
2848
|
+
async [setDecoderClass](decoderClass) {
|
|
2849
|
+
if (this._decoder) {
|
|
2850
|
+
const oldDecoder = this._decoder;
|
|
2851
|
+
await oldDecoder.ready.then(() => oldDecoder.free());
|
|
2852
|
+
}
|
|
2853
|
+
this._decoder = new decoderClass();
|
|
2854
|
+
return this._decoder.ready;
|
|
2855
|
+
}
|
|
2856
|
+
get ready() {
|
|
2857
|
+
return this._ready;
|
|
2858
|
+
}
|
|
2859
|
+
async reset() {
|
|
2860
|
+
this._init();
|
|
2861
|
+
return this._decoder.reset();
|
|
2862
|
+
}
|
|
2863
|
+
free() {
|
|
2864
|
+
this._decoder.free();
|
|
2865
|
+
}
|
|
2866
|
+
async decodeOggPages(oggPages) {
|
|
2867
|
+
const packets = [];
|
|
2868
|
+
for (let i = 0; i < oggPages.length; i++) {
|
|
2869
|
+
const oggPage2 = oggPages[i];
|
|
2870
|
+
if (this._vorbisSetupInProgress) {
|
|
2871
|
+
if (oggPage2[data2][0] === 1) {
|
|
2872
|
+
this._decoder.sendSetupHeader(oggPage2[data2]);
|
|
2873
|
+
}
|
|
2874
|
+
if (oggPage2[codecFrames2].length) {
|
|
2875
|
+
const headerData = oggPage2[codecFrames2][0][header2];
|
|
2876
|
+
this._decoder.sendSetupHeader(headerData[vorbisSetup2]);
|
|
2877
|
+
this._decoder.initDsp();
|
|
2878
|
+
this._vorbisSetupInProgress = false;
|
|
2879
|
+
}
|
|
2880
|
+
}
|
|
2881
|
+
packets.push(...oggPage2[codecFrames2].map((f) => f[data2]));
|
|
2882
|
+
}
|
|
2883
|
+
const decoded = await this._decoder.decodePackets(packets);
|
|
2884
|
+
this._totalSamplesDecoded += decoded.samplesDecoded;
|
|
2885
|
+
const oggPage = oggPages[oggPages.length - 1];
|
|
2886
|
+
if (oggPage && oggPage[isLastPage2]) {
|
|
2887
|
+
const samplesToTrim = this._totalSamplesDecoded - oggPage[totalSamples2];
|
|
2888
|
+
if (samplesToTrim > 0) {
|
|
2889
|
+
for (let i = 0; i < decoded.channelData.length; i++)
|
|
2890
|
+
decoded.channelData[i] = decoded.channelData[i].subarray(
|
|
2891
|
+
0,
|
|
2892
|
+
decoded.samplesDecoded - samplesToTrim
|
|
2893
|
+
);
|
|
2894
|
+
decoded.samplesDecoded -= samplesToTrim;
|
|
2895
|
+
this._totalSamplesDecoded -= samplesToTrim;
|
|
2896
|
+
}
|
|
2897
|
+
}
|
|
2898
|
+
return decoded;
|
|
2899
|
+
}
|
|
2900
|
+
async decode(vorbisData) {
|
|
2901
|
+
return this.decodeOggPages([...this._codecParser.parseChunk(vorbisData)]);
|
|
2902
|
+
}
|
|
2903
|
+
async flush() {
|
|
2904
|
+
const decoded = await this.decodeOggPages([...this._codecParser.flush()]);
|
|
2905
|
+
await this.reset();
|
|
2906
|
+
return decoded;
|
|
2907
|
+
}
|
|
2908
|
+
async decodeFile(vorbisData) {
|
|
2909
|
+
const decoded = await this.decodeOggPages([
|
|
2910
|
+
...this._codecParser.parseAll(vorbisData)
|
|
2911
|
+
]);
|
|
2912
|
+
await this.reset();
|
|
2913
|
+
return decoded;
|
|
2914
|
+
}
|
|
2915
|
+
};
|
|
2916
|
+
|
|
2917
|
+
// ../../node_modules/@wasm-audio-decoders/ogg-vorbis/src/OggVorbisDecoderWebWorker.js
|
|
2918
|
+
var DecoderWorker = class extends WASMAudioDecoderWorker {
|
|
2919
|
+
constructor(options) {
|
|
2920
|
+
super(options, "ogg-vorbis-decoder", Decoder, EmscriptenWASM);
|
|
2921
|
+
}
|
|
2922
|
+
async sendSetupHeader(data3) {
|
|
2923
|
+
return this.postToDecoder("sendSetupHeader", data3);
|
|
2924
|
+
}
|
|
2925
|
+
async initDsp() {
|
|
2926
|
+
return this.postToDecoder("initDsp");
|
|
2927
|
+
}
|
|
2928
|
+
async decodePackets(packets) {
|
|
2929
|
+
return this.postToDecoder("decodePackets", packets);
|
|
2930
|
+
}
|
|
2931
|
+
};
|
|
2932
|
+
var OggVorbisDecoderWebWorker = class extends OggVorbisDecoder {
|
|
2933
|
+
constructor() {
|
|
2934
|
+
super();
|
|
2935
|
+
this._ready = super[setDecoderClass](DecoderWorker);
|
|
2936
|
+
}
|
|
2937
|
+
async free() {
|
|
2938
|
+
await this._decoder.free();
|
|
2939
|
+
}
|
|
2940
|
+
terminate() {
|
|
2941
|
+
this._decoder.terminate();
|
|
2942
|
+
}
|
|
2943
|
+
};
|
|
2944
|
+
|
|
2945
|
+
// ../../node_modules/@wasm-audio-decoders/ogg-vorbis/index.js
|
|
2946
|
+
assignNames(OggVorbisDecoder, "OggVorbisDecoder");
|
|
2947
|
+
assignNames(OggVorbisDecoderWebWorker, "OggVorbisDecoderWebWorker");
|
|
2948
|
+
|
|
2949
|
+
// src/decode-vorbis.src.js
|
|
2950
|
+
var EMPTY = Object.freeze({ channelData: Object.freeze([]), sampleRate: 0 });
|
|
2951
|
+
async function decode(src) {
|
|
2952
|
+
let buf = src instanceof Uint8Array ? src : new Uint8Array(src);
|
|
2953
|
+
let dec = await decoder();
|
|
2954
|
+
try {
|
|
2955
|
+
let a = await dec.decode(buf);
|
|
2956
|
+
let b = dec.flush ? await dec.flush() : null;
|
|
2957
|
+
return b?.channelData?.length ? merge(a, b) : a;
|
|
2958
|
+
} finally {
|
|
2959
|
+
dec.free();
|
|
2960
|
+
}
|
|
2961
|
+
}
|
|
2962
|
+
async function decoder() {
|
|
2963
|
+
let d = new OggVorbisDecoder();
|
|
2964
|
+
await d.ready;
|
|
2965
|
+
return d;
|
|
2966
|
+
}
|
|
2967
|
+
function merge(a, b) {
|
|
2968
|
+
if (!b?.channelData?.length) return a;
|
|
2969
|
+
if (!a?.channelData?.length) return b;
|
|
2970
|
+
return {
|
|
2971
|
+
channelData: a.channelData.map((ch, i) => {
|
|
2972
|
+
let bc = b.channelData[i] || b.channelData[0];
|
|
2973
|
+
let m = new Float32Array(ch.length + bc.length);
|
|
2974
|
+
m.set(ch);
|
|
2975
|
+
m.set(bc, ch.length);
|
|
2976
|
+
return m;
|
|
2977
|
+
}),
|
|
2978
|
+
sampleRate: a.sampleRate
|
|
2979
|
+
};
|
|
2980
|
+
}
|
|
2981
|
+
export {
|
|
2982
|
+
decoder,
|
|
2983
|
+
decode as default
|
|
2984
|
+
};
|