@jsprismarine/nbt
Version:
Minecraft: Bedrock Edition NBT parser/writer
124 lines (123 loc) • 17.6 kB
JavaScript
"use strict";
Object.defineProperties(exports, {
__esModule: { value: true },
[Symbol.toStringTag]: { value: "Module" }
});
const require_runtime = require("./_virtual/_rolldown/runtime.cjs.cjs");
const require_types_ByteVal = require("./types/ByteVal.cjs.cjs");
const require_types_DoubleVal = require("./types/DoubleVal.cjs.cjs");
const require_types_FloatVal = require("./types/FloatVal.cjs.cjs");
const require_types_LongVal = require("./types/LongVal.cjs.cjs");
const require_types_NumberVal = require("./types/NumberVal.cjs.cjs");
const require_types_ShortVal = require("./types/ShortVal.cjs.cjs");
const require_types_StringVal = require("./types/StringVal.cjs.cjs");
const require_NBTWriter = require("./NBTWriter.cjs.cjs");
const require_NBTReader = require("./NBTReader.cjs.cjs");
let node_fs = require("node:fs");
node_fs = require_runtime.__toESM(node_fs, 1);
let _jsprismarine_jsbinaryutils = require("@jsprismarine/jsbinaryutils");
_jsprismarine_jsbinaryutils = require_runtime.__toESM(_jsprismarine_jsbinaryutils, 1);
//#region src/NBTTagCompound.ts
var NBTTagCompound = class NBTTagCompound {
name;
children = /* @__PURE__ */ new Map();
static readFromFile(path, byteOrder) {
return NBTTagCompound.readFromStream(new _jsprismarine_jsbinaryutils.default(node_fs.default.readFileSync(path)), byteOrder);
}
static readFromStream(input, byteOrder, varints = false) {
const reader = new require_NBTReader.default(input, byteOrder);
reader.setUseVarint(varints);
return reader.parse();
}
constructor(name = null) {
this.name = name;
}
setName(name) {
this.name = name;
}
getName() {
return this.name;
}
addValue(name, value) {
if (value instanceof NBTTagCompound && name !== value.getName()) throw new Error(`Failed to add NBTTagCompound with name ${value.getName()} given name ${name}`);
this.children.set(name, value);
}
addChild(tag) {
this.children.set(tag.getName(), tag);
}
getList(name, insert) {
if (this.children.has(name)) return this.children.get(name);
if (insert) {
const backingList = /* @__PURE__ */ new Set();
this.addValue(name, backingList);
return backingList;
}
return null;
}
getCompound(name, insert) {
if (this.children.has(name)) return this.children.get(name);
if (insert) {
const compound = new NBTTagCompound();
this.addValue(name, compound);
return compound;
}
return null;
}
writeToStream(out, byteOrder, varints = false) {
const writer = new require_NBTWriter.default(out, byteOrder);
writer.setUseVarint(varints);
writer.writeCompound(this);
}
getByte(name, defaultValue) {
return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
}
getShort(name, defaultValue) {
return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
}
getNumber(name, defaultValue) {
return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
}
getLong(name, defaultValue) {
return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
}
getFloat(name, defaultValue) {
return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
}
getDouble(name, defaultValue) {
return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
}
getString(name, defaultValue) {
return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
}
remove(key) {
return this.children.delete(key);
}
entries() {
return this.children.entries();
}
has(key) {
return this.children.has(key);
}
size() {
return this.children.size;
}
equals(that) {
if (this.children.size !== that.children.size) return false;
for (const [key, val] of this.children) {
const testVal = that.children.get(key);
if (testVal === void 0 && !that.children.has(key)) return false;
if (val instanceof NBTTagCompound && testVal instanceof NBTTagCompound && !val.equals(testVal)) return false;
if (val instanceof require_types_ByteVal.default && testVal instanceof require_types_ByteVal.default && val.getValue() !== testVal.getValue()) return false;
if (val instanceof require_types_DoubleVal.default && testVal instanceof require_types_DoubleVal.default && val.getValue() !== testVal.getValue()) return false;
if (val instanceof require_types_FloatVal.default && testVal instanceof require_types_FloatVal.default && val.getValue() !== testVal.getValue()) return false;
if (val instanceof require_types_LongVal.default && testVal instanceof require_types_LongVal.default && val.getValue() !== testVal.getValue()) return false;
if (val instanceof require_types_NumberVal.default && testVal instanceof require_types_NumberVal.default && val.getValue() !== testVal.getValue()) return false;
if (val instanceof require_types_ShortVal.default && testVal instanceof require_types_ShortVal.default && val.getValue() !== testVal.getValue()) return false;
if (val instanceof require_types_StringVal.default && testVal instanceof require_types_StringVal.default && val.getValue() !== testVal.getValue()) return false;
}
return true;
}
};
//#endregion
exports.default = NBTTagCompound;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTkJUVGFnQ29tcG91bmQuY2pzLmNqcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi9zcmMvTkJUVGFnQ29tcG91bmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnO1xuXG5pbXBvcnQgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgdHlwZSB7IEJ5dGVPcmRlciB9IGZyb20gJy4vQnl0ZU9yZGVyJztcbmltcG9ydCBOQlRSZWFkZXIgZnJvbSAnLi9OQlRSZWFkZXInO1xuaW1wb3J0IE5CVFdyaXRlciBmcm9tICcuL05CVFdyaXRlcic7XG5pbXBvcnQgQnl0ZVZhbCBmcm9tICcuL3R5cGVzL0J5dGVWYWwnO1xuaW1wb3J0IERvdWJsZVZhbCBmcm9tICcuL3R5cGVzL0RvdWJsZVZhbCc7XG5pbXBvcnQgRmxvYXRWYWwgZnJvbSAnLi90eXBlcy9GbG9hdFZhbCc7XG5pbXBvcnQgTG9uZ1ZhbCBmcm9tICcuL3R5cGVzL0xvbmdWYWwnO1xuaW1wb3J0IE51bWJlclZhbCBmcm9tICcuL3R5cGVzL051bWJlclZhbCc7XG5pbXBvcnQgU2hvcnRWYWwgZnJvbSAnLi90eXBlcy9TaG9ydFZhbCc7XG5pbXBvcnQgU3RyaW5nVmFsIGZyb20gJy4vdHlwZXMvU3RyaW5nVmFsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkJUVGFnQ29tcG91bmQge1xuICAgIHByaXZhdGUgbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2hpbGRyZW46IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRGcm9tRmlsZShwYXRoOiBzdHJpbmcsIGJ5dGVPcmRlcjogQnl0ZU9yZGVyKTogTkJUVGFnQ29tcG91bmQge1xuICAgICAgICByZXR1cm4gTkJUVGFnQ29tcG91bmQucmVhZEZyb21TdHJlYW0obmV3IEJpbmFyeVN0cmVhbShmcy5yZWFkRmlsZVN5bmMocGF0aCkpLCBieXRlT3JkZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZEZyb21TdHJlYW0oaW5wdXQ6IEJpbmFyeVN0cmVhbSwgYnl0ZU9yZGVyOiBCeXRlT3JkZXIsIHZhcmludHMgPSBmYWxzZSk6IE5CVFRhZ0NvbXBvdW5kIHtcbiAgICAgICAgY29uc3QgcmVhZGVyOiBOQlRSZWFkZXIgPSBuZXcgTkJUUmVhZGVyKGlucHV0LCBieXRlT3JkZXIpO1xuICAgICAgICByZWFkZXIuc2V0VXNlVmFyaW50KHZhcmludHMpO1xuICAgICAgICByZXR1cm4gcmVhZGVyLnBhcnNlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldE5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE5hbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBOQlRUYWdDb21wb3VuZCAmJiBuYW1lICE9PSB2YWx1ZS5nZXROYW1lKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGFkZCBOQlRUYWdDb21wb3VuZCB3aXRoIG5hbWUgJHt2YWx1ZS5nZXROYW1lKCl9IGdpdmVuIG5hbWUgJHtuYW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zZXQobmFtZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDaGlsZCh0YWc6IE5CVFRhZ0NvbXBvdW5kKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc2V0KHRhZy5nZXROYW1lKCkhLCB0YWcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRMaXN0KG5hbWU6IHN0cmluZywgaW5zZXJ0OiBib29sZWFuKTogU2V0PGFueT4gfCBudWxsIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4uaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5nZXQobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5zZXJ0KSB7XG4gICAgICAgICAgICBjb25zdCBiYWNraW5nTGlzdDogU2V0PGFueT4gPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICB0aGlzLmFkZFZhbHVlKG5hbWUsIGJhY2tpbmdMaXN0KTtcbiAgICAgICAgICAgIHJldHVybiBiYWNraW5nTGlzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb21wb3VuZChuYW1lOiBzdHJpbmcsIGluc2VydDogYm9vbGVhbik6IE5CVFRhZ0NvbXBvdW5kIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc2VydCkge1xuICAgICAgICAgICAgY29uc3QgY29tcG91bmQ6IE5CVFRhZ0NvbXBvdW5kID0gbmV3IE5CVFRhZ0NvbXBvdW5kKCk7XG4gICAgICAgICAgICB0aGlzLmFkZFZhbHVlKG5hbWUsIGNvbXBvdW5kKTtcbiAgICAgICAgICAgIHJldHVybiBjb21wb3VuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVRvU3RyZWFtKG91dDogQmluYXJ5U3RyZWFtLCBieXRlT3JkZXI6IEJ5dGVPcmRlciwgdmFyaW50cyA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHdyaXRlcjogTkJUV3JpdGVyID0gbmV3IE5CVFdyaXRlcihvdXQsIGJ5dGVPcmRlcik7XG4gICAgICAgIHdyaXRlci5zZXRVc2VWYXJpbnQodmFyaW50cyk7XG4gICAgICAgIHdyaXRlci53cml0ZUNvbXBvdW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCeXRlKG5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5oYXMobmFtZSkgPyAodGhpcy5jaGlsZHJlbi5nZXQobmFtZSkgYXMgQnl0ZVZhbCkuZ2V0VmFsdWUoKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2hvcnQobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBTaG9ydFZhbCkuZ2V0VmFsdWUoKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TnVtYmVyKG5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5oYXMobmFtZSkgPyAodGhpcy5jaGlsZHJlbi5nZXQobmFtZSkgYXMgTnVtYmVyVmFsKS5nZXRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRMb25nKG5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5oYXMobmFtZSkgPyAodGhpcy5jaGlsZHJlbi5nZXQobmFtZSkgYXMgTG9uZ1ZhbCkuZ2V0VmFsdWUoKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmxvYXQobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBGbG9hdFZhbCkuZ2V0VmFsdWUoKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RG91YmxlKG5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5oYXMobmFtZSkgPyAodGhpcy5jaGlsZHJlbi5nZXQobmFtZSkgYXMgRG91YmxlVmFsKS5nZXRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTdHJpbmcobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBTdHJpbmdWYWwpLmdldFZhbHVlKCkgOiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5kZWxldGUoa2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW50cmllcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFtzdHJpbmcsIGFueV0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZW50cmllcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uaGFzKGtleSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uc2l6ZTtcbiAgICB9XG5cbiAgICAvLyBUaGFua3Mgc3RhY2tvdmVyZmxvdyEgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU5NDgzMzUvaG93LWNhbi1pLWNoZWNrLWlmLXR3by1tYXAtb2JqZWN0cy1hcmUtZXF1YWxcbiAgICBwdWJsaWMgZXF1YWxzKHRoYXQ6IE5CVFRhZ0NvbXBvdW5kKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLnNpemUgIT09IHRoYXQuY2hpbGRyZW4uc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RWYWwgPSB0aGF0LmNoaWxkcmVuLmdldChrZXkpO1xuXG4gICAgICAgICAgICBpZiAodGVzdFZhbCA9PT0gdW5kZWZpbmVkICYmICF0aGF0LmNoaWxkcmVuLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgTkJUVGFnQ29tcG91bmQgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIE5CVFRhZ0NvbXBvdW5kICYmICF2YWwuZXF1YWxzKHRlc3RWYWwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgQnl0ZVZhbCAmJiB0ZXN0VmFsIGluc3RhbmNlb2YgQnl0ZVZhbCAmJiB2YWwuZ2V0VmFsdWUoKSAhPT0gdGVzdFZhbC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgRG91YmxlVmFsICYmIHRlc3RWYWwgaW5zdGFuY2VvZiBEb3VibGVWYWwgJiYgdmFsLmdldFZhbHVlKCkgIT09IHRlc3RWYWwuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIEZsb2F0VmFsICYmIHRlc3RWYWwgaW5zdGFuY2VvZiBGbG9hdFZhbCAmJiB2YWwuZ2V0VmFsdWUoKSAhPT0gdGVzdFZhbC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgTG9uZ1ZhbCAmJiB0ZXN0VmFsIGluc3RhbmNlb2YgTG9uZ1ZhbCAmJiB2YWwuZ2V0VmFsdWUoKSAhPT0gdGVzdFZhbC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgTnVtYmVyVmFsICYmIHRlc3RWYWwgaW5zdGFuY2VvZiBOdW1iZXJWYWwgJiYgdmFsLmdldFZhbHVlKCkgIT09IHRlc3RWYWwuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIFNob3J0VmFsICYmIHRlc3RWYWwgaW5zdGFuY2VvZiBTaG9ydFZhbCAmJiB2YWwuZ2V0VmFsdWUoKSAhPT0gdGVzdFZhbC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgU3RyaW5nVmFsICYmIHRlc3RWYWwgaW5zdGFuY2VvZiBTdHJpbmdWYWwgJiYgdmFsLmdldFZhbHVlKCkgIT09IHRlc3RWYWwuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQSxJQUFxQixpQkFBckIsTUFBcUIsZUFBZTtDQUNoQztDQUNBLDJCQUE2QyxJQUFJLElBQUk7Q0FFckQsT0FBYyxhQUFhLE1BQWMsV0FBc0M7RUFDM0UsT0FBTyxlQUFlLGVBQWUsSUFBSSw0QkFBQSxRQUFhLFFBQUEsUUFBRyxhQUFhLElBQUksQ0FBQyxHQUFHLFNBQVM7Q0FDM0Y7Q0FFQSxPQUFjLGVBQWUsT0FBcUIsV0FBc0IsVUFBVSxPQUF1QjtFQUNyRyxNQUFNLFNBQW9CLElBQUksa0JBQUEsUUFBVSxPQUFPLFNBQVM7RUFDeEQsT0FBTyxhQUFhLE9BQU87RUFDM0IsT0FBTyxPQUFPLE1BQU07Q0FDeEI7Q0FFQSxZQUFtQixPQUFzQixNQUFNO0VBQzNDLEtBQUssT0FBTztDQUNoQjtDQUVBLFFBQWUsTUFBb0I7RUFDL0IsS0FBSyxPQUFPO0NBQ2hCO0NBRUEsVUFBZ0M7RUFDNUIsT0FBTyxLQUFLO0NBQ2hCO0NBRUEsU0FBZ0IsTUFBYyxPQUFrQjtFQUM1QyxJQUFJLGlCQUFpQixrQkFBa0IsU0FBUyxNQUFNLFFBQVEsR0FDMUQsTUFBTSxJQUFJLE1BQU0sMENBQTBDLE1BQU0sUUFBUSxFQUFFLGNBQWMsTUFBTTtFQUdsRyxLQUFLLFNBQVMsSUFBSSxNQUFNLEtBQUs7Q0FDakM7Q0FFQSxTQUFnQixLQUEyQjtFQUN2QyxLQUFLLFNBQVMsSUFBSSxJQUFJLFFBQVEsR0FBSSxHQUFHO0NBQ3pDO0NBRUEsUUFBZSxNQUFjLFFBQWtDO0VBQzNELElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxHQUN0QixPQUFPLEtBQUssU0FBUyxJQUFJLElBQUk7RUFHakMsSUFBSSxRQUFRO0dBQ1IsTUFBTSw4QkFBd0IsSUFBSSxJQUFJO0dBQ3RDLEtBQUssU0FBUyxNQUFNLFdBQVc7R0FDL0IsT0FBTztFQUNYO0VBRUEsT0FBTztDQUNYO0NB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