@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
142 lines (139 loc) • 22.4 kB
JavaScript
import { NetworkUtil } from '../NetworkUtil.es.js';
import Identifiers from '../Identifiers.es.js';
import DataPacket from './DataPacket.es.js';
class AvailableCommandsPacket extends DataPacket {
static NetID = Identifiers.AvailableCommandsPacket;
ARG_FLAG_VALID = 1048576;
ARG_FLAG_INT = 1;
ARG_FLAG_FLOAT = 3;
ARG_TYPE_WILDCARD_INT = 5;
ARG_TYPE_STRING = 56;
ARG_TYPE_INT_POSITION = 64;
ARG_TYPE_POSITION = 65;
ARG_FLAG_ENUM = 2097152;
ARG_FLAG_POSTFIX = 16777216;
ARG_FLAG_SOFT_ENUM = 67108864;
commandData = [];
hardcodedEnums = [];
softEnums = [];
enumConstraints = [];
encodePayload() {
const enumValueIndexes = /* @__PURE__ */ new Map();
const postfixIndexes = /* @__PURE__ */ new Map();
const enums = [];
const enumIndexes = /* @__PURE__ */ new Map();
const softEnumIndexes = /* @__PURE__ */ new Map();
const appendEnum = (_enum) => {
const { name, soft, values } = _enum;
if (soft) {
if (!softEnumIndexes.has(name)) {
softEnumIndexes.set(name, softEnumIndexes.size).get(name);
}
return;
}
values.forEach((value) => {
if (!enumValueIndexes.has(value)) {
enumValueIndexes.set(value, enumValueIndexes.size);
}
});
if (!enumIndexes.has(name)) {
const index = enumIndexes.set(name, enumIndexes.size).get(name);
enums[index] = _enum;
}
};
this.hardcodedEnums.forEach((e) => appendEnum(e));
this.softEnums.forEach((e) => appendEnum(e));
this.commandData.forEach((commandData) => {
if (commandData.aliases) {
appendEnum(commandData.aliases);
}
commandData.overloads.forEach((overload) => {
overload.forEach((parameter) => {
if (parameter.enum) {
appendEnum(parameter.enum);
}
if (parameter.postfix) {
if (!postfixIndexes.has(parameter.postfix)) {
postfixIndexes.set(parameter.postfix, postfixIndexes.size);
}
}
});
});
});
this.writeUnsignedVarInt(enumValueIndexes.size);
enumValueIndexes.forEach((_index, enumValue) => {
NetworkUtil.writeString(this, enumValue);
});
this.writeUnsignedVarInt(0);
this.writeUnsignedVarInt(postfixIndexes.size);
postfixIndexes.forEach((_index, postfix) => {
NetworkUtil.writeString(this, postfix);
});
this.writeUnsignedVarInt(enums.length);
enums.forEach((_enum) => {
this.writeEnum(_enum, enumValueIndexes);
});
this.writeUnsignedVarInt(0);
this.writeUnsignedVarInt(this.commandData.length);
this.commandData.forEach((data) => {
this.writeCommandData(data, enumIndexes, postfixIndexes);
});
this.writeUnsignedVarInt(this.softEnums.length);
this.softEnums.forEach((_enum) => {
this.writeSoftEnum(_enum);
});
this.writeUnsignedVarInt(this.enumConstraints.length);
this.enumConstraints.forEach((constraint) => {
this.writeEnumConstraint(constraint, enumIndexes, enumValueIndexes);
});
}
writeEnum({ name, values }, enumValueMap) {
NetworkUtil.writeString(this, name);
this.writeUnsignedVarInt(values.length);
const listSize = enumValueMap.size;
values.forEach((value) => {
const index = enumValueMap.get(value) ?? -1;
if (index === -1) return;
this.writeEnumValueIndex(index, listSize);
});
}
writeEnumValueIndex(index, valueCount) {
if (valueCount < 256) {
this.writeByte(index);
} else if (valueCount < 65536) {
this.writeUnsignedShortLE(index);
} else {
this.writeUnsignedIntLE(index);
}
}
writeCommandData(data, enumIndexes, _postfixIndexes) {
NetworkUtil.writeString(this, data.commandName);
NetworkUtil.writeString(this, data.commandDescription);
this.writeShortLE(data.flags);
this.writeByte(data.permission);
if (data.aliases !== null) {
this.writeIntLE(enumIndexes.get(data.aliases.name) ?? -1);
} else {
this.writeIntLE(-1);
}
this.writeUnsignedVarInt(0);
this.writeUnsignedVarInt(0);
}
writeSoftEnum(_enum) {
NetworkUtil.writeString(this, _enum.name);
this.writeUnsignedVarInt(_enum.values.length);
_enum.values.forEach((value) => {
NetworkUtil.writeString(this, value);
});
}
writeEnumConstraint(constraint, enumIndexes, enumValueIndexes) {
this.writeIntLE(enumValueIndexes.get(constraint.getAffectedValue()) ?? 0);
this.writeIntLE(enumIndexes.get(constraint.getEnum().name) ?? 0);
this.writeUnsignedVarInt(constraint.getConstraints().length);
constraint.getConstraints().forEach((v) => {
this.writeByte(v);
});
}
}
export { AvailableCommandsPacket as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZhaWxhYmxlQ29tbWFuZHNQYWNrZXQuZXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9uZXR3b3JrL3BhY2tldC9BdmFpbGFibGVDb21tYW5kc1BhY2tldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZXR3b3JrVXRpbCB9IGZyb20gJy4uLy4uL25ldHdvcmsvTmV0d29ya1V0aWwnO1xuaW1wb3J0IElkZW50aWZpZXJzIGZyb20gJy4uL0lkZW50aWZpZXJzJztcbmltcG9ydCB0eXBlIENvbW1hbmREYXRhIGZyb20gJy4uL3R5cGUvQ29tbWFuZERhdGEnO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kRW51bSB9IGZyb20gJy4uL3R5cGUvQ29tbWFuZEVudW0nO1xuaW1wb3J0IHR5cGUgQ29tbWFuZEVudW1Db25zdHJhaW50IGZyb20gJy4uL3R5cGUvQ29tbWFuZEVudW1Db25zdHJhaW50JztcbmltcG9ydCBEYXRhUGFja2V0IGZyb20gJy4vRGF0YVBhY2tldCc7XG5cbi8qKlxuICogQXZhaWxhYmxlQ29tbWFuZHNQYWNrZXQgaXMgc2VudCBieSB0aGUgc2VydmVyIHRvIHRoZSBjbGllbnQgdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCBhdmFpbGFibGUgY29tbWFuZHMuXG4gKiBAVE9ETzogQXJndW1lbnQgdHlwZXMgYXJlIG5vdCBpbXBsZW1lbnRlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXZhaWxhYmxlQ29tbWFuZHNQYWNrZXQgZXh0ZW5kcyBEYXRhUGFja2V0IHtcbiAgICBwdWJsaWMgc3RhdGljIE5ldElEID0gSWRlbnRpZmllcnMuQXZhaWxhYmxlQ29tbWFuZHNQYWNrZXQ7XG5cbiAgICBwdWJsaWMgQVJHX0ZMQUdfVkFMSUQgPSAweDEwMDAwMDtcbiAgICBwdWJsaWMgQVJHX0ZMQUdfSU5UID0gMTtcbiAgICBwdWJsaWMgQVJHX0ZMQUdfRkxPQVQgPSAzO1xuICAgIHB1YmxpYyBBUkdfVFlQRV9XSUxEQ0FSRF9JTlQgPSA1O1xuICAgIHB1YmxpYyBBUkdfVFlQRV9TVFJJTkcgPSA1NjtcbiAgICBwdWJsaWMgQVJHX1RZUEVfSU5UX1BPU0lUSU9OID0gNjQ7XG4gICAgcHVibGljIEFSR19UWVBFX1BPU0lUSU9OID0gNjU7XG4gICAgcHVibGljIEFSR19GTEFHX0VOVU0gPSAweDIwMDAwMDtcbiAgICBwdWJsaWMgQVJHX0ZMQUdfUE9TVEZJWCA9IDB4MTAwMDAwMDtcbiAgICBwdWJsaWMgQVJHX0ZMQUdfU09GVF9FTlVNID0gMHg0MDAwMDAwO1xuXG4gICAgcHVibGljIGNvbW1hbmREYXRhOiBDb21tYW5kRGF0YVtdID0gW107XG4gICAgcHVibGljIGhhcmRjb2RlZEVudW1zOiBDb21tYW5kRW51bVtdID0gW107XG4gICAgcHVibGljIHNvZnRFbnVtczogQ29tbWFuZEVudW1bXSA9IFtdO1xuICAgIHB1YmxpYyBlbnVtQ29uc3RyYWludHM6IENvbW1hbmRFbnVtQ29uc3RyYWludFtdID0gW107XG5cbiAgICBwdWJsaWMgZW5jb2RlUGF5bG9hZCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZW51bVZhbHVlSW5kZXhlczogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcbiAgICAgICAgY29uc3QgcG9zdGZpeEluZGV4ZXM6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG4gICAgICAgIGNvbnN0IGVudW1zOiBDb21tYW5kRW51bVtdID0gW107XG4gICAgICAgIGNvbnN0IGVudW1JbmRleGVzOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgICAgICBjb25zdCBzb2Z0RW51bXM6IENvbW1hbmRFbnVtW10gPSBbXTtcbiAgICAgICAgY29uc3Qgc29mdEVudW1JbmRleGVzOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuXG4gICAgICAgIGNvbnN0IGFwcGVuZEVudW0gPSAoX2VudW06IENvbW1hbmRFbnVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWUsIHNvZnQsIHZhbHVlcyB9ID0gX2VudW07XG5cbiAgICAgICAgICAgIGlmIChzb2Z0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzb2Z0RW51bUluZGV4ZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gc29mdEVudW1JbmRleGVzLnNldChuYW1lLCBzb2Z0RW51bUluZGV4ZXMuc2l6ZSkuZ2V0KG5hbWUpITtcbiAgICAgICAgICAgICAgICAgICAgc29mdEVudW1zW2luZGV4XSA9IF9lbnVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZW51bVZhbHVlSW5kZXhlcy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVudW1WYWx1ZUluZGV4ZXMuc2V0KHZhbHVlLCBlbnVtVmFsdWVJbmRleGVzLnNpemUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFlbnVtSW5kZXhlcy5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGVudW1JbmRleGVzLnNldChuYW1lLCBlbnVtSW5kZXhlcy5zaXplKS5nZXQobmFtZSkhO1xuICAgICAgICAgICAgICAgIGVudW1zW2luZGV4XSA9IF9lbnVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFyZGNvZGVkRW51bXMuZm9yRWFjaCgoZSkgPT4gYXBwZW5kRW51bShlKSk7XG4gICAgICAgIHRoaXMuc29mdEVudW1zLmZvckVhY2goKGUpID0+IGFwcGVuZEVudW0oZSkpO1xuXG4gICAgICAgIHRoaXMuY29tbWFuZERhdGEuZm9yRWFjaCgoY29tbWFuZERhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21tYW5kRGF0YS5hbGlhc2VzKSB7XG4gICAgICAgICAgICAgICAgYXBwZW5kRW51bShjb21tYW5kRGF0YS5hbGlhc2VzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29tbWFuZERhdGEub3ZlcmxvYWRzLmZvckVhY2goKG92ZXJsb2FkKSA9PiB7XG4gICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9yRWFjaCgocGFyYW1ldGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIuZW51bSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kRW51bShwYXJhbWV0ZXIuZW51bSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyLnBvc3RmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcG9zdGZpeEluZGV4ZXMuaGFzKHBhcmFtZXRlci5wb3N0Zml4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RmaXhJbmRleGVzLnNldChwYXJhbWV0ZXIucG9zdGZpeCwgcG9zdGZpeEluZGV4ZXMuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLndyaXRlVW5zaWduZWRWYXJJbnQoZW51bVZhbHVlSW5kZXhlcy5zaXplKTtcbiAgICAgICAgZW51bVZhbHVlSW5kZXhlcy5mb3JFYWNoKChfaW5kZXg6IG51bWJlciwgZW51bVZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIE5ldHdvcmtVdGlsLndyaXRlU3RyaW5nKHRoaXMsIGVudW1WYWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFZhckludCgwKTsgLy8gY2hhaW5lZFN1YkNvbW1hbmRWYWx1ZU5hbWVJbmRleGVzXG5cbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkVmFySW50KHBvc3RmaXhJbmRleGVzLnNpemUpO1xuICAgICAgICBwb3N0Zml4SW5kZXhlcy5mb3JFYWNoKChfaW5kZXg6IG51bWJlciwgcG9zdGZpeDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBOZXR3b3JrVXRpbC53cml0ZVN0cmluZyh0aGlzLCBwb3N0Zml4KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkVmFySW50KGVudW1zLmxlbmd0aCk7XG4gICAgICAgIGVudW1zLmZvckVhY2goKF9lbnVtOiBDb21tYW5kRW51bSkgPT4ge1xuICAgICAgICAgICAgdGhpcy53cml0ZUVudW0oX2VudW0sIGVudW1WYWx1ZUluZGV4ZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLndyaXRlVW5zaWduZWRWYXJJbnQoMCk7IC8vIGFsbENoYWluZWRTdWJDb21tYW5kRGF0YVxuXG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFZhckludCh0aGlzLmNvbW1hbmREYXRhLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuY29tbWFuZERhdGEuZm9yRWFjaCgoZGF0YTogQ29tbWFuZERhdGEpID0+IHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVDb21tYW5kRGF0YShkYXRhLCBlbnVtSW5kZXhlcywgcG9zdGZpeEluZGV4ZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLndyaXRlVW5zaWduZWRWYXJJbnQodGhpcy5zb2Z0RW51bXMubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zb2Z0RW51bXMuZm9yRWFjaCgoX2VudW06IENvbW1hbmRFbnVtKSA9PiB7XG4gICAgICAgICAgICB0aGlzLndyaXRlU29mdEVudW0oX2VudW0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLndyaXRlVW5zaWduZWRWYXJJbnQodGhpcy5lbnVtQ29uc3RyYWludHMubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5lbnVtQ29uc3RyYWludHMuZm9yRWFjaCgoY29uc3RyYWludDogQ29tbWFuZEVudW1Db25zdHJhaW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLndyaXRlRW51bUNvbnN0cmFpbnQoY29uc3RyYWludCwgZW51bUluZGV4ZXMsIGVudW1WYWx1ZUluZGV4ZXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHdyaXRlRW51bSh7IG5hbWUsIHZhbHVlcyB9OiBDb21tYW5kRW51bSwgZW51bVZhbHVlTWFwOiBNYXA8c3RyaW5nLCBudW1iZXI+KTogdm9pZCB7XG4gICAgICAgIE5ldHdvcmtVdGlsLndyaXRlU3RyaW5nKHRoaXMsIG5hbWUpO1xuICAgICAgICB0aGlzLndyaXRlVW5zaWduZWRWYXJJbnQodmFsdWVzLmxlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgbGlzdFNpemUgPSBlbnVtVmFsdWVNYXAuc2l6ZTtcbiAgICAgICAgdmFsdWVzLmZvckVhY2goKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZW51bVZhbHVlTWFwLmdldCh2YWx1ZSkgPz8gLTE7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLndyaXRlRW51bVZhbHVlSW5kZXgoaW5kZXgsIGxpc3RTaXplKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3cml0ZUVudW1WYWx1ZUluZGV4KGluZGV4OiBudW1iZXIsIHZhbHVlQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWVDb3VudCA8IDI1Nikge1xuICAgICAgICAgICAgdGhpcy53cml0ZUJ5dGUoaW5kZXgpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlQ291bnQgPCA2NTUzNikge1xuICAgICAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkU2hvcnRMRShpbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlVW5zaWduZWRJbnRMRShpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHdyaXRlQ29tbWFuZERhdGEoXG4gICAgICAgIGRhdGE6IENvbW1hbmREYXRhLFxuICAgICAgICBlbnVtSW5kZXhlczogTWFwPHN0cmluZywgbnVtYmVyPixcbiAgICAgICAgX3Bvc3RmaXhJbmRleGVzOiBNYXA8c3RyaW5nLCBudW1iZXI+XG4gICAgKTogdm9pZCB7XG4gICAgICAgIE5ldHdvcmtVdGlsLndyaXRlU3RyaW5nKHRoaXMsIGRhdGEuY29tbWFuZE5hbWUpO1xuICAgICAgICBOZXR3b3JrVXRpbC53cml0ZVN0cmluZyh0aGlzLCBkYXRhLmNvbW1hbmREZXNjcmlwdGlvbik7XG4gICAgICAgIHRoaXMud3JpdGVTaG9ydExFKGRhdGEuZmxhZ3MpO1xuICAgICAgICB0aGlzLndyaXRlQnl0ZShkYXRhLnBlcm1pc3Npb24pO1xuXG4gICAgICAgIGlmIChkYXRhLmFsaWFzZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVJbnRMRShlbnVtSW5kZXhlcy5nZXQoZGF0YS5hbGlhc2VzLm5hbWUpID8/IC0xKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVJbnRMRSgtMSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndyaXRlVW5zaWduZWRWYXJJbnQoMCk7IC8vIGNoYWluZWRTdWJDb21tYW5kRGF0YVxuXG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFZhckludCgwKTtcbiAgICAgICAgLyp0aGlzLndyaXRlVW5zaWduZWRWYXJJbnQoZGF0YS5vdmVybG9hZHMubGVuZ3RoKTtcbiAgICAgICAgZGF0YS5vdmVybG9hZHMuZm9yRWFjaCgob3ZlcmxvYWQpID0+IHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFZhckludChvdmVybG9hZC5sZW5ndGgpO1xuICAgICAgICAgICAgb3ZlcmxvYWQuZm9yRWFjaCgocGFyYW1ldGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgTmV0d29ya1V0aWwud3JpdGVTdHJpbmcodGhpcywgcGFyYW1ldGVyLnBhcmFtTmFtZSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IHBhcmFtZXRlci5wYXJhbVR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5lbnVtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIuZW51bS5zb2Z0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkFSR19GTEFHX1NPRlRfRU5VTSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5BUkdfRkxBR19WQUxJRCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVudW1JbmRleGVzLmdldChwYXJhbWV0ZXIuZW51bS5uYW1lKSA/PyAtMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gdGhpcy5BUkdfRkxBR19FTlVNIHwgdGhpcy5BUkdfRkxBR19WQUxJRCB8IChlbnVtSW5kZXhlcy5nZXQocGFyYW1ldGVyLmVudW0ubmFtZSkgPz8gLTEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbWV0ZXIucG9zdGZpeCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBwb3N0Zml4SW5kZXhlcy5nZXQocGFyYW1ldGVyLnBvc3RmaXgpID8/IC0xO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAtMSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB0eXBlID0gdGhpcy5BUkdfRkxBR19QT1NURklYIHwga2V5O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMud3JpdGVJbnRMRSh0eXBlKTtcbiAgICAgICAgICAgICAgICB0aGlzLndyaXRlQm9vbGVhbihwYXJhbWV0ZXIuaXNPcHRpb25hbCk7XG4gICAgICAgICAgICAgICAgdGhpcy53cml0ZUJ5dGUocGFyYW1ldGVyLmZsYWdzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTsqL1xuICAgIH1cblxuICAgIHByaXZhdGUgd3JpdGVTb2Z0RW51bShfZW51bTogQ29tbWFuZEVudW0pOiB2b2lkIHtcbiAgICAgICAgTmV0d29ya1V0aWwud3JpdGVTdHJpbmcodGhpcywgX2VudW0ubmFtZSk7XG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFZhckludChfZW51bS52YWx1ZXMubGVuZ3RoKTtcbiAgICAgICAgX2VudW0udmFsdWVzLmZvckVhY2goKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIE5ldHdvcmtVdGlsLndyaXRlU3RyaW5nKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3cml0ZUVudW1Db25zdHJhaW50KFxuICAgICAgICBjb25zdHJhaW50OiBDb21tYW5kRW51bUNvbnN0cmFpbnQsXG4gICAgICAgIGVudW1JbmRleGVzOiBNYXA8c3RyaW5nLCBudW1iZXI+LFxuICAgICAgICBlbnVtVmFsdWVJbmRleGVzOiBNYXA8c3RyaW5nLCBudW1iZXI+XG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRoaXMud3JpdGVJbnRMRShlbnVtVmFsdWVJbmRleGVzLmdldChjb25zdHJhaW50LmdldEFmZmVjdGVkVmFsdWUoKSkgPz8gMCk7XG4gICAgICAgIHRoaXMud3JpdGVJbnRMRShlbnVtSW5kZXhlcy5nZXQoY29uc3RyYWludC5nZXRFbnVtKCkubmFtZSkgPz8gMCk7XG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFZhckludChjb25zdHJhaW50LmdldENvbnN0cmFpbnRzKCkubGVuZ3RoKTtcbiAgICAgICAgY29uc3RyYWludC5nZXRDb25zdHJhaW50cygpLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVCeXRlKHYpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQVdBLE1BQXFCLGdDQUFnQyxVQUFXLENBQUE7QUFBQSxFQUM1RCxPQUFjLFFBQVEsV0FBWSxDQUFBLHVCQUFBO0FBQUEsRUFFM0IsY0FBaUIsR0FBQSxPQUFBO0FBQUEsRUFDakIsWUFBZSxHQUFBLENBQUE7QUFBQSxFQUNmLGNBQWlCLEdBQUEsQ0FBQTtBQUFBLEVBQ2pCLHFCQUF3QixHQUFBLENBQUE7QUFBQSxFQUN4QixlQUFrQixHQUFBLEVBQUE7QUFBQSxFQUNsQixxQkFBd0IsR0FBQSxFQUFBO0FBQUEsRUFDeEIsaUJBQW9CLEdBQUEsRUFBQTtBQUFBLEVBQ3BCLGFBQWdCLEdBQUEsT0FBQTtBQUFBLEVBQ2hCLGdCQUFtQixHQUFBLFFBQUE7QUFBQSxFQUNuQixrQkFBcUIsR0FBQSxRQUFBO0FBQUEsRUFFckIsY0FBNkIsRUFBQztBQUFBLEVBQzlCLGlCQUFnQyxFQUFDO0FBQUEsRUFDakMsWUFBMkIsRUFBQztBQUFBLEVBQzVCLGtCQUEyQyxFQUFDO0FBQUEsRUFFNUMsYUFBc0IsR0FBQTtBQUN6QixJQUFNLE1BQUEsZ0JBQUEsdUJBQTRDLEdBQUksRUFBQTtBQUN0RCxJQUFNLE1BQUEsY0FBQSx1QkFBMEMsR0FBSSxFQUFBO0FBQ3BELElBQUEsTUFBTSxRQUF1QixFQUFDO0FBQzlCLElBQU0sTUFBQSxXQUFBLHVCQUF1QyxHQUFJLEVBQUE7QUFFakQsSUFBTSxNQUFBLGVBQUEsdUJBQTJDLEdBQUksRUFBQTtBQUVyRCxJQUFNLE1BQUEsVUFBQSxHQUFhLENBQUMsS0FBdUIsS0FBQTtBQUN2QyxNQUFBLE1BQU0sRUFBRSxJQUFBLEVBQU0sSUFBTSxFQUFBLE1BQUEsRUFBVyxHQUFBLEtBQUE7QUFFL0IsTUFBQSxJQUFJLElBQU0sRUFBQTtBQUNOLFFBQUEsSUFBSSxDQUFDLGVBQUEsQ0FBZ0IsR0FBSSxDQUFBLElBQUksQ0FBRyxFQUFBO0FB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