UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

146 lines (141 loc) • 22.2 kB
'use strict'; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } }); const math = require('@jsprismarine/math'); const item_Item = require('../../item/Item.cjs.cjs'); const network_Identifiers = require('../Identifiers.cjs.cjs'); const network_NetworkUtil = require('../NetworkUtil.cjs.cjs'); const network_packet_DataPacket = require('./DataPacket.cjs.cjs'); 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_Item.Item.networkDeserialize(stream), item_Item.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 network_packet_DataPacket.default { static NetID = network_Identifiers.default.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: network_NetworkUtil.NetworkUtil.readBlockPosition(this), blockFace: this.readVarInt(), hotbarSlot: this.readVarInt(), itemInHand: item_Item.Item.networkDeserialize(this), playerPosition: new math.Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()), clickPosition: new math.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_Item.Item.networkDeserialize(this), playerPosition: new math.Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()), clickPosition: new math.Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()) }; break; case 4 /* RELASE_ITEM */: this.transactionData = { actionType: this.readUnsignedVarInt(), hotbarSlot: this.readVarInt(), itemInHand: item_Item.Item.networkDeserialize(this), headRotation: new math.Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()) }; break; default: throw new TypeError(`Unknown transaction type ${this.transactionType}`); } } } exports.ActionSource = ActionSource; exports.InventoryAction = InventoryAction; exports.LegacySlotChange = LegacySlotChange; exports.TransactionType = TransactionType; exports.UseItemAction = UseItemAction; exports.default = InventoryTransactionPacket; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52ZW50b3J5VHJhbnNhY3Rpb25QYWNrZXQuY2pzLmNqcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25ldHdvcmsvcGFja2V0L0ludmVudG9yeVRyYW5zYWN0aW9uUGFja2V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIEJpbmFyeVN0cmVhbSBmcm9tICdAanNwcmlzbWFyaW5lL2pzYmluYXJ5dXRpbHMnO1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJ0Bqc3ByaXNtYXJpbmUvbWF0aCc7XG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vLi4vaXRlbS9JdGVtJztcbmltcG9ydCB0eXBlIEJsb2NrUG9zaXRpb24gZnJvbSAnLi4vLi4vd29ybGQvQmxvY2tQb3NpdGlvbic7XG5pbXBvcnQgSWRlbnRpZmllcnMgZnJvbSAnLi4vSWRlbnRpZmllcnMnO1xuaW1wb3J0IHsgTmV0d29ya1V0aWwgfSBmcm9tICcuLi9OZXR3b3JrVXRpbCc7XG5pbXBvcnQgRGF0YVBhY2tldCBmcm9tICcuL0RhdGFQYWNrZXQnO1xuXG5leHBvcnQgZW51bSBVc2VJdGVtQWN0aW9uIHtcbiAgICBDTElDS19CTE9DSyxcbiAgICBDTElDS19BSVIsXG4gICAgQlJFQUtfQkxPQ0tcbn1cblxuZXhwb3J0IGVudW0gVHJhbnNhY3Rpb25UeXBlIHtcbiAgICBOT1JNQUwsXG4gICAgTUlTTUFUQ0gsXG4gICAgVVNFX0lURU0sXG4gICAgVVNFX0lURU1fT05fRU5USVRZLFxuICAgIFJFTEFTRV9JVEVNXG59XG5cbmV4cG9ydCBjbGFzcyBMZWdhY3lTbG90Q2hhbmdlIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBjb250YWluZXJJZDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgc2xvdHM6IG51bWJlcltdXG4gICAgKSB7fVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tTmV0d29yayhzdHJlYW06IEJpbmFyeVN0cmVhbSk6IExlZ2FjeVNsb3RDaGFuZ2Uge1xuICAgICAgICBjb25zdCBjb250YWluZXJJZCA9IHN0cmVhbS5yZWFkQnl0ZSgpO1xuICAgICAgICBjb25zdCBzbG90Q291bnQgPSBzdHJlYW0ucmVhZFVuc2lnbmVkVmFySW50KCk7XG4gICAgICAgIGNvbnN0IHNsb3RzID0gQXJyYXkuZnJvbShzdHJlYW0ucmVhZChzbG90Q291bnQpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBMZWdhY3lTbG90Q2hhbmdlKGNvbnRhaW5lcklkLCBzbG90cyk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvTmV0d29yayhzdHJlYW06IEJpbmFyeVN0cmVhbSk6IHZvaWQge1xuICAgICAgICBzdHJlYW0ud3JpdGVCeXRlKHRoaXMuY29udGFpbmVySWQpO1xuICAgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZFZhckludCh0aGlzLnNsb3RzLmxlbmd0aCk7XG4gICAgICAgIHN0cmVhbS53cml0ZShCdWZmZXIuZnJvbSh0aGlzLnNsb3RzKSk7XG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBBY3Rpb25Tb3VyY2Uge1xuICAgIElOVkFMSUQgPSAtMSxcbiAgICBDT05UQUlORVIsXG4gICAgR0xPQkFMLFxuICAgIFdPUkxELFxuICAgIENSRUFUSVZFLFxuICAgIFVOVFJBQ0tFRF9JTlRFUkFDVElPTl9VSSA9IDEwMCxcbiAgICBOT05fSU1QTEVNRU5URURfVE9ETyA9IDk5OTk5XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZlbnRvcnlBY3Rpb24ge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHNvdXJjZVR5cGU6IG51bWJlcixcbiAgICAgICAgcHVibGljIHdpbmRvd0lkOiBudW1iZXIgfCBudWxsLFxuICAgICAgICBwdWJsaWMgc291cmNlRmxhZ3M6IG51bWJlciB8IG51bGwsXG4gICAgICAgIHB1YmxpYyB0YXJnZXRTbG90OiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBvbGRJdGVtOiBJdGVtLFxuICAgICAgICBwdWJsaWMgbmV3SXRlbTogSXRlbVxuICAgICkge31cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU5ldHdvcmsoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiBJbnZlbnRvcnlBY3Rpb24ge1xuICAgICAgICBjb25zdCBzb3VyY2VUeXBlID0gc3RyZWFtLnJlYWRVbnNpZ25lZFZhckludCgpO1xuICAgICAgICBjb25zdCB3aW5kb3dJZCA9XG4gICAgICAgICAgICBzb3VyY2VUeXBlID09PSBBY3Rpb25Tb3VyY2UuQ09OVEFJTkVSIHx8IHNvdXJjZVR5cGUgPT09IEFjdGlvblNvdXJjZS5OT05fSU1QTEVNRU5URURfVE9ET1xuICAgICAgICAgICAgICAgID8gc3RyZWFtLnJlYWRWYXJJbnQoKVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgY29uc3Qgc291cmNlRmxhZ3MgPSBzb3VyY2VUeXBlID09PSBBY3Rpb25Tb3VyY2UuV09STEQgPyBzdHJlYW0ucmVhZFVuc2lnbmVkVmFySW50KCkgOiBudWxsO1xuICAgICAgICByZXR1cm4gbmV3IEludmVudG9yeUFjdGlvbihcbiAgICAgICAgICAgIHNvdXJjZVR5cGUsXG4gICAgICAgICAgICB3aW5kb3dJZCxcbiAgICAgICAgICAgIHNvdXJjZUZsYWdzLFxuICAgICAgICAgICAgc3RyZWFtLnJlYWRVbnNpZ25lZFZhckludCgpLFxuICAgICAgICAgICAgSXRlbS5uZXR3b3JrRGVzZXJpYWxpemUoc3RyZWFtKSxcbiAgICAgICAgICAgIEl0ZW0ubmV0d29ya0Rlc2VyaWFsaXplKHN0cmVhbSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9OZXR3b3JrKHN0cmVhbTogQmluYXJ5U3RyZWFtKTogdm9pZCB7XG4gICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVmFySW50KHRoaXMuc291cmNlVHlwZSk7XG4gICAgICAgIFtBY3Rpb25Tb3VyY2UuQ09OVEFJTkVSLCBBY3Rpb25Tb3VyY2UuTk9OX0lNUExFTUVOVEVEX1RPRE9dLmluY2x1ZGVzKHRoaXMuc291cmNlVHlwZSkgJiZcbiAgICAgICAgICAgIHN0cmVhbS53cml0ZVZhckludCh0aGlzLndpbmRvd0lkISk7XG4gICAgICAgIHRoaXMuc291cmNlVHlwZSA9PT0gQWN0aW9uU291cmNlLldPUkxEICYmIHN0cmVhbS53cml0ZVVuc2lnbmVkVmFySW50KHRoaXMuc291cmNlRmxhZ3MhKTtcbiAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRWYXJJbnQodGhpcy50YXJnZXRTbG90KTtcbiAgICAgICAgdGhpcy5vbGRJdGVtLm5ldHdvcmtTZXJpYWxpemUoc3RyZWFtKTtcbiAgICAgICAgdGhpcy5uZXdJdGVtLm5ldHdvcmtTZXJpYWxpemUoc3RyZWFtKTtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25EYXRhIHtcbiAgICBhY3Rpb25UeXBlOiBudW1iZXI7XG4gICAgaG90YmFyU2xvdDogbnVtYmVyO1xuICAgIGl0ZW1JbkhhbmQ6IEl0ZW07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSXRlbURhdGEgZXh0ZW5kcyBUcmFuc2FjdGlvbkRhdGEge1xuICAgIGJsb2NrUG9zaXRpb246IEJsb2NrUG9zaXRpb247XG4gICAgYmxvY2tGYWNlOiBudW1iZXI7XG4gICAgcGxheWVyUG9zaXRpb246IFZlY3RvcjM7XG4gICAgY2xpY2tQb3NpdGlvbjogVmVjdG9yMztcbiAgICBibG9ja1J1bnRpbWVJZDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUl0ZW1PbkVudGl0eURhdGEgZXh0ZW5kcyBUcmFuc2FjdGlvbkRhdGEge1xuICAgIGVudGl0eVJ1bnRpbWVJZDogYmlnaW50O1xuICAgIHBsYXllclBvc2l0aW9uOiBWZWN0b3IzO1xuICAgIGNsaWNrUG9zaXRpb246IFZlY3RvcjM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVsYXNlSXRlbURhdGEgZXh0ZW5kcyBUcmFuc2FjdGlvbkRhdGEge1xuICAgIGhlYWRSb3RhdGlvbjogVmVjdG9yMztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW52ZW50b3J5VHJhbnNhY3Rpb25QYWNrZXQgZXh0ZW5kcyBEYXRhUGFja2V0IHtcbiAgICBwdWJsaWMgc3RhdGljIE5ldElEID0gSWRlbnRpZmllcnMuSW52ZW50b3J5VHJhbnNhY3Rpb25QYWNrZXQ7XG5cbiAgICBwdWJsaWMgbGVnYWN5UmVxdWVzdElkITogbnVtYmVyO1xuICAgIHB1YmxpYyBsZWdhY3lTbG90Q2hhbmdlcyE6IExlZ2FjeVNsb3RDaGFuZ2VbXTtcblxuICAgIHB1YmxpYyB0cmFuc2FjdGlvblR5cGUhOiBUcmFuc2FjdGlvblR5cGU7XG4gICAgcHVibGljIGludmVudG9yeUFjdGlvbnMhOiBJbnZlbnRvcnlBY3Rpb25bXTtcblxuICAgIHB1YmxpYyB0cmFuc2FjdGlvbkRhdGEhOiBUcmFuc2FjdGlvbkRhdGE7XG5cbiAgICBwdWJsaWMgZGVjb2RlUGF5bG9hZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sZWdhY3lSZXF1ZXN0SWQgPSB0aGlzLnJlYWRWYXJJbnQoKTtcbiAgICAgICAgaWYgKHRoaXMubGVnYWN5UmVxdWVzdElkICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBzbG90Q2hhbmdlcyA9IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KCk7XG4gICAgICAgICAgICB0aGlzLmxlZ2FjeVNsb3RDaGFuZ2VzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogc2xvdENoYW5nZXMgfSwgKCkgPT4gTGVnYWN5U2xvdENoYW5nZS5mcm9tTmV0d29yayh0aGlzKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uVHlwZSA9IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KCk7XG5cbiAgICAgICAgY29uc3QgYWN0aW9uc0NvdW50ID0gdGhpcy5yZWFkVW5zaWduZWRWYXJJbnQoKTtcbiAgICAgICAgdGhpcy5pbnZlbnRvcnlBY3Rpb25zID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogYWN0aW9uc0NvdW50IH0sICgpID0+IEludmVudG9yeUFjdGlvbi5mcm9tTmV0d29yayh0aGlzKSk7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLnRyYW5zYWN0aW9uVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuTk9STUFMOlxuICAgICAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuTUlTTUFUQ0g6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5VU0VfSVRFTTpcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGF0YSA9IDxVc2VJdGVtRGF0YT57XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGU6IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KCksXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrUG9zaXRpb246IE5ldHdvcmtVdGlsLnJlYWRCbG9ja1Bvc2l0aW9uKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICBibG9ja0ZhY2U6IHRoaXMucmVhZFZhckludCgpLFxuICAgICAgICAgICAgICAgICAgICBob3RiYXJTbG90OiB0aGlzLnJlYWRWYXJJbnQoKSxcbiAgICAgICAgICAgICAgICAgICAgaXRlbUluSGFuZDogSXRlbS5uZXR3b3JrRGVzZXJpYWxpemUodGhpcyksXG4gICAgICAgICAgICAgICAgICAgIHBsYXllclBvc2l0aW9uOiBuZXcgVmVjdG9yMyh0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpKSxcbiAgICAgICAgICAgICAgICAgICAgY2xpY2tQb3NpdGlvbjogbmV3IFZlY3RvcjModGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSksXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrUnVudGltZUlkOiB0aGlzLnJlYWRVbnNpZ25lZFZhckludCgpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlVTRV9JVEVNX09OX0VOVElUWTpcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGF0YSA9IDxVc2VJdGVtT25FbnRpdHlEYXRhPntcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5UnVudGltZUlkOiB0aGlzLnJlYWRVbnNpZ25lZFZhckxvbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZTogdGhpcy5yZWFkVW5zaWduZWRWYXJJbnQoKSxcbiAgICAgICAgICAgICAgICAgICAgaG90YmFyU2xvdDogdGhpcy5yZWFkVmFySW50KCksXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1JbkhhbmQ6IEl0ZW0ubmV0d29ya0Rlc2VyaWFsaXplKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICBwbGF5ZXJQb3NpdGlvbjogbmV3IFZlY3RvcjModGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSksXG4gICAgICAgICAgICAgICAgICAgIGNsaWNrUG9zaXRpb246IG5ldyBWZWN0b3IzKHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCkpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlJFTEFTRV9JVEVNOlxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25EYXRhID0gPFJlbGFzZUl0ZW1EYXRhPntcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZTogdGhpcy5yZWFkVW5zaWduZWRWYXJJbnQoKSxcbiAgICAgICAgICAgICAgICAgICAgaG90YmFyU2xvdDogdGhpcy5yZWFkVmFySW50KCksXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1JbkhhbmQ6IEl0ZW0ubmV0d29ya0Rlc2VyaWFsaXplKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICBoZWFkUm90YXRpb246IG5ldyBWZWN0b3IzKHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCkpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5rbm93biB0cmFuc2FjdGlvbiB0eXBlICR7dGhpcy50cmFuc2FjdGlvblR5cGV9YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXSwibmFtZXMiOlsiVXNlSXRlbUFjdGlvbiIsIlRyYW5zYWN0aW9uVHlwZSIsIkFjdGlvblNvdXJjZSIsIkl0ZW0iLCJEYXRhUGFja2V0IiwiSWRlbnRpZmllcnMiLCJOZXR3b3JrVXRpbCIsIlZlY3RvcjMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFRWSxJQUFBLGFBQUEscUJBQUFBLGNBQUwsS0FBQTtBQUNILEVBQUFBLGNBQUEsQ0FBQSxjQUFBLENBQUEsYUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsYUFBQTtBQUNBLEVBQUFBLGNBQUEsQ0FBQSxjQUFBLENBQUEsV0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsV0FBQTtBQUNBLEVBQUFBLGNBQUEsQ0FBQSxjQUFBLENBQUEsYUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsYUFBQTtBQUhRLEVBQUFBLE9BQUFBLGNBQUFBO0FBQUEsQ0FBQSxFQUFBLGFBQUEsSUFBQSxFQUFBO0FBTUEsSUFBQSxlQUFBLHFCQUFBQyxnQkFBTCxLQUFBO0FBQ0gsRUFBQUEsZ0JBQUEsQ0FBQSxnQkFBQSxDQUFBLFFBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLFFBQUE7QUFDQSxFQUFBQSxnQkFBQSxDQUFBLGdCQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsVUFBQTtBQUNBLEVBQUFBLGdCQUFBLENBQUEs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