UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

224 lines (221 loc) • 21.3 kB
import { NetworkUtil } from '../network/NetworkUtil.es.js'; const AttributeIds = { Absorption: "minecraft:absorption", PlayerSaturation: "minecraft:player.saturation", PlayerExhaustion: "minecraft:player.exhaustion", KnockbackResistence: "minecraft:knockback_resistance", Health: "minecraft:health", Movement: "minecraft:movement", FollowRange: "minecraft:follow_range", PlayerHunger: "minecraft:player.hunger", AttackDamage: "minecraft:attack_damage", PlayerLevel: "minecraft:player.level", PlayerExperience: "minecraft:player.experience", UnderwaterMovement: "minecraft:underwater_movement", Luck: "minecraft:luck", FallDamage: "minecraft:fall_damage", HorseJumpStrength: "minecraft:horse.jump_strength", ZombieSpawnReinforcements: "minecraft:zombie.spawn_reinforcements", LavaMovement: "minecraft:lava_movement" }; class Attribute { name; min; max; default; value; /** * Class used to store Attribute data. * * @param {object} data - The attribute data. * @param {string} data.name - The name of the attribute. * @param {number} data.min - The minimum value of the attribute. * @param {number} data.max - The maximum value of the attribute. * @param {number} data.def - The default value of the attribute. * @param {number} data.value - The current value of the attribute. */ constructor({ name, min, max, def, value }) { this.name = name; this.min = min; this.max = max; this.default = def; this.value = value; } networkSerialize(stream) { stream.writeFloatLE(this.min); stream.writeFloatLE(this.max); stream.writeFloatLE(this.value); stream.writeFloatLE(this.default); NetworkUtil.writeString(stream, this.name); stream.writeUnsignedVarInt(0); } static networkDeserialize(stream) { const attr = new Attribute({ min: stream.readFloatLE(), max: stream.readFloatLE(), value: stream.readFloatLE(), def: stream.readFloatLE(), name: NetworkUtil.readString(stream) }); stream.readUnsignedVarInt(); return attr; } getName() { return this.name; } getMin() { return this.min; } getMax() { return this.max; } getDefault() { return this.default; } getValue() { return this.value; } } const MAX_FLOAT32 = 34028234663852886e22; class Attributes { attributes = []; /** * Returns a list of default attributes to send the first time a player spawns. */ getDefaults() { return [ new Attribute({ name: AttributeIds.Absorption, min: 0, max: 16, def: 0, value: 0 }), new Attribute({ name: AttributeIds.PlayerSaturation, min: 0, max: 20, def: 5, value: 4 }), new Attribute({ name: AttributeIds.PlayerExhaustion, min: 0, max: 20, def: 0, value: 0 }), new Attribute({ name: AttributeIds.KnockbackResistence, min: 0, max: 1, def: 0, value: 0 }), new Attribute({ name: AttributeIds.Health, min: 0, max: 20, def: 20, value: 20 }), new Attribute({ name: AttributeIds.Movement, min: 0, max: MAX_FLOAT32, def: 0.1, value: 0.1 }), new Attribute({ name: AttributeIds.FollowRange, min: 0, max: 2048, def: 16, value: 16 }), new Attribute({ name: AttributeIds.PlayerHunger, min: 0, max: 20, def: 20, value: 20 }), new Attribute({ name: AttributeIds.AttackDamage, min: 0, max: 1, def: 1, value: 1 }), new Attribute({ name: AttributeIds.PlayerLevel, min: 0, max: 24791, def: 0, value: 0 }), new Attribute({ name: AttributeIds.PlayerExperience, min: 0, max: 1, def: 0, value: 0 }), new Attribute({ name: AttributeIds.UnderwaterMovement, min: 0, max: MAX_FLOAT32, def: 0.02, value: 0.02 }), new Attribute({ name: AttributeIds.Luck, min: -1024, max: 1024, def: 0, value: 0 }), new Attribute({ name: AttributeIds.FallDamage, min: 0, max: MAX_FLOAT32, def: 1, value: 1 }), new Attribute({ name: AttributeIds.HorseJumpStrength, min: 0, max: 2, def: 0.7, value: 0.7 }), new Attribute({ name: AttributeIds.ZombieSpawnReinforcements, min: 0, max: 1, def: 0, value: 0 }), new Attribute({ name: AttributeIds.LavaMovement, min: 0, max: MAX_FLOAT32, def: 0.02, value: 0.02 }) ]; } getAttributes() { return this.attributes; } networkSerialize() { } } export { Attribute, AttributeIds, Attributes }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0cmlidXRlLmVzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW50aXR5L0F0dHJpYnV0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBCaW5hcnlTdHJlYW0gZnJvbSAnQGpzcHJpc21hcmluZS9qc2JpbmFyeXV0aWxzJztcbmltcG9ydCB7IE5ldHdvcmtVdGlsIH0gZnJvbSAnLi4vbmV0d29yay9OZXR3b3JrVXRpbCc7XG5cbmV4cG9ydCBjb25zdCBBdHRyaWJ1dGVJZHMgPSB7XG4gICAgQWJzb3JwdGlvbjogJ21pbmVjcmFmdDphYnNvcnB0aW9uJyxcbiAgICBQbGF5ZXJTYXR1cmF0aW9uOiAnbWluZWNyYWZ0OnBsYXllci5zYXR1cmF0aW9uJyxcbiAgICBQbGF5ZXJFeGhhdXN0aW9uOiAnbWluZWNyYWZ0OnBsYXllci5leGhhdXN0aW9uJyxcbiAgICBLbm9ja2JhY2tSZXNpc3RlbmNlOiAnbWluZWNyYWZ0Omtub2NrYmFja19yZXNpc3RhbmNlJyxcbiAgICBIZWFsdGg6ICdtaW5lY3JhZnQ6aGVhbHRoJyxcbiAgICBNb3ZlbWVudDogJ21pbmVjcmFmdDptb3ZlbWVudCcsXG4gICAgRm9sbG93UmFuZ2U6ICdtaW5lY3JhZnQ6Zm9sbG93X3JhbmdlJyxcbiAgICBQbGF5ZXJIdW5nZXI6ICdtaW5lY3JhZnQ6cGxheWVyLmh1bmdlcicsXG4gICAgQXR0YWNrRGFtYWdlOiAnbWluZWNyYWZ0OmF0dGFja19kYW1hZ2UnLFxuICAgIFBsYXllckxldmVsOiAnbWluZWNyYWZ0OnBsYXllci5sZXZlbCcsXG4gICAgUGxheWVyRXhwZXJpZW5jZTogJ21pbmVjcmFmdDpwbGF5ZXIuZXhwZXJpZW5jZScsXG4gICAgVW5kZXJ3YXRlck1vdmVtZW50OiAnbWluZWNyYWZ0OnVuZGVyd2F0ZXJfbW92ZW1lbnQnLFxuICAgIEx1Y2s6ICdtaW5lY3JhZnQ6bHVjaycsXG4gICAgRmFsbERhbWFnZTogJ21pbmVjcmFmdDpmYWxsX2RhbWFnZScsXG4gICAgSG9yc2VKdW1wU3RyZW5ndGg6ICdtaW5lY3JhZnQ6aG9yc2UuanVtcF9zdHJlbmd0aCcsXG4gICAgWm9tYmllU3Bhd25SZWluZm9yY2VtZW50czogJ21pbmVjcmFmdDp6b21iaWUuc3Bhd25fcmVpbmZvcmNlbWVudHMnLFxuICAgIExhdmFNb3ZlbWVudDogJ21pbmVjcmFmdDpsYXZhX21vdmVtZW50J1xufTtcblxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtaW46IG51bWJlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1heDogbnVtYmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdDogbnVtYmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmFsdWU6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIENsYXNzIHVzZWQgdG8gc3RvcmUgQXR0cmlidXRlIGRhdGEuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSAtIFRoZSBhdHRyaWJ1dGUgZGF0YS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YS5uYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGF0YS5taW4gLSBUaGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkYXRhLm1heCAtIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRhdGEuZGVmIC0gVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGF0YS52YWx1ZSAtIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbWluLFxuICAgICAgICBtYXgsXG4gICAgICAgIGRlZixcbiAgICAgICAgdmFsdWVcbiAgICB9OiB7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgbWluOiBudW1iZXI7XG4gICAgICAgIG1heDogbnVtYmVyO1xuICAgICAgICBkZWY6IG51bWJlcjtcbiAgICAgICAgdmFsdWU6IG51bWJlcjtcbiAgICB9KSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgICB0aGlzLm1heCA9IG1heDtcbiAgICAgICAgdGhpcy5kZWZhdWx0ID0gZGVmO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIG5ldHdvcmtTZXJpYWxpemUoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiB2b2lkIHtcbiAgICAgICAgc3RyZWFtLndyaXRlRmxvYXRMRSh0aGlzLm1pbik7XG4gICAgICAgIHN0cmVhbS53cml0ZUZsb2F0TEUodGhpcy5tYXgpO1xuICAgICAgICBzdHJlYW0ud3JpdGVGbG9hdExFKHRoaXMudmFsdWUpO1xuICAgICAgICBzdHJlYW0ud3JpdGVGbG9hdExFKHRoaXMuZGVmYXVsdCk7XG4gICAgICAgIE5ldHdvcmtVdGlsLndyaXRlU3RyaW5nKHN0cmVhbSwgdGhpcy5uYW1lKTtcbiAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRWYXJJbnQoMCk7IC8vIFRPRE86IG1vZGlmaWVyIGNvdW50XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBuZXR3b3JrRGVzZXJpYWxpemUoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiBBdHRyaWJ1dGUge1xuICAgICAgICBjb25zdCBhdHRyID0gbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICBtaW46IHN0cmVhbS5yZWFkRmxvYXRMRSgpLFxuICAgICAgICAgICAgbWF4OiBzdHJlYW0ucmVhZEZsb2F0TEUoKSxcbiAgICAgICAgICAgIHZhbHVlOiBzdHJlYW0ucmVhZEZsb2F0TEUoKSxcbiAgICAgICAgICAgIGRlZjogc3RyZWFtLnJlYWRGbG9hdExFKCksXG4gICAgICAgICAgICBuYW1lOiBOZXR3b3JrVXRpbC5yZWFkU3RyaW5nKHN0cmVhbSlcbiAgICAgICAgfSk7XG4gICAgICAgIHN0cmVhbS5yZWFkVW5zaWduZWRWYXJJbnQoKTsgLy8gVE9ETzogc2tpcCBmb3Igbm93XG4gICAgICAgIHJldHVybiBhdHRyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE1pbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5taW47XG4gICAgfVxuXG4gICAgcHVibGljIGdldE1heCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERlZmF1bHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxufVxuXG5jb25zdCBNQVhfRkxPQVQzMiA9IDMuNDAyODIzNDY2Mzg1Mjg4NmUzODtcbmV4cG9ydCBjbGFzcyBBdHRyaWJ1dGVzIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBkZWZhdWx0IGF0dHJpYnV0ZXMgdG8gc2VuZCB0aGUgZmlyc3QgdGltZSBhIHBsYXllciBzcGF3bnMuXG4gICAgICovXG4gICAgcHVibGljIGdldERlZmF1bHRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLkFic29ycHRpb24sXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogMTYsXG4gICAgICAgICAgICAgICAgZGVmOiAwLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAwXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5QbGF5ZXJTYXR1cmF0aW9uLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IDIwLFxuICAgICAgICAgICAgICAgIGRlZjogNSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogNFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuUGxheWVyRXhoYXVzdGlvbixcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiAyMCxcbiAgICAgICAgICAgICAgICBkZWY6IDAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLktub2NrYmFja1Jlc2lzdGVuY2UsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICAgICAgICBkZWY6IDAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLkhlYWx0aCxcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiAyMCxcbiAgICAgICAgICAgICAgICBkZWY6IDIwLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAyMFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuTW92ZW1lbnQsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogTUFYX0ZMT0FUMzIsXG4gICAgICAgICAgICAgICAgZGVmOiAwLjEsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDAuMVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuRm9sbG93UmFuZ2UsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogMjA0OCxcbiAgICAgICAgICAgICAgICBkZWY6IDE2LFxuICAgICAgICAgICAgICAgIHZhbHVlOiAxNlxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuUGxheWVySHVuZ2VyLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IDIwLFxuICAgICAgICAgICAgICAgIGRlZjogMjAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDIwXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5BdHRhY2tEYW1hZ2UsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICAgICAgICBkZWY6IDEsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDFcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLlBsYXllckxldmVsLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IDI0NzkxLFxuICAgICAgICAgICAgICAgIGRlZjogMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuUGxheWVyRXhwZXJpZW5jZSxcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiAxLFxuICAgICAgICAgICAgICAgIGRlZjogMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuVW5kZXJ3YXRlck1vdmVtZW50LFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IE1BWF9GTE9BVDMyLFxuICAgICAgICAgICAgICAgIGRlZjogMC4wMixcbiAgICAgICAgICAgICAgICB2YWx1ZTogMC4wMlxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuTHVjayxcbiAgICAgICAgICAgICAgICBtaW46IC0xMDI0LFxuICAgICAgICAgICAgICAgIG1heDogMTAyNCxcbiAgICAgICAgICAgICAgICBkZWY6IDAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLkZhbGxEYW1hZ2UsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogTUFYX0ZMT0FUMzIsXG4gICAgICAgICAgICAgICAgZGVmOiAxLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAxXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5Ib3JzZUp1bXBTdHJlbmd0aCxcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiAyLFxuICAgICAgICAgICAgICAgIGRlZjogMC43LFxuICAgICAgICAgICAgICAgIHZhbHVlOiAwLjdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLlpvbWJpZVNwYXduUmVpbmZvcmNlbWVudHMsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICAgICAgICBkZWY6IDAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLkxhdmFNb3ZlbWVudCxcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiBNQVhfRkxPQVQzMixcbiAgICAgICAgICAgICAgICBkZWY6IDAuMDIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDAuMDJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHVibGljIGdldEF0dHJpYnV0ZXMoKTogQXR0cmlidXRlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXR3b3JrU2VyaWFsaXplKCk6IHZvaWQge31cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdPLE1BQU0sWUFBZSxHQUFBO0FBQUEsRUFDeEIsVUFBWSxFQUFBLHNC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