@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
142 lines (135 loc) • 20.6 kB
JavaScript
'use strict';
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
const BinaryStream = require('@jsprismarine/jsbinaryutils');
const math = require('@jsprismarine/math');
const nbt = require('@jsprismarine/nbt');
const network_NetworkUtil = require('../NetworkUtil.cjs.cjs');
const utils_UUID = require('../../utils/UUID.cjs.cjs');
const network_Identifiers = require('../Identifiers.cjs.cjs');
const network_packet_DataPacket = require('./DataPacket.cjs.cjs');
const _interopDefault = e => e && e.__esModule ? e : { default: e };
const BinaryStream__default = /*#__PURE__*/_interopDefault(BinaryStream);
class StartGamePacket extends network_packet_DataPacket.default {
static NetID = network_Identifiers.default.StartGamePacket;
entityId;
runtimeEntityId;
gamemode;
defaultGamemode = 0;
playerPos = new math.Vector3(0, 5, 0);
pitch = 0;
yaw = 0;
serverIdentifier;
worldIdentifier;
scenarioIdentifier;
levelId;
worldName;
seed;
time = 0;
ticks = 0;
worldSpawnPos;
gamerules;
// Cache item IDs mappings
static cachedItemIds = null;
encodePayload() {
this.writeVarLong(this.entityId);
this.writeUnsignedVarLong(this.runtimeEntityId);
this.writeVarInt(this.gamemode);
network_NetworkUtil.NetworkUtil.writeVector3(this, this.playerPos);
this.writeFloatLE(this.pitch);
this.writeFloatLE(this.yaw);
this.writeLongLE(BigInt(this.seed));
this.writeUnsignedShortLE(0);
network_NetworkUtil.NetworkUtil.writeString(this, "plains");
this.writeVarInt(0);
this.writeVarInt(1);
this.writeVarInt(this.defaultGamemode);
this.writeBoolean(false);
this.writeVarInt(0);
this.writeVarInt(this.worldSpawnPos.getX());
this.writeUnsignedVarInt(this.worldSpawnPos.getY());
this.writeVarInt(this.worldSpawnPos.getZ());
this.writeBoolean(true);
this.writeVarInt(0);
this.writeBoolean(false);
this.writeBoolean(false);
this.writeVarInt(this.time);
this.writeVarInt(0);
this.writeBoolean(false);
network_NetworkUtil.NetworkUtil.writeString(this, "");
this.writeFloatLE(0);
this.writeFloatLE(0);
this.writeByte(0);
this.writeByte(1);
this.writeByte(1);
this.writeVarInt(4);
this.writeVarInt(4);
this.writeByte(1);
this.writeByte(0);
this.gamerules.networkSerialize(this);
this.writeUnsignedIntLE(0);
this.writeBoolean(false);
this.writeByte(0);
this.writeByte(0);
this.writeVarInt(1);
this.writeUnsignedIntLE(4);
this.writeByte(0);
this.writeByte(0);
this.writeByte(0);
this.writeByte(0);
this.writeByte(0);
this.writeByte(0);
this.writeByte(0);
this.writeByte(0);
this.writeByte(0);
this.writeByte(0);
network_NetworkUtil.NetworkUtil.writeString(this, "*");
this.writeUnsignedIntLE(0);
this.writeUnsignedIntLE(0);
this.writeBoolean(true);
network_NetworkUtil.NetworkUtil.writeString(this, "");
network_NetworkUtil.NetworkUtil.writeString(this, "");
this.writeBoolean(false);
this.writeByte(0);
this.writeByte(0);
network_NetworkUtil.NetworkUtil.writeString(this, this.serverIdentifier);
network_NetworkUtil.NetworkUtil.writeString(this, this.worldIdentifier);
network_NetworkUtil.NetworkUtil.writeString(this, this.scenarioIdentifier);
network_NetworkUtil.NetworkUtil.writeString(this, this.levelId);
network_NetworkUtil.NetworkUtil.writeString(this, this.worldName);
network_NetworkUtil.NetworkUtil.writeString(this, "00000000-0000-0000-0000-000000000000");
this.writeByte(0);
this.writeUnsignedVarInt(0);
this.writeVarInt(0);
this.writeBoolean(false);
this.writeLongLE(BigInt(this.ticks));
this.writeVarInt(0);
this.writeUnsignedVarInt(0);
this.writeUnsignedVarInt(0);
network_NetworkUtil.NetworkUtil.writeString(this, "");
this.writeBoolean(true);
network_NetworkUtil.NetworkUtil.writeString(this, network_Identifiers.default.MinecraftVersions.at(0));
const str = new BinaryStream__default.default();
const nbt$1 = new nbt.NBTWriter(str, 1);
nbt$1.setUseVarint(true);
nbt$1.writeCompound(new nbt.NBTTagCompound());
this.write(str.getBuffer());
this.writeLongLE(0n);
utils_UUID.default.fromRandom().networkSerialize(this);
this.writeBoolean(true);
this.writeByte(0);
this.writeByte(0);
}
/* private generateItemPalette(): Buffer {
const stream = new BinaryStream();
const itemMappings = Object.entries(item_id_map);
stream.writeUnsignedVarInt(itemMappings.length);
for (const [name, data] of itemMappings) {
NetworkUtil.writeString(stream, name);
stream.writeShortLE((data as any).runtime_id as number);
stream.writeByte(0); // unknown
}
return stream.getBuffer();
} */
}
exports.default = StartGamePacket;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhcnRHYW1lUGFja2V0LmNqcy5janMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9uZXR3b3JrL3BhY2tldC9TdGFydEdhbWVQYWNrZXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpbmFyeVN0cmVhbSBmcm9tICdAanNwcmlzbWFyaW5lL2pzYmluYXJ5dXRpbHMnO1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJ0Bqc3ByaXNtYXJpbmUvbWF0aCc7XG5pbXBvcnQgeyBOQlRUYWdDb21wb3VuZCwgTkJUV3JpdGVyIH0gZnJvbSAnQGpzcHJpc21hcmluZS9uYnQnO1xuaW1wb3J0IHsgTmV0d29ya1V0aWwgfSBmcm9tICcuLi8uLi9uZXR3b3JrL05ldHdvcmtVdGlsJztcbmltcG9ydCBVVUlEIGZyb20gJy4uLy4uL3V0aWxzL1VVSUQnO1xuaW1wb3J0IHR5cGUgR2FtZXJ1bGVNYW5hZ2VyIGZyb20gJy4uLy4uL3dvcmxkL0dhbWVydWxlTWFuYWdlcic7XG5pbXBvcnQgSWRlbnRpZmllcnMgZnJvbSAnLi4vSWRlbnRpZmllcnMnO1xuaW1wb3J0IERhdGFQYWNrZXQgZnJvbSAnLi9EYXRhUGFja2V0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhcnRHYW1lUGFja2V0IGV4dGVuZHMgRGF0YVBhY2tldCB7XG4gICAgcHVibGljIHN0YXRpYyBOZXRJRCA9IElkZW50aWZpZXJzLlN0YXJ0R2FtZVBhY2tldDtcblxuICAgIHB1YmxpYyBlbnRpdHlJZCE6IGJpZ2ludDtcbiAgICBwdWJsaWMgcnVudGltZUVudGl0eUlkITogYmlnaW50O1xuICAgIHB1YmxpYyBnYW1lbW9kZSE6IG51bWJlcjtcbiAgICBwdWJsaWMgZGVmYXVsdEdhbWVtb2RlOiBudW1iZXIgPSAwO1xuXG4gICAgcHVibGljIHBsYXllclBvczogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDAsIDUsIDApO1xuICAgIHB1YmxpYyBwaXRjaDogbnVtYmVyID0gMDtcbiAgICBwdWJsaWMgeWF3OiBudW1iZXIgPSAwO1xuXG4gICAgcHVibGljIHNlcnZlcklkZW50aWZpZXIhOiBzdHJpbmc7XG4gICAgcHVibGljIHdvcmxkSWRlbnRpZmllciE6IHN0cmluZztcbiAgICBwdWJsaWMgc2NlbmFyaW9JZGVudGlmaWVyITogc3RyaW5nO1xuICAgIHB1YmxpYyBsZXZlbElkITogc3RyaW5nO1xuICAgIHB1YmxpYyB3b3JsZE5hbWUhOiBzdHJpbmc7XG4gICAgcHVibGljIHNlZWQhOiBudW1iZXI7XG4gICAgcHVibGljIHRpbWU6IG51bWJlciA9IDA7XG4gICAgcHVibGljIHRpY2tzOiBudW1iZXIgPSAwO1xuXG4gICAgcHVibGljIHdvcmxkU3Bhd25Qb3MhOiBWZWN0b3IzO1xuXG4gICAgcHVibGljIGdhbWVydWxlcyE6IEdhbWVydWxlTWFuYWdlcjtcblxuICAgIC8vIENhY2hlIGl0ZW0gSURzIG1hcHBpbmdzXG4gICAgcHVibGljIHN0YXRpYyBjYWNoZWRJdGVtSWRzOiBCdWZmZXIgfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBlbmNvZGVQYXlsb2FkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLndyaXRlVmFyTG9uZyh0aGlzLmVudGl0eUlkKTtcbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkVmFyTG9uZyh0aGlzLnJ1bnRpbWVFbnRpdHlJZCk7XG5cbiAgICAgICAgdGhpcy53cml0ZVZhckludCh0aGlzLmdhbWVtb2RlKTtcblxuICAgICAgICBOZXR3b3JrVXRpbC53cml0ZVZlY3RvcjModGhpcywgdGhpcy5wbGF5ZXJQb3MpO1xuICAgICAgICB0aGlzLndyaXRlRmxvYXRMRSh0aGlzLnBpdGNoKTtcbiAgICAgICAgdGhpcy53cml0ZUZsb2F0TEUodGhpcy55YXcpO1xuXG4gICAgICAgIHRoaXMud3JpdGVMb25nTEUoQmlnSW50KHRoaXMuc2VlZCkpOyAvLyBTZWVkXG5cbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkU2hvcnRMRSgweDAwKTsgLy8gRGVmYXVsdCBzcGF3biBiaW9tZSB0eXBlXG4gICAgICAgIE5ldHdvcmtVdGlsLndyaXRlU3RyaW5nKHRoaXMsICdwbGFpbnMnKTsgLy8gVXNlciBkZWZpbmVkIGJpb21lIG5hbWVcblxuICAgICAgICB0aGlzLndyaXRlVmFySW50KDApOyAvLyBEaW1lbnNpb25cblxuICAgICAgICB0aGlzLndyaXRlVmFySW50KDEpOyAvLyBHZW5lcmF0b3JcbiAgICAgICAgdGhpcy53cml0ZVZhckludCh0aGlzLmRlZmF1bHRHYW1lbW9kZSk7IC8vIERlZmF1bHQgR2FtZW1vZGVcblxuICAgICAgICB0aGlzLndyaXRlQm9vbGVhbihmYWxzZSk7IC8vIElzIGhhcmRjb3JlIGVuYWJsZWRcblxuICAgICAgICB0aGlzLndyaXRlVmFySW50KDApOyAvLyBEaWZmaWN1bHR5XG5cbiAgICAgICAgLy8gd29ybGQgc3Bhd24gdmVjdG9yIDNcbiAgICAgICAgdGhpcy53cml0ZVZhckludCh0aGlzLndvcmxkU3Bhd25Qb3MuZ2V0WCgpKTtcbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkVmFySW50KHRoaXMud29ybGRTcGF3blBvcy5nZXRZKCkpO1xuICAgICAgICB0aGlzLndyaXRlVmFySW50KHRoaXMud29ybGRTcGF3blBvcy5nZXRaKCkpO1xuXG4gICAgICAgIC8vIFJlY2VudGx5IGZvdW5kIHRoYXQgbWF5IGNyYXNoIHRoZSBjbGllbnRcbiAgICAgICAgLy8gd2FpdGluZyBmb3IgbW9yZSBpbmZvIGFib3V0IGl0XG4gICAgICAgIHRoaXMud3JpdGVCb29sZWFuKHRydWUpOyAvLyBBY2hpZXZlbWVudCBkaXNhYmxlZFxuXG4gICAgICAgIHRoaXMud3JpdGVWYXJJbnQoMCk7IC8vIEVkaXRvciB3b3JsZCB0eXBlP1xuICAgICAgICB0aGlzLndyaXRlQm9vbGVhbihmYWxzZSk7IC8vIENyZWF0ZWQgaW4gZWRpdG9yIG1vZGU/XG4gICAgICAgIHRoaXMud3JpdGVCb29sZWFuKGZhbHNlKTsgLy8gRXhwb3J0ZWQgZnJvbSBlZGl0b3IgbW9kZT9cblxuICAgICAgICB0aGlzLndyaXRlVmFySW50KHRoaXMudGltZSk7IC8vIERheSBjeWNsZSAvIHRpbWVcbiAgICAgICAgdGhpcy53cml0ZVZhckludCgwKTsgLy8gRWR1IGVkaXRpb24gb2ZmZXJcbiAgICAgICAgdGhpcy53cml0ZUJvb2xlYW4oZmFsc2UpOyAvLyBFZHUgZmVhdHVyZXNcbiAgICAgICAgTmV0d29ya1V0aWwud3JpdGVTdHJpbmcodGhpcywgJycpOyAvLyBFZHUgcHJvZHVjdCBpZFxuXG4gICAgICAgIHRoaXMud3JpdGVGbG9hdExFKDApOyAvLyBSYWluIGx2bFxuICAgICAgICB0aGlzLndyaXRlRmxvYXRMRSgwKTsgLy8gTGlnaHRuaW5nIGx2bFxuXG4gICAgICAgIHRoaXMud3JpdGVCeXRlKDApOyAvLyBDb25maXJtZWQgcGxhdGZvcm0gbG9ja2VkXG4gICAgICAgIHRoaXMud3JpdGVCeXRlKDEpOyAvLyBNdWx0aSBwbGF5ZXIgZ2FtZVxuICAgICAgICB0aGlzLndyaXRlQnl0ZSgxKTsgLy8gQnJvYWRjYXN0IHRvIGxhblxuXG4gICAgICAgIHRoaXMud3JpdGVWYXJJbnQoNCk7IC8vIFhibCBicm9hZGNhc3QgbW9kZVxuICAgICAgICB0aGlzLndyaXRlVmFySW50KDQpOyAvLyBQbGF0Zm9ybSBicm9hZGNhc3QgbW9kZVxuXG4gICAgICAgIHRoaXMud3JpdGVCeXRlKDEpOyAvLyBDb21tYW5kcyBlbmFibGVkXG4gICAgICAgIHRoaXMud3JpdGVCeXRlKDApOyAvLyBUZXh0dXJlIHJlcXVpcmVkXG5cbiAgICAgICAgdGhpcy5nYW1lcnVsZXMubmV0d29ya1NlcmlhbGl6ZSh0aGlzKTtcblxuICAgICAgICB0aGlzLndyaXRlVW5zaWduZWRJbnRMRSgwKTsgLy8gRXhwZXJpbWVudCBjb3VudFxuICAgICAgICB0aGlzLndyaXRlQm9vbGVhbihmYWxzZSk7IC8vIEV4cGVyaW1lbnRzIHByZXZpb3VzbHkgdG9nZ2xlZD9cblxuICAgICAgICB0aGlzLndyaXRlQnl0ZSgwKTsgLy8gQm9udXMgY2hlc3RcbiAgICAgICAgdGhpcy53cml0ZUJ5dGUoMCk7IC8vIFN0YXJ0IHdpdGggbWFwXG5cbiAgICAgICAgdGhpcy53cml0ZVZhckludCgxKTsgLy8gUGxheWVyIHBlcm1zXG5cbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkSW50TEUoNCk7IC8vIENodW5rIHRpY2sgcmFuZ2VcblxuICAgICAgICB0aGlzLndyaXRlQnl0ZSgwKTsgLy8gTG9ja2VkIGJlaGF2aW9yXG4gICAgICAgIHRoaXMud3JpdGVCeXRlKDApOyAvLyBMb2NrZWQgdGV4dHVyZVxuICAgICAgICB0aGlzLndyaXRlQnl0ZSgwKTsgLy8gRnJvbSBsb2NrZWQgdGVtcGxhdGVcbiAgICAgICAgdGhpcy53cml0ZUJ5dGUoMCk7IC8vIE1zYSBnYW1lciB0YWdzIG9ubHlcbiAgICAgICAgdGhpcy53cml0ZUJ5dGUoMCk7IC8vIEZyb20gd29ybGQgdGVtcGxhdGVcbiAgICAgICAgdGhpcy53cml0ZUJ5dGUoMCk7IC8vIFdvcmxkIHRlbXBsYXRlIG9wdGlvbiBsb2NrZWRcbiAgICAgICAgdGhpcy53cml0ZUJ5dGUoMCk7IC8vIE9ubHkgc3Bhd24gdjEgdmlsbGFnZXJzXG4gICAgICAgIHRoaXMud3JpdGVCeXRlKDApOyAvLyBEaXNhYmxlIHBlcnNvbmEgc2tpbnNcbiAgICAgICAgdGhpcy53cml0ZUJ5dGUoMCk7IC8vIERpc2FibGUgY3VzdG9tIHNraW5zXG4gICAgICAgIHRoaXMud3JpdGVCeXRlKDApOyAvLyBEaXNhYmxlIGVtb3RlXG4gICAgICAgIE5ldHdvcmtVdGlsLndyaXRlU3RyaW5nKHRoaXMsICcqJyk7XG5cbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkSW50TEUoMCk7IC8vIExpbWl0ZWQgd29ybGQgaGVpZ2h0XG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZEludExFKDApOyAvLyBMaW1pdGVkIHdvcmxkIGxlbmd0aFxuXG4gICAgICAgIHRoaXMud3JpdGVCb29sZWFuKHRydWUpOyAvLyBIYXMgbmV3IG5ldGhlclxuXG4gICAgICAgIC8vIFRPRE9zXG4gICAgICAgIE5ldHdvcmtVdGlsLndyaXRlU3RyaW5nKHRoaXMsICcnKTtcbiAgICAgICAgTmV0d29ya1V0aWwud3JpdGVTdHJpbmcodGhpcywgJycpO1xuXG4gICAgICAgIHRoaXMud3JpdGVCb29sZWFuKGZhbHNlKTsgLy8gRXhwZXJpbWVudGFsIGdhbWVwbGF5XG5cbiAgICAgICAgdGhpcy53cml0ZUJ5dGUoMCk7IC8vIENoYXQgcmVzdHJpY3Rpb24gbGV2ZWxcbiAgICAgICAgdGhpcy53cml0ZUJ5dGUoMCk7IC8vIERpc2FibGUgcGxheWVyIGludGVyYWN0aW9uc1xuXG4gICAgICAgIE5ldHdvcmtVdGlsLndyaXRlU3RyaW5nKHRoaXMsIHRoaXMuc2VydmVySWRlbnRpZmllcik7XG4gICAgICAgIE5ldHdvcmtVdGlsLndyaXRlU3RyaW5nKHRoaXMsIHRoaXMud29ybGRJZGVudGlmaWVyKTtcbiAgICAgICAgTmV0d29ya1V0aWwud3JpdGVTdHJpbmcodGhpcywgdGhpcy5zY2VuYXJpb0lkZW50aWZpZXIpO1xuICAgICAgICBOZXR3b3JrVXRpbC53cml0ZVN0cmluZyh0aGlzLCB0aGlzLmxldmVsSWQpO1xuICAgICAgICBOZXR3b3JrVXRpbC53cml0ZVN0cmluZyh0aGlzLCB0aGlzLndvcmxkTmFtZSk7XG4gICAgICAgIE5ldHdvcmtVdGlsLndyaXRlU3RyaW5nKHRoaXMsICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnKTsgLy8gVGVtcGxhdGUgY29udGVudCBpZGVudGl0eVxuXG4gICAgICAgIHRoaXMud3JpdGVCeXRlKDApOyAvLyBJcyB0cmlhbFxuXG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFZhckludCgwKTsgLy8gU2VydmVyIGF1dGggbW92ZW1lbnRcbiAgICAgICAgdGhpcy53cml0ZVZhckludCgwKTsgLy8gUmV3aW5kIEhpc3RvcnkgU2l6ZVxuICAgICAgICB0aGlzLndyaXRlQm9vbGVhbihmYWxzZSk7IC8vIElzIFNlcnZlciBBdXRob3JpdGF0aXZlIEJsb2NrIEJyZWFraW5nXG5cbiAgICAgICAgdGhpcy53cml0ZUxvbmdMRShCaWdJbnQodGhpcy50aWNrcykpOyAvLyBXb3JsZCB0aWNrcyAoZm9yIHRpbWUpXG5cbiAgICAgICAgdGhpcy53cml0ZVZhckludCgwKTsgLy8gRW5jaGFudG1lbnQgc2VlZFxuXG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFZhckludCgwKTsgLy8gQmxvY2tzIHBhbGV0dGVcblxuICAgICAgICAvKiBJdGVtIHBhbGV0dGVcbiAgICAgICAgaWYgKFN0YXJ0R2FtZVBhY2tldC5jYWNoZWRJdGVtSWRzKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlKFN0YXJ0R2FtZVBhY2tldC5jYWNoZWRJdGVtSWRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBhbGV0dGUgPSB0aGlzLmdlbmVyYXRlSXRlbVBhbGV0dGUoKTtcbiAgICAgICAgICAgIFN0YXJ0R2FtZVBhY2tldC5jYWNoZWRJdGVtSWRzID0gcGFsZXR0ZTtcbiAgICAgICAgICAgIHRoaXMud3JpdGUocGFsZXR0ZSk7XG4gICAgICAgIH0gKi9cbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkVmFySW50KDApO1xuXG4gICAgICAgIE5ldHdvcmtVdGlsLndyaXRlU3RyaW5nKHRoaXMsICcnKTtcbiAgICAgICAgdGhpcy53cml0ZUJvb2xlYW4odHJ1ZSk7IC8vIE5ldyBpbnZlbnRvcnkgc3lzdGVtXG5cbiAgICAgICAgTmV0d29ya1V0aWwud3JpdGVTdHJpbmcodGhpcywgSWRlbnRpZmllcnMuTWluZWNyYWZ0VmVyc2lvbnMuYXQoMCkhKTtcblxuICAgICAgICAvLyBUT0RPXG4gICAgICAgIGNvbnN0IHN0ciA9IG5ldyBCaW5hcnlTdHJlYW0oKTtcbiAgICAgICAgY29uc3QgbmJ0ID0gbmV3IE5CVFdyaXRlcihzdHIsIDEpO1xuICAgICAgICBuYnQuc2V0VXNlVmFyaW50KHRydWUpO1xuICAgICAgICBuYnQud3JpdGVDb21wb3VuZChuZXcgTkJUVGFnQ29tcG91bmQoKSk7XG4gICAgICAgIHRoaXMud3JpdGUoc3RyLmdldEJ1ZmZlcigpKTtcblxuICAgICAgICB0aGlzLndyaXRlTG9uZ0xFKDBuKTsgLy8gQmxvY2sgcGFsZXR0ZSBjaGVja3N1bVxuXG4gICAgICAgIC8vIFRPRE86IE5vdCBzdXJlIGlmIGEgcmFuZG9tIG9uZSB3aWxsIHdvcmssIGJ1dCBsZXQncyB0cnlcbiAgICAgICAgVVVJRC5mcm9tUmFuZG9tKCkubmV0d29ya1NlcmlhbGl6ZSh0aGlzKTtcblxuICAgICAgICB0aGlzLndyaXRlQm9vbGVhbih0cnVlKTsgLy8gVXNlIGNsaWVudCBzaWRlIGNodW5rIGdlbmVyYXRpb25cbiAgICAgICAgdGhpcy53cml0ZUJ5dGUoMCk7IC8vIEJsb2NrIE5FVCBJRHMgYXJlIGhhc2hlc1xuICAgICAgICB0aGlzLndyaXRlQnl0ZSgwKTsgLy8gRGlzYWJsZSBjbGllbnQgYXVkaW9cbiAgICB9XG5cbiAgICAvKiBwcml2YXRlIGdlbmVyYXRlSXRlbVBhbGV0dGUoKTogQnVmZmVyIHtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IEJpbmFyeVN0cmVhbSgpO1xuICAgICAgICBjb25zdCBpdGVtTWFwcGluZ3MgPSBPYmplY3QuZW50cmllcyhpdGVtX2lkX21hcCk7XG4gICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVmFySW50KGl0ZW1NYXBwaW5ncy5sZW5ndGgpO1xuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBkYXRhXSBvZiBpdGVtTWFwcGluZ3MpIHtcbiAgICAgICAgICAgIE5ldHdvcmtVdGlsLndyaXRlU3RyaW5nKHN0cmVhbSwgbmFtZSk7XG4gICAgICAgICAgICBzdHJlYW0ud3JpdGVTaG9ydExFKChkYXRhIGFzIGFueSkucnVudGltZV9pZCBhcyBudW1iZXIpO1xuICAgICAgICAgICAgc3RyZWFtLndyaXRlQnl0ZSgwKTsgLy8gdW5rbm93blxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJlYW0uZ2V0QnVmZmVyKCk7XG4gICAgfSAqL1xufVxuIl0sIm5hbWVzIjpbIkRhdGFQYWNrZXQiLCJJZGVudGlmaWVycyIsIlZlY3RvcjMiLCJOZXR3b3JrVXRpbCIsIkJpbmFyeVN0cmVhbSIsIm5idCIsIk5CVFdyaXRlciIsIk5CVFRhZ0NvbXBvdW5kIiwiVVVJRCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQVNBLE1BQXFCLHdCQUF3QkEsaUNBQVcsQ0FBQTtBQUFBLEVBQ3BELE9BQWMsUUFBUUMsMkJBQVksQ0FBQSxlQUFBO0FBQUEsRUFFM0IsUUFBQTtBQUFBLEVBQ0EsZUFBQTtBQUFBLEVBQ0EsUUFBQTtBQUFBLEVBQ0EsZUFBMEIsR0FBQSxDQUFBO0FBQUEsRUFFMUIsU0FBcUIsR0FBQSxJQUFJQyxZQUFRLENBQUEsQ0FBQSxFQUFHLEdBQUcsQ0FBQyxDQUFBO0FBQUEsRUFDeEMsS0FBZ0IsR0FBQSxDQUFBO0FBQUEsRUFDaEIsR0FBYyxHQUFBLENBQUE7QUFBQSxFQUVkLGdCQUFBO0FBQUEsRUFDQSxlQUFBO0FBQUEsRUFDQSxrQkFBQTtBQUFBLEVBQ0EsT0FBQTtBQUFBLEVBQ0EsU0FBQTtBQUFBLEVBQ0EsSUFBQTtBQUFBLEVBQ0EsSUFBZSxHQUFBLENBQUE7QUFBQSxFQUNmLEtBQWdCLEdBQUEsQ0FBQTtBQUFBLEVBRWhCLGFBQUE7QUFBQSxFQUVBLFNBQUE7QUFBQTtBQUFBLEVBR1AsT0FBYyxhQUErQixHQUFBLElBQUE7QUFBQSxFQUV0QyxhQUFzQixHQUFBO0FBQ3pCLElBQUssSUFBQSxDQUFBLFlBQUEsQ0FBYSxLQUFLLFFBQVEsQ0FBQTtBQUMvQixJQUFLLElBQUEsQ0FBQSxvQkFBQSxDQUFxQixLQUFLLGVBQWUsQ0FBQTtBQUU5QyxJQUFLLElBQUEsQ0FBQSxXQUFBLENBQVksS0FBSyxRQUFRLENBQUE7QUFFOUIsSUFBWUMsK0JBQUEsQ0FBQSxZQUFBLENBQWEsSUFBTSxFQUFBLElBQUEsQ0FBSyxTQUFTLENBQUE7QUFDN0MsSUFBSyxJQUFBLENBQUEsWUFBQSxDQUFhLEtBQUssS0FBSyxDQUFBO0FB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