@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
217 lines (216 loc) • 17.5 kB
JavaScript
import { NetworkUtil } from "../network/NetworkUtil.es.js";
//#region src/entity/Attribute.ts
var 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"
};
var Attribute = 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;
}
};
var MAX_FLOAT32 = 34028234663852886e22;
var Attributes = class {
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: .1,
value: .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: .02,
value: .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: .7,
value: .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: .02,
value: .02
})
];
}
getAttributes() {
return this.attributes;
}
networkSerialize() {}
};
//#endregion
export { Attribute, AttributeIds, Attributes };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0cmlidXRlLmVzLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbnRpdHkvQXR0cmlidXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIEJpbmFyeVN0cmVhbSBmcm9tICdAanNwcmlzbWFyaW5lL2pzYmluYXJ5dXRpbHMnO1xuaW1wb3J0IHsgTmV0d29ya1V0aWwgfSBmcm9tICcuLi9uZXR3b3JrL05ldHdvcmtVdGlsJztcblxuZXhwb3J0IGNvbnN0IEF0dHJpYnV0ZUlkcyA9IHtcbiAgICBBYnNvcnB0aW9uOiAnbWluZWNyYWZ0OmFic29ycHRpb24nLFxuICAgIFBsYXllclNhdHVyYXRpb246ICdtaW5lY3JhZnQ6cGxheWVyLnNhdHVyYXRpb24nLFxuICAgIFBsYXllckV4aGF1c3Rpb246ICdtaW5lY3JhZnQ6cGxheWVyLmV4aGF1c3Rpb24nLFxuICAgIEtub2NrYmFja1Jlc2lzdGVuY2U6ICdtaW5lY3JhZnQ6a25vY2tiYWNrX3Jlc2lzdGFuY2UnLFxuICAgIEhlYWx0aDogJ21pbmVjcmFmdDpoZWFsdGgnLFxuICAgIE1vdmVtZW50OiAnbWluZWNyYWZ0Om1vdmVtZW50JyxcbiAgICBGb2xsb3dSYW5nZTogJ21pbmVjcmFmdDpmb2xsb3dfcmFuZ2UnLFxuICAgIFBsYXllckh1bmdlcjogJ21pbmVjcmFmdDpwbGF5ZXIuaHVuZ2VyJyxcbiAgICBBdHRhY2tEYW1hZ2U6ICdtaW5lY3JhZnQ6YXR0YWNrX2RhbWFnZScsXG4gICAgUGxheWVyTGV2ZWw6ICdtaW5lY3JhZnQ6cGxheWVyLmxldmVsJyxcbiAgICBQbGF5ZXJFeHBlcmllbmNlOiAnbWluZWNyYWZ0OnBsYXllci5leHBlcmllbmNlJyxcbiAgICBVbmRlcndhdGVyTW92ZW1lbnQ6ICdtaW5lY3JhZnQ6dW5kZXJ3YXRlcl9tb3ZlbWVudCcsXG4gICAgTHVjazogJ21pbmVjcmFmdDpsdWNrJyxcbiAgICBGYWxsRGFtYWdlOiAnbWluZWNyYWZ0OmZhbGxfZGFtYWdlJyxcbiAgICBIb3JzZUp1bXBTdHJlbmd0aDogJ21pbmVjcmFmdDpob3JzZS5qdW1wX3N0cmVuZ3RoJyxcbiAgICBab21iaWVTcGF3blJlaW5mb3JjZW1lbnRzOiAnbWluZWNyYWZ0OnpvbWJpZS5zcGF3bl9yZWluZm9yY2VtZW50cycsXG4gICAgTGF2YU1vdmVtZW50OiAnbWluZWNyYWZ0OmxhdmFfbW92ZW1lbnQnXG59O1xuXG5leHBvcnQgY2xhc3MgQXR0cmlidXRlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1pbjogbnVtYmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF4OiBudW1iZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0OiBudW1iZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSB2YWx1ZTogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQ2xhc3MgdXNlZCB0byBzdG9yZSBBdHRyaWJ1dGUgZGF0YS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIC0gVGhlIGF0dHJpYnV0ZSBkYXRhLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhLm5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkYXRhLm1pbiAtIFRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRhdGEubWF4IC0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGF0YS5kZWYgLSBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkYXRhLnZhbHVlIC0gVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioe1xuICAgICAgICBuYW1lLFxuICAgICAgICBtaW4sXG4gICAgICAgIG1heCxcbiAgICAgICAgZGVmLFxuICAgICAgICB2YWx1ZVxuICAgIH06IHtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBtaW46IG51bWJlcjtcbiAgICAgICAgbWF4OiBudW1iZXI7XG4gICAgICAgIGRlZjogbnVtYmVyO1xuICAgICAgICB2YWx1ZTogbnVtYmVyO1xuICAgIH0pIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5taW4gPSBtaW47XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuICAgICAgICB0aGlzLmRlZmF1bHQgPSBkZWY7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmV0d29ya1NlcmlhbGl6ZShzdHJlYW06IEJpbmFyeVN0cmVhbSk6IHZvaWQge1xuICAgICAgICBzdHJlYW0ud3JpdGVGbG9hdExFKHRoaXMubWluKTtcbiAgICAgICAgc3RyZWFtLndyaXRlRmxvYXRMRSh0aGlzLm1heCk7XG4gICAgICAgIHN0cmVhbS53cml0ZUZsb2F0TEUodGhpcy52YWx1ZSk7XG4gICAgICAgIHN0cmVhbS53cml0ZUZsb2F0TEUodGhpcy5kZWZhdWx0KTtcbiAgICAgICAgTmV0d29ya1V0aWwud3JpdGVTdHJpbmcoc3RyZWFtLCB0aGlzLm5hbWUpO1xuICAgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZFZhckludCgwKTsgLy8gVE9ETzogbW9kaWZpZXIgY291bnRcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIG5ldHdvcmtEZXNlcmlhbGl6ZShzdHJlYW06IEJpbmFyeVN0cmVhbSk6IEF0dHJpYnV0ZSB7XG4gICAgICAgIGNvbnN0IGF0dHIgPSBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgIG1pbjogc3RyZWFtLnJlYWRGbG9hdExFKCksXG4gICAgICAgICAgICBtYXg6IHN0cmVhbS5yZWFkRmxvYXRMRSgpLFxuICAgICAgICAgICAgdmFsdWU6IHN0cmVhbS5yZWFkRmxvYXRMRSgpLFxuICAgICAgICAgICAgZGVmOiBzdHJlYW0ucmVhZEZsb2F0TEUoKSxcbiAgICAgICAgICAgIG5hbWU6IE5ldHdvcmtVdGlsLnJlYWRTdHJpbmcoc3RyZWFtKVxuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtLnJlYWRVbnNpZ25lZFZhckludCgpOyAvLyBUT0RPOiBza2lwIGZvciBub3dcbiAgICAgICAgcmV0dXJuIGF0dHI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TWluKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TWF4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1heDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVmYXVsdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG59XG5cbmNvbnN0IE1BWF9GTE9BVDMyID0gMy40MDI4MjM0NjYzODUyODg2ZTM4O1xuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZXMge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYXR0cmlidXRlczogQXR0cmlidXRlW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBsaXN0IG9mIGRlZmF1bHQgYXR0cmlidXRlcyB0byBzZW5kIHRoZSBmaXJzdCB0aW1lIGEgcGxheWVyIHNwYXducy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RGVmYXVsdHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuQWJzb3JwdGlvbixcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiAxNixcbiAgICAgICAgICAgICAgICBkZWY6IDAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLlBsYXllclNhdHVyYXRpb24sXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogMjAsXG4gICAgICAgICAgICAgICAgZGVmOiA1LFxuICAgICAgICAgICAgICAgIHZhbHVlOiA0XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5QbGF5ZXJFeGhhdXN0aW9uLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IDIwLFxuICAgICAgICAgICAgICAgIGRlZjogMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuS25vY2tiYWNrUmVzaXN0ZW5jZSxcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiAxLFxuICAgICAgICAgICAgICAgIGRlZjogMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuSGVhbHRoLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IDIwLFxuICAgICAgICAgICAgICAgIGRlZjogMjAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDIwXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5Nb3ZlbWVudCxcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiBNQVhfRkxPQVQzMixcbiAgICAgICAgICAgICAgICBkZWY6IDAuMSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMC4xXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5Gb2xsb3dSYW5nZSxcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiAyMDQ4LFxuICAgICAgICAgICAgICAgIGRlZjogMTYsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDE2XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5QbGF5ZXJIdW5nZXIsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogMjAsXG4gICAgICAgICAgICAgICAgZGVmOiAyMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMjBcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLkF0dGFja0RhbWFnZSxcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiAxLFxuICAgICAgICAgICAgICAgIGRlZjogMSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuUGxheWVyTGV2ZWwsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogMjQ3OTEsXG4gICAgICAgICAgICAgICAgZGVmOiAwLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAwXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5QbGF5ZXJFeHBlcmllbmNlLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IDEsXG4gICAgICAgICAgICAgICAgZGVmOiAwLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAwXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5VbmRlcndhdGVyTW92ZW1lbnQsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogTUFYX0ZMT0FUMzIsXG4gICAgICAgICAgICAgICAgZGVmOiAwLjAyLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAwLjAyXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5MdWNrLFxuICAgICAgICAgICAgICAgIG1pbjogLTEwMjQsXG4gICAgICAgICAgICAgICAgbWF4OiAxMDI0LFxuICAgICAgICAgICAgICAgIGRlZjogMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuRmFsbERhbWFnZSxcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiBNQVhfRkxPQVQzMixcbiAgICAgICAgICAgICAgICBkZWY6IDEsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDFcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLkhvcnNlSnVtcFN0cmVuZ3RoLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IDIsXG4gICAgICAgICAgICAgICAgZGVmOiAwLjcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDAuN1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuWm9tYmllU3Bhd25SZWluZm9yY2VtZW50cyxcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiAxLFxuICAgICAgICAgICAgICAgIGRlZjogMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuTGF2YU1vdmVtZW50LFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IE1BWF9GTE9BVDMyLFxuICAgICAgICAgICAgICAgIGRlZjogMC4wMixcbiAgICAgICAgICAgICAgICB2YWx1ZTogMC4wMlxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXR0cmlidXRlcygpOiBBdHRyaWJ1dGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIG5ldHdvcmtTZXJpYWxpemUoKTogdm9pZCB7fVxufVxuIl0sIm1hcHBpbmdzIjoiOztBQUdBLElBQWEsZUFBZTtDQUN4QixZQUFZO0NBQ1osa0JBQWtCO0NBQ2xC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