@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
137 lines (134 loc) • 21.6 kB
JavaScript
import { Vector3 } from '@jsprismarine/math';
import { Item } from '../../item/Item.es.js';
import Identifiers from '../Identifiers.es.js';
import { NetworkUtil } from '../NetworkUtil.es.js';
import DataPacket from './DataPacket.es.js';
var UseItemAction = /* @__PURE__ */ ((UseItemAction2) => {
UseItemAction2[UseItemAction2["CLICK_BLOCK"] = 0] = "CLICK_BLOCK";
UseItemAction2[UseItemAction2["CLICK_AIR"] = 1] = "CLICK_AIR";
UseItemAction2[UseItemAction2["BREAK_BLOCK"] = 2] = "BREAK_BLOCK";
return UseItemAction2;
})(UseItemAction || {});
var TransactionType = /* @__PURE__ */ ((TransactionType2) => {
TransactionType2[TransactionType2["NORMAL"] = 0] = "NORMAL";
TransactionType2[TransactionType2["MISMATCH"] = 1] = "MISMATCH";
TransactionType2[TransactionType2["USE_ITEM"] = 2] = "USE_ITEM";
TransactionType2[TransactionType2["USE_ITEM_ON_ENTITY"] = 3] = "USE_ITEM_ON_ENTITY";
TransactionType2[TransactionType2["RELASE_ITEM"] = 4] = "RELASE_ITEM";
return TransactionType2;
})(TransactionType || {});
class LegacySlotChange {
constructor(containerId, slots) {
this.containerId = containerId;
this.slots = slots;
}
static fromNetwork(stream) {
const containerId = stream.readByte();
const slotCount = stream.readUnsignedVarInt();
const slots = Array.from(stream.read(slotCount));
return new LegacySlotChange(containerId, slots);
}
toNetwork(stream) {
stream.writeByte(this.containerId);
stream.writeUnsignedVarInt(this.slots.length);
stream.write(Buffer.from(this.slots));
}
}
var ActionSource = /* @__PURE__ */ ((ActionSource2) => {
ActionSource2[ActionSource2["INVALID"] = -1] = "INVALID";
ActionSource2[ActionSource2["CONTAINER"] = 0] = "CONTAINER";
ActionSource2[ActionSource2["GLOBAL"] = 1] = "GLOBAL";
ActionSource2[ActionSource2["WORLD"] = 2] = "WORLD";
ActionSource2[ActionSource2["CREATIVE"] = 3] = "CREATIVE";
ActionSource2[ActionSource2["UNTRACKED_INTERACTION_UI"] = 100] = "UNTRACKED_INTERACTION_UI";
ActionSource2[ActionSource2["NON_IMPLEMENTED_TODO"] = 99999] = "NON_IMPLEMENTED_TODO";
return ActionSource2;
})(ActionSource || {});
class InventoryAction {
constructor(sourceType, windowId, sourceFlags, targetSlot, oldItem, newItem) {
this.sourceType = sourceType;
this.windowId = windowId;
this.sourceFlags = sourceFlags;
this.targetSlot = targetSlot;
this.oldItem = oldItem;
this.newItem = newItem;
}
static fromNetwork(stream) {
const sourceType = stream.readUnsignedVarInt();
const windowId = sourceType === 0 /* CONTAINER */ || sourceType === 99999 /* NON_IMPLEMENTED_TODO */ ? stream.readVarInt() : null;
const sourceFlags = sourceType === 2 /* WORLD */ ? stream.readUnsignedVarInt() : null;
return new InventoryAction(
sourceType,
windowId,
sourceFlags,
stream.readUnsignedVarInt(),
Item.networkDeserialize(stream),
Item.networkDeserialize(stream)
);
}
toNetwork(stream) {
stream.writeUnsignedVarInt(this.sourceType);
[0 /* CONTAINER */, 99999 /* NON_IMPLEMENTED_TODO */].includes(this.sourceType) && stream.writeVarInt(this.windowId);
this.sourceType === 2 /* WORLD */ && stream.writeUnsignedVarInt(this.sourceFlags);
stream.writeUnsignedVarInt(this.targetSlot);
this.oldItem.networkSerialize(stream);
this.newItem.networkSerialize(stream);
}
}
class InventoryTransactionPacket extends DataPacket {
static NetID = Identifiers.InventoryTransactionPacket;
legacyRequestId;
legacySlotChanges;
transactionType;
inventoryActions;
transactionData;
decodePayload() {
this.legacyRequestId = this.readVarInt();
if (this.legacyRequestId !== 0) {
const slotChanges = this.readUnsignedVarInt();
this.legacySlotChanges = Array.from({ length: slotChanges }, () => LegacySlotChange.fromNetwork(this));
}
this.transactionType = this.readUnsignedVarInt();
const actionsCount = this.readUnsignedVarInt();
this.inventoryActions = Array.from({ length: actionsCount }, () => InventoryAction.fromNetwork(this));
switch (this.transactionType) {
case 0 /* NORMAL */:
case 1 /* MISMATCH */:
break;
case 2 /* USE_ITEM */:
this.transactionData = {
actionType: this.readUnsignedVarInt(),
blockPosition: NetworkUtil.readBlockPosition(this),
blockFace: this.readVarInt(),
hotbarSlot: this.readVarInt(),
itemInHand: Item.networkDeserialize(this),
playerPosition: new Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()),
clickPosition: new Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()),
blockRuntimeId: this.readUnsignedVarInt()
};
break;
case 3 /* USE_ITEM_ON_ENTITY */:
this.transactionData = {
entityRuntimeId: this.readUnsignedVarLong(),
actionType: this.readUnsignedVarInt(),
hotbarSlot: this.readVarInt(),
itemInHand: Item.networkDeserialize(this),
playerPosition: new Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()),
clickPosition: new Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE())
};
break;
case 4 /* RELASE_ITEM */:
this.transactionData = {
actionType: this.readUnsignedVarInt(),
hotbarSlot: this.readVarInt(),
itemInHand: Item.networkDeserialize(this),
headRotation: new Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE())
};
break;
default:
throw new TypeError(`Unknown transaction type ${this.transactionType}`);
}
}
}
export { ActionSource, InventoryAction, LegacySlotChange, TransactionType, UseItemAction, InventoryTransactionPacket as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52ZW50b3J5VHJhbnNhY3Rpb25QYWNrZXQuZXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9uZXR3b3JrL3BhY2tldC9JbnZlbnRvcnlUcmFuc2FjdGlvblBhY2tldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBCaW5hcnlTdHJlYW0gZnJvbSAnQGpzcHJpc21hcmluZS9qc2JpbmFyeXV0aWxzJztcbmltcG9ydCB7IFZlY3RvcjMgfSBmcm9tICdAanNwcmlzbWFyaW5lL21hdGgnO1xuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uLy4uL2l0ZW0vSXRlbSc7XG5pbXBvcnQgdHlwZSBCbG9ja1Bvc2l0aW9uIGZyb20gJy4uLy4uL3dvcmxkL0Jsb2NrUG9zaXRpb24nO1xuaW1wb3J0IElkZW50aWZpZXJzIGZyb20gJy4uL0lkZW50aWZpZXJzJztcbmltcG9ydCB7IE5ldHdvcmtVdGlsIH0gZnJvbSAnLi4vTmV0d29ya1V0aWwnO1xuaW1wb3J0IERhdGFQYWNrZXQgZnJvbSAnLi9EYXRhUGFja2V0JztcblxuZXhwb3J0IGVudW0gVXNlSXRlbUFjdGlvbiB7XG4gICAgQ0xJQ0tfQkxPQ0ssXG4gICAgQ0xJQ0tfQUlSLFxuICAgIEJSRUFLX0JMT0NLXG59XG5cbmV4cG9ydCBlbnVtIFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgTk9STUFMLFxuICAgIE1JU01BVENILFxuICAgIFVTRV9JVEVNLFxuICAgIFVTRV9JVEVNX09OX0VOVElUWSxcbiAgICBSRUxBU0VfSVRFTVxufVxuXG5leHBvcnQgY2xhc3MgTGVnYWN5U2xvdENoYW5nZSB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY29udGFpbmVySWQ6IG51bWJlcixcbiAgICAgICAgcHVibGljIHNsb3RzOiBudW1iZXJbXVxuICAgICkge31cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU5ldHdvcmsoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiBMZWdhY3lTbG90Q2hhbmdlIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVySWQgPSBzdHJlYW0ucmVhZEJ5dGUoKTtcbiAgICAgICAgY29uc3Qgc2xvdENvdW50ID0gc3RyZWFtLnJlYWRVbnNpZ25lZFZhckludCgpO1xuICAgICAgICBjb25zdCBzbG90cyA9IEFycmF5LmZyb20oc3RyZWFtLnJlYWQoc2xvdENvdW50KSk7XG4gICAgICAgIHJldHVybiBuZXcgTGVnYWN5U2xvdENoYW5nZShjb250YWluZXJJZCwgc2xvdHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b05ldHdvcmsoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiB2b2lkIHtcbiAgICAgICAgc3RyZWFtLndyaXRlQnl0ZSh0aGlzLmNvbnRhaW5lcklkKTtcbiAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRWYXJJbnQodGhpcy5zbG90cy5sZW5ndGgpO1xuICAgICAgICBzdHJlYW0ud3JpdGUoQnVmZmVyLmZyb20odGhpcy5zbG90cykpO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gQWN0aW9uU291cmNlIHtcbiAgICBJTlZBTElEID0gLTEsXG4gICAgQ09OVEFJTkVSLFxuICAgIEdMT0JBTCxcbiAgICBXT1JMRCxcbiAgICBDUkVBVElWRSxcbiAgICBVTlRSQUNLRURfSU5URVJBQ1RJT05fVUkgPSAxMDAsXG4gICAgTk9OX0lNUExFTUVOVEVEX1RPRE8gPSA5OTk5OVxufVxuXG5leHBvcnQgY2xhc3MgSW52ZW50b3J5QWN0aW9uIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBzb3VyY2VUeXBlOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyB3aW5kb3dJZDogbnVtYmVyIHwgbnVsbCxcbiAgICAgICAgcHVibGljIHNvdXJjZUZsYWdzOiBudW1iZXIgfCBudWxsLFxuICAgICAgICBwdWJsaWMgdGFyZ2V0U2xvdDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgb2xkSXRlbTogSXRlbSxcbiAgICAgICAgcHVibGljIG5ld0l0ZW06IEl0ZW1cbiAgICApIHt9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21OZXR3b3JrKHN0cmVhbTogQmluYXJ5U3RyZWFtKTogSW52ZW50b3J5QWN0aW9uIHtcbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHN0cmVhbS5yZWFkVW5zaWduZWRWYXJJbnQoKTtcbiAgICAgICAgY29uc3Qgd2luZG93SWQgPVxuICAgICAgICAgICAgc291cmNlVHlwZSA9PT0gQWN0aW9uU291cmNlLkNPTlRBSU5FUiB8fCBzb3VyY2VUeXBlID09PSBBY3Rpb25Tb3VyY2UuTk9OX0lNUExFTUVOVEVEX1RPRE9cbiAgICAgICAgICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNvbnN0IHNvdXJjZUZsYWdzID0gc291cmNlVHlwZSA9PT0gQWN0aW9uU291cmNlLldPUkxEID8gc3RyZWFtLnJlYWRVbnNpZ25lZFZhckludCgpIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnZlbnRvcnlBY3Rpb24oXG4gICAgICAgICAgICBzb3VyY2VUeXBlLFxuICAgICAgICAgICAgd2luZG93SWQsXG4gICAgICAgICAgICBzb3VyY2VGbGFncyxcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkVW5zaWduZWRWYXJJbnQoKSxcbiAgICAgICAgICAgIEl0ZW0ubmV0d29ya0Rlc2VyaWFsaXplKHN0cmVhbSksXG4gICAgICAgICAgICBJdGVtLm5ldHdvcmtEZXNlcmlhbGl6ZShzdHJlYW0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvTmV0d29yayhzdHJlYW06IEJpbmFyeVN0cmVhbSk6IHZvaWQge1xuICAgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZFZhckludCh0aGlzLnNvdXJjZVR5cGUpO1xuICAgICAgICBbQWN0aW9uU291cmNlLkNPTlRBSU5FUiwgQWN0aW9uU291cmNlLk5PTl9JTVBMRU1FTlRFRF9UT0RPXS5pbmNsdWRlcyh0aGlzLnNvdXJjZVR5cGUpICYmXG4gICAgICAgICAgICBzdHJlYW0ud3JpdGVWYXJJbnQodGhpcy53aW5kb3dJZCEpO1xuICAgICAgICB0aGlzLnNvdXJjZVR5cGUgPT09IEFjdGlvblNvdXJjZS5XT1JMRCAmJiBzdHJlYW0ud3JpdGVVbnNpZ25lZFZhckludCh0aGlzLnNvdXJjZUZsYWdzISk7XG4gICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVmFySW50KHRoaXMudGFyZ2V0U2xvdCk7XG4gICAgICAgIHRoaXMub2xkSXRlbS5uZXR3b3JrU2VyaWFsaXplKHN0cmVhbSk7XG4gICAgICAgIHRoaXMubmV3SXRlbS5uZXR3b3JrU2VyaWFsaXplKHN0cmVhbSk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uRGF0YSB7XG4gICAgYWN0aW9uVHlwZTogbnVtYmVyO1xuICAgIGhvdGJhclNsb3Q6IG51bWJlcjtcbiAgICBpdGVtSW5IYW5kOiBJdGVtO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUl0ZW1EYXRhIGV4dGVuZHMgVHJhbnNhY3Rpb25EYXRhIHtcbiAgICBibG9ja1Bvc2l0aW9uOiBCbG9ja1Bvc2l0aW9uO1xuICAgIGJsb2NrRmFjZTogbnVtYmVyO1xuICAgIHBsYXllclBvc2l0aW9uOiBWZWN0b3IzO1xuICAgIGNsaWNrUG9zaXRpb246IFZlY3RvcjM7XG4gICAgYmxvY2tSdW50aW1lSWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VJdGVtT25FbnRpdHlEYXRhIGV4dGVuZHMgVHJhbnNhY3Rpb25EYXRhIHtcbiAgICBlbnRpdHlSdW50aW1lSWQ6IGJpZ2ludDtcbiAgICBwbGF5ZXJQb3NpdGlvbjogVmVjdG9yMztcbiAgICBjbGlja1Bvc2l0aW9uOiBWZWN0b3IzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbGFzZUl0ZW1EYXRhIGV4dGVuZHMgVHJhbnNhY3Rpb25EYXRhIHtcbiAgICBoZWFkUm90YXRpb246IFZlY3RvcjM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEludmVudG9yeVRyYW5zYWN0aW9uUGFja2V0IGV4dGVuZHMgRGF0YVBhY2tldCB7XG4gICAgcHVibGljIHN0YXRpYyBOZXRJRCA9IElkZW50aWZpZXJzLkludmVudG9yeVRyYW5zYWN0aW9uUGFja2V0O1xuXG4gICAgcHVibGljIGxlZ2FjeVJlcXVlc3RJZCE6IG51bWJlcjtcbiAgICBwdWJsaWMgbGVnYWN5U2xvdENoYW5nZXMhOiBMZWdhY3lTbG90Q2hhbmdlW107XG5cbiAgICBwdWJsaWMgdHJhbnNhY3Rpb25UeXBlITogVHJhbnNhY3Rpb25UeXBlO1xuICAgIHB1YmxpYyBpbnZlbnRvcnlBY3Rpb25zITogSW52ZW50b3J5QWN0aW9uW107XG5cbiAgICBwdWJsaWMgdHJhbnNhY3Rpb25EYXRhITogVHJhbnNhY3Rpb25EYXRhO1xuXG4gICAgcHVibGljIGRlY29kZVBheWxvYWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGVnYWN5UmVxdWVzdElkID0gdGhpcy5yZWFkVmFySW50KCk7XG4gICAgICAgIGlmICh0aGlzLmxlZ2FjeVJlcXVlc3RJZCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3Qgc2xvdENoYW5nZXMgPSB0aGlzLnJlYWRVbnNpZ25lZFZhckludCgpO1xuICAgICAgICAgICAgdGhpcy5sZWdhY3lTbG90Q2hhbmdlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHNsb3RDaGFuZ2VzIH0sICgpID0+IExlZ2FjeVNsb3RDaGFuZ2UuZnJvbU5ldHdvcmsodGhpcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmFuc2FjdGlvblR5cGUgPSB0aGlzLnJlYWRVbnNpZ25lZFZhckludCgpO1xuXG4gICAgICAgIGNvbnN0IGFjdGlvbnNDb3VudCA9IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KCk7XG4gICAgICAgIHRoaXMuaW52ZW50b3J5QWN0aW9ucyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGFjdGlvbnNDb3VudCB9LCAoKSA9PiBJbnZlbnRvcnlBY3Rpb24uZnJvbU5ldHdvcmsodGhpcykpO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy50cmFuc2FjdGlvblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLk5PUk1BTDpcbiAgICAgICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLk1JU01BVENIOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuVVNFX0lURU06XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRhdGEgPSA8VXNlSXRlbURhdGE+e1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlOiB0aGlzLnJlYWRVbnNpZ25lZFZhckludCgpLFxuICAgICAgICAgICAgICAgICAgICBibG9ja1Bvc2l0aW9uOiBOZXR3b3JrVXRpbC5yZWFkQmxvY2tQb3NpdGlvbih0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tGYWNlOiB0aGlzLnJlYWRWYXJJbnQoKSxcbiAgICAgICAgICAgICAgICAgICAgaG90YmFyU2xvdDogdGhpcy5yZWFkVmFySW50KCksXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1JbkhhbmQ6IEl0ZW0ubmV0d29ya0Rlc2VyaWFsaXplKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICBwbGF5ZXJQb3NpdGlvbjogbmV3IFZlY3RvcjModGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSksXG4gICAgICAgICAgICAgICAgICAgIGNsaWNrUG9zaXRpb246IG5ldyBWZWN0b3IzKHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCkpLFxuICAgICAgICAgICAgICAgICAgICBibG9ja1J1bnRpbWVJZDogdGhpcy5yZWFkVW5zaWduZWRWYXJJbnQoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5VU0VfSVRFTV9PTl9FTlRJVFk6XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRhdGEgPSA8VXNlSXRlbU9uRW50aXR5RGF0YT57XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVJ1bnRpbWVJZDogdGhpcy5yZWFkVW5zaWduZWRWYXJMb25nKCksXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGU6IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KCksXG4gICAgICAgICAgICAgICAgICAgIGhvdGJhclNsb3Q6IHRoaXMucmVhZFZhckludCgpLFxuICAgICAgICAgICAgICAgICAgICBpdGVtSW5IYW5kOiBJdGVtLm5ldHdvcmtEZXNlcmlhbGl6ZSh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyUG9zaXRpb246IG5ldyBWZWN0b3IzKHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCkpLFxuICAgICAgICAgICAgICAgICAgICBjbGlja1Bvc2l0aW9uOiBuZXcgVmVjdG9yMyh0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5SRUxBU0VfSVRFTTpcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGF0YSA9IDxSZWxhc2VJdGVtRGF0YT57XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGU6IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KCksXG4gICAgICAgICAgICAgICAgICAgIGhvdGJhclNsb3Q6IHRoaXMucmVhZFZhckludCgpLFxuICAgICAgICAgICAgICAgICAgICBpdGVtSW5IYW5kOiBJdGVtLm5ldHdvcmtEZXNlcmlhbGl6ZSh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgaGVhZFJvdGF0aW9uOiBuZXcgVmVjdG9yMyh0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVua25vd24gdHJhbnNhY3Rpb24gdHlwZSAke3RoaXMudHJhbnNhY3Rpb25UeXBlfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbIlVzZUl0ZW1BY3Rpb24iLCJUcmFuc2FjdGlvblR5cGUiLCJBY3Rpb25Tb3VyY2UiXSwibWFwcGluZ3MiOiI7Ozs7OztBQVFZLElBQUEsYUFBQSxxQkFBQUEsY0FBTCxLQUFBO0FBQ0gsRUFBQUEsY0FBQSxDQUFBLGNBQUEsQ0FBQSxhQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxhQUFBO0FBQ0EsRUFBQUEsY0FBQSxDQUFBLGNBQUEsQ0FBQSxXQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxXQUFBO0FBQ0EsRUFBQUEsY0FBQSxDQUFBLGNBQUEsQ0FBQSxhQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxhQUFBO0FBSFEsRUFBQUEsT0FBQUEsY0FBQUE7QUFBQSxDQUFBLEVBQUEsYUFBQSxJQUFBLEVBQUE7QUFNQSxJQUFBLGVBQUEscUJBQUFDLGdCQUFMLEtBQUE7QUFDSCxFQUFBQSxnQkFBQSxDQUFBLGdCQUFBLENBQUEsUUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsUUFBQTtBQUNBLEVBQUFBLGdCQUFBLENBQUEsZ0JBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxVQUFBO0FBQ0EsRUFBQUEsZ0JBQUEsQ0FBQSxnQkFBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLFVBQUE7QUFDQSxFQUFBQSxnQkFBQSxD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