@multitapio/multitap 0.0.14 → 0.0.16
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/channel.d.ts.map +1 -1
- package/dist/codegen/config.d.ts +1 -0
- package/dist/codegen/config.d.ts.map +1 -1
- package/dist/codegen/rust.d.ts.map +1 -1
- package/dist/executor.d.ts +4 -2
- package/dist/executor.d.ts.map +1 -1
- package/dist/init-data.d.ts +23 -2
- package/dist/init-data.d.ts.map +1 -1
- package/dist/input-codec.d.ts +4 -3
- package/dist/input-codec.d.ts.map +1 -1
- package/dist/lib.d.ts +2 -0
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +442 -66
- package/dist/loader.d.ts +39 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/rollback.d.ts +0 -5
- package/dist/rollback.d.ts.map +1 -1
- package/dist/schema.d.ts +10 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/session.d.ts +3 -4
- package/dist/session.d.ts.map +1 -1
- package/dist/test-session.d.ts +17 -2
- package/dist/test-session.d.ts.map +1 -1
- package/dist/types/channel.d.ts.map +1 -1
- package/dist/types/codegen/config.d.ts +1 -0
- package/dist/types/codegen/config.d.ts.map +1 -1
- package/dist/types/codegen/rust.d.ts.map +1 -1
- package/dist/types/executor.d.ts +4 -2
- package/dist/types/executor.d.ts.map +1 -1
- package/dist/types/init-data.d.ts +23 -2
- package/dist/types/init-data.d.ts.map +1 -1
- package/dist/types/input-codec.d.ts +4 -3
- package/dist/types/input-codec.d.ts.map +1 -1
- package/dist/types/lib.d.ts +2 -0
- package/dist/types/lib.d.ts.map +1 -1
- package/dist/types/loader.d.ts +39 -0
- package/dist/types/loader.d.ts.map +1 -0
- package/dist/types/rollback.d.ts +0 -5
- package/dist/types/rollback.d.ts.map +1 -1
- package/dist/types/schema.d.ts +10 -0
- package/dist/types/schema.d.ts.map +1 -1
- package/dist/types/session.d.ts +3 -4
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/test-session.d.ts +17 -2
- package/dist/types/test-session.d.ts.map +1 -1
- package/dist/types/vite/codegen-runner.d.ts +11 -0
- package/dist/types/vite/codegen-runner.d.ts.map +1 -1
- package/dist/types/vite/plugin.d.ts +3 -14
- package/dist/types/vite/plugin.d.ts.map +1 -1
- package/dist/types/vite/types.d.ts +73 -0
- package/dist/types/vite/types.d.ts.map +1 -1
- package/dist/vite/codegen-runner.d.ts +11 -0
- package/dist/vite/codegen-runner.d.ts.map +1 -1
- package/dist/vite/index.js +2417 -124
- package/dist/vite/plugin.d.ts +3 -14
- package/dist/vite/plugin.d.ts.map +1 -1
- package/dist/vite/types.d.ts +73 -0
- package/dist/vite/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/dist/diagnostics/index.d.ts +0 -12
- package/dist/diagnostics/index.d.ts.map +0 -1
- package/dist/diagnostics.js +0 -7192
- package/dist/types/diagnostics/index.d.ts +0 -12
- package/dist/types/diagnostics/index.d.ts.map +0 -1
- package/dist/types/vite/module-builder.d.ts +0 -29
- package/dist/types/vite/module-builder.d.ts.map +0 -1
- package/dist/vite/module-builder.d.ts +0 -29
- package/dist/vite/module-builder.d.ts.map +0 -1
package/dist/lib.js
CHANGED
|
@@ -2799,8 +2799,8 @@ var SessionConfig = class _SessionConfig {
|
|
|
2799
2799
|
if (!Number.isInteger(this.startTime)) {
|
|
2800
2800
|
throw new Error(`Invalid startTime: must be an integer, got ${this.startTime}`);
|
|
2801
2801
|
}
|
|
2802
|
-
if (this.startTime
|
|
2803
|
-
throw new Error(`Invalid startTime: must be
|
|
2802
|
+
if (this.startTime < 0) {
|
|
2803
|
+
throw new Error(`Invalid startTime: must be >= 0, got ${this.startTime}`);
|
|
2804
2804
|
}
|
|
2805
2805
|
}
|
|
2806
2806
|
/**
|
|
@@ -4072,6 +4072,7 @@ var RollingCounter = class {
|
|
|
4072
4072
|
};
|
|
4073
4073
|
|
|
4074
4074
|
// src/channel.ts
|
|
4075
|
+
var DESIRED_DATA_CHANNELS = 10;
|
|
4075
4076
|
var DEFAULT_ICE_SERVERS = [
|
|
4076
4077
|
{ urls: "stun:stun.l.google.com:19302" },
|
|
4077
4078
|
{ urls: "stun:stun1.l.google.com:19302" }
|
|
@@ -4377,7 +4378,11 @@ var Channel = class {
|
|
|
4377
4378
|
}
|
|
4378
4379
|
};
|
|
4379
4380
|
pc.addEventListener("connectionstatechange", handleConnectionState);
|
|
4380
|
-
|
|
4381
|
+
for (let i = 0; i < DESIRED_DATA_CHANNELS; i++) {
|
|
4382
|
+
const dc = pc.createDataChannel(`ch-${i}`, { negotiated: true, id: i, ordered: true });
|
|
4383
|
+
this._handleDataChannel(dc, generation, i === 0 ? firstDataChannelResolver : null);
|
|
4384
|
+
if (i === 0) firstDataChannelResolver = null;
|
|
4385
|
+
}
|
|
4381
4386
|
const offer = await pc.createOffer();
|
|
4382
4387
|
await pc.setLocalDescription(offer);
|
|
4383
4388
|
const localDesc = pc.localDescription;
|
|
@@ -4655,7 +4660,8 @@ function warnUnexpected(err2) {
|
|
|
4655
4660
|
var input_codec_exports = {};
|
|
4656
4661
|
__export(input_codec_exports, {
|
|
4657
4662
|
InputInstance: () => InputInstance,
|
|
4658
|
-
compileInputCodec: () => compileInputCodec
|
|
4663
|
+
compileInputCodec: () => compileInputCodec,
|
|
4664
|
+
compileInputSchema: () => compileInputSchema
|
|
4659
4665
|
});
|
|
4660
4666
|
|
|
4661
4667
|
// src/schema.ts
|
|
@@ -4727,6 +4733,18 @@ function parseArrayType(type) {
|
|
|
4727
4733
|
if (!PRIMITIVE_TYPES.has(elementType)) return null;
|
|
4728
4734
|
return { elementType, length };
|
|
4729
4735
|
}
|
|
4736
|
+
function parseInputArrayType(type) {
|
|
4737
|
+
const match = type.match(/^(\w+)\[(\d+)\]$/);
|
|
4738
|
+
if (!match || !match[1] || !match[2]) return null;
|
|
4739
|
+
const elementType = match[1];
|
|
4740
|
+
const length = parseInt(match[2], 10);
|
|
4741
|
+
if (!INPUT_PRIMITIVE_SCALAR_TYPES.has(elementType)) {
|
|
4742
|
+
throw new Error(
|
|
4743
|
+
`Invalid array element type '${elementType}': arrays only support primitive scalar types (bool, uint8, int8, uint16, int16, uint32, int32, f32)`
|
|
4744
|
+
);
|
|
4745
|
+
}
|
|
4746
|
+
return { elementType, length };
|
|
4747
|
+
}
|
|
4730
4748
|
function getTypeSize(type) {
|
|
4731
4749
|
const arrayInfo = parseArrayType(type);
|
|
4732
4750
|
if (arrayInfo) {
|
|
@@ -4742,6 +4760,21 @@ function getTypeSize(type) {
|
|
|
4742
4760
|
}
|
|
4743
4761
|
return size;
|
|
4744
4762
|
}
|
|
4763
|
+
function getInputTypeSize(type) {
|
|
4764
|
+
const arrayInfo = parseInputArrayType(type);
|
|
4765
|
+
if (arrayInfo) {
|
|
4766
|
+
const elementSize = INPUT_TYPE_SIZES[arrayInfo.elementType];
|
|
4767
|
+
if (elementSize === void 0) {
|
|
4768
|
+
throw new Error(`Unknown element type: ${arrayInfo.elementType}`);
|
|
4769
|
+
}
|
|
4770
|
+
return elementSize * arrayInfo.length;
|
|
4771
|
+
}
|
|
4772
|
+
const size = INPUT_TYPE_SIZES[type];
|
|
4773
|
+
if (size === void 0) {
|
|
4774
|
+
throw new Error(`Unknown type: ${type}`);
|
|
4775
|
+
}
|
|
4776
|
+
return size;
|
|
4777
|
+
}
|
|
4745
4778
|
function getValidatedTypeSize(type, componentName, fieldName) {
|
|
4746
4779
|
try {
|
|
4747
4780
|
return getTypeSize(type);
|
|
@@ -5109,6 +5142,116 @@ function parseVec2ArrayType(type) {
|
|
|
5109
5142
|
if (!match?.[1]) return null;
|
|
5110
5143
|
return { elementType: "vec2", length: parseInt(match[1], 10) };
|
|
5111
5144
|
}
|
|
5145
|
+
function compileInputSchema(schema) {
|
|
5146
|
+
const controls = [];
|
|
5147
|
+
const commands = [];
|
|
5148
|
+
const controlByName = /* @__PURE__ */ new Map();
|
|
5149
|
+
const commandByName = /* @__PURE__ */ new Map();
|
|
5150
|
+
const seenNames = /* @__PURE__ */ new Set();
|
|
5151
|
+
let index = 0;
|
|
5152
|
+
for (let i = 0; i < schema.controls.length; i++) {
|
|
5153
|
+
const controlDef = schema.controls[i];
|
|
5154
|
+
if (typeof controlDef.name !== "string" || controlDef.name.trim().length === 0) {
|
|
5155
|
+
throw new Error(`Control at index ${i} must have a non-empty string 'name'`);
|
|
5156
|
+
}
|
|
5157
|
+
if (seenNames.has(controlDef.name)) {
|
|
5158
|
+
throw new Error(`Duplicate control/command name '${controlDef.name}' in schema`);
|
|
5159
|
+
}
|
|
5160
|
+
seenNames.add(controlDef.name);
|
|
5161
|
+
if (typeof controlDef.type !== "string" || controlDef.type.trim().length === 0) {
|
|
5162
|
+
throw new Error(`Control '${controlDef.name}' must have a string 'type'`);
|
|
5163
|
+
}
|
|
5164
|
+
const size = getInputTypeSize(controlDef.type);
|
|
5165
|
+
const compiled = {
|
|
5166
|
+
name: controlDef.name,
|
|
5167
|
+
index: index++,
|
|
5168
|
+
type: controlDef.type,
|
|
5169
|
+
size,
|
|
5170
|
+
options: controlDef.options,
|
|
5171
|
+
hint: controlDef.hint,
|
|
5172
|
+
retain: controlDef.retain === "always" ? "always" : "tick"
|
|
5173
|
+
};
|
|
5174
|
+
controls.push(compiled);
|
|
5175
|
+
controlByName.set(controlDef.name, compiled);
|
|
5176
|
+
if (index > 255) {
|
|
5177
|
+
throw new Error(`Too many controls/commands: index ${index} exceeds u8 limit (255)`);
|
|
5178
|
+
}
|
|
5179
|
+
}
|
|
5180
|
+
for (let i = 0; i < schema.commands.length; i++) {
|
|
5181
|
+
const commandDef = schema.commands[i];
|
|
5182
|
+
if (typeof commandDef.name !== "string" || commandDef.name.trim().length === 0) {
|
|
5183
|
+
throw new Error(`Command at index ${i} must have a non-empty string 'name'`);
|
|
5184
|
+
}
|
|
5185
|
+
if (seenNames.has(commandDef.name)) {
|
|
5186
|
+
throw new Error(`Duplicate control/command name '${commandDef.name}' in schema`);
|
|
5187
|
+
}
|
|
5188
|
+
seenNames.add(commandDef.name);
|
|
5189
|
+
const args = [];
|
|
5190
|
+
let offset = 0;
|
|
5191
|
+
for (let ai = 0; ai < commandDef.args.length; ai++) {
|
|
5192
|
+
const argDef = commandDef.args[ai];
|
|
5193
|
+
if (typeof argDef.name !== "string" || argDef.name.trim().length === 0) {
|
|
5194
|
+
throw new Error(`Command '${commandDef.name}' has an argument with missing 'name' at index ${ai}`);
|
|
5195
|
+
}
|
|
5196
|
+
const size = getInputTypeSize(argDef.type);
|
|
5197
|
+
const arrayInfo = parseInputArrayType(argDef.type);
|
|
5198
|
+
const arg = {
|
|
5199
|
+
name: argDef.name,
|
|
5200
|
+
type: argDef.type,
|
|
5201
|
+
size,
|
|
5202
|
+
offset
|
|
5203
|
+
};
|
|
5204
|
+
if (arrayInfo) {
|
|
5205
|
+
arg.arrayLength = arrayInfo.length;
|
|
5206
|
+
arg.arrayElementType = arrayInfo.elementType;
|
|
5207
|
+
}
|
|
5208
|
+
args.push(arg);
|
|
5209
|
+
offset += size;
|
|
5210
|
+
}
|
|
5211
|
+
const compiled = {
|
|
5212
|
+
name: commandDef.name,
|
|
5213
|
+
index: index++,
|
|
5214
|
+
args,
|
|
5215
|
+
totalSize: offset
|
|
5216
|
+
};
|
|
5217
|
+
commands.push(compiled);
|
|
5218
|
+
commandByName.set(commandDef.name, compiled);
|
|
5219
|
+
if (index > 255) {
|
|
5220
|
+
throw new Error(`Too many controls/commands: index ${index} exceeds u8 limit (255)`);
|
|
5221
|
+
}
|
|
5222
|
+
}
|
|
5223
|
+
return { controls, commands, controlByName, commandByName };
|
|
5224
|
+
}
|
|
5225
|
+
function isCompiledInputSchema(schema) {
|
|
5226
|
+
if (!("controls" in schema) || !Array.isArray(schema.controls)) {
|
|
5227
|
+
return false;
|
|
5228
|
+
}
|
|
5229
|
+
if (schema.controls.length === 0) {
|
|
5230
|
+
return "controlByName" in schema;
|
|
5231
|
+
}
|
|
5232
|
+
const firstControl = schema.controls[0];
|
|
5233
|
+
return firstControl !== void 0 && "size" in firstControl && "index" in firstControl;
|
|
5234
|
+
}
|
|
5235
|
+
function ensureCompiledInputSchema(schema) {
|
|
5236
|
+
if (isCompiledInputSchema(schema)) {
|
|
5237
|
+
if (!schema.controlByName) {
|
|
5238
|
+
const controlByName = /* @__PURE__ */ new Map();
|
|
5239
|
+
for (const ctrl of schema.controls) {
|
|
5240
|
+
controlByName.set(ctrl.name, ctrl);
|
|
5241
|
+
}
|
|
5242
|
+
schema.controlByName = controlByName;
|
|
5243
|
+
}
|
|
5244
|
+
if (!schema.commandByName) {
|
|
5245
|
+
const commandByName = /* @__PURE__ */ new Map();
|
|
5246
|
+
for (const cmd of schema.commands) {
|
|
5247
|
+
commandByName.set(cmd.name, cmd);
|
|
5248
|
+
}
|
|
5249
|
+
schema.commandByName = commandByName;
|
|
5250
|
+
}
|
|
5251
|
+
return schema;
|
|
5252
|
+
}
|
|
5253
|
+
return compileInputSchema(schema);
|
|
5254
|
+
}
|
|
5112
5255
|
|
|
5113
5256
|
// src/input-codec.ts
|
|
5114
5257
|
function parseArrayType2(type) {
|
|
@@ -5121,74 +5264,58 @@ function parseArrayType2(type) {
|
|
|
5121
5264
|
}
|
|
5122
5265
|
return { elementType, length };
|
|
5123
5266
|
}
|
|
5124
|
-
function getTypeSize2(type) {
|
|
5125
|
-
const arrayInfo = parseArrayType2(type);
|
|
5126
|
-
if (arrayInfo) {
|
|
5127
|
-
const elementSize = INPUT_TYPE_SIZES[arrayInfo.elementType];
|
|
5128
|
-
if (elementSize === void 0) throw new Error(`Unknown element type: ${arrayInfo.elementType}`);
|
|
5129
|
-
return elementSize * arrayInfo.length;
|
|
5130
|
-
}
|
|
5131
|
-
const size = INPUT_TYPE_SIZES[type];
|
|
5132
|
-
if (size === void 0) throw new Error(`Unknown type: ${type}`);
|
|
5133
|
-
return size;
|
|
5134
|
-
}
|
|
5135
5267
|
function compileSchemaInternal(schema) {
|
|
5136
5268
|
const controls = [];
|
|
5137
5269
|
const commands = [];
|
|
5138
5270
|
const controlByName = /* @__PURE__ */ new Map();
|
|
5139
5271
|
const commandByName = /* @__PURE__ */ new Map();
|
|
5140
|
-
|
|
5141
|
-
|
|
5142
|
-
const size = getTypeSize2(controlDef.type);
|
|
5143
|
-
const arrayInfo = parseArrayType2(controlDef.type);
|
|
5272
|
+
for (const ctrl of schema.controls) {
|
|
5273
|
+
const arrayInfo = parseArrayType2(ctrl.type);
|
|
5144
5274
|
const field = {
|
|
5145
|
-
name:
|
|
5146
|
-
type:
|
|
5147
|
-
size,
|
|
5275
|
+
name: ctrl.name,
|
|
5276
|
+
type: ctrl.type,
|
|
5277
|
+
size: ctrl.size,
|
|
5148
5278
|
offset: 0,
|
|
5149
|
-
options:
|
|
5279
|
+
options: ctrl.options ? [...ctrl.options] : void 0
|
|
5150
5280
|
};
|
|
5151
5281
|
if (arrayInfo) {
|
|
5152
5282
|
field.arrayLength = arrayInfo.length;
|
|
5153
5283
|
field.arrayElementType = arrayInfo.elementType;
|
|
5154
5284
|
}
|
|
5155
5285
|
const compiled = {
|
|
5156
|
-
name:
|
|
5157
|
-
index: index
|
|
5286
|
+
name: ctrl.name,
|
|
5287
|
+
index: ctrl.index,
|
|
5158
5288
|
field,
|
|
5159
|
-
hint:
|
|
5160
|
-
retain:
|
|
5289
|
+
hint: ctrl.hint,
|
|
5290
|
+
retain: ctrl.retain
|
|
5161
5291
|
};
|
|
5162
5292
|
controls.push(compiled);
|
|
5163
|
-
controlByName.set(
|
|
5293
|
+
controlByName.set(ctrl.name, compiled);
|
|
5164
5294
|
}
|
|
5165
|
-
for (const
|
|
5295
|
+
for (const cmd of schema.commands) {
|
|
5166
5296
|
const args = [];
|
|
5167
|
-
|
|
5168
|
-
|
|
5169
|
-
const size = getTypeSize2(argDef.type);
|
|
5170
|
-
const arrayInfo = parseArrayType2(argDef.type);
|
|
5297
|
+
for (const arg of cmd.args) {
|
|
5298
|
+
const arrayInfo = parseArrayType2(arg.type);
|
|
5171
5299
|
const field = {
|
|
5172
|
-
name:
|
|
5173
|
-
type:
|
|
5174
|
-
size,
|
|
5175
|
-
offset
|
|
5300
|
+
name: arg.name,
|
|
5301
|
+
type: arg.type,
|
|
5302
|
+
size: arg.size,
|
|
5303
|
+
offset: arg.offset
|
|
5176
5304
|
};
|
|
5177
5305
|
if (arrayInfo) {
|
|
5178
5306
|
field.arrayLength = arrayInfo.length;
|
|
5179
5307
|
field.arrayElementType = arrayInfo.elementType;
|
|
5180
5308
|
}
|
|
5181
5309
|
args.push(field);
|
|
5182
|
-
offset += size;
|
|
5183
5310
|
}
|
|
5184
5311
|
const compiled = {
|
|
5185
|
-
name:
|
|
5186
|
-
index: index
|
|
5312
|
+
name: cmd.name,
|
|
5313
|
+
index: cmd.index,
|
|
5187
5314
|
args,
|
|
5188
|
-
totalSize:
|
|
5315
|
+
totalSize: cmd.totalSize
|
|
5189
5316
|
};
|
|
5190
5317
|
commands.push(compiled);
|
|
5191
|
-
commandByName.set(
|
|
5318
|
+
commandByName.set(cmd.name, compiled);
|
|
5192
5319
|
}
|
|
5193
5320
|
return { controls, commands, controlByName, commandByName };
|
|
5194
5321
|
}
|
|
@@ -6358,6 +6485,172 @@ function getEnumConstants(schema) {
|
|
|
6358
6485
|
}
|
|
6359
6486
|
|
|
6360
6487
|
// src/init-data.ts
|
|
6488
|
+
function encodeInitData(schema, data) {
|
|
6489
|
+
const buffer2 = new Uint8Array(schema.totalSize);
|
|
6490
|
+
const view = new DataView(buffer2.buffer);
|
|
6491
|
+
view.setUint32(0, INIT_DATA_MAGIC, true);
|
|
6492
|
+
view.setUint32(4, schema.totalSize, true);
|
|
6493
|
+
for (const item of schema.items) {
|
|
6494
|
+
const itemData = data[item.name];
|
|
6495
|
+
if (itemData === void 0) {
|
|
6496
|
+
throw new Error(`Missing required init data item: ${item.name}`);
|
|
6497
|
+
}
|
|
6498
|
+
if (item.isBlob) {
|
|
6499
|
+
encodeBlob(view, item, itemData);
|
|
6500
|
+
} else {
|
|
6501
|
+
encodeCompound(view, item, itemData);
|
|
6502
|
+
}
|
|
6503
|
+
}
|
|
6504
|
+
return buffer2;
|
|
6505
|
+
}
|
|
6506
|
+
function encodeBlob(view, item, data) {
|
|
6507
|
+
let bytes;
|
|
6508
|
+
if (typeof data === "string") {
|
|
6509
|
+
const binary = atob(data);
|
|
6510
|
+
bytes = new Uint8Array(binary.length);
|
|
6511
|
+
for (let i = 0; i < binary.length; i++) {
|
|
6512
|
+
bytes[i] = binary.charCodeAt(i);
|
|
6513
|
+
}
|
|
6514
|
+
} else if (data instanceof Uint8Array) {
|
|
6515
|
+
bytes = data;
|
|
6516
|
+
} else {
|
|
6517
|
+
throw new Error(`Init data blob "${item.name}" must be a base64 string or Uint8Array`);
|
|
6518
|
+
}
|
|
6519
|
+
if (bytes.length > item.blobMaxSize) {
|
|
6520
|
+
throw new Error(
|
|
6521
|
+
`Init data blob "${item.name}" exceeds maxSize: ${bytes.length} > ${item.blobMaxSize}`
|
|
6522
|
+
);
|
|
6523
|
+
}
|
|
6524
|
+
const offset = item.storageOffset;
|
|
6525
|
+
view.setUint32(offset, bytes.length, true);
|
|
6526
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
6527
|
+
view.setUint8(offset + 4 + i, bytes[i]);
|
|
6528
|
+
}
|
|
6529
|
+
}
|
|
6530
|
+
function encodeCompound(view, item, data) {
|
|
6531
|
+
for (const field of item.fields) {
|
|
6532
|
+
const value = data[field.name];
|
|
6533
|
+
if (value === void 0) {
|
|
6534
|
+
throw new Error(`Missing required init data field: ${item.name}.${field.name}`);
|
|
6535
|
+
}
|
|
6536
|
+
encodeField(view, item.storageOffset, field, value);
|
|
6537
|
+
}
|
|
6538
|
+
}
|
|
6539
|
+
function encodeField(view, itemOffset, field, value) {
|
|
6540
|
+
const offset = itemOffset + field.offset;
|
|
6541
|
+
const vec3Array = parseVec3ArrayType(field.type);
|
|
6542
|
+
if (vec3Array) {
|
|
6543
|
+
const arr = value;
|
|
6544
|
+
for (let i = 0; i < arr.length && i < vec3Array.length; i++) {
|
|
6545
|
+
const v = arr[i];
|
|
6546
|
+
if (Array.isArray(v)) {
|
|
6547
|
+
view.setFloat32(offset + i * 12, v[0] ?? 0, true);
|
|
6548
|
+
view.setFloat32(offset + i * 12 + 4, v[1] ?? 0, true);
|
|
6549
|
+
view.setFloat32(offset + i * 12 + 8, v[2] ?? 0, true);
|
|
6550
|
+
} else {
|
|
6551
|
+
view.setFloat32(offset + i * 12, v.x ?? 0, true);
|
|
6552
|
+
view.setFloat32(offset + i * 12 + 4, v.y ?? 0, true);
|
|
6553
|
+
view.setFloat32(offset + i * 12 + 8, v.z ?? 0, true);
|
|
6554
|
+
}
|
|
6555
|
+
}
|
|
6556
|
+
return;
|
|
6557
|
+
}
|
|
6558
|
+
const vec2Array = parseVec2ArrayType(field.type);
|
|
6559
|
+
if (vec2Array) {
|
|
6560
|
+
const arr = value;
|
|
6561
|
+
for (let i = 0; i < arr.length && i < vec2Array.length; i++) {
|
|
6562
|
+
const v = arr[i];
|
|
6563
|
+
if (Array.isArray(v)) {
|
|
6564
|
+
view.setFloat32(offset + i * 8, v[0] ?? 0, true);
|
|
6565
|
+
view.setFloat32(offset + i * 8 + 4, v[1] ?? 0, true);
|
|
6566
|
+
} else {
|
|
6567
|
+
view.setFloat32(offset + i * 8, v.x ?? 0, true);
|
|
6568
|
+
view.setFloat32(offset + i * 8 + 4, v.y ?? 0, true);
|
|
6569
|
+
}
|
|
6570
|
+
}
|
|
6571
|
+
return;
|
|
6572
|
+
}
|
|
6573
|
+
if (field.type === "vec3") {
|
|
6574
|
+
const v = value;
|
|
6575
|
+
if (Array.isArray(v)) {
|
|
6576
|
+
view.setFloat32(offset, v[0] ?? 0, true);
|
|
6577
|
+
view.setFloat32(offset + 4, v[1] ?? 0, true);
|
|
6578
|
+
view.setFloat32(offset + 8, v[2] ?? 0, true);
|
|
6579
|
+
} else {
|
|
6580
|
+
view.setFloat32(offset, v.x ?? 0, true);
|
|
6581
|
+
view.setFloat32(offset + 4, v.y ?? 0, true);
|
|
6582
|
+
view.setFloat32(offset + 8, v.z ?? 0, true);
|
|
6583
|
+
}
|
|
6584
|
+
return;
|
|
6585
|
+
}
|
|
6586
|
+
if (field.type === "vec2") {
|
|
6587
|
+
const v = value;
|
|
6588
|
+
if (Array.isArray(v)) {
|
|
6589
|
+
view.setFloat32(offset, v[0] ?? 0, true);
|
|
6590
|
+
view.setFloat32(offset + 4, v[1] ?? 0, true);
|
|
6591
|
+
} else {
|
|
6592
|
+
view.setFloat32(offset, v.x ?? 0, true);
|
|
6593
|
+
view.setFloat32(offset + 4, v.y ?? 0, true);
|
|
6594
|
+
}
|
|
6595
|
+
return;
|
|
6596
|
+
}
|
|
6597
|
+
if (field.type === "quat") {
|
|
6598
|
+
const v = value;
|
|
6599
|
+
if (Array.isArray(v)) {
|
|
6600
|
+
view.setFloat32(offset, v[0] ?? 0, true);
|
|
6601
|
+
view.setFloat32(offset + 4, v[1] ?? 0, true);
|
|
6602
|
+
view.setFloat32(offset + 8, v[2] ?? 0, true);
|
|
6603
|
+
view.setFloat32(offset + 12, v[3] ?? 1, true);
|
|
6604
|
+
} else {
|
|
6605
|
+
view.setFloat32(offset, v.x ?? 0, true);
|
|
6606
|
+
view.setFloat32(offset + 4, v.y ?? 0, true);
|
|
6607
|
+
view.setFloat32(offset + 8, v.z ?? 0, true);
|
|
6608
|
+
view.setFloat32(offset + 12, v.w ?? 1, true);
|
|
6609
|
+
}
|
|
6610
|
+
return;
|
|
6611
|
+
}
|
|
6612
|
+
const primArray = parseArrayType(field.type);
|
|
6613
|
+
if (primArray && field.arrayElementType) {
|
|
6614
|
+
const arr = value;
|
|
6615
|
+
const elemSize = TYPE_SIZES[field.arrayElementType] ?? 1;
|
|
6616
|
+
for (let i = 0; i < arr.length && i < primArray.length; i++) {
|
|
6617
|
+
encodeScalar(view, offset + i * elemSize, field.arrayElementType, arr[i] ?? 0);
|
|
6618
|
+
}
|
|
6619
|
+
return;
|
|
6620
|
+
}
|
|
6621
|
+
encodeScalar(view, offset, field.type, value);
|
|
6622
|
+
}
|
|
6623
|
+
function encodeScalar(view, offset, type, value) {
|
|
6624
|
+
switch (type) {
|
|
6625
|
+
case "bool":
|
|
6626
|
+
view.setUint8(offset, value ? 1 : 0);
|
|
6627
|
+
break;
|
|
6628
|
+
case "uint8":
|
|
6629
|
+
view.setUint8(offset, value);
|
|
6630
|
+
break;
|
|
6631
|
+
case "int8":
|
|
6632
|
+
view.setInt8(offset, value);
|
|
6633
|
+
break;
|
|
6634
|
+
case "uint16":
|
|
6635
|
+
view.setUint16(offset, value, true);
|
|
6636
|
+
break;
|
|
6637
|
+
case "int16":
|
|
6638
|
+
view.setInt16(offset, value, true);
|
|
6639
|
+
break;
|
|
6640
|
+
case "uint32":
|
|
6641
|
+
case "entityRef":
|
|
6642
|
+
view.setUint32(offset, value, true);
|
|
6643
|
+
break;
|
|
6644
|
+
case "int32":
|
|
6645
|
+
view.setInt32(offset, value, true);
|
|
6646
|
+
break;
|
|
6647
|
+
case "f32":
|
|
6648
|
+
view.setFloat32(offset, value, true);
|
|
6649
|
+
break;
|
|
6650
|
+
default:
|
|
6651
|
+
throw new Error(`Unknown scalar type: ${type}`);
|
|
6652
|
+
}
|
|
6653
|
+
}
|
|
6361
6654
|
var InitDataValidationError = class extends Error {
|
|
6362
6655
|
constructor(message, path) {
|
|
6363
6656
|
super(`${path}: ${message}`);
|
|
@@ -7352,9 +7645,19 @@ var Executor = class {
|
|
|
7352
7645
|
if (stateSize === null || state.length !== stateSize) {
|
|
7353
7646
|
throw new Error(`State size mismatch: expected ${this.stateSize}, got ${state.length}`);
|
|
7354
7647
|
}
|
|
7355
|
-
if (
|
|
7648
|
+
if (ticks.length === 0) {
|
|
7356
7649
|
return state.slice();
|
|
7357
7650
|
}
|
|
7651
|
+
if (this.plugins.length === 0) {
|
|
7652
|
+
const result = state.slice();
|
|
7653
|
+
for (const tick of ticks) {
|
|
7654
|
+
setTick(result, tick.tick);
|
|
7655
|
+
const prevStateId = getStateId(result);
|
|
7656
|
+
const nextStateId = computeNextStateIdFromPayloads(prevStateId, tick.tick, tick.payloads);
|
|
7657
|
+
setStateId(result, nextStateId);
|
|
7658
|
+
}
|
|
7659
|
+
return result;
|
|
7660
|
+
}
|
|
7358
7661
|
const memory = this.memory;
|
|
7359
7662
|
if (!memory) {
|
|
7360
7663
|
throw new Error("WASM memory not initialized");
|
|
@@ -7374,6 +7677,15 @@ var Executor = class {
|
|
|
7374
7677
|
plugin.exports.apply(statePtr);
|
|
7375
7678
|
view = new Uint8Array(memory.buffer);
|
|
7376
7679
|
}
|
|
7680
|
+
stateView2 = new Uint8Array(memory.buffer, statePtr, stateSize);
|
|
7681
|
+
const prevStateId = getStateId(stateView2);
|
|
7682
|
+
const nextStateId = computeNextStateIdFromPayloads(prevStateId, tick.tick, tick.payloads);
|
|
7683
|
+
setStateId(stateView2, nextStateId);
|
|
7684
|
+
if (this.options.logStateHashForTests && tick.sync) {
|
|
7685
|
+
const tickState = view.slice(statePtr, statePtr + stateSize);
|
|
7686
|
+
const hash = sha256(tickState);
|
|
7687
|
+
console.log(`STATE_HASH ${JSON.stringify({ tick: tick.tick, hash: bytesToHex2(hash) })}`);
|
|
7688
|
+
}
|
|
7377
7689
|
}
|
|
7378
7690
|
return view.slice(statePtr, statePtr + stateSize);
|
|
7379
7691
|
}
|
|
@@ -7639,8 +7951,7 @@ var Rollback = class {
|
|
|
7639
7951
|
if (lastSyncIdx >= 0) {
|
|
7640
7952
|
const syncTicks = remainingTicks.slice(0, lastSyncIdx + 1);
|
|
7641
7953
|
const syncResult = this.executor.transition(this.currentState, syncTicks);
|
|
7642
|
-
const syncStateId =
|
|
7643
|
-
setStateId(syncResult, syncStateId);
|
|
7954
|
+
const syncStateId = getStateId(syncResult);
|
|
7644
7955
|
const lastSyncTick = syncTicks[syncTicks.length - 1];
|
|
7645
7956
|
this.currentState = syncResult;
|
|
7646
7957
|
this.currentTick = lastSyncTick.tick;
|
|
@@ -7653,8 +7964,7 @@ var Rollback = class {
|
|
|
7653
7964
|
const predictedTicks = lastSyncIdx >= 0 ? remainingTicks.slice(lastSyncIdx + 1) : remainingTicks;
|
|
7654
7965
|
if (predictedTicks.length > 0) {
|
|
7655
7966
|
const predResult = this.executor.transition(this.currentState, predictedTicks);
|
|
7656
|
-
const predStateId =
|
|
7657
|
-
setStateId(predResult, predStateId);
|
|
7967
|
+
const predStateId = getStateId(predResult);
|
|
7658
7968
|
const lastPredTick = predictedTicks[predictedTicks.length - 1];
|
|
7659
7969
|
this.currentState = predResult;
|
|
7660
7970
|
this.currentTick = lastPredTick.tick;
|
|
@@ -7672,17 +7982,6 @@ var Rollback = class {
|
|
|
7672
7982
|
}
|
|
7673
7983
|
return ticksComputed;
|
|
7674
7984
|
}
|
|
7675
|
-
/**
|
|
7676
|
-
* Compute the final stateId after processing a batch of ticks.
|
|
7677
|
-
* StateId is computed incrementally: hash(prevStateId || tick || payloads)
|
|
7678
|
-
*/
|
|
7679
|
-
computeBatchStateId(startState, ticks) {
|
|
7680
|
-
let stateId = getStateId(startState);
|
|
7681
|
-
for (const tick of ticks) {
|
|
7682
|
-
stateId = computeNextStateIdFromPayloads(stateId, tick.tick, tick.payloads);
|
|
7683
|
-
}
|
|
7684
|
-
return stateId;
|
|
7685
|
-
}
|
|
7686
7985
|
/**
|
|
7687
7986
|
* Get current state (copy, safe to transfer).
|
|
7688
7987
|
*/
|
|
@@ -7790,7 +8089,7 @@ function warnUnexpected2(err2) {
|
|
|
7790
8089
|
}
|
|
7791
8090
|
|
|
7792
8091
|
// src/rollback.worker.ts
|
|
7793
|
-
var workerCode = 'var Nr=Object.defineProperty;var zr=(t,e,n)=>e in t?Nr(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var y=(t,e,n)=>zr(t,typeof e!="symbol"?e+"":e,n);var Nt=Symbol("Comlink.proxy"),Rr=Symbol("Comlink.endpoint"),Hr=Symbol("Comlink.releaseProxy"),ft=Symbol("Comlink.finalizer"),Ue=Symbol("Comlink.thrown"),zt=t=>typeof t=="object"&&t!==null||typeof t=="function",Lr={canHandle:t=>zt(t)&&t[Nt],serialize(t){let{port1:e,port2:n}=new MessageChannel;return Pe(t,e),[n,[n]]},deserialize(t){return t.start(),dt(t)}},Vr={canHandle:t=>zt(t)&&Ue in t,serialize({value:t}){let e;return t instanceof Error?e={isError:!0,value:{message:t.message,name:t.name,stack:t.stack}}:e={isError:!1,value:t},[e,[]]},deserialize(t){throw t.isError?Object.assign(new Error(t.value.message),t.value):t.value}},Rt=new Map([["proxy",Lr],["throw",Vr]]);function Gr(t,e){for(let n of t)if(e===n||n==="*"||n instanceof RegExp&&n.test(e))return!0;return!1}function Pe(t,e=globalThis,n=["*"]){e.addEventListener("message",function r(i){if(!i||!i.data)return;if(!Gr(n,i.origin)){console.warn(`Invalid origin \'${i.origin}\' for comlink proxy`);return}let{id:o,type:s,path:a}=Object.assign({path:[]},i.data),u=(i.data.argumentList||[]).map(W),c;try{let f=a.slice(0,-1).reduce((g,S)=>g[S],t),d=a.reduce((g,S)=>g[S],t);switch(s){case"GET":c=d;break;case"SET":f[a.slice(-1)[0]]=W(i.data.value),c=!0;break;case"APPLY":c=d.apply(f,u);break;case"CONSTRUCT":{let g=new d(...u);c=jr(g)}break;case"ENDPOINT":{let{port1:g,port2:S}=new MessageChannel;Pe(t,S),c=Wr(g,[g])}break;case"RELEASE":c=void 0;break;default:return}}catch(f){c={value:f,[Ue]:0}}Promise.resolve(c).catch(f=>({value:f,[Ue]:0})).then(f=>{let[d,g]=Be(f);e.postMessage(Object.assign(Object.assign({},d),{id:o}),g),s==="RELEASE"&&(e.removeEventListener("message",r),Ht(e),ft in t&&typeof t[ft]=="function"&&t[ft]())}).catch(f=>{let[d,g]=Be({value:new TypeError("Unserializable return value"),[Ue]:0});e.postMessage(Object.assign(Object.assign({},d),{id:o}),g)})}),e.start&&e.start()}function Zr(t){return t.constructor.name==="MessagePort"}function Ht(t){Zr(t)&&t.close()}function dt(t,e){let n=new Map;return t.addEventListener("message",function(i){let{data:o}=i;if(!o||!o.id)return;let s=n.get(o.id);if(s)try{s(o)}finally{n.delete(o.id)}}),lt(t,n,[],e)}function ve(t){if(t)throw new Error("Proxy has been released and is not useable")}function Lt(t){return ne(t,new Map,{type:"RELEASE"}).then(()=>{Ht(t)})}var Ce=new WeakMap,Ie="FinalizationRegistry"in globalThis&&new FinalizationRegistry(t=>{let e=(Ce.get(t)||0)-1;Ce.set(t,e),e===0&&Lt(t)});function qr(t,e){let n=(Ce.get(e)||0)+1;Ce.set(e,n),Ie&&Ie.register(t,e,t)}function Kr(t){Ie&&Ie.unregister(t)}function lt(t,e,n=[],r=function(){}){let i=!1,o=new Proxy(r,{get(s,a){if(ve(i),a===Hr)return()=>{Kr(o),Lt(t),e.clear(),i=!0};if(a==="then"){if(n.length===0)return{then:()=>o};let u=ne(t,e,{type:"GET",path:n.map(c=>c.toString())}).then(W);return u.then.bind(u)}return lt(t,e,[...n,a])},set(s,a,u){ve(i);let[c,f]=Be(u);return ne(t,e,{type:"SET",path:[...n,a].map(d=>d.toString()),value:c},f).then(W)},apply(s,a,u){ve(i);let c=n[n.length-1];if(c===Rr)return ne(t,e,{type:"ENDPOINT"}).then(W);if(c==="bind")return lt(t,e,n.slice(0,-1));let[f,d]=Mt(u);return ne(t,e,{type:"APPLY",path:n.map(g=>g.toString()),argumentList:f},d).then(W)},construct(s,a){ve(i);let[u,c]=Mt(a);return ne(t,e,{type:"CONSTRUCT",path:n.map(f=>f.toString()),argumentList:u},c).then(W)}});return qr(o,t),o}function Yr(t){return Array.prototype.concat.apply([],t)}function Mt(t){let e=t.map(Be);return[e.map(n=>n[0]),Yr(e.map(n=>n[1]))]}var Vt=new WeakMap;function Wr(t,e){return Vt.set(t,e),t}function jr(t){return Object.assign(t,{[Nt]:!0})}function Be(t){for(let[e,n]of Rt)if(n.canHandle(t)){let[r,i]=n.serialize(t);return[{type:"HANDLER",name:e,value:r},i]}return[{type:"RAW",value:t},Vt.get(t)||[]]}function W(t){switch(t.type){case"HANDLER":return Rt.get(t.name).deserialize(t.value);case"RAW":return t.value}}function ne(t,e,n,r){return new Promise(i=>{let o=Xr();e.set(o,i),t.start&&t.start(),t.postMessage(Object.assign({id:o},n),r)})}function Xr(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}var Jr={p:0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn,n:0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n,h:1n,a:0n,b:7n,Gx:0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798n,Gy:0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8n},{p:X,n:yt,Gx:Qr,Gy:ei,b:jt}=Jr,re=32,pt=64,U=(t="")=>{throw new Error(t)},Xt=t=>typeof t=="bigint",Jt=t=>typeof t=="string",ti=t=>t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array",me=(t,e)=>!ti(t)||typeof e=="number"&&e>0&&t.length!==e?U("Uint8Array expected"):t,Me=t=>new Uint8Array(t),ni=t=>Uint8Array.from(t),Qt=(t,e)=>t.toString(16).padStart(e,"0"),gt=t=>Array.from(me(t)).map(e=>Qt(e,2)).join(""),L={_0:48,_9:57,A:65,F:70,a:97,f:102},Gt=t=>{if(t>=L._0&&t<=L._9)return t-L._0;if(t>=L.A&&t<=L.F)return t-(L.A-10);if(t>=L.a&&t<=L.f)return t-(L.a-10)},bt=t=>{let e="hex invalid";if(!Jt(t))return U(e);let n=t.length,r=n/2;if(n%2)return U(e);let i=Me(r);for(let o=0,s=0;o<r;o++,s+=2){let a=Gt(t.charCodeAt(s)),u=Gt(t.charCodeAt(s+1));if(a===void 0||u===void 0)return U(e);i[o]=a*16+u}return i},xt=(t,e)=>me(Jt(t)?bt(t):ni(me(t)),e),en=()=>globalThis?.crypto,ri=()=>en()?.subtle??U("crypto.subtle must be defined"),$e=(...t)=>{let e=Me(t.reduce((r,i)=>r+me(i).length,0)),n=0;return t.forEach(r=>{e.set(r,n),n+=r.length}),e},ii=(t=re)=>en().getRandomValues(Me(t)),De=BigInt,he=(t,e,n,r="bad number: out of range")=>Xt(t)&&e<=t&&t<n?t:U(r),h=(t,e=X)=>{let n=t%e;return n>=0n?n:e+n};var tn=(t,e)=>{(t===0n||e<=0n)&&U("no inverse n="+t+" mod="+e);let n=h(t,e),r=e,i=0n,o=1n,s=1n,a=0n;for(;n!==0n;){let u=r/n,c=r%n,f=i-s*u,d=o-a*u;r=n,n=c,i=s,o=a,s=f,a=d}return r===1n?h(i,e):U("no inverse")};var Zt=t=>t instanceof J?t:U("Point expected"),nn=t=>h(h(t*t)*t+jt),qt=t=>he(t,0n,X),_e=t=>he(t,1n,X),oi=t=>he(t,1n,yt),mt=t=>(t&1n)===0n,rn=t=>Uint8Array.of(t),si=t=>rn(mt(t)?2:3),ai=t=>{let e=nn(_e(t)),n=1n;for(let r=e,i=(X+1n)/4n;i>0n;i>>=1n)i&1n&&(n=n*r%X),r=r*r%X;return h(n*n)===e?n:U("sqrt invalid")},N=class N{constructor(e,n,r){y(this,"px");y(this,"py");y(this,"pz");this.px=qt(e),this.py=_e(n),this.pz=qt(r),Object.freeze(this)}static fromBytes(e){me(e);let n,r=e[0],i=e.subarray(1),o=Kt(i,0,re),s=e.length;if(s===re+1&&[2,3].includes(r)){let a=ai(o),u=mt(a);mt(De(r))!==u&&(a=h(-a)),n=new N(o,a,1n)}return s===pt+1&&r===4&&(n=new N(o,Kt(i,re,pt),1n)),n?n.assertValidity():U("bad point: not on curve")}equals(e){let{px:n,py:r,pz:i}=this,{px:o,py:s,pz:a}=Zt(e),u=h(n*a),c=h(o*i),f=h(r*a),d=h(s*i);return u===c&&f===d}is0(){return this.equals(j)}negate(){return new N(this.px,h(-this.py),this.pz)}double(){return this.add(this)}add(e){let{px:n,py:r,pz:i}=this,{px:o,py:s,pz:a}=Zt(e),u=0n,c=jt,f=0n,d=0n,g=0n,S=h(c*3n),T=h(n*o),A=h(r*s),D=h(i*a),te=h(n+r),v=h(o+s);te=h(te*v),v=h(T+A),te=h(te-v),v=h(n+i);let M=h(o+a);return v=h(v*M),M=h(T+D),v=h(v-M),M=h(r+i),f=h(s+a),M=h(M*f),f=h(A+D),M=h(M-f),g=h(u*v),f=h(S*D),g=h(f+g),f=h(A-g),g=h(A+g),d=h(f*g),A=h(T+T),A=h(A+T),D=h(u*D),v=h(S*v),A=h(A+D),D=h(T-D),D=h(u*D),v=h(v+D),T=h(A*v),d=h(d+T),T=h(M*v),f=h(te*f),f=h(f-T),T=h(te*A),g=h(M*g),g=h(g+T),new N(f,d,g)}multiply(e,n=!0){if(!n&&e===0n)return j;if(oi(e),e===1n)return this;if(this.equals(ie))return mi(e).p;let r=j,i=ie;for(let o=this;e>0n;o=o.double(),e>>=1n)e&1n?r=r.add(o):n&&(i=i.add(o));return r}toAffine(){let{px:e,py:n,pz:r}=this;if(this.equals(j))return{x:0n,y:0n};if(r===1n)return{x:e,y:n};let i=tn(r,X);return h(r*i)!==1n&&U("inverse invalid"),{x:h(e*i),y:h(n*i)}}assertValidity(){let{x:e,y:n}=this.toAffine();return _e(e),_e(n),h(n*n)===nn(e)?this:U("bad point: not on curve")}toBytes(e=!0){let{x:n,y:r}=this.assertValidity().toAffine(),i=Fe(n);return e?$e(si(r),i):$e(rn(4),i,Fe(r))}static fromAffine(e){let{x:n,y:r}=e;return n===0n&&r===0n?j:new N(n,r,1n)}toHex(e){return gt(this.toBytes(e))}static fromPrivateKey(e){return ie.multiply(ui(e))}static fromHex(e){return N.fromBytes(xt(e))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}toRawBytes(e){return this.toBytes(e)}};y(N,"BASE"),y(N,"ZERO");var J=N,ie=new J(Qr,ei,1n),j=new J(0n,1n,0n);J.BASE=ie;J.ZERO=j;var Ne=t=>De("0x"+(gt(t)||"0")),Kt=(t,e,n)=>Ne(t.subarray(e,n)),ci=2n**256n,Fe=t=>bt(Qt(he(t,0n,ci),pt)),ui=t=>{let e=Xt(t)?t:Ne(xt(t,re));return he(e,1n,yt,"private key invalid 3")};var fi=t=>{t=xt(t),(t.length<re+8||t.length>1024)&&U("expected 40-1024b");let e=h(Ne(t),yt-1n);return Fe(e+1n)};var li="SHA-256",wt={hexToBytes:bt,bytesToHex:gt,concatBytes:$e,bytesToNumberBE:Ne,numberToBytesBE:Fe,mod:h,invert:tn,hmacSha256Async:async(t,...e)=>{let n=ri(),r="HMAC",i=await n.importKey("raw",t,{name:r,hash:{name:li}},!1,["sign"]);return Me(await n.sign(r,i,$e(...e)))},hmacSha256Sync:void 0,hashToPrivateKey:fi,randomBytes:ii};var Oe=8,di=256,on=Math.ceil(di/Oe)+1,ht=2**(Oe-1),pi=()=>{let t=[],e=ie,n=e;for(let r=0;r<on;r++){n=e,t.push(n);for(let i=1;i<ht;i++)n=n.add(e),t.push(n);e=n.double()}return t},Yt,Wt=(t,e)=>{let n=e.negate();return t?n:e},mi=t=>{let e=Yt||(Yt=pi()),n=j,r=ie,i=2**Oe,o=i,s=De(i-1),a=De(Oe);for(let u=0;u<on;u++){let c=Number(t&s);t>>=a,c>ht&&(c-=o,t+=1n);let f=u*ht,d=f,g=f+Math.abs(c)-1,S=u%2!==0,T=c<0;c===0?r=r.add(Wt(S,e[d])):n=n.add(Wt(T,e[g]))}return{p:n,f:r}};function yi(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"}function sn(t){if(!Number.isSafeInteger(t)||t<0)throw new Error("positive integer expected, got "+t)}function se(t,...e){if(!yi(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error("Uint8Array expected of length "+e+", got length="+t.length)}function an(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.createHasher");sn(t.outputLen),sn(t.blockLen)}function ae(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function cn(t,e){se(t);let n=e.outputLen;if(t.length<n)throw new Error("digestInto() expects output buffer of length at least "+n)}function Q(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function ze(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}function F(t,e){return t<<32-e|t>>>e}function gi(t){if(typeof t!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(t))}function ye(t){return typeof t=="string"&&(t=gi(t)),se(t),t}var oe=class{};function un(t){let e=r=>t().update(ye(r)).digest(),n=t();return e.outputLen=n.outputLen,e.blockLen=n.blockLen,e.create=()=>t(),e}function bi(t,e,n,r){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,n,r);let i=BigInt(32),o=BigInt(4294967295),s=Number(n>>i&o),a=Number(n&o),u=r?4:0,c=r?0:4;t.setUint32(e+u,s,r),t.setUint32(e+c,a,r)}function fn(t,e,n){return t&e^~t&n}function ln(t,e,n){return t&e^t&n^e&n}var Re=class extends oe{constructor(e,n,r,i){super(),this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=e,this.outputLen=n,this.padOffset=r,this.isLE=i,this.buffer=new Uint8Array(e),this.view=ze(this.buffer)}update(e){ae(this),e=ye(e),se(e);let{view:n,buffer:r,blockLen:i}=this,o=e.length;for(let s=0;s<o;){let a=Math.min(i-this.pos,o-s);if(a===i){let u=ze(e);for(;i<=o-s;s+=i)this.process(u,s);continue}r.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(n,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ae(this),cn(e,this),this.finished=!0;let{buffer:n,view:r,blockLen:i,isLE:o}=this,{pos:s}=this;n[s++]=128,Q(this.buffer.subarray(s)),this.padOffset>i-s&&(this.process(r,0),s=0);for(let d=s;d<i;d++)n[d]=0;bi(r,i-8,BigInt(this.length*8),o),this.process(r,0);let a=ze(e),u=this.outputLen;if(u%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let c=u/4,f=this.get();if(c>f.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d<c;d++)a.setUint32(4*d,f[d],o)}digest(){let{buffer:e,outputLen:n}=this;this.digestInto(e);let r=e.slice(0,n);return this.destroy(),r}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:n,buffer:r,length:i,finished:o,destroyed:s,pos:a}=this;return e.destroyed=s,e.finished=o,e.length=i,e.pos=a,i%n&&e.buffer.set(r),e}clone(){return this._cloneInto()}},V=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var xi=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Z=new Uint32Array(64),He=class extends Re{constructor(e=32){super(64,e,8,!1),this.A=V[0]|0,this.B=V[1]|0,this.C=V[2]|0,this.D=V[3]|0,this.E=V[4]|0,this.F=V[5]|0,this.G=V[6]|0,this.H=V[7]|0}get(){let{A:e,B:n,C:r,D:i,E:o,F:s,G:a,H:u}=this;return[e,n,r,i,o,s,a,u]}set(e,n,r,i,o,s,a,u){this.A=e|0,this.B=n|0,this.C=r|0,this.D=i|0,this.E=o|0,this.F=s|0,this.G=a|0,this.H=u|0}process(e,n){for(let d=0;d<16;d++,n+=4)Z[d]=e.getUint32(n,!1);for(let d=16;d<64;d++){let g=Z[d-15],S=Z[d-2],T=F(g,7)^F(g,18)^g>>>3,A=F(S,17)^F(S,19)^S>>>10;Z[d]=A+Z[d-7]+T+Z[d-16]|0}let{A:r,B:i,C:o,D:s,E:a,F:u,G:c,H:f}=this;for(let d=0;d<64;d++){let g=F(a,6)^F(a,11)^F(a,25),S=f+g+fn(a,u,c)+xi[d]+Z[d]|0,A=(F(r,2)^F(r,13)^F(r,22))+ln(r,i,o)|0;f=c,c=u,u=a,a=s+S|0,s=o,o=i,i=r,r=S+A|0}r=r+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,u=u+this.F|0,c=c+this.G|0,f=f+this.H|0,this.set(r,i,o,s,a,u,c,f)}roundClean(){Q(Z)}destroy(){this.set(0,0,0,0,0,0,0,0),Q(this.buffer)}};var ge=un(()=>new He);var St=ge;var Le=class extends oe{constructor(e,n){super(),this.finished=!1,this.destroyed=!1,an(e);let r=ye(n);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let i=this.blockLen,o=new Uint8Array(i);o.set(r.length>i?e.create().update(r).digest():r);for(let s=0;s<o.length;s++)o[s]^=54;this.iHash.update(o),this.oHash=e.create();for(let s=0;s<o.length;s++)o[s]^=106;this.oHash.update(o),Q(o)}update(e){return ae(this),this.iHash.update(e),this}digestInto(e){ae(this),se(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:n,iHash:r,finished:i,destroyed:o,blockLen:s,outputLen:a}=this;return e=e,e.finished=i,e.destroyed=o,e.blockLen=s,e.outputLen=a,e.oHash=n._cloneInto(e.oHash),e.iHash=r._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},Et=(t,e,n)=>new Le(t,e).update(n).digest();Et.create=(t,e)=>new Le(t,e);var wi=["string","number","bigint","symbol"],Si=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function dn(t){if(t===null)return"null";if(t===void 0)return"undefined";if(t===!0||t===!1)return"boolean";let e=typeof t;if(wi.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(t))return"Array";if(Ei(t))return"Buffer";let n=Ti(t);return n||"Object"}function Ei(t){return t&&t.constructor&&t.constructor.isBuffer&&t.constructor.isBuffer.call(null,t)}function Ti(t){let e=Object.prototype.toString.call(t).slice(8,-1);if(Si.includes(e))return e}var l=class{constructor(e,n,r){this.major=e,this.majorEncoded=e<<5,this.name=n,this.terminal=r}toString(){return`Type[${this.major}].${this.name}`}compare(e){return this.major<e.major?-1:this.major>e.major?1:0}};l.uint=new l(0,"uint",!0);l.negint=new l(1,"negint",!0);l.bytes=new l(2,"bytes",!0);l.string=new l(3,"string",!0);l.array=new l(4,"array",!1);l.map=new l(5,"map",!1);l.tag=new l(6,"tag",!1);l.float=new l(7,"float",!0);l.false=new l(7,"false",!0);l.true=new l(7,"true",!0);l.null=new l(7,"null",!0);l.undefined=new l(7,"undefined",!0);l.break=new l(7,"break",!0);var m=class{constructor(e,n,r){this.type=e,this.value=n,this.encodedLength=r,this.encodedBytes=void 0,this.byteValue=void 0}toString(){return`Token[${this.type}].${this.value}`}};var ce=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",ki=new TextDecoder,Ai=new TextEncoder;function Ve(t){return ce&&globalThis.Buffer.isBuffer(t)}function Tt(t){return t instanceof Uint8Array?Ve(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):t:Uint8Array.from(t)}var yn=ce?(t,e,n)=>n-e>64?globalThis.Buffer.from(t.subarray(e,n)).toString("utf8"):mn(t,e,n):(t,e,n)=>n-e>64?ki.decode(t.subarray(e,n)):mn(t,e,n),gn=ce?t=>t.length>64?globalThis.Buffer.from(t):pn(t):t=>t.length>64?Ai.encode(t):pn(t),z=t=>Uint8Array.from(t),ue=ce?(t,e,n)=>Ve(t)?new Uint8Array(t.subarray(e,n)):t.slice(e,n):(t,e,n)=>t.slice(e,n),bn=ce?(t,e)=>(t=t.map(n=>n instanceof Uint8Array?n:globalThis.Buffer.from(n)),Tt(globalThis.Buffer.concat(t,e))):(t,e)=>{let n=new Uint8Array(e),r=0;for(let i of t)r+i.length>n.length&&(i=i.subarray(0,n.length-r)),n.set(i,r),r+=i.length;return n},xn=ce?t=>globalThis.Buffer.allocUnsafe(t):t=>new Uint8Array(t);function Ge(t,e){if(Ve(t)&&Ve(e))return t.compare(e);for(let n=0;n<t.length;n++)if(t[n]!==e[n])return t[n]<e[n]?-1:1;return 0}function pn(t){let e=[],n=0;for(let r=0;r<t.length;r++){let i=t.charCodeAt(r);i<128?e[n++]=i:i<2048?(e[n++]=i>>6|192,e[n++]=i&63|128):(i&64512)===55296&&r+1<t.length&&(t.charCodeAt(r+1)&64512)===56320?(i=65536+((i&1023)<<10)+(t.charCodeAt(++r)&1023),e[n++]=i>>18|240,e[n++]=i>>12&63|128,e[n++]=i>>6&63|128,e[n++]=i&63|128):(e[n++]=i>>12|224,e[n++]=i>>6&63|128,e[n++]=i&63|128)}return e}function mn(t,e,n){let r=[];for(;e<n;){let i=t[e],o=null,s=i>239?4:i>223?3:i>191?2:1;if(e+s<=n){let a,u,c,f;switch(s){case 1:i<128&&(o=i);break;case 2:a=t[e+1],(a&192)===128&&(f=(i&31)<<6|a&63,f>127&&(o=f));break;case 3:a=t[e+1],u=t[e+2],(a&192)===128&&(u&192)===128&&(f=(i&15)<<12|(a&63)<<6|u&63,f>2047&&(f<55296||f>57343)&&(o=f));break;case 4:a=t[e+1],u=t[e+2],c=t[e+3],(a&192)===128&&(u&192)===128&&(c&192)===128&&(f=(i&15)<<18|(a&63)<<12|(u&63)<<6|c&63,f>65535&&f<1114112&&(o=f))}}o===null?(o=65533,s=1):o>65535&&(o-=65536,r.push(o>>>10&1023|55296),o=56320|o&1023),r.push(o),e+=s}return vi(r)}var hn=4096;function vi(t){let e=t.length;if(e<=hn)return String.fromCharCode.apply(String,t);let n="",r=0;for(;r<e;)n+=String.fromCharCode.apply(String,t.slice(r,r+=hn));return n}var Ui=256,be=class{constructor(e=Ui){this.chunkSize=e,this.cursor=0,this.maxCursor=-1,this.chunks=[],this._initReuseChunk=null}reset(){this.cursor=0,this.maxCursor=-1,this.chunks.length&&(this.chunks=[]),this._initReuseChunk!==null&&(this.chunks.push(this._initReuseChunk),this.maxCursor=this._initReuseChunk.length-1)}push(e){let n=this.chunks[this.chunks.length-1];if(this.cursor+e.length<=this.maxCursor+1){let i=n.length-(this.maxCursor-this.cursor)-1;n.set(e,i)}else{if(n){let i=n.length-(this.maxCursor-this.cursor)-1;i<n.length&&(this.chunks[this.chunks.length-1]=n.subarray(0,i),this.maxCursor=this.cursor-1)}e.length<64&&e.length<this.chunkSize?(n=xn(this.chunkSize),this.chunks.push(n),this.maxCursor+=n.length,this._initReuseChunk===null&&(this._initReuseChunk=n),n.set(e,0)):(this.chunks.push(e),this.maxCursor+=e.length)}this.cursor+=e.length}toBytes(e=!1){let n;if(this.chunks.length===1){let r=this.chunks[0];e&&this.cursor>r.length/2?(n=this.cursor===r.length?r:r.subarray(0,this.cursor),this._initReuseChunk=null,this.chunks=[]):n=ue(r,0,this.cursor)}else n=bn(this.chunks,this.cursor);return e&&this.reset(),n}};var b="CBOR decode error:",kt="CBOR encode error:",xe=[];xe[23]=1;xe[24]=2;xe[25]=3;xe[26]=5;xe[27]=9;function G(t,e,n){if(t.length-e<n)throw new Error(`${b} not enough data for type`)}var E=[24,256,65536,4294967296,BigInt("18446744073709551616")];function C(t,e,n){G(t,e,1);let r=t[e];if(n.strict===!0&&r<E[0])throw new Error(`${b} integer encoded in more bytes than necessary (strict decode)`);return r}function I(t,e,n){G(t,e,2);let r=t[e]<<8|t[e+1];if(n.strict===!0&&r<E[1])throw new Error(`${b} integer encoded in more bytes than necessary (strict decode)`);return r}function B(t,e,n){G(t,e,4);let r=t[e]*16777216+(t[e+1]<<16)+(t[e+2]<<8)+t[e+3];if(n.strict===!0&&r<E[2])throw new Error(`${b} integer encoded in more bytes than necessary (strict decode)`);return r}function P(t,e,n){G(t,e,8);let r=t[e]*16777216+(t[e+1]<<16)+(t[e+2]<<8)+t[e+3],i=t[e+4]*16777216+(t[e+5]<<16)+(t[e+6]<<8)+t[e+7],o=(BigInt(r)<<BigInt(32))+BigInt(i);if(n.strict===!0&&o<E[3])throw new Error(`${b} integer encoded in more bytes than necessary (strict decode)`);if(o<=Number.MAX_SAFE_INTEGER)return Number(o);if(n.allowBigInt===!0)return o;throw new Error(`${b} integers outside of the safe integer range are not supported`)}function wn(t,e,n,r){return new m(l.uint,C(t,e+1,r),2)}function Sn(t,e,n,r){return new m(l.uint,I(t,e+1,r),3)}function En(t,e,n,r){return new m(l.uint,B(t,e+1,r),5)}function Tn(t,e,n,r){return new m(l.uint,P(t,e+1,r),9)}function _(t,e){return k(t,0,e.value)}function k(t,e,n){if(n<E[0]){let r=Number(n);t.push([e|r])}else if(n<E[1]){let r=Number(n);t.push([e|24,r])}else if(n<E[2]){let r=Number(n);t.push([e|25,r>>>8,r&255])}else if(n<E[3]){let r=Number(n);t.push([e|26,r>>>24&255,r>>>16&255,r>>>8&255,r&255])}else{let r=BigInt(n);if(r<E[4]){let i=[e|27,0,0,0,0,0,0,0],o=Number(r&BigInt(4294967295)),s=Number(r>>BigInt(32)&BigInt(4294967295));i[8]=o&255,o=o>>8,i[7]=o&255,o=o>>8,i[6]=o&255,o=o>>8,i[5]=o&255,i[4]=s&255,s=s>>8,i[3]=s&255,s=s>>8,i[2]=s&255,s=s>>8,i[1]=s&255,t.push(i)}else throw new Error(`${b} encountered BigInt larger than allowable range`)}}_.encodedSize=function(e){return k.encodedSize(e.value)};k.encodedSize=function(e){return e<E[0]?1:e<E[1]?2:e<E[2]?3:e<E[3]?5:9};_.compareTokens=function(e,n){return e.value<n.value?-1:e.value>n.value?1:0};function kn(t,e,n,r){return new m(l.negint,-1-C(t,e+1,r),2)}function An(t,e,n,r){return new m(l.negint,-1-I(t,e+1,r),3)}function vn(t,e,n,r){return new m(l.negint,-1-B(t,e+1,r),5)}var At=BigInt(-1),Un=BigInt(1);function Cn(t,e,n,r){let i=P(t,e+1,r);if(typeof i!="bigint"){let o=-1-i;if(o>=Number.MIN_SAFE_INTEGER)return new m(l.negint,o,9)}if(r.allowBigInt!==!0)throw new Error(`${b} integers outside of the safe integer range are not supported`);return new m(l.negint,At-BigInt(i),9)}function Ze(t,e){let n=e.value,r=typeof n=="bigint"?n*At-Un:n*-1-1;k(t,e.type.majorEncoded,r)}Ze.encodedSize=function(e){let n=e.value,r=typeof n=="bigint"?n*At-Un:n*-1-1;return r<E[0]?1:r<E[1]?2:r<E[2]?3:r<E[3]?5:9};Ze.compareTokens=function(e,n){return e.value<n.value?1:e.value>n.value?-1:0};function we(t,e,n,r){G(t,e,n+r);let i=ue(t,e+n,e+n+r);return new m(l.bytes,i,n+r)}function In(t,e,n,r){return we(t,e,1,n)}function Bn(t,e,n,r){return we(t,e,2,C(t,e+1,r))}function Pn(t,e,n,r){return we(t,e,3,I(t,e+1,r))}function _n(t,e,n,r){return we(t,e,5,B(t,e+1,r))}function $n(t,e,n,r){let i=P(t,e+1,r);if(typeof i=="bigint")throw new Error(`${b} 64-bit integer bytes lengths not supported`);return we(t,e,9,i)}function qe(t){return t.encodedBytes===void 0&&(t.encodedBytes=t.type===l.string?gn(t.value):t.value),t.encodedBytes}function fe(t,e){let n=qe(e);k(t,e.type.majorEncoded,n.length),t.push(n)}fe.encodedSize=function(e){let n=qe(e);return k.encodedSize(n.length)+n.length};fe.compareTokens=function(e,n){return Ii(qe(e),qe(n))};function Ii(t,e){return t.length<e.length?-1:t.length>e.length?1:Ge(t,e)}function Se(t,e,n,r,i){let o=n+r;G(t,e,o);let s=new m(l.string,yn(t,e+n,e+o),o);return i.retainStringBytes===!0&&(s.byteValue=ue(t,e+n,e+o)),s}function Dn(t,e,n,r){return Se(t,e,1,n,r)}function Fn(t,e,n,r){return Se(t,e,2,C(t,e+1,r),r)}function On(t,e,n,r){return Se(t,e,3,I(t,e+1,r),r)}function Mn(t,e,n,r){return Se(t,e,5,B(t,e+1,r),r)}function Nn(t,e,n,r){let i=P(t,e+1,r);if(typeof i=="bigint")throw new Error(`${b} 64-bit integer string lengths not supported`);return Se(t,e,9,i,r)}var zn=fe;function le(t,e,n,r){return new m(l.array,r,n)}function Rn(t,e,n,r){return le(t,e,1,n)}function Hn(t,e,n,r){return le(t,e,2,C(t,e+1,r))}function Ln(t,e,n,r){return le(t,e,3,I(t,e+1,r))}function Vn(t,e,n,r){return le(t,e,5,B(t,e+1,r))}function Gn(t,e,n,r){let i=P(t,e+1,r);if(typeof i=="bigint")throw new Error(`${b} 64-bit integer array lengths not supported`);return le(t,e,9,i)}function Zn(t,e,n,r){if(r.allowIndefinite===!1)throw new Error(`${b} indefinite length items not allowed`);return le(t,e,1,1/0)}function Ke(t,e){k(t,l.array.majorEncoded,e.value)}Ke.compareTokens=_.compareTokens;Ke.encodedSize=function(e){return k.encodedSize(e.value)};function de(t,e,n,r){return new m(l.map,r,n)}function qn(t,e,n,r){return de(t,e,1,n)}function Kn(t,e,n,r){return de(t,e,2,C(t,e+1,r))}function Yn(t,e,n,r){return de(t,e,3,I(t,e+1,r))}function Wn(t,e,n,r){return de(t,e,5,B(t,e+1,r))}function jn(t,e,n,r){let i=P(t,e+1,r);if(typeof i=="bigint")throw new Error(`${b} 64-bit integer map lengths not supported`);return de(t,e,9,i)}function Xn(t,e,n,r){if(r.allowIndefinite===!1)throw new Error(`${b} indefinite length items not allowed`);return de(t,e,1,1/0)}function Ye(t,e){k(t,l.map.majorEncoded,e.value)}Ye.compareTokens=_.compareTokens;Ye.encodedSize=function(e){return k.encodedSize(e.value)};function Jn(t,e,n,r){return new m(l.tag,n,1)}function Qn(t,e,n,r){return new m(l.tag,C(t,e+1,r),2)}function er(t,e,n,r){return new m(l.tag,I(t,e+1,r),3)}function tr(t,e,n,r){return new m(l.tag,B(t,e+1,r),5)}function nr(t,e,n,r){return new m(l.tag,P(t,e+1,r),9)}function We(t,e){k(t,l.tag.majorEncoded,e.value)}We.compareTokens=_.compareTokens;We.encodedSize=function(e){return k.encodedSize(e.value)};var Fi=20,Oi=21,Mi=22,Ni=23;function rr(t,e,n,r){if(r.allowUndefined===!1)throw new Error(`${b} undefined values are not supported`);return r.coerceUndefinedToNull===!0?new m(l.null,null,1):new m(l.undefined,void 0,1)}function ir(t,e,n,r){if(r.allowIndefinite===!1)throw new Error(`${b} indefinite length items not allowed`);return new m(l.break,void 0,1)}function vt(t,e,n){if(n){if(n.allowNaN===!1&&Number.isNaN(t))throw new Error(`${b} NaN values are not supported`);if(n.allowInfinity===!1&&(t===1/0||t===-1/0))throw new Error(`${b} Infinity values are not supported`)}return new m(l.float,t,e)}function or(t,e,n,r){return vt(Ut(t,e+1),3,r)}function sr(t,e,n,r){return vt(Ct(t,e+1),5,r)}function ar(t,e,n,r){return vt(lr(t,e+1),9,r)}function je(t,e,n){let r=e.value;if(r===!1)t.push([l.float.majorEncoded|Fi]);else if(r===!0)t.push([l.float.majorEncoded|Oi]);else if(r===null)t.push([l.float.majorEncoded|Mi]);else if(r===void 0)t.push([l.float.majorEncoded|Ni]);else{let i,o=!1;(!n||n.float64!==!0)&&(ur(r),i=Ut(O,1),r===i||Number.isNaN(r)?(O[0]=249,t.push(O.slice(0,3)),o=!0):(fr(r),i=Ct(O,1),r===i&&(O[0]=250,t.push(O.slice(0,5)),o=!0))),o||(zi(r),i=lr(O,1),O[0]=251,t.push(O.slice(0,9)))}}je.encodedSize=function(e,n){let r=e.value;if(r===!1||r===!0||r===null||r===void 0)return 1;if(!n||n.float64!==!0){ur(r);let i=Ut(O,1);if(r===i||Number.isNaN(r))return 3;if(fr(r),i=Ct(O,1),r===i)return 5}return 9};var cr=new ArrayBuffer(9),$=new DataView(cr,1),O=new Uint8Array(cr,0);function ur(t){if(t===1/0)$.setUint16(0,31744,!1);else if(t===-1/0)$.setUint16(0,64512,!1);else if(Number.isNaN(t))$.setUint16(0,32256,!1);else{$.setFloat32(0,t);let e=$.getUint32(0),n=(e&2139095040)>>23,r=e&8388607;if(n===255)$.setUint16(0,31744,!1);else if(n===0)$.setUint16(0,(t&2147483648)>>16|r>>13,!1);else{let i=n-127;i<-24?$.setUint16(0,0):i<-14?$.setUint16(0,(e&2147483648)>>16|1<<24+i,!1):$.setUint16(0,(e&2147483648)>>16|i+15<<10|r>>13,!1)}}}function Ut(t,e){if(t.length-e<2)throw new Error(`${b} not enough data for float16`);let n=(t[e]<<8)+t[e+1];if(n===31744)return 1/0;if(n===64512)return-1/0;if(n===32256)return NaN;let r=n>>10&31,i=n&1023,o;return r===0?o=i*2**-24:r!==31?o=(i+1024)*2**(r-25):o=i===0?1/0:NaN,n&32768?-o:o}function fr(t){$.setFloat32(0,t,!1)}function Ct(t,e){if(t.length-e<4)throw new Error(`${b} not enough data for float32`);let n=(t.byteOffset||0)+e;return new DataView(t.buffer,n,4).getFloat32(0,!1)}function zi(t){$.setFloat64(0,t,!1)}function lr(t,e){if(t.length-e<8)throw new Error(`${b} not enough data for float64`);let n=(t.byteOffset||0)+e;return new DataView(t.buffer,n,8).getFloat64(0,!1)}je.compareTokens=_.compareTokens;function x(t,e,n){throw new Error(`${b} encountered invalid minor (${n}) for major ${t[e]>>>5}`)}function Xe(t){return()=>{throw new Error(`${b} ${t}`)}}var p=[];for(let t=0;t<=23;t++)p[t]=x;p[24]=wn;p[25]=Sn;p[26]=En;p[27]=Tn;p[28]=x;p[29]=x;p[30]=x;p[31]=x;for(let t=32;t<=55;t++)p[t]=x;p[56]=kn;p[57]=An;p[58]=vn;p[59]=Cn;p[60]=x;p[61]=x;p[62]=x;p[63]=x;for(let t=64;t<=87;t++)p[t]=In;p[88]=Bn;p[89]=Pn;p[90]=_n;p[91]=$n;p[92]=x;p[93]=x;p[94]=x;p[95]=Xe("indefinite length bytes/strings are not supported");for(let t=96;t<=119;t++)p[t]=Dn;p[120]=Fn;p[121]=On;p[122]=Mn;p[123]=Nn;p[124]=x;p[125]=x;p[126]=x;p[127]=Xe("indefinite length bytes/strings are not supported");for(let t=128;t<=151;t++)p[t]=Rn;p[152]=Hn;p[153]=Ln;p[154]=Vn;p[155]=Gn;p[156]=x;p[157]=x;p[158]=x;p[159]=Zn;for(let t=160;t<=183;t++)p[t]=qn;p[184]=Kn;p[185]=Yn;p[186]=Wn;p[187]=jn;p[188]=x;p[189]=x;p[190]=x;p[191]=Xn;for(let t=192;t<=215;t++)p[t]=Jn;p[216]=Qn;p[217]=er;p[218]=tr;p[219]=nr;p[220]=x;p[221]=x;p[222]=x;p[223]=x;for(let t=224;t<=243;t++)p[t]=Xe("simple values are not supported");p[244]=x;p[245]=x;p[246]=x;p[247]=rr;p[248]=Xe("simple values are not supported");p[249]=or;p[250]=sr;p[251]=ar;p[252]=x;p[253]=x;p[254]=x;p[255]=ir;var R=[];for(let t=0;t<24;t++)R[t]=new m(l.uint,t,1);for(let t=-1;t>=-24;t--)R[31-t]=new m(l.negint,t,1);R[64]=new m(l.bytes,new Uint8Array(0),1);R[96]=new m(l.string,"",1);R[128]=new m(l.array,0,1);R[160]=new m(l.map,0,1);R[244]=new m(l.false,!1,1);R[245]=new m(l.true,!0,1);R[246]=new m(l.null,null,1);function dr(t){switch(t.type){case l.false:return z([244]);case l.true:return z([245]);case l.null:return z([246]);case l.bytes:return t.value.length?void 0:z([64]);case l.string:return t.value===""?z([96]):void 0;case l.array:return t.value===0?z([128]):void 0;case l.map:return t.value===0?z([160]):void 0;case l.uint:return t.value<24?z([Number(t.value)]):void 0;case l.negint:if(t.value>=-24)return z([31-Number(t.value)])}}var mr=Object.freeze({float64:!0,mapSorter:Gi,quickEncodeToken:dr});function Hi(){let t=[];return t[l.uint.major]=_,t[l.negint.major]=Ze,t[l.bytes.major]=fe,t[l.string.major]=zn,t[l.array.major]=Ke,t[l.map.major]=Ye,t[l.tag.major]=We,t[l.float.major]=je,t}var Li=Hi(),It=new be,Qe=class t{constructor(e,n){this.obj=e,this.parent=n}includes(e){let n=this;do if(n.obj===e)return!0;while(n=n.parent);return!1}static createCheck(e,n){if(e&&e.includes(n))throw new Error(`${kt} object contains circular references`);return new t(n,e)}},q={null:new m(l.null,null),undefined:new m(l.undefined,void 0),true:new m(l.true,!0),false:new m(l.false,!1),emptyArray:new m(l.array,0),emptyMap:new m(l.map,0)},K={number(t,e,n,r){return!Number.isInteger(t)||!Number.isSafeInteger(t)?new m(l.float,t):t>=0?new m(l.uint,t):new m(l.negint,t)},bigint(t,e,n,r){return t>=BigInt(0)?new m(l.uint,t):new m(l.negint,t)},Uint8Array(t,e,n,r){return new m(l.bytes,t)},string(t,e,n,r){return new m(l.string,t)},boolean(t,e,n,r){return t?q.true:q.false},null(t,e,n,r){return q.null},undefined(t,e,n,r){return q.undefined},ArrayBuffer(t,e,n,r){return new m(l.bytes,new Uint8Array(t))},DataView(t,e,n,r){return new m(l.bytes,new Uint8Array(t.buffer,t.byteOffset,t.byteLength))},Array(t,e,n,r){if(!t.length)return n.addBreakTokens===!0?[q.emptyArray,new m(l.break)]:q.emptyArray;r=Qe.createCheck(r,t);let i=[],o=0;for(let s of t)i[o++]=Je(s,n,r);return n.addBreakTokens?[new m(l.array,t.length),i,new m(l.break)]:[new m(l.array,t.length),i]},Object(t,e,n,r){let i=e!=="Object",o=i?t.keys():Object.keys(t),s=i?t.size:o.length;if(!s)return n.addBreakTokens===!0?[q.emptyMap,new m(l.break)]:q.emptyMap;r=Qe.createCheck(r,t);let a=[],u=0;for(let c of o)a[u++]=[Je(c,n,r),Je(i?t.get(c):t[c],n,r)];return Vi(a,n),n.addBreakTokens?[new m(l.map,s),a,new m(l.break)]:[new m(l.map,s),a]}};K.Map=K.Object;K.Buffer=K.Uint8Array;for(let t of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))K[`${t}Array`]=K.DataView;function Je(t,e={},n){let r=dn(t),i=e&&e.typeEncoders&&e.typeEncoders[r]||K[r];if(typeof i=="function"){let s=i(t,r,e,n);if(s!=null)return s}let o=K[r];if(!o)throw new Error(`${kt} unsupported type: ${r}`);return o(t,r,e,n)}function Vi(t,e){e.mapSorter&&t.sort(e.mapSorter)}function Gi(t,e){if(t[0]instanceof m&&e[0]instanceof m){let n=t[0],r=e[0];return n._keyBytes||(n._keyBytes=pr(n.value)),r._keyBytes||(r._keyBytes=pr(r.value)),Ge(n._keyBytes,r._keyBytes)}throw new Error("rfc8949MapSorter: complex key types are not supported yet")}function pr(t){return Zi(t,Li,mr)}function hr(t,e,n,r){if(Array.isArray(e))for(let i of e)hr(t,i,n,r);else n[e.type.major](t,e,r)}function Zi(t,e,n){let r=Je(t,n);if(!Array.isArray(r)&&n.quickEncodeToken){let i=n.quickEncodeToken(r);if(i)return i;let o=e[r.type.major];if(o.encodedSize){let s=o.encodedSize(r,n),a=new be(s);if(o(a,r,n),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${r} was wrong`);return Tt(a.chunks[0])}}return It.reset(),hr(It,r,e,n),It.toBytes(!0)}wt.hmacSha256Sync=(t,...e)=>Et(St,t,wt.concatBytes(...e));var Yi=32;function et(t){if(t.length===0)return new Uint8Array(Yi);let e=t.length,n=e*4,r=t.reduce((u,c)=>u+c.length,0),i=4+n+r,o=new Uint8Array(i),s=new DataView(o.buffer,o.byteOffset,o.byteLength);s.setUint32(0,e,!0);let a=4;for(let u of t)s.setUint32(a,u.length,!0),a+=4;for(let u of t)o.set(u,a),a+=u.length;return St(o)}var Ee={bool:1,uint8:1,int8:1,uint16:2,int16:2,uint32:4,int32:4,entityRef:4,f32:4,vec2:8,vec3:12,quat:16,enum:1},Te={bool:1,uint8:1,int8:1,uint16:2,int16:2,uint32:4,int32:4,f32:4,flags8:1,flags16:2,flags32:4,vec2:8,vec3:12,quat:16},Wi=new Set(["bool","uint8","int8","uint16","int16","uint32","int32","entityRef","f32"]),yr=new Set(["bool","uint8","int8","uint16","int16","uint32","int32","f32"]);function gr(t){let e=t.match(/^(\\w+)\\[(\\d+)\\]$/);if(!e||!e[1]||!e[2])return null;let n=e[1],r=parseInt(e[2],10);return Wi.has(n)?{elementType:n,length:r}:null}var br=1297369412;function xr(t){let e=t.match(/^vec3\\[(\\d+)\\]$/);return e?.[1]?{elementType:"vec3",length:parseInt(e[1],10)}:null}function wr(t){let e=t.match(/^vec2\\[(\\d+)\\]$/);return e?.[1]?{elementType:"vec2",length:parseInt(e[1],10)}:null}function _t(t){let e=t.match(/^(\\w+)\\[(\\d+)\\]$/);if(!e||!e[1]||!e[2])return null;let n=e[1],r=parseInt(e[2],10);if(!yr.has(n))throw new Error(`Invalid array element type \'${n}\': arrays only support primitive scalar types (bool, uint8, int8, uint16, int16, uint32, int32, f32)`);return{elementType:n,length:r}}function Sr(t){let e=_t(t);if(e){let r=Te[e.elementType];if(r===void 0)throw new Error(`Unknown element type: ${e.elementType}`);return r*e.length}let n=Te[t];if(n===void 0)throw new Error(`Unknown type: ${t}`);return n}function ji(t){let e=[],n=[],r=new Map,i=new Map,o=0;for(let s of t.controls){let a=Sr(s.type),u=_t(s.type),c={name:s.name,type:s.type,size:a,offset:0,options:s.options};u&&(c.arrayLength=u.length,c.arrayElementType=u.elementType);let f={name:s.name,index:o++,field:c,hint:s.hint,retain:s.retain==="always"?"always":"tick"};e.push(f),r.set(s.name,f)}for(let s of t.commands){let a=[],u=0;for(let f of s.args){let d=Sr(f.type),g=_t(f.type),S={name:f.name,type:f.type,size:d,offset:u};g&&(S.arrayLength=g.length,S.arrayElementType=g.elementType),a.push(S),u+=d}let c={name:s.name,index:o++,args:a,totalSize:u};n.push(c),i.set(s.name,c)}return{controls:e,commands:n,controlByName:r,commandByName:i}}function Bt(t,e,n,r){switch(n){case"bool":t.setUint8(e,r?1:0);break;case"uint8":case"flags8":t.setUint8(e,r);break;case"int8":t.setInt8(e,r);break;case"uint16":case"flags16":t.setUint16(e,r,!0);break;case"int16":t.setInt16(e,r,!0);break;case"uint32":case"flags32":t.setUint32(e,r,!0);break;case"int32":t.setInt32(e,r,!0);break;case"f32":t.setFloat32(e,r,!0);break;default:throw new Error(`Cannot write primitive type: ${n}`)}}function Pt(t,e,n){switch(n){case"bool":return t.getUint8(e)!==0;case"uint8":case"flags8":return t.getUint8(e);case"int8":return t.getInt8(e);case"uint16":case"flags16":return t.getUint16(e,!0);case"int16":return t.getInt16(e,!0);case"uint32":case"flags32":return t.getUint32(e,!0);case"int32":return t.getInt32(e,!0);case"f32":return t.getFloat32(e,!0);default:throw new Error(`Cannot read primitive type: ${n}`)}}var tt=class t{constructor(e){y(this,"schema");y(this,"fields",new Map);y(this,"commandList",[]);this.schema=e}setControl(e,n){let r=this.schema.controlByName.get(e);if(!r)throw new Error(`Unknown control: ${e}`);let i=new Uint8Array(r.field.size),o=new DataView(i.buffer);this.encodeValue(o,0,r.field,n),this.fields.set(r.index,i)}setFlags(e,n){let r=this.schema.controlByName.get(e);if(!r)throw new Error(`Unknown control: ${e}`);if(!r.field.options)throw new Error(`Control ${e} is not a flags type`);let i=0;for(let a=0;a<r.field.options.length;a++){let u=r.field.options[a];n[u]&&(i|=1<<a)}let o=new Uint8Array(r.field.size),s=new DataView(o.buffer);Bt(s,0,r.field.type,i),this.fields.set(r.index,o)}setVec2(e,n){let r=this.schema.controlByName.get(e);if(!r)throw new Error(`Unknown control: ${e}`);if(r.field.type!=="vec2")throw new Error(`Control ${e} is not a vec2`);let i=new Uint8Array(8),o=new DataView(i.buffer);o.setFloat32(0,n[0],!0),o.setFloat32(4,n[1],!0),this.fields.set(r.index,i)}setVec3(e,n){let r=this.schema.controlByName.get(e);if(!r)throw new Error(`Unknown control: ${e}`);if(r.field.type!=="vec3")throw new Error(`Control ${e} is not a vec3`);let i=new Uint8Array(12),o=new DataView(i.buffer);o.setFloat32(0,n[0],!0),o.setFloat32(4,n[1],!0),o.setFloat32(8,n[2],!0),this.fields.set(r.index,i)}setQuat(e,n){let r=this.schema.controlByName.get(e);if(!r)throw new Error(`Unknown control: ${e}`);if(r.field.type!=="quat")throw new Error(`Control ${e} is not a quat`);let i=new Uint8Array(16),o=new DataView(i.buffer);o.setFloat32(0,n[0],!0),o.setFloat32(4,n[1],!0),o.setFloat32(8,n[2],!0),o.setFloat32(12,n[3],!0),this.fields.set(r.index,i)}getControl(e){let n=this.schema.controlByName.get(e);if(!n)throw new Error(`Unknown control: ${e}`);let r=this.fields.get(n.index);if(!r)return this.getDefaultValue(n.field);let i=new DataView(r.buffer,r.byteOffset,r.byteLength);return this.decodeValue(i,0,n.field)}getFlags(e){let n=this.schema.controlByName.get(e);if(!n)throw new Error(`Unknown control: ${e}`);if(!n.field.options)throw new Error(`Control ${e} is not a flags type`);let r=this.fields.get(n.index),i=0;if(r){let s=new DataView(r.buffer,r.byteOffset,r.byteLength);i=Pt(s,0,n.field.type)}let o={};for(let s=0;s<n.field.options.length;s++)o[n.field.options[s]]=(i&1<<s)!==0;return o}getVec2(e){let n=this.schema.controlByName.get(e);if(!n)throw new Error(`Unknown control: ${e}`);if(n.field.type!=="vec2")throw new Error(`Control ${e} is not a vec2`);let r=this.fields.get(n.index);if(!r)return[0,0];let i=new DataView(r.buffer,r.byteOffset,r.byteLength);return[i.getFloat32(0,!0),i.getFloat32(4,!0)]}getVec3(e){let n=this.schema.controlByName.get(e);if(!n)throw new Error(`Unknown control: ${e}`);if(n.field.type!=="vec3")throw new Error(`Control ${e} is not a vec3`);let r=this.fields.get(n.index);if(!r)return[0,0,0];let i=new DataView(r.buffer,r.byteOffset,r.byteLength);return[i.getFloat32(0,!0),i.getFloat32(4,!0),i.getFloat32(8,!0)]}getQuat(e){let n=this.schema.controlByName.get(e);if(!n)throw new Error(`Unknown control: ${e}`);if(n.field.type!=="quat")throw new Error(`Control ${e} is not a quat`);let r=this.fields.get(n.index);if(!r)return[0,0,0,1];let i=new DataView(r.buffer,r.byteOffset,r.byteLength);return[i.getFloat32(0,!0),i.getFloat32(4,!0),i.getFloat32(8,!0),i.getFloat32(12,!0)]}hasControl(e){let n=this.schema.controlByName.get(e);if(!n)throw new Error(`Unknown control: ${e}`);return this.fields.has(n.index)}addCommand(e,n){let r=this.schema.commandByName.get(e);if(!r)throw new Error(`Unknown command: ${e}`);let i=new Uint8Array(r.totalSize),o=new DataView(i.buffer);for(let s of r.args){let a=n[s.name];if(a===void 0)throw new Error(`Missing required argument: ${s.name}`);this.encodeValue(o,s.offset,s,a)}this.commandList.push({index:r.index,data:i})}getCommands(){let e=[];for(let{index:n,data:r}of this.commandList){let i=this.schema.commands.find(a=>a.index===n);if(!i)continue;let o=new DataView(r.buffer,r.byteOffset,r.byteLength),s={name:i.name};for(let a of i.args)s[a.name]=this.decodeValue(o,a.offset,a);e.push(s)}return e}encode(){let e=[];for(let[o,s]of this.fields){let a=new Uint8Array(2+s.length);a[0]=o,a[1]=s.length,a.set(s,2),e.push(a)}for(let o of this.commandList){let s=new Uint8Array(2+o.data.length);s[0]=o.index,s[1]=o.data.length,s.set(o.data,2),e.push(s)}let n=e.reduce((o,s)=>o+s.length,0),r=new Uint8Array(n),i=0;for(let o of e)r.set(o,i),i+=o.length;return r}static decode(e,n){let r=new t(e),i=0;for(;i<n.length;){if(i+2>n.length)throw new Error("Truncated TLV field header");let o=n[i],s=n[i+1];if(i+2+s>n.length)throw new Error(`Truncated TLV field data at index ${o}`);let a=n.subarray(i+2,i+2+s);e.controls.find(c=>c.index===o)?r.fields.set(o,new Uint8Array(a)):e.commands.find(f=>f.index===o)&&r.commandList.push({index:o,data:new Uint8Array(a)}),i+=2+s}return r}clear(){this.fields.clear(),this.commandList.length=0}encodeValue(e,n,r,i){if(r.type==="vec2"){let o=i;e.setFloat32(n,o[0],!0),e.setFloat32(n+4,o[1],!0)}else if(r.type==="vec3"){let o=i;e.setFloat32(n,o[0],!0),e.setFloat32(n+4,o[1],!0),e.setFloat32(n+8,o[2],!0)}else if(r.type==="quat"){let o=i;e.setFloat32(n,o[0],!0),e.setFloat32(n+4,o[1],!0),e.setFloat32(n+8,o[2],!0),e.setFloat32(n+12,o[3],!0)}else if(r.arrayLength!==void 0&&r.arrayElementType!==void 0){let o=i,s=Te[r.arrayElementType];for(let a=0;a<Math.min(o.length,r.arrayLength);a++)Bt(e,n+a*s,r.arrayElementType,o[a])}else Bt(e,n,r.type,i)}decodeValue(e,n,r){if(r.type==="vec2")return[e.getFloat32(n,!0),e.getFloat32(n+4,!0)];if(r.type==="vec3")return[e.getFloat32(n,!0),e.getFloat32(n+4,!0),e.getFloat32(n+8,!0)];if(r.type==="quat")return[e.getFloat32(n,!0),e.getFloat32(n+4,!0),e.getFloat32(n+8,!0),e.getFloat32(n+12,!0)];if(r.arrayLength!==void 0&&r.arrayElementType!==void 0){let i=[],o=Te[r.arrayElementType];for(let s=0;s<r.arrayLength;s++)i.push(Pt(e,n+s*o,r.arrayElementType));return i}else return Pt(e,n,r.type)}getDefaultValue(e){return e.type==="vec2"?[0,0]:e.type==="vec3"?[0,0,0]:e.type==="quat"?[0,0,0,1]:e.arrayLength!==void 0?new Array(e.arrayLength).fill(0):e.type==="bool"?!1:0}};function Er(t){let e=ji(t);return{create(){return new tt(e)},decode(n){return tt.decode(e,n)},get schema(){return e}}}function Tr(t,e){return((e&65535)<<16|t&65535)>>>0}function ke(t){return t&65535}function to(t){return t>>>16&65535}function pe(t){return t.subarray(8,40)}function $t(t,e){if(e.length!==32)throw new Error(`stateId must be ${32} bytes, got ${e.length}`);t.set(e,8)}function kr(t,e){new DataView(t.buffer,t.byteOffset,t.byteLength).setUint32(40,e,!0)}function it(t,e,n){let r=new Uint8Array(68);return r.set(t,0),new DataView(r.buffer).setUint32(32,e,!0),r.set(n,36),ge(r)}function Ar(t,e,n){return it(t,e,et(n))}function Dt(t){return ge(t)}function vr(t,e,n){let r=new ArrayBuffer(t.totalSize),i=new Uint8Array(r),o=new DataView(r);if(o.setUint32(0,1297367376,!0),o.setUint16(4,0,!0),i[6]=n??0,i[7]=0,e){let a=Dt(e);i.set(a,8)}let s=t.freeStackOffset;o.setUint16(s,t.maxEntities,!0);for(let a=0;a<t.maxEntities;a++){let u=t.freeStackOffset+2+a*2;o.setUint16(u,a,!0)}return i}function Ur(t,e){return t.entityTableOffset+e*t.entityRecordSize}function Ft(t,e,n){let r=Ur(t,n);return new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(r,!0)}function no(t){return new DataView(t.buffer,t.byteOffset,t.byteLength).getUint16(4,!0)}function ro(t,e){new DataView(t.buffer,t.byteOffset,t.byteLength).setUint16(4,e,!0)}function io(t,e){return new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(t.freeStackOffset,!0)}function oo(t,e,n){new DataView(e.buffer,e.byteOffset,e.byteLength).setUint16(t.freeStackOffset,n,!0)}function so(t,e){let n=new DataView(e.buffer,e.byteOffset,e.byteLength),r=io(t,e);if(r===0)throw new Error(`No free entity slots available (max: ${t.maxEntities})`);let i=t.freeStackOffset+2+(r-1)*2,o=n.getUint16(i,!0);return oo(t,e,r-1),o}function Cr(t,e){let n=so(t,e),r=Ft(t,e,n);return ro(e,no(e)+1),Tr(n,r)}function ot(t,e,n){if(n===4294967295)return!1;let r=ke(n);if(r>=t.maxEntities)return!1;let i=to(n);return Ft(t,e,r)===i}function Ot(t,e,n){if(n<0)throw new Error("Singleton components do not have component bitmask entries");let r=Ur(t,e)+2,i=Math.floor(n/8),o=n%8;return{byteOffset:r+i,bitIndex:o}}function Ir(t,e,n,r){if(!ot(t,e,n))return!1;let i=t.componentByName.get(r);if(!i)throw new Error(`Unknown component: \'${r}\'`);if(i.isSingleton)throw new Error(`Component \'${r}\' is a singleton and is always present`);let o=ke(n),{byteOffset:s,bitIndex:a}=Ot(t,o,i.index);return(e[s]&1<<a)!==0}function Br(t,e,n,r){if(!ot(t,e,n)){let u=n.toString(16).padStart(8,"0").toUpperCase();throw new Error(`Entity 0x${u} is not alive`)}let i=t.componentByName.get(r);if(!i)throw new Error(`Unknown component: \'${r}\'`);if(i.isSingleton)throw new Error(`Component \'${r}\' is a singleton and cannot be added to entities`);let o=ke(n),{byteOffset:s,bitIndex:a}=Ot(t,o,i.index);e[s]=(e[s]??0)|1<<a}function Pr(t,e,n,r){let i=ke(e);return n.storageOffset+i*n.size+r.offset}function ao(t,e,n){let r=new DataView(t.buffer,t.byteOffset,t.byteLength);switch(n){case"bool":return(t[e]??0)!==0;case"uint8":return t[e]??0;case"int8":return r.getInt8(e);case"uint16":return r.getUint16(e,!0);case"int16":return r.getInt16(e,!0);case"uint32":return r.getUint32(e,!0);case"int32":return r.getInt32(e,!0);case"entityRef":return r.getUint32(e,!0);case"f32":return r.getFloat32(e,!0);default:throw new Error(`Cannot read primitive type: ${n}`)}}function _r(t,e,n,r){let i=new DataView(t.buffer,t.byteOffset,t.byteLength);switch(n){case"bool":t[e]=r?1:0;break;case"uint8":t[e]=r&255;break;case"int8":i.setInt8(e,r);break;case"uint16":i.setUint16(e,r,!0);break;case"int16":i.setInt16(e,r,!0);break;case"uint32":i.setUint32(e,r,!0);break;case"int32":i.setInt32(e,r,!0);break;case"entityRef":i.setUint32(e,r,!0);break;case"f32":i.setFloat32(e,r,!0);break;default:throw new Error(`Cannot write primitive type: ${n}`)}}function co(t,e,n){let r=new DataView(t.buffer,t.byteOffset,t.byteLength);r.setFloat32(e,n[0],!0),r.setFloat32(e+4,n[1],!0)}function uo(t,e,n){let r=new DataView(t.buffer,t.byteOffset,t.byteLength);r.setFloat32(e,n[0],!0),r.setFloat32(e+4,n[1],!0),r.setFloat32(e+8,n[2],!0)}function fo(t,e,n){let r=new DataView(t.buffer,t.byteOffset,t.byteLength);r.setFloat32(e,n[0],!0),r.setFloat32(e+4,n[1],!0),r.setFloat32(e+8,n[2],!0),r.setFloat32(e+12,n[3],!0)}function $r(t,e,n,r,i,o){if(!ot(t,e,n))return;let s=t.componentByName.get(r);if(!s)throw new Error(`Unknown component: \'${r}\'`);if(s.isSingleton)throw new Error(`Component \'${r}\' is a singleton; use singleton accessors instead`);if(!rt(t,e,n,s))return;let a=s.fields.find(f=>f.name===i);if(!a)throw new Error(`Unknown field \'${i}\' in component \'${r}\'`);let u=Pr(t,n,s,a),c=a.type;if(a.arrayLength!==void 0&&a.arrayElementType!==void 0){if(o===void 0)throw new Error(`Field \'${r}.${i}\' is an array, index required`);if(o<0||o>=a.arrayLength)throw new Error(`Array index ${o} out of bounds for ${r}.${i} (length: ${a.arrayLength})`);let f=Ee[a.arrayElementType];if(f===void 0)throw new Error(`Unknown array element type: ${a.arrayElementType}`);u+=o*f,c=a.arrayElementType}return ao(e,u,c)}function w(t,e,n,r,i,o,s){if(!ot(t,e,n)){let d=n.toString(16).padStart(8,"0").toUpperCase();throw new Error(`Entity 0x${d} is not alive`)}let a=t.componentByName.get(r);if(!a)throw new Error(`Unknown component: \'${r}\'`);if(!rt(t,e,n,a)){let d=n.toString(16).padStart(8,"0").toUpperCase();throw new Error(`Entity 0x${d} does not have component \'${r}\'`)}let u=a.fields.find(d=>d.name===i);if(!u)throw new Error(`Unknown field \'${i}\' in component \'${r}\'`);let c=Pr(t,n,a,u),f=u.type;if(u.arrayLength!==void 0&&u.arrayElementType!==void 0){if(s===void 0)throw new Error(`Field \'${r}.${i}\' is an array, index required`);if(s<0||s>=u.arrayLength)throw new Error(`Array index ${s} out of bounds for ${r}.${i} (length: ${u.arrayLength})`);let d=Ee[u.arrayElementType];if(d===void 0)throw new Error(`Unknown array element type: ${u.arrayElementType}`);c+=s*d,f=u.arrayElementType}_r(e,c,f,o)}function rt(t,e,n,r){if(r.isSingleton)throw new Error(`Component \'${r.name}\' is a singleton and cannot be queried per entity`);let i=ke(n),{byteOffset:o,bitIndex:s}=Ot(t,i,r.index);return(e[o]&1<<s)!==0}function Dr(t,e,n,r){if(n.length===0)throw new Error("Query must include at least one component");let i=[];for(let a of n){let u=t.componentByName.get(a);if(!u)throw new Error(`Unknown component: \'${a}\'`);if(u.isSingleton)throw new Error(`Singleton component \'${a}\' cannot be used in queries`);i.push(u)}let o=[];if(r)for(let a of r){let u=t.componentByName.get(a);if(!u)throw new Error(`Unknown component: \'${a}\'`);if(u.isSingleton)throw new Error(`Singleton component \'${a}\' cannot be used in queries`);o.push(u)}function*s(){for(let a=0;a<t.maxEntities;a++){let u=Ft(t,e,a),c=Tr(a,u),f=!0;for(let d of i)if(!rt(t,e,c,d)){f=!1;break}if(f){for(let d of o)if(rt(t,e,c,d)){f=!1;break}f&&(yield c)}}}return s()}function Fr(t,e){if(!t.events||!t.eventByName)throw new Error("Schema has no events");let n=t.eventByName.get(e);if(!n)throw new Error(`Unknown event: \'${e}\'`);return n}function Or(t,e,n){let r=Fr(t,n);new DataView(e.buffer,e.byteOffset,e.byteLength).setUint16(r.storageOffset,0,!0)}function Mr(t,e,n,r){let i=Fr(t,n),o=new DataView(e.buffer,e.byteOffset,e.byteLength),s=o.getUint16(i.storageOffset,!0);if(s>=i.maxEvents)return!1;let a=i.storageOffset+2+s*i.recordSize;for(let u of i.fields){let c=r[u.name];if(c===void 0)throw new Error(`Missing required field \'${u.name}\' for event \'${n}\'`);let f=a+u.offset;u.type==="vec2"?co(e,f,c):u.type==="vec3"?uo(e,f,c):u.type==="quat"?fo(e,f,c):_r(e,f,u.type,c)}return o.setUint16(i.storageOffset,s+1,!0),!0}function st(t){if(t.length!==32)throw new Error(`stateId must be ${32} bytes, got ${t.length}`);return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}var at=class{constructor(e={}){y(this,"cache");y(this,"maxSize");this.cache=new Map,this.maxSize=e.maxSize??100}store(e){let n=pe(e),r=st(n);if(this.cache.size>=this.maxSize&&!this.cache.has(r)){let i=this.cache.keys().next().value;i!==void 0&&this.cache.delete(i)}this.cache.set(r,e.slice())}getByStateId(e){let n=st(e),r=this.cache.get(n);return r?r.slice():void 0}getCached(e,n,r){let i=pe(e),o=it(i,n,r);return this.getByStateId(o)}has(e){let n=st(e);return this.cache.has(n)}hasCached(e,n,r){let i=pe(e),o=it(i,n,r);return this.has(o)}delete(e){let n=st(e);return this.cache.delete(n)}clear(){this.cache.clear()}get size(){return this.cache.size}keys(){return this.cache.keys()}};var Ae=65536,ct=class{constructor(e){y(this,"memory",null);y(this,"plugins",[]);y(this,"options");y(this,"stateSize",null);y(this,"statePtr",null);y(this,"initDataPtr",null);y(this,"initDataSize",null);y(this,"heapPos",0);y(this,"arenaResetMark",0);y(this,"inputCodec",null);y(this,"playerEntities",new Map);y(this,"hostAlloc",(e,n)=>{let r=this.memory;if(!r)throw new Error("Memory not initialized for host_alloc");let i=this.heapPos+n-1&~(n-1),o=i+e,s=r.buffer.byteLength;if(o>s){let u=Math.ceil((o-s)/Ae);if(this.options.debug){let c=(s+u*Ae)/1048576;console.warn(`[mt] WASM memory grew to ${c.toFixed(1)}MB`)}r.grow(u)}return new Uint8Array(r.buffer).fill(0,i,o),this.heapPos=o,i});this.options=e}markArenaReset(){this.arenaResetMark=this.heapPos}resetArena(){this.heapPos=this.arenaResetMark}async init(){if(this.stateSize=this.options.stateSchema.totalSize,!this.stateSize)throw new Error("State schema total size is required");this.options.inputSchema&&(this.inputCodec=Er(this.options.inputSchema));let e=4*1024*1024,n=this.options.plugins??(this.options.moduleBytes?[{name:"main",wasmBytes:this.options.moduleBytes,reservedBytes:e}]:[]);for(let u of n)if(typeof u.reservedBytes!="number"||u.reservedBytes<=0)throw new Error(`Plugin "${u.name}" requires reservedBytes > 0`);let r=n.reduce((u,c)=>{let f=Math.ceil(c.reservedBytes/Ae)*Ae;return u+f},0),i=1024*1024*5,o=this.stateSize+i+r,s=Math.ceil(o/Ae);this.memory=new WebAssembly.Memory({initial:s}),this.heapPos=r;let a={env:{memory:this.memory,host_alloc:this.hostAlloc,abort:()=>{throw new Error("WASM abort called")}}};for(let u of n){let c=u.wasmBytes.slice().buffer,f=await WebAssembly.compile(c),d=await WebAssembly.instantiate(f,a);if(typeof d.exports.apply!="function")throw new Error(`Plugin "${u.name}" missing required apply() export`);this.plugins.push({name:u.name,instance:d,exports:d.exports})}if(this.statePtr=this.hostAlloc(this.stateSize,8),this.options.initDataSchema&&this.options.initDataSchema.items.length>0){let u=this.options.initDataSchema,c=this.options.initData;if(!c)throw new Error("initData is required when initDataSchema is provided");this.initDataSize=u.totalSize,this.initDataPtr=this.hostAlloc(this.initDataSize,8),this.writeInitData(u,c);for(let f of this.plugins){let d=f.instance.exports.set_init_data_ptr;typeof d=="function"&&d(this.initDataPtr)}this.options.debug&&console.log(`[mt] Init data allocated at ${this.initDataPtr}, size ${this.initDataSize} bytes`)}return this.markArenaReset(),this}writeInitData(e,n){let r=this.memory;if(!r||this.initDataPtr===null)throw new Error("Memory or init data pointer not initialized");let i=new DataView(r.buffer,this.initDataPtr,e.totalSize);i.setUint32(0,br,!0),i.setUint32(4,e.totalSize,!0);for(let o of e.items){let s=n[o.name];if(s===void 0)throw new Error(`Missing required init data item: ${o.name}`);o.isBlob?this.writeInitDataBlob(i,o,s):this.writeInitDataCompound(i,o,s)}}writeInitDataBlob(e,n,r){let i;if(typeof r=="string"){let s=atob(r);i=new Uint8Array(s.length);for(let a=0;a<s.length;a++)i[a]=s.charCodeAt(a)}else if(r instanceof Uint8Array)i=r;else throw new Error(`Init data blob "${n.name}" must be a base64 string or Uint8Array`);if(i.length>n.blobMaxSize)throw new Error(`Init data blob "${n.name}" exceeds maxSize: ${i.length} > ${n.blobMaxSize}`);let o=n.storageOffset;e.setUint32(o,i.length,!0);for(let s=0;s<i.length;s++)e.setUint8(o+4+s,i[s])}writeInitDataCompound(e,n,r){for(let i of n.fields){let o=r[i.name];if(o===void 0)throw new Error(`Missing required init data field: ${n.name}.${i.name}`);this.writeInitDataField(e,n.storageOffset,i,o)}}writeInitDataField(e,n,r,i){let o=n+r.offset,s=xr(r.type);if(s){let c=i;if(!Array.isArray(c))throw new Error(`Expected array for vec3[] field, got ${typeof i}`);for(let f=0;f<c.length&&f<s.length;f++){let d=c[f];Array.isArray(d)?(e.setFloat32(o+f*12,d[0]??0,!0),e.setFloat32(o+f*12+4,d[1]??0,!0),e.setFloat32(o+f*12+8,d[2]??0,!0)):(e.setFloat32(o+f*12,d.x??0,!0),e.setFloat32(o+f*12+4,d.y??0,!0),e.setFloat32(o+f*12+8,d.z??0,!0))}return}let a=wr(r.type);if(a){let c=i;if(!Array.isArray(c))throw new Error(`Expected array for vec2[] field, got ${typeof i}`);for(let f=0;f<c.length&&f<a.length;f++){let d=c[f];Array.isArray(d)?(e.setFloat32(o+f*8,d[0]??0,!0),e.setFloat32(o+f*8+4,d[1]??0,!0)):(e.setFloat32(o+f*8,d.x??0,!0),e.setFloat32(o+f*8+4,d.y??0,!0))}return}if(r.type==="vec3"){let c=i;Array.isArray(c)?(e.setFloat32(o,c[0]??0,!0),e.setFloat32(o+4,c[1]??0,!0),e.setFloat32(o+8,c[2]??0,!0)):(e.setFloat32(o,c.x??0,!0),e.setFloat32(o+4,c.y??0,!0),e.setFloat32(o+8,c.z??0,!0));return}if(r.type==="vec2"){let c=i;Array.isArray(c)?(e.setFloat32(o,c[0]??0,!0),e.setFloat32(o+4,c[1]??0,!0)):(e.setFloat32(o,c.x??0,!0),e.setFloat32(o+4,c.y??0,!0));return}if(r.type==="quat"){let c=i;Array.isArray(c)?(e.setFloat32(o,c[0]??0,!0),e.setFloat32(o+4,c[1]??0,!0),e.setFloat32(o+8,c[2]??0,!0),e.setFloat32(o+12,c[3]??1,!0)):(e.setFloat32(o,c.x??0,!0),e.setFloat32(o+4,c.y??0,!0),e.setFloat32(o+8,c.z??0,!0),e.setFloat32(o+12,c.w??1,!0));return}let u=gr(r.type);if(u&&r.arrayElementType){let c=i;if(!Array.isArray(c))throw new Error(`Expected array for ${r.type} field, got ${typeof i}`);let f=Ee[r.arrayElementType]??1;for(let d=0;d<c.length&&d<u.length;d++)this.writeScalar(e,o+d*f,r.arrayElementType,c[d]??0);return}this.writeScalar(e,o,r.type,i)}writeScalar(e,n,r,i){switch(r){case"bool":e.setUint8(n,i?1:0);break;case"uint8":e.setUint8(n,i);break;case"int8":e.setInt8(n,i);break;case"uint16":e.setUint16(n,i,!0);break;case"int16":e.setInt16(n,i,!0);break;case"uint32":case"entityRef":e.setUint32(n,i,!0);break;case"int32":e.setInt32(n,i,!0);break;case"f32":e.setFloat32(n,i,!0);break;default:throw new Error(`Unknown scalar type: ${r}`)}}findPlayerEntity(e,n){let r=this.options.stateSchema,i=this.playerEntities.get(n);if(i!==void 0){if(Ir(r,e,i,"Player"))return i;this.playerEntities.delete(n)}for(let o of Dr(r,e,["Player"]))if($r(r,e,o,"Player","index")===n)return this.playerEntities.set(n,o),o}spawnPlayerEntity(e,n){let r=this.options.stateSchema,i=Cr(r,e);return Br(r,e,i,"Player"),w(r,e,i,"Player","index",n),this.playerEntities.set(n,i),i}findOrSpawnPlayerEntity(e,n){let r=this.findPlayerEntity(e,n);return r!==void 0?r:this.spawnPlayerEntity(e,n)}resetPlayerControls(e,n){let r=this.options.stateSchema;if(this.inputCodec)for(let i of this.inputCodec.schema.controls){if(i.retain==="always")continue;let o=i.field.type,s=i.name;if(o==="vec2")w(r,e,n,"Player",`${s}_x`,0),w(r,e,n,"Player",`${s}_y`,0);else if(o==="vec3")w(r,e,n,"Player",`${s}_x`,0),w(r,e,n,"Player",`${s}_y`,0),w(r,e,n,"Player",`${s}_z`,0);else if(o==="quat")w(r,e,n,"Player",`${s}_x`,0),w(r,e,n,"Player",`${s}_y`,0),w(r,e,n,"Player",`${s}_z`,0),w(r,e,n,"Player",`${s}_w`,1);else if(o.startsWith("flags"))w(r,e,n,"Player",s,0);else if(o.includes("[")){let a=o.match(/\\[(\\d+)\\]/);if(a?.[1]){let u=parseInt(a[1],10);for(let c=0;c<u;c++)w(r,e,n,"Player",s,0,c)}}else w(r,e,n,"Player",s,o==="bool"?!1:0)}}writeControlsToPlayer(e,n,r){let i=this.options.stateSchema,o=this.options.inputSchema;if(o)for(let s of o.controls){if(!r.hasControl(s.name))continue;let a=s.type,u=s.name;if(a==="vec2"){let[c,f]=r.getVec2(u);w(i,e,n,"Player",`${u}_x`,c),w(i,e,n,"Player",`${u}_y`,f)}else if(a==="vec3"){let[c,f,d]=r.getVec3(u);w(i,e,n,"Player",`${u}_x`,c),w(i,e,n,"Player",`${u}_y`,f),w(i,e,n,"Player",`${u}_z`,d)}else if(a==="quat"){let[c,f,d,g]=r.getQuat(u);w(i,e,n,"Player",`${u}_x`,c),w(i,e,n,"Player",`${u}_y`,f),w(i,e,n,"Player",`${u}_z`,d),w(i,e,n,"Player",`${u}_w`,g)}else if(a.startsWith("flags")){let c=r.getControl(u);w(i,e,n,"Player",u,c)}else if(a.includes("[")){let c=r.getControl(u);for(let f=0;f<c.length;f++)w(i,e,n,"Player",u,c[f],f)}else{let c=r.getControl(u);w(i,e,n,"Player",u,c)}}}pushCommands(e,n,r){let i=this.options.stateSchema,o=r.getCommands();for(let s of o){let a=s.name.charAt(0).toUpperCase()+s.name.slice(1)+"Command",u={player_index:n};for(let[c,f]of Object.entries(s))c!=="name"&&(Array.isArray(f)?f.length===2?(u[`${c}_x`]=f[0],u[`${c}_y`]=f[1]):f.length===3?(u[`${c}_x`]=f[0],u[`${c}_y`]=f[1],u[`${c}_z`]=f[2]):f.length===4&&(u[`${c}_x`]=f[0],u[`${c}_y`]=f[1],u[`${c}_z`]=f[2],u[`${c}_w`]=f[3]):u[c]=f);Mr(i,e,a,u)}}clearCommandEvents(e){let n=this.options.stateSchema,r=this.options.inputSchema;if(!(!r||!n.events))for(let i of r.commands){let o=i.name.charAt(0).toUpperCase()+i.name.slice(1)+"Command";n.eventByName?.has(o)&&Or(n,e,o)}}decodePayloadsToState(e,n){if(this.inputCodec)for(let r=0;r<n.length;r++){let i=n[r];if(i===void 0)continue;let o=this.findOrSpawnPlayerEntity(e,r);if(this.resetPlayerControls(e,o),i.length===0)continue;let s=this.inputCodec.decode(i);this.writeControlsToPlayer(e,o,s),this.pushCommands(e,r,s)}}transition(e,n){let r=this.stateSize;if(r===null||e.length!==r)throw new Error(`State size mismatch: expected ${this.stateSize}, got ${e.length}`);if(this.plugins.length===0||n.length===0)return e.slice();let i=this.memory;if(!i)throw new Error("WASM memory not initialized");let o=this.statePtr;if(o===null||o<0)throw new Error("State pointer not initialized");let s=new Uint8Array(i.buffer);s.set(e,o);for(let a of n){let u=new Uint8Array(i.buffer,o,r);kr(u,a.tick),this.clearCommandEvents(u),this.decodePayloadsToState(u,a.payloads);for(let c of this.plugins)c.exports.apply(o),s=new Uint8Array(i.buffer)}return s.slice(o,o+r)}close(){}getStateSize(){let e=this.stateSize;if(e===null||e<0)throw new Error("State size not initialized");return e}};var Y=class{constructor(e=1e3,n=1024){y(this,"buffer");y(this,"windowMs");y(this,"head",0);y(this,"tail",0);y(this,"size",0);this.windowMs=e,this.buffer=new Float64Array(n)}inc(){let e=performance.now();this.buffer[this.head]=e,this.head=(this.head+1)%this.buffer.length,this.size<this.buffer.length?this.size++:this.tail=(this.tail+1)%this.buffer.length}count(e=performance.now()){let n=e-this.windowMs;for(;this.size>0&&!(this.buffer[this.tail]>=n);)this.tail=(this.tail+1)%this.buffer.length,this.size--;return this.size}rate(e=performance.now()){return this.count(e)*(1e3/this.windowMs)}};function lo(t){return("moduleBytes"in t||"plugins"in t)&&"stateSchema"in t}function po(t,e){for(let n=t.length-1;n>=0;n--)if(e(t[n]))return n;return-1}var ut=class{constructor(e){y(this,"debug");y(this,"stateSchema");y(this,"inputs",null);y(this,"cache");y(this,"executor",null);y(this,"genesisStateId");y(this,"options");y(this,"ticking",!1);y(this,"tickGraceMs");y(this,"tickLag");y(this,"maxBatchSize");y(this,"currentState");y(this,"currentTick");y(this,"currentNodeId");y(this,"prevOnStateUpdateState",null);y(this,"onStateUpdate");y(this,"syncCheckpoint");y(this,"stateHistory",[]);y(this,"maxHistory",64);y(this,"stats");y(this,"loop",()=>{this._loop().catch(mo)});y(this,"_loop",async()=>{if(this.ticking)try{let e=await this.tick();if(this.onStateUpdate&&this.currentState!==this.prevOnStateUpdateState&&(this.onStateUpdate(this.currentState),this.prevOnStateUpdateState=this.currentState,this.stats.updates.inc()),e.rolledBack&&this.stats.rollbacks.inc(),e.ticksComputed>0)for(let n=0;n<e.ticksComputed;n++)this.stats.executions.inc()}catch(e){console.error("Error in tick loop:",e)}finally{setTimeout(this.loop,this.tickGraceMs)}});e.log&&(this.inputs=e.log),this.debug=e.debug??!1,this.options=e,this.stateSchema=e.stateSchema,this.cache=e.cache??new at,this.genesisStateId=Dt(e.genesisHash),this.tickGraceMs=e.tickGraceMs??10,this.tickLag=e.tickLag??1,this.maxBatchSize=e.maxBatchSize??200,this.stats={rollbacks:new Y,executions:new Y,updates:new Y,cacheHits:new Y,cacheMisses:new Y},this.currentState=vr(this.stateSchema,e.genesisHash,e.tickRate),this.currentNodeId=null,this.syncCheckpoint=null,this.currentTick=null,this.cache.store(this.currentState)}setLog(e){this.inputs=dt(e)}setOnStateUpdate(e){e===null&&(this.prevOnStateUpdateState=null),this.onStateUpdate=e}async init(){if(!this.inputs)throw new Error("Rollback.init() called before log was configured. Call setLog() first or pass log in options.");let e=this.options.executor;if(lo(e)){let r=new ct(e);await r.init(),this.executor=r}else this.executor=e;if((await this.tick(0)).ticksComputed===0||this.currentTick===null)throw new Error("Failed to record genesis snapshot");return this.options.disableTicking||(this.ticking=!0,this.loop()),this.getState()}async tick(e){if(!this.inputs)throw new Error("Rollback.tick() called before log was configured. Call setLog() and init() first.");let n=await this.inputs.getTicksAfter(this.currentNodeId,{limit:this.maxBatchSize,lag:this.tickLag});if(e&&(n=n.filter(a=>a.tick<=e)),n.length===0)return{state:this.currentState,tick:this.currentTick,nodeId:this.currentNodeId??"",rolledBack:!1,ticksComputed:0};let r=!1,i=null;this.currentTick!==null&&n[0].tick<this.currentTick&&(r=!0,i=this.currentTick,this.rollbackTo(n[0]));let o=n.filter(a=>this.currentTick===null||a.tick>this.currentTick);if(o.length===0)return this.currentNodeId=n[n.length-1].id,{state:this.currentState,tick:this.currentTick,nodeId:this.currentNodeId,rolledBack:r,ticksComputed:0};let s=this.processTicks(o,r,i);return{state:this.currentState,tick:this.currentTick,nodeId:this.currentNodeId??"",rolledBack:r,ticksComputed:s}}async getStats(){return{rollbacks:this.stats.rollbacks.rate(),executions:this.stats.executions.rate(),updates:this.stats.updates.rate(),cacheHits:this.stats.cacheHits.rate(),cacheMisses:this.stats.cacheMisses.rate()}}processTicks(e,n=!1,r=null){if(!this.executor)throw new Error("Executor not initialized");let i=0,o=0;for(let c=0;c<e.length;c++){let f=e[c],d=et(f.payloads),g=this.cache.getCached(this.currentState,f.tick,d);if(g)this.currentState=g,this.currentTick=f.tick,this.currentNodeId=f.id,o=c+1,f.sync&&this.updateSyncCheckpoint(f);else break}if(n&&r!==null&&o>0)for(let c=0;c<o;c++)e[c].tick<=r&&this.stats.cacheHits.inc();let s=e.slice(o);if(s.length===0)return 0;let a=po(s,c=>c.sync);if(a>=0){let c=s.slice(0,a+1),f=this.executor.transition(this.currentState,c),d=this.computeBatchStateId(this.currentState,c);$t(f,d);let g=c[c.length-1];this.currentState=f,this.currentTick=g.tick,this.currentNodeId=g.id,i+=c.length,this.cache.store(f),this.recordStateSnapshot(this.currentTick,this.currentNodeId,d),this.updateSyncCheckpoint(g)}let u=a>=0?s.slice(a+1):s;if(u.length>0){let c=this.executor.transition(this.currentState,u),f=this.computeBatchStateId(this.currentState,u);$t(c,f);let d=u[u.length-1];this.currentState=c,this.currentTick=d.tick,this.currentNodeId=d.id,i+=u.length,this.cache.store(c),this.recordStateSnapshot(this.currentTick,this.currentNodeId,f)}if(n&&r!==null)for(let c of s)c.tick<=r&&this.stats.cacheMisses.inc();return i}computeBatchStateId(e,n){let r=pe(e);for(let i of n)r=Ar(r,i.tick,i.payloads);return r}getState(){return this.currentState.slice()}getTick(){return this.currentTick}reset(){this.currentTick=0,this.currentNodeId=null,this.syncCheckpoint=null}close(){this.ticking=!1,this.setOnStateUpdate(null),this.executor&&(this.executor.close(),this.executor=null)}rollbackTo(e){if(this.syncCheckpoint&&this.syncCheckpoint.tick>=e.tick){this.currentState=this.syncCheckpoint.state.slice(),this.currentTick=this.syncCheckpoint.tick,this.currentNodeId=this.syncCheckpoint.nodeId;return}if(this.syncCheckpoint&&this.syncCheckpoint.tick<e.tick){this.currentState=this.syncCheckpoint.state.slice(),this.currentTick=this.syncCheckpoint.tick,this.currentNodeId=this.syncCheckpoint.nodeId;return}let n=e.tick-1,r=this.findSnapshotAtOrBefore(n);if(r){let o=this.cache.getByStateId(r.stateId);if(o){this.currentState=o,this.currentTick=r.tick,this.currentNodeId=r.nodeId;return}}let i=this.cache.getByStateId(this.genesisStateId);if(i){this.currentState=i,this.currentTick=0,this.currentNodeId=null;return}}updateSyncCheckpoint(e){this.syncCheckpoint={state:this.currentState.slice(),tick:e.tick,nodeId:e.id}}recordStateSnapshot(e,n,r){this.stateHistory.push({tick:e,nodeId:n,stateId:r.slice()}),this.stateHistory.length>this.maxHistory&&this.stateHistory.shift()}findSnapshotAtOrBefore(e){for(let n=this.stateHistory.length-1;n>=0;n--){let r=this.stateHistory[n];if(r.tick<=e)return r}return null}};function mo(t){console.warn("rollback unexpected:",t)}Pe(ut);var ja=null;globalThis.onerror=t=>(console.error("\\u{1F534} FATAL ROLLBACK WORKER ERROR (Uncaught Exception):",t),!0);export{ja as default};\n/*! Bundled license information:\n\ncomlink/dist/esm/comlink.mjs:\n (**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n *)\n\n@noble/secp256k1/index.js:\n (*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) *)\n\n@noble/hashes/esm/utils.js:\n (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n*/\n';
|
|
8092
|
+
var workerCode = 'var Nr=Object.defineProperty;var zr=(t,e,n)=>e in t?Nr(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var y=(t,e,n)=>zr(t,typeof e!="symbol"?e+"":e,n);var Rt=Symbol("Comlink.proxy"),Rr=Symbol("Comlink.endpoint"),Hr=Symbol("Comlink.releaseProxy"),ut=Symbol("Comlink.finalizer"),Ce=Symbol("Comlink.thrown"),Ht=t=>typeof t=="object"&&t!==null||typeof t=="function",Lr={canHandle:t=>Ht(t)&&t[Rt],serialize(t){let{port1:e,port2:n}=new MessageChannel;return Be(t,e),[n,[n]]},deserialize(t){return t.start(),lt(t)}},Vr={canHandle:t=>Ht(t)&&Ce in t,serialize({value:t}){let e;return t instanceof Error?e={isError:!0,value:{message:t.message,name:t.name,stack:t.stack}}:e={isError:!1,value:t},[e,[]]},deserialize(t){throw t.isError?Object.assign(new Error(t.value.message),t.value):t.value}},Lt=new Map([["proxy",Lr],["throw",Vr]]);function Gr(t,e){for(let n of t)if(e===n||n==="*"||n instanceof RegExp&&n.test(e))return!0;return!1}function Be(t,e=globalThis,n=["*"]){e.addEventListener("message",function r(i){if(!i||!i.data)return;if(!Gr(n,i.origin)){console.warn(`Invalid origin \'${i.origin}\' for comlink proxy`);return}let{id:o,type:s,path:a}=Object.assign({path:[]},i.data),c=(i.data.argumentList||[]).map(j),u;try{let f=a.slice(0,-1).reduce((g,E)=>g[E],t),d=a.reduce((g,E)=>g[E],t);switch(s){case"GET":u=d;break;case"SET":f[a.slice(-1)[0]]=j(i.data.value),u=!0;break;case"APPLY":u=d.apply(f,c);break;case"CONSTRUCT":{let g=new d(...c);u=jr(g)}break;case"ENDPOINT":{let{port1:g,port2:E}=new MessageChannel;Be(t,E),u=Wr(g,[g])}break;case"RELEASE":u=void 0;break;default:return}}catch(f){u={value:f,[Ce]:0}}Promise.resolve(u).catch(f=>({value:f,[Ce]:0})).then(f=>{let[d,g]=Ue(f);e.postMessage(Object.assign(Object.assign({},d),{id:o}),g),s==="RELEASE"&&(e.removeEventListener("message",r),Vt(e),ut in t&&typeof t[ut]=="function"&&t[ut]())}).catch(f=>{let[d,g]=Ue({value:new TypeError("Unserializable return value"),[Ce]:0});e.postMessage(Object.assign(Object.assign({},d),{id:o}),g)})}),e.start&&e.start()}function Zr(t){return t.constructor.name==="MessagePort"}function Vt(t){Zr(t)&&t.close()}function lt(t,e){let n=new Map;return t.addEventListener("message",function(i){let{data:o}=i;if(!o||!o.id)return;let s=n.get(o.id);if(s)try{s(o)}finally{n.delete(o.id)}}),ft(t,n,[],e)}function Ae(t){if(t)throw new Error("Proxy has been released and is not useable")}function Gt(t){return ie(t,new Map,{type:"RELEASE"}).then(()=>{Vt(t)})}var Ie=new WeakMap,ve="FinalizationRegistry"in globalThis&&new FinalizationRegistry(t=>{let e=(Ie.get(t)||0)-1;Ie.set(t,e),e===0&&Gt(t)});function qr(t,e){let n=(Ie.get(e)||0)+1;Ie.set(e,n),ve&&ve.register(t,e,t)}function Kr(t){ve&&ve.unregister(t)}function ft(t,e,n=[],r=function(){}){let i=!1,o=new Proxy(r,{get(s,a){if(Ae(i),a===Hr)return()=>{Kr(o),Gt(t),e.clear(),i=!0};if(a==="then"){if(n.length===0)return{then:()=>o};let c=ie(t,e,{type:"GET",path:n.map(u=>u.toString())}).then(j);return c.then.bind(c)}return ft(t,e,[...n,a])},set(s,a,c){Ae(i);let[u,f]=Ue(c);return ie(t,e,{type:"SET",path:[...n,a].map(d=>d.toString()),value:u},f).then(j)},apply(s,a,c){Ae(i);let u=n[n.length-1];if(u===Rr)return ie(t,e,{type:"ENDPOINT"}).then(j);if(u==="bind")return ft(t,e,n.slice(0,-1));let[f,d]=zt(c);return ie(t,e,{type:"APPLY",path:n.map(g=>g.toString()),argumentList:f},d).then(j)},construct(s,a){Ae(i);let[c,u]=zt(a);return ie(t,e,{type:"CONSTRUCT",path:n.map(f=>f.toString()),argumentList:c},u).then(j)}});return qr(o,t),o}function Yr(t){return Array.prototype.concat.apply([],t)}function zt(t){let e=t.map(Ue);return[e.map(n=>n[0]),Yr(e.map(n=>n[1]))]}var Zt=new WeakMap;function Wr(t,e){return Zt.set(t,e),t}function jr(t){return Object.assign(t,{[Rt]:!0})}function Ue(t){for(let[e,n]of Lt)if(n.canHandle(t)){let[r,i]=n.serialize(t);return[{type:"HANDLER",name:e,value:r},i]}return[{type:"RAW",value:t},Zt.get(t)||[]]}function j(t){switch(t.type){case"HANDLER":return Lt.get(t.name).deserialize(t.value);case"RAW":return t.value}}function ie(t,e,n,r){return new Promise(i=>{let o=Xr();e.set(o,i),t.start&&t.start(),t.postMessage(Object.assign({id:o},n),r)})}function Xr(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}var Jr={p:0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn,n:0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n,h:1n,a:0n,b:7n,Gx:0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798n,Gy:0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8n},{p:J,n:ht,Gx:Qr,Gy:ei,b:Jt}=Jr,oe=32,dt=64,I=(t="")=>{throw new Error(t)},Qt=t=>typeof t=="bigint",en=t=>typeof t=="string",ti=t=>t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array",he=(t,e)=>!ti(t)||typeof e=="number"&&e>0&&t.length!==e?I("Uint8Array expected"):t,Oe=t=>new Uint8Array(t),ni=t=>Uint8Array.from(t),tn=(t,e)=>t.toString(16).padStart(e,"0"),yt=t=>Array.from(he(t)).map(e=>tn(e,2)).join(""),V={_0:48,_9:57,A:65,F:70,a:97,f:102},qt=t=>{if(t>=V._0&&t<=V._9)return t-V._0;if(t>=V.A&&t<=V.F)return t-(V.A-10);if(t>=V.a&&t<=V.f)return t-(V.a-10)},gt=t=>{let e="hex invalid";if(!en(t))return I(e);let n=t.length,r=n/2;if(n%2)return I(e);let i=Oe(r);for(let o=0,s=0;o<r;o++,s+=2){let a=qt(t.charCodeAt(s)),c=qt(t.charCodeAt(s+1));if(a===void 0||c===void 0)return I(e);i[o]=a*16+c}return i},bt=(t,e)=>he(en(t)?gt(t):ni(he(t)),e),nn=()=>globalThis?.crypto,ri=()=>nn()?.subtle??I("crypto.subtle must be defined"),_e=(...t)=>{let e=Oe(t.reduce((r,i)=>r+he(i).length,0)),n=0;return t.forEach(r=>{e.set(r,n),n+=r.length}),e},ii=(t=oe)=>nn().getRandomValues(Oe(t)),$e=BigInt,ye=(t,e,n,r="bad number: out of range")=>Qt(t)&&e<=t&&t<n?t:I(r),h=(t,e=J)=>{let n=t%e;return n>=0n?n:e+n};var rn=(t,e)=>{(t===0n||e<=0n)&&I("no inverse n="+t+" mod="+e);let n=h(t,e),r=e,i=0n,o=1n,s=1n,a=0n;for(;n!==0n;){let c=r/n,u=r%n,f=i-s*c,d=o-a*c;r=n,n=u,i=s,o=a,s=f,a=d}return r===1n?h(i,e):I("no inverse")};var Kt=t=>t instanceof Q?t:I("Point expected"),on=t=>h(h(t*t)*t+Jt),Yt=t=>ye(t,0n,J),Pe=t=>ye(t,1n,J),oi=t=>ye(t,1n,ht),pt=t=>(t&1n)===0n,sn=t=>Uint8Array.of(t),si=t=>sn(pt(t)?2:3),ai=t=>{let e=on(Pe(t)),n=1n;for(let r=e,i=(J+1n)/4n;i>0n;i>>=1n)i&1n&&(n=n*r%J),r=r*r%J;return h(n*n)===e?n:I("sqrt invalid")},N=class N{constructor(e,n,r){y(this,"px");y(this,"py");y(this,"pz");this.px=Yt(e),this.py=Pe(n),this.pz=Yt(r),Object.freeze(this)}static fromBytes(e){he(e);let n,r=e[0],i=e.subarray(1),o=Wt(i,0,oe),s=e.length;if(s===oe+1&&[2,3].includes(r)){let a=ai(o),c=pt(a);pt($e(r))!==c&&(a=h(-a)),n=new N(o,a,1n)}return s===dt+1&&r===4&&(n=new N(o,Wt(i,oe,dt),1n)),n?n.assertValidity():I("bad point: not on curve")}equals(e){let{px:n,py:r,pz:i}=this,{px:o,py:s,pz:a}=Kt(e),c=h(n*a),u=h(o*i),f=h(r*a),d=h(s*i);return c===u&&f===d}is0(){return this.equals(X)}negate(){return new N(this.px,h(-this.py),this.pz)}double(){return this.add(this)}add(e){let{px:n,py:r,pz:i}=this,{px:o,py:s,pz:a}=Kt(e),c=0n,u=Jt,f=0n,d=0n,g=0n,E=h(u*3n),T=h(n*o),A=h(r*s),F=h(i*a),re=h(n+r),C=h(o+s);re=h(re*C),C=h(T+A),re=h(re-C),C=h(n+i);let M=h(o+a);return C=h(C*M),M=h(T+F),C=h(C-M),M=h(r+i),f=h(s+a),M=h(M*f),f=h(A+F),M=h(M-f),g=h(c*C),f=h(E*F),g=h(f+g),f=h(A-g),g=h(A+g),d=h(f*g),A=h(T+T),A=h(A+T),F=h(c*F),C=h(E*C),A=h(A+F),F=h(T-F),F=h(c*F),C=h(C+F),T=h(A*C),d=h(d+T),T=h(M*C),f=h(re*f),f=h(f-T),T=h(re*A),g=h(M*g),g=h(g+T),new N(f,d,g)}multiply(e,n=!0){if(!n&&e===0n)return X;if(oi(e),e===1n)return this;if(this.equals(se))return mi(e).p;let r=X,i=se;for(let o=this;e>0n;o=o.double(),e>>=1n)e&1n?r=r.add(o):n&&(i=i.add(o));return r}toAffine(){let{px:e,py:n,pz:r}=this;if(this.equals(X))return{x:0n,y:0n};if(r===1n)return{x:e,y:n};let i=rn(r,J);return h(r*i)!==1n&&I("inverse invalid"),{x:h(e*i),y:h(n*i)}}assertValidity(){let{x:e,y:n}=this.toAffine();return Pe(e),Pe(n),h(n*n)===on(e)?this:I("bad point: not on curve")}toBytes(e=!0){let{x:n,y:r}=this.assertValidity().toAffine(),i=Fe(n);return e?_e(si(r),i):_e(sn(4),i,Fe(r))}static fromAffine(e){let{x:n,y:r}=e;return n===0n&&r===0n?X:new N(n,r,1n)}toHex(e){return yt(this.toBytes(e))}static fromPrivateKey(e){return se.multiply(ui(e))}static fromHex(e){return N.fromBytes(bt(e))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}toRawBytes(e){return this.toBytes(e)}};y(N,"BASE"),y(N,"ZERO");var Q=N,se=new Q(Qr,ei,1n),X=new Q(0n,1n,0n);Q.BASE=se;Q.ZERO=X;var Me=t=>$e("0x"+(yt(t)||"0")),Wt=(t,e,n)=>Me(t.subarray(e,n)),ci=2n**256n,Fe=t=>gt(tn(ye(t,0n,ci),dt)),ui=t=>{let e=Qt(t)?t:Me(bt(t,oe));return ye(e,1n,ht,"private key invalid 3")};var fi=t=>{t=bt(t),(t.length<oe+8||t.length>1024)&&I("expected 40-1024b");let e=h(Me(t),ht-1n);return Fe(e+1n)};var li="SHA-256",xt={hexToBytes:gt,bytesToHex:yt,concatBytes:_e,bytesToNumberBE:Me,numberToBytesBE:Fe,mod:h,invert:rn,hmacSha256Async:async(t,...e)=>{let n=ri(),r="HMAC",i=await n.importKey("raw",t,{name:r,hash:{name:li}},!1,["sign"]);return Oe(await n.sign(r,i,_e(...e)))},hmacSha256Sync:void 0,hashToPrivateKey:fi,randomBytes:ii};var De=8,di=256,an=Math.ceil(di/De)+1,mt=2**(De-1),pi=()=>{let t=[],e=se,n=e;for(let r=0;r<an;r++){n=e,t.push(n);for(let i=1;i<mt;i++)n=n.add(e),t.push(n);e=n.double()}return t},jt,Xt=(t,e)=>{let n=e.negate();return t?n:e},mi=t=>{let e=jt||(jt=pi()),n=X,r=se,i=2**De,o=i,s=$e(i-1),a=$e(De);for(let c=0;c<an;c++){let u=Number(t&s);t>>=a,u>mt&&(u-=o,t+=1n);let f=c*mt,d=f,g=f+Math.abs(u)-1,E=c%2!==0,T=u<0;u===0?r=r.add(Xt(E,e[d])):n=n.add(Xt(T,e[g]))}return{p:n,f:r}};function yi(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"}function cn(t){if(!Number.isSafeInteger(t)||t<0)throw new Error("positive integer expected, got "+t)}function ce(t,...e){if(!yi(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error("Uint8Array expected of length "+e+", got length="+t.length)}function un(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.createHasher");cn(t.outputLen),cn(t.blockLen)}function ue(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function fn(t,e){ce(t);let n=e.outputLen;if(t.length<n)throw new Error("digestInto() expects output buffer of length at least "+n)}function ee(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function Ne(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}function D(t,e){return t<<32-e|t>>>e}function gi(t){if(typeof t!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(t))}function ge(t){return typeof t=="string"&&(t=gi(t)),ce(t),t}var ae=class{};function ln(t){let e=r=>t().update(ge(r)).digest(),n=t();return e.outputLen=n.outputLen,e.blockLen=n.blockLen,e.create=()=>t(),e}function bi(t,e,n,r){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,n,r);let i=BigInt(32),o=BigInt(4294967295),s=Number(n>>i&o),a=Number(n&o),c=r?4:0,u=r?0:4;t.setUint32(e+c,s,r),t.setUint32(e+u,a,r)}function dn(t,e,n){return t&e^~t&n}function pn(t,e,n){return t&e^t&n^e&n}var ze=class extends ae{constructor(e,n,r,i){super(),this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=e,this.outputLen=n,this.padOffset=r,this.isLE=i,this.buffer=new Uint8Array(e),this.view=Ne(this.buffer)}update(e){ue(this),e=ge(e),ce(e);let{view:n,buffer:r,blockLen:i}=this,o=e.length;for(let s=0;s<o;){let a=Math.min(i-this.pos,o-s);if(a===i){let c=Ne(e);for(;i<=o-s;s+=i)this.process(c,s);continue}r.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(n,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ue(this),fn(e,this),this.finished=!0;let{buffer:n,view:r,blockLen:i,isLE:o}=this,{pos:s}=this;n[s++]=128,ee(this.buffer.subarray(s)),this.padOffset>i-s&&(this.process(r,0),s=0);for(let d=s;d<i;d++)n[d]=0;bi(r,i-8,BigInt(this.length*8),o),this.process(r,0);let a=Ne(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,f=this.get();if(u>f.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d<u;d++)a.setUint32(4*d,f[d],o)}digest(){let{buffer:e,outputLen:n}=this;this.digestInto(e);let r=e.slice(0,n);return this.destroy(),r}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:n,buffer:r,length:i,finished:o,destroyed:s,pos:a}=this;return e.destroyed=s,e.finished=o,e.length=i,e.pos=a,i%n&&e.buffer.set(r),e}clone(){return this._cloneInto()}},G=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var xi=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),q=new Uint32Array(64),Re=class extends ze{constructor(e=32){super(64,e,8,!1),this.A=G[0]|0,this.B=G[1]|0,this.C=G[2]|0,this.D=G[3]|0,this.E=G[4]|0,this.F=G[5]|0,this.G=G[6]|0,this.H=G[7]|0}get(){let{A:e,B:n,C:r,D:i,E:o,F:s,G:a,H:c}=this;return[e,n,r,i,o,s,a,c]}set(e,n,r,i,o,s,a,c){this.A=e|0,this.B=n|0,this.C=r|0,this.D=i|0,this.E=o|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,n){for(let d=0;d<16;d++,n+=4)q[d]=e.getUint32(n,!1);for(let d=16;d<64;d++){let g=q[d-15],E=q[d-2],T=D(g,7)^D(g,18)^g>>>3,A=D(E,17)^D(E,19)^E>>>10;q[d]=A+q[d-7]+T+q[d-16]|0}let{A:r,B:i,C:o,D:s,E:a,F:c,G:u,H:f}=this;for(let d=0;d<64;d++){let g=D(a,6)^D(a,11)^D(a,25),E=f+g+dn(a,c,u)+xi[d]+q[d]|0,A=(D(r,2)^D(r,13)^D(r,22))+pn(r,i,o)|0;f=u,u=c,c=a,a=s+E|0,s=o,o=i,i=r,r=E+A|0}r=r+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,f=f+this.H|0,this.set(r,i,o,s,a,c,u,f)}roundClean(){ee(q)}destroy(){this.set(0,0,0,0,0,0,0,0),ee(this.buffer)}};var te=ln(()=>new Re);var wt=te;var He=class extends ae{constructor(e,n){super(),this.finished=!1,this.destroyed=!1,un(e);let r=ge(n);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let i=this.blockLen,o=new Uint8Array(i);o.set(r.length>i?e.create().update(r).digest():r);for(let s=0;s<o.length;s++)o[s]^=54;this.iHash.update(o),this.oHash=e.create();for(let s=0;s<o.length;s++)o[s]^=106;this.oHash.update(o),ee(o)}update(e){return ue(this),this.iHash.update(e),this}digestInto(e){ue(this),ce(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:n,iHash:r,finished:i,destroyed:o,blockLen:s,outputLen:a}=this;return e=e,e.finished=i,e.destroyed=o,e.blockLen=s,e.outputLen=a,e.oHash=n._cloneInto(e.oHash),e.iHash=r._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},St=(t,e,n)=>new He(t,e).update(n).digest();St.create=(t,e)=>new He(t,e);var wi=["string","number","bigint","symbol"],Si=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function mn(t){if(t===null)return"null";if(t===void 0)return"undefined";if(t===!0||t===!1)return"boolean";let e=typeof t;if(wi.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(t))return"Array";if(Ei(t))return"Buffer";let n=Ti(t);return n||"Object"}function Ei(t){return t&&t.constructor&&t.constructor.isBuffer&&t.constructor.isBuffer.call(null,t)}function Ti(t){let e=Object.prototype.toString.call(t).slice(8,-1);if(Si.includes(e))return e}var l=class{constructor(e,n,r){this.major=e,this.majorEncoded=e<<5,this.name=n,this.terminal=r}toString(){return`Type[${this.major}].${this.name}`}compare(e){return this.major<e.major?-1:this.major>e.major?1:0}};l.uint=new l(0,"uint",!0);l.negint=new l(1,"negint",!0);l.bytes=new l(2,"bytes",!0);l.string=new l(3,"string",!0);l.array=new l(4,"array",!1);l.map=new l(5,"map",!1);l.tag=new l(6,"tag",!1);l.float=new l(7,"float",!0);l.false=new l(7,"false",!0);l.true=new l(7,"true",!0);l.null=new l(7,"null",!0);l.undefined=new l(7,"undefined",!0);l.break=new l(7,"break",!0);var m=class{constructor(e,n,r){this.type=e,this.value=n,this.encodedLength=r,this.encodedBytes=void 0,this.byteValue=void 0}toString(){return`Token[${this.type}].${this.value}`}};var fe=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",ki=new TextDecoder,Ai=new TextEncoder;function Le(t){return fe&&globalThis.Buffer.isBuffer(t)}function Et(t){return t instanceof Uint8Array?Le(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):t:Uint8Array.from(t)}var bn=fe?(t,e,n)=>n-e>64?globalThis.Buffer.from(t.subarray(e,n)).toString("utf8"):yn(t,e,n):(t,e,n)=>n-e>64?ki.decode(t.subarray(e,n)):yn(t,e,n),xn=fe?t=>t.length>64?globalThis.Buffer.from(t):hn(t):t=>t.length>64?Ai.encode(t):hn(t),z=t=>Uint8Array.from(t),le=fe?(t,e,n)=>Le(t)?new Uint8Array(t.subarray(e,n)):t.slice(e,n):(t,e,n)=>t.slice(e,n),wn=fe?(t,e)=>(t=t.map(n=>n instanceof Uint8Array?n:globalThis.Buffer.from(n)),Et(globalThis.Buffer.concat(t,e))):(t,e)=>{let n=new Uint8Array(e),r=0;for(let i of t)r+i.length>n.length&&(i=i.subarray(0,n.length-r)),n.set(i,r),r+=i.length;return n},Sn=fe?t=>globalThis.Buffer.allocUnsafe(t):t=>new Uint8Array(t);function Ve(t,e){if(Le(t)&&Le(e))return t.compare(e);for(let n=0;n<t.length;n++)if(t[n]!==e[n])return t[n]<e[n]?-1:1;return 0}function hn(t){let e=[],n=0;for(let r=0;r<t.length;r++){let i=t.charCodeAt(r);i<128?e[n++]=i:i<2048?(e[n++]=i>>6|192,e[n++]=i&63|128):(i&64512)===55296&&r+1<t.length&&(t.charCodeAt(r+1)&64512)===56320?(i=65536+((i&1023)<<10)+(t.charCodeAt(++r)&1023),e[n++]=i>>18|240,e[n++]=i>>12&63|128,e[n++]=i>>6&63|128,e[n++]=i&63|128):(e[n++]=i>>12|224,e[n++]=i>>6&63|128,e[n++]=i&63|128)}return e}function yn(t,e,n){let r=[];for(;e<n;){let i=t[e],o=null,s=i>239?4:i>223?3:i>191?2:1;if(e+s<=n){let a,c,u,f;switch(s){case 1:i<128&&(o=i);break;case 2:a=t[e+1],(a&192)===128&&(f=(i&31)<<6|a&63,f>127&&(o=f));break;case 3:a=t[e+1],c=t[e+2],(a&192)===128&&(c&192)===128&&(f=(i&15)<<12|(a&63)<<6|c&63,f>2047&&(f<55296||f>57343)&&(o=f));break;case 4:a=t[e+1],c=t[e+2],u=t[e+3],(a&192)===128&&(c&192)===128&&(u&192)===128&&(f=(i&15)<<18|(a&63)<<12|(c&63)<<6|u&63,f>65535&&f<1114112&&(o=f))}}o===null?(o=65533,s=1):o>65535&&(o-=65536,r.push(o>>>10&1023|55296),o=56320|o&1023),r.push(o),e+=s}return Ci(r)}var gn=4096;function Ci(t){let e=t.length;if(e<=gn)return String.fromCharCode.apply(String,t);let n="",r=0;for(;r<e;)n+=String.fromCharCode.apply(String,t.slice(r,r+=gn));return n}var Ii=256,be=class{constructor(e=Ii){this.chunkSize=e,this.cursor=0,this.maxCursor=-1,this.chunks=[],this._initReuseChunk=null}reset(){this.cursor=0,this.maxCursor=-1,this.chunks.length&&(this.chunks=[]),this._initReuseChunk!==null&&(this.chunks.push(this._initReuseChunk),this.maxCursor=this._initReuseChunk.length-1)}push(e){let n=this.chunks[this.chunks.length-1];if(this.cursor+e.length<=this.maxCursor+1){let i=n.length-(this.maxCursor-this.cursor)-1;n.set(e,i)}else{if(n){let i=n.length-(this.maxCursor-this.cursor)-1;i<n.length&&(this.chunks[this.chunks.length-1]=n.subarray(0,i),this.maxCursor=this.cursor-1)}e.length<64&&e.length<this.chunkSize?(n=Sn(this.chunkSize),this.chunks.push(n),this.maxCursor+=n.length,this._initReuseChunk===null&&(this._initReuseChunk=n),n.set(e,0)):(this.chunks.push(e),this.maxCursor+=e.length)}this.cursor+=e.length}toBytes(e=!1){let n;if(this.chunks.length===1){let r=this.chunks[0];e&&this.cursor>r.length/2?(n=this.cursor===r.length?r:r.subarray(0,this.cursor),this._initReuseChunk=null,this.chunks=[]):n=le(r,0,this.cursor)}else n=wn(this.chunks,this.cursor);return e&&this.reset(),n}};var b="CBOR decode error:",Tt="CBOR encode error:",xe=[];xe[23]=1;xe[24]=2;xe[25]=3;xe[26]=5;xe[27]=9;function Z(t,e,n){if(t.length-e<n)throw new Error(`${b} not enough data for type`)}var S=[24,256,65536,4294967296,BigInt("18446744073709551616")];function v(t,e,n){Z(t,e,1);let r=t[e];if(n.strict===!0&&r<S[0])throw new Error(`${b} integer encoded in more bytes than necessary (strict decode)`);return r}function U(t,e,n){Z(t,e,2);let r=t[e]<<8|t[e+1];if(n.strict===!0&&r<S[1])throw new Error(`${b} integer encoded in more bytes than necessary (strict decode)`);return r}function B(t,e,n){Z(t,e,4);let r=t[e]*16777216+(t[e+1]<<16)+(t[e+2]<<8)+t[e+3];if(n.strict===!0&&r<S[2])throw new Error(`${b} integer encoded in more bytes than necessary (strict decode)`);return r}function P(t,e,n){Z(t,e,8);let r=t[e]*16777216+(t[e+1]<<16)+(t[e+2]<<8)+t[e+3],i=t[e+4]*16777216+(t[e+5]<<16)+(t[e+6]<<8)+t[e+7],o=(BigInt(r)<<BigInt(32))+BigInt(i);if(n.strict===!0&&o<S[3])throw new Error(`${b} integer encoded in more bytes than necessary (strict decode)`);if(o<=Number.MAX_SAFE_INTEGER)return Number(o);if(n.allowBigInt===!0)return o;throw new Error(`${b} integers outside of the safe integer range are not supported`)}function En(t,e,n,r){return new m(l.uint,v(t,e+1,r),2)}function Tn(t,e,n,r){return new m(l.uint,U(t,e+1,r),3)}function kn(t,e,n,r){return new m(l.uint,B(t,e+1,r),5)}function An(t,e,n,r){return new m(l.uint,P(t,e+1,r),9)}function _(t,e){return k(t,0,e.value)}function k(t,e,n){if(n<S[0]){let r=Number(n);t.push([e|r])}else if(n<S[1]){let r=Number(n);t.push([e|24,r])}else if(n<S[2]){let r=Number(n);t.push([e|25,r>>>8,r&255])}else if(n<S[3]){let r=Number(n);t.push([e|26,r>>>24&255,r>>>16&255,r>>>8&255,r&255])}else{let r=BigInt(n);if(r<S[4]){let i=[e|27,0,0,0,0,0,0,0],o=Number(r&BigInt(4294967295)),s=Number(r>>BigInt(32)&BigInt(4294967295));i[8]=o&255,o=o>>8,i[7]=o&255,o=o>>8,i[6]=o&255,o=o>>8,i[5]=o&255,i[4]=s&255,s=s>>8,i[3]=s&255,s=s>>8,i[2]=s&255,s=s>>8,i[1]=s&255,t.push(i)}else throw new Error(`${b} encountered BigInt larger than allowable range`)}}_.encodedSize=function(e){return k.encodedSize(e.value)};k.encodedSize=function(e){return e<S[0]?1:e<S[1]?2:e<S[2]?3:e<S[3]?5:9};_.compareTokens=function(e,n){return e.value<n.value?-1:e.value>n.value?1:0};function Cn(t,e,n,r){return new m(l.negint,-1-v(t,e+1,r),2)}function In(t,e,n,r){return new m(l.negint,-1-U(t,e+1,r),3)}function vn(t,e,n,r){return new m(l.negint,-1-B(t,e+1,r),5)}var kt=BigInt(-1),Un=BigInt(1);function Bn(t,e,n,r){let i=P(t,e+1,r);if(typeof i!="bigint"){let o=-1-i;if(o>=Number.MIN_SAFE_INTEGER)return new m(l.negint,o,9)}if(r.allowBigInt!==!0)throw new Error(`${b} integers outside of the safe integer range are not supported`);return new m(l.negint,kt-BigInt(i),9)}function Ge(t,e){let n=e.value,r=typeof n=="bigint"?n*kt-Un:n*-1-1;k(t,e.type.majorEncoded,r)}Ge.encodedSize=function(e){let n=e.value,r=typeof n=="bigint"?n*kt-Un:n*-1-1;return r<S[0]?1:r<S[1]?2:r<S[2]?3:r<S[3]?5:9};Ge.compareTokens=function(e,n){return e.value<n.value?1:e.value>n.value?-1:0};function we(t,e,n,r){Z(t,e,n+r);let i=le(t,e+n,e+n+r);return new m(l.bytes,i,n+r)}function Pn(t,e,n,r){return we(t,e,1,n)}function _n(t,e,n,r){return we(t,e,2,v(t,e+1,r))}function $n(t,e,n,r){return we(t,e,3,U(t,e+1,r))}function Fn(t,e,n,r){return we(t,e,5,B(t,e+1,r))}function Dn(t,e,n,r){let i=P(t,e+1,r);if(typeof i=="bigint")throw new Error(`${b} 64-bit integer bytes lengths not supported`);return we(t,e,9,i)}function Ze(t){return t.encodedBytes===void 0&&(t.encodedBytes=t.type===l.string?xn(t.value):t.value),t.encodedBytes}function de(t,e){let n=Ze(e);k(t,e.type.majorEncoded,n.length),t.push(n)}de.encodedSize=function(e){let n=Ze(e);return k.encodedSize(n.length)+n.length};de.compareTokens=function(e,n){return Ui(Ze(e),Ze(n))};function Ui(t,e){return t.length<e.length?-1:t.length>e.length?1:Ve(t,e)}function Se(t,e,n,r,i){let o=n+r;Z(t,e,o);let s=new m(l.string,bn(t,e+n,e+o),o);return i.retainStringBytes===!0&&(s.byteValue=le(t,e+n,e+o)),s}function On(t,e,n,r){return Se(t,e,1,n,r)}function Mn(t,e,n,r){return Se(t,e,2,v(t,e+1,r),r)}function Nn(t,e,n,r){return Se(t,e,3,U(t,e+1,r),r)}function zn(t,e,n,r){return Se(t,e,5,B(t,e+1,r),r)}function Rn(t,e,n,r){let i=P(t,e+1,r);if(typeof i=="bigint")throw new Error(`${b} 64-bit integer string lengths not supported`);return Se(t,e,9,i,r)}var Hn=de;function pe(t,e,n,r){return new m(l.array,r,n)}function Ln(t,e,n,r){return pe(t,e,1,n)}function Vn(t,e,n,r){return pe(t,e,2,v(t,e+1,r))}function Gn(t,e,n,r){return pe(t,e,3,U(t,e+1,r))}function Zn(t,e,n,r){return pe(t,e,5,B(t,e+1,r))}function qn(t,e,n,r){let i=P(t,e+1,r);if(typeof i=="bigint")throw new Error(`${b} 64-bit integer array lengths not supported`);return pe(t,e,9,i)}function Kn(t,e,n,r){if(r.allowIndefinite===!1)throw new Error(`${b} indefinite length items not allowed`);return pe(t,e,1,1/0)}function qe(t,e){k(t,l.array.majorEncoded,e.value)}qe.compareTokens=_.compareTokens;qe.encodedSize=function(e){return k.encodedSize(e.value)};function me(t,e,n,r){return new m(l.map,r,n)}function Yn(t,e,n,r){return me(t,e,1,n)}function Wn(t,e,n,r){return me(t,e,2,v(t,e+1,r))}function jn(t,e,n,r){return me(t,e,3,U(t,e+1,r))}function Xn(t,e,n,r){return me(t,e,5,B(t,e+1,r))}function Jn(t,e,n,r){let i=P(t,e+1,r);if(typeof i=="bigint")throw new Error(`${b} 64-bit integer map lengths not supported`);return me(t,e,9,i)}function Qn(t,e,n,r){if(r.allowIndefinite===!1)throw new Error(`${b} indefinite length items not allowed`);return me(t,e,1,1/0)}function Ke(t,e){k(t,l.map.majorEncoded,e.value)}Ke.compareTokens=_.compareTokens;Ke.encodedSize=function(e){return k.encodedSize(e.value)};function er(t,e,n,r){return new m(l.tag,n,1)}function tr(t,e,n,r){return new m(l.tag,v(t,e+1,r),2)}function nr(t,e,n,r){return new m(l.tag,U(t,e+1,r),3)}function rr(t,e,n,r){return new m(l.tag,B(t,e+1,r),5)}function ir(t,e,n,r){return new m(l.tag,P(t,e+1,r),9)}function Ye(t,e){k(t,l.tag.majorEncoded,e.value)}Ye.compareTokens=_.compareTokens;Ye.encodedSize=function(e){return k.encodedSize(e.value)};var Di=20,Oi=21,Mi=22,Ni=23;function or(t,e,n,r){if(r.allowUndefined===!1)throw new Error(`${b} undefined values are not supported`);return r.coerceUndefinedToNull===!0?new m(l.null,null,1):new m(l.undefined,void 0,1)}function sr(t,e,n,r){if(r.allowIndefinite===!1)throw new Error(`${b} indefinite length items not allowed`);return new m(l.break,void 0,1)}function At(t,e,n){if(n){if(n.allowNaN===!1&&Number.isNaN(t))throw new Error(`${b} NaN values are not supported`);if(n.allowInfinity===!1&&(t===1/0||t===-1/0))throw new Error(`${b} Infinity values are not supported`)}return new m(l.float,t,e)}function ar(t,e,n,r){return At(Ct(t,e+1),3,r)}function cr(t,e,n,r){return At(It(t,e+1),5,r)}function ur(t,e,n,r){return At(pr(t,e+1),9,r)}function We(t,e,n){let r=e.value;if(r===!1)t.push([l.float.majorEncoded|Di]);else if(r===!0)t.push([l.float.majorEncoded|Oi]);else if(r===null)t.push([l.float.majorEncoded|Mi]);else if(r===void 0)t.push([l.float.majorEncoded|Ni]);else{let i,o=!1;(!n||n.float64!==!0)&&(lr(r),i=Ct(O,1),r===i||Number.isNaN(r)?(O[0]=249,t.push(O.slice(0,3)),o=!0):(dr(r),i=It(O,1),r===i&&(O[0]=250,t.push(O.slice(0,5)),o=!0))),o||(zi(r),i=pr(O,1),O[0]=251,t.push(O.slice(0,9)))}}We.encodedSize=function(e,n){let r=e.value;if(r===!1||r===!0||r===null||r===void 0)return 1;if(!n||n.float64!==!0){lr(r);let i=Ct(O,1);if(r===i||Number.isNaN(r))return 3;if(dr(r),i=It(O,1),r===i)return 5}return 9};var fr=new ArrayBuffer(9),$=new DataView(fr,1),O=new Uint8Array(fr,0);function lr(t){if(t===1/0)$.setUint16(0,31744,!1);else if(t===-1/0)$.setUint16(0,64512,!1);else if(Number.isNaN(t))$.setUint16(0,32256,!1);else{$.setFloat32(0,t);let e=$.getUint32(0),n=(e&2139095040)>>23,r=e&8388607;if(n===255)$.setUint16(0,31744,!1);else if(n===0)$.setUint16(0,(t&2147483648)>>16|r>>13,!1);else{let i=n-127;i<-24?$.setUint16(0,0):i<-14?$.setUint16(0,(e&2147483648)>>16|1<<24+i,!1):$.setUint16(0,(e&2147483648)>>16|i+15<<10|r>>13,!1)}}}function Ct(t,e){if(t.length-e<2)throw new Error(`${b} not enough data for float16`);let n=(t[e]<<8)+t[e+1];if(n===31744)return 1/0;if(n===64512)return-1/0;if(n===32256)return NaN;let r=n>>10&31,i=n&1023,o;return r===0?o=i*2**-24:r!==31?o=(i+1024)*2**(r-25):o=i===0?1/0:NaN,n&32768?-o:o}function dr(t){$.setFloat32(0,t,!1)}function It(t,e){if(t.length-e<4)throw new Error(`${b} not enough data for float32`);let n=(t.byteOffset||0)+e;return new DataView(t.buffer,n,4).getFloat32(0,!1)}function zi(t){$.setFloat64(0,t,!1)}function pr(t,e){if(t.length-e<8)throw new Error(`${b} not enough data for float64`);let n=(t.byteOffset||0)+e;return new DataView(t.buffer,n,8).getFloat64(0,!1)}We.compareTokens=_.compareTokens;function x(t,e,n){throw new Error(`${b} encountered invalid minor (${n}) for major ${t[e]>>>5}`)}function je(t){return()=>{throw new Error(`${b} ${t}`)}}var p=[];for(let t=0;t<=23;t++)p[t]=x;p[24]=En;p[25]=Tn;p[26]=kn;p[27]=An;p[28]=x;p[29]=x;p[30]=x;p[31]=x;for(let t=32;t<=55;t++)p[t]=x;p[56]=Cn;p[57]=In;p[58]=vn;p[59]=Bn;p[60]=x;p[61]=x;p[62]=x;p[63]=x;for(let t=64;t<=87;t++)p[t]=Pn;p[88]=_n;p[89]=$n;p[90]=Fn;p[91]=Dn;p[92]=x;p[93]=x;p[94]=x;p[95]=je("indefinite length bytes/strings are not supported");for(let t=96;t<=119;t++)p[t]=On;p[120]=Mn;p[121]=Nn;p[122]=zn;p[123]=Rn;p[124]=x;p[125]=x;p[126]=x;p[127]=je("indefinite length bytes/strings are not supported");for(let t=128;t<=151;t++)p[t]=Ln;p[152]=Vn;p[153]=Gn;p[154]=Zn;p[155]=qn;p[156]=x;p[157]=x;p[158]=x;p[159]=Kn;for(let t=160;t<=183;t++)p[t]=Yn;p[184]=Wn;p[185]=jn;p[186]=Xn;p[187]=Jn;p[188]=x;p[189]=x;p[190]=x;p[191]=Qn;for(let t=192;t<=215;t++)p[t]=er;p[216]=tr;p[217]=nr;p[218]=rr;p[219]=ir;p[220]=x;p[221]=x;p[222]=x;p[223]=x;for(let t=224;t<=243;t++)p[t]=je("simple values are not supported");p[244]=x;p[245]=x;p[246]=x;p[247]=or;p[248]=je("simple values are not supported");p[249]=ar;p[250]=cr;p[251]=ur;p[252]=x;p[253]=x;p[254]=x;p[255]=sr;var R=[];for(let t=0;t<24;t++)R[t]=new m(l.uint,t,1);for(let t=-1;t>=-24;t--)R[31-t]=new m(l.negint,t,1);R[64]=new m(l.bytes,new Uint8Array(0),1);R[96]=new m(l.string,"",1);R[128]=new m(l.array,0,1);R[160]=new m(l.map,0,1);R[244]=new m(l.false,!1,1);R[245]=new m(l.true,!0,1);R[246]=new m(l.null,null,1);function mr(t){switch(t.type){case l.false:return z([244]);case l.true:return z([245]);case l.null:return z([246]);case l.bytes:return t.value.length?void 0:z([64]);case l.string:return t.value===""?z([96]):void 0;case l.array:return t.value===0?z([128]):void 0;case l.map:return t.value===0?z([160]):void 0;case l.uint:return t.value<24?z([Number(t.value)]):void 0;case l.negint:if(t.value>=-24)return z([31-Number(t.value)])}}var yr=Object.freeze({float64:!0,mapSorter:Gi,quickEncodeToken:mr});function Hi(){let t=[];return t[l.uint.major]=_,t[l.negint.major]=Ge,t[l.bytes.major]=de,t[l.string.major]=Hn,t[l.array.major]=qe,t[l.map.major]=Ke,t[l.tag.major]=Ye,t[l.float.major]=We,t}var Li=Hi(),vt=new be,Je=class t{constructor(e,n){this.obj=e,this.parent=n}includes(e){let n=this;do if(n.obj===e)return!0;while(n=n.parent);return!1}static createCheck(e,n){if(e&&e.includes(n))throw new Error(`${Tt} object contains circular references`);return new t(n,e)}},K={null:new m(l.null,null),undefined:new m(l.undefined,void 0),true:new m(l.true,!0),false:new m(l.false,!1),emptyArray:new m(l.array,0),emptyMap:new m(l.map,0)},Y={number(t,e,n,r){return!Number.isInteger(t)||!Number.isSafeInteger(t)?new m(l.float,t):t>=0?new m(l.uint,t):new m(l.negint,t)},bigint(t,e,n,r){return t>=BigInt(0)?new m(l.uint,t):new m(l.negint,t)},Uint8Array(t,e,n,r){return new m(l.bytes,t)},string(t,e,n,r){return new m(l.string,t)},boolean(t,e,n,r){return t?K.true:K.false},null(t,e,n,r){return K.null},undefined(t,e,n,r){return K.undefined},ArrayBuffer(t,e,n,r){return new m(l.bytes,new Uint8Array(t))},DataView(t,e,n,r){return new m(l.bytes,new Uint8Array(t.buffer,t.byteOffset,t.byteLength))},Array(t,e,n,r){if(!t.length)return n.addBreakTokens===!0?[K.emptyArray,new m(l.break)]:K.emptyArray;r=Je.createCheck(r,t);let i=[],o=0;for(let s of t)i[o++]=Xe(s,n,r);return n.addBreakTokens?[new m(l.array,t.length),i,new m(l.break)]:[new m(l.array,t.length),i]},Object(t,e,n,r){let i=e!=="Object",o=i?t.keys():Object.keys(t),s=i?t.size:o.length;if(!s)return n.addBreakTokens===!0?[K.emptyMap,new m(l.break)]:K.emptyMap;r=Je.createCheck(r,t);let a=[],c=0;for(let u of o)a[c++]=[Xe(u,n,r),Xe(i?t.get(u):t[u],n,r)];return Vi(a,n),n.addBreakTokens?[new m(l.map,s),a,new m(l.break)]:[new m(l.map,s),a]}};Y.Map=Y.Object;Y.Buffer=Y.Uint8Array;for(let t of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))Y[`${t}Array`]=Y.DataView;function Xe(t,e={},n){let r=mn(t),i=e&&e.typeEncoders&&e.typeEncoders[r]||Y[r];if(typeof i=="function"){let s=i(t,r,e,n);if(s!=null)return s}let o=Y[r];if(!o)throw new Error(`${Tt} unsupported type: ${r}`);return o(t,r,e,n)}function Vi(t,e){e.mapSorter&&t.sort(e.mapSorter)}function Gi(t,e){if(t[0]instanceof m&&e[0]instanceof m){let n=t[0],r=e[0];return n._keyBytes||(n._keyBytes=hr(n.value)),r._keyBytes||(r._keyBytes=hr(r.value)),Ve(n._keyBytes,r._keyBytes)}throw new Error("rfc8949MapSorter: complex key types are not supported yet")}function hr(t){return Zi(t,Li,yr)}function gr(t,e,n,r){if(Array.isArray(e))for(let i of e)gr(t,i,n,r);else n[e.type.major](t,e,r)}function Zi(t,e,n){let r=Xe(t,n);if(!Array.isArray(r)&&n.quickEncodeToken){let i=n.quickEncodeToken(r);if(i)return i;let o=e[r.type.major];if(o.encodedSize){let s=o.encodedSize(r,n),a=new be(s);if(o(a,r,n),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${r} was wrong`);return Et(a.chunks[0])}}return vt.reset(),gr(vt,r,e,n),vt.toBytes(!0)}xt.hmacSha256Sync=(t,...e)=>St(wt,t,xt.concatBytes(...e));var Yi=32;function Qe(t){if(t.length===0)return new Uint8Array(Yi);let e=t.length,n=e*4,r=t.reduce((c,u)=>c+u.length,0),i=4+n+r,o=new Uint8Array(i),s=new DataView(o.buffer,o.byteOffset,o.byteLength);s.setUint32(0,e,!0);let a=4;for(let c of t)s.setUint32(a,c.length,!0),a+=4;for(let c of t)o.set(c,a),a+=c.length;return wt(o)}function Ut(t){return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}var Ee={bool:1,uint8:1,int8:1,uint16:2,int16:2,uint32:4,int32:4,entityRef:4,f32:4,vec2:8,vec3:12,quat:16,enum:1},Bt={bool:1,uint8:1,int8:1,uint16:2,int16:2,uint32:4,int32:4,f32:4,flags8:1,flags16:2,flags32:4,vec2:8,vec3:12,quat:16},Wi=new Set(["bool","uint8","int8","uint16","int16","uint32","int32","entityRef","f32"]),br=new Set(["bool","uint8","int8","uint16","int16","uint32","int32","f32"]);function xr(t){let e=t.match(/^(\\w+)\\[(\\d+)\\]$/);if(!e||!e[1]||!e[2])return null;let n=e[1],r=parseInt(e[2],10);return Wi.has(n)?{elementType:n,length:r}:null}var wr=1297369412;function Sr(t){let e=t.match(/^vec3\\[(\\d+)\\]$/);return e?.[1]?{elementType:"vec3",length:parseInt(e[1],10)}:null}function Er(t){let e=t.match(/^vec2\\[(\\d+)\\]$/);return e?.[1]?{elementType:"vec2",length:parseInt(e[1],10)}:null}function Tr(t){let e=t.match(/^(\\w+)\\[(\\d+)\\]$/);if(!e||!e[1]||!e[2])return null;let n=e[1],r=parseInt(e[2],10);if(!br.has(n))throw new Error(`Invalid array element type \'${n}\': arrays only support primitive scalar types (bool, uint8, int8, uint16, int16, uint32, int32, f32)`);return{elementType:n,length:r}}function ji(t){let e=[],n=[],r=new Map,i=new Map;for(let o of t.controls){let s=Tr(o.type),a={name:o.name,type:o.type,size:o.size,offset:0,options:o.options?[...o.options]:void 0};s&&(a.arrayLength=s.length,a.arrayElementType=s.elementType);let c={name:o.name,index:o.index,field:a,hint:o.hint,retain:o.retain};e.push(c),r.set(o.name,c)}for(let o of t.commands){let s=[];for(let c of o.args){let u=Tr(c.type),f={name:c.name,type:c.type,size:c.size,offset:c.offset};u&&(f.arrayLength=u.length,f.arrayElementType=u.elementType),s.push(f)}let a={name:o.name,index:o.index,args:s,totalSize:o.totalSize};n.push(a),i.set(o.name,a)}return{controls:e,commands:n,controlByName:r,commandByName:i}}function Pt(t,e,n,r){switch(n){case"bool":t.setUint8(e,r?1:0);break;case"uint8":case"flags8":t.setUint8(e,r);break;case"int8":t.setInt8(e,r);break;case"uint16":case"flags16":t.setUint16(e,r,!0);break;case"int16":t.setInt16(e,r,!0);break;case"uint32":case"flags32":t.setUint32(e,r,!0);break;case"int32":t.setInt32(e,r,!0);break;case"f32":t.setFloat32(e,r,!0);break;default:throw new Error(`Cannot write primitive type: ${n}`)}}function _t(t,e,n){switch(n){case"bool":return t.getUint8(e)!==0;case"uint8":case"flags8":return t.getUint8(e);case"int8":return t.getInt8(e);case"uint16":case"flags16":return t.getUint16(e,!0);case"int16":return t.getInt16(e,!0);case"uint32":case"flags32":return t.getUint32(e,!0);case"int32":return t.getInt32(e,!0);case"f32":return t.getFloat32(e,!0);default:throw new Error(`Cannot read primitive type: ${n}`)}}var et=class t{constructor(e){y(this,"schema");y(this,"fields",new Map);y(this,"commandList",[]);this.schema=e}setControl(e,n){let r=this.schema.controlByName.get(e);if(!r)throw new Error(`Unknown control: ${e}`);let i=new Uint8Array(r.field.size),o=new DataView(i.buffer);this.encodeValue(o,0,r.field,n),this.fields.set(r.index,i)}setFlags(e,n){let r=this.schema.controlByName.get(e);if(!r)throw new Error(`Unknown control: ${e}`);if(!r.field.options)throw new Error(`Control ${e} is not a flags type`);let i=0;for(let a=0;a<r.field.options.length;a++){let c=r.field.options[a];n[c]&&(i|=1<<a)}let o=new Uint8Array(r.field.size),s=new DataView(o.buffer);Pt(s,0,r.field.type,i),this.fields.set(r.index,o)}setVec2(e,n){let r=this.schema.controlByName.get(e);if(!r)throw new Error(`Unknown control: ${e}`);if(r.field.type!=="vec2")throw new Error(`Control ${e} is not a vec2`);let i=new Uint8Array(8),o=new DataView(i.buffer);o.setFloat32(0,n[0],!0),o.setFloat32(4,n[1],!0),this.fields.set(r.index,i)}setVec3(e,n){let r=this.schema.controlByName.get(e);if(!r)throw new Error(`Unknown control: ${e}`);if(r.field.type!=="vec3")throw new Error(`Control ${e} is not a vec3`);let i=new Uint8Array(12),o=new DataView(i.buffer);o.setFloat32(0,n[0],!0),o.setFloat32(4,n[1],!0),o.setFloat32(8,n[2],!0),this.fields.set(r.index,i)}setQuat(e,n){let r=this.schema.controlByName.get(e);if(!r)throw new Error(`Unknown control: ${e}`);if(r.field.type!=="quat")throw new Error(`Control ${e} is not a quat`);let i=new Uint8Array(16),o=new DataView(i.buffer);o.setFloat32(0,n[0],!0),o.setFloat32(4,n[1],!0),o.setFloat32(8,n[2],!0),o.setFloat32(12,n[3],!0),this.fields.set(r.index,i)}getControl(e){let n=this.schema.controlByName.get(e);if(!n)throw new Error(`Unknown control: ${e}`);let r=this.fields.get(n.index);if(!r)return this.getDefaultValue(n.field);let i=new DataView(r.buffer,r.byteOffset,r.byteLength);return this.decodeValue(i,0,n.field)}getFlags(e){let n=this.schema.controlByName.get(e);if(!n)throw new Error(`Unknown control: ${e}`);if(!n.field.options)throw new Error(`Control ${e} is not a flags type`);let r=this.fields.get(n.index),i=0;if(r){let s=new DataView(r.buffer,r.byteOffset,r.byteLength);i=_t(s,0,n.field.type)}let o={};for(let s=0;s<n.field.options.length;s++)o[n.field.options[s]]=(i&1<<s)!==0;return o}getVec2(e){let n=this.schema.controlByName.get(e);if(!n)throw new Error(`Unknown control: ${e}`);if(n.field.type!=="vec2")throw new Error(`Control ${e} is not a vec2`);let r=this.fields.get(n.index);if(!r)return[0,0];let i=new DataView(r.buffer,r.byteOffset,r.byteLength);return[i.getFloat32(0,!0),i.getFloat32(4,!0)]}getVec3(e){let n=this.schema.controlByName.get(e);if(!n)throw new Error(`Unknown control: ${e}`);if(n.field.type!=="vec3")throw new Error(`Control ${e} is not a vec3`);let r=this.fields.get(n.index);if(!r)return[0,0,0];let i=new DataView(r.buffer,r.byteOffset,r.byteLength);return[i.getFloat32(0,!0),i.getFloat32(4,!0),i.getFloat32(8,!0)]}getQuat(e){let n=this.schema.controlByName.get(e);if(!n)throw new Error(`Unknown control: ${e}`);if(n.field.type!=="quat")throw new Error(`Control ${e} is not a quat`);let r=this.fields.get(n.index);if(!r)return[0,0,0,1];let i=new DataView(r.buffer,r.byteOffset,r.byteLength);return[i.getFloat32(0,!0),i.getFloat32(4,!0),i.getFloat32(8,!0),i.getFloat32(12,!0)]}hasControl(e){let n=this.schema.controlByName.get(e);if(!n)throw new Error(`Unknown control: ${e}`);return this.fields.has(n.index)}addCommand(e,n){let r=this.schema.commandByName.get(e);if(!r)throw new Error(`Unknown command: ${e}`);let i=new Uint8Array(r.totalSize),o=new DataView(i.buffer);for(let s of r.args){let a=n[s.name];if(a===void 0)throw new Error(`Missing required argument: ${s.name}`);this.encodeValue(o,s.offset,s,a)}this.commandList.push({index:r.index,data:i})}getCommands(){let e=[];for(let{index:n,data:r}of this.commandList){let i=this.schema.commands.find(a=>a.index===n);if(!i)continue;let o=new DataView(r.buffer,r.byteOffset,r.byteLength),s={name:i.name};for(let a of i.args)s[a.name]=this.decodeValue(o,a.offset,a);e.push(s)}return e}encode(){let e=[];for(let[o,s]of this.fields){let a=new Uint8Array(2+s.length);a[0]=o,a[1]=s.length,a.set(s,2),e.push(a)}for(let o of this.commandList){let s=new Uint8Array(2+o.data.length);s[0]=o.index,s[1]=o.data.length,s.set(o.data,2),e.push(s)}let n=e.reduce((o,s)=>o+s.length,0),r=new Uint8Array(n),i=0;for(let o of e)r.set(o,i),i+=o.length;return r}static decode(e,n){let r=new t(e),i=0;for(;i<n.length;){if(i+2>n.length)throw new Error("Truncated TLV field header");let o=n[i],s=n[i+1];if(i+2+s>n.length)throw new Error(`Truncated TLV field data at index ${o}`);let a=n.subarray(i+2,i+2+s);e.controls.find(u=>u.index===o)?r.fields.set(o,new Uint8Array(a)):e.commands.find(f=>f.index===o)&&r.commandList.push({index:o,data:new Uint8Array(a)}),i+=2+s}return r}clear(){this.fields.clear(),this.commandList.length=0}encodeValue(e,n,r,i){if(r.type==="vec2"){let o=i;e.setFloat32(n,o[0],!0),e.setFloat32(n+4,o[1],!0)}else if(r.type==="vec3"){let o=i;e.setFloat32(n,o[0],!0),e.setFloat32(n+4,o[1],!0),e.setFloat32(n+8,o[2],!0)}else if(r.type==="quat"){let o=i;e.setFloat32(n,o[0],!0),e.setFloat32(n+4,o[1],!0),e.setFloat32(n+8,o[2],!0),e.setFloat32(n+12,o[3],!0)}else if(r.arrayLength!==void 0&&r.arrayElementType!==void 0){let o=i,s=Bt[r.arrayElementType];for(let a=0;a<Math.min(o.length,r.arrayLength);a++)Pt(e,n+a*s,r.arrayElementType,o[a])}else Pt(e,n,r.type,i)}decodeValue(e,n,r){if(r.type==="vec2")return[e.getFloat32(n,!0),e.getFloat32(n+4,!0)];if(r.type==="vec3")return[e.getFloat32(n,!0),e.getFloat32(n+4,!0),e.getFloat32(n+8,!0)];if(r.type==="quat")return[e.getFloat32(n,!0),e.getFloat32(n+4,!0),e.getFloat32(n+8,!0),e.getFloat32(n+12,!0)];if(r.arrayLength!==void 0&&r.arrayElementType!==void 0){let i=[],o=Bt[r.arrayElementType];for(let s=0;s<r.arrayLength;s++)i.push(_t(e,n+s*o,r.arrayElementType));return i}else return _t(e,n,r.type)}getDefaultValue(e){return e.type==="vec2"?[0,0]:e.type==="vec3"?[0,0,0]:e.type==="quat"?[0,0,0,1]:e.arrayLength!==void 0?new Array(e.arrayLength).fill(0):e.type==="bool"?!1:0}};function kr(t){let e=ji(t);return{create(){return new et(e)},decode(n){return et.decode(e,n)},get schema(){return e}}}function Ar(t,e){return((e&65535)<<16|t&65535)>>>0}function Te(t){return t&65535}function to(t){return t>>>16&65535}function L(t){return t.subarray(8,40)}function $t(t,e){if(e.length!==32)throw new Error(`stateId must be ${32} bytes, got ${e.length}`);t.set(e,8)}function Ft(t,e){new DataView(t.buffer,t.byteOffset,t.byteLength).setUint32(40,e,!0)}function rt(t,e,n){let r=new Uint8Array(68);return r.set(t,0),new DataView(r.buffer).setUint32(32,e,!0),r.set(n,36),te(r)}function Dt(t,e,n){return rt(t,e,Qe(n))}function Ot(t){return te(t)}function Cr(t,e,n){let r=new ArrayBuffer(t.totalSize),i=new Uint8Array(r),o=new DataView(r);if(o.setUint32(0,1297367376,!0),o.setUint16(4,0,!0),i[6]=n??0,i[7]=0,e){let a=Ot(e);i.set(a,8)}let s=t.freeStackOffset;o.setUint16(s,t.maxEntities,!0);for(let a=0;a<t.maxEntities;a++){let c=t.freeStackOffset+2+a*2;o.setUint16(c,a,!0)}return i}function Ir(t,e){return t.entityTableOffset+e*t.entityRecordSize}function Mt(t,e,n){let r=Ir(t,n);return new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(r,!0)}function no(t){return new DataView(t.buffer,t.byteOffset,t.byteLength).getUint16(4,!0)}function ro(t,e){new DataView(t.buffer,t.byteOffset,t.byteLength).setUint16(4,e,!0)}function io(t,e){return new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(t.freeStackOffset,!0)}function oo(t,e,n){new DataView(e.buffer,e.byteOffset,e.byteLength).setUint16(t.freeStackOffset,n,!0)}function so(t,e){let n=new DataView(e.buffer,e.byteOffset,e.byteLength),r=io(t,e);if(r===0)throw new Error(`No free entity slots available (max: ${t.maxEntities})`);let i=t.freeStackOffset+2+(r-1)*2,o=n.getUint16(i,!0);return oo(t,e,r-1),o}function vr(t,e){let n=so(t,e),r=Mt(t,e,n);return ro(e,no(e)+1),Ar(n,r)}function it(t,e,n){if(n===4294967295)return!1;let r=Te(n);if(r>=t.maxEntities)return!1;let i=to(n);return Mt(t,e,r)===i}function Nt(t,e,n){if(n<0)throw new Error("Singleton components do not have component bitmask entries");let r=Ir(t,e)+2,i=Math.floor(n/8),o=n%8;return{byteOffset:r+i,bitIndex:o}}function Ur(t,e,n,r){if(!it(t,e,n))return!1;let i=t.componentByName.get(r);if(!i)throw new Error(`Unknown component: \'${r}\'`);if(i.isSingleton)throw new Error(`Component \'${r}\' is a singleton and is always present`);let o=Te(n),{byteOffset:s,bitIndex:a}=Nt(t,o,i.index);return(e[s]&1<<a)!==0}function Br(t,e,n,r){if(!it(t,e,n)){let c=n.toString(16).padStart(8,"0").toUpperCase();throw new Error(`Entity 0x${c} is not alive`)}let i=t.componentByName.get(r);if(!i)throw new Error(`Unknown component: \'${r}\'`);if(i.isSingleton)throw new Error(`Component \'${r}\' is a singleton and cannot be added to entities`);let o=Te(n),{byteOffset:s,bitIndex:a}=Nt(t,o,i.index);e[s]=(e[s]??0)|1<<a}function Pr(t,e,n,r){let i=Te(e);return n.storageOffset+i*n.size+r.offset}function ao(t,e,n){let r=new DataView(t.buffer,t.byteOffset,t.byteLength);switch(n){case"bool":return(t[e]??0)!==0;case"uint8":return t[e]??0;case"int8":return r.getInt8(e);case"uint16":return r.getUint16(e,!0);case"int16":return r.getInt16(e,!0);case"uint32":return r.getUint32(e,!0);case"int32":return r.getInt32(e,!0);case"entityRef":return r.getUint32(e,!0);case"f32":return r.getFloat32(e,!0);default:throw new Error(`Cannot read primitive type: ${n}`)}}function _r(t,e,n,r){let i=new DataView(t.buffer,t.byteOffset,t.byteLength);switch(n){case"bool":t[e]=r?1:0;break;case"uint8":t[e]=r&255;break;case"int8":i.setInt8(e,r);break;case"uint16":i.setUint16(e,r,!0);break;case"int16":i.setInt16(e,r,!0);break;case"uint32":i.setUint32(e,r,!0);break;case"int32":i.setInt32(e,r,!0);break;case"entityRef":i.setUint32(e,r,!0);break;case"f32":i.setFloat32(e,r,!0);break;default:throw new Error(`Cannot write primitive type: ${n}`)}}function co(t,e,n){let r=new DataView(t.buffer,t.byteOffset,t.byteLength);r.setFloat32(e,n[0],!0),r.setFloat32(e+4,n[1],!0)}function uo(t,e,n){let r=new DataView(t.buffer,t.byteOffset,t.byteLength);r.setFloat32(e,n[0],!0),r.setFloat32(e+4,n[1],!0),r.setFloat32(e+8,n[2],!0)}function fo(t,e,n){let r=new DataView(t.buffer,t.byteOffset,t.byteLength);r.setFloat32(e,n[0],!0),r.setFloat32(e+4,n[1],!0),r.setFloat32(e+8,n[2],!0),r.setFloat32(e+12,n[3],!0)}function $r(t,e,n,r,i,o){if(!it(t,e,n))return;let s=t.componentByName.get(r);if(!s)throw new Error(`Unknown component: \'${r}\'`);if(s.isSingleton)throw new Error(`Component \'${r}\' is a singleton; use singleton accessors instead`);if(!nt(t,e,n,s))return;let a=s.fields.find(f=>f.name===i);if(!a)throw new Error(`Unknown field \'${i}\' in component \'${r}\'`);let c=Pr(t,n,s,a),u=a.type;if(a.arrayLength!==void 0&&a.arrayElementType!==void 0){if(o===void 0)throw new Error(`Field \'${r}.${i}\' is an array, index required`);if(o<0||o>=a.arrayLength)throw new Error(`Array index ${o} out of bounds for ${r}.${i} (length: ${a.arrayLength})`);let f=Ee[a.arrayElementType];if(f===void 0)throw new Error(`Unknown array element type: ${a.arrayElementType}`);c+=o*f,u=a.arrayElementType}return ao(e,c,u)}function w(t,e,n,r,i,o,s){if(!it(t,e,n)){let d=n.toString(16).padStart(8,"0").toUpperCase();throw new Error(`Entity 0x${d} is not alive`)}let a=t.componentByName.get(r);if(!a)throw new Error(`Unknown component: \'${r}\'`);if(!nt(t,e,n,a)){let d=n.toString(16).padStart(8,"0").toUpperCase();throw new Error(`Entity 0x${d} does not have component \'${r}\'`)}let c=a.fields.find(d=>d.name===i);if(!c)throw new Error(`Unknown field \'${i}\' in component \'${r}\'`);let u=Pr(t,n,a,c),f=c.type;if(c.arrayLength!==void 0&&c.arrayElementType!==void 0){if(s===void 0)throw new Error(`Field \'${r}.${i}\' is an array, index required`);if(s<0||s>=c.arrayLength)throw new Error(`Array index ${s} out of bounds for ${r}.${i} (length: ${c.arrayLength})`);let d=Ee[c.arrayElementType];if(d===void 0)throw new Error(`Unknown array element type: ${c.arrayElementType}`);u+=s*d,f=c.arrayElementType}_r(e,u,f,o)}function nt(t,e,n,r){if(r.isSingleton)throw new Error(`Component \'${r.name}\' is a singleton and cannot be queried per entity`);let i=Te(n),{byteOffset:o,bitIndex:s}=Nt(t,i,r.index);return(e[o]&1<<s)!==0}function Fr(t,e,n,r){if(n.length===0)throw new Error("Query must include at least one component");let i=[];for(let a of n){let c=t.componentByName.get(a);if(!c)throw new Error(`Unknown component: \'${a}\'`);if(c.isSingleton)throw new Error(`Singleton component \'${a}\' cannot be used in queries`);i.push(c)}let o=[];if(r)for(let a of r){let c=t.componentByName.get(a);if(!c)throw new Error(`Unknown component: \'${a}\'`);if(c.isSingleton)throw new Error(`Singleton component \'${a}\' cannot be used in queries`);o.push(c)}function*s(){for(let a=0;a<t.maxEntities;a++){let c=Mt(t,e,a),u=Ar(a,c),f=!0;for(let d of i)if(!nt(t,e,u,d)){f=!1;break}if(f){for(let d of o)if(nt(t,e,u,d)){f=!1;break}f&&(yield u)}}}return s()}function Dr(t,e){if(!t.events||!t.eventByName)throw new Error("Schema has no events");let n=t.eventByName.get(e);if(!n)throw new Error(`Unknown event: \'${e}\'`);return n}function Or(t,e,n){let r=Dr(t,n);new DataView(e.buffer,e.byteOffset,e.byteLength).setUint16(r.storageOffset,0,!0)}function Mr(t,e,n,r){let i=Dr(t,n),o=new DataView(e.buffer,e.byteOffset,e.byteLength),s=o.getUint16(i.storageOffset,!0);if(s>=i.maxEvents)return!1;let a=i.storageOffset+2+s*i.recordSize;for(let c of i.fields){let u=r[c.name];if(u===void 0)throw new Error(`Missing required field \'${c.name}\' for event \'${n}\'`);let f=a+c.offset;c.type==="vec2"?co(e,f,u):c.type==="vec3"?uo(e,f,u):c.type==="quat"?fo(e,f,u):_r(e,f,c.type,u)}return o.setUint16(i.storageOffset,s+1,!0),!0}function ot(t){if(t.length!==32)throw new Error(`stateId must be ${32} bytes, got ${t.length}`);return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}var st=class{constructor(e={}){y(this,"cache");y(this,"maxSize");this.cache=new Map,this.maxSize=e.maxSize??100}store(e){let n=L(e),r=ot(n);if(this.cache.size>=this.maxSize&&!this.cache.has(r)){let i=this.cache.keys().next().value;i!==void 0&&this.cache.delete(i)}this.cache.set(r,e.slice())}getByStateId(e){let n=ot(e),r=this.cache.get(n);return r?r.slice():void 0}getCached(e,n,r){let i=L(e),o=rt(i,n,r);return this.getByStateId(o)}has(e){let n=ot(e);return this.cache.has(n)}hasCached(e,n,r){let i=L(e),o=rt(i,n,r);return this.has(o)}delete(e){let n=ot(e);return this.cache.delete(n)}clear(){this.cache.clear()}get size(){return this.cache.size}keys(){return this.cache.keys()}};var ke=65536,at=class{constructor(e){y(this,"memory",null);y(this,"plugins",[]);y(this,"options");y(this,"stateSize",null);y(this,"statePtr",null);y(this,"initDataPtr",null);y(this,"initDataSize",null);y(this,"heapPos",0);y(this,"arenaResetMark",0);y(this,"inputCodec",null);y(this,"playerEntities",new Map);y(this,"hostAlloc",(e,n)=>{let r=this.memory;if(!r)throw new Error("Memory not initialized for host_alloc");let i=this.heapPos+n-1&~(n-1),o=i+e,s=r.buffer.byteLength;if(o>s){let c=Math.ceil((o-s)/ke);if(this.options.debug){let u=(s+c*ke)/1048576;console.warn(`[mt] WASM memory grew to ${u.toFixed(1)}MB`)}r.grow(c)}return new Uint8Array(r.buffer).fill(0,i,o),this.heapPos=o,i});this.options=e}markArenaReset(){this.arenaResetMark=this.heapPos}resetArena(){this.heapPos=this.arenaResetMark}async init(){if(this.stateSize=this.options.stateSchema.totalSize,!this.stateSize)throw new Error("State schema total size is required");this.options.inputSchema&&(this.inputCodec=kr(this.options.inputSchema));let e=4*1024*1024,n=this.options.plugins??(this.options.moduleBytes?[{name:"main",wasmBytes:this.options.moduleBytes,reservedBytes:e}]:[]);for(let c of n)if(typeof c.reservedBytes!="number"||c.reservedBytes<=0)throw new Error(`Plugin "${c.name}" requires reservedBytes > 0`);let r=n.reduce((c,u)=>{let f=Math.ceil(u.reservedBytes/ke)*ke;return c+f},0),i=1024*1024*5,o=this.stateSize+i+r,s=Math.ceil(o/ke);this.memory=new WebAssembly.Memory({initial:s}),this.heapPos=r;let a={env:{memory:this.memory,host_alloc:this.hostAlloc,abort:()=>{throw new Error("WASM abort called")}}};for(let c of n){let u=c.wasmBytes.slice().buffer,f=await WebAssembly.compile(u),d=await WebAssembly.instantiate(f,a);if(typeof d.exports.apply!="function")throw new Error(`Plugin "${c.name}" missing required apply() export`);this.plugins.push({name:c.name,instance:d,exports:d.exports})}if(this.statePtr=this.hostAlloc(this.stateSize,8),this.options.initDataSchema&&this.options.initDataSchema.items.length>0){let c=this.options.initDataSchema,u=this.options.initData;if(!u)throw new Error("initData is required when initDataSchema is provided");this.initDataSize=c.totalSize,this.initDataPtr=this.hostAlloc(this.initDataSize,8),this.writeInitData(c,u);for(let f of this.plugins){let d=f.instance.exports.set_init_data_ptr;typeof d=="function"&&d(this.initDataPtr)}this.options.debug&&console.log(`[mt] Init data allocated at ${this.initDataPtr}, size ${this.initDataSize} bytes`)}return this.markArenaReset(),this}writeInitData(e,n){let r=this.memory;if(!r||this.initDataPtr===null)throw new Error("Memory or init data pointer not initialized");let i=new DataView(r.buffer,this.initDataPtr,e.totalSize);i.setUint32(0,wr,!0),i.setUint32(4,e.totalSize,!0);for(let o of e.items){let s=n[o.name];if(s===void 0)throw new Error(`Missing required init data item: ${o.name}`);o.isBlob?this.writeInitDataBlob(i,o,s):this.writeInitDataCompound(i,o,s)}}writeInitDataBlob(e,n,r){let i;if(typeof r=="string"){let s=atob(r);i=new Uint8Array(s.length);for(let a=0;a<s.length;a++)i[a]=s.charCodeAt(a)}else if(r instanceof Uint8Array)i=r;else throw new Error(`Init data blob "${n.name}" must be a base64 string or Uint8Array`);if(i.length>n.blobMaxSize)throw new Error(`Init data blob "${n.name}" exceeds maxSize: ${i.length} > ${n.blobMaxSize}`);let o=n.storageOffset;e.setUint32(o,i.length,!0);for(let s=0;s<i.length;s++)e.setUint8(o+4+s,i[s])}writeInitDataCompound(e,n,r){for(let i of n.fields){let o=r[i.name];if(o===void 0)throw new Error(`Missing required init data field: ${n.name}.${i.name}`);this.writeInitDataField(e,n.storageOffset,i,o)}}writeInitDataField(e,n,r,i){let o=n+r.offset,s=Sr(r.type);if(s){let u=i;if(!Array.isArray(u))throw new Error(`Expected array for vec3[] field, got ${typeof i}`);for(let f=0;f<u.length&&f<s.length;f++){let d=u[f];Array.isArray(d)?(e.setFloat32(o+f*12,d[0]??0,!0),e.setFloat32(o+f*12+4,d[1]??0,!0),e.setFloat32(o+f*12+8,d[2]??0,!0)):(e.setFloat32(o+f*12,d.x??0,!0),e.setFloat32(o+f*12+4,d.y??0,!0),e.setFloat32(o+f*12+8,d.z??0,!0))}return}let a=Er(r.type);if(a){let u=i;if(!Array.isArray(u))throw new Error(`Expected array for vec2[] field, got ${typeof i}`);for(let f=0;f<u.length&&f<a.length;f++){let d=u[f];Array.isArray(d)?(e.setFloat32(o+f*8,d[0]??0,!0),e.setFloat32(o+f*8+4,d[1]??0,!0)):(e.setFloat32(o+f*8,d.x??0,!0),e.setFloat32(o+f*8+4,d.y??0,!0))}return}if(r.type==="vec3"){let u=i;Array.isArray(u)?(e.setFloat32(o,u[0]??0,!0),e.setFloat32(o+4,u[1]??0,!0),e.setFloat32(o+8,u[2]??0,!0)):(e.setFloat32(o,u.x??0,!0),e.setFloat32(o+4,u.y??0,!0),e.setFloat32(o+8,u.z??0,!0));return}if(r.type==="vec2"){let u=i;Array.isArray(u)?(e.setFloat32(o,u[0]??0,!0),e.setFloat32(o+4,u[1]??0,!0)):(e.setFloat32(o,u.x??0,!0),e.setFloat32(o+4,u.y??0,!0));return}if(r.type==="quat"){let u=i;Array.isArray(u)?(e.setFloat32(o,u[0]??0,!0),e.setFloat32(o+4,u[1]??0,!0),e.setFloat32(o+8,u[2]??0,!0),e.setFloat32(o+12,u[3]??1,!0)):(e.setFloat32(o,u.x??0,!0),e.setFloat32(o+4,u.y??0,!0),e.setFloat32(o+8,u.z??0,!0),e.setFloat32(o+12,u.w??1,!0));return}let c=xr(r.type);if(c&&r.arrayElementType){let u=i;if(!Array.isArray(u))throw new Error(`Expected array for ${r.type} field, got ${typeof i}`);let f=Ee[r.arrayElementType]??1;for(let d=0;d<u.length&&d<c.length;d++)this.writeScalar(e,o+d*f,r.arrayElementType,u[d]??0);return}this.writeScalar(e,o,r.type,i)}writeScalar(e,n,r,i){switch(r){case"bool":e.setUint8(n,i?1:0);break;case"uint8":e.setUint8(n,i);break;case"int8":e.setInt8(n,i);break;case"uint16":e.setUint16(n,i,!0);break;case"int16":e.setInt16(n,i,!0);break;case"uint32":case"entityRef":e.setUint32(n,i,!0);break;case"int32":e.setInt32(n,i,!0);break;case"f32":e.setFloat32(n,i,!0);break;default:throw new Error(`Unknown scalar type: ${r}`)}}findPlayerEntity(e,n){let r=this.options.stateSchema,i=this.playerEntities.get(n);if(i!==void 0){if(Ur(r,e,i,"Player"))return i;this.playerEntities.delete(n)}for(let o of Fr(r,e,["Player"]))if($r(r,e,o,"Player","index")===n)return this.playerEntities.set(n,o),o}spawnPlayerEntity(e,n){let r=this.options.stateSchema,i=vr(r,e);return Br(r,e,i,"Player"),w(r,e,i,"Player","index",n),this.playerEntities.set(n,i),i}findOrSpawnPlayerEntity(e,n){let r=this.findPlayerEntity(e,n);return r!==void 0?r:this.spawnPlayerEntity(e,n)}resetPlayerControls(e,n){let r=this.options.stateSchema;if(this.inputCodec)for(let i of this.inputCodec.schema.controls){if(i.retain==="always")continue;let o=i.field.type,s=i.name;if(o==="vec2")w(r,e,n,"Player",`${s}_x`,0),w(r,e,n,"Player",`${s}_y`,0);else if(o==="vec3")w(r,e,n,"Player",`${s}_x`,0),w(r,e,n,"Player",`${s}_y`,0),w(r,e,n,"Player",`${s}_z`,0);else if(o==="quat")w(r,e,n,"Player",`${s}_x`,0),w(r,e,n,"Player",`${s}_y`,0),w(r,e,n,"Player",`${s}_z`,0),w(r,e,n,"Player",`${s}_w`,1);else if(o.startsWith("flags"))w(r,e,n,"Player",s,0);else if(o.includes("[")){let a=o.match(/\\[(\\d+)\\]/);if(a?.[1]){let c=parseInt(a[1],10);for(let u=0;u<c;u++)w(r,e,n,"Player",s,0,u)}}else w(r,e,n,"Player",s,o==="bool"?!1:0)}}writeControlsToPlayer(e,n,r){let i=this.options.stateSchema,o=this.options.inputSchema;if(o)for(let s of o.controls){if(!r.hasControl(s.name))continue;let a=s.type,c=s.name;if(a==="vec2"){let[u,f]=r.getVec2(c);w(i,e,n,"Player",`${c}_x`,u),w(i,e,n,"Player",`${c}_y`,f)}else if(a==="vec3"){let[u,f,d]=r.getVec3(c);w(i,e,n,"Player",`${c}_x`,u),w(i,e,n,"Player",`${c}_y`,f),w(i,e,n,"Player",`${c}_z`,d)}else if(a==="quat"){let[u,f,d,g]=r.getQuat(c);w(i,e,n,"Player",`${c}_x`,u),w(i,e,n,"Player",`${c}_y`,f),w(i,e,n,"Player",`${c}_z`,d),w(i,e,n,"Player",`${c}_w`,g)}else if(a.startsWith("flags")){let u=r.getControl(c);w(i,e,n,"Player",c,u)}else if(a.includes("[")){let u=r.getControl(c);for(let f=0;f<u.length;f++)w(i,e,n,"Player",c,u[f],f)}else{let u=r.getControl(c);w(i,e,n,"Player",c,u)}}}pushCommands(e,n,r){let i=this.options.stateSchema,o=r.getCommands();for(let s of o){let a=s.name.charAt(0).toUpperCase()+s.name.slice(1)+"Command",c={player_index:n};for(let[u,f]of Object.entries(s))u!=="name"&&(Array.isArray(f)?f.length===2?(c[`${u}_x`]=f[0],c[`${u}_y`]=f[1]):f.length===3?(c[`${u}_x`]=f[0],c[`${u}_y`]=f[1],c[`${u}_z`]=f[2]):f.length===4&&(c[`${u}_x`]=f[0],c[`${u}_y`]=f[1],c[`${u}_z`]=f[2],c[`${u}_w`]=f[3]):c[u]=f);Mr(i,e,a,c)}}clearCommandEvents(e){let n=this.options.stateSchema,r=this.options.inputSchema;if(!(!r||!n.events))for(let i of r.commands){let o=i.name.charAt(0).toUpperCase()+i.name.slice(1)+"Command";n.eventByName?.has(o)&&Or(n,e,o)}}decodePayloadsToState(e,n){if(this.inputCodec)for(let r=0;r<n.length;r++){let i=n[r];if(i===void 0)continue;let o=this.findOrSpawnPlayerEntity(e,r);if(this.resetPlayerControls(e,o),i.length===0)continue;let s=this.inputCodec.decode(i);this.writeControlsToPlayer(e,o,s),this.pushCommands(e,r,s)}}transition(e,n){let r=this.stateSize;if(r===null||e.length!==r)throw new Error(`State size mismatch: expected ${this.stateSize}, got ${e.length}`);if(n.length===0)return e.slice();if(this.plugins.length===0){let a=e.slice();for(let c of n){Ft(a,c.tick);let u=L(a),f=Dt(u,c.tick,c.payloads);$t(a,f)}return a}let i=this.memory;if(!i)throw new Error("WASM memory not initialized");let o=this.statePtr;if(o===null||o<0)throw new Error("State pointer not initialized");let s=new Uint8Array(i.buffer);s.set(e,o);for(let a of n){let c=new Uint8Array(i.buffer,o,r);Ft(c,a.tick),this.clearCommandEvents(c),this.decodePayloadsToState(c,a.payloads);for(let d of this.plugins)d.exports.apply(o),s=new Uint8Array(i.buffer);c=new Uint8Array(i.buffer,o,r);let u=L(c),f=Dt(u,a.tick,a.payloads);if($t(c,f),this.options.logStateHashForTests&&a.sync){let d=s.slice(o,o+r),g=te(d);console.log(`STATE_HASH ${JSON.stringify({tick:a.tick,hash:Ut(g)})}`)}}return s.slice(o,o+r)}close(){}getStateSize(){let e=this.stateSize;if(e===null||e<0)throw new Error("State size not initialized");return e}};var W=class{constructor(e=1e3,n=1024){y(this,"buffer");y(this,"windowMs");y(this,"head",0);y(this,"tail",0);y(this,"size",0);this.windowMs=e,this.buffer=new Float64Array(n)}inc(){let e=performance.now();this.buffer[this.head]=e,this.head=(this.head+1)%this.buffer.length,this.size<this.buffer.length?this.size++:this.tail=(this.tail+1)%this.buffer.length}count(e=performance.now()){let n=e-this.windowMs;for(;this.size>0&&!(this.buffer[this.tail]>=n);)this.tail=(this.tail+1)%this.buffer.length,this.size--;return this.size}rate(e=performance.now()){return this.count(e)*(1e3/this.windowMs)}};function lo(t){return("moduleBytes"in t||"plugins"in t)&&"stateSchema"in t}function po(t,e){for(let n=t.length-1;n>=0;n--)if(e(t[n]))return n;return-1}var ct=class{constructor(e){y(this,"debug");y(this,"stateSchema");y(this,"inputs",null);y(this,"cache");y(this,"executor",null);y(this,"genesisStateId");y(this,"options");y(this,"ticking",!1);y(this,"tickGraceMs");y(this,"tickLag");y(this,"maxBatchSize");y(this,"currentState");y(this,"currentTick");y(this,"currentNodeId");y(this,"prevOnStateUpdateState",null);y(this,"onStateUpdate");y(this,"syncCheckpoint");y(this,"stateHistory",[]);y(this,"maxHistory",64);y(this,"stats");y(this,"loop",()=>{this._loop().catch(mo)});y(this,"_loop",async()=>{if(this.ticking)try{let e=await this.tick();if(this.onStateUpdate&&this.currentState!==this.prevOnStateUpdateState&&(this.onStateUpdate(this.currentState),this.prevOnStateUpdateState=this.currentState,this.stats.updates.inc()),e.rolledBack&&this.stats.rollbacks.inc(),e.ticksComputed>0)for(let n=0;n<e.ticksComputed;n++)this.stats.executions.inc()}catch(e){console.error("Error in tick loop:",e)}finally{setTimeout(this.loop,this.tickGraceMs)}});e.log&&(this.inputs=e.log),this.debug=e.debug??!1,this.options=e,this.stateSchema=e.stateSchema,this.cache=e.cache??new st,this.genesisStateId=Ot(e.genesisHash),this.tickGraceMs=e.tickGraceMs??10,this.tickLag=e.tickLag??1,this.maxBatchSize=e.maxBatchSize??200,this.stats={rollbacks:new W,executions:new W,updates:new W,cacheHits:new W,cacheMisses:new W},this.currentState=Cr(this.stateSchema,e.genesisHash,e.tickRate),this.currentNodeId=null,this.syncCheckpoint=null,this.currentTick=null,this.cache.store(this.currentState)}setLog(e){this.inputs=lt(e)}setOnStateUpdate(e){e===null&&(this.prevOnStateUpdateState=null),this.onStateUpdate=e}async init(){if(!this.inputs)throw new Error("Rollback.init() called before log was configured. Call setLog() first or pass log in options.");let e=this.options.executor;if(lo(e)){let r=new at(e);await r.init(),this.executor=r}else this.executor=e;if((await this.tick(0)).ticksComputed===0||this.currentTick===null)throw new Error("Failed to record genesis snapshot");return this.options.disableTicking||(this.ticking=!0,this.loop()),this.getState()}async tick(e){if(!this.inputs)throw new Error("Rollback.tick() called before log was configured. Call setLog() and init() first.");let n=await this.inputs.getTicksAfter(this.currentNodeId,{limit:this.maxBatchSize,lag:this.tickLag});if(e&&(n=n.filter(a=>a.tick<=e)),n.length===0)return{state:this.currentState,tick:this.currentTick,nodeId:this.currentNodeId??"",rolledBack:!1,ticksComputed:0};let r=!1,i=null;this.currentTick!==null&&n[0].tick<this.currentTick&&(r=!0,i=this.currentTick,this.rollbackTo(n[0]));let o=n.filter(a=>this.currentTick===null||a.tick>this.currentTick);if(o.length===0)return this.currentNodeId=n[n.length-1].id,{state:this.currentState,tick:this.currentTick,nodeId:this.currentNodeId,rolledBack:r,ticksComputed:0};let s=this.processTicks(o,r,i);return{state:this.currentState,tick:this.currentTick,nodeId:this.currentNodeId??"",rolledBack:r,ticksComputed:s}}async getStats(){return{rollbacks:this.stats.rollbacks.rate(),executions:this.stats.executions.rate(),updates:this.stats.updates.rate(),cacheHits:this.stats.cacheHits.rate(),cacheMisses:this.stats.cacheMisses.rate()}}processTicks(e,n=!1,r=null){if(!this.executor)throw new Error("Executor not initialized");let i=0,o=0;for(let u=0;u<e.length;u++){let f=e[u],d=Qe(f.payloads),g=this.cache.getCached(this.currentState,f.tick,d);if(g)this.currentState=g,this.currentTick=f.tick,this.currentNodeId=f.id,o=u+1,f.sync&&this.updateSyncCheckpoint(f);else break}if(n&&r!==null&&o>0)for(let u=0;u<o;u++)e[u].tick<=r&&this.stats.cacheHits.inc();let s=e.slice(o);if(s.length===0)return 0;let a=po(s,u=>u.sync);if(a>=0){let u=s.slice(0,a+1),f=this.executor.transition(this.currentState,u),d=L(f),g=u[u.length-1];this.currentState=f,this.currentTick=g.tick,this.currentNodeId=g.id,i+=u.length,this.cache.store(f),this.recordStateSnapshot(this.currentTick,this.currentNodeId,d),this.updateSyncCheckpoint(g)}let c=a>=0?s.slice(a+1):s;if(c.length>0){let u=this.executor.transition(this.currentState,c),f=L(u),d=c[c.length-1];this.currentState=u,this.currentTick=d.tick,this.currentNodeId=d.id,i+=c.length,this.cache.store(u),this.recordStateSnapshot(this.currentTick,this.currentNodeId,f)}if(n&&r!==null)for(let u of s)u.tick<=r&&this.stats.cacheMisses.inc();return i}getState(){return this.currentState.slice()}getTick(){return this.currentTick}reset(){this.currentTick=0,this.currentNodeId=null,this.syncCheckpoint=null}close(){this.ticking=!1,this.setOnStateUpdate(null),this.executor&&(this.executor.close(),this.executor=null)}rollbackTo(e){if(this.syncCheckpoint&&this.syncCheckpoint.tick>=e.tick){this.currentState=this.syncCheckpoint.state.slice(),this.currentTick=this.syncCheckpoint.tick,this.currentNodeId=this.syncCheckpoint.nodeId;return}if(this.syncCheckpoint&&this.syncCheckpoint.tick<e.tick){this.currentState=this.syncCheckpoint.state.slice(),this.currentTick=this.syncCheckpoint.tick,this.currentNodeId=this.syncCheckpoint.nodeId;return}let n=e.tick-1,r=this.findSnapshotAtOrBefore(n);if(r){let o=this.cache.getByStateId(r.stateId);if(o){this.currentState=o,this.currentTick=r.tick,this.currentNodeId=r.nodeId;return}}let i=this.cache.getByStateId(this.genesisStateId);if(i){this.currentState=i,this.currentTick=0,this.currentNodeId=null;return}}updateSyncCheckpoint(e){this.syncCheckpoint={state:this.currentState.slice(),tick:e.tick,nodeId:e.id}}recordStateSnapshot(e,n,r){this.stateHistory.push({tick:e,nodeId:n,stateId:r.slice()}),this.stateHistory.length>this.maxHistory&&this.stateHistory.shift()}findSnapshotAtOrBefore(e){for(let n=this.stateHistory.length-1;n>=0;n--){let r=this.stateHistory[n];if(r.tick<=e)return r}return null}};function mo(t){console.warn("rollback unexpected:",t)}Be(ct);var Qa=null;globalThis.onerror=t=>(console.error("\\u{1F534} FATAL ROLLBACK WORKER ERROR (Uncaught Exception):",t),!0);export{Qa as default};\n/*! Bundled license information:\n\ncomlink/dist/esm/comlink.mjs:\n (**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n *)\n\n@noble/secp256k1/index.js:\n (*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) *)\n\n@noble/hashes/esm/utils.js:\n (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n*/\n';
|
|
7794
8093
|
function Worker() {
|
|
7795
8094
|
const blob = new Blob([workerCode], { type: "text/javascript" });
|
|
7796
8095
|
const url = URL.createObjectURL(blob);
|
|
@@ -8244,7 +8543,9 @@ var Session = class {
|
|
|
8244
8543
|
this.tickLag = options.tickLag;
|
|
8245
8544
|
this.logSyncTicks = options.logSyncTicks;
|
|
8246
8545
|
const path = typeof options.path === "string" ? options.path.split("/") : options.path;
|
|
8247
|
-
const
|
|
8546
|
+
const initDataSchema = this.schema.initData;
|
|
8547
|
+
const compatHash = bytesToHex2(computeCompatibilityHash(options.plugins, initDataSchema, options.initData));
|
|
8548
|
+
const finalPath = [...path, compatHash];
|
|
8248
8549
|
this.config = new SessionConfig({
|
|
8249
8550
|
version: "v1",
|
|
8250
8551
|
authority: options.authority ?? "relay.multitap.io",
|
|
@@ -8299,7 +8600,8 @@ var Session = class {
|
|
|
8299
8600
|
inputSchema: this.schema.input,
|
|
8300
8601
|
maxTicksPerBatch: this.maxTicksPerBatch + 1,
|
|
8301
8602
|
initDataSchema: this.schema.initData,
|
|
8302
|
-
initData: this.initData
|
|
8603
|
+
initData: this.initData,
|
|
8604
|
+
logStateHashForTests: this.logSyncTicks
|
|
8303
8605
|
},
|
|
8304
8606
|
debug: this.debug,
|
|
8305
8607
|
tickLag: this.tickLag
|
|
@@ -8457,18 +8759,18 @@ async function createSession(options) {
|
|
|
8457
8759
|
await session.init();
|
|
8458
8760
|
return session;
|
|
8459
8761
|
}
|
|
8460
|
-
function computeCompatibilityHash(plugins, initData) {
|
|
8762
|
+
function computeCompatibilityHash(plugins, initDataSchema, initData) {
|
|
8461
8763
|
const wasmSize = plugins.reduce((sum, p) => sum + p.wasmBytes.length, 0);
|
|
8462
|
-
const
|
|
8463
|
-
const totalSize = wasmSize + (
|
|
8764
|
+
const initDataBinary = initDataSchema && initDataSchema.items.length > 0 && initData ? encodeInitData(initDataSchema, initData) : null;
|
|
8765
|
+
const totalSize = wasmSize + (initDataBinary ? initDataBinary.length : 0);
|
|
8464
8766
|
const combined = new Uint8Array(totalSize);
|
|
8465
8767
|
let offset = 0;
|
|
8466
8768
|
for (const plugin of plugins) {
|
|
8467
8769
|
combined.set(plugin.wasmBytes, offset);
|
|
8468
8770
|
offset += plugin.wasmBytes.length;
|
|
8469
8771
|
}
|
|
8470
|
-
if (
|
|
8471
|
-
combined.set(
|
|
8772
|
+
if (initDataBinary) {
|
|
8773
|
+
combined.set(initDataBinary, offset);
|
|
8472
8774
|
}
|
|
8473
8775
|
return sessionCompatibilityHash(combined);
|
|
8474
8776
|
}
|
|
@@ -8477,6 +8779,9 @@ function warnUnexpected4(err2) {
|
|
|
8477
8779
|
}
|
|
8478
8780
|
|
|
8479
8781
|
// src/test-session.ts
|
|
8782
|
+
function pluginFromBytes(name, wasmBytes, reservedBytes) {
|
|
8783
|
+
return { name, wasmBytes, reservedBytes };
|
|
8784
|
+
}
|
|
8480
8785
|
var TestPlayerImpl = class {
|
|
8481
8786
|
constructor(session, index, privateKey) {
|
|
8482
8787
|
this.session = session;
|
|
@@ -10656,6 +10961,72 @@ var Interpolation = {
|
|
|
10656
10961
|
/** Smooth interpolation using exponential decay (default) */
|
|
10657
10962
|
SMOOTH: "smooth"
|
|
10658
10963
|
};
|
|
10964
|
+
|
|
10965
|
+
// src/loader.ts
|
|
10966
|
+
async function loadMultitapConfig(manifestUrl) {
|
|
10967
|
+
const baseUrl = new URL(manifestUrl, window.location.href).href;
|
|
10968
|
+
const manifestBaseUrl = baseUrl.substring(0, baseUrl.lastIndexOf("/") + 1);
|
|
10969
|
+
const manifestRes = await fetch(manifestUrl);
|
|
10970
|
+
if (!manifestRes.ok) {
|
|
10971
|
+
throw new Error(`Failed to fetch manifest from ${manifestUrl}: ${manifestRes.status}`);
|
|
10972
|
+
}
|
|
10973
|
+
const manifest = await manifestRes.json();
|
|
10974
|
+
const [configFile, initData, plugins] = await Promise.all([
|
|
10975
|
+
fetchConfig(manifestBaseUrl, manifest.config),
|
|
10976
|
+
fetchInitData(manifestBaseUrl, manifest.initData),
|
|
10977
|
+
fetchPlugins(manifestBaseUrl, manifest.simulation.plugins)
|
|
10978
|
+
]);
|
|
10979
|
+
const compiledState = ensureCompiledStateSchema(configFile.schema.state);
|
|
10980
|
+
const compiledInput = ensureCompiledInputSchema(configFile.schema.input);
|
|
10981
|
+
return {
|
|
10982
|
+
appID: configFile.appID,
|
|
10983
|
+
tickRate: configFile.tickRate,
|
|
10984
|
+
maxTicks: configFile.maxTicks,
|
|
10985
|
+
maxParticipants: configFile.maxParticipants,
|
|
10986
|
+
plugins,
|
|
10987
|
+
schema: {
|
|
10988
|
+
state: compiledState,
|
|
10989
|
+
input: compiledInput,
|
|
10990
|
+
...configFile.schema.initData && {
|
|
10991
|
+
initData: configFile.schema.initData
|
|
10992
|
+
}
|
|
10993
|
+
},
|
|
10994
|
+
initData
|
|
10995
|
+
};
|
|
10996
|
+
}
|
|
10997
|
+
async function fetchConfig(baseUrl, configPath) {
|
|
10998
|
+
const url = new URL(configPath, baseUrl).href;
|
|
10999
|
+
const res = await fetch(url);
|
|
11000
|
+
if (!res.ok) {
|
|
11001
|
+
throw new Error(`Failed to fetch config from ${url}: ${res.status}`);
|
|
11002
|
+
}
|
|
11003
|
+
return res.json();
|
|
11004
|
+
}
|
|
11005
|
+
async function fetchInitData(baseUrl, initDataPath) {
|
|
11006
|
+
const url = new URL(initDataPath, baseUrl).href;
|
|
11007
|
+
const res = await fetch(url);
|
|
11008
|
+
if (!res.ok) {
|
|
11009
|
+
throw new Error(`Failed to fetch init data from ${url}: ${res.status}`);
|
|
11010
|
+
}
|
|
11011
|
+
return res.json();
|
|
11012
|
+
}
|
|
11013
|
+
async function fetchPlugins(baseUrl, plugins) {
|
|
11014
|
+
return Promise.all(
|
|
11015
|
+
plugins.map(async (p) => {
|
|
11016
|
+
const url = new URL(p.url, baseUrl).href;
|
|
11017
|
+
const res = await fetch(url);
|
|
11018
|
+
if (!res.ok) {
|
|
11019
|
+
throw new Error(`Failed to fetch WASM plugin "${p.name}" from ${url}: ${res.status}`);
|
|
11020
|
+
}
|
|
11021
|
+
const wasmBytes = new Uint8Array(await res.arrayBuffer());
|
|
11022
|
+
return {
|
|
11023
|
+
name: p.name,
|
|
11024
|
+
wasmBytes,
|
|
11025
|
+
reservedBytes: p.reservedBytes
|
|
11026
|
+
};
|
|
11027
|
+
})
|
|
11028
|
+
);
|
|
11029
|
+
}
|
|
10659
11030
|
export {
|
|
10660
11031
|
ACTION_ATTACK,
|
|
10661
11032
|
ACTION_CROUCH,
|
|
@@ -10671,6 +11042,7 @@ export {
|
|
|
10671
11042
|
GENESIS_HASH_SIZE,
|
|
10672
11043
|
HASH_SIZE,
|
|
10673
11044
|
INPUT_HEADER_SIZE,
|
|
11045
|
+
InitDataValidationError,
|
|
10674
11046
|
InputGraph,
|
|
10675
11047
|
Interpolation,
|
|
10676
11048
|
IsometricView,
|
|
@@ -10716,6 +11088,7 @@ export {
|
|
|
10716
11088
|
createState,
|
|
10717
11089
|
createStoreApi,
|
|
10718
11090
|
despawn,
|
|
11091
|
+
encodeInitData,
|
|
10719
11092
|
ensureCompiled,
|
|
10720
11093
|
ensureCompiledStateSchema,
|
|
10721
11094
|
generateKeyPair,
|
|
@@ -10746,7 +11119,9 @@ export {
|
|
|
10746
11119
|
isCompiledSchema,
|
|
10747
11120
|
isCompiledStateSchema,
|
|
10748
11121
|
iterEvents,
|
|
11122
|
+
loadMultitapConfig,
|
|
10749
11123
|
packRef,
|
|
11124
|
+
pluginFromBytes,
|
|
10750
11125
|
pubKeyFromPrivate,
|
|
10751
11126
|
pushEvent,
|
|
10752
11127
|
query,
|
|
@@ -10775,5 +11150,6 @@ export {
|
|
|
10775
11150
|
useQueryMask,
|
|
10776
11151
|
useSession,
|
|
10777
11152
|
useSessionContext,
|
|
11153
|
+
validateInitData,
|
|
10778
11154
|
verifySignature
|
|
10779
11155
|
};
|